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

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

View File

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

View File

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

View File

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

View File

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

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

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

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

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

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

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

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;
}
@Override
public boolean hasTileEntity(BlockState state) {
return true;
}
@Nullable
@Override
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);
}
@Override
public boolean hasTileEntity(BlockState state) {
return true;
}
@Nullable
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

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

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

View File

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

View File

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

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"
},
"C": {
"item": "#construction_core"
"item": "refinedstorage:construction_core"
},
"M": {
"item": "refinedstorage:machine_casing"
},
"D": {
"item": "#destruction_core"
"item": "refinedstorage:destruction_core"
}
},
"result": {