Improved TextureAtlasSprite discovery so each side of the cover renders the proper side of the block

This commit is contained in:
Buuz135
2021-09-11 20:53:40 +02:00
parent b187baeb76
commit 1c06b87c1d

View File

@@ -23,6 +23,7 @@ import net.minecraftforge.client.model.data.IModelData;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
@@ -92,19 +93,17 @@ public class BakedModelCableCover extends DelegateBakedModel{
hasWest = manager.hasCover(Direction.WEST); hasWest = manager.hasCover(Direction.WEST);
} }
TextureAtlasSprite sprite = RenderUtils.getSprite(Minecraft.getInstance().getBlockRendererDispatcher().getModelForState(coverState), coverState, side, rand);
switch (cover.getType()) { switch (cover.getType()) {
case NORMAL: case NORMAL:
addNormalCover(quads, sprite, coverSide, hasUp, hasDown, hasEast, hasWest, handle); addNormalCover(quads, coverState, coverSide, hasUp, hasDown, hasEast, hasWest, handle, rand);
break; break;
case HOLLOW: case HOLLOW:
addHollowCover(quads, sprite, coverSide, hasUp, hasDown, hasEast, hasWest, getHollowCoverSize(state, coverSide)); addHollowCover(quads, coverState, coverSide, hasUp, hasDown, hasEast, hasWest, getHollowCoverSize(state, coverSide), rand);
break; break;
} }
} }
private static void addNormalCover(List<BakedQuad> quads, TextureAtlasSprite sprite, Direction coverSide, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest, boolean handle) { private static void addNormalCover(List<BakedQuad> quads, BlockState state, Direction coverSide, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest, boolean handle, Random random) {
AxisAlignedBB bounds = ConstantsCable.getCoverBounds(coverSide); AxisAlignedBB bounds = ConstantsCable.getCoverBounds(coverSide);
Vector3f from = new Vector3f((float) bounds.minX * 16, (float) bounds.minY * 16, (float) bounds.minZ * 16); Vector3f from = new Vector3f((float) bounds.minX * 16, (float) bounds.minY * 16, (float) bounds.minZ * 16);
@@ -138,7 +137,8 @@ public class BakedModelCableCover extends DelegateBakedModel{
} }
} }
quads.addAll(new CubeBuilder().from(from.getX(), from.getY(), from.getZ()).to(to.getX(), to.getY(), to.getZ()).addFaces(face -> new CubeBuilder.Face(face, sprite)).bake()); HashMap<Direction, TextureAtlasSprite> spriteCache = new HashMap<>();
quads.addAll(new CubeBuilder().from(from.getX(), from.getY(), from.getZ()).to(to.getX(), to.getY(), to.getZ()).addFaces(face -> new CubeBuilder.Face(face, spriteCache.computeIfAbsent(face, direction -> RenderUtils.getSprite(Minecraft.getInstance().getBlockRendererDispatcher().getModelForState(state), state, direction, random)))).bake());
if (handle) { if (handle) {
if (BORDER_SPRITE == null) { if (BORDER_SPRITE == null) {
@@ -154,7 +154,7 @@ public class BakedModelCableCover extends DelegateBakedModel{
} }
} }
private static void addHollowCover(List<BakedQuad> quads, TextureAtlasSprite sprite, Direction coverSide, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest, int size) { private static void addHollowCover(List<BakedQuad> quads, BlockState state, Direction coverSide, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest, int size, Random random) {
AxisAlignedBB bounds = ConstantsCable.getCoverBounds(coverSide); AxisAlignedBB bounds = ConstantsCable.getCoverBounds(coverSide);
Vector3f from = new Vector3f((float) bounds.minX * 16, (float) bounds.minY * 16, (float) bounds.minZ * 16); Vector3f from = new Vector3f((float) bounds.minX * 16, (float) bounds.minY * 16, (float) bounds.minZ * 16);
@@ -197,11 +197,11 @@ public class BakedModelCableCover extends DelegateBakedModel{
from.setZ(16 - size); from.setZ(16 - size);
to.setZ(16); to.setZ(16);
} }
HashMap<Direction, TextureAtlasSprite> spriteCache = new HashMap<>();
quads.addAll(new CubeBuilder() quads.addAll(new CubeBuilder()
.from(from.getX(), from.getY(), from.getZ()) .from(from.getX(), from.getY(), from.getZ())
.to(to.getX(), to.getY(), to.getZ()) .to(to.getX(), to.getY(), to.getZ())
.addFaces(face -> new CubeBuilder.Face(face, sprite)) .addFaces(face -> new CubeBuilder.Face(face, spriteCache.computeIfAbsent(face, direction -> RenderUtils.getSprite(Minecraft.getInstance().getBlockRendererDispatcher().getModelForState(state), state, direction, random))))
.bake() .bake()
); );
@@ -236,7 +236,7 @@ public class BakedModelCableCover extends DelegateBakedModel{
quads.addAll(new CubeBuilder() quads.addAll(new CubeBuilder()
.from(from.getX(), from.getY(), from.getZ()) .from(from.getX(), from.getY(), from.getZ())
.to(to.getX(), to.getY(), to.getZ()) .to(to.getX(), to.getY(), to.getZ())
.addFaces(face -> new CubeBuilder.Face(face, sprite)) .addFaces(face -> new CubeBuilder.Face(face, spriteCache.computeIfAbsent(face, direction -> RenderUtils.getSprite(Minecraft.getInstance().getBlockRendererDispatcher().getModelForState(state), state, direction, random))))
.bake() .bake()
); );
@@ -296,7 +296,7 @@ public class BakedModelCableCover extends DelegateBakedModel{
quads.addAll(new CubeBuilder() quads.addAll(new CubeBuilder()
.from(from.getX(), from.getY(), from.getZ()) .from(from.getX(), from.getY(), from.getZ())
.to(to.getX(), to.getY(), to.getZ()) .to(to.getX(), to.getY(), to.getZ())
.addFaces(face -> new CubeBuilder.Face(face, sprite)) .addFaces(face -> new CubeBuilder.Face(face, spriteCache.computeIfAbsent(face, direction -> RenderUtils.getSprite(Minecraft.getInstance().getBlockRendererDispatcher().getModelForState(state), state, direction, random))))
.bake() .bake()
); );
@@ -356,7 +356,7 @@ public class BakedModelCableCover extends DelegateBakedModel{
quads.addAll(new CubeBuilder() quads.addAll(new CubeBuilder()
.from(from.getX(), from.getY(), from.getZ()) .from(from.getX(), from.getY(), from.getZ())
.to(to.getX(), to.getY(), to.getZ()) .to(to.getX(), to.getY(), to.getZ())
.addFaces(face -> new CubeBuilder.Face(face, sprite)) .addFaces(face -> new CubeBuilder.Face(face, spriteCache.computeIfAbsent(face, direction -> RenderUtils.getSprite(Minecraft.getInstance().getBlockRendererDispatcher().getModelForState(state), state, direction, random))))
.bake() .bake()
); );
} }