Fully port ASM to Mixins (#11)

* Update buildscript

* Enable genericInjection

* Re-enable remapping for certain mixins

* Update buildscript

* Small fixes

- Add generic types
- Add diamond operators
- Fix typo in "NormalMap"
- Remove redundant assignments
- Access static field via class instead of instance
- Use List as type instead of ArrayList
- Add serialVersionUID

* Rename MixinEntityRender -> MixinRender

* Rewrite EntityRenderer ASM as Mixins

* Replace `@Accessor` mixins in favor of ATs

* Move compat to mixins

* Logger cleanup

* Rewrite ItemRenderer ASM as Mixins

* Unify names

* Rewrite RendererLivingEntity ASM as Mixins

* Use Log4J Logger

* Delete ACTRenderManager

* Rewrite ACTRenderSpider as Mixins

* Rewrite AbstractTexture ASM as Mixins

* Port TextureAtlasSprite ASM as Mixins

* Rewrite ThreadDownloadImageData ASM as Mixins

* Rewrite DynamicTexture ASM as Mixins

* Rewrite LayeredTexture ASM as Mixins

* Rewrite TextureManager ASM as Mixins

* Rewrite ITextureObject ASM as mixins

* Rewrite ITextureObject ASM as Mixins

* Clean up compileStubs

* Delete unused stuff

* Finishing touches
This commit is contained in:
glowredman authored and Jason Mitchell committed 2023-08-23 16:39:00 -07:00
1 parent 2329be3d2d
commit fa8be308de
88 files changed
+1563 -3904

No files matched your search

+141 -62
View File
@@ -1,4 +1,4 @@
//version: 1685785062
//version: 1692122114
/*
DO NOT CHANGE THIS FILE!
Also, you may replace this file at any time if there is an update available.
@@ -69,7 +69,7 @@ plugins {
id 'com.diffplug.spotless' version '6.13.0' apply false // 6.13.0 is the last jvm8 supporting version
id 'com.modrinth.minotaur' version '2.+' apply false
id 'com.matthewprenger.cursegradle' version '1.4.0' apply false
id 'com.gtnewhorizons.retrofuturagradle' version '1.3.14'
id 'com.gtnewhorizons.retrofuturagradle' version '1.3.24'
}
print("You might want to check out './gradlew :faq' if your build fails.\n")
@@ -115,6 +115,8 @@ propertyDefaultIfUnset("usesMixinDebug", project.usesMixins)
propertyDefaultIfUnset("forceEnableMixins", false)
propertyDefaultIfUnset("channel", "stable")
propertyDefaultIfUnset("mappingsVersion", "12")
propertyDefaultIfUnset("usesMavenPublishing", true)
propertyDefaultIfUnset("mavenPublishUrl", "http://jenkins.usrv.eu:8081/nexus/content/repositories/releases")
propertyDefaultIfUnset("modrinthProjectId", "")
propertyDefaultIfUnset("modrinthRelations", "")
propertyDefaultIfUnset("curseForgeProjectId", "")
@@ -357,7 +359,27 @@ catch (Exception ignored) {
String identifiedVersion
String versionOverride = System.getenv("VERSION") ?: null
try {
identifiedVersion = versionOverride == null ? gitVersion() : versionOverride
// Produce a version based on the tag, or for branches something like 0.2.2-configurable-maven-and-extras.38+43090270b6-dirty
if (versionOverride == null) {
def gitDetails = versionDetails()
def isDirty = gitVersion().endsWith(".dirty") // No public API for this, isCleanTag has a different meaning
String branchName = gitDetails.branchName ?: (System.getenv('GIT_BRANCH') ?: 'git')
if (branchName.startsWith('origin/')) {
branchName = branchName.minus('origin/')
}
branchName = branchName.replaceAll("[^a-zA-Z0-9-]+", "-") // sanitize branch names for semver
identifiedVersion = gitDetails.lastTag ?: '${gitDetails.gitHash}'
if (gitDetails.commitDistance > 0) {
identifiedVersion += "-${branchName}.${gitDetails.commitDistance}+${gitDetails.gitHash}"
if (isDirty) {
identifiedVersion += "-dirty"
}
} else if (isDirty) {
identifiedVersion += "-${branchName}+${gitDetails.gitHash}-dirty"
}
} else {
identifiedVersion = versionOverride
}
}
catch (Exception ignored) {
out.style(Style.Failure).text(
@@ -379,9 +401,13 @@ if (identifiedVersion == versionOverride) {
group = "com.github.GTNewHorizons"
if (project.hasProperty("customArchiveBaseName") && customArchiveBaseName) {
archivesBaseName = customArchiveBaseName
base {
archivesName = customArchiveBaseName
}
} else {
archivesBaseName = modId
base {
archivesName = modId
}
}
@@ -465,10 +491,19 @@ sourceSets {
}
}
if (file('addon.gradle').exists()) {
if (file('addon.gradle.kts').exists()) {
apply from: 'addon.gradle.kts'
} else if (file('addon.gradle').exists()) {
apply from: 'addon.gradle'
}
// File for local tweaks not commited to Git
if (file('addon.local.gradle.kts').exists()) {
apply from: 'addon.local.gradle.kts'
} else if (file('addon.local.gradle').exists()) {
apply from: 'addon.local.gradle'
}
// Allow unsafe repos but warn
repositories.configureEach { repo ->
if (repo instanceof org.gradle.api.artifacts.repositories.UrlArtifactRepository) {
@@ -479,7 +514,14 @@ repositories.configureEach { repo ->
}
}
apply from: 'repositories.gradle'
if (file('repositories.gradle.kts').exists()) {
apply from: 'repositories.gradle.kts'
} else if (file('repositories.gradle').exists()) {
apply from: 'repositories.gradle'
} else {
logger.error("Neither repositories.gradle.kts nor repositories.gradle was found, make sure you extracted the full ExampleMod template.")
throw new RuntimeException("Missing repositories.gradle[.kts]")
}
configurations {
runtimeClasspath.extendsFrom(runtimeOnlyNonPublishable)
@@ -520,9 +562,6 @@ repositories {
maven {
name 'Overmind forge repo mirror'
url 'https://gregtech.overminddl1.com/'
mavenContent {
excludeGroup("net.minecraftforge") // missing the `universal` artefact
}
}
maven {
name = "GTNH Maven"
@@ -537,13 +576,28 @@ repositories {
}
}
if (includeWellKnownRepositories.toBoolean()) {
maven {
name "CurseMaven"
url "https://cursemaven.com"
content {
exclusiveContent {
forRepository {
maven {
name "CurseMaven"
url "https://cursemaven.com"
}
}
filter {
includeGroup "curse.maven"
}
}
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
filter {
includeGroup "maven.modrinth"
}
}
maven {
name = "ic2"
url = "https://maven.ic2.player.to/"
@@ -574,6 +628,8 @@ def mixinProviderSpecNoClassifer = "${mixinProviderGroup}:${mixinProviderModule}
def mixinProviderSpec = "${mixinProviderSpecNoClassifer}:dev"
ext.mixinProviderSpec = mixinProviderSpec
def mixingConfigRefMap = 'mixins.' + modId + '.refmap.json'
dependencies {
if (usesMixins.toBoolean()) {
annotationProcessor('org.ow2.asm:asm-debug-all:5.0.3')
@@ -585,7 +641,7 @@ dependencies {
}
}
if (usesMixins.toBoolean()) {
implementation(mixinProviderSpec)
implementation(modUtils.enableMixins(mixinProviderSpec, mixingConfigRefMap))
} else if (forceEnableMixins.toBoolean()) {
runtimeOnlyNonPublishable(mixinProviderSpec)
}
@@ -611,12 +667,32 @@ configurations.all {
}
}
apply from: 'dependencies.gradle'
dependencies {
constraints {
def minGtnhLibVersion = "0.0.13"
implementation("com.github.GTNewHorizons:GTNHLib:${minGtnhLibVersion}") {
because("fixes duplicate mod errors in java 17 configurations using old gtnhlib")
}
runtimeOnly("com.github.GTNewHorizons:GTNHLib:${minGtnhLibVersion}") {
because("fixes duplicate mod errors in java 17 configurations using old gtnhlib")
}
devOnlyNonPublishable("com.github.GTNewHorizons:GTNHLib:${minGtnhLibVersion}") {
because("fixes duplicate mod errors in java 17 configurations using old gtnhlib")
}
runtimeOnlyNonPublishable("com.github.GTNewHorizons:GTNHLib:${minGtnhLibVersion}") {
because("fixes duplicate mod errors in java 17 configurations using old gtnhlib")
}
}
}
def mixingConfigRefMap = 'mixins.' + modId + '.refmap.json'
def mixinTmpDir = buildDir.path + File.separator + 'tmp' + File.separator + 'mixins'
def refMap = "${mixinTmpDir}" + File.separator + mixingConfigRefMap
def mixinSrg = "${mixinTmpDir}" + File.separator + "mixins.srg"
if (file('dependencies.gradle.kts').exists()) {
apply from: 'dependencies.gradle.kts'
} else if (file('dependencies.gradle').exists()) {
apply from: 'dependencies.gradle'
} else {
logger.error("Neither dependencies.gradle.kts nor dependencies.gradle was found, make sure you extracted the full ExampleMod template.")
throw new RuntimeException("Missing dependencies.gradle[.kts]")
}
tasks.register('generateAssets') {
group = "GTNH Buildscript"
@@ -648,46 +724,17 @@ tasks.register('generateAssets') {
}
if (usesMixins.toBoolean()) {
tasks.named("reobfJar", ReobfuscatedJar).configure {
extraSrgFiles.from(mixinSrg)
}
tasks.named("processResources").configure {
dependsOn("generateAssets")
}
tasks.named("compileJava", JavaCompile).configure {
doFirst {
new File(mixinTmpDir).mkdirs()
}
options.compilerArgs += [
"-AreobfSrgFile=${tasks.reobfJar.srg.get().asFile}",
"-AoutSrgFile=${mixinSrg}",
"-AoutRefMapFile=${refMap}",
// Elan: from what I understand they are just some linter configs so you get some warning on how to properly code
"-XDenableSunApiLintControl",
"-XDignore.symbol.file"
]
}
pluginManager.withPlugin('org.jetbrains.kotlin.kapt') {
kapt {
correctErrorTypes = true
javacOptions {
option("-AreobfSrgFile=${tasks.reobfJar.srg.get().asFile}")
option("-AoutSrgFile=$mixinSrg")
option("-AoutRefMapFile=$refMap")
}
}
tasks.configureEach { task ->
if (task.name == "kaptKotlin") {
task.doFirst {
new File(mixinTmpDir).mkdirs()
}
}
}
}
}
tasks.named("processResources", ProcessResources).configure {
@@ -705,7 +752,6 @@ tasks.named("processResources", ProcessResources).configure {
}
if (usesMixins.toBoolean()) {
from refMap
dependsOn("compileJava", "compileScala")
}
}
@@ -724,16 +770,16 @@ ext.java17PatchDependenciesCfg = configurations.create("java17PatchDependencies"
}
dependencies {
def lwjgl3ifyVersion = '1.3.5'
def lwjgl3ifyVersion = '1.4.0'
def asmVersion = '9.4'
if (modId != 'lwjgl3ify') {
java17Dependencies("com.github.GTNewHorizons:lwjgl3ify:${lwjgl3ifyVersion}")
}
if (modId != 'hodgepodge') {
java17Dependencies('com.github.GTNewHorizons:Hodgepodge:2.2.13')
java17Dependencies('com.github.GTNewHorizons:Hodgepodge:2.2.26')
}
java17PatchDependencies('net.minecraft:launchwrapper:1.15') {transitive = false}
java17PatchDependencies('net.minecraft:launchwrapper:1.17.2') {transitive = false}
java17PatchDependencies("org.ow2.asm:asm:${asmVersion}")
java17PatchDependencies("org.ow2.asm:asm-commons:${asmVersion}")
java17PatchDependencies("org.ow2.asm:asm-tree:${asmVersion}")
@@ -979,6 +1025,9 @@ idea {
}
}
runConfigurations {
"0. Build and Test"(Gradle) {
taskNames = ["build"]
}
"1. Run Client"(Gradle) {
taskNames = ["runClient"]
}
@@ -1098,6 +1147,14 @@ tasks.named("processIdeaSettings").configure {
dependsOn("injectTags")
}
tasks.named("ideVirtualMainClasses").configure {
// Make IntelliJ "Build project" build the mod jars
dependsOn("jar", "reobfJar")
if (!disableSpotless) {
dependsOn("spotlessCheck")
}
}
// workaround variable hiding in pom processing
def projectConfigs = project.configurations
@@ -1118,12 +1175,14 @@ publishing {
}
repositories {
maven {
url = "http://jenkins.usrv.eu:8081/nexus/content/repositories/releases"
allowInsecureProtocol = true
credentials {
username = System.getenv("MAVEN_USER") ?: "NONE"
password = System.getenv("MAVEN_PASSWORD") ?: "NONE"
if (usesMavenPublishing.toBoolean()) {
maven {
url = mavenPublishUrl
allowInsecureProtocol = mavenPublishUrl.startsWith("http://") // Mostly for the GTNH maven
credentials {
username = System.getenv("MAVEN_USER") ?: "NONE"
password = System.getenv("MAVEN_PASSWORD") ?: "NONE"
}
}
}
}
@@ -1238,7 +1297,7 @@ def addCurseForgeRelation(String type, String name) {
// Updating
def buildscriptGradleVersion = "8.1.1"
def buildscriptGradleVersion = "8.2.1"
tasks.named('wrapper', Wrapper).configure {
gradleVersion = buildscriptGradleVersion
@@ -1344,8 +1403,14 @@ boolean isNewBuildScriptVersionAvailable() {
String currentBuildScript = getFile("build.gradle").getText()
String currentBuildScriptHash = getVersionHash(currentBuildScript)
String availableBuildScript = availableBuildScriptUrl().newInputStream(parameters).getText()
String availableBuildScriptHash = getVersionHash(availableBuildScript)
String availableBuildScriptHash
try {
String availableBuildScript = availableBuildScriptUrl().newInputStream(parameters).getText()
availableBuildScriptHash = getVersionHash(availableBuildScript)
} catch (IOException e) {
logger.warn("Could not check for buildscript update availability: {}", e.message)
return false
}
boolean isUpToDate = currentBuildScriptHash.empty || availableBuildScriptHash.empty || currentBuildScriptHash == availableBuildScriptHash
return !isUpToDate
@@ -1510,3 +1575,17 @@ def getSecondaryArtifacts() {
if (apiPackage) secondaryArtifacts += [apiJar]
return secondaryArtifacts
}
// For easier scripting of things that require variables defined earlier in the buildscript
if (file('addon.late.gradle.kts').exists()) {
apply from: 'addon.late.gradle.kts'
} else if (file('addon.late.gradle').exists()) {
apply from: 'addon.late.gradle'
}
// File for local tweaks not commited to Git
if (file('addon.late.local.gradle.kts').exists()) {
apply from: 'addon.late.local.gradle.kts'
} else if (file('addon.late.local.gradle').exists()) {
apply from: 'addon.late.local.gradle'
}
+3
View File
@@ -2,6 +2,9 @@
dependencies {
compileOnly(sourceSets.compileStubs.output)
compileStubs(sourceSets.compileStubsStubs.output)
compileOnly("com.github.GTNewHorizons:ProjectRed:4.7.12-GTNH:dev")
compileOnly(files("dependencies/SmartRender-1.7.10-2.1-dev.jar"))
runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.3.55-GTNH:dev")
}
Binary file not shown.
+4 -4
View File
@@ -34,7 +34,7 @@ enableModernJavaSyntax = true
# Enables injecting missing generics into the decompiled source code for a better coding experience
# Turns most publically visible List, Map, etc. into proper List<Type>, Map<K, V> types
enableGenericInjection = false
enableGenericInjection = true
# Define a source file of your project with:
# public static final String VERSION = "GRADLETOKEN_VERSION";
@@ -42,10 +42,10 @@ enableGenericInjection = false
# version in @Mod([...], version = VERSION, [...])
# Leave these properties empty to skip individual token replacements
generateGradleTokenClass = com.gtnewhorizons.angelica.Tags
gradleTokenModId = MODID
gradleTokenModName = MODNAME
gradleTokenModId =
gradleTokenModName =
gradleTokenVersion = VERSION
gradleTokenGroupName = GROUPNAME
gradleTokenGroupName =
# [DEPRECATED]
# Multiple source files can be defined here by providing a comma-seperated list: Class1.java,Class2.java,Class3.java
# public static final String VERSION = "GRADLETOKEN_VERSION";
Binary file not shown.
+1 -1
View File
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Vendored
+4 -3
View File
@@ -85,9 +85,6 @@ done
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -197,6 +194,10 @@ if "$cygwin" || "$msys" ; then
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
@@ -1,8 +0,0 @@
package net.minecraft.client.model;
import java.util.List;
public class ModelBase {
public List boxList;
}
@@ -1,14 +0,0 @@
package net.minecraft.client.renderer;
import net.minecraft.client.renderer.culling.ICamera;
public class WorldRenderer {
public boolean isInFrustum;
public boolean skipAllRenderPasses() {
return false;
}
public void updateInFrustum(ICamera frustrum) {}
}
@@ -1,6 +0,0 @@
package net.minecraft.client.renderer.culling;
public class Frustrum implements ICamera {
public void setPosition(double x, double y, double z) {}
}
@@ -1,4 +0,0 @@
package net.minecraft.client.renderer.culling;
public interface ICamera {
}
@@ -5,13 +5,15 @@ import com.gtnewhorizons.angelica.client.MultiTexID;
public abstract class AbstractTexture implements ITextureObject {
public int glTextureId = -1;
public MultiTexID multiTex;
public MultiTexID angelica$multiTex;
public int getGlTextureId() {
return 0;
}
public MultiTexID getMultiTexID() {
public void deleteGlTexture() {}
public MultiTexID angelica$getMultiTexID() {
return null;
}
}
@@ -1,14 +0,0 @@
package net.minecraft.client.renderer.texture;
public class DynamicTexture extends AbstractTexture {
public DynamicTexture(int i, int i1) {
super();
}
public int[] getTextureData() {
return null;
}
public void updateDynamicTexture() {}
}
@@ -4,7 +4,7 @@ import com.gtnewhorizons.angelica.client.MultiTexID;
public interface ITextureObject {
MultiTexID getMultiTexID();
MultiTexID angelica$getMultiTexID();
int getGlTextureId();
}
@@ -1,8 +0,0 @@
package net.minecraft.client.renderer.texture;
public class TextureAtlasSprite {
public boolean useAnisotropicFiltering;
public void updateAnimation() {}
}
@@ -1,18 +1,24 @@
package net.minecraft.client.renderer.texture;
import net.minecraft.client.resources.IResourceManager;
import net.minecraft.util.ResourceLocation;
public class TextureMap extends AbstractTexture {
public static ResourceLocation locationBlocksTexture;
public int atlasWidth;
public int atlasHeight;
public int angelica$atlasWidth;
public int angelica$atlasHeight;
public void loadTextureAtlas(IResourceManager p_110571_1_) {}
public ResourceLocation completeResourceLocation(ResourceLocation p_147634_1_, int p_147634_2_) {
return null;
}
public void updateAnimations() {}
public int getTextureType() {
return 0;
}
public ResourceLocation completeResourceLocation(ResourceLocation resourceLocation, int i) {
return null;
}
}
@@ -0,0 +1,5 @@
package net.minecraft.client.resources;
public interface IResourceManager {
}
@@ -1,4 +0,0 @@
package net.minecraft.client.shader;
public class TesselatorVertexState {
}
@@ -1,4 +1,5 @@
package net.minecraft.util;
public class ResourceLocation {
}
@@ -6,7 +6,7 @@ import cpw.mods.fml.common.Mod;
modid = "angelica",
name = "Angelica",
version = Tags.VERSION,
acceptedMinecraftVersions = "[1.7.10,)",
acceptedMinecraftVersions = "[1.7.10]",
acceptableRemoteVersions = "*")
public class AngelicaMod {
}
@@ -11,6 +11,6 @@ public class DefaultTexture extends AbstractTexture {
public void loadTexture(IResourceManager resourcemanager) {
int[] aint = ShadersTex.createAIntImage(1, 0xFFFFFFFF);
ShadersTex.setupTexture(this.getMultiTexID(), aint, 1, 1, false, false);
ShadersTex.setupTexture(this.angelica$getMultiTexID(), aint, 1, 1, false, false);
}
}
@@ -12,6 +12,8 @@ import net.minecraft.client.settings.GameSettings;
import org.lwjgl.Sys;
import com.gtnewhorizons.angelica.loading.AngelicaTweaker;
public class GuiShaders extends GuiScreen {
/** This GUI's parent GUI. */
@@ -50,7 +52,7 @@ public class GuiShaders extends GuiScreen {
*/
public void initGui() {
if (Shaders.shadersConfig == null) Shaders.loadConfig();
List buttonList = this.buttonList;
List<GuiButton> buttonList = this.buttonList;
int width = this.width;
int height = this.height;
buttonList.add(
@@ -60,7 +62,7 @@ public class GuiShaders extends GuiScreen {
30,
160,
18,
"NormapMap: " + toStringOnOff(Shaders.configNormalMap)));
"NormalMap: " + toStringOnOff(Shaders.configNormalMap)));
buttonList.add(
new GuiButton(
18,
@@ -290,7 +292,7 @@ public class GuiShaders extends GuiScreen {
boolean var8 = false;
try {
Class var3 = Class.forName("java.awt.Desktop");
Class<?> var3 = Class.forName("java.awt.Desktop");
Object var4 = var3.getMethod("getDesktop", new Class[0]).invoke((Object) null, new Object[0]);
var3.getMethod("browse", new Class[] { URI.class }).invoke(
var4,
@@ -301,13 +303,12 @@ public class GuiShaders extends GuiScreen {
}
if (var8) {
System.out.println("Opening via system class!");
AngelicaTweaker.LOGGER.debug("Opening via system class!");
Sys.openURL("file://" + Shaders.shaderpacksdir.getAbsolutePath());
}
break;
case 6: /* Done */
File confshader = new File(Shaders.shadersdir, "current.cfg");
try {
Shaders.storeConfig();
} catch (Exception ex) {}
@@ -1,13 +1,13 @@
package com.gtnewhorizons.angelica.client;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.gui.GuiSlot;
import net.minecraft.client.renderer.Tessellator;
class GuiSlotShaders extends GuiSlot {
private ArrayList shaderslist;
private List<String> shaderslist;
final GuiShaders shadersGui;
@@ -151,6 +151,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.regex.Matcher;
@@ -184,14 +185,15 @@ import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import org.lwjgl.opengl.GLContext;
import com.gtnewhorizons.angelica.mixins.early.accessors.RendererEntityLivingAccessor;
import com.gtnewhorizons.angelica.Tags;
import com.gtnewhorizons.angelica.loading.AngelicaTweaker;
import com.gtnewhorizons.angelica.mixins.interfaces.IModelRenderer;
// import org.lwjgl.opengl.ARBVertexProgram;
public class Shaders {
public static final String versionString = "2.3.18";
public static final String versionString = Tags.VERSION;
public static final int versionNumber = 0x020312;
public static final int buildNumber = 53;
@@ -609,11 +611,11 @@ public class Shaders {
*/
public static void loadConfig() {
System.out.println("[Shaders] Loading configuration.");
AngelicaTweaker.LOGGER.info("[Shaders] Loading configuration.");
try {
if (!shaderpacksdir.exists()) shaderpacksdir.mkdir();
} catch (Exception e) {
System.err.println("[Shaders] Failed openning shaderpacks directory.");
AngelicaTweaker.LOGGER.warn("[Shaders] Failed openning shaderpacks directory.");
}
shadersConfig = new Properties();
@@ -631,7 +633,6 @@ public class Shaders {
storeConfig();
} catch (Exception e) {}
}
String value = null;
configNormalMap = Boolean.parseBoolean(shadersConfig.getProperty("normalMapEnabled", "true"));
configSpecularMap = Boolean.parseBoolean(shadersConfig.getProperty("specularMapEnabled", "true"));
configTweakBlockDamage = Boolean.parseBoolean(
@@ -655,7 +656,7 @@ public class Shaders {
}
public static void storeConfig() {
System.out.println("[Shaders] Save configuration.");
AngelicaTweaker.LOGGER.info("[Shaders] Save configuration.");
shadersConfig.setProperty("normalMapEnabled", Boolean.toString(configNormalMap));
shadersConfig.setProperty("specularMapEnabled", Boolean.toString(configSpecularMap));
shadersConfig.setProperty("tweakBlockDamage", Boolean.toString(configTweakBlockDamage));
@@ -705,9 +706,9 @@ public class Shaders {
}
}
if (shaderPack != null) {
System.out.println("[Shaders] Loaded shaderpack.");
AngelicaTweaker.LOGGER.info("[Shaders] Loaded shaderpack.");
} else {
System.out.println("[Shaders] Did not load shaderpack.");
AngelicaTweaker.LOGGER.error("[Shaders] Did not load shaderpack.");
shaderPack = new ShaderPackNone();
}
}
@@ -831,8 +832,8 @@ public class Shaders {
// else System.out.println("[Shaders] Shader loaded: " + currentshadername);
// }
static ArrayList listofShaders() {
ArrayList<String> list = new ArrayList();
static List<String> listofShaders() {
List<String> list = new ArrayList<>();
list.add(packNameNone);
list.add(packNameDefault);
try {
@@ -872,7 +873,7 @@ public class Shaders {
public static int checkFramebufferStatus(String location) {
int status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
if (status != GL_FRAMEBUFFER_COMPLETE_EXT)
System.err.format("FramebufferStatus 0x%04X at %s\n", status, location);
AngelicaTweaker.LOGGER.error(String.format("FramebufferStatus 0x%04X at %s", status, location));
return status;
}
@@ -890,14 +891,16 @@ public class Shaders {
if (!skipPrint) {
if (errorCode == GL_INVALID_FRAMEBUFFER_OPERATION_EXT) {
int status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
System.err.format(
"GL error 0x%04X: %s (Fb status 0x%04X) at %s\n",
errorCode,
gluErrorString(errorCode),
status,
location);
AngelicaTweaker.LOGGER.error(
String.format(
"GL error 0x%04X: %s (Fb status 0x%04X) at %s",
errorCode,
gluErrorString(errorCode),
status,
location));
} else {
System.err.format("GL error 0x%04X: %s at %s\n", errorCode, gluErrorString(errorCode), location);
AngelicaTweaker.LOGGER.error(
String.format("GL error 0x%04X: %s at %s", errorCode, gluErrorString(errorCode), location));
}
}
}
@@ -907,7 +910,13 @@ public class Shaders {
public static int checkGLError(String location, String info) {
int errorCode = glGetError();
if (errorCode != GL_NO_ERROR) {
System.err.format("GL error 0x%04x: %s at %s %s\n", errorCode, gluErrorString(errorCode), location, info);
AngelicaTweaker.LOGGER.error(
String.format(
"GL error 0x%04x: %s at %s %s",
errorCode,
gluErrorString(errorCode),
location,
info));
}
return errorCode;
}
@@ -915,20 +924,21 @@ public class Shaders {
public static int checkGLError(String location, String info1, String info2) {
int errorCode = glGetError();
if (errorCode != GL_NO_ERROR) {
System.err.format(
"GL error 0x%04x: %s at %s %s %s\n",
errorCode,
gluErrorString(errorCode),
location,
info1,
info2);
AngelicaTweaker.LOGGER.error(
String.format(
"GL error 0x%04x: %s at %s %s %s",
errorCode,
gluErrorString(errorCode),
location,
info1,
info2));
}
return errorCode;
}
private static String printChatAndLogError(String str) {
mc.ingameGUI.getChatGUI().printChatMessage(new ChatComponentText(str));
System.err.println(str);
AngelicaTweaker.LOGGER.error(str);
return str;
}
@@ -938,12 +948,12 @@ public class Shaders {
.append(buf.capacity()).append(" :");
for (int lim = buf.limit(), i = 0; i < lim; ++i) sb.append(" ").append(buf.get(i));
sb.append("]");
System.out.println(sb);
AngelicaTweaker.LOGGER.debug(sb.toString());
}
public static void startup(Minecraft mc) {
Shaders.mc = mc;
System.out.println("ShadersMod version " + versionString);
AngelicaTweaker.LOGGER.info("Angelica version " + versionString);
Shaders.loadConfig();
}
@@ -968,7 +978,7 @@ public class Shaders {
mc = Minecraft.getMinecraft();
checkGLError("Shaders.init pre");
capabilities = GLContext.getCapabilities();
System.out.println(
AngelicaTweaker.LOGGER.debug(
"[Shaders] OpenGL 2.0 = " + toStringYN(capabilities.OpenGL20)
+ " 2.1 = "
+ toStringYN(capabilities.OpenGL21)
@@ -996,9 +1006,10 @@ public class Shaders {
int maxDrawBuffers = glGetInteger(GL_MAX_DRAW_BUFFERS);
int maxColorAttach = glGetInteger(GL_MAX_COLOR_ATTACHMENTS_EXT);
System.out.println("[Shaders] GL_MAX_DRAW_BUFFERS = " + maxDrawBuffers);
System.out.println("[Shaders] GL_MAX_COLOR_ATTACHMENTS_EXT = " + maxColorAttach);
System.out.println("[Shaders] GL_MAX_TEXTURE_IMAGE_UNITS = " + glGetInteger(GL_MAX_TEXTURE_IMAGE_UNITS));
AngelicaTweaker.LOGGER.debug("[Shaders] GL_MAX_DRAW_BUFFERS = " + maxDrawBuffers);
AngelicaTweaker.LOGGER.debug("[Shaders] GL_MAX_COLOR_ATTACHMENTS_EXT = " + maxColorAttach);
AngelicaTweaker.LOGGER
.debug("[Shaders] GL_MAX_TEXTURE_IMAGE_UNITS = " + glGetInteger(GL_MAX_TEXTURE_IMAGE_UNITS));
usedColorBuffers = 4;
usedDepthBuffers = 1;
@@ -1046,7 +1057,7 @@ public class Shaders {
}
}
Map<String, IntBuffer> drawBuffersMap = new HashMap();
Map<String, IntBuffer> drawBuffersMap = new HashMap<>();
for (int p = 0; p < ProgramCount; ++p) {
if (p == ProgramFinal) {
programsDrawBuffers[p] = null;
@@ -1185,7 +1196,7 @@ public class Shaders {
public static void resetDisplayList() {
++numberResetDisplayList;
System.out.println("Reset model renderers");
AngelicaTweaker.LOGGER.debug("Reset model renderers");
if (Shaders.useMidTexCoordAttrib || Shaders.useMultiTexCoord3Attrib) {
Iterator<Render> it = RenderManager.instance.entityRenderMap.values().iterator();
while (it.hasNext()) {
@@ -1193,29 +1204,29 @@ public class Shaders {
if (ren instanceof RendererLivingEntity) {
RendererLivingEntity rle = (RendererLivingEntity) ren;
// System.out.format("Reset %s\n", rle.toString());
resetDisplayListModel(((RendererEntityLivingAccessor) rle).getMainModel());
resetDisplayListModel(((RendererEntityLivingAccessor) rle).getRenderPassModel());
resetDisplayListModel(rle.mainModel);
resetDisplayListModel(rle.renderPassModel);
}
}
}
System.out.println("Reset world renderers");
AngelicaTweaker.LOGGER.debug("Reset world renderers");
mc.renderGlobal.loadRenderers();
}
public static void resetDisplayListModel(ModelBase mbase) {
if (mbase != null) {
Iterator it = mbase.boxList.iterator();
Iterator<ModelRenderer> it = mbase.boxList.iterator();
while (it.hasNext()) {
Object obj = it.next();
if (obj instanceof ModelRenderer) {
resetDisplayListModelRenderer((ModelRenderer) obj);
ModelRenderer obj = it.next();
if (obj != null) {
resetDisplayListModelRenderer(obj);
}
}
}
}
public static void resetDisplayListModelRenderer(ModelRenderer mrr) {
((IModelRenderer) mrr).resetDisplayList();
((IModelRenderer) mrr).angelica$resetDisplayList();
// if (mrr.compiled)
// {
// GLAllocation.deleteDisplayLists(mrr.displayList);
@@ -1359,7 +1370,7 @@ public class Shaders {
printLogInfo(programid, vShaderPath + "," + fShaderPath);
int valid = glGetProgrami(programid, GL_VALIDATE_STATUS);
if (valid == GL_TRUE) {
System.out.println("Program " + programNames[program] + " loaded");
AngelicaTweaker.LOGGER.debug("Program " + programNames[program] + " loaded");
} else {
printChatAndLogError("[Shaders] Error : Invalid program " + programNames[program]);
glDeleteObjectARB(programid);
@@ -1528,129 +1539,129 @@ public class Shaders {
// Shadow resolution
} else if (line.matches("/\\* SHADOWRES:[0-9]+ \\*/.*")) {
String[] parts = line.split("(:| )", 4);
System.out.println("Shadow map resolution: " + parts[2]);
AngelicaTweaker.LOGGER.debug("Shadow map resolution: " + parts[2]);
spShadowMapWidth = spShadowMapHeight = Integer.parseInt(parts[2]);
shadowMapWidth = shadowMapHeight = Math.round(spShadowMapWidth * configShadowResMul);
} else if (line.matches("[ \t]*const[ \t]*int[ \t]*shadowMapResolution[ \t]*=[ \t]*-?[0-9.]+f?;.*")) {
String[] parts = line.split("(=[ \t]*|;)");
System.out.println("Shadow map resolution: " + parts[1]);
AngelicaTweaker.LOGGER.debug("Shadow map resolution: " + parts[1]);
spShadowMapWidth = spShadowMapHeight = Integer.parseInt(parts[1]);
shadowMapWidth = shadowMapHeight = Math.round(spShadowMapWidth * configShadowResMul);
} else if (line.matches("/\\* SHADOWFOV:[0-9\\.]+ \\*/.*")) {
String[] parts = line.split("(:| )", 4);
System.out.println("Shadow map field of view: " + parts[2]);
AngelicaTweaker.LOGGER.debug("Shadow map field of view: " + parts[2]);
shadowMapFOV = Float.parseFloat(parts[2]);
shadowMapIsOrtho = false;
// Shadow distance
} else if (line.matches("/\\* SHADOWHPL:[0-9\\.]+ \\*/.*")) {
String[] parts = line.split("(:| )", 4);
System.out.println("Shadow map half-plane: " + parts[2]);
AngelicaTweaker.LOGGER.debug("Shadow map half-plane: " + parts[2]);
shadowMapHalfPlane = Float.parseFloat(parts[2]);
shadowMapIsOrtho = true;
} else if (line.matches("[ \t]*const[ \t]*float[ \t]*shadowDistance[ \t]*=[ \t]*-?[0-9.]+f?;.*")) {
String[] parts = line.split("(=[ \t]*|;)");
System.out.println("Shadow map distance: " + parts[1]);
AngelicaTweaker.LOGGER.debug("Shadow map distance: " + parts[1]);
shadowMapHalfPlane = Float.parseFloat(parts[1]);
shadowMapIsOrtho = true;
} else if (line.matches("[ \t]*const[ \t]*float[ \t]*shadowIntervalSize[ \t]*=[ \t]*-?[0-9.]+f?;.*")) {
String[] parts = line.split("(=[ \t]*|;)");
System.out.println("Shadow map interval size: " + parts[1]);
AngelicaTweaker.LOGGER.debug("Shadow map interval size: " + parts[1]);
shadowIntervalSize = Float.parseFloat(parts[1]);
} else if (line.matches("[ \t]*const[ \t]*bool[ \t]*generateShadowMipmap[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("Generate shadow mipmap");
AngelicaTweaker.LOGGER.debug("Generate shadow mipmap");
Arrays.fill(shadowMipmapEnabled, true);
} else if (line.matches("[ \t]*const[ \t]*bool[ \t]*generateShadowColorMipmap[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("Generate shadow color mipmap");
AngelicaTweaker.LOGGER.debug("Generate shadow color mipmap");
Arrays.fill(shadowColorMipmapEnabled, true);
} else if (line.matches("[ \t]*const[ \t]*bool[ \t]*shadowHardwareFiltering[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("Hardware shadow filtering enabled.");
AngelicaTweaker.LOGGER.debug("Hardware shadow filtering enabled.");
Arrays.fill(shadowHardwareFilteringEnabled, true);
} else if (line.matches("[ \t]*const[ \t]*bool[ \t]*shadowHardwareFiltering0[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("shadowHardwareFiltering0");
AngelicaTweaker.LOGGER.debug("shadowHardwareFiltering0");
shadowHardwareFilteringEnabled[0] = true;
} else if (line.matches("[ \t]*const[ \t]*bool[ \t]*shadowHardwareFiltering1[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("shadowHardwareFiltering1");
AngelicaTweaker.LOGGER.debug("shadowHardwareFiltering1");
shadowHardwareFilteringEnabled[1] = true;
} else if (line
.matches("[ \t]*const[ \t]*bool[ \t]*(shadowtex0Mipmap|shadowtexMipmap)[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("shadowtex0Mipmap");
AngelicaTweaker.LOGGER.debug("shadowtex0Mipmap");
shadowMipmapEnabled[0] = true;
} else
if (line.matches("[ \t]*const[ \t]*bool[ \t]*(shadowtex1Mipmap)[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("shadowtex1Mipmap");
AngelicaTweaker.LOGGER.debug("shadowtex1Mipmap");
shadowMipmapEnabled[1] = true;
} else if (line.matches(
"[ \t]*const[ \t]*bool[ \t]*(shadowcolor0Mipmap|shadowColor0Mipmap)[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("shadowcolor0Mipmap");
AngelicaTweaker.LOGGER.debug("shadowcolor0Mipmap");
shadowColorMipmapEnabled[0] = true;
} else
if (line.matches(
"[ \t]*const[ \t]*bool[ \t]*(shadowcolor1Mipmap|shadowColor1Mipmap)[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("shadowcolor1Mipmap");
AngelicaTweaker.LOGGER.debug("shadowcolor1Mipmap");
shadowColorMipmapEnabled[1] = true;
} else
if (line.matches(
"[ \t]*const[ \t]*bool[ \t]*(shadowtex0Nearest|shadowtexNearest|shadow0MinMagNearest)[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("shadowtex0Nearest");
AngelicaTweaker.LOGGER.debug("shadowtex0Nearest");
shadowFilterNearest[0] = true;
} else
if (line.matches(
"[ \t]*const[ \t]*bool[ \t]*(shadowtex1Nearest|shadow1MinMagNearest)[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("shadowtex1Nearest");
AngelicaTweaker.LOGGER.debug("shadowtex1Nearest");
shadowFilterNearest[1] = true;
} else
if (line.matches(
"[ \t]*const[ \t]*bool[ \t]*(shadowcolor0Nearest|shadowColor0Nearest|shadowColor0MinMagNearest)[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("shadowcolor0Nearest");
AngelicaTweaker.LOGGER.debug("shadowcolor0Nearest");
shadowColorFilterNearest[0] = true;
} else
if (line.matches(
"[ \t]*const[ \t]*bool[ \t]*(shadowcolor1Nearest|shadowColor1Nearest|shadowColor1MinMagNearest)[ \t]*=[ \t]*true[ \t]*;.*")) {
System.out.println("shadowcolor1Nearest");
AngelicaTweaker.LOGGER.debug("shadowcolor1Nearest");
shadowColorFilterNearest[1] = true;
// Wetness half life
} else
if (line.matches("/\\* WETNESSHL:[0-9\\.]+ \\*/.*")) {
String[] parts = line.split("(:| )", 4);
System.out.println("Wetness halflife: " + parts[2]);
AngelicaTweaker.LOGGER.debug("Wetness halflife: " + parts[2]);
wetnessHalfLife = Float.parseFloat(parts[2]);
} else if (line.matches(
"[ \t]*const[ \t]*float[ \t]*wetnessHalflife[ \t]*=[ \t]*-?[0-9.]+f?;.*")) {
String[] parts = line.split("(=[ \t]*|;)");
System.out.println("Wetness halflife: " + parts[1]);
AngelicaTweaker.LOGGER.debug("Wetness halflife: " + parts[1]);
wetnessHalfLife = Float.parseFloat(parts[1]);
// Dryness halflife
} else
if (line.matches("/\\* DRYNESSHL:[0-9\\.]+ \\*/.*")) {
String[] parts = line.split("(:| )", 4);
System.out.println("Dryness halflife: " + parts[2]);
AngelicaTweaker.LOGGER.debug("Dryness halflife: " + parts[2]);
drynessHalfLife = Float.parseFloat(parts[2]);
} else if (line.matches(
"[ \t]*const[ \t]*float[ \t]*drynessHalflife[ \t]*=[ \t]*-?[0-9.]+f?;.*")) {
String[] parts = line.split("(=[ \t]*|;)");
System.out.println("Dryness halflife: " + parts[1]);
AngelicaTweaker.LOGGER.debug("Dryness halflife: " + parts[1]);
drynessHalfLife = Float.parseFloat(parts[1]);
// Eye brightness halflife
@@ -1658,7 +1669,8 @@ public class Shaders {
if (line.matches(
"[ \t]*const[ \t]*float[ \t]*eyeBrightnessHalflife[ \t]*=[ \t]*-?[0-9.]+f?;.*")) {
String[] parts = line.split("(=[ \t]*|;)");
System.out.println("Eye brightness halflife: " + parts[1]);
AngelicaTweaker.LOGGER
.debug("Eye brightness halflife: " + parts[1]);
eyeBrightnessHalflife = Float.parseFloat(parts[1]);
// Center depth halflife
@@ -1666,7 +1678,8 @@ public class Shaders {
if (line.matches(
"[ \t]*const[ \t]*float[ \t]*centerDepthHalflife[ \t]*=[ \t]*-?[0-9.]+f?;.*")) {
String[] parts = line.split("(=[ \t]*|;)");
System.out.println("Center depth halflife: " + parts[1]);
AngelicaTweaker.LOGGER
.debug("Center depth halflife: " + parts[1]);
centerDepthSmoothHalflife = Float.parseFloat(parts[1]);
// Sun path rotation
@@ -1674,7 +1687,8 @@ public class Shaders {
if (line.matches(
"[ \t]*const[ \t]*float[ \t]*sunPathRotation[ \t]*=[ \t]*-?[0-9.]+f?;.*")) {
String[] parts = line.split("(=[ \t]*|;)");
System.out.println("Sun path rotation: " + parts[1]);
AngelicaTweaker.LOGGER
.debug("Sun path rotation: " + parts[1]);
sunPathRotation = Float.parseFloat(parts[1]);
// Ambient occlusion level
@@ -1682,7 +1696,8 @@ public class Shaders {
if (line.matches(
"[ \t]*const[ \t]*float[ \t]*ambientOcclusionLevel[ \t]*=[ \t]*-?[0-9.]+f?;.*")) {
String[] parts = line.split("(=[ \t]*|;)");
System.out.println("AO Level: " + parts[1]);
AngelicaTweaker.LOGGER
.debug("AO Level: " + parts[1]);
aoLevel = Float.parseFloat(parts[1]);
blockAoLight = 1.0f - aoLevel;
@@ -1693,7 +1708,7 @@ public class Shaders {
String[] parts = line.split("(=[ \t]*|;)");
int ssaa = Integer.parseInt(parts[1]);
if (ssaa > 1) {
System.out.println(
AngelicaTweaker.LOGGER.debug(
"Super sampling level: " + ssaa
+ "x");
superSamplingLevel = ssaa;
@@ -1706,8 +1721,9 @@ public class Shaders {
if (line.matches(
"[ \t]*const[ \t]*int[ \t]*noiseTextureResolution[ \t]*=[ \t]*-?[0-9.]+f?;.*")) {
String[] parts = line.split("(=[ \t]*|;)");
System.out.println("Noise texture enabled");
System.out.println(
AngelicaTweaker.LOGGER
.debug("Noise texture enabled");
AngelicaTweaker.LOGGER.debug(
"Noise texture resolution: "
+ parts[1]);
noiseTextureResolution = Integer
@@ -1728,8 +1744,8 @@ public class Shaders {
value);
if (bufferindex >= 0 && format != 0) {
gbuffersFormat[bufferindex] = format;
System.out.format(
"%s format: %s\n",
AngelicaTweaker.LOGGER.debug(
"{} format: {}",
name,
value);
}
@@ -1737,20 +1753,21 @@ public class Shaders {
} else
if (line.matches(
"/\\* GAUX4FORMAT:RGBA32F \\*/.*")) {
System.out.println(
AngelicaTweaker.LOGGER.debug(
"gaux4 format : RGB32AF");
gbuffersFormat[7] = GL_RGBA32F;
} else
if (line.matches(
"/\\* GAUX4FORMAT:RGB32F \\*/.*")) {
System.out.println(
AngelicaTweaker.LOGGER.debug(
"gaux4 format : RGB32F");
gbuffersFormat[7] = GL_RGB32F;
} else
if (line.matches(
"/\\* GAUX4FORMAT:RGB16 \\*/.*")) {
System.out.println(
"gaux4 format : RGB16");
AngelicaTweaker.LOGGER
.debug(
"gaux4 format : RGB16");
gbuffersFormat[7] = GL_RGB16;
// Mipmap stuff
@@ -1776,9 +1793,9 @@ public class Shaders {
>= 0) {
newCompositeMipmapSetting |= (1
<< bufferindex);
System.out
.format(
"%s mipmap enabled for %s\n",
AngelicaTweaker.LOGGER
.debug(
"{} mipmap enabled for {}",
name,
filename);
}
@@ -1807,7 +1824,7 @@ public class Shaders {
infoLog.get(infoBytes);
if (infoBytes[length - 1] == 0) infoBytes[length - 1] = 10;
String out = new String(infoBytes);
System.out.println("Info log: " + name + "\n" + out);
AngelicaTweaker.LOGGER.info("Info log: " + name + "\n" + out);
return false;
}
return true;
@@ -2146,7 +2163,7 @@ public class Shaders {
noiseTexture = null;
}
System.out.println("UNINIT");
AngelicaTweaker.LOGGER.trace("UNINIT");
shadowPassInterval = 0;
shouldSkipDefaultShadow = false;
@@ -2287,7 +2304,7 @@ public class Shaders {
if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
printChatAndLogError("Failed creating framebuffer! (Status " + status + ")");
} else {
System.out.println("Framebuffer created.");
AngelicaTweaker.LOGGER.debug("Framebuffer created.");
}
}
@@ -2376,7 +2393,7 @@ public class Shaders {
if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
printChatAndLogError("Failed creating shadow framebuffer! (Status " + status + ")");
} else {
System.out.println("Shadow framebuffer created.");
AngelicaTweaker.LOGGER.debug("Shadow framebuffer created.");
}
}
@@ -2625,7 +2642,7 @@ public class Shaders {
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, dfb);
GL11.glViewport(0, 0, Shaders.renderWidth, Shaders.renderHeight);
activeDrawBuffers = null;
ShadersTex.bindNSTextures(defaultTexture.getMultiTexID());
ShadersTex.bindNSTextures(defaultTexture.angelica$getMultiTexID());
useProgram(ProgramTextured);
checkGLError("end beginRender");
@@ -3354,7 +3371,7 @@ public class Shaders {
if (isRenderingWorld) {
checkGLError("endBlockEntities");
useProgram(lightmapEnabled ? ProgramTexturedLit : ProgramTextured);
ShadersTex.bindNSTextures(defaultTexture.getMultiTexID());
ShadersTex.bindNSTextures(defaultTexture.angelica$getMultiTexID());
}
}
@@ -3478,7 +3495,7 @@ public class Shaders {
checkGLError("copy depth");
glActiveTexture(GL_TEXTURE0);
}
ShadersTex.bindNSTextures(defaultTexture.getMultiTexID()); // flat
ShadersTex.bindNSTextures(defaultTexture.angelica$getMultiTexID()); // flat
}
}
@@ -3753,14 +3770,14 @@ public class Shaders {
public static void pushEntity(Block block) {
entityDataIndex++;
entityData[entityDataIndex * 2] = (block.blockRegistry.getIDForObject(block) & 0xFFFF)
entityData[entityDataIndex * 2] = (Block.blockRegistry.getIDForObject(block) & 0xFFFF)
| (block.getRenderType() << 16);
entityData[entityDataIndex * 2 + 1] = 0;
}
public static void pushEntity(RenderBlocks rb, Block block, int x, int y, int z) {
entityDataIndex++;
entityData[entityDataIndex * 2] = (block.blockRegistry.getIDForObject(block) & 0xFFFF)
entityData[entityDataIndex * 2] = (Block.blockRegistry.getIDForObject(block) & 0xFFFF)
| (block.getRenderType() << 16);
entityData[entityDataIndex * 2 + 1] = rb.blockAccess.getBlockMetadata(x, y, z);
}
@@ -14,8 +14,6 @@ import net.minecraft.item.ItemBlock;
import org.lwjgl.opengl.GL11;
import com.gtnewhorizons.angelica.mixins.early.accessors.WorldRenderersAccessor;
public class ShadersRender {
public static void setFrustrumPosition(Frustrum frustrum, double x, double y, double z) {
@@ -24,7 +22,7 @@ public class ShadersRender {
public static void clipRenderersByFrustrum(RenderGlobal renderGlobal, Frustrum frustrum, float par2) {
Shaders.checkGLError("pre clip");
WorldRenderer[] worldRenderers = ((WorldRenderersAccessor) renderGlobal).getWorldRenderers();
WorldRenderer[] worldRenderers = renderGlobal.worldRenderers;
if (!Shaders.isShadowPass) {
for (WorldRenderer worldRenderer : worldRenderers) {
if (!worldRenderer.skipAllRenderPasses()) {
@@ -14,8 +14,8 @@ import net.minecraft.client.renderer.Tessellator;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL13;
import com.gtnewhorizons.angelica.loading.AngelicaTweaker;
import com.gtnewhorizons.angelica.mixins.interfaces.TessellatorAccessor;
import com.gtnewhorizons.angelica.transform.ALog;
public class ShadersTess {
@@ -28,7 +28,7 @@ public class ShadersTess {
} else {
tess.isDrawing = false;
if (tess.drawMode == GL11.GL_QUADS && tess.vertexCount % 4 != 0) {
ALog.warning("%s", "bad vertexCount");
AngelicaTweaker.LOGGER.warn("%s", "bad vertexCount");
}
int voffset = 0;
int realDrawMode = tess.drawMode;
@@ -36,40 +36,40 @@ public class ShadersTess {
int vcount;
vcount = Math.min(
tess.vertexCount - voffset,
tessa.getAngelica$byteBuffer().capacity() / (vertexStride * 4));
tessa.angelica$getByteBuffer().capacity() / (vertexStride * 4));
if (realDrawMode == GL11.GL_QUADS) vcount = vcount / 4 * 4;
tessa.getAngelica$floatBuffer().clear();
tessa.getAngelica$shortBuffer().clear();
tessa.getAngelica$intBuffer().clear();
tessa.getAngelica$intBuffer().put(tess.rawBuffer, voffset * vertexStride, vcount * vertexStride);
tessa.getAngelica$byteBuffer().position(0);
tessa.getAngelica$byteBuffer().limit(vcount * (vertexStride * 4));
tessa.angelica$getFloatBuffer().clear();
tessa.angelica$getShortBuffer().clear();
tessa.angelica$getIntBuffer().clear();
tessa.angelica$getIntBuffer().put(tess.rawBuffer, voffset * vertexStride, vcount * vertexStride);
tessa.angelica$getByteBuffer().position(0);
tessa.angelica$getByteBuffer().limit(vcount * (vertexStride * 4));
voffset += vcount;
if (tess.hasTexture) {
tessa.getAngelica$floatBuffer().position(3);
GL11.glTexCoordPointer(2, (vertexStride * 4), tessa.getAngelica$floatBuffer());
tessa.angelica$getFloatBuffer().position(3);
GL11.glTexCoordPointer(2, (vertexStride * 4), tessa.angelica$getFloatBuffer());
GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
}
if (tess.hasBrightness) {
OpenGlHelper.setClientActiveTexture(OpenGlHelper.lightmapTexUnit);
tessa.getAngelica$shortBuffer().position(6 * 2);
GL11.glTexCoordPointer(2, (vertexStride * 4), tessa.getAngelica$shortBuffer());
tessa.angelica$getShortBuffer().position(6 * 2);
GL11.glTexCoordPointer(2, (vertexStride * 4), tessa.angelica$getShortBuffer());
GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit);
}
if (tess.hasColor) {
tessa.getAngelica$byteBuffer().position(5 * 4);
GL11.glColorPointer(4, true, (vertexStride * 4), tessa.getAngelica$byteBuffer());
tessa.angelica$getByteBuffer().position(5 * 4);
GL11.glColorPointer(4, true, (vertexStride * 4), tessa.angelica$getByteBuffer());
GL11.glEnableClientState(GL11.GL_COLOR_ARRAY);
}
if (tess.hasNormals) {
tessa.getAngelica$floatBuffer().position(9);
GL11.glNormalPointer((vertexStride * 4), tessa.getAngelica$floatBuffer());
tessa.angelica$getFloatBuffer().position(9);
GL11.glNormalPointer((vertexStride * 4), tessa.angelica$getFloatBuffer());
GL11.glEnableClientState(GL11.GL_NORMAL_ARRAY);
}
tessa.getAngelica$floatBuffer().position(0);
GL11.glVertexPointer(3, (vertexStride * 4), tessa.getAngelica$floatBuffer());
tessa.angelica$getFloatBuffer().position(0);
GL11.glVertexPointer(3, (vertexStride * 4), tessa.angelica$getFloatBuffer());
ShadersTess.preDrawArray(tess);
GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
@@ -105,7 +105,7 @@ public class ShadersTess {
// Shaders.checkGLError("preDrawArray");
if (Shaders.useMultiTexCoord3Attrib && tess.hasTexture) {
GL13.glClientActiveTexture(GL13.GL_TEXTURE3);
GL11.glTexCoordPointer(2, (vertexStride * 4), (FloatBuffer) tessa.getAngelica$floatBuffer().position(12));
GL11.glTexCoordPointer(2, (vertexStride * 4), (FloatBuffer) tessa.angelica$getFloatBuffer().position(12));
GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
GL13.glClientActiveTexture(GL13.GL_TEXTURE0);
}
@@ -115,7 +115,7 @@ public class ShadersTess {
2,
false,
vertexStride * 4,
(FloatBuffer) tessa.getAngelica$floatBuffer().position(12));
(FloatBuffer) tessa.angelica$getFloatBuffer().position(12));
glEnableVertexAttribArrayARB(Shaders.midTexCoordAttrib);
}
if (Shaders.useEntityAttrib) {
@@ -125,7 +125,7 @@ public class ShadersTess {
false,
false,
vertexStride * 4,
(ShortBuffer) tessa.getAngelica$shortBuffer().position(7 * 2));
(ShortBuffer) tessa.angelica$getShortBuffer().position(7 * 2));
glEnableVertexAttribArrayARB(Shaders.entityAttrib);
}
// Shaders.checkGLError("preDrawArray");
@@ -185,7 +185,7 @@ public class ShadersTess {
// Expand
tess.bufferSize *= 2;
tess.rawBuffer = rawBuffer = Arrays.copyOf(tess.rawBuffer, tess.bufferSize);
System.out.format("Expand tesselator buffer %d\n", tess.bufferSize);
AngelicaTweaker.LOGGER.trace("Expand tesselator buffer {}", tess.bufferSize);
} else {
// Initialize
tess.bufferSize = 0x10000;
@@ -196,7 +196,7 @@ public class ShadersTess {
// shaders mod calculate normal and mid UV
if (tess.drawMode == 7) {
int i = tess.addedVertices % 4;
float[] vertexPos = tessa.getAngelica$vertexPos();
float[] vertexPos = tessa.angelica$getVertexPos();
vertexPos[i * 4 + 0] = fx;
vertexPos[i * 4 + 1] = fy;
vertexPos[i * 4 + 2] = fz;
@@ -216,9 +216,9 @@ public class ShadersTess {
float normalX = vnx * mult;
float normalY = vny * mult;
float normalZ = vnz * mult;
tessa.setAngelica$normalX(normalX);
tessa.setAngelica$normalY(normalY);
tessa.setAngelica$normalZ(normalZ);
tessa.angelica$setNormalX(normalX);
tessa.angelica$setNormalY(normalY);
tessa.angelica$setNormalZ(normalZ);
rawBuffer[rbi + (9 - vertexStride * 3)] = rawBuffer[rbi + (9 - vertexStride * 2)] = rawBuffer[rbi
+ (9 - vertexStride * 1)] = Float.floatToRawIntBits(normalX);
rawBuffer[rbi + (10 - vertexStride * 3)] = rawBuffer[rbi + (10 - vertexStride * 2)] = rawBuffer[rbi
@@ -227,20 +227,20 @@ public class ShadersTess {
+ (11 - vertexStride * 1)] = Float.floatToRawIntBits(normalZ);
tess.hasNormals = true;
// mid UV
tessa.setAngelica$midTextureU(
tessa.angelica$setMidTextureU(
(Float.intBitsToFloat(rawBuffer[rbi + (3 - vertexStride * 3)])
+ Float.intBitsToFloat(rawBuffer[rbi + (3 - vertexStride * 2)])
+ Float.intBitsToFloat(rawBuffer[rbi + (3 - vertexStride * 1)])
+ (float) tess.textureU) / 4);
tessa.setAngelica$midTextureV(
tessa.angelica$setMidTextureV(
(Float.intBitsToFloat(rawBuffer[rbi + (4 - vertexStride * 3)])
+ Float.intBitsToFloat(rawBuffer[rbi + (4 - vertexStride * 2)])
+ Float.intBitsToFloat(rawBuffer[rbi + (4 - vertexStride * 1)])
+ (float) tess.textureV) / 4);
rawBuffer[rbi + (12 - vertexStride * 3)] = rawBuffer[rbi + (12 - vertexStride * 2)] = rawBuffer[rbi
+ (12 - vertexStride * 1)] = Float.floatToRawIntBits(tessa.getAngelica$midTextureU());
+ (12 - vertexStride * 1)] = Float.floatToRawIntBits(tessa.angelica$getMidTextureU());
rawBuffer[rbi + (13 - vertexStride * 3)] = rawBuffer[rbi + (13 - vertexStride * 2)] = rawBuffer[rbi
+ (13 - vertexStride * 1)] = Float.floatToRawIntBits(tessa.getAngelica$midTextureV());
+ (13 - vertexStride * 1)] = Float.floatToRawIntBits(tessa.angelica$getMidTextureV());
}
}
// end normal and mid UV calculation
@@ -255,11 +255,11 @@ public class ShadersTess {
rawBuffer[rbi + 6] = tess.brightness;
rawBuffer[rbi + 7] = Shaders.getEntityData();
rawBuffer[rbi + 8] = Shaders.getEntityData2();
rawBuffer[rbi + 9] = Float.floatToRawIntBits((float) tessa.getAngelica$normalX());
rawBuffer[rbi + 10] = Float.floatToRawIntBits((float) tessa.getAngelica$normalY());
rawBuffer[rbi + 11] = Float.floatToRawIntBits((float) tessa.getAngelica$normalZ());
rawBuffer[rbi + 12] = Float.floatToRawIntBits((float) tessa.getAngelica$midTextureU());
rawBuffer[rbi + 13] = Float.floatToRawIntBits((float) ((TessellatorAccessor) tess).getAngelica$midTextureV());
rawBuffer[rbi + 9] = Float.floatToRawIntBits((float) tessa.angelica$getNormalX());
rawBuffer[rbi + 10] = Float.floatToRawIntBits((float) tessa.angelica$getNormalY());
rawBuffer[rbi + 11] = Float.floatToRawIntBits((float) tessa.angelica$getNormalZ());
rawBuffer[rbi + 12] = Float.floatToRawIntBits((float) tessa.angelica$getMidTextureU());
rawBuffer[rbi + 13] = Float.floatToRawIntBits((float) ((TessellatorAccessor) tess).angelica$getMidTextureV());
tess.rawBufferIndex = rbi += vertexStride;
++tess.vertexCount;
@@ -31,7 +31,8 @@ import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import org.lwjgl.opengl.GL13;
import org.lwjgl.opengl.GL30.*;
import com.gtnewhorizons.angelica.loading.AngelicaTweaker;
public class ShadersTex {
@@ -42,7 +43,7 @@ public class ShadersTex {
public static final int defBaseTexColor = 0x00000000;
public static final int defNormTexColor = 0xFF7F7FFF;
public static final int defSpecTexColor = 0x00000000;
public static Map<Integer, MultiTexID> multiTexMap = new HashMap();
public static Map<Integer, MultiTexID> multiTexMap = new HashMap<>();
public static TextureMap updatingTextureMap = null;
public static TextureAtlasSprite updatingSprite = null;
public static MultiTexID updatingTex = null;
@@ -78,8 +79,8 @@ public class ShadersTex {
}
public static IntBuffer fillIntBuffer(int size, int value) {
int[] aint = getIntArray(size);
IntBuffer intBuf = getIntBuffer(size);
getIntArray(size);
getIntBuffer(size);
Arrays.fill(intArray, 0, size, value);
intBuffer.put(intArray, 0, size);
return intBuffer;
@@ -102,7 +103,7 @@ public class ShadersTex {
}
public static MultiTexID getMultiTexID(AbstractTexture tex) {
MultiTexID multiTex = tex.multiTex;
MultiTexID multiTex = tex.angelica$multiTex;
if (multiTex == null) {
int baseTex = tex.getGlTextureId();
multiTex = multiTexMap.get(Integer.valueOf(baseTex));
@@ -110,7 +111,7 @@ public class ShadersTex {
multiTex = new MultiTexID(baseTex, GL11.glGenTextures(), GL11.glGenTextures());
multiTexMap.put(baseTex, multiTex);
}
tex.multiTex = multiTex;
tex.angelica$multiTex = multiTex;
}
return multiTex;
}
@@ -121,14 +122,14 @@ public class ShadersTex {
GL11.glDeleteTextures(texid);
atex.glTextureId = -1;
}
MultiTexID multiTex = atex.multiTex;
MultiTexID multiTex = atex.angelica$multiTex;
if (multiTex != null) {
atex.multiTex = null;
atex.angelica$multiTex = null;
multiTexMap.remove(Integer.valueOf(multiTex.base));
GL11.glDeleteTextures(multiTex.norm);
GL11.glDeleteTextures(multiTex.spec);
if (multiTex.base != texid) {
System.err.println("Error : MultiTexID.base mismatch.");
AngelicaTweaker.LOGGER.warn("Error : MultiTexID.base mismatch.");
GL11.glDeleteTextures(multiTex.base);
}
}
@@ -191,13 +192,13 @@ public class ShadersTex {
public static void bindTexture(ITextureObject tex) {
if (tex instanceof TextureMap) {
Shaders.atlasSizeX = ((TextureMap) tex).atlasWidth;
Shaders.atlasSizeY = ((TextureMap) tex).atlasHeight;
Shaders.atlasSizeX = ((TextureMap) tex).angelica$atlasWidth;
Shaders.atlasSizeY = ((TextureMap) tex).angelica$atlasHeight;
} else {
Shaders.atlasSizeX = 0;
Shaders.atlasSizeY = 0;
}
bindTextures(tex.getMultiTexID());
bindTextures(tex.angelica$getMultiTexID());
}
/** not used */
@@ -233,7 +234,7 @@ public class ShadersTex {
// for Dynamic Texture
public static void initDynamicTexture(int texID, int width, int height, DynamicTexture tex) {
MultiTexID multiTex = tex.getMultiTexID();
MultiTexID multiTex = tex.angelica$getMultiTexID();
int[] aint = tex.getTextureData();
int size = width * height;
Arrays.fill(aint, size, size * 2, defNormTexColor);
@@ -279,12 +280,16 @@ public class ShadersTex {
// for TextureMap
public static void allocateTextureMap(int texID, int mipmapLevels, int width, int height, float anisotropy,
Stitcher stitcher, TextureMap tex) {
System.out.println(
"allocateTextureMap " + tex
.getTextureType() + " " + mipmapLevels + " " + width + " " + height + " " + anisotropy + " ");
AngelicaTweaker.LOGGER.trace(
"allocateTextureMap {} {} {} {} {}",
tex.getTextureType(),
mipmapLevels,
width,
height,
anisotropy);
updatingTextureMap = tex;
tex.atlasWidth = width;
tex.atlasHeight = height;
tex.angelica$atlasWidth = width;
tex.angelica$atlasHeight = height;
MultiTexID multiTex = getMultiTexID(tex);
updatingTex = multiTex;
TextureUtil.allocateTextureImpl(multiTex.base, mipmapLevels, width, height, anisotropy);
@@ -439,7 +444,6 @@ public class ShadersTex {
}
public static void genMipmapAlpha(int[] aint, int offset, int width, int height) {
int minwh = Math.min(width, height);
int level;
int w1, w2, h1, h2, o1, o2;
w1 = w2 = width;
@@ -491,7 +495,6 @@ public class ShadersTex {
}
public static void genMipmapSimple(int[] aint, int offset, int width, int height) {
int minwh = Math.min(width, height);
int level;
int w1, w2, h1, h2, o1, o2;
w1 = w2 = width;
@@ -642,7 +645,7 @@ public class ShadersTex {
}
public static void updateDynamicTexture(int texID, int[] src, int width, int height, DynamicTexture tex) {
MultiTexID multiTex = tex.getMultiTexID();
MultiTexID multiTex = tex.angelica$getMultiTexID();
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.norm);
updateSubImage1(src, width, height, 0, 0, 1, defNormTexColor);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.spec);
@@ -664,9 +667,9 @@ public class ShadersTex {
}
// not used
public static void updateAnimationTextureMap(TextureMap tex, List tasList) {
public static void updateAnimationTextureMap(TextureMap tex, List<TextureAtlasSprite> tasList) {
Iterator<TextureAtlasSprite> iterator;
MultiTexID multiTex = tex.getMultiTexID();
MultiTexID multiTex = tex.angelica$getMultiTexID();
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.norm);
for (iterator = tasList.iterator(); iterator.hasNext();) {
TextureAtlasSprite tas = iterator.next();
@@ -883,7 +886,7 @@ public class ShadersTex {
| (((((color1 >>> 0) & 255) * factor1 + ((color2 >>> 0) & 255) * factor2) / 255) << 0);
}
public static void loadLayeredTexture(LayeredTexture tex, IResourceManager manager, List list) {
public static void loadLayeredTexture(LayeredTexture tex, IResourceManager manager, List<String> list) {
int width = 0;
int height = 0;
int size = 0;
@@ -919,7 +922,7 @@ public class ShadersTex {
}
}
// init and upload
setupTexture(tex.getMultiTexID(), image, width, height, false, false);
setupTexture(tex.angelica$getMultiTexID(), image, width, height, false, false);
}
/* update block texture filter +/- items texture */
@@ -927,7 +930,7 @@ public class ShadersTex {
TextureManager texman = Minecraft.getMinecraft().getTextureManager();
ITextureObject texObj = texman.getTexture(TextureMap.locationBlocksTexture);
if (texObj != null) {
MultiTexID multiTex = texObj.getMultiTexID();
MultiTexID multiTex = texObj.angelica$getMultiTexID();
// base texture
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.base);
GL11.glTexParameteri(
@@ -0,0 +1,37 @@
package com.gtnewhorizons.angelica.loading;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import com.gtnewhorizon.gtnhmixins.ILateMixinLoader;
import com.gtnewhorizon.gtnhmixins.LateMixin;
import com.gtnewhorizons.angelica.mixins.Mixins;
@LateMixin
public class AngelicaLateMixins implements ILateMixinLoader {
@Override
public String getMixinConfig() {
return "mixins.angelica.late.json";
}
@Override
public List<String> getMixins(Set<String> loadedMods) {
final List<String> mixins = new ArrayList<>();
final List<String> notLoading = new ArrayList<>();
for (Mixins mixin : Mixins.values()) {
if (mixin.phase == Mixins.Phase.LATE) {
if (mixin.shouldLoad(Collections.emptySet(), loadedMods)) {
mixins.addAll(mixin.mixinClasses);
} else {
notLoading.addAll(mixin.mixinClasses);
}
}
}
AngelicaTweaker.LOGGER.info("Not loading the following LATE mixins: {}", notLoading.toString());
return mixins;
}
}
@@ -20,7 +20,7 @@ import cpw.mods.fml.relauncher.IFMLLoadingPlugin;
@IFMLLoadingPlugin.SortingIndex(1100)
public class AngelicaTweaker implements IFMLLoadingPlugin, IEarlyMixinLoader {
public static final Logger log = LogManager.getLogger("AngelicaTweaker");
public static final Logger LOGGER = LogManager.getLogger("angelica");
@Override
public String[] getASMTransformerClass() {
@@ -69,7 +69,7 @@ public class AngelicaTweaker implements IFMLLoadingPlugin, IEarlyMixinLoader {
}
}
}
log.info("Not loading the following EARLY mixins: {}", notLoading.toString());
LOGGER.info("Not loading the following EARLY mixins: {}", notLoading.toString());
return mixins;
}
}
@@ -10,7 +10,6 @@ import net.minecraft.launchwrapper.Launch;
import net.minecraft.launchwrapper.LaunchClassLoader;
import com.gtnewhorizons.angelica.transform.AClassTransformer;
import com.gtnewhorizons.angelica.transform.ALog;
import cpw.mods.fml.common.asm.transformers.TerminalTransformer;
@@ -22,6 +21,7 @@ public class MixinCompatHackTweaker implements ITweaker {
try {
Field xformersField = lcl.getClass().getDeclaredField("transformers");
xformersField.setAccessible(true);
@SuppressWarnings("unchecked")
List<IClassTransformer> xformers = (List<IClassTransformer>) xformersField.get(lcl);
int terminalIndex;
for (terminalIndex = 1; terminalIndex < xformers.size(); terminalIndex++) {
@@ -30,7 +30,7 @@ public class MixinCompatHackTweaker implements ITweaker {
}
}
xformers.add(terminalIndex - 1, new AClassTransformer());
ALog.info("Hacked in asm class transformer in position %d", terminalIndex - 1);
AngelicaTweaker.LOGGER.info("Hacked in asm class transformer in position {}", terminalIndex - 1);
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -11,37 +11,46 @@ import cpw.mods.fml.relauncher.FMLLaunchHandler;
public enum Mixins {
ANGELICA_STARTUP(new Builder("Start Angelica").addTargetedMod(TargetedMod.VANILLA).setSide(Side.CLIENT)
.setPhase(Phase.EARLY).addMixinClasses("shaders.MixinMinecraft").setApplyIf(() -> true)),
ANGELICA_ACCESSORS(new Builder("Angelica Accessors").addTargetedMod(TargetedMod.VANILLA).setSide(Side.CLIENT)
.setPhase(Phase.EARLY)
.addMixinClasses(
"accessors.ModelRendererAccessor",
"accessors.RendererEntityLivingAccessor",
"accessors.WorldRenderersAccessor")
.setApplyIf(() -> true)),
.setPhase(Phase.EARLY).addMixinClasses("shaders.MixinMinecraft")),
ANGELICA_SHADERS_BUTTON(new Builder("Add Shaders Button").addTargetedMod(TargetedMod.VANILLA).setSide(Side.CLIENT)
.setPhase(Phase.EARLY).addMixinClasses("settings.MixinGuiVideoSettings").setApplyIf(() -> true)),
.setPhase(Phase.EARLY).addMixinClasses("settings.MixinGuiVideoSettings")),
ANGELICA_LIGHTING(
new Builder("Lighting").addTargetedMod(TargetedMod.VANILLA).setSide(Side.CLIENT).setPhase(Phase.EARLY)
.addMixinClasses("lighting.MixinBlock", "lighting.MixinRenderBlocks").setApplyIf(() -> true)),
ANGELICA_LIGHTING(new Builder("Lighting").addTargetedMod(TargetedMod.VANILLA).setSide(Side.CLIENT)
.setPhase(Phase.EARLY).addMixinClasses("lighting.MixinBlock", "lighting.MixinRenderBlocks")),
ANGELICA_RENDERER(
new Builder("Renderer").addTargetedMod(TargetedMod.VANILLA).setSide(Side.CLIENT).setPhase(Phase.EARLY)
.addMixinClasses(
"renderer.MixinOpenGlHelper",
"renderer.MixinEntityRender",
"renderer.MixinEntityRenderer",
"renderer.MixinRenderBlocks",
"renderer.MixinRenderGlobal",
"renderer.MixinModelRenderer",
"renderer.MixinTextureClock",
"renderer.MixinTextureCompass",
"renderer.MixinSimpleTexture",
"renderer.MixinTessellator")
.setApplyIf(() -> true))
ANGELICA_RENDERER(new Builder("Renderer").addTargetedMod(TargetedMod.VANILLA).setSide(Side.CLIENT)
.setPhase(Phase.EARLY).addMixinClasses(
"renderer.MixinAbstractTexture",
"renderer.MixinDynamicTexture",
"renderer.MixinEntityRenderer",
"renderer.MixinItemRenderer",
"renderer.MixinITextureObject",
"renderer.MixinLayeredTexture",
"renderer.MixinModelRenderer",
"renderer.MixinOpenGlHelper",
"renderer.MixinRender",
"renderer.MixinRenderBlocks",
"renderer.MixinRenderDragon",
"renderer.MixinRenderEnderman",
"renderer.MixinRendererLivingEntity",
"renderer.MixinRenderGlobal",
"renderer.MixinRenderSpider",
"renderer.MixinSimpleTexture",
"renderer.MixinTessellator",
"renderer.MixinTextureAtlasSprite",
"renderer.MixinTextureClock",
"renderer.MixinTextureCompass",
"renderer.MixinTextureManager",
"renderer.MixinTextureMap",
"renderer.MixinThreadDownloadImageData")),
COMPAT_PR_ILLUMINATION(
new Builder("ProjectRed Illumination compat").addTargetedMod(TargetedMod.PROJECTRED_ILLUMINATION)
.setSide(Side.CLIENT).addMixinClasses("compat.MixinRenderHalo")),
COMPAT_SMART_RENDER(new Builder("Smart Render compat").addTargetedMod(TargetedMod.SMART_RENDER).setSide(Side.CLIENT)
.addMixinClasses("compat.MixinModelRotationRenderer"))
;
@@ -57,7 +66,7 @@ public enum Mixins {
private final String name;
private final List<String> mixinClasses = new ArrayList<>();
private Supplier<Boolean> applyIf;
private Supplier<Boolean> applyIf = () -> true;
private Side side = Side.BOTH;
private Phase phase = Phase.LATE;
private final List<TargetedMod> targetedMods = new ArrayList<>();
@@ -6,7 +6,9 @@ public enum TargetedMod {
FASTCRAFT("FastCraft", "fastcraft.Tweaker"),
OPTIFINE("Optifine", "optifine.OptiFineForgeTweaker", "Optifine"),
GTNHLIB("GTNHLib", "com.gtnewhorizon.gtnhlib.core.GTNHLibCore", "gtnhlib"),
LWJGL3IFY("lwjgl3ify", "me.eigenraven.lwjgl3ify.core.Lwjgl3ifyCoremod", "lwjgl3ify");
LWJGL3IFY("lwjgl3ify", "me.eigenraven.lwjgl3ify.core.Lwjgl3ifyCoremod", "lwjgl3ify"),
PROJECTRED_ILLUMINATION("ProjectRed Illumination", null, "ProjRed|Illumination"),
SMART_RENDER("Smart Render", null, "SmartRender");
/** The "name" in the @Mod annotation */
public final String modName;
@@ -1,23 +0,0 @@
package com.gtnewhorizons.angelica.mixins.early.accessors;
import net.minecraft.client.model.ModelRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(ModelRenderer.class)
public interface ModelRendererAccessor {
@Accessor()
boolean getCompiled();
@Accessor()
int getDisplayList();
@Accessor()
void setCompiled(boolean compiled);
@Accessor()
void setDisplayList(int displayList);
}
@@ -1,17 +0,0 @@
package com.gtnewhorizons.angelica.mixins.early.accessors;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.renderer.entity.RendererLivingEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(RendererLivingEntity.class)
public interface RendererEntityLivingAccessor {
@Accessor
ModelBase getMainModel();
@Accessor
ModelBase getRenderPassModel();
}
@@ -1,14 +0,0 @@
package com.gtnewhorizons.angelica.mixins.early.accessors;
import net.minecraft.client.renderer.RenderGlobal;
import net.minecraft.client.renderer.WorldRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(RenderGlobal.class)
public interface WorldRenderersAccessor {
@Accessor
WorldRenderer[] getWorldRenderers();
}
@@ -0,0 +1,29 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import net.minecraft.client.renderer.texture.AbstractTexture;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.SoftOverride;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.gtnewhorizons.angelica.client.MultiTexID;
import com.gtnewhorizons.angelica.client.ShadersTex;
@Mixin(AbstractTexture.class)
public class MixinAbstractTexture {
public MultiTexID angelica$multiTex;
@Inject(at = @At("HEAD"), method = "deleteGlTexture()V")
private void angelica$deleteTextures(CallbackInfo ci) {
ShadersTex.deleteTextures((AbstractTexture) (Object) this);
}
@SoftOverride
public MultiTexID angelica$getMultiTexID() {
return ShadersTex.getMultiTexID((AbstractTexture) (Object) this);
}
}
@@ -0,0 +1,44 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import net.minecraft.client.renderer.texture.DynamicTexture;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.Redirect;
import com.gtnewhorizons.angelica.client.ShadersTex;
@Mixin(DynamicTexture.class)
public class MixinDynamicTexture {
@ModifyVariable(argsOnly = true, at = @At(ordinal = 1, value = "LOAD"), index = 1, method = "<init>(II)V")
private int angelica$resizeDynamicTextureData(int p_i1271_2_) {
return p_i1271_2_ * 3;
}
@Redirect(
at = @At(
target = "Lnet/minecraft/client/renderer/texture/TextureUtil;allocateTexture(III)V",
value = "INVOKE"),
method = "<init>(II)V")
private void angelica$initDynamicTexture(int p_110991_0_, int p_110991_1_, int p_110991_2_) {
// p_110991_1_ needs to be divided by 3 to revert angelica$resizeDynamicTextureData
ShadersTex.initDynamicTexture(p_110991_0_, p_110991_1_ / 3, p_110991_2_, (DynamicTexture) (Object) this);
}
@Redirect(
at = @At(
target = "Lnet/minecraft/client/renderer/texture/TextureUtil;uploadTexture(I[III)V",
value = "INVOKE"),
method = "updateDynamicTexture()V")
private void angelica$updateDynamicTexture(int p_110988_0_, int[] p_110988_1_, int p_110988_2_, int p_110988_3_) {
ShadersTex.updateDynamicTexture(
p_110988_0_,
p_110988_1_,
p_110988_2_,
p_110988_3_,
(DynamicTexture) (Object) this);
}
}
@@ -1,45 +1,59 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import java.nio.FloatBuffer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.EffectRenderer;
import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.RenderGlobal;
import net.minecraft.client.renderer.culling.Frustrum;
import net.minecraft.client.renderer.culling.ICamera;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.entity.EntityLivingBase;
import org.lwjgl.opengl.GL11;
import org.spongepowered.asm.lib.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.Slice;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import com.gtnewhorizon.mixinextras.injector.ModifyExpressionValue;
import com.gtnewhorizons.angelica.client.Shaders;
import com.gtnewhorizons.angelica.client.ShadersRender;
@Mixin(EntityRenderer.class)
public abstract class MixinEntityRenderer {
@Shadow
private Minecraft mc;
@Shadow
public abstract void disableLightmap(double p_78483_1_);
// renderHand
@Inject(
method = "Lnet/minecraft/client/renderer/EntityRenderer;renderHand(FI)V",
at = @At(
value = "INVOKE",
shift = At.Shift.BEFORE,
target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V",
remap = false))
public void angelica$applyHandDepth(CallbackInfo ci) {
method = "renderHand(FI)V",
at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
private void angelica$applyHandDepth(CallbackInfo ci) {
Shaders.applyHandDepth();
}
@Inject(
method = "Lnet/minecraft/client/renderer/EntityRenderer;renderHand(FI)V",
method = "renderHand(FI)V",
at = @At(
value = "FIELD",
shift = At.Shift.BEFORE,
target = "Lnet/minecraft/client/settings/GameSettings;thirdPersonView:I",
ordinal = 1),
cancellable = true)
public void angelica$checkCompositeRendered(float p_78476_1_, int p_78476_2_, CallbackInfo ci) {
private void angelica$checkCompositeRendered(float p_78476_1_, int p_78476_2_, CallbackInfo ci) {
if (!Shaders.isCompositeRendered) {
ci.cancel();
}
@@ -47,11 +61,348 @@ public abstract class MixinEntityRenderer {
}
@Redirect(
method = "Lnet/minecraft/client/renderer/EntityRenderer;renderHand(FI)V",
method = "renderHand(FI)V",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/renderer/ItemRenderer;renderItemInFirstPerson(F)V"))
public void angelica$renderItemInFirstPerson(ItemRenderer itemRenderer, float partialTicks) {
private void angelica$renderItemInFirstPerson(ItemRenderer itemRenderer, float partialTicks) {
ShadersRender.renderItemFP(itemRenderer, partialTicks);
}
// disableLightmap
@Inject(at = @At("RETURN"), method = "disableLightmap(D)V")
private void angelica$disableLightmap(CallbackInfo ci) {
Shaders.disableLightmap();
}
// enableLightmap
@Inject(at = @At("RETURN"), method = "enableLightmap(D)V")
private void angelica$enableLightmap(CallbackInfo ci) {
Shaders.enableLightmap();
}
// renderWorld
@Inject(at = @At("HEAD"), method = "renderWorld(FJ)V")
private void angelica$beginRender(float p_78471_1_, long p_78471_2_, CallbackInfo ci) {
Shaders.beginRender(this.mc, p_78471_1_, p_78471_2_);
}
@Redirect(
at = @At(remap = false, target = "Lorg/lwjgl/opengl/GL11;glViewport(IIII)V", value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$setViewport(int x, int y, int width, int height) {
Shaders.setViewport(x, y, width, height);
}
@Inject(
at = @At(
remap = false,
shift = At.Shift.AFTER,
target = "Lorg/lwjgl/opengl/GL11;glClear(I)V",
value = "INVOKE"),
method = "renderWorld(FJ)V",
slice = @Slice(
from = @At(
args = "intValue=" + (GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT),
value = "CONSTANT"),
to = @At(args = "intValue=" + GL11.GL_CULL_FACE, ordinal = 1, value = "CONSTANT")))
private void angelica$clearRenderBuffer(CallbackInfo ci) {
Shaders.clearRenderBuffer();
}
@Inject(
at = @At(
shift = At.Shift.AFTER,
target = "Lnet/minecraft/client/renderer/EntityRenderer;setupCameraTransform(FI)V",
value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$setCamera(float p_78471_1_, long p_78471_2_, CallbackInfo ci) {
Shaders.setCamera(p_78471_1_);
}
@Redirect(
at = @At(
opcode = Opcodes.GETFIELD,
target = "Lnet/minecraft/client/settings/GameSettings;renderDistanceChunks:I",
value = "FIELD"),
method = "renderWorld(FJ)V")
private int angelica$isShadowPass(GameSettings gameSettings) {
// A better way would be replacing the if-expression completely but I don't know how. If you figure it how,
// please let me (glowredman) know. Unless that happens, we just redirect the field access and return either 3
// or 4 to achieve the same.
return Shaders.isShadowPass ? 3 : 4;
}
@Inject(
at = @At(target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(F)V", value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$beginSky(CallbackInfo ci) {
Shaders.beginSky();
}
@Inject(
at = @At(
shift = At.Shift.AFTER,
target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(F)V",
value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$endSky(CallbackInfo ci) {
Shaders.endSky();
}
@Redirect(
at = @At(target = "Lnet/minecraft/client/renderer/culling/Frustrum;setPosition(DDD)V", value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$setFrustrumPosition(Frustrum frustrum, double x, double y, double z) {
ShadersRender.setFrustrumPosition(frustrum, x, y, z);
}
@Redirect(
at = @At(
target = "Lnet/minecraft/client/renderer/RenderGlobal;clipRenderersByFrustum(Lnet/minecraft/client/renderer/culling/ICamera;F)V",
value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$clipRenderersByFrustrum(RenderGlobal renderGlobal, ICamera p_72729_1_, float p_72729_2_) {
ShadersRender.clipRenderersByFrustrum(renderGlobal, (Frustrum) p_72729_1_, p_72729_2_);
}
@Inject(
at = @At(
ordinal = 7,
target = "Lnet/minecraft/profiler/Profiler;endStartSection(Ljava/lang/String;)V",
value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$beginUpdateChunks(CallbackInfo ci) {
Shaders.beginUpdateChunks();
}
@Inject(
at = @At(
opcode = Opcodes.GETFIELD,
ordinal = 1,
target = "Lnet/minecraft/entity/EntityLivingBase;posY:D",
value = "FIELD"),
locals = LocalCapture.CAPTURE_FAILEXCEPTION,
method = "renderWorld(FJ)V")
private void angelica$endUpdateChunks(float p_78471_1_, long p_78471_2_, CallbackInfo ci,
EntityLivingBase entitylivingbase, RenderGlobal renderglobal, EffectRenderer effectrenderer, double d0,
double d1, double d2, int j) {
// A better solution would be to inject this directly at the end of the "if (j == 0)" block so checking j == 0
// again here isn't necessary. If you figure out how to do that, please let me (glowredman) know.
if (j == 0) {
Shaders.endUpdateChunks();
}
}
@Inject(
at = @At(
ordinal = 0,
target = "Lnet/minecraft/client/renderer/RenderGlobal;sortAndRender(Lnet/minecraft/entity/EntityLivingBase;ID)I",
value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$beginTerrain(CallbackInfo ci) {
Shaders.beginTerrain();
}
@Inject(
at = @At(
ordinal = 0,
shift = At.Shift.AFTER,
target = "Lnet/minecraft/client/renderer/RenderGlobal;sortAndRender(Lnet/minecraft/entity/EntityLivingBase;ID)I",
value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$endTerrain(CallbackInfo ci) {
Shaders.endTerrain();
}
@Inject(
at = @At(
target = "Lnet/minecraft/client/particle/EffectRenderer;renderLitParticles(Lnet/minecraft/entity/Entity;F)V",
value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$beginLitParticles(CallbackInfo ci) {
Shaders.beginLitParticles();
}
@Inject(
at = @At(
target = "Lnet/minecraft/client/particle/EffectRenderer;renderParticles(Lnet/minecraft/entity/Entity;F)V",
value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$beginParticles(CallbackInfo ci) {
Shaders.beginParticles();
}
@Inject(
at = @At(
shift = At.Shift.AFTER,
target = "Lnet/minecraft/client/particle/EffectRenderer;renderParticles(Lnet/minecraft/entity/Entity;F)V",
value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$endParticles(CallbackInfo ci) {
Shaders.endParticles();
}
@Inject(
at = @At(target = "Lnet/minecraft/client/renderer/EntityRenderer;renderRainSnow(F)V", value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$beginWeather(CallbackInfo ci) {
Shaders.beginWeather();
}
@Inject(
at = @At(
shift = At.Shift.AFTER,
target = "Lnet/minecraft/client/renderer/EntityRenderer;renderRainSnow(F)V",
value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$endWeather(CallbackInfo ci) {
Shaders.endWeather();
}
@Inject(
at = @At(
ordinal = 1,
remap = false,
shift = At.Shift.AFTER,
target = "Lorg/lwjgl/opengl/GL11;glDepthMask(Z)V",
value = "INVOKE"),
locals = LocalCapture.CAPTURE_FAILEXCEPTION,
method = "renderWorld(FJ)V")
private void angelica$renderHand0AndPreWater(float p_78471_1_, long p_78471_2_, CallbackInfo ci,
EntityLivingBase entitylivingbase, RenderGlobal renderglobal, EffectRenderer effectrenderer, double d0,
double d1, double d2, int j) {
ShadersRender.renderHand0((EntityRenderer) (Object) this, p_78471_1_, j);
Shaders.preWater();
}
@Inject(
at = @At(
target = "Lnet/minecraft/client/renderer/RenderGlobal;sortAndRender(Lnet/minecraft/entity/EntityLivingBase;ID)I",
value = "INVOKE"),
method = "renderWorld(FJ)V",
slice = @Slice(from = @At(args = "stringValue=water", ordinal = 0, value = "CONSTANT")))
private void angelica$beginWater(CallbackInfo ci) {
Shaders.beginWater();
}
@Inject(
at = @At(
shift = At.Shift.AFTER,
target = "Lnet/minecraft/client/renderer/RenderGlobal;sortAndRender(Lnet/minecraft/entity/EntityLivingBase;ID)I",
value = "INVOKE"),
method = "renderWorld(FJ)V",
slice = @Slice(from = @At(args = "stringValue=water", ordinal = 0, value = "CONSTANT")))
private void angelica$endWater(CallbackInfo ci) {
Shaders.endWater();
}
@Inject(
at = @At(
opcode = Opcodes.GETFIELD,
target = "Lnet/minecraft/entity/EntityLivingBase;posY:D",
value = "FIELD"),
method = "renderWorld(FJ)V",
slice = @Slice(
from = @At(args = "stringValue=entities", value = "CONSTANT"),
to = @At(args = "stringValue=aboveClouds", value = "CONSTANT")))
private void angelica$disableFog(CallbackInfo ci) {
Shaders.disableFog();
}
@ModifyExpressionValue(
at = @At(
remap = false,
target = "Lnet/minecraftforge/client/ForgeHooksClient;renderFirstPersonHand(Lnet/minecraft/client/renderer/RenderGlobal;FI)Z",
value = "INVOKE"),
method = "renderWorld(FJ)V")
private boolean angelica$isShadowPass(boolean renderFirstPersonHand) {
return renderFirstPersonHand || Shaders.isShadowPass;
}
@Inject(
at = @At(remap = false, target = "Lorg/lwjgl/opengl/GL11;glClear(I)V", value = "INVOKE"),
locals = LocalCapture.CAPTURE_FAILEXCEPTION,
method = "renderWorld(FJ)V",
slice = @Slice(from = @At(args = "stringValue=hand", value = "CONSTANT")))
private void angelica$renderHand1AndRenderCompositeFinal(float p_78471_1_, long p_78471_2_, CallbackInfo ci,
EntityLivingBase entitylivingbase, RenderGlobal renderglobal, EffectRenderer effectrenderer, double d0,
double d1, double d2, int j) {
ShadersRender.renderHand1((EntityRenderer) (Object) this, p_78471_1_, j);
Shaders.renderCompositeFinal();
}
@Redirect(
at = @At(target = "Lnet/minecraft/client/renderer/EntityRenderer;renderHand(FI)V", value = "INVOKE"),
method = "renderWorld(FJ)V")
private void angelica$renderFPOverlay(EntityRenderer thizz, float p_78476_1_, int p_78476_2_) {
ShadersRender.renderFPOverlay(thizz, p_78476_1_, p_78476_2_);
}
@Inject(
at = @At(
opcode = Opcodes.GETFIELD,
ordinal = 0,
target = "Lnet/minecraft/client/renderer/EntityRenderer;mc:Lnet/minecraft/client/Minecraft;",
value = "FIELD"),
method = "renderWorld(FJ)V",
slice = @Slice(from = @At(args = "stringValue=hand", value = "CONSTANT")))
private void angelica$endRender(CallbackInfo ci) {
Shaders.endRender();
}
// renderCloudsCheck
@Redirect(
at = @At(target = "Lnet/minecraft/client/settings/GameSettings;shouldRenderClouds()Z", value = "INVOKE"),
method = "renderCloudsCheck(Lnet/minecraft/client/renderer/RenderGlobal;F)V")
private boolean angelica$shouldRenderClouds(GameSettings gameSettings) {
return Shaders.shouldRenderClouds(gameSettings);
}
@Inject(
at = @At(target = "Lnet/minecraft/client/renderer/RenderGlobal;renderClouds(F)V", value = "INVOKE"),
method = "renderCloudsCheck(Lnet/minecraft/client/renderer/RenderGlobal;F)V")
private void angelica$beginClouds(CallbackInfo ci) {
Shaders.beginClouds();
}
@Inject(
at = @At(
shift = At.Shift.AFTER,
target = "Lnet/minecraft/client/renderer/RenderGlobal;renderClouds(F)V",
value = "INVOKE"),
method = "renderCloudsCheck(Lnet/minecraft/client/renderer/RenderGlobal;F)V")
private void angelica$endClouds(CallbackInfo ci) {
Shaders.endClouds();
}
// updateFogColor
@Redirect(
at = @At(remap = false, target = "Lorg/lwjgl/opengl/GL11;glClearColor(FFFF)V", value = "INVOKE"),
method = "updateFogColor(F)V")
private void angelica$setClearColor(float red, float green, float blue, float alpha) {
Shaders.setClearColor(red, green, blue, alpha);
}
// setupFog
@Redirect(
at = @At(remap = false, target = "Lorg/lwjgl/opengl/GL11;glFogi(II)V", value = "INVOKE"),
method = "setupFog(IF)V")
private void angelica$sglFogi(int pname, int param) {
Shaders.sglFogi(pname, param);
}
// setFogColorBuffer
@Inject(at = @At("HEAD"), method = "setFogColorBuffer(FFFF)Ljava/nio/FloatBuffer;")
private void angelica$setFogColor(float red, float green, float blue, float alpha,
CallbackInfoReturnable<FloatBuffer> cir) {
Shaders.setFogColor(red, green, blue);
}
}
@@ -0,0 +1,14 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import net.minecraft.client.renderer.texture.ITextureObject;
import org.spongepowered.asm.mixin.Mixin;
import com.gtnewhorizons.angelica.client.MultiTexID;
@Mixin(ITextureObject.class)
public interface MixinITextureObject {
MultiTexID angelica$getMultiTexID();
}
@@ -0,0 +1,45 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import net.minecraft.client.entity.EntityClientPlayerMP;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.item.ItemStack;
import org.spongepowered.asm.lib.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import com.gtnewhorizons.angelica.client.Shaders;
@Mixin(ItemRenderer.class)
public class MixinItemRenderer {
@Inject(
at = @At(
opcode = Opcodes.PUTFIELD,
target = "Lnet/minecraft/client/renderer/ItemRenderer;itemToRender:Lnet/minecraft/item/ItemStack;",
value = "FIELD"),
locals = LocalCapture.CAPTURE_FAILEXCEPTION,
method = "updateEquippedItem()V")
private void angelica$setItemToRender(CallbackInfo ci, EntityClientPlayerMP entityclientplayermp,
ItemStack itemstack) {
Shaders.itemToRender = itemstack;
}
@ModifyArg(
at = @At(
ordinal = 0,
remap = true,
target = "Lnet/minecraft/client/renderer/OpenGlHelper;glBlendFunc(IIII)V",
value = "INVOKE"),
index = 3,
method = "renderItem(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;ILnet/minecraftforge/client/IItemRenderer$ItemRenderType;)V",
remap = false)
private int angelica$adjust_dfactorAlpha(int original) {
return 1;
}
}
@@ -0,0 +1,32 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import java.io.IOException;
import java.util.List;
import net.minecraft.client.renderer.texture.LayeredTexture;
import net.minecraft.client.resources.IResourceManager;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import com.gtnewhorizons.angelica.client.ShadersTex;
@Mixin(LayeredTexture.class)
public class MixinLayeredTexture {
@Final
@Shadow
public List<String> layeredTextureNames;
/**
* @author glowredman
* @reason must take normal and specular maps into account
*/
@Overwrite
public void loadTexture(IResourceManager p_110551_1_) throws IOException {
ShadersTex.loadLayeredTexture((LayeredTexture) (Object) this, p_110551_1_, this.layeredTextureNames);
}
}
@@ -17,7 +17,7 @@ public class MixinModelRenderer implements IModelRenderer {
@Shadow
private int displayList;
public void resetDisplayList() {
public void angelica$resetDisplayList() {
if (!compiled && displayList != 0) {
GLAllocation.deleteDisplayLists(displayList);
displayList = 0;
@@ -10,10 +10,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.gtnewhorizons.angelica.client.Shaders;
@Mixin(Render.class)
public class MixinEntityRender {
public class MixinRender {
@Inject(method = "renderShadow(Lnet/minecraft/entity/Entity;DDDFF)V", at = @At("HEAD"), cancellable = true)
public void angelica$checkSkipShadow(CallbackInfo ci) {
private void angelica$checkShouldSkipDefaultShadow(CallbackInfo ci) {
if (Shaders.shouldSkipDefaultShadow) ci.cancel();
}
}
@@ -19,26 +19,24 @@ public class MixinRenderBlocks {
// Block
@Inject(method = "renderBlockByRenderType(Lnet/minecraft/block/Block;III)Z", at = @At("HEAD"))
private void angelica$injectShadersBlockPushEntity(Block block, int x, int y, int z,
CallbackInfoReturnable<Boolean> cir) {
private void angelica$pushEntityBlock(Block block, int x, int y, int z, CallbackInfoReturnable<Boolean> cir) {
Shaders.pushEntity((RenderBlocks) ((Object) this), block, x, y, z);
}
@Inject(method = "renderBlockByRenderType(Lnet/minecraft/block/Block;III)Z", at = @At("RETURN"))
private void angelica$injectShadersPopEntityBlock(Block block, int x, int y, int z,
CallbackInfoReturnable<Boolean> cir) {
private void angelica$popEntityBlock(Block block, int x, int y, int z, CallbackInfoReturnable<Boolean> cir) {
Shaders.popEntity();
}
// BlockFlowerPot
@Inject(method = "renderBlockFlowerpot(Lnet/minecraft/block/BlockFlowerPot;III)Z", at = @At("HEAD"))
private void angelica$injectShadersFlowerpotPushEntity(BlockFlowerPot blockFlowerPot, int x, int y, int z,
private void angelica$pushEntityBlockFlowerPot(BlockFlowerPot blockFlowerPot, int x, int y, int z,
CallbackInfoReturnable<Boolean> cir) {
Shaders.pushEntity((RenderBlocks) ((Object) this), blockFlowerPot, x, y, z);
}
@Inject(method = "renderBlockFlowerpot(Lnet/minecraft/block/BlockFlowerPot;III)Z", at = @At("RETURN"))
private void angelica$injectShadersFlowerpotPopEntity(BlockFlowerPot blockFlowerPot, int x, int y, int z,
private void angelica$popEntityBlockFlowerPot(BlockFlowerPot blockFlowerPot, int x, int y, int z,
CallbackInfoReturnable<Boolean> cir) {
Shaders.popEntity();
}
@@ -48,7 +46,7 @@ public class MixinRenderBlocks {
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/block/Block;getBlockFromItem(Lnet/minecraft/item/Item;)Lnet/minecraft/block/Block;"))
private Block angelica$injectShadersFlowerpotItemBlockPushEntity(Item itemIn, Operation<Block> original) {
private Block angelica$pushEntityFlowerInFlowerPot(Item itemIn, Operation<Block> original) {
final Block block = original.call(itemIn);
Shaders.pushEntity(block);
return block;
@@ -61,7 +59,7 @@ public class MixinRenderBlocks {
target = "Lnet/minecraft/client/renderer/Tessellator;addTranslation(FFF)V",
shift = At.Shift.AFTER,
ordinal = 1))
private void angelica$injectShadersFlowerpotItemBlockPopEntity(BlockFlowerPot blockFlowerPot, int x, int y, int z,
private void angelica$popEntityFlowerInFlowerPot(BlockFlowerPot blockFlowerPot, int x, int y, int z,
CallbackInfoReturnable<Boolean> cir) {
Shaders.popEntity();
}
@@ -0,0 +1,26 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import net.minecraft.client.renderer.entity.RenderDragon;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.gtnewhorizons.angelica.client.Shaders;
@Mixin(RenderDragon.class)
public class MixinRenderDragon {
@Inject(
at = @At(
remap = false,
shift = At.Shift.AFTER,
target = "Lorg/lwjgl/opengl/GL11;glColor4f(FFFF)V",
value = "INVOKE"),
method = "shouldRenderPass(Lnet/minecraft/entity/boss/EntityDragon;IF)I")
private void angelica$beginSpiderEyes(CallbackInfoReturnable<Integer> cir) {
Shaders.beginSpiderEyes();
}
}
@@ -0,0 +1,26 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import net.minecraft.client.renderer.entity.RenderEnderman;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.gtnewhorizons.angelica.client.Shaders;
@Mixin(RenderEnderman.class)
public class MixinRenderEnderman {
@Inject(
at = @At(
remap = false,
shift = At.Shift.AFTER,
target = "Lorg/lwjgl/opengl/GL11;glColor4f(FFFF)V",
value = "INVOKE"),
method = "shouldRenderPass(Lnet/minecraft/entity/monster/EntityEnderman;IF)I")
private void angelica$beginSpiderEyes(CallbackInfoReturnable<Integer> cir) {
Shaders.beginSpiderEyes();
}
}
@@ -49,13 +49,14 @@ public class MixinRenderGlobal {
target = "Lnet/minecraft/profiler/Profiler;endStartSection(Ljava/lang/String;)V",
args = "ldc=blockentities",
shift = At.Shift.AFTER))
private void angelica$blockEntities(EntityLivingBase entity, ICamera camera, float p_147589_3_, CallbackInfo ci) {
private void angelica$endEntitiesAndBeginBlockEntities(EntityLivingBase entity, ICamera camera, float p_147589_3_,
CallbackInfo ci) {
Shaders.endEntities();
Shaders.beginBlockEntities();
}
@Inject(
method = "Lnet/minecraft/client/renderer/RenderGlobal;renderEntities(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/client/renderer/culling/ICamera;F)V",
method = "renderEntities(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/client/renderer/culling/ICamera;F)V",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/renderer/EntityRenderer;disableLightmap(D)V",
@@ -173,7 +174,7 @@ public class MixinRenderGlobal {
ordinal = 0,
shift = At.Shift.BEFORE,
by = 2))
private void angelica$renderSkyPreSkyList(float p_72714_1_, CallbackInfo ci) {
private void angelica$preSkyList(float p_72714_1_, CallbackInfo ci) {
Shaders.preSkyList();
}
@@ -185,7 +186,7 @@ public class MixinRenderGlobal {
ordinal = 1,
shift = At.Shift.BY,
by = -2))
private void angelica$renderSkyBeforeCelestialAngle(float p_72714_1_, CallbackInfo ci) {
private void angelica$preCelestialRotate(float p_72714_1_, CallbackInfo ci) {
Shaders.preCelestialRotate();
}
@@ -197,14 +198,14 @@ public class MixinRenderGlobal {
remap = false,
ordinal = 9,
shift = At.Shift.AFTER))
private void angelica$renderSkyAfterCelestialAngle(float p_72714_1_, CallbackInfo ci) {
private void angelica$postCelestialRotate(float p_72714_1_, CallbackInfo ci) {
Shaders.postCelestialRotate();
}
// drawBlockDamageTexture
@WrapOperation(
method = "Lnet/minecraft/client/renderer/RenderGlobal;drawBlockDamageTexture(Lnet/minecraft/client/renderer/Tessellator;Lnet/minecraft/entity/EntityLivingBase;F)V",
method = "drawBlockDamageTexture(Lnet/minecraft/client/renderer/Tessellator;Lnet/minecraft/entity/EntityLivingBase;F)V",
remap = false,
at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glDisable(I)V", remap = false))
private void angelica$drawBlockDamageTextureDisable(int cap, Operation<Void> original) {
@@ -214,7 +215,7 @@ public class MixinRenderGlobal {
}
@WrapOperation(
method = "Lnet/minecraft/client/renderer/RenderGlobal;drawBlockDamageTexture(Lnet/minecraft/client/renderer/Tessellator;Lnet/minecraft/entity/EntityLivingBase;F)V",
method = "drawBlockDamageTexture(Lnet/minecraft/client/renderer/Tessellator;Lnet/minecraft/entity/EntityLivingBase;F)V",
remap = false,
at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glEnable(I)V", remap = false))
private void angelica$drawBlockDamageTextureSkyEnable(int cap, Operation<Void> original) {
@@ -223,7 +224,7 @@ public class MixinRenderGlobal {
}
@Inject(
method = "Lnet/minecraft/client/renderer/RenderGlobal;drawBlockDamageTexture(Lnet/minecraft/client/renderer/Tessellator;Lnet/minecraft/entity/EntityLivingBase;F)V",
method = "drawBlockDamageTexture(Lnet/minecraft/client/renderer/Tessellator;Lnet/minecraft/entity/EntityLivingBase;F)V",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/renderer/Tessellator;startDrawingQuads()V",
@@ -235,7 +236,7 @@ public class MixinRenderGlobal {
}
@Inject(
method = "Lnet/minecraft/client/renderer/RenderGlobal;drawBlockDamageTexture(Lnet/minecraft/client/renderer/Tessellator;Lnet/minecraft/entity/EntityLivingBase;F)V",
method = "drawBlockDamageTexture(Lnet/minecraft/client/renderer/Tessellator;Lnet/minecraft/entity/EntityLivingBase;F)V",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/renderer/Tessellator;setTranslation(DDD)V",
@@ -0,0 +1,26 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import net.minecraft.client.renderer.entity.RenderSpider;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.gtnewhorizons.angelica.client.Shaders;
@Mixin(RenderSpider.class)
public class MixinRenderSpider {
@Inject(
at = @At(
remap = false,
shift = At.Shift.AFTER,
target = "Lorg/lwjgl/opengl/GL11;glColor4f(FFFF)V",
value = "INVOKE"),
method = "shouldRenderPass(Lnet/minecraft/entity/monster/EntitySpider;IF)I")
private void angelica$beginSpiderEyes(CallbackInfoReturnable<Integer> cir) {
Shaders.beginSpiderEyes();
}
}
@@ -0,0 +1,85 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import net.minecraft.client.renderer.entity.RendererLivingEntity;
import net.minecraft.entity.EntityLivingBase;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.gtnewhorizons.angelica.client.Shaders;
@Mixin(RendererLivingEntity.class)
public abstract class MixinRendererLivingEntity {
@Shadow
protected abstract int getColorMultiplier(EntityLivingBase p_77030_1_, float p_77030_2_, float p_77030_3_);
@Inject(at = @At("HEAD"), method = "doRender(Lnet/minecraft/entity/EntityLivingBase;DDDFF)V")
private void angelica$setEntityHurtFlash(EntityLivingBase p_76986_1_, double p_76986_2_, double p_76986_4_,
double p_76986_6_, float p_76986_8_, float p_76986_9_, CallbackInfo ci) {
if (!Shaders.useEntityHurtFlash) {
Shaders.setEntityHurtFlash(
p_76986_1_.hurtTime <= 0 && p_76986_1_.deathTime <= 0 ? 0 : 102,
this.getColorMultiplier(p_76986_1_, p_76986_1_.getBrightness(p_76986_9_), p_76986_9_));
}
}
@Inject(
at = @At(
target = "Lnet/minecraft/client/renderer/entity/RendererLivingEntity;renderEquippedItems(Lnet/minecraft/entity/EntityLivingBase;F)V",
value = "INVOKE"),
method = "doRender(Lnet/minecraft/entity/EntityLivingBase;DDDFF)V")
private void angelica$resetEntityHurtFlash(CallbackInfo ci) {
Shaders.resetEntityHurtFlash();
}
@Inject(
at = @At(
ordinal = 1,
shift = At.Shift.AFTER,
target = "Lnet/minecraft/client/renderer/OpenGlHelper;setActiveTexture(I)V",
value = "INVOKE"),
method = "doRender(Lnet/minecraft/entity/EntityLivingBase;DDDFF)V")
private void angelica$disableLightmap(CallbackInfo ci) {
Shaders.disableLightmap();
}
@Inject(
at = @At(
ordinal = 2,
remap = false,
shift = At.Shift.AFTER,
target = "Lorg/lwjgl/opengl/GL11;glDepthFunc(I)V",
value = "INVOKE"),
method = "doRender(Lnet/minecraft/entity/EntityLivingBase;DDDFF)V")
private void angelica$beginLivingDamage(CallbackInfo ci) {
Shaders.beginLivingDamage();
}
@Inject(
at = @At(
ordinal = 3,
remap = false,
shift = At.Shift.AFTER,
target = "Lorg/lwjgl/opengl/GL11;glDepthFunc(I)V",
value = "INVOKE"),
method = "doRender(Lnet/minecraft/entity/EntityLivingBase;DDDFF)V")
private void angelica$endLivingDamage(CallbackInfo ci) {
Shaders.endLivingDamage();
}
@Inject(
at = @At(
ordinal = 3,
shift = At.Shift.AFTER,
target = "Lnet/minecraft/client/renderer/OpenGlHelper;setActiveTexture(I)V",
value = "INVOKE"),
method = "doRender(Lnet/minecraft/entity/EntityLivingBase;DDDFF)V")
private void angelica$enableLightmap(CallbackInfo ci) {
Shaders.enableLightmap();
}
}
@@ -17,14 +17,16 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.gtnewhorizons.angelica.client.ShadersTex;
@Mixin(value = SimpleTexture.class)
public class MixinSimpleTexture extends AbstractTexture {
public abstract class MixinSimpleTexture extends AbstractTexture {
private IResourceManager passedResourceManager;
@Shadow
protected ResourceLocation textureLocation;
// TODO: Use @Local as soon as it exists in a stable version of MixinExtras
@Inject(method = "loadTexture(Lnet/minecraft/client/resources/IResourceManager;)V", at = @At("HEAD"))
private void getResourceManager(IResourceManager p_110551_1_, CallbackInfo cbi) {
private void angelica$getResourceManager(IResourceManager p_110551_1_, CallbackInfo cbi) {
passedResourceManager = p_110551_1_;
}
@@ -32,9 +34,8 @@ public class MixinSimpleTexture extends AbstractTexture {
method = "loadTexture(Lnet/minecraft/client/resources/IResourceManager;)V",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/renderer/texture/TextureUtil;uploadTextureImageAllocate(ILjava/awt/image/BufferedImage;ZZ)I",
remap = false))
private int angelica$loadTexture(int textureID, BufferedImage bufferedImage, boolean flag, boolean flag1) {
target = "Lnet/minecraft/client/renderer/texture/TextureUtil;uploadTextureImageAllocate(ILjava/awt/image/BufferedImage;ZZ)I"))
private int angelica$loadSimpleTexture(int textureID, BufferedImage bufferedImage, boolean flag, boolean flag1) {
ShadersTex.loadSimpleTexture(
textureID,
bufferedImage,
@@ -119,6 +119,7 @@ public abstract class MixinTessellator implements TessellatorAccessor {
@Overwrite
public TesselatorVertexState getVertexState(float x, float y, float z) {
int[] tmpCopyBuffer = new int[this.rawBufferIndex];
@SuppressWarnings("unchecked")
PriorityQueue<Integer> pQueue = new PriorityQueue<>(
this.rawBufferIndex,
new QuadComparator(
@@ -159,102 +160,102 @@ public abstract class MixinTessellator implements TessellatorAccessor {
}
@Override
public ByteBuffer getAngelica$byteBuffer() {
public ByteBuffer angelica$getByteBuffer() {
return angelica$byteBuffer;
}
@Override
public IntBuffer getAngelica$intBuffer() {
public IntBuffer angelica$getIntBuffer() {
return angelica$intBuffer;
}
@Override
public FloatBuffer getAngelica$floatBuffer() {
public FloatBuffer angelica$getFloatBuffer() {
return angelica$floatBuffer;
}
@Override
public ShortBuffer getAngelica$shortBuffer() {
public ShortBuffer angelica$getShortBuffer() {
return angelica$shortBuffer;
}
@Override
public float[] getAngelica$vertexPos() {
public float[] angelica$getVertexPos() {
return angelica$vertexPos;
}
@Override
public float getAngelica$normalX() {
public float angelica$getNormalX() {
return angelica$normalX;
}
@Override
public float getAngelica$normalY() {
public float angelica$getNormalY() {
return angelica$normalY;
}
@Override
public float getAngelica$normalZ() {
public float angelica$getNormalZ() {
return angelica$normalZ;
}
@Override
public float getAngelica$midTextureU() {
public float angelica$getMidTextureU() {
return angelica$midTextureU;
}
@Override
public float getAngelica$midTextureV() {
public float angelica$getMidTextureV() {
return angelica$midTextureV;
}
@Override
public void setAngelica$byteBuffer(ByteBuffer angelica$byteBuffer) {
public void angelica$setByteBuffer(ByteBuffer angelica$byteBuffer) {
this.angelica$byteBuffer = angelica$byteBuffer;
}
@Override
public void setAngelica$intBuffer(IntBuffer angelica$intBuffer) {
public void angelica$setIntBuffer(IntBuffer angelica$intBuffer) {
this.angelica$intBuffer = angelica$intBuffer;
}
@Override
public void setAngelica$floatBuffer(FloatBuffer angelica$floatBuffer) {
public void angelica$setFloatBuffer(FloatBuffer angelica$floatBuffer) {
this.angelica$floatBuffer = angelica$floatBuffer;
}
@Override
public void setAngelica$shortBuffer(ShortBuffer angelica$shortBuffer) {
public void angelica$setShortBuffer(ShortBuffer angelica$shortBuffer) {
this.angelica$shortBuffer = angelica$shortBuffer;
}
@Override
public void setAngelica$vertexPos(float[] angelica$vertexPos) {
public void angelica$setVertexPos(float[] angelica$vertexPos) {
this.angelica$vertexPos = angelica$vertexPos;
}
@Override
public void setAngelica$normalX(float angelica$normalX) {
public void angelica$setNormalX(float angelica$normalX) {
this.angelica$normalX = angelica$normalX;
}
@Override
public void setAngelica$normalY(float angelica$normalY) {
public void angelica$setNormalY(float angelica$normalY) {
this.angelica$normalY = angelica$normalY;
}
@Override
public void setAngelica$normalZ(float angelica$normalZ) {
public void angelica$setNormalZ(float angelica$normalZ) {
this.angelica$normalZ = angelica$normalZ;
}
@Override
public void setAngelica$midTextureU(float angelica$midTextureU) {
public void angelica$setMidTextureU(float angelica$midTextureU) {
this.angelica$midTextureU = angelica$midTextureU;
}
@Override
public void setAngelica$midTextureV(float angelica$midTextureV) {
public void angelica$setMidTextureV(float angelica$midTextureV) {
this.angelica$midTextureV = angelica$midTextureV;
}
}
@@ -0,0 +1,31 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import com.gtnewhorizons.angelica.client.ShadersTex;
@Mixin(TextureAtlasSprite.class)
public class MixinTextureAtlasSprite {
@Redirect(
at = @At(
target = "Lnet/minecraft/client/renderer/texture/TextureUtil;uploadTextureMipmap([[IIIIIZZ)V",
value = "INVOKE"),
method = "updateAnimation()V")
private void angelica$uploadTexSub(int[][] p_147955_0_, int p_147955_1_, int p_147955_2_, int p_147955_3_,
int p_147955_4_, boolean p_147955_5_, boolean p_147955_6_) {
ShadersTex.uploadTexSub(
p_147955_0_,
p_147955_1_,
p_147955_2_,
p_147955_3_,
p_147955_4_,
p_147955_5_,
p_147955_6_);
}
}
@@ -15,9 +15,8 @@ public class MixinTextureClock {
method = "updateAnimation()V",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/renderer/texture/TextureUtil;uploadTextureMipmap([[IIIIIZZ)V",
remap = false))
private void angelica$updateAnimation(int[][] data, int width, int height, int xoffset, int yoffset, boolean linear,
target = "Lnet/minecraft/client/renderer/texture/TextureUtil;uploadTextureMipmap([[IIIIIZZ)V"))
private void angelica$uploadTexSub(int[][] data, int width, int height, int xoffset, int yoffset, boolean linear,
boolean clamp) {
ShadersTex.uploadTexSub(data, width, height, xoffset, yoffset, linear, clamp);
}
@@ -15,9 +15,8 @@ public class MixinTextureCompass {
method = "updateCompass(Lnet/minecraft/world/World;DDDZZ)V",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/renderer/texture/TextureUtil;uploadTextureMipmap([[IIIIIZZ)V",
remap = false))
private void angelica$updateCompass(int[][] data, int width, int height, int xoffset, int yoffset, boolean linear,
target = "Lnet/minecraft/client/renderer/texture/TextureUtil;uploadTextureMipmap([[IIIIIZZ)V"))
private void angelica$uploadTexSub(int[][] data, int width, int height, int xoffset, int yoffset, boolean linear,
boolean clamp) {
ShadersTex.uploadTexSub(data, width, height, xoffset, yoffset, linear, clamp);
}
@@ -0,0 +1,41 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import net.minecraft.client.renderer.texture.ITextureObject;
import net.minecraft.client.renderer.texture.TextureManager;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import com.gtnewhorizons.angelica.client.ShadersTex;
@Mixin(TextureManager.class)
public class MixinTextureManager {
@Redirect(
at = @At(
target = "Lnet/minecraft/client/renderer/texture/ITextureObject;getGlTextureId()I",
value = "INVOKE"),
method = "bindTexture(Lnet/minecraft/util/ResourceLocation;)V")
private int angelica$bindTexture(ITextureObject object) {
ShadersTex.bindTexture(object);
return 0;
}
@Redirect(
at = @At(target = "Lnet/minecraft/client/renderer/texture/TextureUtil;bindTexture(I)V", value = "INVOKE"),
method = "bindTexture(Lnet/minecraft/util/ResourceLocation;)V")
private void angelica$noop(int p_94277_0_) {
// NO-OP
}
@Redirect(
at = @At(
target = "Lnet/minecraft/client/renderer/texture/ITextureObject;getGlTextureId()I",
value = "INVOKE"),
method = "deleteTexture(Lnet/minecraft/util/ResourceLocation;)V")
private int angelica$deleteMultiTex(ITextureObject itextureobject) {
return ShadersTex.deleteMultiTex(itextureobject);
}
}
@@ -0,0 +1,114 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import java.io.IOException;
import net.minecraft.client.renderer.texture.Stitcher;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.resources.IResource;
import net.minecraft.client.resources.IResourceManager;
import net.minecraft.util.ResourceLocation;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.Slice;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import com.gtnewhorizons.angelica.client.ShadersTex;
@Mixin(TextureMap.class)
public class MixinTextureMap extends MixinAbstractTexture {
public int angelica$atlasWidth;
public int angelica$atlasHeight;
@Unique
private Stitcher stitcher;
// loadTextureAtlas
@Redirect(
at = @At(
target = "Lnet/minecraft/client/resources/IResourceManager;getResource(Lnet/minecraft/util/ResourceLocation;)Lnet/minecraft/client/resources/IResource;",
value = "INVOKE"),
method = "loadTextureAtlas(Lnet/minecraft/client/resources/IResourceManager;)V")
private IResource angelica$loadResource(IResourceManager p_110571_1_, ResourceLocation resourcelocation1)
throws IOException {
return ShadersTex.loadResource(p_110571_1_, resourcelocation1);
}
// TODO: Use @Local as soon as it is in a stable version of MixinExtras
@Inject(
at = @At(ordinal = 0, remap = false, target = "Ljava/util/Map;clear()V", value = "INVOKE"),
locals = LocalCapture.CAPTURE_FAILEXCEPTION,
method = "loadTextureAtlas(Lnet/minecraft/client/resources/IResourceManager;)V")
private void angelica$captureStitcher(IResourceManager p_110571_1_, CallbackInfo ci, int i, Stitcher stitcher) {
this.stitcher = stitcher;
}
@Redirect(
at = @At(
target = "Lnet/minecraft/client/renderer/texture/TextureUtil;allocateTextureImpl(IIIIF)V",
value = "INVOKE"),
method = "loadTextureAtlas(Lnet/minecraft/client/resources/IResourceManager;)V")
private void angelica$allocateTextureMap(int p_147946_0_, int p_147946_1_, int p_147946_2_, int p_147946_3_,
float p_147946_4_) {
ShadersTex.allocateTextureMap(
p_147946_0_,
p_147946_1_,
p_147946_2_,
p_147946_3_,
p_147946_4_,
this.stitcher,
(TextureMap) (Object) this);
}
@Redirect(
at = @At(
target = "Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;getIconName()Ljava/lang/String;",
value = "INVOKE"),
method = "loadTextureAtlas(Lnet/minecraft/client/resources/IResourceManager;)V",
slice = @Slice(
from = @At(
args = "ldc=Uploading GL texture",
remap = false,
target = "Lcpw/mods/fml/common/ProgressManager$ProgressBar;step(Ljava/lang/String;)V",
value = "INVOKE_STRING")))
private String angelica$getIconName(TextureAtlasSprite textureatlassprite) {
return ShadersTex.setIconName(ShadersTex.setSprite(textureatlassprite).getIconName());
}
@Redirect(
at = @At(
target = "Lnet/minecraft/client/renderer/texture/TextureUtil;uploadTextureMipmap([[IIIIIZZ)V",
value = "INVOKE"),
method = "loadTextureAtlas(Lnet/minecraft/client/resources/IResourceManager;)V")
private void angelica$uploadTexSubForLoadAtlas(int[][] p_147955_0_, int p_147955_1_, int p_147955_2_,
int p_147955_3_, int p_147955_4_, boolean p_147955_5_, boolean p_147955_6_) {
ShadersTex.uploadTexSubForLoadAtlas(
p_147955_0_,
p_147955_1_,
p_147955_2_,
p_147955_3_,
p_147955_4_,
p_147955_5_,
p_147955_6_);
}
// updateAnimations
@Inject(at = @At("HEAD"), method = "updateAnimations()V")
private void angelica$setUpdatingTex(CallbackInfo ci) {
ShadersTex.updatingTex = this.angelica$getMultiTexID();
}
@Inject(at = @At("RETURN"), method = "updateAnimations()V")
private void angelica$resetUpdatingTex(CallbackInfo ci) {
ShadersTex.updatingTex = null;
}
}
@@ -0,0 +1,28 @@
package com.gtnewhorizons.angelica.mixins.early.renderer;
import net.minecraft.client.renderer.ThreadDownloadImageData;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.SoftOverride;
import com.gtnewhorizons.angelica.client.MultiTexID;
@Mixin(ThreadDownloadImageData.class)
public abstract class MixinThreadDownloadImageData extends MixinAbstractTexture {
@Shadow
private boolean textureUploaded;
@Shadow
public abstract int getGlTextureId();
@SoftOverride
public MultiTexID angelica$getMultiTexID() {
if (!this.textureUploaded) {
this.getGlTextureId();
}
return super.angelica$getMultiTexID();
}
}
@@ -14,14 +14,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.gtnewhorizons.angelica.client.GuiShaders;
@Mixin(GuiVideoSettings.class)
abstract public class MixinGuiVideoSettings extends GuiScreen {
public abstract class MixinGuiVideoSettings extends GuiScreen {
private static final int SHADER_BUTTON_ID = 190;
@Shadow
private GameSettings guiGameSettings;
@SuppressWarnings("unchecked")
@Inject(method = "initGui()V", at = @At(value = "TAIL"))
private void angelica$addShadersButton(CallbackInfo ci) {
// Add the Shaders Button to the bottom of Video Options
@@ -2,5 +2,5 @@ package com.gtnewhorizons.angelica.mixins.interfaces;
public interface IModelRenderer {
void resetDisplayList();
void angelica$resetDisplayList();
}
@@ -7,43 +7,43 @@ import java.nio.ShortBuffer;
public interface TessellatorAccessor {
ByteBuffer getAngelica$byteBuffer();
ByteBuffer angelica$getByteBuffer();
IntBuffer getAngelica$intBuffer();
IntBuffer angelica$getIntBuffer();
FloatBuffer getAngelica$floatBuffer();
FloatBuffer angelica$getFloatBuffer();
ShortBuffer getAngelica$shortBuffer();
ShortBuffer angelica$getShortBuffer();
float[] getAngelica$vertexPos();
float[] angelica$getVertexPos();
float getAngelica$normalX();
float angelica$getNormalX();
float getAngelica$normalY();
float angelica$getNormalY();
float getAngelica$normalZ();
float angelica$getNormalZ();
float getAngelica$midTextureU();
float angelica$getMidTextureU();
float getAngelica$midTextureV();
float angelica$getMidTextureV();
void setAngelica$byteBuffer(ByteBuffer angelica$byteBuffer);
void angelica$setByteBuffer(ByteBuffer angelica$byteBuffer);
void setAngelica$intBuffer(IntBuffer angelica$intBuffer);
void angelica$setIntBuffer(IntBuffer angelica$intBuffer);
void setAngelica$floatBuffer(FloatBuffer angelica$floatBuffer);
void angelica$setFloatBuffer(FloatBuffer angelica$floatBuffer);
void setAngelica$shortBuffer(ShortBuffer angelica$shortBuffer);
void angelica$setShortBuffer(ShortBuffer angelica$shortBuffer);
void setAngelica$vertexPos(float[] angelica$vertexPos);
void angelica$setVertexPos(float[] angelica$vertexPos);
void setAngelica$normalX(float angelica$normalX);
void angelica$setNormalX(float angelica$normalX);
void setAngelica$normalY(float angelica$normalY);
void angelica$setNormalY(float angelica$normalY);
void setAngelica$normalZ(float angelica$normalZ);
void angelica$setNormalZ(float angelica$normalZ);
void setAngelica$midTextureU(float angelica$midTextureU);
void angelica$setMidTextureU(float angelica$midTextureU);
void setAngelica$midTextureV(float angelica$midTextureV);
void angelica$setMidTextureV(float angelica$midTextureV);
}
@@ -0,0 +1,20 @@
package com.gtnewhorizons.angelica.mixins.late.compat;
import net.minecraft.client.model.ModelRenderer;
import net.smart.render.ModelRotationRenderer;
import org.spongepowered.asm.mixin.Mixin;
import com.gtnewhorizons.angelica.mixins.early.renderer.MixinModelRenderer;
@Mixin(ModelRotationRenderer.class)
public class MixinModelRotationRenderer extends MixinModelRenderer {
@Override
public void angelica$resetDisplayList() {
super.angelica$resetDisplayList();
((ModelRenderer) (Object) this).compiled = false;
((ModelRenderer) (Object) this).displayList = 0;
}
}
@@ -0,0 +1,28 @@
package com.gtnewhorizons.angelica.mixins.late.compat;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.gtnewhorizons.angelica.client.Shaders;
import mrtjp.projectred.core.RenderHalo;
@Mixin(value = RenderHalo.class)
public class MixinRenderHalo {
@Inject(
at = @At(remap = false, target = "Lcodechicken/lib/render/CCRenderState;reset()V", value = "INVOKE"),
method = "prepareRenderState()V",
remap = false)
private void angelica$beginProjectRedHalo(CallbackInfo ci) {
Shaders.beginProjectRedHalo();
}
@Inject(at = @At("TAIL"), method = "restoreRenderState()V", remap = false)
private void angelica$endProjectRedHalo(CallbackInfo ci) {
Shaders.endProjectRedHalo();
}
}
@@ -1,7 +1,6 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
@@ -11,13 +10,15 @@ import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
/** transformer for net.minecraft.client.renderer.EntityRenderer */
import com.gtnewhorizons.angelica.loading.AngelicaTweaker;
/** Transformer for {@link EntityRenderer} */
public class ACTEntityRenderer implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
public byte[] transform(String name, String transformedName, byte[] basicClass) {
AngelicaTweaker.LOGGER.debug("transforming %s %s", name, transformedName);
ClassReader cr = new ClassReader(basicClass);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
@@ -26,7 +27,7 @@ public class ACTEntityRenderer implements IClassTransformer {
private static class CVTransform extends ClassVisitor {
String classname;
private String classname;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
@@ -36,687 +37,47 @@ public class ACTEntityRenderer implements IClassTransformer {
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
if (Names.entityRenderer_disableLightmap.equalsNameDesc(name, desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
return new MVdisableLightmap(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (Names.entityRenderer_enableLightmap.equalsNameDesc(name, desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
return new MVenableLightmap(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (Names.entityRenderer_updateFogColor.equalsNameDesc(name, desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
return new MVupdateFogColor(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (Names.entityRenderer_setFogColorBuffer.equalsNameDesc(name, desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
return new MVsetFogColorBuffer(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (Names.entityRenderer_setupFog.equalsNameDesc(name, desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
return new MVsetupFog(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (Names.entityRenderer_renderCloudsCheck.equalsNameDesc(name, desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
return new MVrenderCloudsCheck(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (Names.entityRenderer_renderHand.equalsNameDesc(name, desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
access = access & (~ACC_PRIVATE & ~ACC_PROTECTED) | ACC_PUBLIC;
if (Names.entityRenderer_renderHand.equalsNameDesc(name, desc)) {
AngelicaTweaker.LOGGER.trace(" patching method %s.%s%s", classname, name, desc);
return new MVrenderHand(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (Names.entityRenderer_renderWorld.equalsNameDesc(name, desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
return new MVrenderWorld(cv.visitMethod(access, name, desc, signature, exceptions));
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
}
private static class MVdisableLightmap extends MethodVisitor {
public MVdisableLightmap(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitInsn(int opcode) {
if (opcode == RETURN) {
mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders", "disableLightmap", "()V");
}
mv.visitInsn(opcode);
}
}
private static class MVenableLightmap extends MethodVisitor {
public MVenableLightmap(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitInsn(int opcode) {
if (opcode == RETURN) {
mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders", "enableLightmap", "()V");
}
mv.visitInsn(opcode);
}
}
private static class MVupdateFogColor extends MethodVisitor {
public MVupdateFogColor(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
if (Names.equals("org/lwjgl/opengl/GL11", "glClearColor", "(FFFF)V", owner, name, desc)) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"setClearColor",
"(FFFF)V");
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
private static class MVsetFogColorBuffer extends MethodVisitor {
public MVsetFogColorBuffer(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitCode() {
mv.visitCode();
mv.visitVarInsn(FLOAD, 1);
mv.visitVarInsn(FLOAD, 2);
mv.visitVarInsn(FLOAD, 3);
mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders", "setFogColor", "(FFF)V");
}
}
private static class MVsetupFog extends MethodVisitor {
public MVsetupFog(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
if (Names.equals("org/lwjgl/opengl/GL11", "glFogi", "(II)V", owner, name, desc)) {
mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders", "sglFogi", "(II)V");
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
private static class MVrenderCloudsCheck extends MethodVisitor {
public MVrenderCloudsCheck(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
if (Names.gameSettings_shouldRenderClouds.equals(owner, name, desc)) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"shouldRenderClouds",
"(" + Names.gameSettings_.desc + ")Z");
return;
} else if (Names.renderGlobal_renderClouds.equals(owner, name, desc)) {
mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders", "beginClouds", "()V");
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders", "endClouds", "()V");
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
private static class MVrenderHand extends MethodVisitor {
Label la1, la2;
private Label label;
public MVrenderHand(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
la1 = new Label();
la2 = new Label();
label = new Label();
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
// Wraps the code from GL11.glPushMatrix() to GL11.glPopMatrix() in an if(!Shaders.isHandRendered) check
if (Names.equals("org/lwjgl/opengl/GL11", "glPushMatrix", "()V", owner, name, desc)) {
mv.visitFieldInsn(GETSTATIC, "com/gtnewhorizons/angelica/client/Shaders", "isHandRendered", "Z");
mv.visitJumpInsn(IFNE, la1);
mv.visitFieldInsn(
Opcodes.GETSTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"isHandRendered",
"Z");
mv.visitJumpInsn(Opcodes.IFNE, label);
mv.visitMethodInsn(opcode, owner, name, desc);
return;
} else if (Names.equals("org/lwjgl/opengl/GL11", "glPopMatrix", "()V", owner, name, desc)) {
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitLabel(la1);
mv.visitLabel(label);
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
private static class MVrenderWorld extends MethodVisitor {
public MVrenderWorld(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
private static final int stateEnd = 32;
int state = 0;
String section = "";
Label labelAfterUpdate = null;
Label labelEndUpdate = null;
Label labelNoSky = null;
@Override
public void visitCode() {
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(
GETFIELD,
Names.entityRenderer_mc.clas,
Names.entityRenderer_mc.name,
Names.entityRenderer_mc.desc);
mv.visitVarInsn(FLOAD, 1);
mv.visitVarInsn(LLOAD, 2);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginRender",
"(" + Names.minecraft_.desc + "FJ)V");
}
@Override
public void visitLdcInsn(Object cst) {
if (cst instanceof String) {
String scst = (String) cst;
// ALog.finest(" %d Ldc %s", state, scst);
section = scst;
}
mv.visitLdcInsn(cst);
}
@Override
public void visitIntInsn(int opcode, int operand) {
// ALog.finest(" %d Int %d %d", state ,opcode, operand);
// switch (state) {
// case 23:
// case 25:
// if (opcode == SIPUSH && operand == 256) {
// state = 26;
// mv.visitInsn(ICONST_0);
// return;
// }
// break;
// }
mv.visitIntInsn(opcode, operand);
}
@Override
public void visitJumpInsn(int opcode, Label label) {
// ALog.finest(" %d, Jump %d", state, opcode);
switch (state) {
case 4:
if (opcode == IF_ICMPLT) {
++state;
mv.visitInsn(POP2);
mv.visitFieldInsn(GETSTATIC, "com/gtnewhorizons/angelica/client/Shaders", "isShadowPass", "Z");
mv.visitJumpInsn(IFNE, label);
return;
}
break;
case 10:
if (opcode == IFNE) {
++state;
labelAfterUpdate = label;
labelEndUpdate = new Label();
mv.visitJumpInsn(opcode, label);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginUpdateChunks",
"()V");
return;
}
break;
case 11:
if (label == labelAfterUpdate) {
mv.visitJumpInsn(opcode, labelEndUpdate);
return;
}
break;
case 28:
if (opcode == IFNE) {
++state;
mv.visitJumpInsn(opcode, label);
mv.visitFieldInsn(GETSTATIC, "com/gtnewhorizons/angelica/client/Shaders", "isShadowPass", "Z");
mv.visitJumpInsn(IFNE, label);
// mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders",
// "readCenterDepth",
// "()V");
// mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders",
// "beginHand", "()V");
// mv.visitVarInsn(ALOAD, 0);
// mv.visitVarInsn(FLOAD, 1);
// mv.visitVarInsn(ILOAD, 13);
// mv.visitMethodInsn(INVOKESPECIAL, Names.EntityRenderer_, Names.EntityRenderer_renderHand,
// Names.EntityRenderer_renderHand_desc);
// mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders", "endHand",
// "()V");
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(FLOAD, 1);
mv.visitVarInsn(ILOAD, 13);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersRender",
"renderHand1",
"(" + Names.entityRenderer_.desc + "FI)V");
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"renderCompositeFinal",
"()V");
return;
}
break;
}
mv.visitJumpInsn(opcode, label);
}
@Override
public void visitLabel(Label label) {
switch (state) {
case 11:
if (label == labelAfterUpdate) {
++state;
mv.visitLabel(labelEndUpdate);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"endUpdateChunks",
"()V");
mv.visitLabel(label);
labelAfterUpdate = labelEndUpdate = null;
return;
}
}
mv.visitLabel(label);
}
@Override
public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack) {
// ALog.finest(" %d, Frame",state);
switch (state) {
case 7: {
state = 8;
mv.visitLabel(labelNoSky);
labelNoSky = null;
mv.visitFrame(type, nLocal, local, nStack, stack);
return;
}
case 31: {
++state;
mv.visitFrame(type, nLocal, local, nStack, stack);
mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders", "endRender", "()V");
return;
}
}
mv.visitFrame(type, nLocal, local, nStack, stack);
}
@Override
public void visitFieldInsn(int opcode, String owner, String name, String desc) {
// ALog.finest(" %d F %d %s.%s %s", state, opcode, ownerM, nameM, descM);
switch (state) {
case 3:
if (Names.gameSettings_renderDistance.equals(owner, name)) {
++state;
}
break;
case 24:
case 26:
if (Names.entityRenderer_cameraZoom.equals(owner, name)) {
state = 28;
mv.visitFieldInsn(opcode, owner, name, desc);
return;
}
break;
}
mv.visitFieldInsn(opcode, owner, name, desc);
}
@Override
public void visitVarInsn(int opcode, int var) {
switch (state) {
case 29:
if (opcode == ALOAD) {
++state;
mv.visitVarInsn(opcode, var);
return;
}
break;
}
mv.visitVarInsn(opcode, var);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
// ALog.finest(" %d M %d %s.%s%s", state, opcode, ownerM, nameM, descM);
switch (state) {
case 0:
if (Names.equals("org/lwjgl/opengl/GL11", "glViewport", "(IIII)V", owner, name, desc)) {
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"setViewport",
"(IIII)V");
return;
}
break;
case 1:
if (Names.equals("org/lwjgl/opengl/GL11", "glClear", "(I)V", owner, name, desc)) {
++state;
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"clearRenderBuffer",
"()V");
return;
}
break;
case 2:
if (Names.entityRenderer_setupCameraTransform.equals(owner, name, desc)) {
++state;
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitVarInsn(FLOAD, 1);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"setCamera",
"(F)V");
return;
}
break;
case 3:
if (Names.equals("Config", "isSkyEnabled", "()Z", owner, name, desc)) {
state = 6;
mv.visitFieldInsn(GETSTATIC, "com/gtnewhorizons/angelica/client/Shaders", "isShadowPass", "Z");
labelNoSky = new Label();
mv.visitJumpInsn(IFNE, labelNoSky);
mv.visitMethodInsn(opcode, owner, name, desc);
return;
}
break;
case 5:
if (Names.renderGlobal_renderSky.equals(owner, name, desc)) {
state = 8;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginSky",
"()V");
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders", "endSky", "()V");
return;
}
break;
case 6:
if (Names.renderGlobal_renderSky.equals(owner, name, desc)) {
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginSky",
"()V");
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders", "endSky", "()V");
return;
}
break;
case 8:
if (Names.iCamera_setPosition.equals(owner, name, desc)
|| Names.frustrum_setPosition.equals(owner, name, desc)) {
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersRender",
"setFrustrumPosition",
"(" + Names.frustrum_.desc + "DDD)V");
return;
}
break;
case 9:
if (Names.renderGlobal_clipRenderersByFrustum.equals(owner, name, desc)) {
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersRender",
"clipRenderersByFrustrum",
"(" + Names.renderGlobal_.desc + Names.frustrum_.desc + "F)V");
return;
}
break;
case 12:
if (Names.renderGlobal_sortAndRender.equals(owner, name, desc)) {
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginTerrain",
"()V");
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"endTerrain",
"()V");
return;
}
break;
case 13:
if (Names.effectRenderer_renderLitParticles.equals(owner, name, desc)) {
// vanilla or forge. not optfine
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginLitParticles",
"()V");
mv.visitMethodInsn(opcode, owner, name, desc);
return;
} else if (Names.equals("org/lwjgl/opengl/GL11", "glDisable", "(I)V", owner, name, desc)) {
// optifine
state = 16;
break;
}
break;
case 14: // vanilla or forge. not optfine
if (Names.effectRenderer_renderParticles.equals(owner, name, desc)) {
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginParticles",
"()V");
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"endParticles",
"()V");
return;
}
break;
case 15: // vanilla or forge. not optfine
if (Names.equals("org/lwjgl/opengl/GL11", "glDisable", "(I)V", owner, name, desc)) {
++state;
break;
}
break;
case 16:
if (Names.entityRenderer_renderRainSnow.equals(owner, name, desc)) {
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginWeather",
"()V");
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"endWeather",
"()V");
return;
}
break;
case 17:
if (Names.equals("org/lwjgl/opengl/GL11", "glDepthMask", "(Z)V", owner, name, desc)) {
++state;
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(FLOAD, 1);
mv.visitVarInsn(ILOAD, 13);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersRender",
"renderHand0",
"(" + Names.entityRenderer_.desc + "FI)V");
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"preWater",
"()V");
return;
}
case 18:
case 19:
case 20:
if (Names.renderGlobal_sortAndRender.equals(owner, name, desc)) {
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginWater",
"()V");
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"endWater",
"()V");
return;
} else if (Names
.equals(Names.renderGlobal_.clas, "renderAllSortedRenderers", "(ID)I", owner, name, desc)) {
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginWater",
"()V");
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"endWater",
"()V");
return;
}
break;
case 21:
if (Names.equals("org/lwjgl/opengl/GL11", "glDepthMask", "(Z)V", owner, name, desc)) {
++state;
mv.visitMethodInsn(opcode, owner, name, desc);
return;
}
break;
case 22:
if (Names.equals("org/lwjgl/opengl/GL11", "glDisable", "(I)V", owner, name, desc)) {
++state;
mv.visitMethodInsn(opcode, owner, name, desc);
return;
}
break;
case 23:
if (Names.equals("org/lwjgl/opengl/GL11", "glDisable", "(I)V", owner, name, desc)) {
++state;
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"disableFog",
"()V");
return;
}
break;
case 24:
if (Names.effectRenderer_renderLitParticles.equals(owner, name, desc)) {
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginLitParticles",
"()V");
mv.visitMethodInsn(opcode, owner, name, desc);
return;
}
break;
case 25:
if (Names.effectRenderer_renderParticles.equals(owner, name, desc)) {
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginParticles",
"()V");
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"endParticles",
"()V");
return;
}
break;
case 30:
if (Names.entityRenderer_renderHand.equals(owner, name, desc)) {
++state;
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersRender",
"renderFPOverlay",
"(" + Names.entityRenderer_.desc + "FI)V");
return;
}
break;
}
/*
* case : if (Namer.equals(SMCNames.,SMCNames.,SMCNames._desc,owner,name,desc)) { ++state;
* mv.visitMethodInsn(opcode, owner, name, desc); return; } break; case : if
* (Namer.equals("","","",owner,name,desc)) { ++state; mv.visitMethodInsn(opcode, owner, name, desc);
* return; } break;
*/
mv.visitMethodInsn(opcode, owner, name, desc);
}
@Override
public void visitEnd() {
if (state != stateEnd) ALog.severe(" state %d expect %d", state, stateEnd);
mv.visitEnd();
}
}
}
@@ -1,115 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.launchwrapper.IClassTransformer;
import org.lwjgl.opengl.GL11;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class ACTItemRenderer implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
Names.Meth renderItemIrt = new Names.Meth(
Names.itemRenderer_,
"renderItem",
"(" + Names.entityLivingBase_.desc
+ Names.itemStack_.desc
+ "ILnet/minecraftforge/client/IItemRenderer$ItemRenderType;)V");
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// ALog.info(" method %s.%s%s",classname,name,desc);
if (Names.itemRenderer_updateEquipped.equalsNameDesc(name, desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
return new MVupdate(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (Names.itemRenderer_renderItem.equalsNameDesc(name, desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
return new MVrenderItem(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (renderItemIrt.equalsNameDesc(name, desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
return new MVrenderItem(cv.visitMethod(access, name, desc, signature, exceptions));
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
}
private static class MVupdate extends MethodVisitor {
public MVupdate(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitFieldInsn(int opcode, String owner, String name, String desc) {
if (opcode == PUTFIELD && Names.itemRenderer_itemToRender.equals(owner, name, desc)) {
mv.visitInsn(DUP);
mv.visitFieldInsn(
PUTSTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"itemToRender",
Names.itemStack_.desc);
}
mv.visitFieldInsn(opcode, owner, name, desc);
}
}
private static class MVrenderItem extends MethodVisitor {
public MVrenderItem(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
int state = 0;
@Override
public void visitInsn(int opcode) {
if (state == 1) {
if (opcode == ICONST_0) {
++state;
opcode = ICONST_1;
}
}
mv.visitInsn(opcode);
}
@Override
public void visitIntInsn(int opcode, int operand) {
if (state == 0) {
if (opcode == SIPUSH && operand == GL11.GL_BLEND) {
++state;
}
}
mv.visitIntInsn(opcode, operand);
}
}
}
@@ -1,100 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.INVOKESTATIC;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class ACTPrjRedIlluRenderHalo implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, 0);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
this.classname = name;
// ALog.info(" class %s",name);
super.visit(version, access, name, signature, superName, interfaces);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// ALog.info(" %s%s",name,desc);
if ("prepareRenderState".equals(name) && "()V".equals(desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
return new MVprepare(cv.visitMethod(access, name, desc, signature, exceptions));
}
if ("restoreRenderState".equals(name) && "()V".equals(desc)) {
ALog.finer(" patch method %s.%s%s", classname, name, desc);
return new MVrestore(cv.visitMethod(access, name, desc, signature, exceptions));
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
}
private static class MVprepare extends MethodVisitor {
public MVprepare(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
if (Names.equals("codechicken/lib/render/CCRenderState", "reset", "()V", owner, name, desc)) {
ALog.info(" beginHalo");
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginProjectRedHalo",
"()V");
}
super.visitMethodInsn(opcode, owner, name, desc);
}
@Override
public void visitInsn(int opcode) {
super.visitInsn(opcode);
}
}
private static class MVrestore extends MethodVisitor {
public MVrestore(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
super.visitMethodInsn(opcode, owner, name, desc);
if (Names.equals("org/lwjgl/opengl/GL11", "glDisable", "(I)V", owner, name, desc)) {
ALog.info(" endHalo");
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"endProjectRedHalo",
"()V");
}
}
}
}
@@ -1,51 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Opcodes;
/** transformer for net.minecraft.client.renderer.Tessellator */
public class ACTRenderManager implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, 0);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
boolean endFields = false;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
if (Names.renderManager_entityRenderMap.name.equals(name)) {
access = access & (~ACC_PRIVATE & ~ACC_PROTECTED) | ACC_PUBLIC;
}
return cv.visitField(access, name, desc, signature, value);
}
}
}
@@ -1,74 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class ACTRenderSpider implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// ALog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
if (Names.renderDragon_shouldRenderPass.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVshouldRenderPass(cv.visitMethod(access, name, desc, signature, exceptions));
}
if (Names.renderEnderman_shouldRenderPass.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVshouldRenderPass(cv.visitMethod(access, name, desc, signature, exceptions));
}
if (Names.renderSpider_shouldRenderPass.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVshouldRenderPass(cv.visitMethod(access, name, desc, signature, exceptions));
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
}
private static class MVshouldRenderPass extends MethodVisitor {
public MVshouldRenderPass(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
mv.visitMethodInsn(opcode, owner, name, desc);
if (Names.equals("org/lwjgl/opengl/GL11", "glColor4f", "(FFFF)V", owner, name, desc)) {
mv.visitMethodInsn(INVOKESTATIC, "com/gtnewhorizons/angelica/client/Shaders", "beginSpiderEyes", "()V");
}
}
}
}
@@ -1,24 +1,29 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import static org.objectweb.asm.Opcodes.GETSTATIC;
import static org.objectweb.asm.Opcodes.IFNE;
import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
import net.minecraft.client.renderer.entity.RendererLivingEntity;
import net.minecraft.launchwrapper.IClassTransformer;
import org.lwjgl.opengl.GL12;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import com.gtnewhorizons.angelica.loading.AngelicaTweaker;
/** Transformer for {@link RendererLivingEntity} */
public class ACTRendererLivingEntity implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
public byte[] transform(String name, String transformedName, byte[] basicClass) {
AngelicaTweaker.LOGGER.debug("transforming {} {}", name, transformedName);
ClassReader cr = new ClassReader(basicClass);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
@@ -27,9 +32,9 @@ public class ACTRendererLivingEntity implements IClassTransformer {
private static class CVTransform extends ClassVisitor {
String classname;
private String classname;
public CVTransform(ClassVisitor cv) {
private CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@@ -37,122 +42,39 @@ public class ACTRendererLivingEntity implements IClassTransformer {
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
if (Names.rendererLivingE_mainModel.name.equals(name)
|| Names.rendererLivingE_renderPassModel.name.equals(name)) {
access = access & ~(ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED) | ACC_PUBLIC;
}
return cv.visitField(access, name, desc, signature, value);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// ALog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
if (Names.rendererLivingE_doRender.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
AngelicaTweaker.LOGGER.trace(" patching method {}.{}{}", classname, name, desc);
return new MVdoRenderLiving(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (Names.rendererLivingE_renderLabel.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVrenderLivingLabel(cv.visitMethod(access, name, desc, signature, exceptions));
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
}
/**
* Wraps everything in
* {@link RendererLivingEntity#doRender(net.minecraft.entity.EntityLivingBase, double, double, double, float, float)}
* between {@code this.renderEquippedItems(p_76986_1_, p_76986_9_);} and
* {@code GL11.glDisable(GL12.GL_RESCALE_NORMAL);} in an {@code if (!Shaders.useEntityHurtFlash)}-block
*/
private static class MVdoRenderLiving extends MethodVisitor {
public MVdoRenderLiving(MethodVisitor mv) {
private MVdoRenderLiving(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitCode() {
// ALog.info(" insert code");
mv.visitCode();
mv.visitFieldInsn(GETSTATIC, "com/gtnewhorizons/angelica/client/Shaders", "useEntityHurtFlash", "Z");
Label label1 = new Label();
mv.visitJumpInsn(IFEQ, label1);
mv.visitVarInsn(ALOAD, 1);
mv.visitFieldInsn(
GETFIELD,
Names.entityLivingBase_hurtTime.clas,
Names.entityLivingBase_hurtTime.name,
Names.entityLivingBase_hurtTime.desc);
Label label2 = new Label();
mv.visitJumpInsn(IFGT, label2);
mv.visitVarInsn(ALOAD, 1);
mv.visitFieldInsn(
GETFIELD,
Names.entityLivingBase_deathTime.clas,
Names.entityLivingBase_deathTime.name,
Names.entityLivingBase_deathTime.desc);
Label label3 = new Label();
mv.visitJumpInsn(IFLE, label3);
mv.visitLabel(label2);
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
mv.visitIntInsn(BIPUSH, 102);
Label label4 = new Label();
mv.visitJumpInsn(GOTO, label4);
mv.visitLabel(label3);
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
mv.visitInsn(ICONST_0);
mv.visitLabel(label4);
mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { Opcodes.INTEGER });
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(FLOAD, 9);
mv.visitMethodInsn(
INVOKEVIRTUAL,
Names.entity_getBrightness.clas,
Names.entity_getBrightness.name,
Names.entity_getBrightness.desc);
mv.visitVarInsn(FLOAD, 9);
mv.visitMethodInsn(
INVOKEVIRTUAL,
Names.rendererLivingE_getColorMultiplier.clas,
Names.rendererLivingE_getColorMultiplier.name,
Names.rendererLivingE_getColorMultiplier.desc);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"setEntityHurtFlash",
"(II)V");
mv.visitLabel(label1);
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
// ALog.info(" end insert");
}
/** last SIPUSH operand */
private int lastInt = 0;
/** state */
private int state = 0;
private static final int stateEnd = 7;
/** end of vanilla hurt rendering */
Label labelEndVH = null;
@Override
public void visitIntInsn(int opcode, int operand) {
if (opcode == SIPUSH) {
lastInt = operand;
}
mv.visitIntInsn(opcode, operand);
}
private Label labelEndVH = null;
@Override
public void visitLdcInsn(Object cst) {
if (cst instanceof Integer) {
int icst = ((Integer) cst).intValue();
if (icst == GL12.GL_RESCALE_NORMAL) {
// ALog.info(" rescale_normal");
if (cst instanceof Integer integer) {
if (integer.intValue() == GL12.GL_RESCALE_NORMAL) {
if (labelEndVH != null) {
// ALog.info(" jump target");
mv.visitLabel(labelEndVH);
labelEndVH = null;
}
@@ -163,136 +85,14 @@ public class ACTRendererLivingEntity implements IClassTransformer {
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
// ALog.info(" %s.%s%s",ownerM,nameM,descM);
if (opcode == INVOKEVIRTUAL) {
if (Names.rendererLivingE_renderEquippedItems.equals(owner, name, desc)) {
// ALog.info(" renderEquippedItems");
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"resetEntityHurtFlash",
"()V");
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitFieldInsn(
GETSTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"useEntityHurtFlash",
"Z");
labelEndVH = new Label();
mv.visitJumpInsn(IFNE, labelEndVH);
state = 1;
return;
}
}
//
mv.visitMethodInsn(opcode, owner, name, desc);
//
if (opcode == INVOKESTATIC) {
if (Names.equals("org/lwjgl/opengl/GL11", "glDepthFunc", "(I)V", owner, name, desc)) {
// ALog.info(" glDepthFunc");
if (state == 3) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"beginLivingDamage",
"()V");
++state;
} else if (state == 4) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"endLivingDamage",
"()V");
++state;
}
} else if (Names.openGlHelper_setActiveTexture.equals(owner, name, desc)) {
// ALog.info(" setActiveTexture");
if (state == 1) {
++state;
} else if (state == 2) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"disableLightmap",
"()V");
++state;
} else if (state == 5) {
++state;
} else if (state == 6) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/Shaders",
"enableLightmap",
"()V");
++state;
}
}
}
}
@Override
public void visitEnd() {
mv.visitEnd();
if (state != stateEnd) {
ALog.severe("state %d expected %d", state, stateEnd);
}
}
}
private static class MVrenderLivingLabel extends MethodVisitor {
public MVrenderLivingLabel(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
int pushedInt = 0;
@Override
public void visitIntInsn(int opcode, int operand) {
mv.visitIntInsn(opcode, operand);
if (opcode == SIPUSH && operand == 3553) pushedInt = 3553;
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
if (pushedInt == 3553) {
pushedInt = 0;
if (opcode == INVOKESTATIC && owner.equals("org/lwjgl/opengl/GL11") && desc.equals("(I)V")) {
if (name.equals("glDisable")) {
owner = "com/gtnewhorizons/angelica/client/Shaders";
name = "sglDisableT2D";
} else if (name.equals("glEnable")) {
owner = "com/gtnewhorizons/angelica/client/Shaders";
name = "sglEnableT2D";
}
}
if (opcode == INVOKEVIRTUAL && Names.rendererLivingE_renderEquippedItems.equals(owner, name, desc)) {
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitFieldInsn(GETSTATIC, "com/gtnewhorizons/angelica/client/Shaders", "useEntityHurtFlash", "Z");
labelEndVH = new Label();
mv.visitJumpInsn(IFNE, labelEndVH);
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
// private static class MVNTransform extends MethodVisitor
// {
// protected MethodVisitor mv;
// protected MethodNode mn;
// public MVNTransform(MethodNode mn, MethodVisitor mv) {
// super(Opcodes.ASM4);
// super.mv = this.mn = mn;
// this.mv = mv;
// }
//
// @Override
// public void visitEnd() {
// super.visitEnd();
// Iterator<AbstractInsnNode> it = mn.instructions.iterator();
// while (it.hasNext())
// {
// AbstractInsnNode node = it.next();
// System.out.println(node.toString());
// }
// // send to target
// mn.accept(mv);
// }
// }
}
@@ -1,81 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class ACTSmartMoveModelRotationRenderer implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// ALog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
if ("resetDisplayList".equals(name) && "()V".equals(desc)) {
return null;
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
@Override
public void visitEnd() {
MethodVisitor mv;
{
mv = cv.visitMethod(ACC_PUBLIC, "resetDisplayList", "()V", null, null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, Names.modelRenderer_.clas, "resetDisplayList", "()V");
mv.visitVarInsn(ALOAD, 0);
mv.visitInsn(ICONST_0);
// mv.visitFieldInsn(PUTFIELD, "net/smart/render/ModelRotationRenderer", "compiled", "Z");
mv.visitFieldInsn(
PUTFIELD,
"net/smart/render/ModelRotationRenderer",
Names.modelRenderer_compiled.name,
"Z");
mv.visitVarInsn(ALOAD, 0);
mv.visitInsn(ICONST_0);
// mv.visitFieldInsn(PUTFIELD, "net/smart/render/ModelRotationRenderer", "displayList", "I");
mv.visitFieldInsn(
PUTFIELD,
"net/smart/render/ModelRotationRenderer",
Names.modelRenderer_displayList.name,
"I");
mv.visitInsn(RETURN);
mv.visitMaxs(2, 1);
mv.visitEnd();
}
super.visitEnd();
}
}
}
@@ -1,121 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
/** transformer for net.minecraft.client.renderer.texture.AbstractTexture */
public class ACTTextureAbstract implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
boolean endFields = false;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
if (name.equals("multiTex")) {
return null;
} else {
access = access & (~ACC_PRIVATE & ~ACC_PROTECTED) | ACC_PUBLIC;
}
return cv.visitField(access, name, desc, signature, value);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
if (!endFields) {
endFields = true;
FieldVisitor fv;
// multiTex
fv = cv.visitField(
ACC_PUBLIC,
"multiTex",
"Lcom/gtnewhorizons/angelica/client/MultiTexID;",
null,
null);
fv.visitEnd();
}
// ALog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
if (Names.abstractTexture_deleteGlTexture.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s%s",classname,name,desc,nameM,descM);
return new MVdeleteGlTexture(cv.visitMethod(access, name, desc, signature, exceptions));
} else
if (name.equals("getMultiTexID") && desc.equals("()Lcom/gtnewhorizons/angelica/client/MultiTexID;")) {
return null;
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
@Override
public void visitEnd() {
MethodVisitor mv;
// getMultiTexID
mv = cv.visitMethod(
ACC_PUBLIC,
"getMultiTexID",
"()Lcom/gtnewhorizons/angelica/client/MultiTexID;",
null,
null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"getMultiTexID",
"(" + Names.abstractTexture_.desc + ")Lcom/gtnewhorizons/angelica/client/MultiTexID;");
mv.visitInsn(ARETURN);
mv.visitMaxs(1, 1);
mv.visitEnd();
// end
cv.visitEnd();
}
}
private static class MVdeleteGlTexture extends MethodVisitor {
public MVdeleteGlTexture(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitCode() {
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"deleteTextures",
"(" + Names.abstractTexture_.desc + ")V");
}
}
}
@@ -1,193 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
/** transformer for net.minecraft.client.renderer.texture.TextureAtlasSprite */
public class ACTTextureAtlasSprite implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
// String nameM = SMCRemap.remapper.mapFieldName(classname, name, desc);
access = access & ~(ACC_PRIVATE | ACC_PROTECTED) | ACC_PUBLIC;
return cv.visitField(access, name, desc, signature, value);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// ALog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
access = access & ~(ACC_PRIVATE | ACC_PROTECTED) | ACC_PUBLIC;
if (Names.textureAtlasSpri_updateAnimation.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVanimation(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (name.equals("load")
&& desc.equals("(" + Names.iResourceManager_.desc + Names.resourceLocation_.desc + ")Z")) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVload(cv.visitMethod(access, name, desc, signature, exceptions));
} else
if (Names.textureAtlasSpri_loadSprite.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVloadSprite(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (name.equals("uploadFrameTexture") && desc.equals("(III)V")) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVuploadFrameTexture(cv.visitMethod(access, name, desc, signature, exceptions));
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
}
// also used by clock and compass
protected static class MVanimation extends MethodVisitor {
// protected MethodVisitor mv;
public MVanimation(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
// this.mv = mv;
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
if (Names.textureUtil_uploadTexSub.equals(owner, name, desc)) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"uploadTexSub",
"([[IIIIIZZ)V");
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
private static class MVload extends MethodVisitor {
// protected MethodVisitor mv;
public MVload(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
// this.mv = mv;
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
if (Names.iResourceManager_getResource.equals(owner, name, desc)) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"loadResource",
"(" + Names.iResourceManager_.desc
+ Names.resourceLocation_.desc
+ ")"
+ Names.iResource_.desc);
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
private static class MVloadSprite extends MethodVisitor {
// protected MethodVisitor mv;
public MVloadSprite(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
// this.mv = mv;
}
@Override
public void visitIntInsn(int opcode, int operand) {
if (opcode == NEWARRAY && operand == T_INT) {
mv.visitInsn(ICONST_3);
mv.visitInsn(IMUL);
}
mv.visitIntInsn(opcode, operand);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
if (Names.equals("java/awt/image/BufferedImage", "getRGB", "(IIII[III)[I", owner, name, desc)) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"loadAtlasSprite",
"(Ljava/awt/image/BufferedImage;IIII[III)[I");
return;
} else if (Names.textureAtlasSpri_getFrameTextureData.equals(owner, name, desc)) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"extractFrame",
"([IIII)[I");
return;
} else if (Names.equals(Names.textureAtlasSpri_.clas, "fixTransparentColor", "([I)V", owner, name, desc)) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"fixTransparentColor",
"(" + Names.textureAtlasSpri_.desc + "[I)V");
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
private static class MVuploadFrameTexture extends MethodVisitor {
public MVuploadFrameTexture(MethodVisitor mv) {
super(Opcodes.ASM4, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ILOAD, 1);
mv.visitVarInsn(ILOAD, 2);
mv.visitVarInsn(ILOAD, 3);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"uploadFrameTexture",
"(" + Names.textureAtlasSpri_.desc + "III)V");
mv.visitInsn(RETURN);
Label l2 = new Label();
mv.visitLabel(l2);
mv.visitLocalVariable("this", Names.textureAtlasSpri_.desc, null, l0, l2, 0);
mv.visitLocalVariable("frameIndex", "I", null, l0, l2, 1);
mv.visitLocalVariable("xPos", "I", null, l0, l2, 2);
mv.visitLocalVariable("yPos", "I", null, l0, l2, 3);
mv.visitMaxs(4, 4);
mv.visitEnd();
}
}
}
@@ -1,105 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class ACTTextureDownload implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
// ALog.finest(" field %s %s %s %d", classname, name, desc, access);
return super.visitField(access, name, desc, signature, value);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// String nameM = SMCRemap.remapper.mapMethodName(classname, name, desc);
// ALog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
if (name.equals("getMultiTexID")) {
return null;
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
@Override
public void visitEnd() {
MethodVisitor mv;
// getMultiTexID
mv = cv.visitMethod(
ACC_PUBLIC,
"getMultiTexID",
"()Lcom/gtnewhorizons/angelica/client/MultiTexID;",
null,
null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(
GETFIELD,
Names.textureDownload_textureUploaded.clas,
Names.textureDownload_textureUploaded.name,
Names.textureDownload_textureUploaded.desc);
Label l1 = new Label();
mv.visitJumpInsn(IFNE, l1);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(
INVOKEVIRTUAL,
Names.textureDownload_.clas,
Names.iTextureObject_getGlTextureId.name,
Names.iTextureObject_getGlTextureId.desc);
mv.visitInsn(POP);
mv.visitLabel(l1);
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(
INVOKESPECIAL,
Names.abstractTexture_.clas,
"getMultiTexID",
"()Lcom/gtnewhorizons/angelica/client/MultiTexID;");
mv.visitInsn(ARETURN);
Label l3 = new Label();
mv.visitLabel(l3);
mv.visitLocalVariable("this", Names.textureDownload_.desc, null, l0, l3, 0);
mv.visitMaxs(1, 1);
mv.visitEnd();
// end
cv.visitEnd();
}
}
}
@@ -1,109 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class ACTTextureDynamic implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// ALog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
if (name.equals("<init>") && desc.equals("(II)V")) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVinit(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (Names.dynamicTexture_updateDynamicTexture.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVupdate(cv.visitMethod(access, name, desc, signature, exceptions));
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
}
private static class MVinit extends MethodVisitor {
// protected MethodVisitor mv;
public MVinit(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
// this.mv = mv;
}
@Override
public void visitIntInsn(int opcode, int operand) {
if (opcode == NEWARRAY && operand == T_INT) {
mv.visitInsn(ICONST_3);
mv.visitInsn(IMUL);
}
mv.visitIntInsn(opcode, operand);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
if (Names.textureUtil_allocateTexture.equals(owner, name, desc)) {
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"initDynamicTexture",
"(III" + Names.dynamicTexture_.desc + ")V");
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
private static class MVupdate extends MethodVisitor {
// protected MethodVisitor mv;
public MVupdate(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
// this.mv = mv;
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
if (Names.textureUtil_uploadTexture.equals(owner, name, desc)) {
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"updateDynamicTexture",
"(I[III" + Names.dynamicTexture_.desc + ")V");
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
}
@@ -1,85 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class ACTTextureLayered implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// String descM = SMCNames.remapper.mapMethodDesc(desc);
// ALog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
if (Names.iTextureObject_loadTexture.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVloadTexture(cv.visitMethod(access, name, desc, signature, exceptions));
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
}
private static class MVloadTexture extends MethodVisitor {
// protected MethodVisitor mv;
public MVloadTexture(MethodVisitor mv) {
super(Opcodes.ASM4);
// replace method body
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(
GETFIELD,
Names.layeredTexture_layeredTextureNames.clas,
Names.layeredTexture_layeredTextureNames.name,
Names.layeredTexture_layeredTextureNames.desc);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"loadLayeredTexture",
"(" + Names.layeredTexture_.desc + Names.iResourceManager_.desc + "Ljava/util/List;)V");
mv.visitInsn(RETURN);
Label l2 = new Label();
mv.visitLabel(l2);
mv.visitLocalVariable("this", Names.layeredTexture_.desc, null, l0, l2, 0);
mv.visitLocalVariable("manager", Names.iResourceManager_.desc, null, l0, l2, 1);
mv.visitMaxs(3, 2);
mv.visitEnd();
}
}
}
@@ -1,96 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class ACTTextureManager implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// ALog.info(" method %s.%s%s = %s%s",classname,name,desc,nameM,descM);
if (Names.textureManager_bindTexture.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s%s",classname,name,desc,nameM,descM);
return new MVbindTexture(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (Names.textureManager_onResourceManagerReload.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s%s",classname,name,desc,nameM,descM);
return new MVonReload(cv.visitMethod(access, name, desc, signature, exceptions));
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
}
private static class MVbindTexture extends MethodVisitor {
public MVbindTexture(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
if (Names.iTextureObject_getGlTextureId.equals(owner, name, desc)) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"bindTexture",
"(" + Names.iTextureObject_.desc + ")V");
return;
} else if (Names.textureUtil_bindTexture.equals(owner, name, desc)) {
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
private static class MVonReload extends MethodVisitor {
public MVonReload(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
if (Names.iTextureObject_getGlTextureId.equals(owner, name, desc)) {
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"deleteMultiTex",
"(" + Names.iTextureObject_.desc + ")I");
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
}
@@ -1,203 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class ACTTextureMap implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
boolean endFields = false;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
if (name.equals("atlasWidth")) {
return null;
} else if (name.equals("atlasHeight")) {
return null;
} else if (Names.textureMap_anisotropic.name.equals(name)) {
access = access & (~ACC_PRIVATE & ~ACC_PROTECTED) | ACC_PUBLIC;
}
return super.visitField(access, name, desc, signature, value);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
if (!endFields) {
endFields = true;
FieldVisitor fv;
fv = cv.visitField(ACC_PUBLIC, "atlasWidth", "I", null, null);
fv.visitEnd();
fv = cv.visitField(ACC_PUBLIC, "atlasHeight", "I", null, null);
fv.visitEnd();
}
// ALog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
if (Names.textureMap_getIconResLoc.equalsNameDesc(name, desc)) {
access = access & (~ACC_PRIVATE & ~ACC_PROTECTED) | ACC_PUBLIC;
} else if (Names.textureMap_loadTextureAtlas.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVloadAtlas(cv.visitMethod(access, name, desc, signature, exceptions));
} else if (Names.textureMap_updateAnimations.equalsNameDesc(name, desc)) {
// ALog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
return new MVanimation(cv.visitMethod(access, name, desc, signature, exceptions));
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
}
private static class MVloadAtlas extends MethodVisitor {
// protected MethodVisitor mv;
public MVloadAtlas(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
// this.mv = mv;
}
@Override
public void visitIntInsn(int opcode, int operand) {
if (opcode == NEWARRAY && operand == T_INT) {
mv.visitInsn(ICONST_3);
mv.visitInsn(IMUL);
}
mv.visitIntInsn(opcode, operand);
}
int varStitcher = 0;
boolean isStitcher = false;
int state = 0;
@Override
public void visitVarInsn(int opcode, int var) {
if (opcode == ASTORE) {
if (isStitcher) {
isStitcher = false;
varStitcher = var;
}
}
mv.visitVarInsn(opcode, var);
}
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
// ALog.finest(" %s.%s%s",ownerM,nameM,descM);
if (Names.iResourceManager_getResource.equals(owner, name, desc)) {
ALog.finest(" %s", "loadRes");
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"loadResource",
"(" + Names.iResourceManager_.desc
+ Names.resourceLocation_.desc
+ ")"
+ Names.iResource_.desc);
return;
} else if (opcode == INVOKESPECIAL
&& Names.equals(Names.stitcher_.clas, "<init>", "(IIZII)V", owner, name, desc)) {
isStitcher = true;
} else
if (Names.textureUtil_allocateTextureMipmapAniso.equals(owner, name, desc)) {
ALog.finest(" %s", "allocateTextureMap");
mv.visitVarInsn(ALOAD, varStitcher);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"allocateTextureMap",
"(IIIIF" + Names.stitcher_.desc + Names.textureMap_.desc + ")V");
state = 1;
return;
} else if (state == 1 && Names.textureAtlasSpri_getIconName.equals(owner, name, desc)) {
ALog.finest(" %s", "setSprite setIconName");
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"setSprite",
"(" + Names.textureAtlasSpri_.desc + ")" + Names.textureAtlasSpri_.desc);
mv.visitMethodInsn(opcode, owner, name, desc);
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"setIconName",
"(Ljava/lang/String;)Ljava/lang/String;");
state = 0;
return;
} else if (Names.textureUtil_uploadTexSub.equals(owner, name, desc)) {
ALog.finest(" %s", "uploadTexSubForLoadAtlas");
mv.visitMethodInsn(
INVOKESTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"uploadTexSubForLoadAtlas",
"([[IIIIIZZ)V");
return;
}
mv.visitMethodInsn(opcode, owner, name, desc);
}
}
private static class MVanimation extends MethodVisitor {
public MVanimation(MethodVisitor mv) {
super(Opcodes.ASM4, mv);
}
@Override
public void visitCode() {
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(
INVOKEVIRTUAL,
Names.textureMap_.clas,
"getMultiTexID",
"()Lcom/gtnewhorizons/angelica/client/MultiTexID;");
mv.visitFieldInsn(
PUTSTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"updatingTex",
"Lcom/gtnewhorizons/angelica/client/MultiTexID;");
}
@Override
public void visitInsn(int opcode) {
if (opcode == RETURN) {
mv.visitInsn(ACONST_NULL);
mv.visitFieldInsn(
PUTSTATIC,
"com/gtnewhorizons/angelica/client/ShadersTex",
"updatingTex",
"Lcom/gtnewhorizons/angelica/client/MultiTexID;");
}
mv.visitInsn(opcode);
}
}
}
@@ -1,65 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static org.objectweb.asm.Opcodes.*;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class ACTTextureObject implements IClassTransformer {
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
ALog.fine("transforming %s %s", par1, par2);
ClassReader cr = new ClassReader(par3);
ClassWriter cw = new ClassWriter(cr, 0);
CVTransform cv = new CVTransform(cw);
cr.accept(cv, 0);
return cw.toByteArray();
}
private static class CVTransform extends ClassVisitor {
String classname;
public CVTransform(ClassVisitor cv) {
super(Opcodes.ASM4, cv);
}
@Override
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
classname = name;
// ALog.info(" class %s",name);
cv.visit(version, access, name, signature, superName, interfaces);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// ALog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
if (name.equals("getMultiTexID") && desc.equals("()Lcom/gtnewhorizons/angelica/client/MultiTexID;")) {
return null;
}
return cv.visitMethod(access, name, desc, signature, exceptions);
}
@Override
public void visitEnd() {
MethodVisitor mv;
// getMultiTexID
mv = cv.visitMethod(
ACC_PUBLIC + ACC_ABSTRACT,
"getMultiTexID",
"()Lcom/gtnewhorizons/angelica/client/MultiTexID;",
null,
null);
mv.visitEnd();
// end
cv.visitEnd();
}
}
}
@@ -9,9 +9,10 @@ import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.tree.ClassNode;
import com.gtnewhorizons.angelica.loading.AngelicaTweaker;
public class AClassTransformer implements IClassTransformer {
Names names;
/** map of class transformer */
protected Map<String, IClassTransformer> ctMap;
@@ -19,37 +20,19 @@ public class AClassTransformer implements IClassTransformer {
ctMap.put(clas.clas.replace('/', '.'), ct);
}
// constructor
public AClassTransformer() {
names = new Names();
InitNames.init();
ctMap = new HashMap();
ctMap = new HashMap<>();
put(Names.entityRenderer_, new ACTEntityRenderer());
put(Names.renderManager_, new ACTRenderManager());
put(Names.rendererLivingE_, new ACTRendererLivingEntity());
put(Names.renderDragon_, new ACTRenderSpider());
put(Names.renderEnderman_, new ACTRenderSpider());
put(Names.renderSpider_, new ACTRenderSpider());
put(Names.itemRenderer_, new ACTItemRenderer());
put(Names.textureDownload_, new ACTTextureDownload());
put(Names.abstractTexture_, new ACTTextureAbstract());
put(Names.iTextureObject_, new ACTTextureObject());
put(Names.layeredTexture_, new ACTTextureLayered());
put(Names.dynamicTexture_, new ACTTextureDynamic());
put(Names.textureMap_, new ACTTextureMap());
put(Names.textureAtlasSpri_, new ACTTextureAtlasSprite());
put(Names.textureManager_, new ACTTextureManager());
ctMap.put("mrtjp.projectred.illumination.RenderHalo$", new ACTPrjRedIlluRenderHalo());
ctMap.put("net.smart.render.ModelRotationRenderer", new ACTSmartMoveModelRotationRenderer());
}
@Override
public byte[] transform(String par1, String par2, byte[] par3) {
byte[] bytecode = par3;
// if (par2.startsWith("mrtjp")) ALog.info("**** [%s]", par2);
IClassTransformer ct = ctMap.get(par2);
public byte[] transform(String name, String transformedName, byte[] basicClass) {
byte[] bytecode = basicClass;
IClassTransformer ct = ctMap.get(transformedName);
if (ct != null) {
bytecode = ct.transform(par1, par2, bytecode);
bytecode = ct.transform(name, transformedName, bytecode);
// HACK: Fix stackframes
ClassNode node = new ClassNode();
ClassReader reader = new ClassReader(bytecode);
@@ -58,9 +41,9 @@ public class AClassTransformer implements IClassTransformer {
node.accept(writer);
bytecode = writer.toByteArray();
// END HACK
int len1 = par3.length; // arg2!=null?arg2.length:0;
int len2 = bytecode.length; // bytecode!=null?bytecode.length:0;
ALog.fine(" %d (%+d)", len2, len2 - len1);
int oldLength = basicClass.length;
int newLength = bytecode.length;
AngelicaTweaker.LOGGER.debug(" {} (+{})", newLength, newLength - oldLength);
}
return bytecode;
}
@@ -1,108 +0,0 @@
package com.gtnewhorizons.angelica.transform;
import static java.util.logging.Level.ALL;
import static java.util.logging.Level.SEVERE;
import static java.util.logging.Level.WARNING;
import java.io.IOException;
import java.util.Calendar;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public abstract class ALog {
private static class SMCFormatter extends Formatter {
int tzOffset;
SMCFormatter() {
tzOffset = Calendar.getInstance().getTimeZone().getRawOffset();
}
@Override
public String format(LogRecord record) {
StringBuilder sb = new StringBuilder();
// int time = (int)((record.getMillis() + tzOffset) % (24*60*60*1000));
sb.append("[")
// .append(time/36000000).append(time/3600000%10)//.append(":")
// .append(time/600000%6).append(time/60000%10)//.append(":")
// .append(time/10000%6).append(time/10000%10).append(".")
// .append(time/100%10).append(time/10%10).append(time%10).append(" ")
.append(record.getLoggerName()).append(" ").append(record.getLevel()).append("]")
.append(record.getMessage()).append("\n");
return sb.toString();
}
}
private static class ALogger extends Logger {
ALogger(String name) {
super(name, null);
setUseParentHandlers(false);
Formatter formatter = new SMCFormatter();
Handler handler = new ConsoleHandler();
handler.setFormatter(formatter);
addHandler(handler);
try {
handler = new FileHandler("shadersmod-%u.log", 8 * 1048576, 1, false);
handler.setFormatter(formatter);
addHandler(handler);
} catch (IOException e) {
e.printStackTrace();
}
setLevel(ALL);
}
}
private static class SMCLevel extends Level {
private SMCLevel(String name, int value) {
super(name, value);
}
}
public static final String ALogName = "ANG";
public static final Logger logger = new ALogger(ALogName);
public static final Level ANGINFO = new SMCLevel("INF", 850);
public static final Level ANGCONFIG = new SMCLevel("CFG", 840);
public static final Level ANGFINE = new SMCLevel("FNE", 830);
public static final Level ANGFINER = new SMCLevel("FNR", 820);
public static final Level ANGFINEST = new SMCLevel("FNT", 810);
public static void log(Level level, String format, Object... args) {
if (logger.isLoggable(level)) logger.log(level, String.format(format, args));
}
public static void severe(String format, Object... args) {
if (logger.isLoggable(SEVERE)) logger.log(SEVERE, String.format(format, args));
}
public static void warning(String format, Object... args) {
if (logger.isLoggable(WARNING)) logger.log(WARNING, String.format(format, args));
}
public static void info(String format, Object... args) {
if (logger.isLoggable(ANGINFO)) logger.log(ANGINFO, String.format(format, args));
}
public static void config(String format, Object... args) {
if (logger.isLoggable(ANGCONFIG)) logger.log(ANGCONFIG, String.format(format, args));
}
public static void fine(String format, Object... args) {
if (logger.isLoggable(ANGFINE)) logger.log(ANGFINE, String.format(format, args));
}
public static void finer(String format, Object... args) {
if (logger.isLoggable(ANGFINER)) logger.log(ANGFINER, String.format(format, args));
}
public static void finest(String format, Object... args) {
if (logger.isLoggable(ANGFINEST)) logger.log(ANGFINEST, String.format(format, args));
}
}
@@ -2,11 +2,13 @@ package com.gtnewhorizons.angelica.transform;
import net.minecraft.launchwrapper.Launch;
import com.gtnewhorizons.angelica.loading.AngelicaTweaker;
public class InitNames {
public static void init() {
final boolean obfuscated = !(Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment");
ALog.info("Environment obfuscated: %s", obfuscated);
AngelicaTweaker.LOGGER.info("Environment obfuscated: {}", obfuscated);
if (obfuscated) {
new NamerSrg().setNames();
} else {
@@ -8,9 +8,9 @@ import com.gtnewhorizons.angelica.transform.Names.Meth;
public class Namer {
ArrayList<Clas> ac = new ArrayList();
ArrayList<Fiel> af = new ArrayList();
ArrayList<Meth> am = new ArrayList();
ArrayList<Clas> ac = new ArrayList<>();
ArrayList<Fiel> af = new ArrayList<>();
ArrayList<Meth> am = new ArrayList<>();
Clas c(String name) {
Clas x = new Clas(name);
@@ -1,6 +1,11 @@
package com.gtnewhorizons.angelica.transform;
import static com.gtnewhorizons.angelica.transform.Names.*;
import static com.gtnewhorizons.angelica.transform.Names.entityLivingBase_;
import static com.gtnewhorizons.angelica.transform.Names.entityRenderer_;
import static com.gtnewhorizons.angelica.transform.Names.entityRenderer_renderHand;
import static com.gtnewhorizons.angelica.transform.Names.rendererLivingE_;
import static com.gtnewhorizons.angelica.transform.Names.rendererLivingE_doRender;
import static com.gtnewhorizons.angelica.transform.Names.rendererLivingE_renderEquippedItems;
public class Namer1_7_10 extends Namer {
@@ -9,203 +14,12 @@ public class Namer1_7_10 extends Namer {
}
public void setNames1_7_10() {
block_ = c("aji");
blockFlowerPot_ = c("ald");
minecraft_ = c("bao");
guiButton_ = c("bcb");
guiOptions_ = c("bdm");
guiScreen_ = c("bdw");
modelRenderer_ = c("bix");
worldClient_ = c("bjf");
effectRenderer_ = c("bkn");
entityRenderer_ = c("blt");
glAllocation_ = c("ban");
itemRenderer_ = c("bly");
openGlHelper_ = c("buu");
renderBlocks_ = c("blm");
renderGlobal_ = c("bma");
tessellator_ = c("bmh");
worldRenderer_ = c("blo");
frustrum_ = c("bmx");
iCamera_ = c("bmv");
render_ = c("bno");
renderDragon_ = c("bnl");
renderEnderman_ = c("bnm");
renderSpider_ = c("bov");
renderManager_ = c("bnn");
rendererLivingE_ = c("boh");
abstractTexture_ = c("bpp");
dynamicTexture_ = c("bpq");
iTextureObject_ = c("bqh");
layeredTexture_ = c("bpt");
simpleTexture_ = c("bpu");
stitcher_ = c("bpv");
textureAtlasSpri_ = c("bqd");
textureClock_ = c("bql");
textureCompass_ = c("bqm");
textureManager_ = c("bqf");
textureMap_ = c("bpz");
textureUtil_ = c("bqi");
textureDownload_ = c("bpr");
iResource_ = c("bqw");
iResourceManager_ = c("bqy");
gameSettings_ = c("bbj");
tessVertexState_ = c("bmi");
entity_ = c("sa");
entityLivingBase_ = c("sv");
entityDragon_ = c("xa");
entityEnderman_ = c("ya");
entitySpider_ = c("yn");
entityPlayer_ = c("yz");
item_ = c("adb");
itemBlock_ = c("abh");
itemStack_ = c("add");
movingObjectPos_ = c("azu");
resourceLocation_ = c("bqx");
vec3_ = c("azw");
iBlockAccess_ = c("ahl");
world_ = c("ahb");
entityLivingBase_deathTime = f(entityLivingBase_, "aA", "I");
entityLivingBase_hurtTime = f(entityLivingBase_, "ax", "I");
entityRenderer_cameraZoom = f(entityRenderer_, "af", "D");
entityRenderer_mc = f(entityRenderer_, "t", minecraft_.desc);
gameSettings_renderDistance = f(gameSettings_, "c", "I");
guiButton_id = f(guiButton_, "k", "I");
guiScreen_buttonList = f(guiScreen_, "n", "Ljava/util/List;");
guiScreen_width = f(guiScreen_, "l", "I");
guiScreen_height = f(guiScreen_, "m", "I");
guiScreen_mc = f(guiScreen_, "k", minecraft_.desc);
guiOptions_options = f(guiOptions_, "h", gameSettings_.desc);
itemBlock_block = f(itemBlock_, "a", block_.desc);
itemRenderer_itemToRender = f(itemRenderer_, "e", itemStack_.desc);
layeredTexture_layeredTextureNames = f(layeredTexture_, "b", "Ljava/util/List;");
minecraft_renderGlobal = f(minecraft_, "g", renderGlobal_.desc);
minecraft_gameSettings = f(minecraft_, "u", gameSettings_.desc);
modelRenderer_displayList = f(modelRenderer_, "u", "I");
modelRenderer_compiled = f(modelRenderer_, "t", "Z");
renderGlobal_glSkyList = f(renderGlobal_, "G", "I");
renderGlobal_worldRenderers = f(renderGlobal_, "v", "[" + worldRenderer_.desc);
rendererLivingE_mainModel = f(rendererLivingE_, "i", null);
rendererLivingE_renderPassModel = f(rendererLivingE_, "j", null);
renderManager_entityRenderMap = f(renderManager_, "q", "Ljava/util/Map;");
renderManager_instance = f(renderManager_, "a", renderManager_.desc);
simpleTexture_textureLocation = f(simpleTexture_, "b", resourceLocation_.desc);
tessellator_floatBuffer = f(tessellator_, "d", "Ljava/nio/FloatBuffer;");
tessellator_shortBuffer = f(tessellator_, "e", "Ljava/nio/ShortBuffer;");
tessellator_intBuffer = f(tessellator_, "c", "Ljava/nio/IntBuffer;");
tessellator_byteBuffer = f(tessellator_, "b", "Ljava/nio/ByteBuffer;");
tessellator_rawBuffer = f(tessellator_, "f", "[I");
tessellator_vertexCount = f(tessellator_, "g", "I");
tessellator_hasNormals = f(tessellator_, "o", "Z");
textureAtlasSpri_width = f(textureAtlasSpri_, "e", null);
textureAtlasSpri_height = f(textureAtlasSpri_, "f", null);
textureAtlasSpri_border = f(textureAtlasSpri_, "k", null);
textureMap_anisotropic = f(textureMap_, "k", null);
textureDownload_textureUploaded = f(textureDownload_, "j", "Z");
vec3_xCoord = f(vec3_, "a", "D");
abstractTexture_deleteGlTexture = m(abstractTexture_, "c", "()V");
block_getAoLight = m(block_, "I", "()F");
block_getBlockFromItem = m(block_, "a", "(" + item_.desc + ")" + block_.desc);
dynamicTexture_updateDynamicTexture = m(dynamicTexture_, "a", "()V");
effectRenderer_renderLitParticles = m(effectRenderer_, "b", "(" + entity_.desc + "F)V");
effectRenderer_renderParticles = m(effectRenderer_, "a", "(" + entity_.desc + "F)V");
entity_getBrightness = m(entity_, "d", "(F)F");
entityRenderer_enableLightmap = m(entityRenderer_, "b", "(D)V");
entityRenderer_updateFogColor = m(entityRenderer_, "j", "(F)V");
entityRenderer_setupFog = m(entityRenderer_, "a", "(IF)V");
entityRenderer_setFogColorBuffer = m(entityRenderer_, "a", "(FFFF)Ljava/nio/FloatBuffer;");
entityRenderer_renderWorld = m(entityRenderer_, "a", "(FJ)V");
entityRenderer_renderRainSnow = m(entityRenderer_, "e", "(F)V");
entityRenderer_renderHand = m(entityRenderer_, "b", "(FI)V");
entityRenderer_setupCameraTransform = m(entityRenderer_, "a", "(FI)V");
entityRenderer_disableLightmap = m(entityRenderer_, "a", "(D)V");
entityRenderer_renderCloudsCheck = m(entityRenderer_, "a", "(" + renderGlobal_.desc + "F)V");
gameSettings_saveOptions = m(gameSettings_, "b", "()V");
gameSettings_shouldRenderClouds = m(gameSettings_, "d", "()Z");
glAllocation_createDirectByteBuffer = m(glAllocation_, "c", "(I)Ljava/nio/ByteBuffer;");
glAllocation_createDirectIntBuffer = m(glAllocation_, "f", "(I)Ljava/nio/IntBuffer;");
glAllocation_deleteDisplayLists = m(glAllocation_, "b", "(I)V");
iCamera_setPosition = m(iCamera_, "a", "(DDD)V");
iResourceManager_getResource = m(iResourceManager_, "a", "(" + resourceLocation_.desc + ")" + iResource_.desc);
itemRenderer_renderItem = m(itemRenderer_, "a", "(" + entityLivingBase_.desc + itemStack_.desc + "I)V");
itemRenderer_renderItemInFirstPerson = m(itemRenderer_, "a", "(F)V");
itemRenderer_renderOverlays = m(itemRenderer_, "b", "(F)V");
itemRenderer_updateEquipped = m(itemRenderer_, "a", "()V");
iTextureObject_loadTexture = m(iTextureObject_, "a", "(" + iResourceManager_.desc + ")V");
iTextureObject_getGlTextureId = m(iTextureObject_, "b", "()I");
minecraft_displayGuiScreen = m(minecraft_, "a", "(" + guiScreen_.desc + ")V");
openGlHelper_setActiveTexture = m(openGlHelper_, "j", "(I)V");
render_renderShadow = m(render_, "c", "(" + entity_.desc + "DDDFF)V");
renderBlocks_renderBlockFluids = m(renderBlocks_, "p", "(" + block_.desc + "III)Z");
renderBlocks_renderStdBlockWithCM = m(renderBlocks_, "d", "(" + block_.desc + "IIIFFF)Z");
renderBlocks_renderBlockSandFalling = m(renderBlocks_, "a", "(" + block_.desc + world_.desc + "IIII)V");
renderBlocks_renderStdBlockWithAO = m(renderBlocks_, "a", "(" + block_.desc + "IIIFFF)Z");
renderBlocks_renderBlockCactusImpl = m(renderBlocks_, "e", "(" + block_.desc + "IIIFFF)Z");
renderBlocks_renderBlockDoor = m(renderBlocks_, "u", "(" + block_.desc + "III)Z");
renderBlocks_renderBlockBed = m(renderBlocks_, "v", "(" + block_.desc + "III)Z");
renderBlocks_renderBlockByRenderType = m(renderBlocks_, "b", "(" + block_.desc + "III)Z");
renderBlocks_renderBlockFlowerPot = m(renderBlocks_, "a", "(" + blockFlowerPot_.desc + "III)Z");
renderBlocks_renderStdBlockWithAOP = m(renderBlocks_, "b", "(" + block_.desc + "IIIFFF)Z");
renderDragon_shouldRenderPass = m(renderDragon_, "a", "(" + entityDragon_.desc + "IF)I");
renderEnderman_shouldRenderPass = m(renderEnderman_, "a", "(" + entityEnderman_.desc + "IF)I");
renderSpider_shouldRenderPass = m(renderSpider_, "a", "(" + entitySpider_.desc + "IF)I");
rendererLivingE_doRender = m(rendererLivingE_, "a", "(" + entityLivingBase_.desc + "DDDFF)V");
rendererLivingE_renderEquippedItems = m(rendererLivingE_, "c", "(" + entityLivingBase_.desc + "F)V");
rendererLivingE_getColorMultiplier = m(rendererLivingE_, "a", "(" + entityLivingBase_.desc + "FF)I");
rendererLivingE_renderLabel = m(
rendererLivingE_,
"a",
"(" + entityLivingBase_.desc + "DDDLjava/lang/String;FD)V");
renderGlobal_renderEntities = m(renderGlobal_, "a", "(" + entityLivingBase_.desc + iCamera_.desc + "F)V");
renderGlobal_renderSky = m(renderGlobal_, "a", "(F)V");
renderGlobal_drawBlockDamageTexture = m(
renderGlobal_,
"a",
"(" + tessellator_.desc + entityPlayer_.desc + "F)V");
renderGlobal_renderClouds = m(renderGlobal_, "b", "(F)V");
renderGlobal_sortAndRender = m(renderGlobal_, "a", "(" + entityLivingBase_.desc + "ID)I");
renderGlobal_clipRenderersByFrustum = m(renderGlobal_, "a", "(" + iCamera_.desc + "F)V");
renderGlobal_drawSelectionBox = m(
renderGlobal_,
"a",
"(" + entityPlayer_.desc + movingObjectPos_.desc + "IF)V");
renderGlobal_renderAllRenderLists = m(renderGlobal_, "a", "(ID)V");
stitcher_getCurrentWidth = m(stitcher_, "a", "()I");
tessellator_sortQuad = m(tessellator_, "a", "(FFF)" + tessVertexState_.desc);
tessellator_addTranslation = m(tessellator_, "d", "(FFF)V");
tessellator_setNormal = m(tessellator_, "c", "(FFF)V");
tessellator_addVertex = m(tessellator_, "a", "(DDD)V");
tessellator_reset = m(tessellator_, "d", "()V");
tessellator_draw = m(tessellator_, "a", "()I");
textureAtlasSpri_loadSprite = m(textureAtlasSpri_, "-", "(" + iResource_.desc + ")V");
textureAtlasSpri_getFrameTextureData = m(textureAtlasSpri_, "a", "(I)[[I");
textureAtlasSpri_getIconName = m(textureAtlasSpri_, "g", "()Ljava/lang/String;");
textureAtlasSpri_updateAnimation = m(textureAtlasSpri_, "j", "()V");
textureCompass_updateCompass = m(textureCompass_, "a", "(" + world_.desc + "DDDZZ)V");
textureManager_onResourceManagerReload = m(textureManager_, "a", "(" + iResourceManager_.desc + ")V");
textureManager_bindTexture = m(textureManager_, "a", "(" + resourceLocation_.desc + ")V");
textureMap_loadTextureAtlas = m(textureMap_, "b", "(" + iResourceManager_.desc + ")V");
textureMap_getIconResLoc = m(textureMap_, "a", "(" + resourceLocation_.desc + "I)" + resourceLocation_.desc);
textureMap_updateAnimations = m(textureMap_, "d", "()V");
textureUtil_uploadTexture = m(textureUtil_, "a", "(I[III)V");
textureUtil_uploadTextureImageAllocate = m(textureUtil_, "a", "(ILjava/awt/image/BufferedImage;ZZ)I");
textureUtil_allocateTexture = m(textureUtil_, "a", "(III)V");
textureUtil_allocateTextureMipmapAniso = m(textureUtil_, "a", "(IIIIF)V");
textureUtil_uploadTexSub = m(textureUtil_, "a", "([[IIIIIZZ)V");
textureUtil_bindTexture = m(textureUtil_, "b", "(I)V");
world_getCelestialAngle = m(world_, "c", "(F)F");
world_getRainStrength = m(world_, "j", "(F)F");
modelRenderer_render = m(modelRenderer_, "a", "(F)V");
modelRenderer_renderWithRotation = m(modelRenderer_, "b", "(F)V");
guiOptions_buttonList = f(guiOptions_, guiScreen_buttonList);
guiOptions_width = f(guiOptions_, guiScreen_width);
guiOptions_height = f(guiOptions_, guiScreen_height);
guiOptions_mc = f(guiOptions_, guiScreen_mc);
frustrum_setPosition = m(frustrum_, iCamera_setPosition);
worldClient_getCelestialAngle = m(worldClient_, world_getCelestialAngle);
worldClient_getRainStrength = m(worldClient_, world_getRainStrength);
}
}
@@ -7,6 +7,7 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.gtnewhorizons.angelica.loading.AngelicaTweaker;
import com.gtnewhorizons.angelica.transform.Names.Clas;
import com.gtnewhorizons.angelica.transform.Names.Fiel;
import com.gtnewhorizons.angelica.transform.Names.Meth;
@@ -38,8 +39,8 @@ public class NamerMcp extends NamerSrg {
}
}
Map loadNameMapCSV(String fileName) {
Map map = new HashMap();
Map<String, String> loadNameMapCSV(String fileName) {
Map<String, String> map = new HashMap<>();
BufferedReader rd = null;
try {
rd = new BufferedReader(new FileReader(fileName));
@@ -72,20 +73,20 @@ public class NamerMcp extends NamerSrg {
nameMap = loadReobfMap(confPath + "packaged.srg");
for (Clas c : ac) {
String s = nameMap.get(c.name);
System.out.printf("C %s %s\n", c.name, s);
AngelicaTweaker.LOGGER.trace("C {} {}", c.name, s);
}
for (Fiel f : af) {
String s = nameMap.get(f.clas + "/" + f.name);
System.out.printf("F %s %s\n", f.name, s);
AngelicaTweaker.LOGGER.trace("F {} {}", f.name, s);
}
for (Meth m : am) {
String s = nameMap.get(m.clas + "/" + m.name + m.desc);
System.out.printf("M %s %s\n", m.name, s);
AngelicaTweaker.LOGGER.trace("M {} {}", m.name, s);
}
}
Map loadReobfMap(String fileName) {
Map map = new HashMap();
Map<String, String> loadReobfMap(String fileName) {
Map<String, String> map = new HashMap<>();
BufferedReader rd = null;
try {
rd = new BufferedReader(new FileReader(fileName));
@@ -9,224 +9,12 @@ public class NamerSrg extends Namer {
}
public void setNamesSrg() {
block_ = c("net/minecraft/block/Block");
blockFlowerPot_ = c("net/minecraft/block/BlockFlowerPot");
minecraft_ = c("net/minecraft/client/Minecraft");
guiButton_ = c("net/minecraft/client/gui/GuiButton");
guiOptions_ = c("net/minecraft/client/gui/GuiOptions");
guiScreen_ = c("net/minecraft/client/gui/GuiScreen");
modelRenderer_ = c("net/minecraft/client/model/ModelRenderer");
worldClient_ = c("net/minecraft/client/multiplayer/WorldClient");
effectRenderer_ = c("net/minecraft/client/particle/EffectRenderer");
entityRenderer_ = c("net/minecraft/client/renderer/EntityRenderer");
glAllocation_ = c("net/minecraft/client/renderer/GLAllocation");
itemRenderer_ = c("net/minecraft/client/renderer/ItemRenderer");
openGlHelper_ = c("net/minecraft/client/renderer/OpenGlHelper");
renderBlocks_ = c("net/minecraft/client/renderer/RenderBlocks");
renderGlobal_ = c("net/minecraft/client/renderer/RenderGlobal");
tessellator_ = c("net/minecraft/client/renderer/Tessellator");
worldRenderer_ = c("net/minecraft/client/renderer/WorldRenderer");
frustrum_ = c("net/minecraft/client/renderer/culling/Frustrum");
iCamera_ = c("net/minecraft/client/renderer/culling/ICamera");
render_ = c("net/minecraft/client/renderer/entity/Render");
renderDragon_ = c("net/minecraft/client/renderer/entity/RenderDragon");
renderEnderman_ = c("net/minecraft/client/renderer/entity/RenderEnderman");
renderSpider_ = c("net/minecraft/client/renderer/entity/RenderSpider");
renderManager_ = c("net/minecraft/client/renderer/entity/RenderManager");
rendererLivingE_ = c("net/minecraft/client/renderer/entity/RendererLivingEntity");
abstractTexture_ = c("net/minecraft/client/renderer/texture/AbstractTexture");
dynamicTexture_ = c("net/minecraft/client/renderer/texture/DynamicTexture");
iTextureObject_ = c("net/minecraft/client/renderer/texture/ITextureObject");
layeredTexture_ = c("net/minecraft/client/renderer/texture/LayeredTexture");
simpleTexture_ = c("net/minecraft/client/renderer/texture/SimpleTexture");
stitcher_ = c("net/minecraft/client/renderer/texture/Stitcher");
textureAtlasSpri_ = c("net/minecraft/client/renderer/texture/TextureAtlasSprite");
textureClock_ = c("net/minecraft/client/renderer/texture/TextureClock");
textureCompass_ = c("net/minecraft/client/renderer/texture/TextureCompass");
textureManager_ = c("net/minecraft/client/renderer/texture/TextureManager");
textureMap_ = c("net/minecraft/client/renderer/texture/TextureMap");
textureUtil_ = c("net/minecraft/client/renderer/texture/TextureUtil");
textureDownload_ = c("net/minecraft/client/renderer/ThreadDownloadImageData");
iResource_ = c("net/minecraft/client/resources/IResource");
iResourceManager_ = c("net/minecraft/client/resources/IResourceManager");
gameSettings_ = c("net/minecraft/client/settings/GameSettings");
tessVertexState_ = c("net/minecraft/client/shader/TesselatorVertexState");
entity_ = c("net/minecraft/entity/Entity");
entityLivingBase_ = c("net/minecraft/entity/EntityLivingBase");
entityDragon_ = c("net/minecraft/entity/boss/EntityDragon");
entityEnderman_ = c("net/minecraft/entity/monster/EntityEnderman");
entitySpider_ = c("net/minecraft/entity/monster/EntitySpider");
entityPlayer_ = c("net/minecraft/entity/player/EntityPlayer");
item_ = c("net/minecraft/item/Item");
itemBlock_ = c("net/minecraft/item/ItemBlock");
itemStack_ = c("net/minecraft/item/ItemStack");
movingObjectPos_ = c("net/minecraft/util/MovingObjectPosition");
resourceLocation_ = c("net/minecraft/util/ResourceLocation");
vec3_ = c("net/minecraft/util/Vec3");
iBlockAccess_ = c("net/minecraft/world/IBlockAccess");
world_ = c("net/minecraft/world/World");
entityLivingBase_deathTime = f(entityLivingBase_, "field_70725_aQ", "I");
entityLivingBase_hurtTime = f(entityLivingBase_, "field_70737_aN", "I");
entityRenderer_cameraZoom = f(entityRenderer_, "field_78503_V", "D");
entityRenderer_mc = f(entityRenderer_, "field_78531_r", minecraft_.desc);
gameSettings_renderDistance = f(gameSettings_, "field_151451_c", "I");
guiButton_id = f(guiButton_, "field_146127_k", "I");
guiScreen_buttonList = f(guiScreen_, "field_146292_n", "Ljava/util/List;");
guiScreen_width = f(guiScreen_, "field_146294_l", "I");
guiScreen_height = f(guiScreen_, "field_146295_m", "I");
guiScreen_mc = f(guiScreen_, "field_146297_k", minecraft_.desc);
guiOptions_options = f(guiOptions_, "field_146443_h", gameSettings_.desc);
itemBlock_block = f(itemBlock_, "field_150939_a", block_.desc);
itemRenderer_itemToRender = f(itemRenderer_, "field_78453_b", itemStack_.desc);
layeredTexture_layeredTextureNames = f(layeredTexture_, "field_110567_b", "Ljava/util/List;");
minecraft_renderGlobal = f(minecraft_, "field_71438_f", renderGlobal_.desc);
minecraft_gameSettings = f(minecraft_, "field_71474_y", gameSettings_.desc);
modelRenderer_displayList = f(modelRenderer_, "field_78811_r", "I");
modelRenderer_compiled = f(modelRenderer_, "field_78812_q", "Z");
renderGlobal_glSkyList = f(renderGlobal_, "field_72771_w", "I");
renderGlobal_worldRenderers = f(renderGlobal_, "field_72765_l", "[" + worldRenderer_.desc);
rendererLivingE_mainModel = f(rendererLivingE_, "field_77045_g", null);
rendererLivingE_renderPassModel = f(rendererLivingE_, "field_77046_h", null);
renderManager_entityRenderMap = f(renderManager_, "field_78729_o", "Ljava/util/Map;");
renderManager_instance = f(renderManager_, "field_78727_a", renderManager_.desc);
simpleTexture_textureLocation = f(simpleTexture_, "field_110568_b", resourceLocation_.desc);
tessellator_floatBuffer = f(tessellator_, "field_147566_d", "Ljava/nio/FloatBuffer;");
tessellator_shortBuffer = f(tessellator_, "field_147567_e", "Ljava/nio/ShortBuffer;");
tessellator_intBuffer = f(tessellator_, "field_147568_c", "Ljava/nio/IntBuffer;");
tessellator_byteBuffer = f(tessellator_, "field_78394_d", "Ljava/nio/ByteBuffer;");
tessellator_rawBuffer = f(tessellator_, "field_78405_h", "[I");
tessellator_vertexCount = f(tessellator_, "field_78406_i", "I");
tessellator_hasNormals = f(tessellator_, "field_78413_q", "Z");
textureAtlasSpri_width = f(textureAtlasSpri_, "field_130223_c", null);
textureAtlasSpri_height = f(textureAtlasSpri_, "field_130224_d", null);
textureAtlasSpri_border = f(textureAtlasSpri_, "field_147966_k", null);
textureMap_anisotropic = f(textureMap_, "field_147637_k", null);
textureDownload_textureUploaded = f(textureDownload_, "field_110559_g", "Z");
vec3_xCoord = f(vec3_, "field_72450_a", "D");
abstractTexture_deleteGlTexture = m(abstractTexture_, "func_147631_c", "()V");
block_getAoLight = m(block_, "func_149685_I", "()F");
block_getBlockFromItem = m(block_, "func_149634_a", "(" + item_.desc + ")" + block_.desc);
dynamicTexture_updateDynamicTexture = m(dynamicTexture_, "func_110564_a", "()V");
effectRenderer_renderLitParticles = m(effectRenderer_, "func_78872_b", "(" + entity_.desc + "F)V");
effectRenderer_renderParticles = m(effectRenderer_, "func_78874_a", "(" + entity_.desc + "F)V");
entity_getBrightness = m(entity_, "func_70013_c", "(F)F");
entityRenderer_enableLightmap = m(entityRenderer_, "func_78463_b", "(D)V");
entityRenderer_updateFogColor = m(entityRenderer_, "func_78466_h", "(F)V");
entityRenderer_setupFog = m(entityRenderer_, "func_78468_a", "(IF)V");
entityRenderer_setFogColorBuffer = m(entityRenderer_, "func_78469_a", "(FFFF)Ljava/nio/FloatBuffer;");
entityRenderer_renderWorld = m(entityRenderer_, "func_78471_a", "(FJ)V");
entityRenderer_renderRainSnow = m(entityRenderer_, "func_78474_d", "(F)V");
entityRenderer_renderHand = m(entityRenderer_, "func_78476_b", "(FI)V");
entityRenderer_setupCameraTransform = m(entityRenderer_, "func_78479_a", "(FI)V");
entityRenderer_disableLightmap = m(entityRenderer_, "func_78483_a", "(D)V");
entityRenderer_renderCloudsCheck = m(entityRenderer_, "func_82829_a", "(" + renderGlobal_.desc + "F)V");
gameSettings_saveOptions = m(gameSettings_, "func_74303_b", "()V");
gameSettings_shouldRenderClouds = m(gameSettings_, "func_74309_c", "()Z");
glAllocation_createDirectByteBuffer = m(glAllocation_, "func_74524_c", "(I)Ljava/nio/ByteBuffer;");
glAllocation_createDirectIntBuffer = m(glAllocation_, "func_74527_f", "(I)Ljava/nio/IntBuffer;");
glAllocation_deleteDisplayLists = m(glAllocation_, "func_74523_b", "(I)V");
iCamera_setPosition = m(iCamera_, "func_78547_a", "(DDD)V");
iResourceManager_getResource = m(
iResourceManager_,
"func_110536_a",
"(" + resourceLocation_.desc + ")" + iResource_.desc);
itemRenderer_renderItem = m(
itemRenderer_,
"func_78443_a",
"(" + entityLivingBase_.desc + itemStack_.desc + "I)V");
itemRenderer_renderItemInFirstPerson = m(itemRenderer_, "func_78440_a", "(F)V");
itemRenderer_renderOverlays = m(itemRenderer_, "func_78447_b", "(F)V");
itemRenderer_updateEquipped = m(itemRenderer_, "func_78441_a", "()V");
iTextureObject_loadTexture = m(iTextureObject_, "func_110551_a", "(" + iResourceManager_.desc + ")V");
iTextureObject_getGlTextureId = m(iTextureObject_, "func_110552_b", "()I");
minecraft_displayGuiScreen = m(minecraft_, "func_147108_a", "(" + guiScreen_.desc + ")V");
openGlHelper_setActiveTexture = m(openGlHelper_, "func_77473_a", "(I)V");
render_renderShadow = m(render_, "func_76975_c", "(" + entity_.desc + "DDDFF)V");
renderBlocks_renderBlockFluids = m(renderBlocks_, "func_147721_p", "(" + block_.desc + "III)Z");
renderBlocks_renderStdBlockWithCM = m(renderBlocks_, "func_147736_d", "(" + block_.desc + "IIIFFF)Z");
renderBlocks_renderBlockSandFalling = m(
renderBlocks_,
"func_147749_a",
"(" + block_.desc + world_.desc + "IIII)V");
renderBlocks_renderStdBlockWithAO = m(renderBlocks_, "func_147751_a", "(" + block_.desc + "IIIFFF)Z");
renderBlocks_renderBlockCactusImpl = m(renderBlocks_, "func_147754_e", "(" + block_.desc + "IIIFFF)Z");
renderBlocks_renderBlockDoor = m(renderBlocks_, "func_147760_u", "(" + block_.desc + "III)Z");
renderBlocks_renderBlockBed = m(renderBlocks_, "func_147773_v", "(" + block_.desc + "III)Z");
renderBlocks_renderBlockByRenderType = m(renderBlocks_, "func_147805_b", "(" + block_.desc + "III)Z");
renderBlocks_renderBlockFlowerPot = m(renderBlocks_, "func_147752_a", "(" + blockFlowerPot_.desc + "III)Z");
renderBlocks_renderStdBlockWithAOP = m(renderBlocks_, "func_147808_b", "(" + block_.desc + "IIIFFF)Z");
renderDragon_shouldRenderPass = m(renderDragon_, "func_77032_a", "(" + entityDragon_.desc + "IF)I");
renderEnderman_shouldRenderPass = m(renderEnderman_, "func_77032_a", "(" + entityEnderman_.desc + "IF)I");
renderSpider_shouldRenderPass = m(renderSpider_, "func_77032_a", "(" + entitySpider_.desc + "IF)I");
rendererLivingE_doRender = m(rendererLivingE_, "func_76986_a", "(" + entityLivingBase_.desc + "DDDFF)V");
rendererLivingE_renderEquippedItems = m(rendererLivingE_, "func_77029_c", "(" + entityLivingBase_.desc + "F)V");
rendererLivingE_getColorMultiplier = m(rendererLivingE_, "func_77030_a", "(" + entityLivingBase_.desc + "FF)I");
rendererLivingE_renderLabel = m(
rendererLivingE_,
"func_96449_a",
"(" + entityLivingBase_.desc + "DDDLjava/lang/String;FD)V");
renderGlobal_renderEntities = m(
renderGlobal_,
"func_147589_a",
"(" + entityLivingBase_.desc + iCamera_.desc + "F)V");
renderGlobal_renderSky = m(renderGlobal_, "func_72714_a", "(F)V");
renderGlobal_drawBlockDamageTexture = m(
renderGlobal_,
"func_72717_a",
"(" + tessellator_.desc + entityPlayer_.desc + "F)V");
renderGlobal_renderClouds = m(renderGlobal_, "func_72718_b", "(F)V");
renderGlobal_sortAndRender = m(renderGlobal_, "func_72719_a", "(" + entityLivingBase_.desc + "ID)I");
renderGlobal_clipRenderersByFrustum = m(renderGlobal_, "func_72729_a", "(" + iCamera_.desc + "F)V");
renderGlobal_drawSelectionBox = m(
renderGlobal_,
"func_72731_b",
"(" + entityPlayer_.desc + movingObjectPos_.desc + "IF)V");
renderGlobal_renderAllRenderLists = m(renderGlobal_, "func_72733_a", "(ID)V");
stitcher_getCurrentWidth = m(stitcher_, "func_110935_a", "()I");
tessellator_sortQuad = m(tessellator_, "func_147564_a", "(FFF)" + tessVertexState_.desc);
tessellator_addTranslation = m(tessellator_, "func_78372_c", "(FFF)V");
tessellator_setNormal = m(tessellator_, "func_78375_b", "(FFF)V");
tessellator_addVertex = m(tessellator_, "func_78377_a", "(DDD)V");
tessellator_reset = m(tessellator_, "func_78379_d", "()V");
tessellator_draw = m(tessellator_, "func_78381_a", "()I");
textureAtlasSpri_loadSprite = m(textureAtlasSpri_, "func_130100_a", "(" + iResource_.desc + ")V");
textureAtlasSpri_getFrameTextureData = m(textureAtlasSpri_, "func_147965_a", "(I)[[I");
textureAtlasSpri_getIconName = m(textureAtlasSpri_, "func_94215_i", "()Ljava/lang/String;");
textureAtlasSpri_updateAnimation = m(textureAtlasSpri_, "func_94219_l", "()V");
textureCompass_updateCompass = m(textureCompass_, "func_94241_a", "(" + world_.desc + "DDDZZ)V");
textureManager_onResourceManagerReload = m(
textureManager_,
"func_110549_a",
"(" + iResourceManager_.desc + ")V");
textureManager_bindTexture = m(textureManager_, "func_110577_a", "(" + resourceLocation_.desc + ")V");
textureMap_loadTextureAtlas = m(textureMap_, "func_110571_b", "(" + iResourceManager_.desc + ")V");
textureMap_getIconResLoc = m(
textureMap_,
"func_147634_a",
"(" + resourceLocation_.desc + "I)" + resourceLocation_.desc);
textureMap_updateAnimations = m(textureMap_, "func_94248_c", "()V");
textureUtil_uploadTexture = m(textureUtil_, "func_110988_a", "(I[III)V");
textureUtil_uploadTextureImageAllocate = m(
textureUtil_,
"func_110989_a",
"(ILjava/awt/image/BufferedImage;ZZ)I");
textureUtil_allocateTexture = m(textureUtil_, "func_110991_a", "(III)V");
textureUtil_allocateTextureMipmapAniso = m(textureUtil_, "func_147946_a", "(IIIIF)V");
textureUtil_uploadTexSub = m(textureUtil_, "func_147955_a", "([[IIIIIZZ)V");
textureUtil_bindTexture = m(textureUtil_, "func_94277_a", "(I)V");
world_getCelestialAngle = m(world_, "func_72826_c", "(F)F");
world_getRainStrength = m(world_, "func_72867_j", "(F)F");
modelRenderer_render = m(modelRenderer_, "func_78785_a", "(F)V");
modelRenderer_renderWithRotation = m(modelRenderer_, "func_78791_b", "(F)V");
guiOptions_buttonList = f(guiOptions_, guiScreen_buttonList);
guiOptions_width = f(guiOptions_, guiScreen_width);
guiOptions_height = f(guiOptions_, guiScreen_height);
guiOptions_mc = f(guiOptions_, guiScreen_mc);
frustrum_setPosition = m(frustrum_, iCamera_setPosition);
worldClient_getCelestialAngle = m(worldClient_, world_getCelestialAngle);
worldClient_getRainStrength = m(worldClient_, world_getRainStrength);
}
}
@@ -70,196 +70,13 @@ public class Names {
}
}
static Clas block_;
static Clas blockFlowerPot_;
static Clas minecraft_;
static Clas guiButton_;
static Clas guiOptions_;
static Clas guiScreen_;
static Clas modelRenderer_;
static Clas worldClient_;
static Clas effectRenderer_;
static Clas entityRenderer_;
static Clas glAllocation_;
static Clas itemRenderer_;
static Clas openGlHelper_;
static Clas renderBlocks_;
static Clas renderGlobal_;
static Clas tessellator_;
static Clas worldRenderer_;
static Clas frustrum_;
static Clas iCamera_;
static Clas render_;
static Clas renderDragon_;
static Clas renderEnderman_;
static Clas renderSpider_;
static Clas renderManager_;
static Clas rendererLivingE_;
static Clas abstractTexture_;
static Clas dynamicTexture_;
static Clas iTextureObject_;
static Clas layeredTexture_;
static Clas simpleTexture_;
static Clas stitcher_;
static Clas textureAtlasSpri_;
static Clas textureClock_;
static Clas textureCompass_;
static Clas textureManager_;
static Clas textureMap_;
static Clas textureUtil_;
static Clas textureDownload_;
static Clas iResource_;
static Clas iResourceManager_;
static Clas gameSettings_;
static Clas tessVertexState_;
static Clas entity_;
static Clas entityLivingBase_;
static Clas entityDragon_;
static Clas entityEnderman_;
static Clas entitySpider_;
static Clas entityPlayer_;
static Clas item_;
static Clas itemBlock_;
static Clas itemStack_;
static Clas movingObjectPos_;
static Clas resourceLocation_;
static Clas vec3_;
static Clas iBlockAccess_;
static Clas world_;
static Fiel entityLivingBase_deathTime;
static Fiel entityLivingBase_hurtTime;
static Fiel entityRenderer_cameraZoom;
static Fiel entityRenderer_mc;
static Fiel gameSettings_renderDistance;
static Fiel guiButton_id;
static Fiel guiScreen_buttonList;
static Fiel guiScreen_width;
static Fiel guiScreen_height;
static Fiel guiScreen_mc;
static Fiel guiOptions_options;
static Fiel itemBlock_block;
static Fiel itemRenderer_itemToRender;
static Fiel layeredTexture_layeredTextureNames;
static Fiel minecraft_renderGlobal;
static Fiel minecraft_gameSettings;
static Fiel modelRenderer_displayList;
static Fiel modelRenderer_compiled;
static Fiel renderGlobal_glSkyList;
static Fiel renderGlobal_worldRenderers;
static Fiel rendererLivingE_mainModel;
static Fiel rendererLivingE_renderPassModel;
static Fiel renderManager_entityRenderMap;
static Fiel renderManager_instance;
static Fiel simpleTexture_textureLocation;
static Fiel tessellator_floatBuffer;
static Fiel tessellator_shortBuffer;
static Fiel tessellator_intBuffer;
static Fiel tessellator_byteBuffer;
static Fiel tessellator_rawBuffer;
static Fiel tessellator_vertexCount;
static Fiel tessellator_hasNormals;
static Fiel textureAtlasSpri_width;
static Fiel textureAtlasSpri_height;
static Fiel textureAtlasSpri_border;
static Fiel textureMap_anisotropic;
static Fiel textureDownload_textureUploaded;
static Fiel vec3_xCoord;
static Fiel guiOptions_buttonList;
static Fiel guiOptions_width;
static Fiel guiOptions_height;
static Fiel guiOptions_mc;
static Meth abstractTexture_deleteGlTexture;
static Meth block_getAoLight;
static Meth block_getBlockFromItem;
static Meth dynamicTexture_updateDynamicTexture;
static Meth effectRenderer_renderLitParticles;
static Meth effectRenderer_renderParticles;
static Meth entity_getBrightness;
static Meth entityRenderer_enableLightmap;
static Meth entityRenderer_updateFogColor;
static Meth entityRenderer_setupFog;
static Meth entityRenderer_setFogColorBuffer;
static Meth entityRenderer_renderWorld;
static Meth entityRenderer_renderRainSnow;
static Meth entityRenderer_renderHand;
static Meth entityRenderer_setupCameraTransform;
static Meth entityRenderer_disableLightmap;
static Meth entityRenderer_renderCloudsCheck;
static Meth gameSettings_saveOptions;
static Meth gameSettings_shouldRenderClouds;
static Meth glAllocation_createDirectByteBuffer;
static Meth glAllocation_createDirectIntBuffer;
static Meth glAllocation_deleteDisplayLists;
static Meth iCamera_setPosition;
static Meth iResourceManager_getResource;
static Meth itemRenderer_renderItem;
static Meth itemRenderer_renderItemInFirstPerson;
static Meth itemRenderer_renderOverlays;
static Meth itemRenderer_updateEquipped;
static Meth iTextureObject_loadTexture;
static Meth iTextureObject_getGlTextureId;
static Meth minecraft_displayGuiScreen;
static Meth openGlHelper_setActiveTexture;
static Meth render_renderShadow;
static Meth renderBlocks_renderBlockFluids;
static Meth renderBlocks_renderStdBlockWithCM;
static Meth renderBlocks_renderBlockSandFalling;
static Meth renderBlocks_renderStdBlockWithAO;
static Meth renderBlocks_renderBlockCactusImpl;
static Meth renderBlocks_renderBlockDoor;
static Meth renderBlocks_renderBlockBed;
static Meth renderBlocks_renderBlockByRenderType;
static Meth renderBlocks_renderBlockFlowerPot;
static Meth renderBlocks_renderStdBlockWithAOP;
static Meth renderDragon_shouldRenderPass;
static Meth renderEnderman_shouldRenderPass;
static Meth renderSpider_shouldRenderPass;
static Meth rendererLivingE_doRender;
static Meth rendererLivingE_renderEquippedItems;
static Meth rendererLivingE_getColorMultiplier;
static Meth rendererLivingE_renderLabel;
static Meth renderGlobal_renderEntities;
static Meth renderGlobal_renderSky;
static Meth renderGlobal_drawBlockDamageTexture;
static Meth renderGlobal_renderClouds;
static Meth renderGlobal_sortAndRender;
static Meth renderGlobal_clipRenderersByFrustum;
static Meth renderGlobal_drawSelectionBox;
static Meth renderGlobal_renderAllRenderLists;
static Meth stitcher_getCurrentWidth;
static Meth tessellator_sortQuad;
static Meth tessellator_addTranslation;
static Meth tessellator_setNormal;
static Meth tessellator_addVertex;
static Meth tessellator_reset;
static Meth tessellator_draw;
static Meth textureAtlasSpri_loadSprite;
static Meth textureAtlasSpri_getFrameTextureData;
static Meth textureAtlasSpri_getIconName;
static Meth textureAtlasSpri_updateAnimation;
static Meth textureCompass_updateCompass;
static Meth textureManager_onResourceManagerReload;
static Meth textureManager_bindTexture;
static Meth textureMap_loadTextureAtlas;
static Meth textureMap_getIconResLoc;
static Meth textureMap_updateAnimations;
static Meth textureUtil_uploadTexture;
static Meth textureUtil_uploadTextureImageAllocate;
static Meth textureUtil_allocateTexture;
static Meth textureUtil_allocateTextureMipmapAniso;
static Meth textureUtil_uploadTexSub;
static Meth textureUtil_bindTexture;
static Meth world_getCelestialAngle;
static Meth world_getRainStrength;
static Meth modelRenderer_render;
static Meth modelRenderer_renderWithRotation;
static Meth frustrum_setPosition;
static Meth worldClient_getCelestialAngle;
static Meth worldClient_getRainStrength;
public static boolean equals(String clas1, String name1, String desc1, String clas2, String name2, String desc2) {
return clas1.equals(clas2) && name1.equals(name2) && desc1.equals(desc2);
@@ -1,167 +0,0 @@
Block_ "net/minecraft/block/Block"
GuiButton_ "net/minecraft/client/gui/GuiButton"
GuiOptions_ "net/minecraft/client/gui/GuiOptions"
GuiScreen_ "net/minecraft/client/gui/GuiScreen"
Minecraft_ "net/minecraft/client/Minecraft"
ModelRenderer_ "net/minecraft/client/model/ModelRenderer"
WorldClient_ "net/minecraft/client/multiplayer/WorldClient"
EffectRenderer_ "net/minecraft/client/particle/EffectRenderer"
Frustrum_ "net/minecraft/client/renderer/culling/Frustrum"
ICamera_ "net/minecraft/client/renderer/culling/ICamera"
Render_ "net/minecraft/client/renderer/entity/Render"
RenderDragon_ "net/minecraft/client/renderer/entity/RenderDragon"
RenderEnderman_ "net/minecraft/client/renderer/entity/RenderEnderman"
RenderSpider_ "net/minecraft/client/renderer/entity/RenderSpider"
EntityRenderer_ "net/minecraft/client/renderer/EntityRenderer"
RendererLivingEntity_ "net/minecraft/client/renderer/entity/RendererLivingEntity"
GLAllocation_ "net/minecraft/client/renderer/GLAllocation"
ItemRenderer_ "net/minecraft/client/renderer/ItemRenderer"
OpenGlHelper_ "net/minecraft/client/renderer/OpenGlHelper"
RenderBlocks_ "net/minecraft/client/renderer/RenderBlocks"
RenderGlobal_ "net/minecraft/client/renderer/RenderGlobal"
Tessellator_ "net/minecraft/client/renderer/Tessellator"
TesselatorVertexState_ "net/minecraft/client/shader/TesselatorVertexState"
AbstractTexture_ "net/minecraft/client/renderer/texture/AbstractTexture"
DynamicTexure_ "net/minecraft/client/renderer/texture/DynamicTexture"
ITextureObject_ "net/minecraft/client/renderer/texture/ITextureObject"
LayeredTexture_ "net/minecraft/client/renderer/texture/LayeredTexture"
SimpleTexture_ "net/minecraft/client/renderer/texture/SimpleTexture"
Stitcher_ "net/minecraft/client/renderer/texture/Stitcher"
TextureAtlasSprite_ "net/minecraft/client/renderer/texture/TextureAtlasSprite"
TextureClock_ "net/minecraft/client/renderer/texture/TextureClock"
TextureCompass_ "net/minecraft/client/renderer/texture/TextureCompass"
TextureManager_ "net/minecraft/client/renderer/texture/TextureManager"
TextureMap_ "net/minecraft/client/renderer/texture/TextureMap"
TextureUtil_ "net/minecraft/client/renderer/texture/TextureUtil"
ThreadDownloadImageData_ "net/minecraft/client/renderer/ThreadDownloadImageData"
IResource_ "net/minecraft/client/resources/IResource"
IResourceManager_ "net/minecraft/client/resources/IResourceManager"
GameSettings_ "net/minecraft/client/settings/GameSettings"
Entity_ "net/minecraft/entity/Entity"
EntityLivingBase_ "net/minecraft/entity/EntityLivingBase"
EntityDragon_ "net/minecraft/entity/boss/EntityDragon"
EntityEnderman_ "net/minecraft/entity/monster/EntityEnderman"
EntitySpider_ "net/minecraft/entity/monster/EntitySpider"
EntityPlayer_ "net/minecraft/entity/player/EntityPlayer"
MovingObjectPosition "net/minecraft/util/MovingObjectPosition"
ResourceLocation_ "net/minecraft/util/ResourceLocation"
Vec3_ "net/minecraft/util/Vec3"
IBlockAccess_ "net/minecraft/world/IBlockAccess"
World_ "net/minecraft/world/World"
EntityLivingBase_deathTime EntityLivingBase_ "field_70725_aQ" "I"
EntityLivingBase_hurtTime EntityLivingBase_ "field_70737_aN" "I"
EntityRenderer_cameraZoom EntityRenderer_ "field_78503_V" "D"
EntityRenderer_mc EntityRenderer_ "field_78531_r" "L"+Minecraft_.name+";"
GameSettings_renderDistance GameSettings_ "field_151451_c" "I"
GuiButton_id GuiButton_ "field_146127_k"
GuiOptions_buttonList GuiOptions_ "field_146292_n"
GuiOptions_width GuiOptions_ "field_146294_l"
GuiOptions_height GuiOptions_ "field_146295_m"
GuiOptions_mc GuiOptions_ "field_146297_k"
GuiOptions_options GuiOptions_ "field_146443_h"
LayeredTexture_layeredTextureNames LayeredTexture_ "field_110567_b"
Minecraft_renderGlobal Minecraft_ "field_71438_f"
Minecraft_gameSettings Minecraft_ "field_71474_y"
ModelRenderer_displayList ModelRenderer_ "field_78811_r"
ModelRenderer_compiled ModelRenderer_ "field_78812_q"
RendererLivingEntity_mainModel RendererLivingEntity_ "field_77045_g"
RendererLivingEntity_renderPassModel RendererLivingEntity_ "field_77046_h"
RenderGlobal_glSkyList RenderGlobal_ "field_72771_w"
SimpleTexture_textureLocation SimpleTexture_ "field_110568_b" "L"+ResourceLocation_.name+";"
Tessellator_floatBuffer Tessellator_ "field_147566_d"
Tessellator_shortBuffer Tessellator_ "field_147567_e"
Tessellator_intBuffer Tessellator_ "field_147568_c"
Tessellator_byteBuffer Tessellator_ "field_78394_d"
Tessellator_rawBuffer Tessellator_ "field_78405_h"
Tessellator_vertexCount Tessellator_ "field_78406_i"
Tessellator_hasNormals Tessellator_ "field_78413_q" "Z"
TextureAtlasSprite_width TextureAtlasSprite_ "field_130223_c"
TextureAtlasSprite_height TextureAtlasSprite_ "field_130224_d"
TextureAtlasSprite_border TextureAtlasSprite_ "field_147966_k"
TextureMap_anisotropic TextureMap_ "field_147637_k"
ThreadDownloadImageData_textureUploaded ThreadDownloadImageData_ "field_110559_g" "Z"
Vec3_xCoord Vec3_ "field_72450_a" "D"
AbstractTexture_deleteGlTexture AbstractTexture_ "func_147631_c" "()V"
Block_getAoLight Block_ "func_149685_I" "(L"+IBlockAccess_+";III)F"
DynamicTexure_updateDynamicTexture DynamicTexure_ "func_110564_a" "()V"
EffectRenderer_renderLitParticles EffectRenderer_ "func_78872_b" "(L"+Entity_.name+";F)V"
EffectRenderer_renderParticles EffectRenderer_ "func_78874_a" "(L"+Entity_.name+";F)V"
Entity_getBrightness Entity_ "func_70013_c" "(F)F"
EntityRenderer_enableLightmap EntityRenderer_ "func_78463_b" "(D)V"
EntityRenderer_updateFogColor EntityRenderer_ "func_78466_h" "(F)V"
EntityRenderer_setupFog EntityRenderer_ "func_78468_a" "(IF)V"
EntityRenderer_setFogColorBuffer EntityRenderer_ "func_78469_a" "(FFFF)Ljava/nio/FloatBuffer;"
EntityRenderer_renderWorld EntityRenderer_ "func_78471_a" "(FJ)V"
EntityRenderer_renderRainSnow EntityRenderer_ "func_78474_d" "(F)V"
EntityRenderer_renderHand EntityRenderer_ "func_78476_b" "(FI)V"
EntityRenderer_setupCameraTransform EntityRenderer_ "func_78479_a" "(FI)V"
EntityRenderer_disableLightmap EntityRenderer_ "func_78483_a" "(D)V"
EntityRenderer_renderCloudsCheck EntityRenderer_ "func_82829_a" "(L"+RenderGlobal_.name+";F)V"
GameSettings_saveOptions GameSettings_ "func_74303_b" "()V"
GameSettings_shouldRenderClouds GameSettings_ "func_74309_c" "()Z"
GLAllocation_createDirectByteBuffer GLAllocation_ "func_74524_c" "(I)Ljava/nio/ByteBuffer;"
GLAllocation_createDirectIntBuffer GLAllocation_ "func_74527_f" "(I)Ljava/nio/IntBuffer;"
GuiOptions_actionPerformed GuiOptions_ "func_146284_a" "(L"+GuiButton_+";)V"
GuiOptions_initGui GuiOptions_ "func_73866_w_" "()V"
ICamera_setPosition ICamera_ "func_78547_a" "(DDD)V"
ItemRenderer_renderItemInFirstPerson ItemRenderer_ "func_78440_a" "(F)V"
ItemRenderer_renderOverlays ItemRenderer_ "func_78447_b" "(F)V"
Minecraft_displayGuiScreen Minecraft_ "func_147108_a" "(L"+GuiScreen_+";)V"
Minecraft_startGame Minecraft_ "func_71384_a" "()V"
OpenGlHelper_setActiveTexture OpenGlHelper_ "func_77473_a" "(I)V"
Render_renderShadow Render_ "func_76975_c" "(L"+Entity_.name+";DDDFF)V"
RenderBlocks_renderBlockFluids RenderBlocks_ "func_147721_p" "(L"+Block_+";III)Z"
RenderBlocks_renderStdBlockWithCM RenderBlocks_ "func_147736_d" "(L"+Block_+";IIIFFF)Z"
RenderBlocks_renderBlockSandFalling RenderBlocks_ "func_147749_a" "(L"+Block_+";L"+World_+";IIII)V"
RenderBlocks_renderStdBlockWithAO RenderBlocks_ "func_147751_a" "(L"+Block_+";IIIFFF)Z"
RenderBlocks_renderBlockCactusImpl RenderBlocks_ "func_147754_e" "(L"+Block_+";IIIFFF)Z"
RenderBlocks_renderBlockDoor RenderBlocks_ "func_147760_u" "(L"+Block_+";III)Z"
RenderBlocks_renderBlockBed RenderBlocks_ "func_147773_v" "(L"+Block_+";III)Z"
RenderBlocks_renderBlockByRenderType RenderBlocks_ "func_147805_b" "(L"+Block_+";III)Z"
RenderBlocks_renderStdBlockWithAOP RenderBlocks_ "func_147808_b" "(L"+Block_+";IIIFFF)Z"
RenderBlocks_renderPistonExtension RenderBlocks_ "func_147809_c" "(L"+Block_+";IIIZ)Z"
RenderDragon_shouldRenderPass RenderDragon_ "func_77032_a" "(L"+EntityDragon_+";IF)I"
RenderEnderman_shouldRenderPass RenderEnderman_ "func_77032_a" "(L"+EntityEnderman_+";IF)I"
RenderSpider_shouldRenderPass RenderSpider_ "func_77032_a" "(L"+EntitySpider_+";IF)I"
RendererLivingEntity_doRender RendererLivingEntity_ "func_76986_a" "(L"+EntityLivingBase_+";DDDFF)V"
RendererLivingEntity_renderEquippedItems RendererLivingEntity_ "func_77029_c" "(L"+EntityLivingBase_+";F)V"
RendererLivingEntity_getColorMultiplier RendererLivingEntity_ "func_77030_a" "(L"+EntityLivingBase_+";FF)I"
RendererLivingEntity_renderLabel RendererLivingEntity_ "func_96449_a" "(L"+EntityLivingBase_+";DDDLjava/lang/String;FD)V"
RenderGlobal_renderEntities RenderGlobal_ "func_147589_a" "(L"+EntityLivingBase_.name+";L"+ICamera_.name+";F)V"
RenderGlobal_renderSky RenderGlobal_ "func_72714_a" "(F)V"
RenderGlobal_drawBlockDamageTexture RenderGlobal_ "func_72717_a" "(L"+Tessellator_.name+";L"+EntityPlayer_.name+";F)V"
RenderGlobal_renderClouds RenderGlobal_ "func_72718_b" "(F)V"
RenderGlobal_sortAndRender RenderGlobal_ "func_72719_a" "(L"+EntityLivingBase_.name+";ID)I"
RenderGlobal_clipRenderersByFrustum RenderGlobal_ "func_72729_a" "(L"+ICamera_.name+";F)V"
RenderGlobal_drawSelectionBox RenderGlobal_ "func_72731_b" "(L"+EntityPlayer_.name+";L"+MovingObjectPosition_.name+";IF)V"
RenderGlobal_renderAllRenderLists RenderGlobal_ "func_72733_a" "(ID)V"
IResourceManager_getResource IResourceManager_ "func_110536_a" "(L"+ResourceLocation_.name+";)L"+IResource_.name+";"
Stitcher_getCurrentWidth Stitcher_ "func_110935_a" "()I"
Tessellator_sortQuad Tessellator_ "func_147564_a" "(FFF)L"+TesselatorVertexState_.name+";"
Tessellator_setNormal Tessellator_ "func_78375_b" "(FFF)V"
Tessellator_addVertex Tessellator_ "func_78377_a" "(DDD)V"
Tessellator_reset Tessellator_ "func_78379_d" "()V"
Tessellator_draw Tessellator_ "func_78381_a" "()I"
TextureAtlasSprite_loadSprite TextureAtlasSprite_ "func_130100_a" "(L"+IResource_.name+";)V"
TextureAtlasSprite_getFrameTextureData TextureAtlasSprite_ "func_147965_a" "(I)[[I"
TextureAtlasSprite_getIconName TextureAtlasSprite_ "func_94215_i" "()Ljava/lang/String;"
TextureAtlasSprite_updateAnimation TextureAtlasSprite_ "func_94219_l" "()V"
TextureCompass_updateCompass TextureCompass_ "func_94241_a" "(L"+World_.name+";DDDZZ)V"
TextureManager_onResourceManagerReload TextureManager_ "func_110549_a" "(L"+IResourceManager_.name+";)V"
TextureManager_bindTexture TextureManager_ "func_110577_a" "(L"+ResourceLocation_.name+";)V"
TextureMap_loadTextureAtlas TextureMap_ "func_110571_b" "(L"+IResourceManager_.name+";)V"
TextureMap_getIconResLoc TextureMap_ "func_147634_a" "(L"+ResourceLocation_.name+";I)L"+ResourceLocation_.name+";"
TextureMap_updateAnimations TextureMap_ "func_94248_c" "()V"
ITextureObject_loadTexture ITextureObject_ "func_110551_a" "(L"+IResourceManager_.name+";)V"
ITextureObject_getGlTextureId ITextureObject_ "func_110552_b" "()I"
TextureUtil_uploadTexture TextureUtil_ "func_110988_a" "(I[III)V"
TextureUtil_uploadTextureImageAllocate TextureUtil_ "func_110989_a" "(ILjava/awt/image/BufferedImage;ZZ)I"
TextureUtil_allocateTexture TextureUtil_ "func_110991_a" "(III)V"
TextureUtil_allocateTextureMipmapAniso TextureUtil_ "func_147946_a" "(IIIIF)V"
TextureUtil_uploadTexSub TextureUtil_ "func_147955_a" "([[IIIIIZZ)V"
TextureUtil_bindTexture TextureUtil_ "func_94277_a" "(I)V"
WorldClient_getCelestialAngle WorldClient_ "func_72826_c" "(F)F"
WorldClient_getRainStrength WorldClient_ "func_72867_j" "(F)F"
Frustrum_setPosition Frustrum_ ICamera_setPosition.name ICamera_setPosition.desc
+17 -9
View File
@@ -1,8 +1,7 @@
# Make all Tessellator fields public because using accessors for these would be too much rework right now
public net.minecraft.client.renderer.Tessellator field_78394_d # byteBuffer
public net.minecraft.client.renderer.Tessellator field_147568_c # intBuffer
public net.minecraft.client.renderer.Tessellator field_147566_d # floatBuffer
public net.minecraft.client.renderer.Tessellator field_147567_e # shortBuffer
public net.minecraft.client.renderer.EntityRenderer func_78476_b(FI)V # void renderHand(float, int)
public net.minecraft.client.renderer.RenderGlobal field_72765_l # worldRenderers
public net.minecraft.client.renderer.Tessellator field_78405_h # rawBuffer
public net.minecraft.client.renderer.Tessellator field_78406_i # vertexCount
public net.minecraft.client.renderer.Tessellator field_78403_j # textureU
@@ -15,13 +14,22 @@ public net.minecraft.client.renderer.Tessellator field_78414_p # hasBrightness
public net.minecraft.client.renderer.Tessellator field_78413_q # hasNormals
public net.minecraft.client.renderer.Tessellator field_147569_p # rawBufferIndex
public net.minecraft.client.renderer.Tessellator field_78411_s # addedVertices
public net.minecraft.client.renderer.Tessellator field_78410_t # isColorDisabled
public net.minecraft.client.renderer.Tessellator field_78409_u # drawMode
public net.minecraft.client.renderer.Tessellator field_78408_v # xOffset
public net.minecraft.client.renderer.Tessellator field_78407_w # yOffset
public net.minecraft.client.renderer.Tessellator field_78417_x # zOffset
public net.minecraft.client.renderer.Tessellator field_78416_y # normal
public net.minecraft.client.renderer.Tessellator field_78415_z # isDrawing
public net.minecraft.client.renderer.Tessellator field_78388_E # bufferSize
public net.minecraft.client.renderer.Tessellator func_78379_d()V # reset
public net.minecraft.client.renderer.EntityRenderer func_78476_b(FI)V # renderHand
public net.minecraft.client.renderer.Tessellator func_78379_d()V # void reset()
public net.minecraft.client.model.ModelRenderer field_78812_q # compiled
public net.minecraft.client.model.ModelRenderer field_78811_r # displayList
public net.minecraft.client.renderer.entity.RendererLivingEntity field_77045_g # mainModel
public net.minecraft.client.renderer.entity.RendererLivingEntity field_77046_h # renderPassModel
public net.minecraft.client.renderer.texture.AbstractTexture field_110553_a # glTextureId
public net.minecraft.client.renderer.texture.TextureAtlasSprite field_147966_k # useAnisotropicFiltering
public net.minecraft.client.renderer.texture.TextureMap func_147634_a(Lnet/minecraft/util/ResourceLocation;I)Lnet/minecraft/util/ResourceLocation; # ResourceLocation completeResourceLocation(ResourceLocation, int)
-232
View File
@@ -1,232 +0,0 @@
diff U3 net/minecraft/client/model/ModelRenderer.java net/minecraft/client/model/ModelRenderer.java
--- net/minecraft/client/model/ModelRenderer.java Sun Jul 06 20:27:14 2014
+++ net/minecraft/client/model/ModelRenderer.java Sat Jul 12 03:12:44 2014
@@ -305,4 +305,18 @@
this.textureHeight = (float)p_78787_2_;
return this;
}
+
+ public boolean getCompiled() {
+ return compiled;
+ }
+ public int getDisplayList() {
+ return displayList;
+ }
+ public void resetDisplayList() {
+ if (this.compiled) {
+ GLAllocation.deleteDisplayLists(this.displayList);
+ this.displayList = 0;
+ this.compiled = false;
+ }
+ }
}
\ No newline at end of file
diff U3 net/minecraft/client/renderer/Tessellator.java net/minecraft/client/renderer/Tessellator.java
--- net/minecraft/client/renderer/Tessellator.java Sun Jul 06 20:27:14 2014
+++ net/minecraft/client/renderer/Tessellator.java Sun Jul 06 21:01:03 2014
@@ -24,70 +24,76 @@
public int textureID = 0;
/** The byte buffer used for GL allocation. */
- private static ByteBuffer byteBuffer = GLAllocation.createDirectByteBuffer(nativeBufferSize * 4);
+ public /*static*/ ByteBuffer byteBuffer = GLAllocation.createDirectByteBuffer(nativeBufferSize * 4);
/** The same memory as byteBuffer, but referenced as an integer buffer. */
- private static IntBuffer intBuffer = byteBuffer.asIntBuffer();
+ public /*static*/ IntBuffer intBuffer = byteBuffer.asIntBuffer();
/** The same memory as byteBuffer, but referenced as an float buffer. */
- private static FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
+ public /*static*/ FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
/** The same memory as byteBuffer, but referenced as an short buffer. */
- private static ShortBuffer shortBuffer = byteBuffer.asShortBuffer();
+ public /*static*/ ShortBuffer shortBuffer = byteBuffer.asShortBuffer();
/** Raw integer array. */
- private int[] rawBuffer;
+ public int[] rawBuffer;
/**
* The number of vertices to be drawn in the next draw call. Reset to 0 between draw calls.
*/
- private int vertexCount;
+ public int vertexCount;
/** The first coordinate to be used for the texture. */
- private double textureU;
+ public double textureU;
/** The second coordinate to be used for the texture. */
- private double textureV;
- private int brightness;
+ public double textureV;
+ public int brightness;
/** The color (RGBA) value to be used for the following draw call. */
- private int color;
+ public int color;
/**
* Whether the current draw object for this tessellator has color values.
*/
- private boolean hasColor;
+ public boolean hasColor;
/**
* Whether the current draw object for this tessellator has texture coordinates.
*/
- private boolean hasTexture;
- private boolean hasBrightness;
+ public boolean hasTexture;
+ public boolean hasBrightness;
/**
* Whether the current draw object for this tessellator has normal values.
*/
- private boolean hasNormals;
+ public boolean hasNormals;
/** The index into the raw buffer to be used for the next data. */
- private int rawBufferIndex;
+ public int rawBufferIndex;
/**
* The number of vertices manually added to the given draw call. This differs from vertexCount because it adds extra
* vertices when converting quads to triangles.
*/
- private int addedVertices;
+ public int addedVertices;
/** Disables all color information for the following draw call. */
private boolean isColorDisabled;
/** The draw mode currently being used by the tessellator. */
- private int drawMode;
+ public int drawMode;
/**
* An offset to be applied along the x-axis for all vertices in this draw call.
*/
- private double xOffset;
+ public double xOffset;
/**
* An offset to be applied along the y-axis for all vertices in this draw call.
*/
- private double yOffset;
+ public double yOffset;
/**
* An offset to be applied along the z-axis for all vertices in this draw call.
*/
- private double zOffset;
+ public double zOffset;
/** The normal to be applied to the face being drawn. */
private int normal;
/** The static instance of the Tessellator. */
public static final Tessellator instance = new Tessellator(2097152);
/** Whether this tessellator is currently in draw mode. */
- private boolean isDrawing;
+ public boolean isDrawing;
/** The size of the buffers used (in integers). */
- private int bufferSize;
+ public int bufferSize;
+ public float midTextureU;
+ public float midTextureV;
+ public float normalX;
+ public float normalY;
+ public float normalZ;
+ public float[] vertexPos = new float[16];
private static final String __OBFID = "CL_00000960";
private Tessellator(int p_i1250_1_)
@@ -245,7 +251,7 @@
/**
* Clears the tessellator state in preparation for new drawing.
*/
- private void reset()
+ public void reset()
{
this.vertexCount = 0;
this.byteBuffer.clear();
diff U3 net/minecraft/client/renderer/entity/RendererLivingEntity.java net/minecraft/client/renderer/entity/RendererLivingEntity.java
--- net/minecraft/client/renderer/entity/RendererLivingEntity.java Sun Jul 06 20:27:14 2014
+++ net/minecraft/client/renderer/entity/RendererLivingEntity.java Sun Jul 06 20:40:40 2014
@@ -31,9 +31,9 @@
{
private static final Logger logger = LogManager.getLogger();
private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png");
- protected ModelBase mainModel;
+ public ModelBase mainModel;
/** The model to be used during the render passes. */
- protected ModelBase renderPassModel;
+ public ModelBase renderPassModel;
private static final String __OBFID = "CL_00001012";
public static float NAME_TAG_RANGE = 64.0f;
diff U3 net/minecraft/client/renderer/texture/AbstractTexture.java net/minecraft/client/renderer/texture/AbstractTexture.java
--- net/minecraft/client/renderer/texture/AbstractTexture.java Sun Jul 06 20:27:14 2014
+++ net/minecraft/client/renderer/texture/AbstractTexture.java Sun Jul 06 20:40:40 2014
@@ -1,12 +1,14 @@
package net.minecraft.client.renderer.texture;
+import com.gtnewhorizons.angelica.client.MultiTexID;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public abstract class AbstractTexture implements ITextureObject
{
- protected int glTextureId = -1;
+ public int glTextureId = -1;
+ public MultiTexID multiTex;
private static final String __OBFID = "CL_00001047";
public int getGlTextureId()
@@ -27,4 +29,10 @@
this.glTextureId = -1;
}
}
+
+ @Override
+ public MultiTexID getMultiTexID() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
\ No newline at end of file
diff U3 net/minecraft/client/renderer/texture/ITextureObject.java net/minecraft/client/renderer/texture/ITextureObject.java
--- net/minecraft/client/renderer/texture/ITextureObject.java Sun Jul 06 20:27:14 2014
+++ net/minecraft/client/renderer/texture/ITextureObject.java Sun Jul 06 20:40:40 2014
@@ -3,6 +3,8 @@
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.IOException;
+
+import com.gtnewhorizons.angelica.client.MultiTexID;
import net.minecraft.client.resources.IResourceManager;
@SideOnly(Side.CLIENT)
@@ -11,4 +13,6 @@
void loadTexture(IResourceManager p_110551_1_) throws IOException;
int getGlTextureId();
+
+ MultiTexID getMultiTexID();
}
\ No newline at end of file
diff U3 net/minecraft/client/renderer/texture/TextureAtlasSprite.java net/minecraft/client/renderer/texture/TextureAtlasSprite.java
--- net/minecraft/client/renderer/texture/TextureAtlasSprite.java Sun Jul 06 20:27:14 2014
+++ net/minecraft/client/renderer/texture/TextureAtlasSprite.java Sun Jul 06 20:40:40 2014
@@ -24,7 +24,7 @@
protected List framesTextureData = Lists.newArrayList();
private AnimationMetadataSection animationMetadata;
protected boolean rotated;
- private boolean useAnisotropicFiltering;
+ public boolean useAnisotropicFiltering;
protected int originX;
protected int originY;
protected int width;
diff U3 net/minecraft/client/renderer/texture/TextureMap.java net/minecraft/client/renderer/texture/TextureMap.java
--- net/minecraft/client/renderer/texture/TextureMap.java Sun Jul 06 20:27:14 2014
+++ net/minecraft/client/renderer/texture/TextureMap.java Sun Jul 06 20:40:40 2014
@@ -49,6 +49,7 @@
private int anisotropicFiltering = 1;
private final TextureAtlasSprite missingImage = new TextureAtlasSprite("missingno");
private static final String __OBFID = "CL_00001058";
+ public int atlasWidth, atlasHeight; // shadersmod
public TextureMap(int p_i1281_1_, String p_i1281_2_)
{
@@ -292,7 +293,7 @@
ForgeHooksClient.onTextureStitchedPost(this);
}
- private ResourceLocation completeResourceLocation(ResourceLocation p_147634_1_, int p_147634_2_)
+ public ResourceLocation completeResourceLocation(ResourceLocation p_147634_1_, int p_147634_2_)
{
return p_147634_2_ == 0 ? new ResourceLocation(p_147634_1_.getResourceDomain(), String.format("%s/%s%s", new Object[] {this.basePath, p_147634_1_.getResourcePath(), ".png"})): new ResourceLocation(p_147634_1_.getResourceDomain(), String.format("%s/mipmaps/%s.%d%s", new Object[] {this.basePath, p_147634_1_.getResourcePath(), Integer.valueOf(p_147634_2_), ".png"}));
}