Skip to content

Commit b73b30f

Browse files
committed
Widen class check
Signed-off-by: roadhog360 <[email protected]>
1 parent 468825d commit b73b30f

File tree

2 files changed

+26
-21
lines changed

2 files changed

+26
-21
lines changed

src/main/java/roadhog360/simpleskinbackport/core/Utils.java

+22-12
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import roadhog360.simpleskinbackport.ducks.ITransparentBox;
1818

1919
import java.nio.charset.StandardCharsets;
20+
import java.util.Arrays;
2021
import java.util.Base64;
2122
import java.util.List;
2223
import java.util.Objects;
@@ -54,20 +55,26 @@ public static boolean isPlayer(MinecraftProfileTexture.Type type, SkinManager.Sk
5455
return type == MinecraftProfileTexture.Type.SKIN && callback instanceof EntityPlayer;
5556
}
5657

57-
public static String getCallerClassName() {
58+
public static boolean isCallerAssignableFrom(Class<?>... assignables) {
5859
StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
59-
String callerClassName = null;
60-
for (int i=1; i<stElements.length; i++) {
61-
StackTraceElement ste = stElements[i];
62-
if (!ste.getClassName().equals(Utils.class.getName())&& ste.getClassName().indexOf("java.lang.Thread")!=0) {
63-
if (callerClassName==null) {
64-
callerClassName = ste.getClassName();
65-
} else if (!callerClassName.equals(ste.getClassName())) {
66-
return ste.getClassName();
60+
return Arrays.stream(stElements, 4, stElements.length).anyMatch(
61+
element -> Arrays.stream(assignables).anyMatch(
62+
assignable -> {
63+
try {
64+
return assignable.isAssignableFrom(Class.forName(element.getClassName()));
65+
} catch (ClassNotFoundException ignored) {
66+
return false;
6767
}
68-
}
69-
}
70-
return null;
68+
})
69+
);
70+
}
71+
72+
public static boolean isCallerNameEqualTo(String... assignables) {
73+
StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
74+
return Arrays.stream(stElements, 4, stElements.length).anyMatch(
75+
element -> Arrays.stream(assignables).anyMatch(
76+
assignable -> assignable.equals(element.getClassName()))
77+
);
7178
}
7279

7380
public static ModelRenderer setAllChildBoxesTransparent(ModelRenderer renderer) {
@@ -127,6 +134,9 @@ public static ModelBox cloneBox(ModelBox box, ModelRenderer to, BoxTransformType
127134
int boxMaxX = MathHelper.floor_float(box.posX2 - box.posX1);
128135
int boxMaxY = MathHelper.floor_float(box.posY2 - box.posY1);
129136
int boxMaxZ = MathHelper.floor_float(box.posZ2 - box.posZ1);
137+
// if(box.posX2 - box.posX1 > 0 || box.posY2 - box.posY1 > 0 || box.posZ2 - box.posZ1 > 0) {
138+
// size = Math.max(Math.max(box.posX2 - box.posX1, box.posY2 - box.posY1), box.posZ2 - box.posZ1);
139+
// }
130140
if(transform.isHatLayer()) {
131141
size += 0.25F;
132142
}

src/main/java/roadhog360/simpleskinbackport/mixins/early/MixinModelBiped.java

+4-9
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,10 @@ private void checkPlayerModelAndSetDim(ModelBiped instance, int value, Operation
5858
boolean isPlayerRenderer;
5959
boolean isGaia;
6060
//Do all this OUTSIDE of the if bracket, so we can find and add cases for classes that use size > 0
61-
try {
62-
Class<?> caller = Class.forName(Utils.getCallerClassName());
63-
isGaia = caller.getName().equals("vazkii.botania.client.render.entity.RenderDoppleganger");
64-
isPlayerRenderer = caller.isAssignableFrom(RenderPlayer.class) || isGaia
65-
|| caller.getName().equals("net.smart.render.ModelPlayer") || caller.getName().contains("RenderTFGiant");
66-
//We need a way to check if it's a player model, without modifying the RenderPlayer.
67-
} catch (ClassNotFoundException e) {
68-
throw new RuntimeException(e);
69-
}
61+
isGaia = Utils.isCallerNameEqualTo("vazkii.botania.client.render.entity.RenderDoppleganger");
62+
isPlayerRenderer = Utils.isCallerAssignableFrom(RenderPlayer.class) || isGaia
63+
|| Utils.isCallerNameEqualTo("twilightforest.client.renderer.entity.RenderTFGiant");
64+
//We need a way to check if it's a player model, without modifying the RenderPlayer.
7065

7166
if (size == 0 || size == 0.0625F || isGaia) {
7267
//TODO: Might have to add special exceptions for big models, I think this is model size so I named it as such.

0 commit comments

Comments
 (0)