1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-08-27 07:52:18 +00:00

Fixed turtle tool upgrades not rendering in GUI.

This commit is contained in:
David Queneau 2021-03-06 14:45:29 -08:00 committed by David Queneau
parent e4ad8bc117
commit 264dbc570f
2 changed files with 23 additions and 32 deletions

View File

@ -14,8 +14,8 @@ import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.render.VertexFormatElement;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.client.render.model.BakedQuad;
import net.minecraft.client.util.math.Vector4f;
import net.minecraft.util.math.Matrix4f;
import net.minecraft.util.math.Quaternion;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@ -50,41 +50,31 @@ public final class ModelTransformer {
}
private static BakedQuad doTransformQuad(VertexFormat format, BakedQuad quad, Matrix4f transform) {
int[] vertexData = quad.getVertexData()
.clone();
int offset = 0;
int[] vertexData = quad.getVertexData().clone();
BakedQuad copy = new BakedQuad(vertexData, -1, quad.getFace(), ((BakedQuadAccess)quad).getSprite(), true);
for (int i = 0; i < format.getElements()
.size(); ++i) // For each vertex element
{
VertexFormatElement element = format.getElements()
.get(i);
if (element.getType() == VertexFormatElement.Type.POSITION && element.getFormat() == VertexFormatElement.Format.FLOAT && element.getSize() == 3) // When we find a position
// element
int offsetBytes = 0;
for (int v = 0; v < 4; ++v) {
for (VertexFormatElement element : format.getElements()) // For each vertex element
{
for (int j = 0; j < 4; ++j) // For each corner of the quad
int start = offsetBytes / Integer.BYTES;
if (element.getType() == VertexFormatElement.Type.POSITION && element.getFormat() == VertexFormatElement.Format.FLOAT) // When we find a position element
{
int start = offset + j * format.getVertexSize();
if ((start % 4) == 0) {
start = start / 4;
Vector4f pos = new Vector4f(Float.intBitsToFloat(vertexData[start]),
Float.intBitsToFloat(vertexData[start+1]),
Float.intBitsToFloat(vertexData[start+2]),
1);
// Extract the position
Quaternion pos = new Quaternion(Float.intBitsToFloat(vertexData[start]),
Float.intBitsToFloat(vertexData[start + 1]),
Float.intBitsToFloat(vertexData[start + 2]),
1);
// Transform the position
pos.transform(transform);
// Transform the position
transform.multiply(pos);
// Insert the position
vertexData[start] = Float.floatToRawIntBits(pos.getX());
vertexData[start + 1] = Float.floatToRawIntBits(pos.getY());
vertexData[start + 2] = Float.floatToRawIntBits(pos.getZ());
}
// Insert the position
vertexData[start] = Float.floatToRawIntBits(pos.getX());
vertexData[start+1] = Float.floatToRawIntBits(pos.getY());
vertexData[start+2] = Float.floatToRawIntBits(pos.getZ());
}
offsetBytes += element.getSize();
}
offset += element.getSize();
}
return copy;
}

View File

@ -78,9 +78,10 @@ public class TurtleSmartItemModel implements BakedModel {
Identifier overlay = turtle.getOverlay(stack);
boolean christmas = HolidayUtil.getCurrentHoliday() == Holiday.CHRISTMAS;
String label = turtle.getLabel(stack);
boolean flip = label != null && (label.equals("Dinnerbone") || label.equals("Grumm"));
// TODO Make TurtleTool render for turtle items again.
TurtleModelCombination combo = new TurtleModelCombination(colour != -1, !(leftUpgrade instanceof TurtleTool) ? leftUpgrade : null, !(rightUpgrade instanceof TurtleTool) ? rightUpgrade : null, overlay, christmas, flip);
// TODO make upside down turtle items render properly (currently inivisible)
//boolean flip = label != null && (label.equals("Dinnerbone") || label.equals("Grumm"));
boolean flip = false;
TurtleModelCombination combo = new TurtleModelCombination(colour != -1, leftUpgrade, rightUpgrade, overlay, christmas, flip);
BakedModel model = TurtleSmartItemModel.this.m_cachedModels.get(combo);
if (model == null) {