Fix some issues with covers. Make the item cover extend the block cover.

This commit is contained in:
raoulvdberge
2018-07-05 22:28:15 +02:00
parent 6350d70835
commit 7009eb883e
4 changed files with 39 additions and 233 deletions

View File

@@ -22,8 +22,9 @@ import java.util.ArrayList;
import java.util.List;
public class BakedModelCableCover implements IBakedModel {
private static TextureAtlasSprite GREY_SPRITE;
private IBakedModel base;
private TextureAtlasSprite greySprite;
public BakedModelCableCover(IBakedModel base) {
this.base = base;
@@ -36,19 +37,25 @@ public class BakedModelCableCover implements IBakedModel {
if (state != null) {
IExtendedBlockState s = (IExtendedBlockState) state;
addCover(quads, s.getValue(BlockCable.COVER_NORTH), EnumFacing.NORTH, side, rand, s);
addCover(quads, s.getValue(BlockCable.COVER_SOUTH), EnumFacing.SOUTH, side, rand, s);
addCover(quads, s.getValue(BlockCable.COVER_EAST), EnumFacing.EAST, side, rand, s);
addCover(quads, s.getValue(BlockCable.COVER_WEST), EnumFacing.WEST, side, rand, s);
addCover(quads, s.getValue(BlockCable.COVER_DOWN), EnumFacing.DOWN, side, rand, s);
addCover(quads, s.getValue(BlockCable.COVER_UP), EnumFacing.UP, side, rand, s);
boolean hasUp = CoverManager.getBlockState(s.getValue(BlockCable.COVER_UP)) != null;
boolean hasDown = CoverManager.getBlockState(s.getValue(BlockCable.COVER_DOWN)) != null;
boolean hasEast = CoverManager.getBlockState(s.getValue(BlockCable.COVER_EAST)) != null;
boolean hasWest = CoverManager.getBlockState(s.getValue(BlockCable.COVER_WEST)) != null;
addCover(quads, s.getValue(BlockCable.COVER_NORTH), EnumFacing.NORTH, side, rand, hasUp, hasDown, hasEast, hasWest);
addCover(quads, s.getValue(BlockCable.COVER_SOUTH), EnumFacing.SOUTH, side, rand, hasUp, hasDown, hasEast, hasWest);
addCover(quads, s.getValue(BlockCable.COVER_EAST), EnumFacing.EAST, side, rand, hasUp, hasDown, hasEast, hasWest);
addCover(quads, s.getValue(BlockCable.COVER_WEST), EnumFacing.WEST, side, rand, hasUp, hasDown, hasEast, hasWest);
addCover(quads, s.getValue(BlockCable.COVER_DOWN), EnumFacing.DOWN, side, rand, hasUp, hasDown, hasEast, hasWest);
addCover(quads, s.getValue(BlockCable.COVER_UP), EnumFacing.UP, side, rand, hasUp, hasDown, hasEast, hasWest);
}
return quads;
}
private void addCover(List<BakedQuad> quads, @Nullable ItemStack coverStack, EnumFacing coverSide, EnumFacing side, long rand, IExtendedBlockState state) {
if (coverStack == null) {
protected static void addCover(List<BakedQuad> quads, @Nullable ItemStack coverStack, EnumFacing coverSide, EnumFacing side, long rand, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest) {
if (coverStack == null || coverStack.isEmpty()) {
return;
}
@@ -62,18 +69,14 @@ public class BakedModelCableCover implements IBakedModel {
TextureAtlasSprite sprite = getSprite(coverModel, coverState, side, rand);
boolean hasUp = CoverManager.getBlockState(state.getValue(BlockCable.COVER_UP)) != null;
boolean hasDown = CoverManager.getBlockState(state.getValue(BlockCable.COVER_DOWN)) != null;
boolean hasEast = CoverManager.getBlockState(state.getValue(BlockCable.COVER_EAST)) != null;
boolean hasWest = CoverManager.getBlockState(state.getValue(BlockCable.COVER_WEST)) != null;
ModelRotation modelRotation = ModelRotation.X0_Y0;
int xStart = 0;
int xEnd = 16;
int xTexStart = 0;
int xTexEnd = 16;
int xTexBackStart = 0;
int xTexBackEnd = 16;
int yStart = 0;
int yEnd = 16;
@@ -84,23 +87,27 @@ public class BakedModelCableCover implements IBakedModel {
if (hasWest) {
xStart = 2;
xTexEnd = 14;
xTexBackStart = 2;
}
if (hasEast) {
xEnd = 14;
xTexStart = 2;
xTexBackEnd = 14;
}
} else if (coverSide == EnumFacing.SOUTH) {
modelRotation = ModelRotation.X0_Y180;
if (hasWest) {
xStart = 2;
xEnd = 14;
xTexStart = 2;
xTexBackEnd = 14;
}
if (hasEast) {
xEnd = 14;
xStart = 2;
xTexEnd = 14;
xTexBackStart = 2;
}
} else if (coverSide == EnumFacing.EAST) {
modelRotation = ModelRotation.X0_Y90;
@@ -129,7 +136,7 @@ public class BakedModelCableCover implements IBakedModel {
.to(xEnd, yEnd, 2)
.face(EnumFacing.NORTH, xTexStart, xTexEnd, yTexStart, yTexEnd, sprite)
.face(EnumFacing.SOUTH, xTexStart, xTexEnd, yTexStart, yTexEnd, sprite)
.face(EnumFacing.SOUTH, xTexBackStart, xTexBackEnd, yTexStart, yTexEnd, sprite)
.face(EnumFacing.UP, 0, 16, 0, 2, sprite)
.face(EnumFacing.DOWN, 0, 16, 14, 16, sprite)
@@ -141,20 +148,20 @@ public class BakedModelCableCover implements IBakedModel {
.bake()
);
if (this.greySprite == null) {
this.greySprite = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(RS.ID + ":blocks/generic_grey");
if (GREY_SPRITE == null) {
GREY_SPRITE = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(RS.ID + ":blocks/generic_grey");
}
quads.addAll(new CubeBuilder()
.from(7, 7, 2)
.to(9, 9, 6)
.face(EnumFacing.NORTH, 0, 0, 4, 4, greySprite)
.face(EnumFacing.EAST, 0, 0, 2, 4, greySprite)
.face(EnumFacing.SOUTH, 0, 0, 4, 4, greySprite)
.face(EnumFacing.WEST, 0, 0, 2, 4, greySprite)
.face(EnumFacing.UP, 0, 0, 4, 2, greySprite)
.face(EnumFacing.DOWN, 0, 0, 4, 2, greySprite)
.face(EnumFacing.NORTH, 0, 0, 4, 4, GREY_SPRITE)
.face(EnumFacing.EAST, 0, 0, 2, 4, GREY_SPRITE)
.face(EnumFacing.SOUTH, 0, 0, 4, 4, GREY_SPRITE)
.face(EnumFacing.WEST, 0, 0, 2, 4, GREY_SPRITE)
.face(EnumFacing.UP, 0, 0, 4, 2, GREY_SPRITE)
.face(EnumFacing.DOWN, 0, 0, 4, 2, GREY_SPRITE)
.rotate(modelRotation)
@@ -164,7 +171,7 @@ public class BakedModelCableCover implements IBakedModel {
);
}
public static TextureAtlasSprite getSprite(IBakedModel coverModel, IBlockState coverState, EnumFacing facing, long rand) {
private static TextureAtlasSprite getSprite(IBakedModel coverModel, IBlockState coverState, EnumFacing facing, long rand) {
TextureAtlasSprite sprite = null;
BlockRenderLayer originalLayer = MinecraftForgeClient.getRenderLayer();

View File

@@ -3,16 +3,12 @@ package com.raoulvdberge.refinedstorage.render.model.baked;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
import com.raoulvdberge.refinedstorage.item.ItemCover;
import com.raoulvdberge.refinedstorage.render.CubeBuilder;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.block.model.ItemOverrideList;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
@@ -27,7 +23,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Objects;
public class BakedModelCover implements IBakedModel {
public class BakedModelCover extends BakedModelCableCover {
private class CacheKey {
private IBakedModel base;
private IBlockState state;
@@ -71,32 +67,7 @@ public class BakedModelCover implements IBakedModel {
public List<BakedQuad> load(CacheKey key) {
List<BakedQuad> quads = new ArrayList<>(key.base.getQuads(key.state, key.side, 0));
TextureAtlasSprite sprite = Minecraft.getMinecraft().getTextureMapBlocks().getMissingSprite();
if (!key.stack.isEmpty()) {
IBlockState coverState = CoverManager.getBlockState(key.stack);
if (coverState != null) {
IBakedModel coverModel = Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState(coverState);
sprite = BakedModelCableCover.getSprite(coverModel, coverState, key.side, 0);
}
}
quads.addAll(new CubeBuilder()
.from(0, 0, 0)
.to(16, 16, 2)
.face(EnumFacing.NORTH, 0, 16, 0, 16, sprite)
.face(EnumFacing.SOUTH, 0, 16, 0, 16, sprite)
.face(EnumFacing.UP, 0, 16, 0, 2, sprite)
.face(EnumFacing.DOWN, 0, 16, 14, 16, sprite)
.face(EnumFacing.EAST, 14, 16, 0, 16, sprite)
.face(EnumFacing.WEST, 0, 2, 0, 16, sprite)
.bake()
);
addCover(quads, key.stack, EnumFacing.NORTH, key.side, 0, false, false, false, false);
return quads;
}
@@ -107,6 +78,8 @@ public class BakedModelCover implements IBakedModel {
private IBakedModel base;
public BakedModelCover(IBakedModel base, @Nullable ItemStack stack) {
super(base);
this.base = base;
this.stack = stack;
}
@@ -122,12 +95,6 @@ public class BakedModelCover implements IBakedModel {
return CACHE.getUnchecked(key);
}
@Override
@SuppressWarnings("deprecation")
public ItemCameraTransforms getItemCameraTransforms() {
return base.getItemCameraTransforms();
}
@Override
public ItemOverrideList getOverrides() {
if (stack != null) {
@@ -142,11 +109,6 @@ public class BakedModelCover implements IBakedModel {
};
}
@Override
public boolean isAmbientOcclusion(IBlockState state) {
return base.isAmbientOcclusion(state);
}
@Override
public Pair<? extends IBakedModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) {
Pair<? extends IBakedModel, Matrix4f> matrix = base.handlePerspective(cameraTransformType);
@@ -154,24 +116,4 @@ public class BakedModelCover implements IBakedModel {
return Pair.of(bakedModel.getKey(), matrix.getRight());
}
@Override
public boolean isAmbientOcclusion() {
return base.isAmbientOcclusion();
}
@Override
public boolean isGui3d() {
return base.isGui3d();
}
@Override
public boolean isBuiltInRenderer() {
return base.isBuiltInRenderer();
}
@Override
public TextureAtlasSprite getParticleTexture() {
return base.getParticleTexture();
}
}

View File

@@ -11,7 +11,7 @@
"variants": {
"inventory": [
{
"model": "refinedstorage:cover",
"model": "refinedstorage:cable_core",
"transform": "forge:default-block"
}
]

View File

@@ -1,143 +0,0 @@
{
"__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)",
"elements": [
{
"name": "Line1",
"from": [
7.0,
7.0,
2.0
],
"to": [
9.0,
9.0,
6.0
],
"faces": {
"north": {
"texture": "#line",
"uv": [
0.0,
0.0,
4.0,
4.0
]
},
"east": {
"texture": "#line",
"uv": [
0.0,
0.0,
2.0,
4.0
]
},
"south": {
"texture": "#line",
"uv": [
0.0,
0.0,
4.0,
4.0
]
},
"west": {
"texture": "#line",
"uv": [
0.0,
0.0,
2.0,
4.0
]
},
"up": {
"texture": "#line",
"uv": [
0.0,
0.0,
4.0,
2.0
]
},
"down": {
"texture": "#line",
"uv": [
0.0,
0.0,
4.0,
2.0
]
}
}
},
{
"name": "Core",
"from": [
6.0,
6.0,
6.0
],
"to": [
10.0,
10.0,
10.0
],
"faces": {
"north": {
"texture": "#cable",
"uv": [
6.0,
6.0,
10.0,
10.0
]
},
"east": {
"texture": "#cable",
"uv": [
6.0,
6.0,
10.0,
10.0
]
},
"south": {
"texture": "#cable",
"uv": [
6.0,
6.0,
10.0,
10.0
]
},
"west": {
"texture": "#cable",
"uv": [
6.0,
6.0,
10.0,
10.0
]
},
"up": {
"texture": "#cable",
"uv": [
6.0,
6.0,
10.0,
10.0
]
},
"down": {
"texture": "#cable",
"uv": [
6.0,
6.0,
10.0,
10.0
]
}
}
}
]
}