Re-add the Disk Manipulator
This commit is contained in:
@@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.container.slot.CrafterManagerSlot;
|
|||||||
import com.raoulvdberge.refinedstorage.render.BakedModelOverrideRegistry;
|
import com.raoulvdberge.refinedstorage.render.BakedModelOverrideRegistry;
|
||||||
import com.raoulvdberge.refinedstorage.render.color.PatternItemColor;
|
import com.raoulvdberge.refinedstorage.render.color.PatternItemColor;
|
||||||
import com.raoulvdberge.refinedstorage.render.model.DiskDriveBakedModel;
|
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.FullbrightBakedModel;
|
||||||
import com.raoulvdberge.refinedstorage.render.model.PatternBakedModel;
|
import com.raoulvdberge.refinedstorage.render.model.PatternBakedModel;
|
||||||
import com.raoulvdberge.refinedstorage.render.tesr.StorageMonitorTileRenderer;
|
import com.raoulvdberge.refinedstorage.render.tesr.StorageMonitorTileRenderer;
|
||||||
@@ -74,6 +75,19 @@ public class ClientSetup {
|
|||||||
new ResourceLocation(RS.ID, "block/disks/leds")
|
new ResourceLocation(RS.ID, "block/disks/leds")
|
||||||
).disableCache());
|
).disableCache());
|
||||||
|
|
||||||
|
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "disk_manipulator"), (base, registry) -> new FullbrightBakedModel(
|
||||||
|
new DiskManipulatorBakedModel(
|
||||||
|
registry.get(new ResourceLocation(RS.ID + ":block/disk_manipulator_connected")),
|
||||||
|
registry.get(new ResourceLocation(RS.ID + ":block/disk_manipulator_disconnected")),
|
||||||
|
registry.get(new ResourceLocation(RS.ID + ":block/disks/disk")),
|
||||||
|
registry.get(new ResourceLocation(RS.ID + ":block/disks/disk_near_capacity")),
|
||||||
|
registry.get(new ResourceLocation(RS.ID + ":block/disks/disk_full")),
|
||||||
|
registry.get(new ResourceLocation(RS.ID + ":block/disks/disk_disconnected"))
|
||||||
|
),
|
||||||
|
new ResourceLocation(RS.ID, "block/disk_manipulator/cutouts/connected"),
|
||||||
|
new ResourceLocation(RS.ID, "block/disks/leds")
|
||||||
|
).disableCache());
|
||||||
|
|
||||||
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base));
|
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base));
|
||||||
|
|
||||||
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/disk"));
|
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/disk"));
|
||||||
@@ -81,6 +95,9 @@ public class ClientSetup {
|
|||||||
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/disk_full"));
|
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/disk_full"));
|
||||||
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/disk_disconnected"));
|
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/disk_disconnected"));
|
||||||
|
|
||||||
|
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disk_manipulator_disconnected"));
|
||||||
|
ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disk_manipulator_connected"));
|
||||||
|
|
||||||
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetup);
|
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetup);
|
||||||
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelBake);
|
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelBake);
|
||||||
|
|
||||||
@@ -136,6 +153,7 @@ public class ClientSetup {
|
|||||||
ScreenManager.registerFactory(RSContainers.STORAGE_MONITOR, StorageMonitorScreen::new);
|
ScreenManager.registerFactory(RSContainers.STORAGE_MONITOR, StorageMonitorScreen::new);
|
||||||
ScreenManager.registerFactory(RSContainers.CONSTRUCTOR, ConstructorScreen::new);
|
ScreenManager.registerFactory(RSContainers.CONSTRUCTOR, ConstructorScreen::new);
|
||||||
ScreenManager.registerFactory(RSContainers.DESTRUCTOR, DestructorScreen::new);
|
ScreenManager.registerFactory(RSContainers.DESTRUCTOR, DestructorScreen::new);
|
||||||
|
ScreenManager.registerFactory(RSContainers.DISK_MANIPULATOR, DiskManipulatorScreen::new);
|
||||||
|
|
||||||
ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_GRID);
|
ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_GRID);
|
||||||
ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_FLUID_GRID);
|
ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_FLUID_GRID);
|
||||||
|
@@ -12,6 +12,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.grid.factory.WirelessFlui
|
|||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.factory.WirelessGridGridFactory;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.factory.WirelessGridGridFactory;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.*;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.*;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.DiskDriveNetworkNode;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.DiskDriveNetworkNode;
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskmanipulator.DiskManipulatorNetworkNode;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.storage.FluidStorageNetworkNode;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.storage.FluidStorageNetworkNode;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.storage.StorageNetworkNode;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.storage.StorageNetworkNode;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.FluidStorageType;
|
import com.raoulvdberge.refinedstorage.apiimpl.storage.FluidStorageType;
|
||||||
@@ -132,6 +133,7 @@ public final class RS {
|
|||||||
API.instance().getNetworkNodeRegistry().add(StorageMonitorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new StorageMonitorNetworkNode(world, pos)));
|
API.instance().getNetworkNodeRegistry().add(StorageMonitorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new StorageMonitorNetworkNode(world, pos)));
|
||||||
API.instance().getNetworkNodeRegistry().add(ConstructorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new ConstructorNetworkNode(world, pos)));
|
API.instance().getNetworkNodeRegistry().add(ConstructorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new ConstructorNetworkNode(world, pos)));
|
||||||
API.instance().getNetworkNodeRegistry().add(DestructorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DestructorNetworkNode(world, pos)));
|
API.instance().getNetworkNodeRegistry().add(DestructorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DestructorNetworkNode(world, pos)));
|
||||||
|
API.instance().getNetworkNodeRegistry().add(DiskManipulatorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DiskManipulatorNetworkNode(world, pos)));
|
||||||
|
|
||||||
API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory());
|
API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory());
|
||||||
API.instance().getGridManager().add(WirelessGridGridFactory.ID, new WirelessGridGridFactory());
|
API.instance().getGridManager().add(WirelessGridGridFactory.ID, new WirelessGridGridFactory());
|
||||||
@@ -189,6 +191,7 @@ public final class RS {
|
|||||||
e.getRegistry().register(new StorageMonitorBlock());
|
e.getRegistry().register(new StorageMonitorBlock());
|
||||||
e.getRegistry().register(new ConstructorBlock());
|
e.getRegistry().register(new ConstructorBlock());
|
||||||
e.getRegistry().register(new DestructorBlock());
|
e.getRegistry().register(new DestructorBlock());
|
||||||
|
e.getRegistry().register(new DiskManipulatorBlock());
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
@@ -228,6 +231,7 @@ public final class RS {
|
|||||||
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(StorageMonitorTile::new, RSBlocks.STORAGE_MONITOR).build(null).setRegistryName(RS.ID, "storage_monitor")));
|
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(StorageMonitorTile::new, RSBlocks.STORAGE_MONITOR).build(null).setRegistryName(RS.ID, "storage_monitor")));
|
||||||
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(ConstructorTile::new, RSBlocks.CONSTRUCTOR).build(null).setRegistryName(RS.ID, "constructor")));
|
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(ConstructorTile::new, RSBlocks.CONSTRUCTOR).build(null).setRegistryName(RS.ID, "constructor")));
|
||||||
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DestructorTile::new, RSBlocks.DESTRUCTOR).build(null).setRegistryName(RS.ID, "destructor")));
|
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DestructorTile::new, RSBlocks.DESTRUCTOR).build(null).setRegistryName(RS.ID, "destructor")));
|
||||||
|
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DiskManipulatorTile::new, RSBlocks.DISK_MANIPULATOR).build(null).setRegistryName(RS.ID, "disk_manipulator")));
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T extends TileEntity> TileEntityType<T> registerTileDataParameters(TileEntityType<T> t) {
|
private <T extends TileEntity> TileEntityType<T> registerTileDataParameters(TileEntityType<T> t) {
|
||||||
@@ -259,6 +263,7 @@ public final class RS {
|
|||||||
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<StorageMonitorContainer, StorageMonitorTile>((windowId, inv, tile) -> new StorageMonitorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "storage_monitor"));
|
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<StorageMonitorContainer, StorageMonitorTile>((windowId, inv, tile) -> new StorageMonitorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "storage_monitor"));
|
||||||
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<ConstructorContainer, ConstructorTile>((windowId, inv, tile) -> new ConstructorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "constructor"));
|
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<ConstructorContainer, ConstructorTile>((windowId, inv, tile) -> new ConstructorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "constructor"));
|
||||||
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<DestructorContainer, DestructorTile>((windowId, inv, tile) -> new DestructorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "destructor"));
|
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<DestructorContainer, DestructorTile>((windowId, inv, tile) -> new DestructorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "destructor"));
|
||||||
|
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<DiskManipulatorContainer, DiskManipulatorTile>((windowId, inv, tile) -> new DiskManipulatorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "disk_manipulator"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
@@ -340,6 +345,7 @@ public final class RS {
|
|||||||
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.STORAGE_MONITOR));
|
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.STORAGE_MONITOR));
|
||||||
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CONSTRUCTOR));
|
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CONSTRUCTOR));
|
||||||
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DESTRUCTOR));
|
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DESTRUCTOR));
|
||||||
|
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DISK_MANIPULATOR));
|
||||||
|
|
||||||
e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.NORMAL));
|
e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.NORMAL));
|
||||||
e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.CREATIVE));
|
e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.CREATIVE));
|
||||||
|
@@ -72,10 +72,11 @@ public final class RSBlocks {
|
|||||||
public static final ConstructorBlock CONSTRUCTOR = null;
|
public static final ConstructorBlock CONSTRUCTOR = null;
|
||||||
@ObjectHolder(RS.ID + ":destructor")
|
@ObjectHolder(RS.ID + ":destructor")
|
||||||
public static final DestructorBlock DESTRUCTOR = null;
|
public static final DestructorBlock DESTRUCTOR = null;
|
||||||
|
@ObjectHolder(RS.ID + ":disk_manipulator")
|
||||||
|
public static final DiskManipulatorBlock DISK_MANIPULATOR = null;
|
||||||
|
|
||||||
public static final BlockCraftingMonitor CRAFTING_MONITOR = new BlockCraftingMonitor();
|
public static final BlockCraftingMonitor CRAFTING_MONITOR = new BlockCraftingMonitor();
|
||||||
public static final BlockCrafter CRAFTER = new BlockCrafter();
|
public static final BlockCrafter CRAFTER = new BlockCrafter();
|
||||||
public static final BlockDiskManipulator DISK_MANIPULATOR = new BlockDiskManipulator();
|
|
||||||
public static final BlockPortableGrid PORTABLE_GRID = new BlockPortableGrid();
|
public static final BlockPortableGrid PORTABLE_GRID = new BlockPortableGrid();
|
||||||
public static final BlockCrafterManager CRAFTER_MANAGER = new BlockCrafterManager();
|
public static final BlockCrafterManager CRAFTER_MANAGER = new BlockCrafterManager();
|
||||||
}
|
}
|
@@ -43,6 +43,8 @@ public final class RSContainers {
|
|||||||
public static final ContainerType<ConstructorContainer> CONSTRUCTOR = null;
|
public static final ContainerType<ConstructorContainer> CONSTRUCTOR = null;
|
||||||
@ObjectHolder(RS.ID + ":destructor")
|
@ObjectHolder(RS.ID + ":destructor")
|
||||||
public static final ContainerType<DestructorContainer> DESTRUCTOR = null;
|
public static final ContainerType<DestructorContainer> DESTRUCTOR = null;
|
||||||
|
@ObjectHolder(RS.ID + ":disk_manipulator")
|
||||||
|
public static final ContainerType<DiskManipulatorContainer> DISK_MANIPULATOR = null;
|
||||||
|
|
||||||
//@ObjectHolder(RS.ID + ":crafter")
|
//@ObjectHolder(RS.ID + ":crafter")
|
||||||
public static final ContainerType<CrafterContainer> CRAFTER = null;
|
public static final ContainerType<CrafterContainer> CRAFTER = null;
|
||||||
@@ -50,6 +52,4 @@ public final class RSContainers {
|
|||||||
public static final ContainerType<CrafterContainer> CRAFTER_MANAGER = null;
|
public static final ContainerType<CrafterContainer> CRAFTER_MANAGER = null;
|
||||||
//@ObjectHolder(RS.ID + ":crafting_monitor")
|
//@ObjectHolder(RS.ID + ":crafting_monitor")
|
||||||
public static final ContainerType<CraftingMonitorContainer> CRAFTING_MONITOR = null;
|
public static final ContainerType<CraftingMonitorContainer> CRAFTING_MONITOR = null;
|
||||||
//@ObjectHolder(RS.ID + ":disk_manipulator")
|
|
||||||
public static final ContainerType<DiskManipulatorContainer> DISK_MANIPULATOR = null;
|
|
||||||
}
|
}
|
||||||
|
@@ -6,7 +6,6 @@ public class RSOldConfig {
|
|||||||
public int crafterPerPatternUsage;
|
public int crafterPerPatternUsage;
|
||||||
public int craftingMonitorUsage;
|
public int craftingMonitorUsage;
|
||||||
public int crafterManagerUsage;
|
public int crafterManagerUsage;
|
||||||
public int diskManipulatorUsage;
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region Portable Grid
|
//region Portable Grid
|
||||||
@@ -42,7 +41,6 @@ public class RSOldConfig {
|
|||||||
crafterPerPatternUsage = config.getInt("crafterPerPattern", ENERGY, 1, 0, Integer.MAX_VALUE, "The additional energy used per Pattern in a Crafter");
|
crafterPerPatternUsage = config.getInt("crafterPerPattern", ENERGY, 1, 0, Integer.MAX_VALUE, "The additional energy used per Pattern in a Crafter");
|
||||||
craftingMonitorUsage = config.getInt("craftingMonitor", ENERGY, 2, 0, Integer.MAX_VALUE, "The energy used by Crafting Monitors");
|
craftingMonitorUsage = config.getInt("craftingMonitor", ENERGY, 2, 0, Integer.MAX_VALUE, "The energy used by Crafting Monitors");
|
||||||
crafterManagerUsage = config.getInt("crafterManager", ENERGY, 4, 0, Integer.MAX_VALUE, "The energy used by Crafter Managers");
|
crafterManagerUsage = config.getInt("crafterManager", ENERGY, 4, 0, Integer.MAX_VALUE, "The energy used by Crafter Managers");
|
||||||
diskManipulatorUsage = config.getInt("diskManipulator", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Disk Manipulators");
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region Portable Grid
|
//region Portable Grid
|
||||||
|
@@ -72,11 +72,11 @@ public class RSTiles {
|
|||||||
public static final TileEntityType<ConstructorTile> CONSTRUCTOR = null;
|
public static final TileEntityType<ConstructorTile> CONSTRUCTOR = null;
|
||||||
@ObjectHolder(RS.ID + ":destructor")
|
@ObjectHolder(RS.ID + ":destructor")
|
||||||
public static final TileEntityType<DestructorTile> DESTRUCTOR = null;
|
public static final TileEntityType<DestructorTile> DESTRUCTOR = null;
|
||||||
|
@ObjectHolder(RS.ID + ":disk_manipulator")
|
||||||
|
public static final TileEntityType<DiskManipulatorTile> DISK_MANIPULATOR = null;
|
||||||
|
|
||||||
//@ObjectHolder(RS.ID + ":portable_grid")
|
//@ObjectHolder(RS.ID + ":portable_grid")
|
||||||
public static final TileEntityType<TilePortableGrid> PORTABLE_GRID = null;
|
public static final TileEntityType<TilePortableGrid> PORTABLE_GRID = null;
|
||||||
//@ObjectHolder(RS.ID + ":disk_manipulator")
|
|
||||||
public static final TileEntityType<TileDiskManipulator> DISK_MANIPULATOR = null;
|
|
||||||
//@ObjectHolder(RS.ID + ":crafter")
|
//@ObjectHolder(RS.ID + ":crafter")
|
||||||
public static final TileEntityType<TileCrafter> CRAFTER = null;
|
public static final TileEntityType<TileCrafter> CRAFTER = null;
|
||||||
//@ObjectHolder(RS.ID + ":crafter_manager")
|
//@ObjectHolder(RS.ID + ":crafter_manager")
|
||||||
|
@@ -0,0 +1,21 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
||||||
|
|
||||||
|
public enum DiskState {
|
||||||
|
NONE,
|
||||||
|
NORMAL,
|
||||||
|
DISCONNECTED,
|
||||||
|
NEAR_CAPACITY,
|
||||||
|
FULL;
|
||||||
|
|
||||||
|
public static final int DISK_NEAR_CAPACITY_THRESHOLD = 75;
|
||||||
|
|
||||||
|
public static DiskState get(int stored, int capacity) {
|
||||||
|
if (stored == capacity) {
|
||||||
|
return FULL;
|
||||||
|
} else if ((int) ((float) stored / (float) capacity * 100F) >= DISK_NEAR_CAPACITY_THRESHOLD) {
|
||||||
|
return NEAR_CAPACITY;
|
||||||
|
} else {
|
||||||
|
return NORMAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -8,6 +8,7 @@ import com.raoulvdberge.refinedstorage.api.storage.IStorageProvider;
|
|||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskContainerContext;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskContainerContext;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.FluidStorageCache;
|
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.FluidStorageCache;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.ItemStorageCache;
|
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.ItemStorageCache;
|
||||||
@@ -34,26 +35,6 @@ import net.minecraftforge.items.IItemHandlerModifiable;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class DiskDriveNetworkNode extends NetworkNode implements IStorageProvider, IComparable, IWhitelistBlacklist, IPrioritizable, IType, IAccessType, IStorageDiskContainerContext {
|
public class DiskDriveNetworkNode extends NetworkNode implements IStorageProvider, IComparable, IWhitelistBlacklist, IPrioritizable, IType, IAccessType, IStorageDiskContainerContext {
|
||||||
public enum DiskState {
|
|
||||||
NONE,
|
|
||||||
NORMAL,
|
|
||||||
DISCONNECTED,
|
|
||||||
NEAR_CAPACITY,
|
|
||||||
FULL;
|
|
||||||
|
|
||||||
public static final int DISK_NEAR_CAPACITY_THRESHOLD = 75;
|
|
||||||
|
|
||||||
public static DiskState get(int stored, int capacity) {
|
|
||||||
if (stored == capacity) {
|
|
||||||
return FULL;
|
|
||||||
} else if ((int) ((float) stored / (float) capacity * 100F) >= DISK_NEAR_CAPACITY_THRESHOLD) {
|
|
||||||
return NEAR_CAPACITY;
|
|
||||||
} else {
|
|
||||||
return NORMAL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "disk_drive");
|
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "disk_drive");
|
||||||
|
|
||||||
private static final String NBT_PRIORITY = "Priority";
|
private static final String NBT_PRIORITY = "Priority";
|
||||||
|
@@ -5,6 +5,7 @@ import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
|
|||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskContainerContext;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskContainerContext;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskListener;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskListener;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
||||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
@@ -18,14 +19,14 @@ import java.util.Collection;
|
|||||||
public class FluidDriveWrapperStorageDisk implements IStorageDisk<FluidStack> {
|
public class FluidDriveWrapperStorageDisk implements IStorageDisk<FluidStack> {
|
||||||
private DiskDriveNetworkNode diskDrive;
|
private DiskDriveNetworkNode diskDrive;
|
||||||
private IStorageDisk<FluidStack> parent;
|
private IStorageDisk<FluidStack> parent;
|
||||||
private DiskDriveNetworkNode.DiskState lastState;
|
private DiskState lastState;
|
||||||
|
|
||||||
public FluidDriveWrapperStorageDisk(DiskDriveNetworkNode diskDrive, IStorageDisk<FluidStack> parent) {
|
public FluidDriveWrapperStorageDisk(DiskDriveNetworkNode diskDrive, IStorageDisk<FluidStack> parent) {
|
||||||
this.diskDrive = diskDrive;
|
this.diskDrive = diskDrive;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.setSettings(
|
this.setSettings(
|
||||||
() -> {
|
() -> {
|
||||||
DiskDriveNetworkNode.DiskState currentState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
DiskState currentState = DiskState.get(getStored(), getCapacity());
|
||||||
|
|
||||||
if (this.lastState != currentState) {
|
if (this.lastState != currentState) {
|
||||||
this.lastState = currentState;
|
this.lastState = currentState;
|
||||||
@@ -35,7 +36,7 @@ public class FluidDriveWrapperStorageDisk implements IStorageDisk<FluidStack> {
|
|||||||
},
|
},
|
||||||
diskDrive
|
diskDrive
|
||||||
);
|
);
|
||||||
this.lastState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
this.lastState = DiskState.get(getStored(), getCapacity());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -5,6 +5,7 @@ import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
|
|||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskContainerContext;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskContainerContext;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskListener;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskListener;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
@@ -18,14 +19,14 @@ import java.util.Collection;
|
|||||||
public class ItemDriveWrapperStorageDisk implements IStorageDisk<ItemStack> {
|
public class ItemDriveWrapperStorageDisk implements IStorageDisk<ItemStack> {
|
||||||
private DiskDriveNetworkNode diskDrive;
|
private DiskDriveNetworkNode diskDrive;
|
||||||
private IStorageDisk<ItemStack> parent;
|
private IStorageDisk<ItemStack> parent;
|
||||||
private DiskDriveNetworkNode.DiskState lastState;
|
private DiskState lastState;
|
||||||
|
|
||||||
public ItemDriveWrapperStorageDisk(DiskDriveNetworkNode diskDrive, IStorageDisk<ItemStack> parent) {
|
public ItemDriveWrapperStorageDisk(DiskDriveNetworkNode diskDrive, IStorageDisk<ItemStack> parent) {
|
||||||
this.diskDrive = diskDrive;
|
this.diskDrive = diskDrive;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.setSettings(
|
this.setSettings(
|
||||||
() -> {
|
() -> {
|
||||||
DiskDriveNetworkNode.DiskState currentState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
DiskState currentState = DiskState.get(getStored(), getCapacity());
|
||||||
|
|
||||||
if (this.lastState != currentState) {
|
if (this.lastState != currentState) {
|
||||||
this.lastState = currentState;
|
this.lastState = currentState;
|
||||||
@@ -35,7 +36,7 @@ public class ItemDriveWrapperStorageDisk implements IStorageDisk<ItemStack> {
|
|||||||
},
|
},
|
||||||
diskDrive
|
diskDrive
|
||||||
);
|
);
|
||||||
this.lastState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
this.lastState = DiskState.get(getStored(), getCapacity());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskContainerCon
|
|||||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.StackListEntry;
|
import com.raoulvdberge.refinedstorage.api.util.StackListEntry;
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
|
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
|
||||||
@@ -16,7 +17,7 @@ import com.raoulvdberge.refinedstorage.inventory.item.validator.StorageDiskItemV
|
|||||||
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
|
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
|
import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
|
||||||
import com.raoulvdberge.refinedstorage.item.UpgradeItem;
|
import com.raoulvdberge.refinedstorage.item.UpgradeItem;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator;
|
import com.raoulvdberge.refinedstorage.tile.DiskManipulatorTile;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
|
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
||||||
@@ -38,7 +39,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class NetworkNodeDiskManipulator extends NetworkNode implements IComparable, IWhitelistBlacklist, IType, IStorageDiskContainerContext {
|
public class DiskManipulatorNetworkNode extends NetworkNode implements IComparable, IWhitelistBlacklist, IType, IStorageDiskContainerContext {
|
||||||
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "disk_manipulator");
|
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "disk_manipulator");
|
||||||
|
|
||||||
public static final int IO_MODE_INSERT = 0;
|
public static final int IO_MODE_INSERT = 0;
|
||||||
@@ -82,11 +83,13 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
slot,
|
slot,
|
||||||
itemDisks,
|
itemDisks,
|
||||||
fluidDisks,
|
fluidDisks,
|
||||||
s -> new StorageDiskItemManipulatorWrapper(NetworkNodeDiskManipulator.this, s),
|
s -> new StorageDiskItemManipulatorWrapper(DiskManipulatorNetworkNode.this, s),
|
||||||
s -> new StorageDiskFluidManipulatorWrapper(NetworkNodeDiskManipulator.this, s)
|
s -> new StorageDiskFluidManipulatorWrapper(DiskManipulatorNetworkNode.this, s)
|
||||||
);
|
);
|
||||||
|
|
||||||
WorldUtils.updateBlock(world, pos);
|
if (!reading) {
|
||||||
|
WorldUtils.updateBlock(world, pos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -101,26 +104,28 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
3 + slot,
|
3 + slot,
|
||||||
itemDisks,
|
itemDisks,
|
||||||
fluidDisks,
|
fluidDisks,
|
||||||
s -> new StorageDiskItemManipulatorWrapper(NetworkNodeDiskManipulator.this, s),
|
s -> new StorageDiskItemManipulatorWrapper(DiskManipulatorNetworkNode.this, s),
|
||||||
s -> new StorageDiskFluidManipulatorWrapper(NetworkNodeDiskManipulator.this, s)
|
s -> new StorageDiskFluidManipulatorWrapper(DiskManipulatorNetworkNode.this, s)
|
||||||
);
|
);
|
||||||
|
|
||||||
WorldUtils.updateBlock(world, pos);
|
if (!reading) {
|
||||||
|
WorldUtils.updateBlock(world, pos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
private ProxyItemHandler disks = new ProxyItemHandler(inputDisks, outputDisks);
|
private ProxyItemHandler disks = new ProxyItemHandler(inputDisks, outputDisks);
|
||||||
|
|
||||||
public NetworkNodeDiskManipulator(World world, BlockPos pos) {
|
|
||||||
super(world, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
|
private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
|
||||||
private FluidInventory fluidFilters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
|
private FluidInventory fluidFilters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
|
||||||
|
|
||||||
|
public DiskManipulatorNetworkNode(World world, BlockPos pos) {
|
||||||
|
super(world, pos);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getEnergyUsage() {
|
public int getEnergyUsage() {
|
||||||
return RS.INSTANCE.config.diskManipulatorUsage + upgrades.getEnergyUsage();
|
return RS.SERVER_CONFIG.getDiskManipulator().getUsage() + upgrades.getEnergyUsage();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -238,7 +243,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
extracted = network.extractItem(toExtract, upgrades.getStackInteractCount(), compare, Action.PERFORM);
|
extracted = network.extractItem(toExtract, upgrades.getStackInteractCount(), compare, Action.PERFORM);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (itemFilters.getSlots() > i && extracted == null) {
|
while (itemFilters.getSlots() > i && extracted.isEmpty()) {
|
||||||
ItemStack filterStack = ItemStack.EMPTY;
|
ItemStack filterStack = ItemStack.EMPTY;
|
||||||
|
|
||||||
while (itemFilters.getSlots() > i && filterStack.isEmpty()) {
|
while (itemFilters.getSlots() > i && filterStack.isEmpty()) {
|
||||||
@@ -333,7 +338,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
extracted = network.extractFluid(toExtract, upgrades.getStackInteractCount(), compare, Action.PERFORM);
|
extracted = network.extractFluid(toExtract, upgrades.getStackInteractCount(), compare, Action.PERFORM);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (fluidFilters.getSlots() > i && extracted == null) {
|
while (fluidFilters.getSlots() > i && extracted.isEmpty()) {
|
||||||
FluidStack filterStack = FluidStack.EMPTY;
|
FluidStack filterStack = FluidStack.EMPTY;
|
||||||
|
|
||||||
while (fluidFilters.getSlots() > i && filterStack.isEmpty()) {
|
while (fluidFilters.getSlots() > i && filterStack.isEmpty()) {
|
||||||
@@ -373,6 +378,29 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DiskState[] getDiskState() {
|
||||||
|
DiskState[] diskStates = new DiskState[6];
|
||||||
|
|
||||||
|
for (int i = 0; i < 6; ++i) {
|
||||||
|
DiskState state = DiskState.NONE;
|
||||||
|
|
||||||
|
if (itemDisks[i] != null || fluidDisks[i] != null) {
|
||||||
|
if (!canUpdate()) {
|
||||||
|
state = DiskState.DISCONNECTED;
|
||||||
|
} else {
|
||||||
|
state = DiskState.get(
|
||||||
|
itemDisks[i] != null ? itemDisks[i].getStored() : fluidDisks[i].getStored(),
|
||||||
|
itemDisks[i] != null ? itemDisks[i].getCapacity() : fluidDisks[i].getCapacity()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diskStates[i] = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
return diskStates;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCompare() {
|
public int getCompare() {
|
||||||
return compare;
|
return compare;
|
||||||
@@ -385,7 +413,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getType() {
|
public int getType() {
|
||||||
return world.isRemote ? TileDiskManipulator.TYPE.getValue() : type;
|
return world.isRemote ? DiskManipulatorTile.TYPE.getValue() : type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
@@ -5,7 +5,7 @@ import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
|
|||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskContainerContext;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskContainerContext;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskListener;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskListener;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.DiskDriveNetworkNode;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
||||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
||||||
@@ -18,16 +18,16 @@ import javax.annotation.Nullable;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
public class StorageDiskFluidManipulatorWrapper implements IStorageDisk<FluidStack> {
|
public class StorageDiskFluidManipulatorWrapper implements IStorageDisk<FluidStack> {
|
||||||
private NetworkNodeDiskManipulator diskManipulator;
|
private DiskManipulatorNetworkNode diskManipulator;
|
||||||
private IStorageDisk<FluidStack> parent;
|
private IStorageDisk<FluidStack> parent;
|
||||||
private DiskDriveNetworkNode.DiskState lastState;
|
private DiskState lastState;
|
||||||
|
|
||||||
public StorageDiskFluidManipulatorWrapper(NetworkNodeDiskManipulator diskManipulator, IStorageDisk<FluidStack> parent) {
|
public StorageDiskFluidManipulatorWrapper(DiskManipulatorNetworkNode diskManipulator, IStorageDisk<FluidStack> parent) {
|
||||||
this.diskManipulator = diskManipulator;
|
this.diskManipulator = diskManipulator;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.setSettings(
|
this.setSettings(
|
||||||
() -> {
|
() -> {
|
||||||
DiskDriveNetworkNode.DiskState currentState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
DiskState currentState = DiskState.get(getStored(), getCapacity());
|
||||||
|
|
||||||
if (lastState != currentState) {
|
if (lastState != currentState) {
|
||||||
lastState = currentState;
|
lastState = currentState;
|
||||||
@@ -37,7 +37,7 @@ public class StorageDiskFluidManipulatorWrapper implements IStorageDisk<FluidSta
|
|||||||
},
|
},
|
||||||
diskManipulator
|
diskManipulator
|
||||||
);
|
);
|
||||||
this.lastState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
this.lastState = DiskState.get(getStored(), getCapacity());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -5,7 +5,7 @@ import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
|
|||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskContainerContext;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskContainerContext;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskListener;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskListener;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.DiskDriveNetworkNode;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
||||||
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
@@ -18,16 +18,16 @@ import javax.annotation.Nullable;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
public class StorageDiskItemManipulatorWrapper implements IStorageDisk<ItemStack> {
|
public class StorageDiskItemManipulatorWrapper implements IStorageDisk<ItemStack> {
|
||||||
private NetworkNodeDiskManipulator diskManipulator;
|
private DiskManipulatorNetworkNode diskManipulator;
|
||||||
private IStorageDisk<ItemStack> parent;
|
private IStorageDisk<ItemStack> parent;
|
||||||
private DiskDriveNetworkNode.DiskState lastState;
|
private DiskState lastState;
|
||||||
|
|
||||||
public StorageDiskItemManipulatorWrapper(NetworkNodeDiskManipulator diskManipulator, IStorageDisk<ItemStack> parent) {
|
public StorageDiskItemManipulatorWrapper(DiskManipulatorNetworkNode diskManipulator, IStorageDisk<ItemStack> parent) {
|
||||||
this.diskManipulator = diskManipulator;
|
this.diskManipulator = diskManipulator;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.setSettings(
|
this.setSettings(
|
||||||
() -> {
|
() -> {
|
||||||
DiskDriveNetworkNode.DiskState currentState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
DiskState currentState = DiskState.get(getStored(), getCapacity());
|
||||||
|
|
||||||
if (lastState != currentState) {
|
if (lastState != currentState) {
|
||||||
lastState = currentState;
|
lastState = currentState;
|
||||||
@@ -37,7 +37,7 @@ public class StorageDiskItemManipulatorWrapper implements IStorageDisk<ItemStack
|
|||||||
},
|
},
|
||||||
diskManipulator
|
diskManipulator
|
||||||
);
|
);
|
||||||
this.lastState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
this.lastState = DiskState.get(getStored(), getCapacity());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -1,60 +0,0 @@
|
|||||||
package com.raoulvdberge.refinedstorage.block;
|
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.block.info.BlockInfoBuilder;
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator;
|
|
||||||
|
|
||||||
public class BlockDiskManipulator extends BlockNode {
|
|
||||||
// TODO public static final PropertyObject<Integer[]> DISK_STATE = new PropertyObject<>("disk_state", Integer[].class);
|
|
||||||
|
|
||||||
public BlockDiskManipulator() {
|
|
||||||
super(BlockInfoBuilder.forId("disk_manipulator").tileEntity(TileDiskManipulator::new).create());
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TODO
|
|
||||||
@Override
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
|
||||||
public void registerModels(IModelRegistration modelRegistration) {
|
|
||||||
modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "inventory"));
|
|
||||||
|
|
||||||
modelRegistration.addModelLoader(() -> new CustomModelLoaderDefault(info.getId(), ModelDiskManipulator::new));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockRenderLayer getRenderLayer() {
|
|
||||||
return BlockRenderLayer.CUTOUT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public BlockDirection getDirection() {
|
|
||||||
return BlockDirection.HORIZONTAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onBlockActivated(World world, BlockPos pos, BlockState state, PlayerEntity player, EnumHand hand, Direction side, float hitX, float hitY, float hitZ) {
|
|
||||||
return openNetworkGui(RSGui.DISK_MANIPULATOR, player, world, pos, side);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected BlockStateContainer.Builder createBlockStateBuilder() {
|
|
||||||
return super.createBlockStateBuilder().add(DISK_STATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState getExtendedState(BlockState state, IBlockAccess world, BlockPos pos) {
|
|
||||||
BlockState s = super.getExtendedState(state, world, pos);
|
|
||||||
|
|
||||||
TileEntity tile = world.getTileEntity(pos);
|
|
||||||
|
|
||||||
if (tile instanceof TileDiskManipulator) {
|
|
||||||
s = ((IExtendedBlockState) s).withProperty(DISK_STATE, ((TileDiskManipulator) tile).getDiskState());
|
|
||||||
}
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasConnectedState() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -33,11 +33,6 @@ public class DiskDriveBlock extends NodeBlock {
|
|||||||
return BlockDirection.HORIZONTAL;
|
return BlockDirection.HORIZONTAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasTileEntity(BlockState state) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
@@ -0,0 +1,70 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.block;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.RS;
|
||||||
|
import com.raoulvdberge.refinedstorage.block.info.BlockDirection;
|
||||||
|
import com.raoulvdberge.refinedstorage.container.DiskManipulatorContainer;
|
||||||
|
import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainerProvider;
|
||||||
|
import com.raoulvdberge.refinedstorage.tile.DiskManipulatorTile;
|
||||||
|
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.BlockRenderLayer;
|
||||||
|
import net.minecraft.util.Hand;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.BlockRayTraceResult;
|
||||||
|
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 DiskManipulatorBlock extends NodeBlock {
|
||||||
|
public DiskManipulatorBlock() {
|
||||||
|
super(BlockUtils.DEFAULT_ROCK_PROPERTIES);
|
||||||
|
|
||||||
|
this.setRegistryName(RS.ID, "disk_manipulator");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockRenderLayer getRenderLayer() {
|
||||||
|
return BlockRenderLayer.CUTOUT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
return new DiskManipulatorTile();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) {
|
||||||
|
if (!world.isRemote) {
|
||||||
|
return NetworkUtils.attemptModify(world, pos, rayTraceResult.getFace(), player, () -> NetworkHooks.openGui(
|
||||||
|
(ServerPlayerEntity) player,
|
||||||
|
new PositionalTileContainerProvider<DiskManipulatorTile>(
|
||||||
|
new TranslationTextComponent("gui.refinedstorage.disk_manipulator"),
|
||||||
|
(tile, windowId, inventory, p) -> new DiskManipulatorContainer(tile, p, windowId),
|
||||||
|
pos
|
||||||
|
),
|
||||||
|
pos
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockDirection getDirection() {
|
||||||
|
return BlockDirection.HORIZONTAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasConnectedState() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@@ -54,11 +54,6 @@ public class FluidStorageBlock extends NodeBlock {
|
|||||||
super.onBlockPlacedBy(world, pos, state, player, stack);
|
super.onBlockPlacedBy(world, pos, state, player, stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasTileEntity(BlockState state) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
@@ -47,11 +47,6 @@ public class GridBlock extends NodeBlock {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasTileEntity(BlockState state) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
@@ -54,11 +54,6 @@ public class StorageBlock extends NodeBlock {
|
|||||||
super.onBlockPlacedBy(world, pos, state, entity, stack);
|
super.onBlockPlacedBy(world, pos, state, entity, stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasTileEntity(BlockState state) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
@@ -29,6 +29,7 @@ public class ServerConfig {
|
|||||||
private WirelessFluidGrid wirelessFluidGrid;
|
private WirelessFluidGrid wirelessFluidGrid;
|
||||||
private Constructor constructor;
|
private Constructor constructor;
|
||||||
private Destructor destructor;
|
private Destructor destructor;
|
||||||
|
private DiskManipulator diskManipulator;
|
||||||
|
|
||||||
public ServerConfig() {
|
public ServerConfig() {
|
||||||
upgrades = new Upgrades();
|
upgrades = new Upgrades();
|
||||||
@@ -54,6 +55,7 @@ public class ServerConfig {
|
|||||||
wirelessFluidGrid = new WirelessFluidGrid();
|
wirelessFluidGrid = new WirelessFluidGrid();
|
||||||
constructor = new Constructor();
|
constructor = new Constructor();
|
||||||
destructor = new Destructor();
|
destructor = new Destructor();
|
||||||
|
diskManipulator = new DiskManipulator();
|
||||||
|
|
||||||
spec = builder.build();
|
spec = builder.build();
|
||||||
}
|
}
|
||||||
@@ -150,6 +152,10 @@ public class ServerConfig {
|
|||||||
return destructor;
|
return destructor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DiskManipulator getDiskManipulator() {
|
||||||
|
return diskManipulator;
|
||||||
|
}
|
||||||
|
|
||||||
public ForgeConfigSpec getSpec() {
|
public ForgeConfigSpec getSpec() {
|
||||||
return spec;
|
return spec;
|
||||||
}
|
}
|
||||||
@@ -719,4 +725,20 @@ public class ServerConfig {
|
|||||||
return usage.get();
|
return usage.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class DiskManipulator {
|
||||||
|
private final ForgeConfigSpec.IntValue usage;
|
||||||
|
|
||||||
|
public DiskManipulator() {
|
||||||
|
builder.push("diskManipulator");
|
||||||
|
|
||||||
|
usage = builder.comment("The energy used by the Disk Manipulator").defineInRange("usage", 4, 0, Integer.MAX_VALUE);
|
||||||
|
|
||||||
|
builder.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getUsage() {
|
||||||
|
return usage.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,13 +3,13 @@ package com.raoulvdberge.refinedstorage.container;
|
|||||||
import com.raoulvdberge.refinedstorage.RSContainers;
|
import com.raoulvdberge.refinedstorage.RSContainers;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.FilterSlot;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.FilterSlot;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.filter.FluidFilterSlot;
|
import com.raoulvdberge.refinedstorage.container.slot.filter.FluidFilterSlot;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator;
|
import com.raoulvdberge.refinedstorage.tile.DiskManipulatorTile;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraftforge.items.SlotItemHandler;
|
import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class DiskManipulatorContainer extends BaseContainer {
|
public class DiskManipulatorContainer extends BaseContainer {
|
||||||
public DiskManipulatorContainer(TileDiskManipulator diskManipulator, PlayerEntity player, int windowId) {
|
public DiskManipulatorContainer(DiskManipulatorTile diskManipulator, PlayerEntity player, int windowId) {
|
||||||
super(RSContainers.DISK_MANIPULATOR, diskManipulator, player, windowId);
|
super(RSContainers.DISK_MANIPULATOR, diskManipulator, player, windowId);
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
|
@@ -4,7 +4,7 @@ import com.google.common.cache.CacheBuilder;
|
|||||||
import com.google.common.cache.CacheLoader;
|
import com.google.common.cache.CacheLoader;
|
||||||
import com.google.common.cache.LoadingCache;
|
import com.google.common.cache.LoadingCache;
|
||||||
import com.raoulvdberge.refinedstorage.RSBlocks;
|
import com.raoulvdberge.refinedstorage.RSBlocks;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.DiskDriveNetworkNode;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||||
import com.raoulvdberge.refinedstorage.tile.DiskDriveTile;
|
import com.raoulvdberge.refinedstorage.tile.DiskDriveTile;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.client.renderer.model.BakedQuad;
|
import net.minecraft.client.renderer.model.BakedQuad;
|
||||||
@@ -21,10 +21,10 @@ public class DiskDriveBakedModel extends DelegateBakedModel {
|
|||||||
private class CacheKey {
|
private class CacheKey {
|
||||||
private BlockState state;
|
private BlockState state;
|
||||||
private Direction side;
|
private Direction side;
|
||||||
private DiskDriveNetworkNode.DiskState[] diskState;
|
private DiskState[] diskState;
|
||||||
private Random random;
|
private Random random;
|
||||||
|
|
||||||
CacheKey(BlockState state, @Nullable Direction side, DiskDriveNetworkNode.DiskState[] diskState, Random random) {
|
CacheKey(BlockState state, @Nullable Direction side, DiskState[] diskState, Random random) {
|
||||||
this.state = state;
|
this.state = state;
|
||||||
this.side = side;
|
this.side = side;
|
||||||
this.diskState = diskState;
|
this.diskState = diskState;
|
||||||
@@ -64,7 +64,7 @@ public class DiskDriveBakedModel extends DelegateBakedModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Map<Direction, IBakedModel> baseByFacing = new HashMap<>();
|
private Map<Direction, IBakedModel> baseByFacing = new HashMap<>();
|
||||||
private Map<Direction, Map<DiskDriveNetworkNode.DiskState, List<IBakedModel>>> disksByFacing = new HashMap<>();
|
private Map<Direction, Map<DiskState, List<IBakedModel>>> disksByFacing = new HashMap<>();
|
||||||
|
|
||||||
private LoadingCache<CacheKey, List<BakedQuad>> cache = CacheBuilder.newBuilder().build(new CacheLoader<CacheKey, List<BakedQuad>>() {
|
private LoadingCache<CacheKey, List<BakedQuad>> cache = CacheBuilder.newBuilder().build(new CacheLoader<CacheKey, List<BakedQuad>>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -75,7 +75,7 @@ public class DiskDriveBakedModel extends DelegateBakedModel {
|
|||||||
List<BakedQuad> quads = new ArrayList<>(baseByFacing.get(facing).getQuads(key.state, key.side, key.random));
|
List<BakedQuad> quads = new ArrayList<>(baseByFacing.get(facing).getQuads(key.state, key.side, key.random));
|
||||||
|
|
||||||
for (int i = 0; i < 8; ++i) {
|
for (int i = 0; i < 8; ++i) {
|
||||||
if (key.diskState[i] != DiskDriveNetworkNode.DiskState.NONE) {
|
if (key.diskState[i] != DiskState.NONE) {
|
||||||
quads.addAll(disksByFacing.get(facing).get(key.diskState[i]).get(i).getQuads(key.state, key.side, key.random));
|
quads.addAll(disksByFacing.get(facing).get(key.diskState[i]).get(i).getQuads(key.state, key.side, key.random));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,14 +100,14 @@ public class DiskDriveBakedModel extends DelegateBakedModel {
|
|||||||
|
|
||||||
disksByFacing.put(facing, new HashMap<>());
|
disksByFacing.put(facing, new HashMap<>());
|
||||||
|
|
||||||
addDiskModels(disk, DiskDriveNetworkNode.DiskState.NORMAL, facing);
|
addDiskModels(disk, DiskState.NORMAL, facing);
|
||||||
addDiskModels(diskNearCapacity, DiskDriveNetworkNode.DiskState.NEAR_CAPACITY, facing);
|
addDiskModels(diskNearCapacity, DiskState.NEAR_CAPACITY, facing);
|
||||||
addDiskModels(diskFull, DiskDriveNetworkNode.DiskState.FULL, facing);
|
addDiskModels(diskFull, DiskState.FULL, facing);
|
||||||
addDiskModels(diskDisconnected, DiskDriveNetworkNode.DiskState.DISCONNECTED, facing);
|
addDiskModels(diskDisconnected, DiskState.DISCONNECTED, facing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addDiskModels(IBakedModel disk, DiskDriveNetworkNode.DiskState type, Direction facing) {
|
private void addDiskModels(IBakedModel disk, DiskState type, Direction facing) {
|
||||||
disksByFacing.get(facing).put(type, new ArrayList<>());
|
disksByFacing.get(facing).put(type, new ArrayList<>());
|
||||||
|
|
||||||
for (int y = 0; y < 4; ++y) {
|
for (int y = 0; y < 4; ++y) {
|
||||||
@@ -133,7 +133,7 @@ public class DiskDriveBakedModel extends DelegateBakedModel {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand, IModelData data) {
|
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand, IModelData data) {
|
||||||
DiskDriveNetworkNode.DiskState[] diskState = data.getData(DiskDriveTile.DISK_STATE_PROPERTY);
|
DiskState[] diskState = data.getData(DiskDriveTile.DISK_STATE_PROPERTY);
|
||||||
|
|
||||||
if (diskState == null) {
|
if (diskState == null) {
|
||||||
return base.getQuads(state, side, rand, data);
|
return base.getQuads(state, side, rand, data);
|
||||||
|
@@ -1,32 +1,35 @@
|
|||||||
package com.raoulvdberge.refinedstorage.render.model;
|
package com.raoulvdberge.refinedstorage.render.model;
|
||||||
/*
|
|
||||||
import com.google.common.cache.CacheBuilder;
|
import com.google.common.cache.CacheBuilder;
|
||||||
import com.google.common.cache.CacheLoader;
|
import com.google.common.cache.CacheLoader;
|
||||||
import com.google.common.cache.LoadingCache;
|
import com.google.common.cache.LoadingCache;
|
||||||
import com.raoulvdberge.refinedstorage.RSBlocks;
|
import com.raoulvdberge.refinedstorage.RSBlocks;
|
||||||
import com.raoulvdberge.refinedstorage.block.BlockDiskManipulator;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsDisk;
|
import com.raoulvdberge.refinedstorage.block.DiskManipulatorBlock;
|
||||||
import net.minecraft.block.state.BlockState;
|
import com.raoulvdberge.refinedstorage.tile.DiskManipulatorTile;
|
||||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
import net.minecraft.client.renderer.model.BakedQuad;
|
||||||
|
import net.minecraft.client.renderer.model.IBakedModel;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraftforge.client.model.data.IModelData;
|
||||||
import net.minecraftforge.common.model.TRSRTransformation;
|
import net.minecraftforge.common.model.TRSRTransformation;
|
||||||
import net.minecraftforge.common.property.IExtendedBlockState;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.vecmath.Vector3f;
|
import javax.vecmath.Vector3f;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class BakedModelDiskManipulator extends BakedModelDelegate {
|
public class DiskManipulatorBakedModel extends DelegateBakedModel {
|
||||||
private class CacheKey {
|
private class CacheKey {
|
||||||
private BlockState state;
|
private BlockState state;
|
||||||
private Direction side;
|
private Direction side;
|
||||||
private Integer[] diskState;
|
private DiskState[] diskState;
|
||||||
|
private Random random;
|
||||||
|
|
||||||
CacheKey(BlockState state, @Nullable Direction side, Integer[] diskState) {
|
CacheKey(BlockState state, @Nullable Direction side, DiskState[] diskState, Random random) {
|
||||||
this.state = state;
|
this.state = state;
|
||||||
this.side = side;
|
this.side = side;
|
||||||
this.diskState = diskState;
|
this.diskState = diskState;
|
||||||
|
this.random = random;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -63,18 +66,19 @@ public class BakedModelDiskManipulator extends BakedModelDelegate {
|
|||||||
|
|
||||||
private Map<Direction, IBakedModel> modelsConnected = new HashMap<>();
|
private Map<Direction, IBakedModel> modelsConnected = new HashMap<>();
|
||||||
private Map<Direction, IBakedModel> modelsDisconnected = new HashMap<>();
|
private Map<Direction, IBakedModel> modelsDisconnected = new HashMap<>();
|
||||||
private Map<Direction, Map<Integer, List<IBakedModel>>> disks = new HashMap<>();
|
private Map<Direction, Map<DiskState, List<IBakedModel>>> disks = new HashMap<>();
|
||||||
|
|
||||||
private LoadingCache<CacheKey, List<BakedQuad>> cache = CacheBuilder.newBuilder().build(new CacheLoader<CacheKey, List<BakedQuad>>() {
|
private LoadingCache<CacheKey, List<BakedQuad>> cache = CacheBuilder.newBuilder().build(new CacheLoader<CacheKey, List<BakedQuad>>() {
|
||||||
@Override
|
@Override
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public List<BakedQuad> load(CacheKey key) {
|
public List<BakedQuad> load(CacheKey key) {
|
||||||
Direction facing = key.state.getValue(RSBlocks.DISK_MANIPULATOR.getDirection().getProperty());
|
Direction facing = key.state.get(RSBlocks.DISK_MANIPULATOR.getDirection().getProperty());
|
||||||
|
|
||||||
List<BakedQuad> quads = (key.state.getValue(BlockDiskManipulator.CONNECTED) ? modelsConnected : modelsDisconnected).get(facing).getQuads(key.state, key.side, 0);
|
List<BakedQuad> quads = new ArrayList<>((key.state.get(DiskManipulatorBlock.CONNECTED) ? modelsConnected : modelsDisconnected).get(facing).getQuads(key.state, key.side, key.random));
|
||||||
|
|
||||||
for (int i = 0; i < 6; ++i) {
|
for (int i = 0; i < 6; ++i) {
|
||||||
if (key.diskState[i] != ConstantsDisk.DISK_STATE_NONE) {
|
if (key.diskState[i] != DiskState.NONE) {
|
||||||
quads.addAll(disks.get(facing).get(key.diskState[i]).get(i).getQuads(key.state, key.side, 0));
|
quads.addAll(disks.get(facing).get(key.diskState[i]).get(i).getQuads(key.state, key.side, key.random));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,31 +86,40 @@ public class BakedModelDiskManipulator extends BakedModelDelegate {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
public BakedModelDiskManipulator(IBakedModel baseConnected, IBakedModel baseDisconnected, IBakedModel disk, IBakedModel diskNearCapacity, IBakedModel diskFull, IBakedModel diskDisconnected) {
|
public DiskManipulatorBakedModel(IBakedModel baseConnected,
|
||||||
|
IBakedModel baseDisconnected,
|
||||||
|
IBakedModel disk,
|
||||||
|
IBakedModel diskNearCapacity,
|
||||||
|
IBakedModel diskFull,
|
||||||
|
IBakedModel diskDisconnected) {
|
||||||
super(baseDisconnected);
|
super(baseDisconnected);
|
||||||
|
|
||||||
for (Direction facing : Direction.HORIZONTALS) {
|
for (Direction facing : Direction.values()) {
|
||||||
modelsConnected.put(facing, new BakedModelTRSR(baseConnected, facing));
|
if (facing.getHorizontalIndex() == -1) {
|
||||||
modelsDisconnected.put(facing, new BakedModelTRSR(baseDisconnected, facing));
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
modelsConnected.put(facing, new TRSRBakedModel(baseConnected, facing));
|
||||||
|
modelsDisconnected.put(facing, new TRSRBakedModel(baseDisconnected, facing));
|
||||||
|
|
||||||
disks.put(facing, new HashMap<>());
|
disks.put(facing, new HashMap<>());
|
||||||
|
|
||||||
disks.get(facing).put(ConstantsDisk.DISK_STATE_NORMAL, new ArrayList<>());
|
disks.get(facing).put(DiskState.NORMAL, new ArrayList<>());
|
||||||
disks.get(facing).put(ConstantsDisk.DISK_STATE_NEAR_CAPACITY, new ArrayList<>());
|
disks.get(facing).put(DiskState.NEAR_CAPACITY, new ArrayList<>());
|
||||||
disks.get(facing).put(ConstantsDisk.DISK_STATE_FULL, new ArrayList<>());
|
disks.get(facing).put(DiskState.FULL, new ArrayList<>());
|
||||||
disks.get(facing).put(ConstantsDisk.DISK_STATE_DISCONNECTED, new ArrayList<>());
|
disks.get(facing).put(DiskState.DISCONNECTED, new ArrayList<>());
|
||||||
|
|
||||||
initDiskModels(disk, ConstantsDisk.DISK_STATE_NORMAL, facing);
|
addDiskModels(disk, DiskState.NORMAL, facing);
|
||||||
initDiskModels(diskNearCapacity, ConstantsDisk.DISK_STATE_NEAR_CAPACITY, facing);
|
addDiskModels(diskNearCapacity, DiskState.NEAR_CAPACITY, facing);
|
||||||
initDiskModels(diskFull, ConstantsDisk.DISK_STATE_FULL, facing);
|
addDiskModels(diskFull, DiskState.FULL, facing);
|
||||||
initDiskModels(diskDisconnected, ConstantsDisk.DISK_STATE_DISCONNECTED, facing);
|
addDiskModels(diskDisconnected, DiskState.DISCONNECTED, facing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initDiskModels(IBakedModel disk, int type, Direction facing) {
|
private void addDiskModels(IBakedModel disk, DiskState type, Direction facing) {
|
||||||
for (int x = 0; x < 2; ++x) {
|
for (int x = 0; x < 2; ++x) {
|
||||||
for (int y = 0; y < 3; ++y) {
|
for (int y = 0; y < 3; ++y) {
|
||||||
BakedModelTRSR model = new BakedModelTRSR(disk, facing);
|
TRSRBakedModel model = new TRSRBakedModel(disk, facing);
|
||||||
|
|
||||||
Vector3f trans = model.transformation.getTranslation();
|
Vector3f trans = model.transformation.getTranslation();
|
||||||
|
|
||||||
@@ -126,20 +139,15 @@ public class BakedModelDiskManipulator extends BakedModelDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, long rand) {
|
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand, IModelData data) {
|
||||||
if (!(state instanceof IExtendedBlockState)) {
|
DiskState[] diskState = data.getData(DiskManipulatorTile.DISK_STATE_PROPERTY);
|
||||||
return base.getQuads(state, side, rand);
|
|
||||||
}
|
|
||||||
|
|
||||||
Integer[] diskState = ((IExtendedBlockState) state).getValue(BlockDiskManipulator.DISK_STATE);
|
|
||||||
|
|
||||||
if (diskState == null) {
|
if (diskState == null) {
|
||||||
return base.getQuads(state, side, rand);
|
return base.getQuads(state, side, rand, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
CacheKey key = new CacheKey(((IExtendedBlockState) state).getClean(), side, diskState);
|
CacheKey key = new CacheKey(state, side, diskState, rand);
|
||||||
|
|
||||||
return cache.getUnchecked(key);
|
return cache.getUnchecked(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
@@ -0,0 +1,44 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.screen;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.RS;
|
||||||
|
import com.raoulvdberge.refinedstorage.container.DiskManipulatorContainer;
|
||||||
|
import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.*;
|
||||||
|
import com.raoulvdberge.refinedstorage.tile.DiskManipulatorTile;
|
||||||
|
import net.minecraft.client.resources.I18n;
|
||||||
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
|
||||||
|
public class DiskManipulatorScreen extends BaseScreen<DiskManipulatorContainer> {
|
||||||
|
public DiskManipulatorScreen(DiskManipulatorContainer container, PlayerInventory playerInventory, ITextComponent title) {
|
||||||
|
super(container, 211, 211, playerInventory, title);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPostInit(int x, int y) {
|
||||||
|
addSideButton(new RedstoneModeSideButton(this, DiskManipulatorTile.REDSTONE_MODE));
|
||||||
|
addSideButton(new IoModeSideButton(this));
|
||||||
|
addSideButton(new TypeSideButton(this, DiskManipulatorTile.TYPE));
|
||||||
|
addSideButton(new WhitelistBlacklistSideButton(this, DiskManipulatorTile.WHITELIST_BLACKLIST));
|
||||||
|
addSideButton(new ExactModeSideButton(this, DiskManipulatorTile.COMPARE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick(int x, int y) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void renderBackground(int x, int y, int mouseX, int mouseY) {
|
||||||
|
bindTexture(RS.ID, "gui/disk_manipulator.png");
|
||||||
|
|
||||||
|
blit(x, y, 0, 0, xSize, ySize);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void renderForeground(int mouseX, int mouseY) {
|
||||||
|
renderString(7, 7, title.getFormattedText());
|
||||||
|
renderString(7, 117, I18n.format("container.inventory"));
|
||||||
|
renderString(43, 45, I18n.format("gui.refinedstorage.disk_manipulator.in"));
|
||||||
|
renderString(115, 45, I18n.format("gui.refinedstorage.disk_manipulator.out"));
|
||||||
|
}
|
||||||
|
}
|
@@ -1,43 +0,0 @@
|
|||||||
package com.raoulvdberge.refinedstorage.screen;
|
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RS;
|
|
||||||
import com.raoulvdberge.refinedstorage.container.DiskManipulatorContainer;
|
|
||||||
import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.*;
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator;
|
|
||||||
import net.minecraft.client.resources.I18n;
|
|
||||||
import net.minecraft.entity.player.PlayerInventory;
|
|
||||||
|
|
||||||
public class GuiDiskManipulator extends BaseScreen<DiskManipulatorContainer> {
|
|
||||||
public GuiDiskManipulator(DiskManipulatorContainer container, PlayerInventory playerInventory) {
|
|
||||||
super(container, 211, 211, playerInventory, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPostInit(int x, int y) {
|
|
||||||
addSideButton(new RedstoneModeSideButton(this, TileDiskManipulator.REDSTONE_MODE));
|
|
||||||
addSideButton(new IoModeSideButton(this));
|
|
||||||
addSideButton(new TypeSideButton(this, TileDiskManipulator.TYPE));
|
|
||||||
addSideButton(new WhitelistBlacklistSideButton(this, TileDiskManipulator.WHITELIST_BLACKLIST));
|
|
||||||
addSideButton(new ExactModeSideButton(this, TileDiskManipulator.COMPARE));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void tick(int x, int y) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void renderBackground(int x, int y, int mouseX, int mouseY) {
|
|
||||||
bindTexture(RS.ID, "gui/disk_manipulator.png");
|
|
||||||
|
|
||||||
blit(x, y, 0, 0, xSize, ySize);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void renderForeground(int mouseX, int mouseY) {
|
|
||||||
renderString(7, 7, I18n.format("block.refinedstorage:disk_manipulator.name"));
|
|
||||||
renderString(7, 117, I18n.format("container.inventory"));
|
|
||||||
renderString(43, 45, I18n.format("gui.refinedstorage:fluid_interface.in"));
|
|
||||||
renderString(115, 45, I18n.format("gui.refinedstorage:fluid_interface.out"));
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,8 +1,8 @@
|
|||||||
package com.raoulvdberge.refinedstorage.screen.widget.sidebutton;
|
package com.raoulvdberge.refinedstorage.screen.widget.sidebutton;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskmanipulator.NetworkNodeDiskManipulator;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskmanipulator.DiskManipulatorNetworkNode;
|
||||||
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
|
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator;
|
import com.raoulvdberge.refinedstorage.tile.DiskManipulatorTile;
|
||||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
|
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
|
||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
import net.minecraft.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
@@ -14,16 +14,16 @@ public class IoModeSideButton extends SideButton {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTooltip() {
|
public String getTooltip() {
|
||||||
return I18n.format("sidebutton.refinedstorage.iomode") + "\n" + TextFormatting.GRAY + I18n.format("sidebutton.refinedstorage.iomode." + (TileDiskManipulator.IO_MODE.getValue() == NetworkNodeDiskManipulator.IO_MODE_INSERT ? "insert" : "extract"));
|
return I18n.format("sidebutton.refinedstorage.iomode") + "\n" + TextFormatting.GRAY + I18n.format("sidebutton.refinedstorage.iomode." + (DiskManipulatorTile.IO_MODE.getValue() == DiskManipulatorNetworkNode.IO_MODE_INSERT ? "insert" : "extract"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void renderButtonIcon(int x, int y) {
|
protected void renderButtonIcon(int x, int y) {
|
||||||
screen.blit(x, y, TileDiskManipulator.IO_MODE.getValue() == NetworkNodeDiskManipulator.IO_MODE_EXTRACT ? 0 : 16, 160, 16, 16);
|
screen.blit(x, y, DiskManipulatorTile.IO_MODE.getValue() == DiskManipulatorNetworkNode.IO_MODE_EXTRACT ? 0 : 16, 160, 16, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPress() {
|
public void onPress() {
|
||||||
TileDataManager.setParameter(TileDiskManipulator.IO_MODE, TileDiskManipulator.IO_MODE.getValue() == NetworkNodeDiskManipulator.IO_MODE_INSERT ? NetworkNodeDiskManipulator.IO_MODE_EXTRACT : NetworkNodeDiskManipulator.IO_MODE_INSERT);
|
TileDataManager.setParameter(DiskManipulatorTile.IO_MODE, DiskManipulatorTile.IO_MODE.getValue() == DiskManipulatorNetworkNode.IO_MODE_INSERT ? DiskManipulatorNetworkNode.IO_MODE_EXTRACT : DiskManipulatorNetworkNode.IO_MODE_INSERT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.tile;
|
|||||||
import com.raoulvdberge.refinedstorage.RSTiles;
|
import com.raoulvdberge.refinedstorage.RSTiles;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
|
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
|
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.DiskDriveNetworkNode;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.DiskDriveNetworkNode;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.*;
|
import com.raoulvdberge.refinedstorage.tile.config.*;
|
||||||
import com.raoulvdberge.refinedstorage.tile.data.RSSerializers;
|
import com.raoulvdberge.refinedstorage.tile.data.RSSerializers;
|
||||||
@@ -76,12 +77,13 @@ public class DiskDriveTile extends NetworkNodeTile<DiskDriveNetworkNode> {
|
|||||||
return capacity;
|
return capacity;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
public static final ModelProperty<DiskState[]> DISK_STATE_PROPERTY = new ModelProperty<>();
|
||||||
|
|
||||||
private static final String NBT_DISK_STATE = "DiskStates";
|
private static final String NBT_DISK_STATE = "DiskStates";
|
||||||
public static final ModelProperty<DiskDriveNetworkNode.DiskState[]> DISK_STATE_PROPERTY = new ModelProperty<>();
|
|
||||||
|
|
||||||
private LazyOptional<IItemHandler> diskCapability = LazyOptional.of(() -> getNode().getDisks());
|
private LazyOptional<IItemHandler> diskCapability = LazyOptional.of(() -> getNode().getDisks());
|
||||||
|
|
||||||
private DiskDriveNetworkNode.DiskState[] diskState = new DiskDriveNetworkNode.DiskState[8];
|
private DiskState[] diskState = new DiskState[8];
|
||||||
|
|
||||||
public DiskDriveTile() {
|
public DiskDriveTile() {
|
||||||
super(RSTiles.DISK_DRIVE);
|
super(RSTiles.DISK_DRIVE);
|
||||||
@@ -94,7 +96,7 @@ public class DiskDriveTile extends NetworkNodeTile<DiskDriveNetworkNode> {
|
|||||||
dataManager.addWatchedParameter(STORED);
|
dataManager.addWatchedParameter(STORED);
|
||||||
dataManager.addWatchedParameter(CAPACITY);
|
dataManager.addWatchedParameter(CAPACITY);
|
||||||
|
|
||||||
Arrays.fill(diskState, DiskDriveNetworkNode.DiskState.NONE);
|
Arrays.fill(diskState, DiskState.NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -103,7 +105,7 @@ public class DiskDriveTile extends NetworkNodeTile<DiskDriveNetworkNode> {
|
|||||||
|
|
||||||
ListNBT list = new ListNBT();
|
ListNBT list = new ListNBT();
|
||||||
|
|
||||||
for (DiskDriveNetworkNode.DiskState state : getNode().getDiskState()) {
|
for (DiskState state : getNode().getDiskState()) {
|
||||||
list.add(new IntNBT(state.ordinal()));
|
list.add(new IntNBT(state.ordinal()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,7 +121,7 @@ public class DiskDriveTile extends NetworkNodeTile<DiskDriveNetworkNode> {
|
|||||||
ListNBT list = tag.getList(NBT_DISK_STATE, Constants.NBT.TAG_INT);
|
ListNBT list = tag.getList(NBT_DISK_STATE, Constants.NBT.TAG_INT);
|
||||||
|
|
||||||
for (int i = 0; i < list.size(); ++i) {
|
for (int i = 0; i < list.size(); ++i) {
|
||||||
diskState[i] = DiskDriveNetworkNode.DiskState.values()[list.getInt(i)];
|
diskState[i] = DiskState.values()[list.getInt(i)];
|
||||||
}
|
}
|
||||||
|
|
||||||
requestModelDataUpdate();
|
requestModelDataUpdate();
|
||||||
|
@@ -0,0 +1,110 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.tile;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.RSTiles;
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskmanipulator.DiskManipulatorNetworkNode;
|
||||||
|
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
|
||||||
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
|
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
||||||
|
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||||
|
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
||||||
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
import net.minecraft.nbt.IntNBT;
|
||||||
|
import net.minecraft.nbt.ListNBT;
|
||||||
|
import net.minecraft.network.datasync.DataSerializers;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.client.model.data.IModelData;
|
||||||
|
import net.minecraftforge.client.model.data.ModelDataMap;
|
||||||
|
import net.minecraftforge.client.model.data.ModelProperty;
|
||||||
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
|
import net.minecraftforge.common.util.Constants;
|
||||||
|
import net.minecraftforge.common.util.LazyOptional;
|
||||||
|
import net.minecraftforge.items.CapabilityItemHandler;
|
||||||
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class DiskManipulatorTile extends NetworkNodeTile<DiskManipulatorNetworkNode> {
|
||||||
|
public static final TileDataParameter<Integer, DiskManipulatorTile> COMPARE = IComparable.createParameter();
|
||||||
|
public static final TileDataParameter<Integer, DiskManipulatorTile> WHITELIST_BLACKLIST = IWhitelistBlacklist.createParameter();
|
||||||
|
public static final TileDataParameter<Integer, DiskManipulatorTile> TYPE = IType.createParameter();
|
||||||
|
public static final TileDataParameter<Integer, DiskManipulatorTile> IO_MODE = new TileDataParameter<>(DataSerializers.VARINT, DiskManipulatorNetworkNode.IO_MODE_INSERT, t -> t.getNode().getIoMode(), (t, v) -> {
|
||||||
|
t.getNode().setIoMode(v);
|
||||||
|
t.getNode().markDirty();
|
||||||
|
});
|
||||||
|
|
||||||
|
public static final ModelProperty<DiskState[]> DISK_STATE_PROPERTY = new ModelProperty<>();
|
||||||
|
|
||||||
|
private static final String NBT_DISK_STATE = "DiskStates";
|
||||||
|
|
||||||
|
private LazyOptional<IItemHandler> diskCapability = LazyOptional.of(() -> getNode().getDisks());
|
||||||
|
|
||||||
|
private DiskState[] diskState = new DiskState[8];
|
||||||
|
|
||||||
|
public DiskManipulatorTile() {
|
||||||
|
super(RSTiles.DISK_MANIPULATOR);
|
||||||
|
|
||||||
|
dataManager.addWatchedParameter(COMPARE);
|
||||||
|
dataManager.addWatchedParameter(WHITELIST_BLACKLIST);
|
||||||
|
dataManager.addWatchedParameter(TYPE);
|
||||||
|
dataManager.addWatchedParameter(IO_MODE);
|
||||||
|
|
||||||
|
Arrays.fill(diskState, DiskState.NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompoundNBT writeUpdate(CompoundNBT tag) {
|
||||||
|
super.writeUpdate(tag);
|
||||||
|
|
||||||
|
ListNBT list = new ListNBT();
|
||||||
|
|
||||||
|
for (DiskState state : getNode().getDiskState()) {
|
||||||
|
list.add(new IntNBT(state.ordinal()));
|
||||||
|
}
|
||||||
|
|
||||||
|
tag.put(NBT_DISK_STATE, list);
|
||||||
|
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readUpdate(CompoundNBT tag) {
|
||||||
|
super.readUpdate(tag);
|
||||||
|
|
||||||
|
ListNBT list = tag.getList(NBT_DISK_STATE, Constants.NBT.TAG_INT);
|
||||||
|
|
||||||
|
for (int i = 0; i < list.size(); ++i) {
|
||||||
|
diskState[i] = DiskState.values()[list.getInt(i)];
|
||||||
|
}
|
||||||
|
|
||||||
|
requestModelDataUpdate();
|
||||||
|
|
||||||
|
WorldUtils.updateBlock(world, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public IModelData getModelData() {
|
||||||
|
return new ModelDataMap.Builder().withInitial(DISK_STATE_PROPERTY, diskState).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction direction) {
|
||||||
|
if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
|
||||||
|
return diskCapability.cast();
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.getCapability(cap, direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Nonnull
|
||||||
|
public DiskManipulatorNetworkNode createNode(World world, BlockPos pos) {
|
||||||
|
return new DiskManipulatorNetworkNode(world, pos);
|
||||||
|
}
|
||||||
|
}
|
@@ -1,77 +0,0 @@
|
|||||||
package com.raoulvdberge.refinedstorage.tile;
|
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSTiles;
|
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskmanipulator.NetworkNodeDiskManipulator;
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
|
||||||
import net.minecraft.network.datasync.DataSerializers;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.world.World;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
|
|
||||||
public class TileDiskManipulator extends NetworkNodeTile<NetworkNodeDiskManipulator> {
|
|
||||||
public static final TileDataParameter<Integer, TileDiskManipulator> COMPARE = IComparable.createParameter();
|
|
||||||
public static final TileDataParameter<Integer, TileDiskManipulator> WHITELIST_BLACKLIST = IWhitelistBlacklist.createParameter();
|
|
||||||
public static final TileDataParameter<Integer, TileDiskManipulator> TYPE = IType.createParameter();
|
|
||||||
public static final TileDataParameter<Integer, TileDiskManipulator> IO_MODE = new TileDataParameter<>(DataSerializers.VARINT, NetworkNodeDiskManipulator.IO_MODE_INSERT, t -> t.getNode().getIoMode(), (t, v) -> {
|
|
||||||
t.getNode().setIoMode(v);
|
|
||||||
t.getNode().markDirty();
|
|
||||||
});
|
|
||||||
|
|
||||||
private Integer[] diskState = new Integer[6];
|
|
||||||
|
|
||||||
public TileDiskManipulator() {
|
|
||||||
super(RSTiles.DISK_MANIPULATOR);
|
|
||||||
|
|
||||||
dataManager.addWatchedParameter(COMPARE);
|
|
||||||
dataManager.addWatchedParameter(WHITELIST_BLACKLIST);
|
|
||||||
dataManager.addWatchedParameter(TYPE);
|
|
||||||
dataManager.addWatchedParameter(IO_MODE);
|
|
||||||
|
|
||||||
// DiskDriveTile.initDiskState(diskState);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompoundNBT writeUpdate(CompoundNBT tag) {
|
|
||||||
super.writeUpdate(tag);
|
|
||||||
|
|
||||||
// DiskDriveTile.writeDiskState(tag, 6, getNode().canUpdate(), getNode().getItemDisks(), getNode().getFluidDisks());
|
|
||||||
|
|
||||||
return tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void readUpdate(CompoundNBT tag) {
|
|
||||||
super.readUpdate(tag);
|
|
||||||
|
|
||||||
// DiskDriveTile.readDiskState(tag, diskState);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer[] getDiskState() {
|
|
||||||
return diskState;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TODO @Override
|
|
||||||
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable Direction facing) {
|
|
||||||
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
|
|
||||||
return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(getNode().getDisks());
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.getCapability(capability, facing);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable Direction facing) {
|
|
||||||
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nonnull
|
|
||||||
public NetworkNodeDiskManipulator createNode(World world, BlockPos pos) {
|
|
||||||
return new NetworkNodeDiskManipulator(world, pos);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -21,8 +21,8 @@ import com.raoulvdberge.refinedstorage.api.util.IFilter;
|
|||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.PortableFluidGridHandler;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.PortableFluidGridHandler;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.PortableItemGridHandler;
|
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.network.node.GridNetworkNode;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.DiskDriveNetworkNode;
|
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.PortableFluidStorageCache;
|
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.PortableFluidStorageCache;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.PortableItemStorageCache;
|
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.PortableItemStorageCache;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener.PortableFluidGridStorageCacheListener;
|
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener.PortableFluidGridStorageCacheListener;
|
||||||
@@ -756,7 +756,7 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid,
|
|||||||
|
|
||||||
if (renderInfo.getStored() == renderInfo.getCapacity()) {
|
if (renderInfo.getStored() == renderInfo.getCapacity()) {
|
||||||
return PortableGridDiskState.FULL;
|
return PortableGridDiskState.FULL;
|
||||||
} else if ((int) ((float) renderInfo.getStored() / (float) renderInfo.getCapacity() * 100F) >= DiskDriveNetworkNode.DiskState.DISK_NEAR_CAPACITY_THRESHOLD) {
|
} else if ((int) ((float) renderInfo.getStored() / (float) renderInfo.getCapacity() * 100F) >= DiskState.DISK_NEAR_CAPACITY_THRESHOLD) {
|
||||||
return PortableGridDiskState.NEAR_CAPACITY;
|
return PortableGridDiskState.NEAR_CAPACITY;
|
||||||
} else {
|
} else {
|
||||||
return PortableGridDiskState.NORMAL;
|
return PortableGridDiskState.NORMAL;
|
||||||
|
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": {
|
||||||
|
"model": "refinedstorage:block/disk_manipulator_disconnected"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -20,6 +20,9 @@
|
|||||||
"gui.refinedstorage.fluid_amount": "Fluid amount in mB",
|
"gui.refinedstorage.fluid_amount": "Fluid amount in mB",
|
||||||
"gui.refinedstorage.disk_drive": "Disk Drive",
|
"gui.refinedstorage.disk_drive": "Disk Drive",
|
||||||
"gui.refinedstorage.disk_drive.disks": "Disks",
|
"gui.refinedstorage.disk_drive.disks": "Disks",
|
||||||
|
"gui.refinedstorage.disk_manipulator": "Disk Manipulator",
|
||||||
|
"gui.refinedstorage.disk_manipulator.in": "In",
|
||||||
|
"gui.refinedstorage.disk_manipulator.out": "Out",
|
||||||
"gui.refinedstorage.external_storage": "External Storage",
|
"gui.refinedstorage.external_storage": "External Storage",
|
||||||
"gui.refinedstorage.importer": "Importer",
|
"gui.refinedstorage.importer": "Importer",
|
||||||
"gui.refinedstorage.exporter": "Exporter",
|
"gui.refinedstorage.exporter": "Exporter",
|
||||||
@@ -184,7 +187,7 @@
|
|||||||
"block.refinedstorage.pattern_grid": "Pattern Grid",
|
"block.refinedstorage.pattern_grid": "Pattern Grid",
|
||||||
"block.refinedstorage.fluid_grid": "Fluid Grid",
|
"block.refinedstorage.fluid_grid": "Fluid Grid",
|
||||||
"block.refinedstorage.disk_drive": "Disk Drive",
|
"block.refinedstorage.disk_drive": "Disk Drive",
|
||||||
"block.refinedstorage:disk_manipulator": "Disk Manipulator",
|
"block.refinedstorage.disk_manipulator": "Disk Manipulator",
|
||||||
"block.refinedstorage.external_storage": "External Storage",
|
"block.refinedstorage.external_storage": "External Storage",
|
||||||
"block.refinedstorage.importer": "Importer",
|
"block.refinedstorage.importer": "Importer",
|
||||||
"block.refinedstorage.exporter": "Exporter",
|
"block.refinedstorage.exporter": "Exporter",
|
||||||
|
@@ -0,0 +1,2 @@
|
|||||||
|
{
|
||||||
|
}
|
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"parent": "refinedstorage:block/cube_north_cutout",
|
"parent": "refinedstorage:block/cube_north_cutout",
|
||||||
"textures": {
|
"textures": {
|
||||||
"particle": "refinedstorage:blocks/disk_manipulator/disk_manipulator",
|
"particle": "refinedstorage:block/disk_manipulator/disk_manipulator",
|
||||||
"north": "refinedstorage:blocks/disk_manipulator/disk_manipulator",
|
"north": "refinedstorage:block/disk_manipulator/disk_manipulator",
|
||||||
"east": "refinedstorage:blocks/side",
|
"east": "refinedstorage:block/side",
|
||||||
"south": "refinedstorage:blocks/side",
|
"south": "refinedstorage:block/side",
|
||||||
"west": "refinedstorage:blocks/side",
|
"west": "refinedstorage:block/side",
|
||||||
"up": "refinedstorage:blocks/side",
|
"up": "refinedstorage:block/side",
|
||||||
"down": "refinedstorage:blocks/side",
|
"down": "refinedstorage:block/side",
|
||||||
"cutout": "refinedstorage:blocks/disk_manipulator/cutouts/connected"
|
"cutout": "refinedstorage:block/disk_manipulator/cutouts/connected"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"parent": "refinedstorage:block/cube_north_cutout",
|
"parent": "refinedstorage:block/cube_north_cutout",
|
||||||
"textures": {
|
"textures": {
|
||||||
"particle": "refinedstorage:blocks/disk_manipulator/disk_manipulator",
|
"particle": "refinedstorage:block/disk_manipulator/disk_manipulator",
|
||||||
"north": "refinedstorage:blocks/disk_manipulator/disk_manipulator",
|
"north": "refinedstorage:block/disk_manipulator/disk_manipulator",
|
||||||
"east": "refinedstorage:blocks/side",
|
"east": "refinedstorage:block/side",
|
||||||
"south": "refinedstorage:blocks/side",
|
"south": "refinedstorage:block/side",
|
||||||
"west": "refinedstorage:blocks/side",
|
"west": "refinedstorage:block/side",
|
||||||
"up": "refinedstorage:blocks/side",
|
"up": "refinedstorage:block/side",
|
||||||
"down": "refinedstorage:blocks/side",
|
"down": "refinedstorage:block/side",
|
||||||
"cutout": "refinedstorage:blocks/disk_manipulator/cutouts/disconnected"
|
"cutout": "refinedstorage:block/disk_manipulator/cutouts/disconnected"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "refinedstorage:disk_manipulator"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@@ -13,13 +13,13 @@
|
|||||||
"item": "refinedstorage:storage_housing"
|
"item": "refinedstorage:storage_housing"
|
||||||
},
|
},
|
||||||
"C": {
|
"C": {
|
||||||
"item": "#construction_core"
|
"item": "refinedstorage:construction_core"
|
||||||
},
|
},
|
||||||
"M": {
|
"M": {
|
||||||
"item": "refinedstorage:machine_casing"
|
"item": "refinedstorage:machine_casing"
|
||||||
},
|
},
|
||||||
"D": {
|
"D": {
|
||||||
"item": "#destruction_core"
|
"item": "refinedstorage:destruction_core"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"result": {
|
"result": {
|
Reference in New Issue
Block a user