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.color.PatternItemColor;
|
||||
import com.raoulvdberge.refinedstorage.render.model.DiskDriveBakedModel;
|
||||
import com.raoulvdberge.refinedstorage.render.model.DiskManipulatorBakedModel;
|
||||
import com.raoulvdberge.refinedstorage.render.model.FullbrightBakedModel;
|
||||
import com.raoulvdberge.refinedstorage.render.model.PatternBakedModel;
|
||||
import com.raoulvdberge.refinedstorage.render.tesr.StorageMonitorTileRenderer;
|
||||
@@ -74,6 +75,19 @@ public class ClientSetup {
|
||||
new ResourceLocation(RS.ID, "block/disks/leds")
|
||||
).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));
|
||||
|
||||
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_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::onModelBake);
|
||||
|
||||
@@ -136,6 +153,7 @@ public class ClientSetup {
|
||||
ScreenManager.registerFactory(RSContainers.STORAGE_MONITOR, StorageMonitorScreen::new);
|
||||
ScreenManager.registerFactory(RSContainers.CONSTRUCTOR, ConstructorScreen::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_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.node.*;
|
||||
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.StorageNetworkNode;
|
||||
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(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(DiskManipulatorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DiskManipulatorNetworkNode(world, pos)));
|
||||
|
||||
API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory());
|
||||
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 ConstructorBlock());
|
||||
e.getRegistry().register(new DestructorBlock());
|
||||
e.getRegistry().register(new DiskManipulatorBlock());
|
||||
}
|
||||
|
||||
@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(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(DiskManipulatorTile::new, RSBlocks.DISK_MANIPULATOR).build(null).setRegistryName(RS.ID, "disk_manipulator")));
|
||||
}
|
||||
|
||||
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<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<DiskManipulatorContainer, DiskManipulatorTile>((windowId, inv, tile) -> new DiskManipulatorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "disk_manipulator"));
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
@@ -340,6 +345,7 @@ public final class RS {
|
||||
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.STORAGE_MONITOR));
|
||||
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CONSTRUCTOR));
|
||||
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.CREATIVE));
|
||||
|
@@ -72,10 +72,11 @@ public final class RSBlocks {
|
||||
public static final ConstructorBlock CONSTRUCTOR = null;
|
||||
@ObjectHolder(RS.ID + ":destructor")
|
||||
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 BlockCrafter CRAFTER = new BlockCrafter();
|
||||
public static final BlockDiskManipulator DISK_MANIPULATOR = new BlockDiskManipulator();
|
||||
public static final BlockPortableGrid PORTABLE_GRID = new BlockPortableGrid();
|
||||
public static final BlockCrafterManager CRAFTER_MANAGER = new BlockCrafterManager();
|
||||
}
|
@@ -43,6 +43,8 @@ public final class RSContainers {
|
||||
public static final ContainerType<ConstructorContainer> CONSTRUCTOR = null;
|
||||
@ObjectHolder(RS.ID + ":destructor")
|
||||
public static final ContainerType<DestructorContainer> DESTRUCTOR = null;
|
||||
@ObjectHolder(RS.ID + ":disk_manipulator")
|
||||
public static final ContainerType<DiskManipulatorContainer> DISK_MANIPULATOR = null;
|
||||
|
||||
//@ObjectHolder(RS.ID + ":crafter")
|
||||
public static final ContainerType<CrafterContainer> CRAFTER = null;
|
||||
@@ -50,6 +52,4 @@ public final class RSContainers {
|
||||
public static final ContainerType<CrafterContainer> CRAFTER_MANAGER = null;
|
||||
//@ObjectHolder(RS.ID + ":crafting_monitor")
|
||||
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 craftingMonitorUsage;
|
||||
public int crafterManagerUsage;
|
||||
public int diskManipulatorUsage;
|
||||
//endregion
|
||||
|
||||
//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");
|
||||
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");
|
||||
diskManipulatorUsage = config.getInt("diskManipulator", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Disk Manipulators");
|
||||
//endregion
|
||||
|
||||
//region Portable Grid
|
||||
|
@@ -72,11 +72,11 @@ public class RSTiles {
|
||||
public static final TileEntityType<ConstructorTile> CONSTRUCTOR = null;
|
||||
@ObjectHolder(RS.ID + ":destructor")
|
||||
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")
|
||||
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")
|
||||
public static final TileEntityType<TileCrafter> CRAFTER = null;
|
||||
//@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.IStorageDiskContainerContext;
|
||||
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.storage.cache.FluidStorageCache;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.ItemStorageCache;
|
||||
@@ -34,26 +35,6 @@ import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
import java.util.List;
|
||||
|
||||
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");
|
||||
|
||||
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.IStorageDiskListener;
|
||||
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.util.StackUtils;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
@@ -18,14 +19,14 @@ import java.util.Collection;
|
||||
public class FluidDriveWrapperStorageDisk implements IStorageDisk<FluidStack> {
|
||||
private DiskDriveNetworkNode diskDrive;
|
||||
private IStorageDisk<FluidStack> parent;
|
||||
private DiskDriveNetworkNode.DiskState lastState;
|
||||
private DiskState lastState;
|
||||
|
||||
public FluidDriveWrapperStorageDisk(DiskDriveNetworkNode diskDrive, IStorageDisk<FluidStack> parent) {
|
||||
this.diskDrive = diskDrive;
|
||||
this.parent = parent;
|
||||
this.setSettings(
|
||||
() -> {
|
||||
DiskDriveNetworkNode.DiskState currentState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
||||
DiskState currentState = DiskState.get(getStored(), getCapacity());
|
||||
|
||||
if (this.lastState != currentState) {
|
||||
this.lastState = currentState;
|
||||
@@ -35,7 +36,7 @@ public class FluidDriveWrapperStorageDisk implements IStorageDisk<FluidStack> {
|
||||
},
|
||||
diskDrive
|
||||
);
|
||||
this.lastState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
||||
this.lastState = DiskState.get(getStored(), getCapacity());
|
||||
}
|
||||
|
||||
@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.IStorageDiskListener;
|
||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
@@ -18,14 +19,14 @@ import java.util.Collection;
|
||||
public class ItemDriveWrapperStorageDisk implements IStorageDisk<ItemStack> {
|
||||
private DiskDriveNetworkNode diskDrive;
|
||||
private IStorageDisk<ItemStack> parent;
|
||||
private DiskDriveNetworkNode.DiskState lastState;
|
||||
private DiskState lastState;
|
||||
|
||||
public ItemDriveWrapperStorageDisk(DiskDriveNetworkNode diskDrive, IStorageDisk<ItemStack> parent) {
|
||||
this.diskDrive = diskDrive;
|
||||
this.parent = parent;
|
||||
this.setSettings(
|
||||
() -> {
|
||||
DiskDriveNetworkNode.DiskState currentState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
||||
DiskState currentState = DiskState.get(getStored(), getCapacity());
|
||||
|
||||
if (this.lastState != currentState) {
|
||||
this.lastState = currentState;
|
||||
@@ -35,7 +36,7 @@ public class ItemDriveWrapperStorageDisk implements IStorageDisk<ItemStack> {
|
||||
},
|
||||
diskDrive
|
||||
);
|
||||
this.lastState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
||||
this.lastState = DiskState.get(getStored(), getCapacity());
|
||||
}
|
||||
|
||||
@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.IComparer;
|
||||
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.inventory.fluid.FluidInventory;
|
||||
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.NetworkNodeInventoryListener;
|
||||
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.IType;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IWhitelistBlacklist;
|
||||
@@ -38,7 +39,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
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 int IO_MODE_INSERT = 0;
|
||||
@@ -82,11 +83,13 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
||||
slot,
|
||||
itemDisks,
|
||||
fluidDisks,
|
||||
s -> new StorageDiskItemManipulatorWrapper(NetworkNodeDiskManipulator.this, s),
|
||||
s -> new StorageDiskFluidManipulatorWrapper(NetworkNodeDiskManipulator.this, s)
|
||||
s -> new StorageDiskItemManipulatorWrapper(DiskManipulatorNetworkNode.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,
|
||||
itemDisks,
|
||||
fluidDisks,
|
||||
s -> new StorageDiskItemManipulatorWrapper(NetworkNodeDiskManipulator.this, s),
|
||||
s -> new StorageDiskFluidManipulatorWrapper(NetworkNodeDiskManipulator.this, s)
|
||||
s -> new StorageDiskItemManipulatorWrapper(DiskManipulatorNetworkNode.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);
|
||||
|
||||
public NetworkNodeDiskManipulator(World world, BlockPos pos) {
|
||||
super(world, pos);
|
||||
}
|
||||
|
||||
private BaseItemHandler itemFilters = new BaseItemHandler(9).addListener(new NetworkNodeInventoryListener(this));
|
||||
private FluidInventory fluidFilters = new FluidInventory(9).addListener(new NetworkNodeFluidInventoryListener(this));
|
||||
|
||||
public DiskManipulatorNetworkNode(World world, BlockPos pos) {
|
||||
super(world, pos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnergyUsage() {
|
||||
return RS.INSTANCE.config.diskManipulatorUsage + upgrades.getEnergyUsage();
|
||||
return RS.SERVER_CONFIG.getDiskManipulator().getUsage() + upgrades.getEnergyUsage();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -238,7 +243,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
||||
extracted = network.extractItem(toExtract, upgrades.getStackInteractCount(), compare, Action.PERFORM);
|
||||
}
|
||||
} else {
|
||||
while (itemFilters.getSlots() > i && extracted == null) {
|
||||
while (itemFilters.getSlots() > i && extracted.isEmpty()) {
|
||||
ItemStack filterStack = ItemStack.EMPTY;
|
||||
|
||||
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);
|
||||
}
|
||||
} else {
|
||||
while (fluidFilters.getSlots() > i && extracted == null) {
|
||||
while (fluidFilters.getSlots() > i && extracted.isEmpty()) {
|
||||
FluidStack filterStack = FluidStack.EMPTY;
|
||||
|
||||
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
|
||||
public int getCompare() {
|
||||
return compare;
|
||||
@@ -385,7 +413,7 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab
|
||||
|
||||
@Override
|
||||
public int getType() {
|
||||
return world.isRemote ? TileDiskManipulator.TYPE.getValue() : type;
|
||||
return world.isRemote ? DiskManipulatorTile.TYPE.getValue() : type;
|
||||
}
|
||||
|
||||
@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.IStorageDiskListener;
|
||||
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.util.StackUtils;
|
||||
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
||||
@@ -18,16 +18,16 @@ import javax.annotation.Nullable;
|
||||
import java.util.Collection;
|
||||
|
||||
public class StorageDiskFluidManipulatorWrapper implements IStorageDisk<FluidStack> {
|
||||
private NetworkNodeDiskManipulator diskManipulator;
|
||||
private DiskManipulatorNetworkNode diskManipulator;
|
||||
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.parent = parent;
|
||||
this.setSettings(
|
||||
() -> {
|
||||
DiskDriveNetworkNode.DiskState currentState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
||||
DiskState currentState = DiskState.get(getStored(), getCapacity());
|
||||
|
||||
if (lastState != currentState) {
|
||||
lastState = currentState;
|
||||
@@ -37,7 +37,7 @@ public class StorageDiskFluidManipulatorWrapper implements IStorageDisk<FluidSta
|
||||
},
|
||||
diskManipulator
|
||||
);
|
||||
this.lastState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
||||
this.lastState = DiskState.get(getStored(), getCapacity());
|
||||
}
|
||||
|
||||
@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.IStorageDiskListener;
|
||||
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.util.WorldUtils;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -18,16 +18,16 @@ import javax.annotation.Nullable;
|
||||
import java.util.Collection;
|
||||
|
||||
public class StorageDiskItemManipulatorWrapper implements IStorageDisk<ItemStack> {
|
||||
private NetworkNodeDiskManipulator diskManipulator;
|
||||
private DiskManipulatorNetworkNode diskManipulator;
|
||||
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.parent = parent;
|
||||
this.setSettings(
|
||||
() -> {
|
||||
DiskDriveNetworkNode.DiskState currentState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
||||
DiskState currentState = DiskState.get(getStored(), getCapacity());
|
||||
|
||||
if (lastState != currentState) {
|
||||
lastState = currentState;
|
||||
@@ -37,7 +37,7 @@ public class StorageDiskItemManipulatorWrapper implements IStorageDisk<ItemStack
|
||||
},
|
||||
diskManipulator
|
||||
);
|
||||
this.lastState = DiskDriveNetworkNode.DiskState.get(getStored(), getCapacity());
|
||||
this.lastState = DiskState.get(getStored(), getCapacity());
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(BlockState state) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(BlockState state) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
|
@@ -47,11 +47,6 @@ public class GridBlock extends NodeBlock {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(BlockState state) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
|
@@ -54,11 +54,6 @@ public class StorageBlock extends NodeBlock {
|
||||
super.onBlockPlacedBy(world, pos, state, entity, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(BlockState state) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
|
@@ -29,6 +29,7 @@ public class ServerConfig {
|
||||
private WirelessFluidGrid wirelessFluidGrid;
|
||||
private Constructor constructor;
|
||||
private Destructor destructor;
|
||||
private DiskManipulator diskManipulator;
|
||||
|
||||
public ServerConfig() {
|
||||
upgrades = new Upgrades();
|
||||
@@ -54,6 +55,7 @@ public class ServerConfig {
|
||||
wirelessFluidGrid = new WirelessFluidGrid();
|
||||
constructor = new Constructor();
|
||||
destructor = new Destructor();
|
||||
diskManipulator = new DiskManipulator();
|
||||
|
||||
spec = builder.build();
|
||||
}
|
||||
@@ -150,6 +152,10 @@ public class ServerConfig {
|
||||
return destructor;
|
||||
}
|
||||
|
||||
public DiskManipulator getDiskManipulator() {
|
||||
return diskManipulator;
|
||||
}
|
||||
|
||||
public ForgeConfigSpec getSpec() {
|
||||
return spec;
|
||||
}
|
||||
@@ -719,4 +725,20 @@ public class ServerConfig {
|
||||
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.container.slot.filter.FilterSlot;
|
||||
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 net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraftforge.items.SlotItemHandler;
|
||||
|
||||
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);
|
||||
|
||||
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.LoadingCache;
|
||||
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 net.minecraft.block.BlockState;
|
||||
import net.minecraft.client.renderer.model.BakedQuad;
|
||||
@@ -21,10 +21,10 @@ public class DiskDriveBakedModel extends DelegateBakedModel {
|
||||
private class CacheKey {
|
||||
private BlockState state;
|
||||
private Direction side;
|
||||
private DiskDriveNetworkNode.DiskState[] diskState;
|
||||
private DiskState[] diskState;
|
||||
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.side = side;
|
||||
this.diskState = diskState;
|
||||
@@ -64,7 +64,7 @@ public class DiskDriveBakedModel extends DelegateBakedModel {
|
||||
}
|
||||
|
||||
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>>() {
|
||||
@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));
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
@@ -100,14 +100,14 @@ public class DiskDriveBakedModel extends DelegateBakedModel {
|
||||
|
||||
disksByFacing.put(facing, new HashMap<>());
|
||||
|
||||
addDiskModels(disk, DiskDriveNetworkNode.DiskState.NORMAL, facing);
|
||||
addDiskModels(diskNearCapacity, DiskDriveNetworkNode.DiskState.NEAR_CAPACITY, facing);
|
||||
addDiskModels(diskFull, DiskDriveNetworkNode.DiskState.FULL, facing);
|
||||
addDiskModels(diskDisconnected, DiskDriveNetworkNode.DiskState.DISCONNECTED, facing);
|
||||
addDiskModels(disk, DiskState.NORMAL, facing);
|
||||
addDiskModels(diskNearCapacity, DiskState.NEAR_CAPACITY, facing);
|
||||
addDiskModels(diskFull, DiskState.FULL, 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<>());
|
||||
|
||||
for (int y = 0; y < 4; ++y) {
|
||||
@@ -133,7 +133,7 @@ public class DiskDriveBakedModel extends DelegateBakedModel {
|
||||
|
||||
@Override
|
||||
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) {
|
||||
return base.getQuads(state, side, rand, data);
|
||||
|
@@ -1,32 +1,35 @@
|
||||
package com.raoulvdberge.refinedstorage.render.model;
|
||||
/*
|
||||
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.raoulvdberge.refinedstorage.RSBlocks;
|
||||
import com.raoulvdberge.refinedstorage.block.BlockDiskManipulator;
|
||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsDisk;
|
||||
import net.minecraft.block.state.BlockState;
|
||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||
import com.raoulvdberge.refinedstorage.block.DiskManipulatorBlock;
|
||||
import com.raoulvdberge.refinedstorage.tile.DiskManipulatorTile;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.client.renderer.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.model.IBakedModel;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraftforge.client.model.data.IModelData;
|
||||
import net.minecraftforge.common.model.TRSRTransformation;
|
||||
import net.minecraftforge.common.property.IExtendedBlockState;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.vecmath.Vector3f;
|
||||
import java.util.*;
|
||||
|
||||
public class BakedModelDiskManipulator extends BakedModelDelegate {
|
||||
public class DiskManipulatorBakedModel extends DelegateBakedModel {
|
||||
private class CacheKey {
|
||||
private BlockState state;
|
||||
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.side = side;
|
||||
this.diskState = diskState;
|
||||
this.random = random;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -63,18 +66,19 @@ public class BakedModelDiskManipulator extends BakedModelDelegate {
|
||||
|
||||
private Map<Direction, IBakedModel> modelsConnected = 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>>() {
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
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) {
|
||||
if (key.diskState[i] != ConstantsDisk.DISK_STATE_NONE) {
|
||||
quads.addAll(disks.get(facing).get(key.diskState[i]).get(i).getQuads(key.state, key.side, 0));
|
||||
if (key.diskState[i] != DiskState.NONE) {
|
||||
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);
|
||||
|
||||
for (Direction facing : Direction.HORIZONTALS) {
|
||||
modelsConnected.put(facing, new BakedModelTRSR(baseConnected, facing));
|
||||
modelsDisconnected.put(facing, new BakedModelTRSR(baseDisconnected, facing));
|
||||
for (Direction facing : Direction.values()) {
|
||||
if (facing.getHorizontalIndex() == -1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
modelsConnected.put(facing, new TRSRBakedModel(baseConnected, facing));
|
||||
modelsDisconnected.put(facing, new TRSRBakedModel(baseDisconnected, facing));
|
||||
|
||||
disks.put(facing, new HashMap<>());
|
||||
|
||||
disks.get(facing).put(ConstantsDisk.DISK_STATE_NORMAL, new ArrayList<>());
|
||||
disks.get(facing).put(ConstantsDisk.DISK_STATE_NEAR_CAPACITY, new ArrayList<>());
|
||||
disks.get(facing).put(ConstantsDisk.DISK_STATE_FULL, new ArrayList<>());
|
||||
disks.get(facing).put(ConstantsDisk.DISK_STATE_DISCONNECTED, new ArrayList<>());
|
||||
disks.get(facing).put(DiskState.NORMAL, new ArrayList<>());
|
||||
disks.get(facing).put(DiskState.NEAR_CAPACITY, new ArrayList<>());
|
||||
disks.get(facing).put(DiskState.FULL, new ArrayList<>());
|
||||
disks.get(facing).put(DiskState.DISCONNECTED, new ArrayList<>());
|
||||
|
||||
initDiskModels(disk, ConstantsDisk.DISK_STATE_NORMAL, facing);
|
||||
initDiskModels(diskNearCapacity, ConstantsDisk.DISK_STATE_NEAR_CAPACITY, facing);
|
||||
initDiskModels(diskFull, ConstantsDisk.DISK_STATE_FULL, facing);
|
||||
initDiskModels(diskDisconnected, ConstantsDisk.DISK_STATE_DISCONNECTED, facing);
|
||||
addDiskModels(disk, DiskState.NORMAL, facing);
|
||||
addDiskModels(diskNearCapacity, DiskState.NEAR_CAPACITY, facing);
|
||||
addDiskModels(diskFull, DiskState.FULL, 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 y = 0; y < 3; ++y) {
|
||||
BakedModelTRSR model = new BakedModelTRSR(disk, facing);
|
||||
TRSRBakedModel model = new TRSRBakedModel(disk, facing);
|
||||
|
||||
Vector3f trans = model.transformation.getTranslation();
|
||||
|
||||
@@ -126,20 +139,15 @@ public class BakedModelDiskManipulator extends BakedModelDelegate {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, long rand) {
|
||||
if (!(state instanceof IExtendedBlockState)) {
|
||||
return base.getQuads(state, side, rand);
|
||||
}
|
||||
|
||||
Integer[] diskState = ((IExtendedBlockState) state).getValue(BlockDiskManipulator.DISK_STATE);
|
||||
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand, IModelData data) {
|
||||
DiskState[] diskState = data.getData(DiskManipulatorTile.DISK_STATE_PROPERTY);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
*/
|
@@ -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;
|
||||
|
||||
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.tile.TileDiskManipulator;
|
||||
import com.raoulvdberge.refinedstorage.tile.DiskManipulatorTile;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
@@ -14,16 +14,16 @@ public class IoModeSideButton extends SideButton {
|
||||
|
||||
@Override
|
||||
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
|
||||
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
|
||||
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.api.storage.AccessType;
|
||||
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.tile.config.*;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.RSSerializers;
|
||||
@@ -76,12 +77,13 @@ public class DiskDriveTile extends NetworkNodeTile<DiskDriveNetworkNode> {
|
||||
return capacity;
|
||||
});
|
||||
|
||||
public static final ModelProperty<DiskState[]> DISK_STATE_PROPERTY = new ModelProperty<>();
|
||||
|
||||
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 DiskDriveNetworkNode.DiskState[] diskState = new DiskDriveNetworkNode.DiskState[8];
|
||||
private DiskState[] diskState = new DiskState[8];
|
||||
|
||||
public DiskDriveTile() {
|
||||
super(RSTiles.DISK_DRIVE);
|
||||
@@ -94,7 +96,7 @@ public class DiskDriveTile extends NetworkNodeTile<DiskDriveNetworkNode> {
|
||||
dataManager.addWatchedParameter(STORED);
|
||||
dataManager.addWatchedParameter(CAPACITY);
|
||||
|
||||
Arrays.fill(diskState, DiskDriveNetworkNode.DiskState.NONE);
|
||||
Arrays.fill(diskState, DiskState.NONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -103,7 +105,7 @@ public class DiskDriveTile extends NetworkNodeTile<DiskDriveNetworkNode> {
|
||||
|
||||
ListNBT list = new ListNBT();
|
||||
|
||||
for (DiskDriveNetworkNode.DiskState state : getNode().getDiskState()) {
|
||||
for (DiskState state : getNode().getDiskState()) {
|
||||
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);
|
||||
|
||||
for (int i = 0; i < list.size(); ++i) {
|
||||
diskState[i] = DiskDriveNetworkNode.DiskState.values()[list.getInt(i)];
|
||||
diskState[i] = DiskState.values()[list.getInt(i)];
|
||||
}
|
||||
|
||||
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.network.grid.handler.PortableFluidGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.PortableItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.GridNetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.DiskDriveNetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.PortableFluidStorageCache;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.PortableItemStorageCache;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener.PortableFluidGridStorageCacheListener;
|
||||
@@ -756,7 +756,7 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid,
|
||||
|
||||
if (renderInfo.getStored() == renderInfo.getCapacity()) {
|
||||
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;
|
||||
} else {
|
||||
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.disk_drive": "Disk Drive",
|
||||
"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.importer": "Importer",
|
||||
"gui.refinedstorage.exporter": "Exporter",
|
||||
@@ -184,7 +187,7 @@
|
||||
"block.refinedstorage.pattern_grid": "Pattern Grid",
|
||||
"block.refinedstorage.fluid_grid": "Fluid Grid",
|
||||
"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.importer": "Importer",
|
||||
"block.refinedstorage.exporter": "Exporter",
|
||||
|
@@ -0,0 +1,2 @@
|
||||
{
|
||||
}
|
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"parent": "refinedstorage:block/cube_north_cutout",
|
||||
"textures": {
|
||||
"particle": "refinedstorage:blocks/disk_manipulator/disk_manipulator",
|
||||
"north": "refinedstorage:blocks/disk_manipulator/disk_manipulator",
|
||||
"east": "refinedstorage:blocks/side",
|
||||
"south": "refinedstorage:blocks/side",
|
||||
"west": "refinedstorage:blocks/side",
|
||||
"up": "refinedstorage:blocks/side",
|
||||
"down": "refinedstorage:blocks/side",
|
||||
"cutout": "refinedstorage:blocks/disk_manipulator/cutouts/connected"
|
||||
"particle": "refinedstorage:block/disk_manipulator/disk_manipulator",
|
||||
"north": "refinedstorage:block/disk_manipulator/disk_manipulator",
|
||||
"east": "refinedstorage:block/side",
|
||||
"south": "refinedstorage:block/side",
|
||||
"west": "refinedstorage:block/side",
|
||||
"up": "refinedstorage:block/side",
|
||||
"down": "refinedstorage:block/side",
|
||||
"cutout": "refinedstorage:block/disk_manipulator/cutouts/connected"
|
||||
}
|
||||
}
|
||||
|
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"parent": "refinedstorage:block/cube_north_cutout",
|
||||
"textures": {
|
||||
"particle": "refinedstorage:blocks/disk_manipulator/disk_manipulator",
|
||||
"north": "refinedstorage:blocks/disk_manipulator/disk_manipulator",
|
||||
"east": "refinedstorage:blocks/side",
|
||||
"south": "refinedstorage:blocks/side",
|
||||
"west": "refinedstorage:blocks/side",
|
||||
"up": "refinedstorage:blocks/side",
|
||||
"down": "refinedstorage:blocks/side",
|
||||
"cutout": "refinedstorage:blocks/disk_manipulator/cutouts/disconnected"
|
||||
"particle": "refinedstorage:block/disk_manipulator/disk_manipulator",
|
||||
"north": "refinedstorage:block/disk_manipulator/disk_manipulator",
|
||||
"east": "refinedstorage:block/side",
|
||||
"south": "refinedstorage:block/side",
|
||||
"west": "refinedstorage:block/side",
|
||||
"up": "refinedstorage:block/side",
|
||||
"down": "refinedstorage:block/side",
|
||||
"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"
|
||||
},
|
||||
"C": {
|
||||
"item": "#construction_core"
|
||||
"item": "refinedstorage:construction_core"
|
||||
},
|
||||
"M": {
|
||||
"item": "refinedstorage:machine_casing"
|
||||
},
|
||||
"D": {
|
||||
"item": "#destruction_core"
|
||||
"item": "refinedstorage:destruction_core"
|
||||
}
|
||||
},
|
||||
"result": {
|
Reference in New Issue
Block a user