Refined Storage

Refined Storage

77M Downloads

Patterns Not rendering with IItemColor

pauljoda opened this issue ยท 3 comments

commented

Issue description:

When you press shift to see the item or block for a crafting pattern, the rendered model is not taking into account the IItemColor, also as a small complaint I notice the model transforms are invalid. I believe you are not handling the perspective correctly on the baked model, this is an issues I've had in the past and solved with this Map Builder, feel free to use it

https://github.com/TeamBR-Modding/NeoTech/blob/master/src/main/java/com/teambrmodding/neotech/client/models/ModelItemFluidStorage.java#L82

What happens:

Items with defined colors render the same

What you expected to happen:

The rendered item to color based on the IItemColor

Steps to reproduce:

  1. Craft a pattern using a item that uses IItemColor, Neotech ingots for example
  2. ...
  3. Profit?
    ...

Version (Make sure you are on the latest version before reporting):

  • Minecraft: 1.10.2
  • Forge: 12.18.3.2185
  • Refined Storage: 1.2.22
commented

@pauljoda

I tried your perspective code:

diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPattern.java b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPattern.java
index b5641c5..0aaee32 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPattern.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPattern.java
@@ -1,5 +1,6 @@
 package com.raoulvdberge.refinedstorage.render;
 
+import com.google.common.collect.ImmutableMap;
 import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern;
 import com.raoulvdberge.refinedstorage.gui.GuiBase;
 import com.raoulvdberge.refinedstorage.item.ItemPattern;
@@ -14,11 +15,35 @@ import net.minecraft.entity.EntityLivingBase;
 import net.minecraft.item.ItemStack;
 import net.minecraft.util.EnumFacing;
 import net.minecraft.world.World;
+import net.minecraftforge.client.model.IPerspectiveAwareModel;
+import net.minecraftforge.common.model.TRSRTransformation;
+import org.apache.commons.lang3.tuple.Pair;
 
 import javax.annotation.Nullable;
+import javax.vecmath.Matrix4f;
 import java.util.List;
 
-public class BakedModelPattern implements IBakedModel {
+public class BakedModelPattern implements IBakedModel, IPerspectiveAwareModel {
+    private static TRSRTransformation getTransform(float tx, float ty, float tz, float ax, float ay, float az, float s) {
+        return new TRSRTransformation(
+            new javax.vecmath.Vector3f(tx / 16, ty / 16, tz / 16),
+            TRSRTransformation.quatFromXYZDegrees(new javax.vecmath.Vector3f(ax, ay, az)),
+            new javax.vecmath.Vector3f(s, s, s),
+            null
+        );
+    }
+
+    private static final ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> TRANSFORMS = ImmutableMap.<ItemCameraTransforms.TransformType, TRSRTransformation>builder()
+        .put(ItemCameraTransforms.TransformType.GUI, getTransform(0, 0, 0, 30, 45, 0, 0.625f))
+        .put(ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, getTransform(0, 2.5f, 0, 75, 45, 0, 0.375f))
+        .put(ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND, getTransform(0, 2.5f, 0, 75, 45, 0, 0.375f))
+        .put(ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND, getTransform(0, 0, 0, 0, 45, 0, 0.4f))
+        .put(ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND, getTransform(0, 0, 0, 0, 225, 0, 0.4f))
+        .put(ItemCameraTransforms.TransformType.GROUND, getTransform(0, 2, 0, 0, 0, 0, 0.25f))
+        .put(ItemCameraTransforms.TransformType.HEAD, getTransform(0, 0, 0, 0, 0, 0, 1))
+        .put(ItemCameraTransforms.TransformType.FIXED, getTransform(0, 0, 0, 0, 0, 0, 1))
+        .build();
+
     private IBakedModel patternModel;
 
     public BakedModelPattern(IBakedModel patternModel) {
@@ -71,4 +96,9 @@ public class BakedModelPattern implements IBakedModel {
             }
         };
     }
+
+    @Override
+    public Pair<? extends IBakedModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) {
+        return Pair.of(this, TRANSFORMS.get(cameraTransformType).getMatrix());
+    }
 }

It generates this result:
x

I also don't know how to do the item color stuff. A PR would be welcome.

commented

I have created a pull request to solve these issues here #1026

commented

Oh yeah I forgot that matrix was for blocks. I have one for items. I'll look into it and send in a pr