Fix disk drive rendering

This commit is contained in:
Raoul Van den Berge
2016-10-24 21:51:22 +02:00
parent 21673c1b28
commit 0c5a575c88
2 changed files with 39 additions and 13 deletions

View File

@@ -18,22 +18,50 @@ import net.minecraftforge.common.property.IExtendedBlockState;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import javax.vecmath.Vector3f; import javax.vecmath.Vector3f;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BakedModelDiskDrive implements IBakedModel { public class BakedModelDiskDrive implements IBakedModel {
class CacheKey { private class CacheKey {
private IBlockState state; private IBlockState state;
private EnumFacing side; private EnumFacing side;
private Integer[] diskState; private Integer[] diskState;
CacheKey(IBlockState state, EnumFacing side, Integer[] diskState) { CacheKey(IBlockState state, @Nullable EnumFacing side, Integer[] diskState) {
this.state = state; this.state = state;
this.side = side; this.side = side;
this.diskState = diskState; this.diskState = diskState;
} }
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
CacheKey cacheKey = (CacheKey) o;
if (!state.equals(cacheKey.state)) {
return false;
}
if (side != cacheKey.side) {
return false;
}
return Arrays.equals(diskState, cacheKey.diskState);
}
@Override
public int hashCode() {
int result = state.hashCode();
result = 31 * result + (side != null ? side.hashCode() : 0);
result = 31 * result + Arrays.hashCode(diskState);
return result;
}
} }
private IBakedModel base; private IBakedModel base;
@@ -99,7 +127,7 @@ public class BakedModelDiskDrive implements IBakedModel {
@Override @Override
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) { public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) {
if (!(state instanceof IExtendedBlockState) || side == null) { if (!(state instanceof IExtendedBlockState)) {
return base.getQuads(state, side, rand); return base.getQuads(state, side, rand);
} }
@@ -109,12 +137,6 @@ public class BakedModelDiskDrive implements IBakedModel {
return base.getQuads(state, side, rand); return base.getQuads(state, side, rand);
} }
for (Integer individualState : diskState) {
if (individualState == null) {
return base.getQuads(state, side, rand);
}
}
CacheKey key = new CacheKey(((IExtendedBlockState) state).getClean(), side, diskState); CacheKey key = new CacheKey(((IExtendedBlockState) state).getClean(), side, diskState);
return cache.getUnchecked(key); return cache.getUnchecked(key);

View File

@@ -209,6 +209,10 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl
dataManager.addWatchedParameter(TYPE); dataManager.addWatchedParameter(TYPE);
dataManager.addWatchedParameter(VOID_EXCESS); dataManager.addWatchedParameter(VOID_EXCESS);
dataManager.addWatchedParameter(ACCESS_TYPE); dataManager.addWatchedParameter(ACCESS_TYPE);
for (int i = 0; i < 8; ++i) {
diskState[i] = DISK_STATE_NONE;
}
} }
@Override @Override