Implement disk near capacity state + update transmitter textures

This commit is contained in:
Raoul Van den Berge
2016-11-03 21:59:55 +01:00
parent c16b16b8bf
commit a803a81933
10 changed files with 208 additions and 32 deletions

View File

@@ -85,7 +85,7 @@ public class BakedModelDiskDrive implements IBakedModel {
}
});
public BakedModelDiskDrive(IBakedModel base, IBakedModel disk, IBakedModel diskFull, IBakedModel diskDisconnected) {
public BakedModelDiskDrive(IBakedModel base, IBakedModel disk, IBakedModel diskNearCapacity, IBakedModel diskFull, IBakedModel diskDisconnected) {
this.base = base;
for (EnumFacing facing : EnumFacing.HORIZONTALS) {
@@ -94,10 +94,12 @@ public class BakedModelDiskDrive implements IBakedModel {
disks.put(facing, new HashMap<>());
disks.get(facing).put(TileDiskDrive.DISK_STATE_NORMAL, new ArrayList<>());
disks.get(facing).put(TileDiskDrive.DISK_STATE_NEAR_CAPACITY, new ArrayList<>());
disks.get(facing).put(TileDiskDrive.DISK_STATE_FULL, new ArrayList<>());
disks.get(facing).put(TileDiskDrive.DISK_STATE_DISCONNECTED, new ArrayList<>());
initDiskModels(disk, TileDiskDrive.DISK_STATE_NORMAL, facing);
initDiskModels(diskNearCapacity, TileDiskDrive.DISK_STATE_NEAR_CAPACITY, facing);
initDiskModels(diskFull, TileDiskDrive.DISK_STATE_FULL, facing);
initDiskModels(diskDisconnected, TileDiskDrive.DISK_STATE_DISCONNECTED, facing);
}

View File

@@ -86,7 +86,7 @@ public class BakedModelDiskManipulator implements IBakedModel {
}
});
public BakedModelDiskManipulator(IBakedModel baseConnected, IBakedModel baseDisconnected, IBakedModel disk, IBakedModel diskFull, IBakedModel diskDisconnected) {
public BakedModelDiskManipulator(IBakedModel baseConnected, IBakedModel baseDisconnected, IBakedModel disk, IBakedModel diskNearCapacity, IBakedModel diskFull, IBakedModel diskDisconnected) {
this.baseDisconnected = baseDisconnected;
for (EnumFacing facing : EnumFacing.HORIZONTALS) {
@@ -96,10 +96,12 @@ public class BakedModelDiskManipulator implements IBakedModel {
disks.put(facing, new HashMap<>());
disks.get(facing).put(TileDiskDrive.DISK_STATE_NORMAL, new ArrayList<>());
disks.get(facing).put(TileDiskDrive.DISK_STATE_NEAR_CAPACITY, new ArrayList<>());
disks.get(facing).put(TileDiskDrive.DISK_STATE_FULL, new ArrayList<>());
disks.get(facing).put(TileDiskDrive.DISK_STATE_DISCONNECTED, new ArrayList<>());
initDiskModels(disk, TileDiskDrive.DISK_STATE_NORMAL, facing);
initDiskModels(diskNearCapacity, TileDiskDrive.DISK_STATE_NEAR_CAPACITY, facing);
initDiskModels(diskFull, TileDiskDrive.DISK_STATE_FULL, facing);
initDiskModels(diskDisconnected, TileDiskDrive.DISK_STATE_DISCONNECTED, facing);
}
@@ -140,7 +142,7 @@ public class BakedModelDiskManipulator implements IBakedModel {
}
CacheKey key = new CacheKey(((IExtendedBlockState) state).getClean(), side, diskState);
cache.refresh(key);
return cache.getUnchecked(key);
}

View File

@@ -16,6 +16,7 @@ import java.util.Collections;
public class ModelDiskDrive implements IModel {
private static final ResourceLocation MODEL_BASE = new ResourceLocation("refinedstorage:block/disk_drive");
private static final ResourceLocation MODEL_DISK = new ResourceLocation("refinedstorage:block/disk");
private static final ResourceLocation MODEL_DISK_NEAR_CAPACITY = new ResourceLocation("refinedstorage:block/disk_near_capacity");
private static final ResourceLocation MODEL_DISK_FULL = new ResourceLocation("refinedstorage:block/disk_full");
private static final ResourceLocation MODEL_DISK_DISCONNECTED = new ResourceLocation("refinedstorage:block/disk_disconnected");
@@ -33,12 +34,14 @@ public class ModelDiskDrive implements IModel {
public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) {
IModel baseModel;
IModel diskModel;
IModel diskModelNearCapacity;
IModel diskModelFull;
IModel diskModelDisconnected;
try {
baseModel = ModelLoaderRegistry.getModel(MODEL_BASE);
diskModel = ModelLoaderRegistry.getModel(MODEL_DISK);
diskModelNearCapacity = ModelLoaderRegistry.getModel(MODEL_DISK_NEAR_CAPACITY);
diskModelFull = ModelLoaderRegistry.getModel(MODEL_DISK_FULL);
diskModelDisconnected = ModelLoaderRegistry.getModel(MODEL_DISK_DISCONNECTED);
} catch (Exception e) {
@@ -48,6 +51,7 @@ public class ModelDiskDrive implements IModel {
return new BakedModelDiskDrive(
baseModel.bake(state, format, bakedTextureGetter),
diskModel.bake(state, format, bakedTextureGetter),
diskModelNearCapacity.bake(state, format, bakedTextureGetter),
diskModelFull.bake(state, format, bakedTextureGetter),
diskModelDisconnected.bake(state, format, bakedTextureGetter)
);

View File

@@ -18,6 +18,7 @@ public class ModelDiskManipulator implements IModel {
private static final ResourceLocation MODEL_BASE_CONNECTED = new ResourceLocation("refinedstorage:block/disk_manipulator_connected");
private static final ResourceLocation MODEL_BASE_DISCONNECTED = new ResourceLocation("refinedstorage:block/disk_manipulator_disconnected");
private static final ResourceLocation MODEL_DISK = new ResourceLocation("refinedstorage:block/disk");
private static final ResourceLocation MODEL_DISK_NEAR_CAPACITY = new ResourceLocation("refinedstorage:block/disk_near_capacity");
private static final ResourceLocation MODEL_DISK_FULL = new ResourceLocation("refinedstorage:block/disk_full");
private static final ResourceLocation MODEL_DISK_DISCONNECTED = new ResourceLocation("refinedstorage:block/disk_disconnected");
@@ -35,6 +36,7 @@ public class ModelDiskManipulator implements IModel {
public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) {
IModel baseModelConnected, baseModelDisconnected;
IModel diskModel;
IModel diskModelNearCapacity;
IModel diskModelFull;
IModel diskModelDisconnected;
@@ -42,6 +44,7 @@ public class ModelDiskManipulator implements IModel {
baseModelConnected = ModelLoaderRegistry.getModel(MODEL_BASE_CONNECTED);
baseModelDisconnected = ModelLoaderRegistry.getModel(MODEL_BASE_DISCONNECTED);
diskModel = ModelLoaderRegistry.getModel(MODEL_DISK);
diskModelNearCapacity = ModelLoaderRegistry.getModel(MODEL_DISK_NEAR_CAPACITY);
diskModelFull = ModelLoaderRegistry.getModel(MODEL_DISK_FULL);
diskModelDisconnected = ModelLoaderRegistry.getModel(MODEL_DISK_DISCONNECTED);
} catch (Exception e) {
@@ -49,11 +52,12 @@ public class ModelDiskManipulator implements IModel {
}
return new BakedModelDiskManipulator(
baseModelConnected.bake(state, format, bakedTextureGetter),
baseModelDisconnected.bake(state, format, bakedTextureGetter),
diskModel.bake(state, format, bakedTextureGetter),
diskModelFull.bake(state, format, bakedTextureGetter),
diskModelDisconnected.bake(state, format, bakedTextureGetter)
baseModelConnected.bake(state, format, bakedTextureGetter),
baseModelDisconnected.bake(state, format, bakedTextureGetter),
diskModel.bake(state, format, bakedTextureGetter),
diskModelNearCapacity.bake(state, format, bakedTextureGetter),
diskModelFull.bake(state, format, bakedTextureGetter),
diskModelDisconnected.bake(state, format, bakedTextureGetter)
);
}

View File

@@ -41,12 +41,12 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl
public static final TileDataParameter<AccessType> ACCESS_TYPE = IAccessType.createParameter();
public class ItemStorage extends ItemStorageNBT {
private boolean wasFull;
private int lastState;
public ItemStorage(ItemStack disk) {
super(disk.getTagCompound(), EnumItemStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskDrive.this);
wasFull = isFull();
lastState = getDiskState(getStored(), getCapacity());
}
@Override
@@ -79,8 +79,10 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl
public void onStorageChanged() {
super.onStorageChanged();
if (wasFull != isFull()) {
wasFull = isFull();
int currentState = getDiskState(getStored(), getCapacity());
if (lastState != currentState) {
lastState = currentState;
updateBlock();
}
@@ -88,12 +90,12 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl
}
public class FluidStorage extends FluidStorageNBT {
private boolean wasFull;
private int lastState;
public FluidStorage(ItemStack disk) {
super(disk.getTagCompound(), EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskDrive.this);
wasFull = isFull();
lastState = getDiskState(getStored(), getCapacity());
}
@Override
@@ -126,8 +128,10 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl
public void onStorageChanged() {
super.onStorageChanged();
if (wasFull != isFull()) {
wasFull = isFull();
int currentState = getDiskState(getStored(), getCapacity());
if (lastState != currentState) {
lastState = currentState;
updateBlock();
}
@@ -142,9 +146,10 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl
private static final String NBT_DISK_STATE = "DiskState_%d";
public static final int DISK_STATE_NORMAL = 0;
public static final int DISK_STATE_FULL = 1;
public static final int DISK_STATE_DISCONNECTED = 2;
public static final int DISK_STATE_NONE = 3;
public static final int DISK_STATE_NEAR_CAPACITY = 1;
public static final int DISK_STATE_FULL = 2;
public static final int DISK_STATE_DISCONNECTED = 3;
public static final int DISK_STATE_NONE = 4;
private ItemHandlerBasic disks = new ItemHandlerBasic(8, this, IItemValidator.STORAGE_DISK) {
@Override
@@ -366,11 +371,10 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl
if (!connected) {
state = DISK_STATE_DISCONNECTED;
} else {
state = DISK_STATE_NORMAL;
if ((itemStorages[i] != null && itemStorages[i].isFull()) || (fluidStorages[i] != null && fluidStorages[i].isFull())) {
state = DISK_STATE_FULL;
}
state = getDiskState(
itemStorages[i] != null ? itemStorages[i].getStored() : fluidStorages[i].getStored(),
itemStorages[i] != null ? itemStorages[i].getCapacity() : fluidStorages[i].getCapacity()
);
}
}
@@ -390,6 +394,16 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl
}
}
public static int getDiskState(int stored, int capacity) {
if (stored == capacity) {
return DISK_STATE_FULL;
} else if ((int) ((float) stored / (float) capacity * 100F) > 85) {
return DISK_STATE_NEAR_CAPACITY;
} else {
return DISK_STATE_NORMAL;
}
}
@Override
public int getCompare() {
return compare;

View File

@@ -111,12 +111,12 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte
};
public class ItemStorage extends ItemStorageNBT {
private boolean wasFull;
private int lastState;
public ItemStorage(ItemStack disk) {
super(disk.getTagCompound(), EnumItemStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskManipulator.this);
wasFull = isFull();
lastState = TileDiskDrive.getDiskState(getStored(), getCapacity());
}
@Override
@@ -146,8 +146,10 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte
public void onStorageChanged() {
super.onStorageChanged();
if (wasFull != isFull()) {
wasFull = isFull();
int currentState = TileDiskDrive.getDiskState(getStored(), getCapacity());
if (lastState != currentState) {
lastState = currentState;
updateBlock();
}
@@ -155,12 +157,12 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte
}
public class FluidStorage extends FluidStorageNBT {
private boolean wasFull;
private int lastState;
public FluidStorage(ItemStack disk) {
super(disk.getTagCompound(), EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskManipulator.this);
wasFull = isFull();
lastState = TileDiskDrive.getDiskState(getStored(), getCapacity());
}
@Override
@@ -190,8 +192,10 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte
public void onStorageChanged() {
super.onStorageChanged();
if (wasFull != isFull()) {
wasFull = isFull();
int currentState = TileDiskDrive.getDiskState(getStored(), getCapacity());
if (lastState != currentState) {
lastState = currentState;
updateBlock();
}

View File

@@ -0,0 +1,146 @@
{
"__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)",
"textures": {
"0": "refinedstorage:blocks/disk_near_capacity"
},
"elements": [
{
"name": "disk",
"from": [
11.0,
14.0,
-1.0
],
"to": [
16.0,
16.0,
0.0
],
"faces": {
"north": {
"texture": "#0",
"uv": [
3.0,
0.0,
8.0,
2.0
]
},
"east": {
"texture": "#0",
"uv": [
2.0,
0.0,
3.0,
2.0
]
},
"south": {
"texture": "#0",
"uv": [
9.0,
0.0,
14.0,
2.0
]
},
"west": {
"texture": "#0",
"uv": [
8.0,
0.0,
9.0,
2.0
]
},
"up": {
"texture": "#0",
"uv": [
3.0,
2.0,
8.0,
3.0
]
},
"down": {
"texture": "#0",
"uv": [
3.0,
3.0,
8.0,
4.0
]
}
}
},
{
"name": "led",
"from": [
12.0,
13.95,
-1.05
],
"to": [
13.0,
15.0,
-0.10000000000000009
],
"faces": {
"north": {
"texture": "#0",
"uv": [
14.0,
1.0,
15.0,
2.0
]
},
"east": {
"texture": "#0",
"uv": [
14.0,
1.0,
15.0,
2.0
]
},
"south": {
"texture": "#0",
"uv": [
14.0,
1.0,
15.0,
2.0
]
},
"west": {
"texture": "#0",
"uv": [
14.0,
1.0,
15.0,
2.0
]
},
"up": {
"texture": "#0",
"uv": [
14.0,
1.0,
15.0,
2.0
]
},
"down": {
"texture": "#0",
"uv": [
14.0,
1.0,
15.0,
2.0
]
}
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB