Skip to content

Commit 7c429da

Browse files
committed
1.5.5:
* Now CLS creates an empty tips file ("config/customloadingscreen_tips.txt") if it doesn't already exist. * Stopped a few rendering parts from sharding state with the main thread. * Removed the warning when CLS fails to find a RENDERING_PART type but finds an IMAGE instead.
1 parent 6aaf156 commit 7c429da

13 files changed

Lines changed: 259 additions & 144 deletions

build.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ mc_version=1.12.2
22
forge_version=14.23.0.2544
33
mcp_mappings=snapshot_20171120
44

5-
mod_version=1.5.4
5+
mod_version=1.5.5

src/main/java/alexiil/mc/mod/load/Tips.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@ public class Tips {
2424

2525
public static void load() {
2626
File f = new File("config/customloadingscreen_tips.txt");
27+
if (!f.exists()) {
28+
try {
29+
f.createNewFile();
30+
} catch (IOException io) {
31+
io.printStackTrace();
32+
}
33+
}
34+
2735
try (BufferedReader br = new BufferedReader(new FileReader(f))) {
2836
load(parseTips(br));
2937
} catch (FileNotFoundException e) {

src/main/java/alexiil/mc/mod/load/baked/BakedRenderingPart.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import org.lwjgl.opengl.GL11;
44

5-
import net.minecraft.client.renderer.GlStateManager;
6-
75
import alexiil.mc.mod.load.baked.insn.BakedInsn;
86
import alexiil.mc.mod.load.render.MinecraftDisplayerRenderer;
97

@@ -22,19 +20,19 @@ public BakedRenderingPart(BakedInsn[] instructions, BakedRender render, INodeBoo
2220
}
2321

2422
public void render(MinecraftDisplayerRenderer renderer) {
25-
GlStateManager.pushMatrix();
26-
GlStateManager.matrixMode(GL11.GL_PROJECTION);
27-
GlStateManager.pushMatrix();
28-
GlStateManager.matrixMode(GL11.GL_MODELVIEW);
23+
GL11.glPushMatrix();
24+
GL11.glMatrixMode(GL11.GL_PROJECTION);
25+
GL11.glPushMatrix();
26+
GL11.glMatrixMode(GL11.GL_MODELVIEW);
2927
render.evaluateVariables(renderer);
3028
for (BakedInsn insn : instructions) {
3129
insn.render();
3230
}
3331
render.render(renderer);
34-
GlStateManager.popMatrix();
35-
GlStateManager.matrixMode(GL11.GL_PROJECTION);
36-
GlStateManager.popMatrix();
37-
GlStateManager.matrixMode(GL11.GL_MODELVIEW);
32+
GL11.glPopMatrix();
33+
GL11.glMatrixMode(GL11.GL_PROJECTION);
34+
GL11.glPopMatrix();
35+
GL11.glMatrixMode(GL11.GL_MODELVIEW);
3836
}
3937

4038
@Override

src/main/java/alexiil/mc/mod/load/baked/render/BakedPanoramaRender.java

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import org.lwjgl.util.glu.Project;
55

66
import net.minecraft.client.renderer.BufferBuilder;
7-
import net.minecraft.client.renderer.GlStateManager;
87
import net.minecraft.client.renderer.Tessellator;
98
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
109
import net.minecraft.util.ResourceLocation;
@@ -65,49 +64,48 @@ public void render(MinecraftDisplayerRenderer renderer) {
6564
private void drawPanorama(MinecraftDisplayerRenderer renderer) {
6665
BufferBuilder vb = tess.getBuffer();
6766

68-
GlStateManager.matrixMode(GL11.GL_PROJECTION);
69-
GlStateManager.pushMatrix();
70-
GlStateManager.loadIdentity();
67+
GL11.glMatrixMode(GL11.GL_PROJECTION);
68+
GL11.glPushMatrix();
69+
GL11.glLoadIdentity();
7170
Project.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F);
72-
GlStateManager.matrixMode(GL11.GL_MODELVIEW);
73-
GlStateManager.pushMatrix();
74-
GlStateManager.loadIdentity();
75-
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
76-
GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F);
77-
GlStateManager.disableAlpha();
71+
GL11.glMatrixMode(GL11.GL_MODELVIEW);
72+
GL11.glPushMatrix();
73+
GL11.glLoadIdentity();
74+
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
75+
GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
76+
GL11.glDisable(GL11.GL_ALPHA);
7877
byte b0 = 8;
7978

8079
for (int k = 0; k < b0 * b0; ++k) {
81-
GlStateManager.pushMatrix();
80+
GL11.glPushMatrix();
8281
float f1 = ((float) (k % b0) / (float) b0 - 0.5F) / 64.0F;
8382
float f2 = ((float) (k / b0) / (float) b0 - 0.5F) / 64.0F;
8483
float f3 = 0.0F;
85-
GlStateManager.translate(f1, f2, f3);
86-
GlStateManager
87-
.rotate(MathHelper.sin(((float) this.actualAngle) / 400.0F) * 25.0F + 20.0F, 1.0F, 0.0F, 0.0F);
88-
GlStateManager.rotate(-((float) this.actualAngle) * 0.1F, 0.0F, 1.0F, 0.0F);
84+
GL11.glTranslatef(f1, f2, f3);
85+
GL11.glRotatef(MathHelper.sin(((float) this.actualAngle) / 400.0F) * 25.0F + 20.0F, 1.0F, 0.0F, 0.0F);
86+
GL11.glRotatef(-((float) this.actualAngle) * 0.1F, 0.0F, 1.0F, 0.0F);
8987

9088
for (int l = 0; l < 6; ++l) {
91-
GlStateManager.pushMatrix();
89+
GL11.glPushMatrix();
9290

9391
if (l == 1) {
94-
GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F);
92+
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
9593
}
9694

9795
if (l == 2) {
98-
GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
96+
GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
9997
}
10098

10199
if (l == 3) {
102-
GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F);
100+
GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F);
103101
}
104102

105103
if (l == 4) {
106-
GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F);
104+
GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F);
107105
}
108106

109107
if (l == 5) {
110-
GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F);
108+
GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F);
111109
}
112110

113111
renderer.textureManager.bindTexture(cubeSides[l]);
@@ -120,21 +118,21 @@ private void drawPanorama(MinecraftDisplayerRenderer renderer) {
120118
vb.pos(1.0D, 1.0D, 1.0D).tex(1.0F - f4, 1.0F - f4).color(rgb, rgb, rgb, alpha).endVertex();
121119
vb.pos(-1.0D, 1.0D, 1.0D).tex(0.0F + f4, 1.0F - f4).color(rgb, rgb, rgb, alpha).endVertex();
122120
tess.draw();
123-
GlStateManager.popMatrix();
121+
GL11.glPopMatrix();
124122
}
125123

126-
GlStateManager.popMatrix();
127-
GlStateManager.colorMask(true, true, true, false);
124+
GL11.glPopMatrix();
125+
GL11.glColorMask(true, true, true, false);
128126
}
129127

130128
vb.setTranslation(0.0D, 0.0D, 0.0D);
131-
GlStateManager.colorMask(true, true, true, true);
132-
GlStateManager.rotate(-180.0F, 1.0F, 0.0F, 0.0F);
133-
GlStateManager.matrixMode(GL11.GL_PROJECTION);
134-
GlStateManager.popMatrix();
135-
GlStateManager.matrixMode(GL11.GL_MODELVIEW);
136-
GlStateManager.popMatrix();
137-
GlStateManager.enableAlpha();
129+
GL11.glColorMask(true, true, true, true);
130+
GL11.glRotatef(-180.0F, 1.0F, 0.0F, 0.0F);
131+
GL11.glMatrixMode(GL11.GL_PROJECTION);
132+
GL11.glPopMatrix();
133+
GL11.glMatrixMode(GL11.GL_MODELVIEW);
134+
GL11.glPopMatrix();
135+
GL11.glEnable(GL11.GL_ALPHA);
138136
}
139137

140138
@Override

src/main/java/alexiil/mc/mod/load/baked/render/BakedSlideshowRender.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import org.lwjgl.opengl.GL11;
44

55
import net.minecraft.client.renderer.BufferBuilder;
6-
import net.minecraft.client.renderer.GlStateManager;
76
import net.minecraft.client.renderer.Tessellator;
87
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
98
import net.minecraft.util.ResourceLocation;
@@ -61,7 +60,7 @@ public void render(MinecraftDisplayerRenderer renderer) {
6160
}
6261

6362
if (c != -1) {
64-
GlStateManager.color(
63+
GL11.glColor4f(
6564
((c >>> 16) & 0xFF) / 255f,
6665
((c >>> 8) & 0xFF) / 255f,
6766
((c >>> 0) & 0xFF) / 255f,
@@ -78,7 +77,7 @@ public void render(MinecraftDisplayerRenderer renderer) {
7877
tess.draw();
7978

8079
if (c != -1) {
81-
GlStateManager.color(1, 1, 1, 1);
80+
GL11.glColor4f(1, 1, 1, 1);
8281
}
8382
}
8483

src/main/java/alexiil/mc/mod/load/baked/render/BakedTextRender.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package alexiil.mc.mod.load.baked.render;
22

3+
import org.lwjgl.opengl.GL11;
4+
35
import net.minecraft.client.gui.FontRenderer;
4-
import net.minecraft.client.renderer.GlStateManager;
56

67
import alexiil.mc.mod.load.render.MinecraftDisplayerRenderer;
78

@@ -57,12 +58,12 @@ public void evaluateVariables(MinecraftDisplayerRenderer renderer) {
5758
@Override
5859
public void render(MinecraftDisplayerRenderer renderer) {
5960
FontRenderer font = renderer.fontRenderer(fontTexture);
60-
GlStateManager.pushMatrix();
61-
GlStateManager.translate(_x, _y, 0);
62-
GlStateManager.scale(_scale, _scale, _scale);
61+
GL11.glPushMatrix();
62+
GL11.glTranslated(_x, _y, 0);
63+
GL11.glScaled(_scale, _scale, _scale);
6364
font.drawString(_text, 0, 0, (int) _colour, false);
64-
GlStateManager.popMatrix();
65-
GlStateManager.color(1, 1, 1, 1);
65+
GL11.glPopMatrix();
66+
GL11.glColor4f(1, 1, 1, 1);
6667
}
6768

6869
public abstract String getText();

src/main/java/alexiil/mc/mod/load/coremod/ClsTransformer.java

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package alexiil.mc.mod.load.coremod;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
35
import java.util.ListIterator;
46

57
import org.apache.logging.log4j.LogManager;
@@ -24,11 +26,17 @@
2426
import net.minecraft.util.ResourceLocation;
2527

2628
public class ClsTransformer implements IClassTransformer, Opcodes {
29+
2730
public static final Logger LOG = LogManager.getLogger("cls.transform");
2831

2932
private static final String OWNER_MAIN_SPLASH_RENDERER;
3033
private static final String OWNER_ASM_CALLBACKS;
3134

35+
private static final String MC_FONT_RENDERER = "net.minecraft.client.gui.FontRenderer";
36+
37+
private static String fontRendererUnderlineName = "ClsWentWrong_Underline";
38+
private static String fontRendererStrikethroughName = "ClsWentWrong_Strikethrough";
39+
3240
static {
3341
OWNER_MAIN_SPLASH_RENDERER = "alexiil/mc/mod/load/render/MainSplashRenderer";
3442
OWNER_ASM_CALLBACKS = "alexiil/mc/mod/load/coremod/Callbacks";
@@ -48,6 +56,12 @@ public byte[] transform(String name, String transformedName, byte[] basicClass)
4856
if (name.equals("alexiil.mc.mod.load.render.MainSplashRenderer")) {
4957
return transformMainSplashRenderer(basicClass);
5058
}
59+
if (name.equals("alexiil.mc.mod.load.render.FontRendererSeparate")) {
60+
return transformFontRendererSeparate(basicClass);
61+
}
62+
if (transformedName.equals(MC_FONT_RENDERER)) {
63+
return transformFontRenderer(basicClass);
64+
}
5165
return basicClass;
5266
}
5367

@@ -241,6 +255,82 @@ private static byte[] transformMainSplashRenderer(byte[] before) {
241255
return cw.toByteArray();
242256
}
243257

258+
private static byte[] transformFontRendererSeparate(byte[] before) {
259+
LOG.info("Transforming CLS.FontRendererSeparate");
260+
if (fontRendererStrikethroughName.contains("ClsWentWrong")) {
261+
LOG.warn("Transformed before minecraft's FontRenderer!");
262+
LOG.warn(" (force-loading FontRenderer)");
263+
try {
264+
Class<?> cls = Class.forName(MC_FONT_RENDERER);
265+
if (cls == null) {
266+
throw new IllegalStateException(MC_FONT_RENDERER);
267+
} else {
268+
LOG.info("Loaded " + cls);
269+
}
270+
} catch (ClassNotFoundException e) {
271+
throw new Error(e);
272+
}
273+
}
274+
275+
ClassNode classNode = new ClassNode();
276+
ClassReader reader = new ClassReader(before);
277+
reader.accept(classNode, 0);
278+
279+
for (MethodNode m : classNode.methods) {
280+
ListIterator<AbstractInsnNode> iter = m.instructions.iterator();
281+
while (iter.hasNext()) {
282+
AbstractInsnNode i = iter.next();
283+
if (i instanceof FieldInsnNode) {
284+
FieldInsnNode fn = (FieldInsnNode) i;
285+
if ("__cls__replaced__underline".equals(fn.name)) {
286+
fn.name = fontRendererUnderlineName;
287+
} else if ("__cls__replaced__strikethrough".equals(fn.name)) {
288+
fn.name = fontRendererStrikethroughName;
289+
}
290+
}
291+
}
292+
}
293+
294+
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
295+
classNode.accept(cw);
296+
return cw.toByteArray();
297+
}
298+
299+
private static byte[] transformFontRenderer(byte[] before) {
300+
LOG.info("Transforming Minecraft.FontRenderer");
301+
ClassNode classNode = new ClassNode();
302+
ClassReader reader = new ClassReader(before);
303+
reader.accept(classNode, 0);
304+
305+
List<FieldNode> fields = classNode.fields;
306+
List<FieldNode> boolFields = new ArrayList<>();
307+
for (FieldNode n : fields) {
308+
if ("Z".equals(n.desc) && (n.access & Opcodes.ACC_STATIC) == 0) {
309+
boolFields.add(n);
310+
}
311+
}
312+
313+
FieldNode fldUnderline = boolFields.get(5);
314+
FieldNode fldStrike = boolFields.get(6);
315+
316+
fontRendererUnderlineName = fldUnderline.name;
317+
fontRendererStrikethroughName = fldStrike.name;
318+
319+
if ((fldUnderline.access & ACC_PUBLIC) == 0) {
320+
fldUnderline.access &= ~ACC_PRIVATE;
321+
fldUnderline.access |= ACC_PROTECTED;
322+
}
323+
324+
if ((fldStrike.access & ACC_PUBLIC) == 0) {
325+
fldStrike.access &= ~ACC_PRIVATE;
326+
fldStrike.access |= ACC_PROTECTED;
327+
}
328+
329+
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
330+
classNode.accept(cw);
331+
return cw.toByteArray();
332+
}
333+
244334
private static void changeLineNumbers(ClassNode node) {
245335
// for (MethodNode m : node.methods) {
246336
// changeLineNumbers(m);

0 commit comments

Comments
 (0)