Re-add the Disk Manipulator

This commit is contained in:
raoulvdberge
2019-10-24 18:52:48 +02:00
parent f68b47ec22
commit af53fe6005
37 changed files with 486 additions and 344 deletions

View File

@@ -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);

View File

@@ -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));

View File

@@ -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();
} }

View File

@@ -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;
} }

View File

@@ -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

View File

@@ -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")

View File

@@ -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;
}
}
}

View File

@@ -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";

View File

@@ -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

View File

@@ -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

View File

@@ -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,12 +83,14 @@ 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)
); );
if (!reading) {
WorldUtils.updateBlock(world, pos); WorldUtils.updateBlock(world, pos);
} }
}
}); });
private BaseItemHandler outputDisks = new BaseItemHandler(3) private BaseItemHandler outputDisks = new BaseItemHandler(3)
@@ -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)
); );
if (!reading) {
WorldUtils.updateBlock(world, pos); 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

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -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) {

View File

@@ -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;
}
}

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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();
}
}
} }

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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);
} }
} }
*/

View File

@@ -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"));
}
}

View File

@@ -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"));
}
}

View File

@@ -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);
} }
} }

View File

@@ -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();

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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;

View File

@@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "refinedstorage:block/disk_manipulator_disconnected"
}
}
}

View File

@@ -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",

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -0,0 +1,19 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "refinedstorage:disk_manipulator"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View File

@@ -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": {