mirror of
https://github.com/GTNewHorizons/Angelica.git
synced 2026-11-08 12:35:01 +00:00
Make it build (#1)
* Adapt to examplemod1.7.10 structure * Fix broken static imports * apply spotless * Update mcmod.info * Start work on ATs * More ATs * Compile stubs * Recursive compilation stubs to fix missing items in stubs * Stub out the tesselator * Switch to IFMLLoadingPlugin * Move the namer classes out of todo * Yeet ATs * Change transformers paths * spotless, remove MANIFEST.MF as it is no longer needed * Use MCF namer * Revert "spotless, remove MANIFEST.MF as it is no longer needed" This reverts commit9be1abfe70. * Revert "Switch to IFMLLoadingPlugin" This reverts commit089a01e148. * At least make it work for now * Dirty implementation of include preprocessing * spotlessApply (#6) Co-authored-by: GitHub GTNH Actions <> Co-authored-by: Vladislav Laetansky <vlaetansky@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This commit is contained in:
151 files changed
+13774
-12502
No files matched your search
@@ -0,0 +1,22 @@
|
||||
# This is the universal Text Editor Configuration
|
||||
# for all GTNewHorizons projects
|
||||
# See: https://editorconfig.org/
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.{bat,ini}]
|
||||
end_of_line = crlf
|
||||
|
||||
[*.{dtd,json,info,mcmeta,md,sh,svg,xml,xsd,xsl,yaml,yml}]
|
||||
indent_size = 2
|
||||
|
||||
[*.lang]
|
||||
trim_trailing_whitespace = false
|
||||
@@ -0,0 +1,35 @@
|
||||
* text eol=lf
|
||||
|
||||
*.jar binary
|
||||
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.gif binary
|
||||
*.tif binary
|
||||
*.tiff binary
|
||||
*.ico binary
|
||||
*.svg text
|
||||
*.eps binary
|
||||
|
||||
*.kar binary
|
||||
*.m4a binary
|
||||
*.mid binary
|
||||
*.midi binary
|
||||
*.mp3 binary
|
||||
*.ogg binary
|
||||
*.ra binary
|
||||
|
||||
*.7z binary
|
||||
*.gz binary
|
||||
*.tar binary
|
||||
*.tgz binary
|
||||
*.zip binary
|
||||
|
||||
*.patch -text
|
||||
|
||||
*.bat text eol=crlf
|
||||
*.cmd text eol=crlf
|
||||
*.ps1 text eol=crlf
|
||||
|
||||
*autogenerated binary
|
||||
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if ! git diff --name-only HEAD HEAD~1 | grep -qF 'build.gradle'; then
|
||||
new_version="$(date +%s)"
|
||||
sed --in-place "s!^//version:.*!//version: $new_version!g" build.gradle
|
||||
git add build.gradle
|
||||
git commit -m "[ci skip] update build script version to $new_version"
|
||||
git push
|
||||
printf 'Updated buildscript version to %s\n' "$new_version"
|
||||
else
|
||||
printf 'Ignored buildscript version update: no changes detected\n'
|
||||
fi
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
name: Build and test
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ master, main ]
|
||||
push:
|
||||
branches: [ master, main ]
|
||||
|
||||
jobs:
|
||||
build-and-test:
|
||||
uses: GTNewHorizons/GTNH-Actions-Workflows/.github/workflows/build-and-test.yml@master
|
||||
secrets: inherit
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
name: Release tagged build
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: [ '*' ]
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
release-tags:
|
||||
uses: GTNewHorizons/GTNH-Actions-Workflows/.github/workflows/release-tags.yml@master
|
||||
secrets: inherit
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
.gradle
|
||||
.settings
|
||||
/.idea/
|
||||
/.vscode/
|
||||
/run/
|
||||
/build/
|
||||
/eclipse/
|
||||
.classpath
|
||||
.project
|
||||
/bin/
|
||||
/config/
|
||||
/crash-reports/
|
||||
/logs/
|
||||
options.txt
|
||||
/saves/
|
||||
usernamecache.json
|
||||
banned-ips.json
|
||||
banned-players.json
|
||||
eula.txt
|
||||
ops.json
|
||||
server.properties
|
||||
servers.dat
|
||||
usercache.json
|
||||
whitelist.json
|
||||
/out/
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
src/main/resources/mixins.*.json
|
||||
*.bat
|
||||
*.DS_Store
|
||||
!gradlew.bat
|
||||
@@ -0,0 +1,3 @@
|
||||
# Any Github changes require admin approval
|
||||
/.github/** @GTNewHorizons/admin
|
||||
|
||||
File renamed without changes.
@@ -0,0 +1,21 @@
|
||||
|
||||
configurations {
|
||||
compileStubs
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
compileStubsStubs
|
||||
compileStubs {
|
||||
compileClasspath += configurations.compileStubs
|
||||
}
|
||||
}
|
||||
|
||||
jar {
|
||||
manifest {
|
||||
attributes([
|
||||
"Manifest-Version" : 1.0,
|
||||
"TweakClass" : "com.gtnewhorizons.angelica.loading.SMCTweaker",
|
||||
"TweakOrder" : 1100,
|
||||
])
|
||||
}
|
||||
}
|
||||
+968
@@ -0,0 +1,968 @@
|
||||
//version: 1661114848
|
||||
/*
|
||||
DO NOT CHANGE THIS FILE!
|
||||
Also, you may replace this file at any time if there is an update available.
|
||||
Please check https://github.com/GTNewHorizons/ExampleMod1.7.10/blob/main/build.gradle for updates.
|
||||
*/
|
||||
|
||||
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
import org.gradle.internal.logging.text.StyledTextOutput.Style
|
||||
import org.gradle.internal.logging.text.StyledTextOutputFactory
|
||||
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Paths
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.zip.ZipEntry
|
||||
import java.util.zip.ZipInputStream
|
||||
import java.util.zip.ZipOutputStream
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
|
||||
maven {
|
||||
name 'forge'
|
||||
url 'https://maven.minecraftforge.net'
|
||||
}
|
||||
maven {
|
||||
// GTNH ForgeGradle Fork
|
||||
name = "GTNH Maven"
|
||||
url = "http://jenkins.usrv.eu:8081/nexus/content/groups/public/"
|
||||
}
|
||||
maven {
|
||||
name 'sonatype'
|
||||
url 'https://oss.sonatype.org/content/repositories/snapshots/'
|
||||
}
|
||||
maven {
|
||||
name 'Scala CI dependencies'
|
||||
url 'https://repo1.maven.org/maven2/'
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
classpath 'net.minecraftforge.gradle:ForgeGradle:1.2.9'
|
||||
}
|
||||
}
|
||||
plugins {
|
||||
id 'java-library'
|
||||
id 'idea'
|
||||
id 'eclipse'
|
||||
id 'scala'
|
||||
id 'maven-publish'
|
||||
id 'org.jetbrains.kotlin.jvm' version '1.5.30' apply false
|
||||
id 'org.jetbrains.kotlin.kapt' version '1.5.30' apply false
|
||||
id 'com.google.devtools.ksp' version '1.5.30-1.0.0' apply false
|
||||
id 'org.ajoberstar.grgit' version '4.1.1'
|
||||
id 'com.github.johnrengelman.shadow' version '4.0.4'
|
||||
id 'com.palantir.git-version' version '0.13.0' apply false
|
||||
id 'de.undercouch.download' version '5.0.1'
|
||||
id 'com.github.gmazzo.buildconfig' version '3.0.3' apply false
|
||||
id 'com.diffplug.spotless' version '6.7.2' apply false
|
||||
}
|
||||
boolean settingsupdated = verifySettingsGradle()
|
||||
settingsupdated = verifyGitAttributes() || settingsupdated
|
||||
if (settingsupdated)
|
||||
throw new GradleException("Settings has been updated, please re-run task.")
|
||||
|
||||
dependencies {
|
||||
implementation 'com.diffplug:blowdryer:1.6.0'
|
||||
}
|
||||
|
||||
apply plugin: 'com.diffplug.blowdryer'
|
||||
|
||||
if (project.file('.git/HEAD').isFile()) {
|
||||
apply plugin: 'com.palantir.git-version'
|
||||
}
|
||||
|
||||
def out = services.get(StyledTextOutputFactory).create('an-output')
|
||||
|
||||
apply plugin: 'forge'
|
||||
|
||||
def projectJavaVersion = JavaLanguageVersion.of(8)
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion.set(projectJavaVersion)
|
||||
}
|
||||
}
|
||||
|
||||
idea {
|
||||
module {
|
||||
inheritOutputDirs = true
|
||||
downloadJavadoc = true
|
||||
downloadSources = true
|
||||
}
|
||||
}
|
||||
|
||||
boolean disableSpotless = project.hasProperty("disableSpotless") ? project.disableSpotless.toBoolean() : false
|
||||
|
||||
if (!disableSpotless) {
|
||||
apply plugin: 'com.diffplug.spotless'
|
||||
apply from: Blowdryer.file('spotless.gradle')
|
||||
}
|
||||
|
||||
if (JavaVersion.current() != JavaVersion.VERSION_1_8) {
|
||||
throw new GradleException("This project requires Java 8, but it's running on " + JavaVersion.current())
|
||||
}
|
||||
|
||||
checkPropertyExists("modName")
|
||||
checkPropertyExists("modId")
|
||||
checkPropertyExists("modGroup")
|
||||
checkPropertyExists("autoUpdateBuildScript")
|
||||
checkPropertyExists("minecraftVersion")
|
||||
checkPropertyExists("forgeVersion")
|
||||
checkPropertyExists("replaceGradleTokenInFile")
|
||||
checkPropertyExists("gradleTokenModId")
|
||||
checkPropertyExists("gradleTokenModName")
|
||||
checkPropertyExists("gradleTokenVersion")
|
||||
checkPropertyExists("gradleTokenGroupName")
|
||||
checkPropertyExists("apiPackage")
|
||||
checkPropertyExists("accessTransformersFile")
|
||||
checkPropertyExists("usesMixins")
|
||||
checkPropertyExists("mixinPlugin")
|
||||
checkPropertyExists("mixinsPackage")
|
||||
checkPropertyExists("coreModClass")
|
||||
checkPropertyExists("containsMixinsAndOrCoreModOnly")
|
||||
checkPropertyExists("usesShadowedDependencies")
|
||||
checkPropertyExists("developmentEnvironmentUserName")
|
||||
|
||||
boolean noPublishedSources = project.hasProperty("noPublishedSources") ? project.noPublishedSources.toBoolean() : false
|
||||
boolean usesMixinDebug = project.hasProperty('usesMixinDebug') ?: project.usesMixins.toBoolean()
|
||||
boolean forceEnableMixins = project.hasProperty('forceEnableMixins') ? project.forceEnableMixins.toBoolean() : false
|
||||
String channel = project.hasProperty('channel') ? project.channel : 'stable'
|
||||
String mappingsVersion = project.hasProperty('mappingsVersion') ? project.mappingsVersion : '12'
|
||||
String javaSourceDir = "src/main/java/"
|
||||
String scalaSourceDir = "src/main/scala/"
|
||||
String kotlinSourceDir = "src/main/kotlin/"
|
||||
|
||||
String targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/")
|
||||
String targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/")
|
||||
String targetPackageKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/")
|
||||
if (!(getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists() || getFile(targetPackageKotlin).exists())) {
|
||||
throw new GradleException("Could not resolve \"modGroup\"! Could not find " + targetPackageJava + " or " + targetPackageScala + " or " + targetPackageKotlin)
|
||||
}
|
||||
|
||||
if (apiPackage) {
|
||||
targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
|
||||
targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
|
||||
targetPackageKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
|
||||
if (!(getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists() || getFile(targetPackageKotlin).exists())) {
|
||||
throw new GradleException("Could not resolve \"apiPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala + " or " + targetPackageKotlin)
|
||||
}
|
||||
}
|
||||
|
||||
if (accessTransformersFile) {
|
||||
String targetFile = "src/main/resources/META-INF/" + accessTransformersFile
|
||||
if (!getFile(targetFile).exists()) {
|
||||
throw new GradleException("Could not resolve \"accessTransformersFile\"! Could not find " + targetFile)
|
||||
}
|
||||
}
|
||||
|
||||
if (usesMixins.toBoolean()) {
|
||||
if (mixinsPackage.isEmpty() || mixinPlugin.isEmpty()) {
|
||||
throw new GradleException("\"mixinPlugin\" requires \"mixinsPackage\" and \"mixinPlugin\" to be set!")
|
||||
}
|
||||
|
||||
targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/")
|
||||
targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/")
|
||||
targetPackageKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/")
|
||||
if (!(getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists() || getFile(targetPackageKotlin).exists())) {
|
||||
throw new GradleException("Could not resolve \"mixinsPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala + " or " + targetPackageKotlin)
|
||||
}
|
||||
|
||||
String targetFileJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".java"
|
||||
String targetFileScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".scala"
|
||||
String targetFileScalaJava = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".java"
|
||||
String targetFileKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".kt"
|
||||
if (!(getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists() || getFile(targetFileKotlin).exists())) {
|
||||
throw new GradleException("Could not resolve \"mixinPlugin\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava + " or " + targetFileKotlin)
|
||||
}
|
||||
}
|
||||
|
||||
if (coreModClass) {
|
||||
String targetFileJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".java"
|
||||
String targetFileScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".scala"
|
||||
String targetFileScalaJava = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".java"
|
||||
String targetFileKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".kt"
|
||||
if (!(getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists() || getFile(targetFileKotlin).exists())) {
|
||||
throw new GradleException("Could not resolve \"coreModClass\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava + " or " + targetFileKotlin)
|
||||
}
|
||||
}
|
||||
|
||||
configurations.all {
|
||||
resolutionStrategy.cacheChangingModulesFor(0, TimeUnit.SECONDS)
|
||||
|
||||
// Make sure GregTech build won't time out
|
||||
System.setProperty("org.gradle.internal.http.connectionTimeout", 120000 as String)
|
||||
System.setProperty("org.gradle.internal.http.socketTimeout", 120000 as String)
|
||||
}
|
||||
|
||||
// Fix Jenkins' Git: chmod a file should not be detected as a change and append a '.dirty' to the version
|
||||
try {
|
||||
'git config core.fileMode false'.execute()
|
||||
}
|
||||
catch (Exception ignored) {
|
||||
out.style(Style.Failure).println("git isn't installed at all")
|
||||
}
|
||||
|
||||
// Pulls version first from the VERSION env and then git tag
|
||||
String identifiedVersion
|
||||
String versionOverride = System.getenv("VERSION") ?: null
|
||||
try {
|
||||
identifiedVersion = versionOverride == null ? gitVersion() : versionOverride
|
||||
}
|
||||
catch (Exception ignored) {
|
||||
out.style(Style.Failure).text(
|
||||
'This mod must be version controlled by Git AND the repository must provide at least one tag,\n' +
|
||||
'or the VERSION override must be set! ').style(Style.SuccessHeader).text('(Do NOT download from GitHub using the ZIP option, instead\n' +
|
||||
'clone the repository, see ').style(Style.Info).text('https://gtnh.miraheze.org/wiki/Development').style(Style.SuccessHeader).println(' for details.)'
|
||||
)
|
||||
versionOverride = 'NO-GIT-TAG-SET'
|
||||
identifiedVersion = versionOverride
|
||||
}
|
||||
version = minecraftVersion + '-' + identifiedVersion
|
||||
ext {
|
||||
modVersion = identifiedVersion
|
||||
}
|
||||
|
||||
if (identifiedVersion == versionOverride) {
|
||||
out.style(Style.Failure).text('Override version to ').style(Style.Identifier).text(modVersion).style(Style.Failure).println('!\7')
|
||||
}
|
||||
|
||||
group = modGroup
|
||||
if (project.hasProperty("customArchiveBaseName") && customArchiveBaseName) {
|
||||
archivesBaseName = customArchiveBaseName
|
||||
} else {
|
||||
archivesBaseName = modId
|
||||
}
|
||||
|
||||
def arguments = []
|
||||
def jvmArguments = []
|
||||
|
||||
if (usesMixins.toBoolean() || forceEnableMixins) {
|
||||
arguments += [
|
||||
"--tweakClass org.spongepowered.asm.launch.MixinTweaker"
|
||||
]
|
||||
if (usesMixinDebug.toBoolean()) {
|
||||
jvmArguments += [
|
||||
"-Dmixin.debug.countInjections=true",
|
||||
"-Dmixin.debug.verbose=true",
|
||||
"-Dmixin.debug.export=true"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
minecraft {
|
||||
version = minecraftVersion + '-' + forgeVersion + '-' + minecraftVersion
|
||||
runDir = 'run'
|
||||
|
||||
if (replaceGradleTokenInFile) {
|
||||
replaceIn replaceGradleTokenInFile
|
||||
if (gradleTokenModId) {
|
||||
replace gradleTokenModId, modId
|
||||
}
|
||||
if (gradleTokenModName) {
|
||||
replace gradleTokenModName, modName
|
||||
}
|
||||
if (gradleTokenVersion) {
|
||||
replace gradleTokenVersion, modVersion
|
||||
}
|
||||
if (gradleTokenGroupName) {
|
||||
replace gradleTokenGroupName, modGroup
|
||||
}
|
||||
}
|
||||
|
||||
clientIntellijRun {
|
||||
args(arguments)
|
||||
jvmArgs(jvmArguments)
|
||||
|
||||
if (developmentEnvironmentUserName) {
|
||||
args("--username", developmentEnvironmentUserName)
|
||||
}
|
||||
}
|
||||
|
||||
serverIntellijRun {
|
||||
args(arguments)
|
||||
jvmArgs(jvmArguments)
|
||||
}
|
||||
}
|
||||
|
||||
if (file('addon.gradle').exists()) {
|
||||
apply from: 'addon.gradle'
|
||||
}
|
||||
|
||||
apply from: 'repositories.gradle'
|
||||
|
||||
configurations {
|
||||
implementation.extendsFrom(shadowImplementation) // TODO: remove after all uses are refactored
|
||||
implementation.extendsFrom(shadowCompile)
|
||||
implementation.extendsFrom(shadeCompile)
|
||||
}
|
||||
|
||||
repositories {
|
||||
maven {
|
||||
name 'Overmind forge repo mirror'
|
||||
url 'https://gregtech.overminddl1.com/'
|
||||
}
|
||||
if (usesMixins.toBoolean() || forceEnableMixins) {
|
||||
maven {
|
||||
name 'sponge'
|
||||
url 'https://repo.spongepowered.org/repository/maven-public'
|
||||
}
|
||||
maven {
|
||||
url 'https://jitpack.io'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
if (usesMixins.toBoolean()) {
|
||||
annotationProcessor('org.ow2.asm:asm-debug-all:5.0.3')
|
||||
annotationProcessor('com.google.guava:guava:24.1.1-jre')
|
||||
annotationProcessor('com.google.code.gson:gson:2.8.6')
|
||||
annotationProcessor('org.spongepowered:mixin:0.8-SNAPSHOT')
|
||||
}
|
||||
if (usesMixins.toBoolean() || forceEnableMixins) {
|
||||
// using 0.8 to workaround a issue in 0.7 which fails mixin application
|
||||
compile('com.github.GTNewHorizons:SpongePoweredMixin:0.7.12-GTNH') {
|
||||
// Mixin includes a lot of dependencies that are too up-to-date
|
||||
exclude module: 'launchwrapper'
|
||||
exclude module: 'guava'
|
||||
exclude module: 'gson'
|
||||
exclude module: 'commons-io'
|
||||
exclude module: 'log4j-core'
|
||||
}
|
||||
compile('com.github.GTNewHorizons:SpongeMixins:1.5.0')
|
||||
}
|
||||
}
|
||||
|
||||
apply from: 'dependencies.gradle'
|
||||
|
||||
def mixingConfigRefMap = 'mixins.' + modId + '.refmap.json'
|
||||
def refMap = "${tasks.compileJava.temporaryDir}" + File.separator + mixingConfigRefMap
|
||||
def mixinSrg = "${tasks.reobf.temporaryDir}" + File.separator + "mixins.srg"
|
||||
|
||||
task generateAssets {
|
||||
if (usesMixins.toBoolean()) {
|
||||
def mixinConfigFile = getFile("/src/main/resources/mixins." + modId + ".json");
|
||||
if (!mixinConfigFile.exists()) {
|
||||
mixinConfigFile.text = """{
|
||||
"required": true,
|
||||
"minVersion": "0.7.11",
|
||||
"package": "${modGroup}.${mixinsPackage}",
|
||||
"plugin": "${modGroup}.${mixinPlugin}",
|
||||
"refmap": "${mixingConfigRefMap}",
|
||||
"target": "@env(DEFAULT)",
|
||||
"compatibilityLevel": "JAVA_8",
|
||||
"mixins": [],
|
||||
"client": [],
|
||||
"server": []
|
||||
}
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
task relocateShadowJar(type: ConfigureShadowRelocation) {
|
||||
target = tasks.shadowJar
|
||||
prefix = modGroup + ".shadow"
|
||||
}
|
||||
|
||||
shadowJar {
|
||||
project.configurations.shadeCompile.each { dep ->
|
||||
from(project.zipTree(dep)) {
|
||||
exclude 'META-INF', 'META-INF/**'
|
||||
}
|
||||
}
|
||||
|
||||
manifest {
|
||||
attributes(getManifestAttributes())
|
||||
}
|
||||
|
||||
minimize() // This will only allow shading for actually used classes
|
||||
configurations = [
|
||||
project.configurations.shadowImplementation,
|
||||
project.configurations.shadowCompile
|
||||
]
|
||||
dependsOn(relocateShadowJar)
|
||||
}
|
||||
|
||||
jar {
|
||||
project.configurations.shadeCompile.each { dep ->
|
||||
from(project.zipTree(dep)) {
|
||||
exclude 'META-INF', 'META-INF/**'
|
||||
}
|
||||
}
|
||||
|
||||
manifest {
|
||||
attributes(getManifestAttributes())
|
||||
}
|
||||
|
||||
if (usesShadowedDependencies.toBoolean()) {
|
||||
dependsOn(shadowJar)
|
||||
enabled = false
|
||||
}
|
||||
}
|
||||
|
||||
reobf {
|
||||
if (usesMixins.toBoolean()) {
|
||||
addExtraSrgFile mixinSrg
|
||||
}
|
||||
}
|
||||
|
||||
afterEvaluate {
|
||||
if (usesMixins.toBoolean()) {
|
||||
tasks.compileJava {
|
||||
options.compilerArgs += [
|
||||
"-AreobfSrgFile=${tasks.reobf.srg}",
|
||||
"-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"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
runClient {
|
||||
if (developmentEnvironmentUserName) {
|
||||
arguments += [
|
||||
"--username",
|
||||
developmentEnvironmentUserName
|
||||
]
|
||||
}
|
||||
|
||||
args(arguments)
|
||||
jvmArgs(jvmArguments)
|
||||
}
|
||||
|
||||
runServer {
|
||||
args(arguments)
|
||||
jvmArgs(jvmArguments)
|
||||
}
|
||||
|
||||
tasks.withType(JavaExec).configureEach {
|
||||
javaLauncher.set(
|
||||
javaToolchains.launcherFor {
|
||||
languageVersion = projectJavaVersion
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
processResources {
|
||||
// this will ensure that this task is redone when the versions change.
|
||||
inputs.property "version", project.version
|
||||
inputs.property "mcversion", project.minecraft.version
|
||||
exclude("spotless.gradle")
|
||||
|
||||
// replace stuff in mcmod.info, nothing else
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
include 'mcmod.info'
|
||||
|
||||
// replace modVersion and minecraftVersion
|
||||
expand "minecraftVersion": project.minecraft.version,
|
||||
"modVersion": modVersion,
|
||||
"modId": modId,
|
||||
"modName": modName
|
||||
}
|
||||
|
||||
if (usesMixins.toBoolean()) {
|
||||
from refMap
|
||||
}
|
||||
|
||||
// copy everything else that's not the mcmod.info
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
exclude 'mcmod.info'
|
||||
exclude 'spotless.gradle'
|
||||
}
|
||||
}
|
||||
|
||||
def getManifestAttributes() {
|
||||
def manifestAttributes = [:]
|
||||
if (!containsMixinsAndOrCoreModOnly.toBoolean() && (usesMixins.toBoolean() || coreModClass)) {
|
||||
manifestAttributes += ["FMLCorePluginContainsFMLMod": true]
|
||||
}
|
||||
|
||||
if (accessTransformersFile) {
|
||||
manifestAttributes += ["FMLAT": accessTransformersFile.toString()]
|
||||
}
|
||||
|
||||
if (coreModClass) {
|
||||
manifestAttributes += ["FMLCorePlugin": modGroup + "." + coreModClass]
|
||||
}
|
||||
|
||||
if (usesMixins.toBoolean()) {
|
||||
manifestAttributes += [
|
||||
"TweakClass" : "org.spongepowered.asm.launch.MixinTweaker",
|
||||
"MixinConfigs" : "mixins." + modId + ".json",
|
||||
"ForceLoadAsMod": !containsMixinsAndOrCoreModOnly.toBoolean()
|
||||
]
|
||||
}
|
||||
return manifestAttributes
|
||||
}
|
||||
|
||||
task sourcesJar(type: Jar) {
|
||||
from(sourceSets.main.allSource)
|
||||
from(file("$projectDir/LICENSE"))
|
||||
getArchiveClassifier().set('sources')
|
||||
}
|
||||
|
||||
task shadowDevJar(type: ShadowJar) {
|
||||
project.configurations.shadeCompile.each { dep ->
|
||||
from(project.zipTree(dep)) {
|
||||
exclude 'META-INF', 'META-INF/**'
|
||||
}
|
||||
}
|
||||
|
||||
from sourceSets.main.output
|
||||
getArchiveClassifier().set("dev")
|
||||
|
||||
manifest {
|
||||
attributes(getManifestAttributes())
|
||||
}
|
||||
|
||||
minimize() // This will only allow shading for actually used classes
|
||||
configurations = [
|
||||
project.configurations.shadowImplementation,
|
||||
project.configurations.shadowCompile
|
||||
]
|
||||
}
|
||||
|
||||
task relocateShadowDevJar(type: ConfigureShadowRelocation) {
|
||||
target = tasks.shadowDevJar
|
||||
prefix = modGroup + ".shadow"
|
||||
}
|
||||
|
||||
task circularResolverJar(type: Jar) {
|
||||
dependsOn(relocateShadowDevJar)
|
||||
dependsOn(shadowDevJar)
|
||||
enabled = false
|
||||
}
|
||||
|
||||
task devJar(type: Jar) {
|
||||
project.configurations.shadeCompile.each { dep ->
|
||||
from(project.zipTree(dep)) {
|
||||
exclude 'META-INF', 'META-INF/**'
|
||||
}
|
||||
}
|
||||
|
||||
from sourceSets.main.output
|
||||
getArchiveClassifier().set("dev")
|
||||
|
||||
manifest {
|
||||
attributes(getManifestAttributes())
|
||||
}
|
||||
|
||||
if (usesShadowedDependencies.toBoolean()) {
|
||||
dependsOn(circularResolverJar)
|
||||
enabled = false
|
||||
}
|
||||
}
|
||||
|
||||
task apiJar(type: Jar) {
|
||||
from(sourceSets.main.allSource) {
|
||||
include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + '/**'
|
||||
}
|
||||
|
||||
from(sourceSets.main.output) {
|
||||
include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + '/**'
|
||||
}
|
||||
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
include("LICENSE")
|
||||
}
|
||||
|
||||
getArchiveClassifier().set('api')
|
||||
}
|
||||
|
||||
artifacts {
|
||||
if (!noPublishedSources) {
|
||||
archives sourcesJar
|
||||
}
|
||||
archives devJar
|
||||
if (apiPackage) {
|
||||
archives apiJar
|
||||
}
|
||||
}
|
||||
|
||||
// The gradle metadata includes all of the additional deps that we disabled from POM generation (including forgeBin with no groupID),
|
||||
// and isn't strictly needed with the POM so just disable it.
|
||||
tasks.withType(GenerateModuleMetadata) {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
// workaround variable hiding in pom processing
|
||||
def projectConfigs = project.configurations
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
maven(MavenPublication) {
|
||||
from components.java
|
||||
if (usesShadowedDependencies.toBoolean()) {
|
||||
artifact source: shadowJar, classifier: ""
|
||||
}
|
||||
if (!noPublishedSources) {
|
||||
artifact source: sourcesJar, classifier: "sources"
|
||||
}
|
||||
artifact source: usesShadowedDependencies.toBoolean() ? shadowDevJar : devJar, classifier: "dev"
|
||||
if (apiPackage) {
|
||||
artifact source: apiJar, classifier: "api"
|
||||
}
|
||||
|
||||
groupId = System.getenv("ARTIFACT_GROUP_ID") ?: "com.github.GTNewHorizons"
|
||||
artifactId = System.getenv("ARTIFACT_ID") ?: project.name
|
||||
// Using the identified version, not project.version as it has the prepended 1.7.10
|
||||
version = System.getenv("RELEASE_VERSION") ?: identifiedVersion
|
||||
|
||||
// remove extra garbage from minecraft and minecraftDeps configuration
|
||||
pom.withXml {
|
||||
def badArtifacts = [:].withDefault { [] as Set<String> }
|
||||
for (configuration in [
|
||||
projectConfigs.minecraft,
|
||||
projectConfigs.minecraftDeps
|
||||
]) {
|
||||
for (dependency in configuration.allDependencies) {
|
||||
badArtifacts[dependency.group == null ? "" : dependency.group] += dependency.name
|
||||
}
|
||||
}
|
||||
// example for specifying extra stuff to ignore
|
||||
// badArtifacts["org.example.group"] += "artifactName"
|
||||
|
||||
Node pomNode = asNode()
|
||||
pomNode.dependencies.'*'.findAll() {
|
||||
badArtifacts[it.groupId.text()].contains(it.artifactId.text())
|
||||
}.each() {
|
||||
it.parent().remove(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
maven {
|
||||
url = "http://jenkins.usrv.eu:8081/nexus/content/repositories/releases"
|
||||
credentials {
|
||||
username = System.getenv("MAVEN_USER") ?: "NONE"
|
||||
password = System.getenv("MAVEN_PASSWORD") ?: "NONE"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Updating
|
||||
task updateBuildScript {
|
||||
doLast {
|
||||
if (performBuildScriptUpdate(projectDir.toString())) return
|
||||
|
||||
print("Build script already up-to-date!")
|
||||
}
|
||||
}
|
||||
|
||||
if (!project.getGradle().startParameter.isOffline() && isNewBuildScriptVersionAvailable(projectDir.toString())) {
|
||||
if (autoUpdateBuildScript.toBoolean()) {
|
||||
performBuildScriptUpdate(projectDir.toString())
|
||||
} else {
|
||||
out.style(Style.SuccessHeader).println("Build script update available! Run 'gradle updateBuildScript'")
|
||||
}
|
||||
}
|
||||
|
||||
static URL availableBuildScriptUrl() {
|
||||
new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/master/build.gradle")
|
||||
}
|
||||
|
||||
static URL exampleSettingsGradleUrl() {
|
||||
new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/master/settings.gradle.example")
|
||||
}
|
||||
|
||||
static URL exampleGitAttributesUrl() {
|
||||
new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/master/.gitattributes")
|
||||
}
|
||||
|
||||
|
||||
boolean verifyGitAttributes() {
|
||||
def gitattributesFile = getFile(".gitattributes")
|
||||
if (!gitattributesFile.exists()) {
|
||||
println("Downloading default .gitattributes")
|
||||
exampleGitAttributesUrl().withInputStream { i -> gitattributesFile.withOutputStream { it << i } }
|
||||
exec {
|
||||
workingDir '.'
|
||||
commandLine 'git', 'add', '--renormalize', '.'
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
boolean verifySettingsGradle() {
|
||||
def settingsFile = getFile("settings.gradle")
|
||||
if (!settingsFile.exists()) {
|
||||
println("Downloading default settings.gradle")
|
||||
exampleSettingsGradleUrl().withInputStream { i -> settingsFile.withOutputStream { it << i } }
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
boolean performBuildScriptUpdate(String projectDir) {
|
||||
if (isNewBuildScriptVersionAvailable(projectDir)) {
|
||||
def buildscriptFile = getFile("build.gradle")
|
||||
availableBuildScriptUrl().withInputStream { i -> buildscriptFile.withOutputStream { it << i } }
|
||||
out.style(Style.Success).print("Build script updated. Please REIMPORT the project or RESTART your IDE!")
|
||||
boolean settingsupdated = verifySettingsGradle()
|
||||
settingsupdated = verifyGitAttributes() || settingsupdated
|
||||
if (settingsupdated)
|
||||
throw new GradleException("Settings has been updated, please re-run task.")
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
boolean isNewBuildScriptVersionAvailable(String projectDir) {
|
||||
Map parameters = ["connectTimeout": 2000, "readTimeout": 2000]
|
||||
|
||||
String currentBuildScript = getFile("build.gradle").getText()
|
||||
String currentBuildScriptHash = getVersionHash(currentBuildScript)
|
||||
String availableBuildScript = availableBuildScriptUrl().newInputStream(parameters).getText()
|
||||
String availableBuildScriptHash = getVersionHash(availableBuildScript)
|
||||
|
||||
boolean isUpToDate = currentBuildScriptHash.empty || availableBuildScriptHash.empty || currentBuildScriptHash == availableBuildScriptHash
|
||||
return !isUpToDate
|
||||
}
|
||||
|
||||
static String getVersionHash(String buildScriptContent) {
|
||||
String versionLine = buildScriptContent.find("^//version: [a-z0-9]*")
|
||||
if (versionLine != null) {
|
||||
return versionLine.split(": ").last()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
configure(updateBuildScript) {
|
||||
group = 'forgegradle'
|
||||
description = 'Updates the build script to the latest version'
|
||||
}
|
||||
|
||||
// Parameter Deobfuscation
|
||||
|
||||
task deobfParams {
|
||||
doLast {
|
||||
|
||||
String mcpDir = "$project.gradle.gradleUserHomeDir/caches/minecraft/de/oceanlabs/mcp/mcp_$channel/$mappingsVersion"
|
||||
String mcpZIP = "$mcpDir/mcp_$channel-$mappingsVersion-${minecraftVersion}.zip"
|
||||
String paramsCSV = "$mcpDir/params.csv"
|
||||
|
||||
download.run {
|
||||
src "https://maven.minecraftforge.net/de/oceanlabs/mcp/mcp_$channel/$mappingsVersion-$minecraftVersion/mcp_$channel-$mappingsVersion-${minecraftVersion}.zip"
|
||||
dest mcpZIP
|
||||
overwrite false
|
||||
}
|
||||
|
||||
if (!file(paramsCSV).exists()) {
|
||||
println("Extracting MCP archive ...")
|
||||
unzip(mcpZIP, mcpDir)
|
||||
}
|
||||
|
||||
println("Parsing params.csv ...")
|
||||
Map<String, String> params = new HashMap<>()
|
||||
Files.lines(Paths.get(paramsCSV)).forEach { line ->
|
||||
String[] cells = line.split(",")
|
||||
if (cells.length > 2 && cells[0].matches("p_i?\\d+_\\d+_")) {
|
||||
params.put(cells[0], cells[1])
|
||||
}
|
||||
}
|
||||
|
||||
out.style(Style.Success).println("Modified ${replaceParams(file("$projectDir/src/main/java"), params)} files!")
|
||||
out.style(Style.Failure).println("Don't forget to verify that the code still works as before!\n It could be broken due to duplicate variables existing now\n or parameters taking priority over other variables.")
|
||||
}
|
||||
}
|
||||
|
||||
static int replaceParams(File file, Map<String, String> params) {
|
||||
int fileCount = 0
|
||||
|
||||
if (file.isDirectory()) {
|
||||
for (File f : file.listFiles()) {
|
||||
fileCount += replaceParams(f, params)
|
||||
}
|
||||
return fileCount
|
||||
}
|
||||
println("Visiting ${file.getName()} ...")
|
||||
try {
|
||||
String content = new String(Files.readAllBytes(file.toPath()))
|
||||
int hash = content.hashCode()
|
||||
params.forEach { key, value ->
|
||||
content = content.replaceAll(key, value)
|
||||
}
|
||||
if (hash != content.hashCode()) {
|
||||
Files.write(file.toPath(), content.getBytes("UTF-8"))
|
||||
return 1
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// Credit: bitsnaps (https://gist.github.com/bitsnaps/00947f2dce66f4bbdabc67d7e7b33681)
|
||||
static unzip(String zipFileName, String outputDir) {
|
||||
byte[] buffer = new byte[16384]
|
||||
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFileName))
|
||||
ZipEntry zipEntry = zis.getNextEntry()
|
||||
while (zipEntry != null) {
|
||||
File newFile = new File(outputDir + File.separator, zipEntry.name)
|
||||
if (zipEntry.isDirectory()) {
|
||||
if (!newFile.isDirectory() && !newFile.mkdirs()) {
|
||||
throw new IOException("Failed to create directory $newFile")
|
||||
}
|
||||
} else {
|
||||
// fix for Windows-created archives
|
||||
File parent = newFile.parentFile
|
||||
if (!parent.isDirectory() && !parent.mkdirs()) {
|
||||
throw new IOException("Failed to create directory $parent")
|
||||
}
|
||||
// write file content
|
||||
FileOutputStream fos = new FileOutputStream(newFile)
|
||||
int len = 0
|
||||
while ((len = zis.read(buffer)) > 0) {
|
||||
fos.write(buffer, 0, len)
|
||||
}
|
||||
fos.close()
|
||||
}
|
||||
zipEntry = zis.getNextEntry()
|
||||
}
|
||||
zis.closeEntry()
|
||||
zis.close()
|
||||
}
|
||||
|
||||
configure(deobfParams) {
|
||||
group = 'forgegradle'
|
||||
description = 'Rename all obfuscated parameter names inherited from Minecraft classes'
|
||||
}
|
||||
|
||||
// Dependency Deobfuscation
|
||||
|
||||
def deobf(String sourceURL) {
|
||||
try {
|
||||
URL url = new URL(sourceURL)
|
||||
String fileName = url.getFile()
|
||||
|
||||
//get rid of directories:
|
||||
int lastSlash = fileName.lastIndexOf("/")
|
||||
if (lastSlash > 0) {
|
||||
fileName = fileName.substring(lastSlash + 1)
|
||||
}
|
||||
//get rid of extension:
|
||||
if (fileName.endsWith(".jar") || fileName.endsWith(".litemod")) {
|
||||
fileName = fileName.substring(0, fileName.lastIndexOf("."))
|
||||
}
|
||||
|
||||
String hostName = url.getHost()
|
||||
if (hostName.startsWith("www.")) {
|
||||
hostName = hostName.substring(4)
|
||||
}
|
||||
List parts = Arrays.asList(hostName.split("\\."))
|
||||
Collections.reverse(parts)
|
||||
hostName = String.join(".", parts)
|
||||
|
||||
return deobf(sourceURL, "$hostName/$fileName")
|
||||
} catch (Exception e) {
|
||||
return deobf(sourceURL, "deobf/${sourceURL.hashCode()}")
|
||||
}
|
||||
}
|
||||
|
||||
// The method above is to be preferred. Use this method if the filename is not at the end of the URL.
|
||||
def deobf(String sourceURL, String rawFileName) {
|
||||
String bon2Version = "2.5.1"
|
||||
String fileName = URLDecoder.decode(rawFileName, "UTF-8")
|
||||
String cacheDir = "$project.gradle.gradleUserHomeDir/caches"
|
||||
String bon2Dir = "$cacheDir/forge_gradle/deobf"
|
||||
String bon2File = "$bon2Dir/BON2-${bon2Version}.jar"
|
||||
String obfFile = "$cacheDir/modules-2/files-2.1/${fileName}.jar"
|
||||
String deobfFile = "$cacheDir/modules-2/files-2.1/${fileName}-deobf.jar"
|
||||
|
||||
if (file(deobfFile).exists()) {
|
||||
return files(deobfFile)
|
||||
}
|
||||
|
||||
String mappingsVer
|
||||
String remoteMappings = project.hasProperty('remoteMappings') ? project.remoteMappings : 'https://raw.githubusercontent.com/MinecraftForge/FML/1.7.10/conf/'
|
||||
if (remoteMappings) {
|
||||
String id = "${forgeVersion.split("\\.")[3]}-$minecraftVersion"
|
||||
String mappingsZIP = "$cacheDir/forge_gradle/maven_downloader/de/oceanlabs/mcp/mcp_snapshot_nodoc/$id/mcp_snapshot_nodoc-${id}.zip"
|
||||
|
||||
zipMappings(mappingsZIP, remoteMappings, bon2Dir)
|
||||
|
||||
mappingsVer = "snapshot_$id"
|
||||
} else {
|
||||
mappingsVer = "${channel}_$mappingsVersion"
|
||||
}
|
||||
|
||||
download.run {
|
||||
src "http://jenkins.usrv.eu:8081/nexus/content/repositories/releases/com/github/parker8283/BON2/$bon2Version-CUSTOM/BON2-$bon2Version-CUSTOM-all.jar"
|
||||
dest bon2File
|
||||
quiet true
|
||||
overwrite false
|
||||
}
|
||||
|
||||
download.run {
|
||||
src sourceURL
|
||||
dest obfFile
|
||||
quiet true
|
||||
overwrite false
|
||||
}
|
||||
|
||||
exec {
|
||||
commandLine 'java', '-jar', bon2File, '--inputJar', obfFile, '--outputJar', deobfFile, '--mcVer', minecraftVersion, '--mappingsVer', mappingsVer, '--notch'
|
||||
workingDir bon2Dir
|
||||
standardOutput = new FileOutputStream("${deobfFile}.log")
|
||||
}
|
||||
|
||||
return files(deobfFile)
|
||||
}
|
||||
|
||||
def zipMappings(String zipPath, String url, String bon2Dir) {
|
||||
File zipFile = new File(zipPath)
|
||||
if (zipFile.exists()) {
|
||||
return
|
||||
}
|
||||
|
||||
String fieldsCache = "$bon2Dir/data/fields.csv"
|
||||
String methodsCache = "$bon2Dir/data/methods.csv"
|
||||
|
||||
download.run {
|
||||
src "${url}fields.csv"
|
||||
dest fieldsCache
|
||||
quiet true
|
||||
}
|
||||
download.run {
|
||||
src "${url}methods.csv"
|
||||
dest methodsCache
|
||||
quiet true
|
||||
}
|
||||
|
||||
zipFile.getParentFile().mkdirs()
|
||||
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))
|
||||
|
||||
zos.putNextEntry(new ZipEntry("fields.csv"))
|
||||
Files.copy(Paths.get(fieldsCache), zos)
|
||||
zos.closeEntry()
|
||||
|
||||
zos.putNextEntry(new ZipEntry("methods.csv"))
|
||||
Files.copy(Paths.get(methodsCache), zos)
|
||||
zos.closeEntry()
|
||||
|
||||
zos.close()
|
||||
}
|
||||
|
||||
// Helper methods
|
||||
|
||||
def checkPropertyExists(String propertyName) {
|
||||
if (!project.hasProperty(propertyName)) {
|
||||
throw new GradleException("This project requires a property \"" + propertyName + "\"! Please add it your \"gradle.properties\". You can find all properties and their description here: https://github.com/GTNewHorizons/ExampleMod1.7.10/blob/main/gradle.properties")
|
||||
}
|
||||
}
|
||||
|
||||
def getFile(String relativePath) {
|
||||
return new File(projectDir, relativePath)
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
|
||||
dependencies {
|
||||
compileOnly(sourceSets.compileStubs.output)
|
||||
compileStubs(sourceSets.compileStubsStubs.output)
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
modName = Angelica
|
||||
|
||||
# This is a case-sensitive string to identify your mod. Convention is to use lower case.
|
||||
modId = angelica
|
||||
|
||||
modGroup = com.gtnewhorizons.angelica
|
||||
|
||||
# WHY is there no version field?
|
||||
# The build script relies on git to provide a version via tags. It is super easy and will enable you to always know the
|
||||
# code base or your binary. Check out this tutorial: https://blog.mattclemente.com/2017/10/13/versioning-with-git-tags/
|
||||
|
||||
# Will update your build.gradle automatically whenever an update is available
|
||||
autoUpdateBuildScript = false
|
||||
|
||||
minecraftVersion = 1.7.10
|
||||
forgeVersion = 10.13.4.1614
|
||||
|
||||
# Specify a MCP channel and mappings version for dependency deobfuscation and the deobfParams task.
|
||||
channel = stable
|
||||
mappingsVersion = 12
|
||||
|
||||
# Define other MCP mappings for dependency deobfuscation
|
||||
remoteMappings = https://raw.githubusercontent.com/MinecraftForge/FML/1.7.10/conf/
|
||||
|
||||
# Select a username for testing your mod with breakpoints. You may leave this empty for a random username each time you
|
||||
# restart Minecraft in development. Choose this dependent on your mod:
|
||||
# Do you need consistent player progressing (for example Thaumcraft)? -> Select a name
|
||||
# Do you need to test how your custom blocks interacts with a player that is not the owner? -> leave name empty
|
||||
developmentEnvironmentUserName = Developer
|
||||
|
||||
# Define a source file of your project with:
|
||||
# public static final String VERSION = "GRADLETOKEN_VERSION";
|
||||
# The string's content will be replaced with your mod's version when compiled. You should use this to specify your mod's
|
||||
# version in @Mod([...], version = VERSION, [...])
|
||||
# Leave these properties empty to skip individual token replacements
|
||||
replaceGradleTokenInFile = Tags.java
|
||||
gradleTokenModId = GRADLETOKEN_MODID
|
||||
gradleTokenModName = GRADLETOKEN_MODNAME
|
||||
gradleTokenVersion = GRADLETOKEN_VERSION
|
||||
gradleTokenGroupName = GRADLETOKEN_GROUPNAME
|
||||
|
||||
# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise, you can
|
||||
# leave this property empty.
|
||||
# Example value: apiPackage = api + modGroup = com.myname.mymodid -> com.myname.mymodid.api
|
||||
apiPackage =
|
||||
|
||||
# Specify the configuration file for Forge's access transformers here. It must be placed into /src/main/resources/META-INF/
|
||||
# Example value: mymodid_at.cfg
|
||||
accessTransformersFile =
|
||||
|
||||
# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled!
|
||||
usesMixins = false
|
||||
# Adds some debug arguments like verbose output and export
|
||||
usesMixinDebug = false
|
||||
# Specify the location of your implementation of IMixinConfigPlugin. Leave it empty otherwise.
|
||||
mixinPlugin =
|
||||
# Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail!
|
||||
mixinsPackage =
|
||||
# Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin!
|
||||
# This parameter is for legacy compatibility only
|
||||
# Example value: coreModClass = asm.FMLPlugin + modGroup = com.myname.mymodid -> com.myname.mymodid.asm.FMLPlugin
|
||||
coreModClass =
|
||||
# If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class
|
||||
# that is annotated with @Mod) you want this to be true. When in doubt: leave it on false!
|
||||
containsMixinsAndOrCoreModOnly = false
|
||||
|
||||
# Enables Mixins even if this mod doesn't use them, useful if one of the dependencies uses mixins.
|
||||
forceEnableMixins = false
|
||||
|
||||
# If enabled, you may use 'shadowCompile' for dependencies. They will be integrated in your jar. It is your
|
||||
# responsibility check the licence and request permission for distribution, if required.
|
||||
usesShadowedDependencies = false
|
||||
|
||||
# Optional parameter to customize the produced artifacts. Use this to preserver artifact naming when migrating older
|
||||
# projects. New projects should not use this parameter.
|
||||
#customArchiveBaseName =
|
||||
|
||||
# Optional parameter to prevent the source code from being published
|
||||
# noPublishedSources =
|
||||
|
||||
# Uncomment this to disable spotless checks
|
||||
# This should only be uncommented to keep it easier to sync with upstream/other forks.
|
||||
# That is, if there is no other active fork/upstream, NEVER change this.
|
||||
# disableSpotless = true
|
||||
Vendored
BIN
Binary file not shown.
+5
@@ -0,0 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.1-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
@@ -0,0 +1,188 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# 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"
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
Vendored
+100
@@ -0,0 +1,100 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
@@ -1,19 +0,0 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import net.minecraft.client.renderer.texture.AbstractTexture;
|
||||
import net.minecraft.client.resources.IResourceManager;
|
||||
|
||||
public class DefaultTexture extends AbstractTexture {
|
||||
|
||||
public DefaultTexture()
|
||||
{
|
||||
loadTexture(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadTexture(IResourceManager resourcemanager)
|
||||
{
|
||||
int[] aint = ShadersTex.createAIntImage(1,0xFFFFFFFF);
|
||||
ShadersTex.setupTexture(this.getMultiTexID(), aint, 1, 1, false, false);
|
||||
}
|
||||
}
|
||||
@@ -1,355 +0,0 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.settings.GameSettings;
|
||||
|
||||
import org.lwjgl.Sys;
|
||||
|
||||
public class GuiShaders extends GuiScreen
|
||||
{
|
||||
/** This GUI's parent GUI. */
|
||||
protected GuiScreen parentGui;
|
||||
|
||||
private int updateTimer = -1;
|
||||
public boolean needReinit;
|
||||
|
||||
/*
|
||||
private class GuiListShaderpacks {
|
||||
int posX,posY,sizeX,sizeY;
|
||||
int viewPosY;
|
||||
int itemHeight = 20;
|
||||
int selection;
|
||||
ArrayList<String> listShaderpacks;
|
||||
public void draw() {
|
||||
Tessellator tess = Tessellator.instance;
|
||||
int listSize = listShaderpacks.size();
|
||||
int i,j;
|
||||
for (i=viewPosY/itemHeight, j=Math.min((viewPosY+sizeY)/itemHeight,listSize); i<j; ++i)
|
||||
{
|
||||
int itemY = posY-viewPosY+itemHeight*i;
|
||||
boolean selected = i==selection;
|
||||
tess.startDrawingQuads();
|
||||
tess.setColorRGBA(0,0,selected?128:0,128);
|
||||
tess.addVertex(posX,itemY,0);
|
||||
tess.addVertex(posX,itemY+itemHeight,0);
|
||||
tess.addVertex(posX+sizeX,itemY+itemHeight,0);
|
||||
tess.addVertex(posX+sizeX,itemY,0);
|
||||
tess.draw();
|
||||
field_146289_q.drawString(listShaderpacks.get(i), posX, itemY, 0xFFFFFFFF, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
private GuiListShaderpacks guiListShaderpacks;
|
||||
*/
|
||||
|
||||
private GuiSlotShaders shaderList;
|
||||
|
||||
|
||||
/** This GUI's 'Done' button. */
|
||||
//private GuiSmallButton doneButton;
|
||||
|
||||
public GuiShaders(GuiScreen par1GuiScreen, GameSettings par2GameSettings)
|
||||
{
|
||||
this.parentGui = par1GuiScreen;
|
||||
}
|
||||
|
||||
private static String toStringOnOff(boolean value)
|
||||
{
|
||||
return value? "On": "Off";
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Adds the buttons (and other controls) to the screen in question.
|
||||
*/
|
||||
public void initGui()
|
||||
{
|
||||
if (Shaders.shadersConfig==null) Shaders.loadConfig();
|
||||
List buttonList = this.buttonList;
|
||||
int width = this.width;
|
||||
int height = this.height;
|
||||
buttonList.add(new GuiButton(17, width *3 /4 -60, 30, 160, 18, "NormapMap: " +toStringOnOff(Shaders.configNormalMap)));
|
||||
buttonList.add(new GuiButton(18, width *3 /4 -60, 50, 160, 18, "SpecularMap: " +toStringOnOff(Shaders.configSpecularMap)));
|
||||
buttonList.add(new GuiButton(15, width *3 /4 -60, 70, 160, 18, "RenderResMul: "+String.format("%.04f",Shaders.configRenderResMul)));
|
||||
buttonList.add(new GuiButton(16, width *3 /4 -60, 90, 160, 18, "ShadowResMul: "+String.format("%.04f",Shaders.configShadowResMul)));
|
||||
buttonList.add(new GuiButton(10, width *3 /4 -60, 110, 160, 18, "HandDepth: " +String.format("%.04f",Shaders.configHandDepthMul)));
|
||||
buttonList.add(new GuiButton( 9, width *3 /4 -60, 130, 160, 18, "CloudShadow: " +toStringOnOff(Shaders.configCloudShadow)));
|
||||
//buttonList.add(new GuiButton(14, width *3 /4 -60, 150, 160, 18, "ShadowClipFrustrum: " +toStringOnOff(Shaders.configShadowClipFrustrum)));
|
||||
buttonList.add(new GuiButton( 4, width *3 /4 -60, 170, 160, 18, "tweakBlockDamage: "+toStringOnOff(Shaders.configTweakBlockDamage)));
|
||||
buttonList.add(new GuiButton(19, width *3 /4 -60, 190, 160, 18, "OldLighting: "+toStringOnOff(Shaders.configOldLighting)));
|
||||
//buttonList.add(new GuiButton(11, width *3 /4 -60, 210, 160, 18, "Tex Min: " +Shaders.texMinFilDesc[Shaders.configTexMinFilB]));
|
||||
//buttonList.add(new GuiButton(12, width *3 /4 -60, 230, 160, 18, "Tex_n Mag: " +Shaders.texMagFilDesc[Shaders.configTexMagFilN]));
|
||||
//buttonList.add(new GuiButton(13, width *3 /4 -60, 250, 160, 18, "Tex_s Mag: " +Shaders.texMagFilDesc[Shaders.configTexMagFilS]));
|
||||
buttonList.add(new GuiButton( 6, width *3 /4 -60, height - 25, 160, 20, "Done"));
|
||||
buttonList.add(new GuiButton( 5, width /4 -80, height - 25, 160, 20, "Open shaderpacks folder"));
|
||||
this.shaderList = new GuiSlotShaders(this);
|
||||
this.shaderList.registerScrollButtons(7, 8);//registerScrollButtons(7, 8);
|
||||
this.needReinit = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
/** actionPerformed
|
||||
* Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
|
||||
*/
|
||||
protected void actionPerformed(GuiButton par1GuiButton)
|
||||
{
|
||||
if (par1GuiButton.enabled)//enabled
|
||||
{
|
||||
switch (par1GuiButton.id)//id
|
||||
{
|
||||
case 4: /* New block breaking */
|
||||
Shaders.configTweakBlockDamage = !Shaders.configTweakBlockDamage;
|
||||
//displayString
|
||||
par1GuiButton.displayString = "tweakBlockDamage: "+toStringOnOff(Shaders.configTweakBlockDamage);
|
||||
break;
|
||||
|
||||
case 9: /* Cloud shadow */
|
||||
Shaders.configCloudShadow = !Shaders.configCloudShadow;
|
||||
par1GuiButton.displayString = "CloudShadow: " +toStringOnOff(Shaders.configCloudShadow);
|
||||
break;
|
||||
|
||||
case 10: /* Hand Depth */
|
||||
{
|
||||
float val = Shaders.configHandDepthMul;
|
||||
float[] choices = { 0.0625f,0.125f,0.25f,0.5f,1.0f };
|
||||
int i;
|
||||
if (!isShiftKeyDown()) {//isShiftKeyDown
|
||||
for (i=0; i<choices.length && choices[i]<=val; ++i) {}
|
||||
if (i==choices.length) i=0;
|
||||
} else {
|
||||
for (i=choices.length-1; i>=0 && val<=choices[i]; --i) {}
|
||||
if (i<0) i=choices.length-1;
|
||||
}
|
||||
Shaders.configHandDepthMul = choices[i];
|
||||
par1GuiButton.displayString = "HandDepth: "+String.format("%.4f",Shaders.configHandDepthMul);
|
||||
break;
|
||||
}
|
||||
|
||||
case 15: /* Render Resolution Multiplier */
|
||||
{
|
||||
float val = Shaders.configRenderResMul;
|
||||
float[] choices = { 0.25f,0.3333333333f,0.5f,0.7071067812f,1.0f,1.414213562f,2.0f };
|
||||
int i;
|
||||
if (!isShiftKeyDown()) {
|
||||
for (i=0; i<choices.length && choices[i]<=val; ++i) {}
|
||||
if (i==choices.length) i=0;
|
||||
} else {
|
||||
for (i=choices.length-1; i>=0 && val<=choices[i]; --i) {}
|
||||
if (i<0) i=choices.length-1;
|
||||
}
|
||||
Shaders.configRenderResMul = choices[i];
|
||||
par1GuiButton.displayString = "RenderResMul: "+String.format("%.4f",Shaders.configRenderResMul);
|
||||
Shaders.scheduleResize();
|
||||
break;
|
||||
}
|
||||
|
||||
case 16: /* Shadow Resolution Multiplier */
|
||||
{
|
||||
float val = Shaders.configShadowResMul;
|
||||
float[] choices = { 0.25f,0.3333333333f,0.5f,0.7071067812f,1.0f,1.414213562f,2.0f,3.0f,4.0f };
|
||||
int i;
|
||||
if (!isShiftKeyDown()) {
|
||||
for (i=0; i<choices.length && choices[i]<=val; ++i) {}
|
||||
if (i==choices.length) i=0;
|
||||
} else {
|
||||
for (i=choices.length-1; i>=0 && val<=choices[i]; --i) {}
|
||||
if (i<0) i=choices.length-1;
|
||||
}
|
||||
Shaders.configShadowResMul = choices[i];
|
||||
par1GuiButton.displayString = "ShadowResMul: "+String.format("%.4f",Shaders.configShadowResMul);
|
||||
Shaders.scheduleResizeShadow();
|
||||
break;
|
||||
}
|
||||
|
||||
case 17: /* Normal Map */
|
||||
{
|
||||
Shaders.configNormalMap = !Shaders.configNormalMap;
|
||||
//displayString
|
||||
par1GuiButton.displayString = "NormapMap: " +toStringOnOff(Shaders.configNormalMap);
|
||||
mc.scheduleResourcesRefresh(); // schedule refresh texture
|
||||
break;
|
||||
}
|
||||
|
||||
case 18: /* Normal Map */
|
||||
{
|
||||
Shaders.configSpecularMap = !Shaders.configSpecularMap;
|
||||
//displayString
|
||||
par1GuiButton.displayString = "SpecularMap: " +toStringOnOff(Shaders.configSpecularMap);
|
||||
mc.scheduleResourcesRefresh(); // schedule refresh texture
|
||||
break;
|
||||
}
|
||||
|
||||
case 19: /* old Lighting */
|
||||
{
|
||||
Shaders.configOldLighting = !Shaders.configOldLighting;
|
||||
//displayString
|
||||
par1GuiButton.displayString = "OldLighting: " +toStringOnOff(Shaders.configOldLighting);
|
||||
Shaders.updateBlockLightLevel();
|
||||
mc.renderGlobal.loadRenderers();
|
||||
break;
|
||||
}
|
||||
|
||||
case 11: /* texture filter */
|
||||
{
|
||||
Shaders.configTexMinFilB = (Shaders.configTexMinFilB+1)%Shaders.texMinFilRange;
|
||||
Shaders.configTexMinFilN = Shaders.configTexMinFilS = Shaders.configTexMinFilB;
|
||||
par1GuiButton.displayString = "Tex Min: " +Shaders.texMinFilDesc[Shaders.configTexMinFilB];
|
||||
ShadersTex.updateTextureMinMagFilter();
|
||||
break;
|
||||
}
|
||||
|
||||
case 12: /* texture filter */
|
||||
{
|
||||
Shaders.configTexMagFilN = (Shaders.configTexMagFilN+1)%Shaders.texMagFilRange;
|
||||
par1GuiButton.displayString = "Tex_n Mag: " +Shaders.texMagFilDesc[Shaders.configTexMagFilN];
|
||||
ShadersTex.updateTextureMinMagFilter();
|
||||
break;
|
||||
}
|
||||
|
||||
case 13: /* texture filter */
|
||||
{
|
||||
Shaders.configTexMagFilS = (Shaders.configTexMagFilS+1)%Shaders.texMagFilRange;
|
||||
par1GuiButton.displayString = "Tex_s Mag: " +Shaders.texMagFilDesc[Shaders.configTexMagFilS];
|
||||
ShadersTex.updateTextureMinMagFilter();
|
||||
break;
|
||||
}
|
||||
|
||||
case 14: /* shadow frustum clipping */
|
||||
{
|
||||
Shaders.configShadowClipFrustrum = !Shaders.configShadowClipFrustrum;
|
||||
par1GuiButton.displayString = "ShadowClipFrustrum: " +toStringOnOff(Shaders.configShadowClipFrustrum);
|
||||
ShadersTex.updateTextureMinMagFilter();
|
||||
break;
|
||||
}
|
||||
|
||||
case 5: /* Open shaderpacks folder */
|
||||
switch(net.minecraft.util.Util.getOSType())
|
||||
{
|
||||
case OSX:
|
||||
{
|
||||
try
|
||||
{
|
||||
Runtime.getRuntime().exec(new String[] {"/usr/bin/open", Shaders.shaderpacksdir.getAbsolutePath()});
|
||||
return;
|
||||
}
|
||||
catch (IOException var7)
|
||||
{
|
||||
var7.printStackTrace();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WINDOWS:
|
||||
{
|
||||
String var2 = String.format("cmd.exe /C start \"Open file\" \"%s\"", new Object[] {Shaders.shaderpacksdir.getAbsolutePath()});
|
||||
|
||||
try
|
||||
{
|
||||
Runtime.getRuntime().exec(var2);
|
||||
return;
|
||||
}
|
||||
catch (IOException var6)
|
||||
{
|
||||
var6.printStackTrace();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
boolean var8 = false;
|
||||
|
||||
try
|
||||
{
|
||||
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, new Object[] {(new File(mc.mcDataDir, Shaders.shaderpacksdirname)).toURI()});
|
||||
}
|
||||
catch (Throwable var5)
|
||||
{
|
||||
var5.printStackTrace();
|
||||
var8 = true;
|
||||
}
|
||||
|
||||
if (var8)
|
||||
{
|
||||
System.out.println("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)
|
||||
{
|
||||
}
|
||||
if (needReinit)
|
||||
{
|
||||
needReinit = false;
|
||||
Shaders.loadShaderPack();
|
||||
Shaders.uninit();
|
||||
this.mc.renderGlobal.loadRenderers();
|
||||
}
|
||||
this.mc.displayGuiScreen(this.parentGui);//displayGuiScreen
|
||||
break;
|
||||
|
||||
default:
|
||||
this.shaderList.actionPerformed(par1GuiButton);//actionPerformed
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Draws the screen and all the components in it.
|
||||
*/
|
||||
public void drawScreen(int par1, int par2, float par3)
|
||||
{
|
||||
drawDefaultBackground(); // background
|
||||
this.shaderList.drawScreen(par1, par2, par3);//drawScreen
|
||||
|
||||
if (this.updateTimer <= 0)
|
||||
{
|
||||
this.shaderList.updateList();
|
||||
this.updateTimer += 20;
|
||||
}
|
||||
|
||||
this.drawCenteredString(this.fontRendererObj, "Shaders " , this.width / 2, 16, 0xffffff);
|
||||
this.drawCenteredString(this.fontRendererObj, " v"+Shaders.versionString, this.width - 40, 10, 0x808080);
|
||||
//this.drawCenteredString(this.fontRenderer, "( Place zipped Shader files here. )", this.width / 4 + 10, this.height - 26, 0x808080);
|
||||
super.drawScreen(par1, par2, par3);
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Called from the main game loop to update the screen.
|
||||
*/
|
||||
public void updateScreen()
|
||||
{
|
||||
super.updateScreen();
|
||||
--this.updateTimer;
|
||||
}
|
||||
|
||||
public Minecraft getMc()
|
||||
{
|
||||
return this.mc;
|
||||
}
|
||||
|
||||
public void drawCenteredString(String par1, int par2, int par3, int par4)
|
||||
{
|
||||
this.drawCenteredString(this.fontRendererObj, par1, par2, par3, par4);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiSlot;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
|
||||
class GuiSlotShaders extends GuiSlot
|
||||
{
|
||||
private ArrayList shaderslist;
|
||||
|
||||
final GuiShaders shadersGui;
|
||||
|
||||
public GuiSlotShaders(GuiShaders par1GuiShaders)
|
||||
{
|
||||
//super(par1GuiShaders.getMc(), par1GuiShaders.width / 2 + 20, par1GuiShaders.height, 40, par1GuiShaders.height - 70, 16);
|
||||
super(par1GuiShaders.getMc(), par1GuiShaders.width / 2 + 20, par1GuiShaders.height, 40, par1GuiShaders.height - 70, 16);
|
||||
this.shadersGui = par1GuiShaders;
|
||||
this.shaderslist = Shaders.listofShaders();
|
||||
}
|
||||
|
||||
public void updateList()
|
||||
{
|
||||
this.shaderslist = Shaders.listofShaders();
|
||||
}
|
||||
|
||||
@Override
|
||||
/** getSize */
|
||||
protected int getSize() {
|
||||
return this.shaderslist.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
/** elementClicked */
|
||||
protected void elementClicked(int par1, boolean par2, int par3, int par4) {
|
||||
Shaders.setShaderPack((String)shaderslist.get(par1));
|
||||
shadersGui.needReinit = false;
|
||||
Shaders.loadShaderPack();
|
||||
Shaders.uninit();
|
||||
}
|
||||
|
||||
@Override
|
||||
/** isSelected */
|
||||
protected boolean isSelected(int par1) {
|
||||
return ((String)this.shaderslist.get(par1)).equals(Shaders.currentshadername);
|
||||
}
|
||||
|
||||
@Override
|
||||
/** getScrollBarX */
|
||||
protected int getScrollBarX() {
|
||||
return this.width - 6;
|
||||
}
|
||||
|
||||
@Override
|
||||
/** getContentHeight */
|
||||
protected int getContentHeight() {
|
||||
return this.getSize() * 18;
|
||||
}
|
||||
|
||||
@Override
|
||||
/** drawBackground */
|
||||
protected void drawBackground() {
|
||||
//this.shadersGui.drawDefaultBackground();
|
||||
}
|
||||
|
||||
@Override
|
||||
/** drawSlot */
|
||||
protected void drawSlot(int par1, int par2, int par3, int par4,
|
||||
Tessellator par5, int par6, int par7) {
|
||||
this.shadersGui.drawCenteredString((String)this.shaderslist.get(par1), this.shadersGui.width / 4 + 10, par3 + 1, 0xffffff);
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class MultiTexID {
|
||||
public int base;
|
||||
public int norm;
|
||||
public int spec;
|
||||
|
||||
public MultiTexID(int baseTex, int normTex, int specTex)
|
||||
{
|
||||
base = baseTex;
|
||||
norm = normTex;
|
||||
spec = specTex;
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
public class ShaderPackDefault implements IShaderPack {
|
||||
|
||||
public ShaderPackDefault() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream getResourceAsStream(String resName) {
|
||||
return ShaderPackDefault.class.getResourceAsStream(resName);
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
|
||||
public class ShaderPackFolder implements IShaderPack {
|
||||
|
||||
protected File packFile;
|
||||
|
||||
public ShaderPackFolder(String name, File file)
|
||||
{
|
||||
packFile = file;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream getResourceAsStream(String resName)
|
||||
{
|
||||
try
|
||||
{
|
||||
File resFile = new File(packFile, resName.substring(1));
|
||||
if (resFile != null)
|
||||
{
|
||||
return new BufferedInputStream(new FileInputStream(resFile));
|
||||
}
|
||||
}
|
||||
catch (Exception excp)
|
||||
{
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
public class ShaderPackNone implements IShaderPack {
|
||||
|
||||
public ShaderPackNone() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream getResourceAsStream(String resName) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
public class ShaderPackZip implements IShaderPack {
|
||||
|
||||
protected File packFile;
|
||||
protected ZipFile packZipFile;
|
||||
|
||||
public ShaderPackZip(String name, File file)
|
||||
{
|
||||
packFile = file;
|
||||
packZipFile = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close()
|
||||
{
|
||||
if(packZipFile != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
packZipFile.close();
|
||||
}
|
||||
catch (Exception excp)
|
||||
{
|
||||
}
|
||||
packZipFile = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream getResourceAsStream(String resName)
|
||||
{
|
||||
if (packZipFile == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
packZipFile = new ZipFile(packFile);
|
||||
}
|
||||
catch (Exception excp)
|
||||
{
|
||||
}
|
||||
}
|
||||
if (packZipFile != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
ZipEntry entry = packZipFile.getEntry(resName.substring(1));
|
||||
if (entry != null)
|
||||
{
|
||||
return packZipFile.getInputStream(entry);
|
||||
}
|
||||
}
|
||||
catch (Exception excp)
|
||||
{
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,105 +0,0 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import static org.objectweb.asm.Opcodes.INVOKESTATIC;
|
||||
|
||||
import java.nio.IntBuffer;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import shadersmodcore.transform.Names;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockIce;
|
||||
import net.minecraft.client.renderer.EntityRenderer;
|
||||
import net.minecraft.client.renderer.ItemRenderer;
|
||||
import net.minecraft.client.renderer.RenderGlobal;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
import net.minecraft.client.renderer.culling.Frustrum;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemCloth;
|
||||
|
||||
public class ShadersRender {
|
||||
|
||||
public static void setFrustrumPosition(Frustrum frustrum, double x, double y, double z)
|
||||
{
|
||||
frustrum.setPosition(x, y, z);
|
||||
}
|
||||
|
||||
public static void clipRenderersByFrustrum(RenderGlobal renderGlobal, Frustrum frustrum, float par2)
|
||||
{
|
||||
Shaders.checkGLError("pre clip");
|
||||
if (!Shaders.isShadowPass) {
|
||||
WorldRenderer[] worldRenderers = renderGlobal.worldRenderers;
|
||||
for (int i = 0; i < worldRenderers.length; ++i)
|
||||
{
|
||||
if (!worldRenderers[i].skipAllRenderPasses())
|
||||
{
|
||||
worldRenderers[i].updateInFrustum(frustrum);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
WorldRenderer[] worldRenderers = renderGlobal.worldRenderers;
|
||||
for (int i = 0; i < worldRenderers.length; ++i)
|
||||
{
|
||||
if (!worldRenderers[i].skipAllRenderPasses())
|
||||
{
|
||||
worldRenderers[i].isInFrustum = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void renderHand0(EntityRenderer er, float par1, int par2) {
|
||||
if (!Shaders.isShadowPass)
|
||||
{
|
||||
Item item = (Shaders.itemToRender!=null)? Shaders.itemToRender.getItem(): null;
|
||||
Block block = (item instanceof ItemBlock)? ((ItemBlock)item).field_150939_a: null;
|
||||
// ItemCloth is for semitransparent block : stained glass, wool
|
||||
if (!(item instanceof ItemBlock) && !(block instanceof BlockIce))
|
||||
{
|
||||
Shaders.readCenterDepth();
|
||||
Shaders.beginHand();
|
||||
er.renderHand(par1, par2);
|
||||
Shaders.endHand();
|
||||
Shaders.isHandRendered = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void renderHand1(EntityRenderer er, float par1, int par2) {
|
||||
if (!Shaders.isShadowPass)
|
||||
{
|
||||
if (!Shaders.isHandRendered) {
|
||||
Shaders.readCenterDepth();
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
Shaders.beginHand();
|
||||
er.renderHand(par1, par2);
|
||||
Shaders.endHand();
|
||||
Shaders.isHandRendered = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void renderItemFP(ItemRenderer itemRenderer, float par1) {
|
||||
// clear depth buffer locally
|
||||
GL11.glDepthFunc(GL11.GL_GEQUAL);
|
||||
GL11.glPushMatrix();
|
||||
IntBuffer drawBuffers = Shaders.activeDrawBuffers;
|
||||
Shaders.setDrawBuffers(Shaders.drawBuffersNone);
|
||||
itemRenderer.renderItemInFirstPerson(par1);
|
||||
Shaders.setDrawBuffers(drawBuffers);
|
||||
GL11.glPopMatrix();
|
||||
GL11.glDepthFunc(GL11.GL_LEQUAL);
|
||||
// really render item or hand
|
||||
itemRenderer.renderItemInFirstPerson(par1);
|
||||
}
|
||||
|
||||
public static void renderFPOverlay(EntityRenderer er, float par1, int par2) {
|
||||
Shaders.beginFPOverlay();
|
||||
er.renderHand(par1, par2);
|
||||
Shaders.endFPOverlay();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,279 +0,0 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import static org.lwjgl.opengl.ARBVertexShader.glDisableVertexAttribArrayARB;
|
||||
import static org.lwjgl.opengl.ARBVertexShader.glEnableVertexAttribArrayARB;
|
||||
import static org.lwjgl.opengl.ARBVertexShader.glVertexAttribPointerARB;
|
||||
|
||||
import java.nio.FloatBuffer;
|
||||
import java.nio.ShortBuffer;
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.lwjgl.opengl.ARBVertexBufferObject;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL13;
|
||||
|
||||
import shadersmodcore.transform.SMCLog;
|
||||
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
|
||||
public class ShadersTess {
|
||||
|
||||
public static final int vertexStride = 16;
|
||||
|
||||
public static int draw(Tessellator tess) {
|
||||
if (!tess.isDrawing)
|
||||
{
|
||||
throw new IllegalStateException("Not tesselating!");
|
||||
}
|
||||
else
|
||||
{
|
||||
tess.isDrawing = false;
|
||||
if (tess.drawMode == GL11.GL_QUADS && tess.vertexCount % 4 != 0) {
|
||||
SMCLog.warning("%s", "bad vertexCount");
|
||||
}
|
||||
int voffset = 0;
|
||||
int realDrawMode = tess.drawMode;
|
||||
while (voffset < tess.vertexCount)
|
||||
{
|
||||
int vcount;
|
||||
vcount = Math.min(tess.vertexCount - voffset, tess.byteBuffer.capacity() / (vertexStride*4));
|
||||
if (realDrawMode == GL11.GL_QUADS)
|
||||
vcount = vcount /4 *4;
|
||||
tess.floatBuffer.clear();
|
||||
tess.shortBuffer.clear();
|
||||
tess.intBuffer.clear();
|
||||
tess.intBuffer.put(tess.rawBuffer, voffset * vertexStride, vcount * vertexStride);
|
||||
tess.byteBuffer.position(0);
|
||||
tess.byteBuffer.limit(vcount * (vertexStride * 4));
|
||||
voffset += vcount;
|
||||
|
||||
if (tess.hasTexture)
|
||||
{
|
||||
tess.floatBuffer.position(3);
|
||||
GL11.glTexCoordPointer(2, (vertexStride * 4), tess.floatBuffer);
|
||||
GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
|
||||
}
|
||||
if (tess.hasBrightness)
|
||||
{
|
||||
OpenGlHelper.setClientActiveTexture(OpenGlHelper.lightmapTexUnit);
|
||||
tess.shortBuffer.position(6*2);
|
||||
GL11.glTexCoordPointer(2, (vertexStride * 4), tess.shortBuffer);
|
||||
GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
|
||||
OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit);
|
||||
}
|
||||
if (tess.hasColor)
|
||||
{
|
||||
tess.byteBuffer.position(5*4);
|
||||
GL11.glColorPointer(4, true, (vertexStride * 4), tess.byteBuffer);
|
||||
GL11.glEnableClientState(GL11.GL_COLOR_ARRAY);
|
||||
}
|
||||
if (tess.hasNormals)
|
||||
{
|
||||
tess.floatBuffer.position(9);
|
||||
GL11.glNormalPointer((vertexStride * 4), tess.floatBuffer);
|
||||
GL11.glEnableClientState(GL11.GL_NORMAL_ARRAY);
|
||||
}
|
||||
tess.floatBuffer.position(0);
|
||||
GL11.glVertexPointer(3, (vertexStride * 4), tess.floatBuffer);
|
||||
ShadersTess.preDrawArray(tess);
|
||||
|
||||
GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
|
||||
GL11.glDrawArrays(realDrawMode, 0, vcount);
|
||||
}
|
||||
// end loop
|
||||
|
||||
GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY);
|
||||
ShadersTess.postDrawArray(tess);
|
||||
if (tess.hasTexture)
|
||||
{
|
||||
GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
|
||||
}
|
||||
if (tess.hasBrightness)
|
||||
{
|
||||
OpenGlHelper.setClientActiveTexture(OpenGlHelper.lightmapTexUnit);
|
||||
GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
|
||||
OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit);
|
||||
}
|
||||
if (tess.hasColor)
|
||||
{
|
||||
GL11.glDisableClientState(GL11.GL_COLOR_ARRAY);
|
||||
}
|
||||
if (tess.hasNormals)
|
||||
{
|
||||
GL11.glDisableClientState(GL11.GL_NORMAL_ARRAY);
|
||||
}
|
||||
|
||||
int n = tess.rawBufferIndex * 4;
|
||||
tess.reset();
|
||||
return n;
|
||||
}
|
||||
}
|
||||
|
||||
public static void preDrawArray(Tessellator tess)
|
||||
{
|
||||
//Shaders.checkGLError("preDrawArray");
|
||||
if (Shaders.useMultiTexCoord3Attrib && tess.hasTexture)
|
||||
{
|
||||
GL13.glClientActiveTexture(GL13.GL_TEXTURE3);
|
||||
GL11.glTexCoordPointer(2, (vertexStride * 4), (FloatBuffer)tess.floatBuffer.position(12));
|
||||
GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
|
||||
GL13.glClientActiveTexture(GL13.GL_TEXTURE0);
|
||||
}
|
||||
if (Shaders.useMidTexCoordAttrib && tess.hasTexture)
|
||||
{
|
||||
glVertexAttribPointerARB(Shaders.midTexCoordAttrib, 2, false, vertexStride*4, (FloatBuffer)tess.floatBuffer.position(12));
|
||||
glEnableVertexAttribArrayARB(Shaders.midTexCoordAttrib);
|
||||
}
|
||||
if (Shaders.useEntityAttrib)
|
||||
{
|
||||
glVertexAttribPointerARB(Shaders.entityAttrib, 3, false, false, vertexStride*4, (ShortBuffer)tess.shortBuffer.position(7*2));
|
||||
glEnableVertexAttribArrayARB(Shaders.entityAttrib);
|
||||
}
|
||||
//Shaders.checkGLError("preDrawArray");
|
||||
}
|
||||
public static void preDrawArrayVBO(Tessellator tess)
|
||||
{
|
||||
//Shaders.checkGLError("preDrawArray");
|
||||
if (Shaders.useMultiTexCoord3Attrib && tess.hasTexture)
|
||||
{
|
||||
GL13.glClientActiveTexture(GL13.GL_TEXTURE3);
|
||||
GL11.glTexCoordPointer(2, GL11.GL_FLOAT, (vertexStride * 4), 12*4L);
|
||||
GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
|
||||
GL13.glClientActiveTexture(GL13.GL_TEXTURE0);
|
||||
}
|
||||
if (Shaders.useMidTexCoordAttrib && tess.hasTexture)
|
||||
{
|
||||
glVertexAttribPointerARB(Shaders.midTexCoordAttrib, 2, GL11.GL_FLOAT, false, vertexStride*4, 12*4L);
|
||||
glEnableVertexAttribArrayARB(Shaders.midTexCoordAttrib);
|
||||
}
|
||||
if (Shaders.useEntityAttrib)
|
||||
{
|
||||
glVertexAttribPointerARB(Shaders.entityAttrib, 3, GL11.GL_SHORT, false, vertexStride*4, 7*4L);
|
||||
glEnableVertexAttribArrayARB(Shaders.entityAttrib);
|
||||
}
|
||||
//Shaders.checkGLError("preDrawArray");
|
||||
}
|
||||
|
||||
public static void postDrawArray(Tessellator tess)
|
||||
{
|
||||
//Shaders.checkGLError("postDrawArray");
|
||||
if (Shaders.useEntityAttrib)
|
||||
{
|
||||
glDisableVertexAttribArrayARB(Shaders.entityAttrib);
|
||||
}
|
||||
if (Shaders.useMidTexCoordAttrib && tess.hasTexture)
|
||||
{
|
||||
glDisableVertexAttribArrayARB(Shaders.midTexCoordAttrib);
|
||||
}
|
||||
if (Shaders.useMultiTexCoord3Attrib && tess.hasTexture)
|
||||
{
|
||||
GL13.glClientActiveTexture(GL13.GL_TEXTURE3);
|
||||
GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
|
||||
GL13.glClientActiveTexture(GL13.GL_TEXTURE0);
|
||||
}
|
||||
//Shaders.checkGLError("postDrawArray");
|
||||
}
|
||||
|
||||
public static void addVertex(Tessellator tess, double parx, double pary, double parz) {
|
||||
int[] rawBuffer = tess.rawBuffer;
|
||||
int rbi = tess.rawBufferIndex;
|
||||
float fx = (float) (parx + tess.xOffset);
|
||||
float fy = (float) (pary + tess.yOffset);
|
||||
float fz = (float) (parz + tess.zOffset);
|
||||
// Check if buffer is nearly full
|
||||
if (rbi >= tess.bufferSize - vertexStride*4)
|
||||
{
|
||||
if (tess.bufferSize >= 0x1000000) {
|
||||
// Max size reached. Just draw.
|
||||
if (tess.addedVertices % 4 == 0)
|
||||
{
|
||||
tess.draw();
|
||||
tess.isDrawing = true;
|
||||
}
|
||||
} else if (tess.bufferSize > 0) {
|
||||
// Expand
|
||||
tess.bufferSize *= 2;
|
||||
tess.rawBuffer = rawBuffer = Arrays.copyOf(tess.rawBuffer, tess.bufferSize);
|
||||
System.out.format("Expand tesselator buffer %d\n",tess.bufferSize);
|
||||
} else {
|
||||
// Initialize
|
||||
tess.bufferSize = 0x10000;
|
||||
tess.rawBuffer = rawBuffer = new int[tess.bufferSize];
|
||||
}
|
||||
}
|
||||
|
||||
// shaders mod calculate normal and mid UV
|
||||
if (tess.drawMode == 7)
|
||||
{
|
||||
int i = tess.addedVertices % 4;
|
||||
float[] vertexPos = tess.vertexPos;
|
||||
vertexPos[i*4+0] = fx;
|
||||
vertexPos[i*4+1] = fy;
|
||||
vertexPos[i*4+2] = fz;
|
||||
if (i==3)
|
||||
{
|
||||
// calculate normal
|
||||
float x1 = vertexPos[ 8+0] - vertexPos[ +0];
|
||||
float y1 = vertexPos[ 8+1] - vertexPos[ +1];
|
||||
float z1 = vertexPos[ 8+2] - vertexPos[ +2];
|
||||
float x2 = vertexPos[12+0] - vertexPos[ 4+0];
|
||||
float y2 = vertexPos[12+1] - vertexPos[ 4+1];
|
||||
float z2 = vertexPos[12+2] - vertexPos[ 4+2];
|
||||
float vnx = y1*z2-y2*z1;
|
||||
float vny = z1*x2-z2*x1;
|
||||
float vnz = x1*y2-x2*y1;
|
||||
float lensq = vnx*vnx+vny*vny+vnz*vnz;
|
||||
float mult = (lensq!=0.0)? (float)(1f/Math.sqrt(lensq)): 1f;
|
||||
rawBuffer[rbi+( 9-vertexStride*3)] =
|
||||
rawBuffer[rbi+( 9-vertexStride*2)] =
|
||||
rawBuffer[rbi+( 9-vertexStride*1)] = Float.floatToRawIntBits(tess.normalX = vnx*mult);
|
||||
rawBuffer[rbi+(10-vertexStride*3)] =
|
||||
rawBuffer[rbi+(10-vertexStride*2)] =
|
||||
rawBuffer[rbi+(10-vertexStride*1)] = Float.floatToRawIntBits(tess.normalY = vny*mult);
|
||||
rawBuffer[rbi+(11-vertexStride*3)] =
|
||||
rawBuffer[rbi+(11-vertexStride*2)] =
|
||||
rawBuffer[rbi+(11-vertexStride*1)] = Float.floatToRawIntBits(tess.normalZ = vnz*mult);
|
||||
tess.hasNormals = true;
|
||||
// mid UV
|
||||
tess.midTextureU = (
|
||||
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;
|
||||
tess.midTextureV = (
|
||||
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(tess.midTextureU);
|
||||
rawBuffer[rbi+(13-vertexStride*3)] =
|
||||
rawBuffer[rbi+(13-vertexStride*2)] =
|
||||
rawBuffer[rbi+(13-vertexStride*1)] = Float.floatToRawIntBits(tess.midTextureV);
|
||||
}
|
||||
}
|
||||
// end normal and mid UV calculation
|
||||
|
||||
++tess.addedVertices;
|
||||
rawBuffer[rbi + 0] = Float.floatToRawIntBits((float)fx);
|
||||
rawBuffer[rbi + 1] = Float.floatToRawIntBits((float)fy);
|
||||
rawBuffer[rbi + 2] = Float.floatToRawIntBits((float)fz);
|
||||
rawBuffer[rbi + 3] = Float.floatToRawIntBits((float)tess.textureU);
|
||||
rawBuffer[rbi + 4] = Float.floatToRawIntBits((float)tess.textureV);
|
||||
rawBuffer[rbi + 5] = tess.color;
|
||||
rawBuffer[rbi + 6] = tess.brightness;
|
||||
rawBuffer[rbi + 7] = Shaders.getEntityData();
|
||||
rawBuffer[rbi + 8] = Shaders.getEntityData2();
|
||||
rawBuffer[rbi + 9] = Float.floatToRawIntBits((float)tess.normalX);
|
||||
rawBuffer[rbi +10] = Float.floatToRawIntBits((float)tess.normalY);
|
||||
rawBuffer[rbi +11] = Float.floatToRawIntBits((float)tess.normalZ);
|
||||
rawBuffer[rbi +12] = Float.floatToRawIntBits((float)tess.midTextureU);
|
||||
rawBuffer[rbi +13] = Float.floatToRawIntBits((float)tess.midTextureV);
|
||||
|
||||
tess.rawBufferIndex = rbi += vertexStride;
|
||||
++tess.vertexCount;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,969 +0,0 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.ImageObserver;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.nio.IntBuffer;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.GLAllocation;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.client.renderer.texture.AbstractTexture;
|
||||
import net.minecraft.client.renderer.texture.DynamicTexture;
|
||||
import net.minecraft.client.renderer.texture.ITextureObject;
|
||||
import net.minecraft.client.renderer.texture.LayeredTexture;
|
||||
import net.minecraft.client.renderer.texture.Stitcher;
|
||||
import net.minecraft.client.renderer.texture.TextureManager;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.client.renderer.texture.TextureUtil;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.resources.IResource;
|
||||
import net.minecraft.client.resources.IResourceManager;
|
||||
|
||||
import org.lwjgl.BufferUtils;
|
||||
import org.lwjgl.opengl.ARBTextureStorage;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
import org.lwjgl.opengl.GL13;
|
||||
import org.lwjgl.opengl.GL14;
|
||||
import org.lwjgl.opengl.GL20;
|
||||
import org.lwjgl.opengl.GL30;
|
||||
import org.lwjgl.opengl.GL30.*;
|
||||
|
||||
public class ShadersTex {
|
||||
public static final int initialBufferSize = 1048576;
|
||||
public static ByteBuffer byteBuffer = BufferUtils.createByteBuffer(initialBufferSize*4);
|
||||
public static IntBuffer intBuffer = byteBuffer.asIntBuffer();
|
||||
public static int[] intArray = new int[initialBufferSize];
|
||||
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 TextureMap updatingTextureMap = null;
|
||||
public static TextureAtlasSprite updatingSprite = null;
|
||||
public static MultiTexID updatingTex = null;
|
||||
public static MultiTexID boundTex = null;
|
||||
public static int updatingPage = 0;
|
||||
public static String iconName = null;
|
||||
|
||||
public static IntBuffer getIntBuffer(int size)
|
||||
{
|
||||
if (intBuffer.capacity() < size)
|
||||
{
|
||||
int bufferSize = roundUpPOT(size);
|
||||
byteBuffer = BufferUtils.createByteBuffer(bufferSize*4);
|
||||
intBuffer = byteBuffer.asIntBuffer();
|
||||
}
|
||||
return intBuffer;
|
||||
}
|
||||
|
||||
public static int[] getIntArray(int size)
|
||||
{
|
||||
if (intArray.length < size)
|
||||
{
|
||||
intArray = null;
|
||||
intArray = new int[roundUpPOT(size)];
|
||||
}
|
||||
return intArray;
|
||||
}
|
||||
|
||||
public static int roundUpPOT(int x)
|
||||
{
|
||||
int i = x-1;
|
||||
i |= (i>>1);
|
||||
i |= (i>>2);
|
||||
i |= (i>>4);
|
||||
i |= (i>>8);
|
||||
i |= (i>>16);
|
||||
return i+1;
|
||||
}
|
||||
|
||||
public static IntBuffer fillIntBuffer(int size, int value)
|
||||
{
|
||||
int[] aint = getIntArray(size);
|
||||
IntBuffer intBuf = getIntBuffer(size);
|
||||
Arrays.fill(intArray, 0, size, value);
|
||||
intBuffer.put(intArray, 0, size);
|
||||
return intBuffer;
|
||||
}
|
||||
|
||||
public static int[] createAIntImage(int size)
|
||||
{
|
||||
int[] aint = new int[size*3];
|
||||
Arrays.fill(aint, 0, size, defBaseTexColor);
|
||||
Arrays.fill(aint, size, size*2, defNormTexColor);
|
||||
Arrays.fill(aint, size*2, size*3, defSpecTexColor);
|
||||
return aint;
|
||||
}
|
||||
|
||||
public static int[] createAIntImage(int size, int color)
|
||||
{
|
||||
int[] aint = new int[size*3];
|
||||
Arrays.fill(aint, 0, size, color);
|
||||
Arrays.fill(aint, size, size*2, defNormTexColor);
|
||||
Arrays.fill(aint, size*2, size*3, defSpecTexColor);
|
||||
return aint;
|
||||
}
|
||||
|
||||
public static MultiTexID getMultiTexID(AbstractTexture tex)
|
||||
{
|
||||
MultiTexID multiTex = tex.multiTex;
|
||||
if (multiTex==null)
|
||||
{
|
||||
int baseTex = tex.getGlTextureId();
|
||||
multiTex = multiTexMap.get(Integer.valueOf(baseTex));
|
||||
if (multiTex == null)
|
||||
{
|
||||
multiTex = new MultiTexID(baseTex, GL11.glGenTextures(), GL11.glGenTextures());
|
||||
multiTexMap.put(baseTex, multiTex);
|
||||
}
|
||||
tex.multiTex = multiTex;
|
||||
}
|
||||
return multiTex;
|
||||
}
|
||||
|
||||
public static void deleteTextures(AbstractTexture atex)
|
||||
{
|
||||
int texid = atex.glTextureId;
|
||||
if (texid != -1)
|
||||
{
|
||||
GL11.glDeleteTextures(texid);
|
||||
atex.glTextureId = -1;
|
||||
}
|
||||
MultiTexID multiTex = atex.multiTex;
|
||||
if (multiTex != null)
|
||||
{
|
||||
atex.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.");
|
||||
GL11.glDeleteTextures(multiTex.base);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Remove MultiTexID object reference and delete textures */
|
||||
public static int deleteMultiTex(ITextureObject tex)
|
||||
{
|
||||
if (tex instanceof AbstractTexture) {
|
||||
deleteTextures((AbstractTexture)tex);
|
||||
} else {
|
||||
GL11.glDeleteTextures(tex.getGlTextureId());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static void bindNSTextures(int normTex, int specTex)
|
||||
{
|
||||
//Shaders.checkGLError("pre bindNSTextures");
|
||||
if (Shaders.isRenderingWorld && Shaders.activeTexUnit == GL13.GL_TEXTURE0)
|
||||
{
|
||||
GL13.glActiveTexture(GL13.GL_TEXTURE2);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, normTex);
|
||||
GL13.glActiveTexture(GL13.GL_TEXTURE3);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, specTex);
|
||||
GL13.glActiveTexture(GL13.GL_TEXTURE0);
|
||||
}
|
||||
//Shaders.checkGLError("bindNSTextures");
|
||||
}
|
||||
|
||||
public static void bindNSTextures(MultiTexID multiTex)
|
||||
{
|
||||
bindNSTextures(multiTex.norm, multiTex.spec);
|
||||
}
|
||||
|
||||
public static void bindTextures(int baseTex, int normTex, int specTex)
|
||||
{
|
||||
//Shaders.checkGLError("pre bindTextures");
|
||||
if (Shaders.isRenderingWorld && Shaders.activeTexUnit == GL13.GL_TEXTURE0)
|
||||
{
|
||||
GL13.glActiveTexture(GL13.GL_TEXTURE2);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, normTex);
|
||||
GL13.glActiveTexture(GL13.GL_TEXTURE3);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, specTex);
|
||||
GL13.glActiveTexture(GL13.GL_TEXTURE0);
|
||||
}
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, baseTex);
|
||||
//Shaders.checkGLError("bindTextures");
|
||||
}
|
||||
|
||||
public static void bindTextures(MultiTexID multiTex)
|
||||
{
|
||||
boundTex = multiTex;
|
||||
if (Shaders.isRenderingWorld && Shaders.activeTexUnit == GL13.GL_TEXTURE0)
|
||||
{
|
||||
if (Shaders.configNormalMap) {
|
||||
GL13.glActiveTexture(GL13.GL_TEXTURE2);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.norm);
|
||||
}
|
||||
if (Shaders.configSpecularMap) {
|
||||
GL13.glActiveTexture(GL13.GL_TEXTURE3);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.spec);
|
||||
}
|
||||
GL13.glActiveTexture(GL13.GL_TEXTURE0);
|
||||
}
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.base);
|
||||
}
|
||||
|
||||
public static void bindTexture(ITextureObject tex)
|
||||
{
|
||||
if (tex instanceof TextureMap) {
|
||||
Shaders.atlasSizeX = ((TextureMap)tex).atlasWidth;
|
||||
Shaders.atlasSizeY = ((TextureMap)tex).atlasHeight;
|
||||
} else {
|
||||
Shaders.atlasSizeX = 0;
|
||||
Shaders.atlasSizeY = 0;
|
||||
}
|
||||
bindTextures(tex.getMultiTexID());
|
||||
}
|
||||
|
||||
/** not used */
|
||||
public static void bindTextures(int baseTex)
|
||||
{
|
||||
MultiTexID multiTex = multiTexMap.get(Integer.valueOf(baseTex));
|
||||
bindTextures(multiTex);
|
||||
}
|
||||
|
||||
public static void allocTexStorage(int width, int height, int maxLevel)
|
||||
{
|
||||
Shaders.checkGLError("pre allocTexStorage");
|
||||
int level;
|
||||
for (level=0; (width>>level)>0 && (height>>level)>0 /*&& level<=maxLevel*/; ++level) {
|
||||
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, level, GL11.GL_RGBA, (width>>level), (height>>level), 0, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, (IntBuffer)null);
|
||||
}
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL12.GL_TEXTURE_MAX_LEVEL, level-1);
|
||||
Shaders.checkGLError("allocTexStorage");
|
||||
//clear unused level otherwise glTexSubImage2D will crash on AMD when reallocation texture of different size.
|
||||
//for ( ; level < 16 ; ++level) {
|
||||
// GL11.glTexImage2D(GL11.GL_TEXTURE_2D, level, GL11.GL_RGBA, 0, 0, 0, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, (IntBuffer)null);
|
||||
//}
|
||||
GL11.glGetError(); // It usually returns error 0x0501 Invalid value for width 0 height 0. Ignore it.
|
||||
}
|
||||
|
||||
// for Dynamic Texture
|
||||
public static void initDynamicTexture(int texID, int width, int height, DynamicTexture tex)
|
||||
{
|
||||
MultiTexID multiTex = tex.getMultiTexID();
|
||||
int[] aint = tex.getTextureData();
|
||||
int size = width * height;
|
||||
Arrays.fill(aint, size, size*2, defNormTexColor);
|
||||
Arrays.fill(aint, size*2, size*3, defSpecTexColor);
|
||||
// base texture
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.base);
|
||||
allocTexStorage(width,height,0);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL12.GL_TEXTURE_MAX_LEVEL, 0);
|
||||
|
||||
// norm texture
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.norm);
|
||||
allocTexStorage(width,height,0);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL12.GL_TEXTURE_MAX_LEVEL, 0);
|
||||
|
||||
// spec texture
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.spec);
|
||||
allocTexStorage(width,height,0);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL12.GL_TEXTURE_MAX_LEVEL, 0);
|
||||
|
||||
// base texture
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.base);
|
||||
}
|
||||
|
||||
public static ITextureObject createDefaultTexture()
|
||||
{
|
||||
DynamicTexture tex = new DynamicTexture(1,1);
|
||||
tex.getTextureData()[0] = 0xffffffff;
|
||||
tex.updateDynamicTexture();
|
||||
return tex;
|
||||
}
|
||||
|
||||
// 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+" ");
|
||||
updatingTextureMap = tex;
|
||||
tex.atlasWidth = width;
|
||||
tex.atlasHeight = height;
|
||||
MultiTexID multiTex = getMultiTexID(tex);
|
||||
updatingTex = multiTex;
|
||||
TextureUtil.allocateTextureImpl(multiTex.base, mipmapLevels, width, height, anisotropy);
|
||||
if (Shaders.configNormalMap )
|
||||
TextureUtil.allocateTextureImpl(multiTex.norm, mipmapLevels, width, height, anisotropy);
|
||||
if (Shaders.configSpecularMap)
|
||||
TextureUtil.allocateTextureImpl(multiTex.spec, mipmapLevels, width, height, anisotropy);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texID);
|
||||
}
|
||||
|
||||
public static TextureAtlasSprite setSprite(TextureAtlasSprite tas)
|
||||
{
|
||||
return updatingSprite = tas;
|
||||
}
|
||||
|
||||
public static String setIconName(String name)
|
||||
{
|
||||
return iconName = name;
|
||||
}
|
||||
|
||||
public static void uploadTexSubForLoadAtlas(int[][] data, int width, int height, int xoffset, int yoffset, boolean linear, boolean clamp)
|
||||
{
|
||||
TextureUtil.uploadTextureMipmap(data, width, height, xoffset, yoffset, linear, clamp);
|
||||
boolean border = updatingSprite.useAnisotropicFiltering;
|
||||
int[][] aaint;
|
||||
//
|
||||
if (Shaders.configNormalMap ) {
|
||||
aaint = readImageAndMipmaps(iconName+"_n", width, height, data.length, border, defNormTexColor);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, updatingTex.norm);
|
||||
TextureUtil.uploadTextureMipmap(aaint, width, height, xoffset, yoffset, linear, clamp);
|
||||
}
|
||||
//
|
||||
if (Shaders.configSpecularMap) {
|
||||
aaint = readImageAndMipmaps(iconName+"_s", width, height, data.length, border, defSpecTexColor);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, updatingTex.spec);
|
||||
TextureUtil.uploadTextureMipmap(aaint, width, height, xoffset, yoffset, linear, clamp);
|
||||
}
|
||||
//
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, updatingTex.base);
|
||||
}
|
||||
|
||||
public static int[][] readImageAndMipmaps(String name, int width, int height, int numLevels, boolean border, int defColor)
|
||||
{
|
||||
int[][] aaint = new int[numLevels][];
|
||||
int[] aint;
|
||||
aaint[0] = aint = new int[width*height];
|
||||
boolean goodImage = false;
|
||||
BufferedImage image = readImage(updatingTextureMap.completeResourceLocation(new ResourceLocation(name), 0));
|
||||
if (image != null) {
|
||||
int imageWidth = image.getWidth();
|
||||
int imageHeight = image.getHeight();
|
||||
if (imageWidth + (border? 16: 0) == width)
|
||||
{
|
||||
goodImage = true;
|
||||
image.getRGB(0, 0, imageWidth, imageWidth, aint, 0, imageWidth);
|
||||
if (border)
|
||||
TextureUtil.prepareAnisotropicData(aint, imageWidth, imageWidth, 8);
|
||||
}
|
||||
}
|
||||
if (!goodImage) {
|
||||
Arrays.fill(aint, defColor);
|
||||
}
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, updatingTex.spec);
|
||||
aaint = genMipmapsSimple(aaint.length-1, width, aaint);
|
||||
return aaint;
|
||||
}
|
||||
|
||||
public static BufferedImage readImage(ResourceLocation resLoc)
|
||||
{
|
||||
BufferedImage image = null;
|
||||
InputStream istr = null;
|
||||
try {
|
||||
istr = resManager.getResource(resLoc).getInputStream();
|
||||
image = ImageIO.read(istr);
|
||||
} catch (IOException e) {
|
||||
}
|
||||
if (istr != null) {
|
||||
try {
|
||||
istr.close();
|
||||
} catch (IOException e) {
|
||||
}
|
||||
istr = null;
|
||||
}
|
||||
return image;
|
||||
}
|
||||
|
||||
public static int[][] genMipmapsSimple(int maxLevel, int width, int[][]data)
|
||||
{
|
||||
int level;
|
||||
for (level=1; level<=maxLevel; ++level)
|
||||
{
|
||||
if (data[level]==null)
|
||||
{
|
||||
int cw = width>>level;
|
||||
int pw = cw*2;
|
||||
int[] aintp = data[level-1];
|
||||
int[] aintc = data[level] = new int[cw*cw];
|
||||
int x,y;
|
||||
for (y=0; y<cw; ++y) {
|
||||
for (x=0; x<cw; ++x) {
|
||||
int ppos = y*2*pw+x*2;
|
||||
aintc[y*cw+x] = blend4Simple(aintp[ppos],aintp[ppos+1],aintp[ppos+pw],aintp[ppos+pw+1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
public static void uploadTexSub(int[][] data, int width, int height, int xoffset, int yoffset, boolean linear, boolean clamp)
|
||||
{
|
||||
TextureUtil.uploadTextureMipmap(data, width, height, xoffset, yoffset, linear, clamp);
|
||||
}
|
||||
|
||||
public static int blend4Alpha(int c0, int c1, int c2, int c3)
|
||||
{
|
||||
int a0 = (c0 >>> 24) & 255;
|
||||
int a1 = (c1 >>> 24) & 255;
|
||||
int a2 = (c2 >>> 24) & 255;
|
||||
int a3 = (c3 >>> 24) & 255;
|
||||
int as = a0+a1+a2+a3;
|
||||
int an = (as+2)/4;
|
||||
//int an = Math.min(Math.min(Math.min(a0,a1),a2),a3);
|
||||
int dv;
|
||||
if (as != 0) {
|
||||
dv = as;
|
||||
} else {
|
||||
dv=4; a3=a2=a1=a0=1;
|
||||
}
|
||||
int frac = (dv+1)/2;
|
||||
//return (((Math.min(Math.min(Math.min(a0,a1),a2),a3)/ 4) << 24) |
|
||||
int color = (an << 24) |
|
||||
(((((c0>>>16)&255)*a0 + ((c1>>>16)&255)*a1 + ((c2>>>16)&255)*a2 + ((c3>>>16)&255)*a3 + frac)/dv) << 16) |
|
||||
(((((c0>>> 8)&255)*a0 + ((c1>>> 8)&255)*a1 + ((c2>>> 8)&255)*a2 + ((c3>>> 8)&255)*a3 + frac)/dv) << 8) |
|
||||
(((((c0>>> 0)&255)*a0 + ((c1>>> 0)&255)*a1 + ((c2>>> 0)&255)*a2 + ((c3>>> 0)&255)*a3 + frac)/dv) << 0) ;
|
||||
return color;
|
||||
}
|
||||
|
||||
public static int blend4Simple(int c0, int c1, int c2, int c3)
|
||||
{
|
||||
int color =
|
||||
(((((c0>>>24)&255) + ((c1>>>24)&255) + ((c2>>>24)&255) + ((c3>>>24)&255) + 2)/4) << 24) |
|
||||
(((((c0>>>16)&255) + ((c1>>>16)&255) + ((c2>>>16)&255) + ((c3>>>16)&255) + 2)/4) << 16) |
|
||||
(((((c0>>> 8)&255) + ((c1>>> 8)&255) + ((c2>>> 8)&255) + ((c3>>> 8)&255) + 2)/4) << 8) |
|
||||
(((((c0>>> 0)&255) + ((c1>>> 0)&255) + ((c2>>> 0)&255) + ((c3>>> 0)&255) + 2)/4) << 0) ;
|
||||
return color;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
h1 = h2 = height;
|
||||
o1 = o2 = offset;
|
||||
// generate mipmap from big to small
|
||||
o2 = offset; w2 = width; h2 = height;
|
||||
o1 = 0; w1 = 0; h1 = 0;
|
||||
for (level=0; w2>1 && h2>1; ++level,w2=w1,h2=h1,o2=o1) {
|
||||
o1 = o2 + w2*h2;
|
||||
w1 = w2/2; h1 = h2/2;
|
||||
for (int y=0; y<h1; ++y)
|
||||
{
|
||||
int p1 = o1+y*w1;
|
||||
int p2 = o2+y*2*w2;
|
||||
for (int x=0; x<w1; ++x)
|
||||
{
|
||||
aint[p1+x] = blend4Alpha(
|
||||
aint[p2 +(x*2 )],
|
||||
aint[p2 +(x*2+1)],
|
||||
aint[p2+w2+(x*2 )],
|
||||
aint[p2+w2+(x*2+1)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// fix black pixels from small to big
|
||||
while (level>0)
|
||||
{
|
||||
--level;
|
||||
w2 = width>>level;
|
||||
h2 = height>>level;
|
||||
o2 = o1 - w2*h2;
|
||||
int p2 = o2;
|
||||
for (int y=0; y<h2; ++y)
|
||||
{
|
||||
for (int x=0; x<w2; ++x)
|
||||
{
|
||||
//p2 = o2 + y*w2 + x;
|
||||
if (aint[p2] == 0) {
|
||||
aint[p2] = aint[o1 +(y/2)*w1 +(x/2)] & 0x00ffffff;
|
||||
}
|
||||
++p2;
|
||||
}
|
||||
}
|
||||
o1 = o2;
|
||||
w1 = w2;
|
||||
h1 = h2;
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
h1 = h2 = height;
|
||||
o1 = o2 = offset;
|
||||
// generate mipmap from big to small
|
||||
o2 = offset; w2 = width; h2 = height;
|
||||
o1 = 0; w1 = 0; h1 = 0;
|
||||
for (level=0; w2>1 && h2>1; ++level,w2=w1,h2=h1,o2=o1) {
|
||||
o1 = o2 + w2*h2;
|
||||
w1 = w2/2; h1 = h2/2;
|
||||
for (int y=0; y<h1; ++y)
|
||||
{
|
||||
int p1 = o1+y*w1;
|
||||
int p2 = o2+y*2*w2;
|
||||
for (int x=0; x<w1; ++x)
|
||||
{
|
||||
aint[p1+x] = blend4Simple(
|
||||
aint[p2 +(x*2 )],
|
||||
aint[p2 +(x*2+1)],
|
||||
aint[p2+w2+(x*2 )],
|
||||
aint[p2+w2+(x*2+1)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// fix black pixels from small to big
|
||||
while (level>0)
|
||||
{
|
||||
--level;
|
||||
w2 = width>>level;
|
||||
h2 = height>>level;
|
||||
o2 = o1 - w2*h2;
|
||||
int p2 = o2;
|
||||
for (int y=0; y<h2; ++y)
|
||||
{
|
||||
for (int x=0; x<w2; ++x)
|
||||
{
|
||||
//p2 = o2 + y*w2 + x;
|
||||
if (aint[p2] == 0) {
|
||||
aint[p2] = aint[o1 +(y/2)*w1 +(x/2)] & 0x00ffffff;
|
||||
}
|
||||
++p2;
|
||||
}
|
||||
}
|
||||
o1 = o2;
|
||||
w1 = w2;
|
||||
h1 = h2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static boolean isSemiTransparent(int[] aint, int width, int height)
|
||||
{
|
||||
int size = width*height;
|
||||
// grass side texture ?;
|
||||
if (aint[0] >>> 24 == 255 && aint[size-1] == 0)
|
||||
return true;
|
||||
for (int i=0; i<size; ++i)
|
||||
{
|
||||
int alpha = aint[i] >>> 24;
|
||||
if (alpha!=0 && alpha!=255)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void updateSubImage1(int[] src, int width, int height, int posX, int posY, int page, int color)
|
||||
{
|
||||
int size = width * height;
|
||||
IntBuffer intBuf = getIntBuffer(size);
|
||||
int[] aint = getIntArray((size*4+2)/3);
|
||||
if (src.length >= size*(page+1))
|
||||
{
|
||||
System.arraycopy(src, size*page, aint, 0, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
Arrays.fill(aint, color);
|
||||
}
|
||||
//
|
||||
// if (page == 0)
|
||||
genMipmapAlpha(aint,0,width,height);
|
||||
// else
|
||||
// genMipmapSimple(aint,0,width,height);
|
||||
//
|
||||
for (int level=0, offset=0, lw=width, lh=height, px=posX, py=posY;
|
||||
lw>0 && lh>0;
|
||||
++level)
|
||||
{
|
||||
int lsize = lw*lh;
|
||||
intBuf.clear();
|
||||
intBuf.put(aint, offset, lsize).position(0).limit(lsize);
|
||||
GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, level, px, py, lw, lh, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, intBuf);
|
||||
offset += lsize; lw/=2; lh/=2; px/=2; py/=2;
|
||||
}
|
||||
intBuf.clear();
|
||||
}
|
||||
|
||||
public static void updateSubTex1(int[] src, int width, int height, int posX, int posY)
|
||||
{
|
||||
int level;
|
||||
int cw;
|
||||
int ch;
|
||||
int cx;
|
||||
int cy;
|
||||
for (level = 0, cw=width, ch=height, cx=posX, cy=posY;
|
||||
cw>0 && ch>0;
|
||||
++level, cw/=2, ch/=2, cx/=2, cy/=2)
|
||||
{
|
||||
GL11.glCopyTexSubImage2D(GL11.GL_TEXTURE_2D, level, cx, cy, 0, 0, cw, ch);
|
||||
}
|
||||
}
|
||||
|
||||
/* updateSubImage for single Texture with mipmap */
|
||||
public static void updateSubImage1(int[][] src, int width, int height, int posX, int posY, int page, int color)
|
||||
{
|
||||
int size = width * height;
|
||||
IntBuffer intBuf = getIntBuffer(size);
|
||||
int numLevel = src.length;
|
||||
for (int level=0, //offset=0,
|
||||
lw=width, lh=height, px=posX, py=posY;
|
||||
lw>0 && lh>0 && level<numLevel;
|
||||
++level)
|
||||
{
|
||||
int lsize = lw*lh;
|
||||
intBuf.clear();
|
||||
intBuf.put(src[level], 0/*offset*/, lsize).position(0).limit(lsize);
|
||||
GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, level, px, py, lw, lh, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, intBuf);
|
||||
//offset += lsize;
|
||||
lw/=2; lh/=2; px/=2; py/=2;
|
||||
}
|
||||
intBuf.clear();
|
||||
}
|
||||
|
||||
public static void setupTextureMipmap(TextureMap tex)
|
||||
{
|
||||
/*
|
||||
MultiTexID multiTex = tex.getMultiTexID();
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.norm);
|
||||
GL30.glGenerateMipmap(GL11.GL_TEXTURE_2D);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.spec);
|
||||
GL30.glGenerateMipmap(GL11.GL_TEXTURE_2D);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.base);
|
||||
GL30.glGenerateMipmap(GL11.GL_TEXTURE_2D);
|
||||
*/
|
||||
}
|
||||
|
||||
public static void updateDynamicTexture(int texID, int[] src, int width, int height, DynamicTexture tex)
|
||||
{
|
||||
MultiTexID multiTex = tex.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);
|
||||
updateSubImage1(src, width, height, 0, 0, 2, defSpecTexColor);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.base);
|
||||
updateSubImage1(src, width, height, 0, 0, 0, defBaseTexColor);
|
||||
}
|
||||
|
||||
public static void updateSubImage(int[] src, int width, int height, int posX, int posY, boolean linear, boolean clamp)
|
||||
{
|
||||
if (updatingTex != null)
|
||||
{
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, updatingTex.norm);
|
||||
updateSubImage1(src, width, height, posX, posY, 1, defNormTexColor);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, updatingTex.spec);
|
||||
updateSubImage1(src, width, height, posX, posY, 2, defSpecTexColor);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, updatingTex.base);
|
||||
}
|
||||
updateSubImage1(src, width, height, posX, posY, 0, defBaseTexColor);
|
||||
}
|
||||
|
||||
// not used
|
||||
public static void updateAnimationTextureMap(TextureMap tex, List tasList)
|
||||
{
|
||||
Iterator<TextureAtlasSprite> iterator;
|
||||
MultiTexID multiTex = tex.getMultiTexID();
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.norm);
|
||||
for (iterator = tasList.iterator(); iterator.hasNext(); )
|
||||
{
|
||||
TextureAtlasSprite tas = iterator.next();
|
||||
tas.updateAnimation();
|
||||
}
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.norm);
|
||||
for (iterator = tasList.iterator(); iterator.hasNext(); )
|
||||
{
|
||||
TextureAtlasSprite tas = iterator.next();
|
||||
tas.updateAnimation();
|
||||
}
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.norm);
|
||||
for (iterator = tasList.iterator(); iterator.hasNext(); )
|
||||
{
|
||||
TextureAtlasSprite tas = iterator.next();
|
||||
tas.updateAnimation();
|
||||
}
|
||||
}
|
||||
|
||||
public static void setupTexture(MultiTexID multiTex, int[] src, int width, int height, boolean linear, boolean clamp)
|
||||
{
|
||||
int mmfilter = linear? GL11.GL_LINEAR: GL11.GL_NEAREST;
|
||||
int wraptype = clamp? GL11.GL_CLAMP: GL11.GL_REPEAT;
|
||||
int size = width * height;
|
||||
IntBuffer intBuf = getIntBuffer(size);
|
||||
//
|
||||
intBuf.clear();
|
||||
intBuf.put(src, 0, size).position(0).limit(size);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.base);
|
||||
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 0, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, intBuf);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, mmfilter);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, mmfilter);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, wraptype);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, wraptype);
|
||||
//
|
||||
intBuf.put(src, size, size).position(0).limit(size);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.norm);
|
||||
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 0, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, intBuf);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, mmfilter);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, mmfilter);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, wraptype);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, wraptype);
|
||||
//
|
||||
intBuf.put(src, size*2, size).position(0).limit(size);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.spec);
|
||||
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 0, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, intBuf);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, mmfilter);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, mmfilter);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, wraptype);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, wraptype);
|
||||
//
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.base);
|
||||
}
|
||||
|
||||
/* currently not used */
|
||||
public static void updateSubImage(MultiTexID multiTex, int[] src, int width, int height, int posX, int posY, boolean linear, boolean clamp)
|
||||
{
|
||||
int size = width * height;
|
||||
IntBuffer intBuf = getIntBuffer(size);
|
||||
//
|
||||
intBuf.clear();
|
||||
intBuf.put(src, 0, size);
|
||||
intBuf.position(0).limit(size);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.base);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
|
||||
GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0, posX, posY, width, height, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, intBuf);
|
||||
if (src.length == size*3)
|
||||
{
|
||||
intBuf.clear();
|
||||
intBuf.put(src, size, size).position(0);
|
||||
intBuf.position(0).limit(size);
|
||||
}
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.norm);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
|
||||
GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0, posX, posY, width, height, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, intBuf);
|
||||
if (src.length == size*3)
|
||||
{
|
||||
intBuf.clear();
|
||||
intBuf.put(src, size*2, size);
|
||||
intBuf.position(0).limit(size);
|
||||
}
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.spec);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
|
||||
GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0, posX, posY, width, height, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, intBuf);
|
||||
GL13.glActiveTexture(GL13.GL_TEXTURE0);
|
||||
}
|
||||
|
||||
public static ResourceLocation getNSMapLocation(ResourceLocation location, String mapName)
|
||||
{
|
||||
String basename = location.getResourcePath();
|
||||
String[] basenameParts = basename.split(".png");
|
||||
String basenameNoFileType = basenameParts[0];
|
||||
return new ResourceLocation(location.getResourceDomain(),basenameNoFileType+"_"+mapName+".png");
|
||||
}
|
||||
|
||||
public static void loadNSMap(IResourceManager manager, ResourceLocation location, int width, int height, int[] aint)
|
||||
{
|
||||
if (Shaders.configNormalMap)
|
||||
ShadersTex.loadNSMap1(manager, getNSMapLocation(location,"n"), width, height, aint, width*height , defNormTexColor);
|
||||
if (Shaders.configSpecularMap)
|
||||
ShadersTex.loadNSMap1(manager, getNSMapLocation(location,"s"), width, height, aint, width*height*2, defSpecTexColor);
|
||||
}
|
||||
|
||||
public static void loadNSMap1(IResourceManager manager, ResourceLocation location, int width, int height, int[] aint, int offset, int defaultColor)
|
||||
{
|
||||
boolean good = false;
|
||||
try
|
||||
{
|
||||
IResource res = manager.getResource(location);
|
||||
BufferedImage bufferedimage = ImageIO.read(res.getInputStream());
|
||||
if (bufferedimage.getWidth()==width && bufferedimage.getHeight()==height)
|
||||
{
|
||||
bufferedimage.getRGB(0, 0, width, height, aint, offset, width);
|
||||
good = true;
|
||||
}
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
}
|
||||
if (!good)
|
||||
{
|
||||
java.util.Arrays.fill(aint,offset,offset+width*height,defaultColor);
|
||||
}
|
||||
}
|
||||
|
||||
/** init and upload from BufferedImage */
|
||||
/* Replacement for TextureUtil.func_110989_a call in SimpleTexture.func_110551_a.
|
||||
Keep par0...par5 the same as func_110989_a for easy patching.
|
||||
More parameters added for reading N-S-Map. */
|
||||
public static int loadSimpleTexture(int textureID,
|
||||
BufferedImage bufferedimage, boolean linear, boolean clamp,
|
||||
IResourceManager resourceManager, ResourceLocation location, MultiTexID multiTex)
|
||||
{
|
||||
int width = bufferedimage.getWidth();
|
||||
int height = bufferedimage.getHeight();
|
||||
int size = width*height;
|
||||
int[] aint = getIntArray(size*3);
|
||||
bufferedimage.getRGB(0, 0, width, height, aint, 0, width);
|
||||
loadNSMap(resourceManager, location, width, height, aint);
|
||||
setupTexture(multiTex, aint, width, height, linear, clamp);
|
||||
return textureID;
|
||||
}
|
||||
|
||||
public static void mergeImage(int[] aint, int dstoff, int srcoff, int size)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public static int blendColor(int color1, int color2, int factor1)
|
||||
{
|
||||
int factor2 = 255-factor1;
|
||||
return
|
||||
(( (((color1>>>24)&255)*factor1 + ((color2>>>24)&255)*factor2) /255 ) << 24) |
|
||||
(( (((color1>>>16)&255)*factor1 + ((color2>>>16)&255)*factor2) /255 ) << 16) |
|
||||
(( (((color1>>> 8)&255)*factor1 + ((color2>>> 8)&255)*factor2) /255 ) << 8) |
|
||||
(( (((color1>>> 0)&255)*factor1 + ((color2>>> 0)&255)*factor2) /255 ) << 0);
|
||||
}
|
||||
|
||||
public static void loadLayeredTexture(LayeredTexture tex, IResourceManager manager, List list)
|
||||
{
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
int size = 0;
|
||||
int[] image = null;
|
||||
Iterator<String> iterator;
|
||||
for (iterator = list.iterator(); iterator.hasNext(); )
|
||||
{
|
||||
String s = iterator.next();
|
||||
if (s != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
ResourceLocation location = new ResourceLocation(s);
|
||||
InputStream inputstream = manager.getResource(location).getInputStream();
|
||||
BufferedImage bufimg = ImageIO.read(inputstream);
|
||||
|
||||
if (size == 0)
|
||||
{
|
||||
width = bufimg.getWidth();
|
||||
height = bufimg.getHeight();
|
||||
size = width*height;
|
||||
image = createAIntImage(size,0x00000000);
|
||||
}
|
||||
int[] aint = getIntArray(size * 3);
|
||||
bufimg.getRGB(0, 0, width, height, aint, 0, width);
|
||||
loadNSMap(manager, location, width, height, aint);
|
||||
// merge
|
||||
for (int i = 0; i < size; ++i)
|
||||
{
|
||||
int alpha = (aint[i] >>> 24) & 255;
|
||||
image[size*0+i] = blendColor(aint[size*0+i], image[size*0+i], alpha);
|
||||
image[size*1+i] = blendColor(aint[size*1+i], image[size*1+i], alpha);
|
||||
image[size*2+i] = blendColor(aint[size*2+i], image[size*2+i], alpha);
|
||||
}
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
// init and upload
|
||||
setupTexture(tex.getMultiTexID(), image, width, height, false, false);
|
||||
}
|
||||
|
||||
/* update block texture filter +/- items texture */
|
||||
static void updateTextureMinMagFilter()
|
||||
{
|
||||
TextureManager texman = Minecraft.getMinecraft().getTextureManager();
|
||||
ITextureObject texObj = texman.getTexture(TextureMap.locationBlocksTexture);
|
||||
if (texObj != null)
|
||||
{
|
||||
MultiTexID multiTex = texObj.getMultiTexID();
|
||||
// base texture
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.base);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, Shaders.texMinFilValue[Shaders.configTexMinFilB]);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, Shaders.texMagFilValue[Shaders.configTexMagFilB]);
|
||||
// norm texture
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.norm);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, Shaders.texMinFilValue[Shaders.configTexMinFilN]);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, Shaders.texMagFilValue[Shaders.configTexMagFilN]);
|
||||
|
||||
// spec texture
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, multiTex.spec);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, Shaders.texMinFilValue[Shaders.configTexMinFilS]);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, Shaders.texMagFilValue[Shaders.configTexMagFilS]);
|
||||
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static IResourceManager resManager = null;
|
||||
static ResourceLocation resLocation = null;
|
||||
static int imageSize = 0;
|
||||
|
||||
public static IResource loadResource(IResourceManager manager, ResourceLocation location) throws IOException
|
||||
{
|
||||
resManager = manager;
|
||||
resLocation = location;
|
||||
return manager.getResource(location);
|
||||
}
|
||||
|
||||
public static int[] loadAtlasSprite(BufferedImage bufferedimage, int startX, int startY, int w, int h, int[] aint, int offset, int scansize)
|
||||
{
|
||||
imageSize = w*h;
|
||||
bufferedimage.getRGB(startX, startY, w, h, aint, offset, scansize);
|
||||
loadNSMap(resManager, resLocation, w, h, aint);
|
||||
return aint;
|
||||
}
|
||||
|
||||
public static int[] extractFrame(int[] src, int width, int height, int frameIndex)
|
||||
{
|
||||
int srcSize = imageSize;
|
||||
int frameSize = width * height;
|
||||
int[] dst = new int[frameSize * 3];
|
||||
int srcPos = frameSize * frameIndex;
|
||||
int dstPos = 0;
|
||||
System.arraycopy(src, srcPos, dst, dstPos, frameSize);
|
||||
srcPos += srcSize; dstPos += frameSize;
|
||||
System.arraycopy(src, srcPos, dst, dstPos, frameSize);
|
||||
srcPos += srcSize; dstPos += frameSize;
|
||||
System.arraycopy(src, srcPos, dst, dstPos, frameSize);
|
||||
return dst;
|
||||
}
|
||||
|
||||
public static void fixTransparentColor(TextureAtlasSprite tas, int[] aint) {
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
package shadersmodcore.loading;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.launchwrapper.ITweaker;
|
||||
import net.minecraft.launchwrapper.Launch;
|
||||
import net.minecraft.launchwrapper.LaunchClassLoader;
|
||||
|
||||
public class SMCTweaker implements ITweaker {
|
||||
public List<String> args;
|
||||
public File gameDir;
|
||||
public File assetsDir;
|
||||
public String version;
|
||||
|
||||
@Override
|
||||
public void acceptOptions(List<String> args, File gameDir, File assetsDir, String version) {
|
||||
this.args = args;
|
||||
this.gameDir = gameDir;
|
||||
this.assetsDir = assetsDir;
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectIntoClassLoader(LaunchClassLoader launchClassLoader) {
|
||||
launchClassLoader.addTransformerExclusion("shadersmodcore.loading.");
|
||||
launchClassLoader.addTransformerExclusion("shadersmodcore.transform.");
|
||||
launchClassLoader.registerTransformer("shadersmodcore.transform.SMCClassTransformer");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getLaunchArguments() {
|
||||
ArrayList argumentList = (ArrayList)Launch.blackboard.get("ArgumentList");
|
||||
if (argumentList.isEmpty()) {
|
||||
List<String> argsList = new ArrayList();
|
||||
if (gameDir != null) {
|
||||
argumentList.add("--gameDir");
|
||||
argumentList.add(gameDir.getPath());
|
||||
}
|
||||
if (assetsDir != null) {
|
||||
argumentList.add("--assetsDir");
|
||||
argumentList.add(assetsDir.getPath());
|
||||
}
|
||||
argumentList.add("--version");
|
||||
argumentList.add(version);
|
||||
argumentList.addAll(args);
|
||||
}
|
||||
return new String[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLaunchTarget() {
|
||||
return "net.minecraft.client.main.Main";
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
public class InitNames {
|
||||
public static void init()
|
||||
{
|
||||
new NamerSrg().setNames();
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import shadersmodcore.transform.Names.Clas;
|
||||
import shadersmodcore.transform.Names.Fiel;
|
||||
import shadersmodcore.transform.Names.Meth;
|
||||
|
||||
public class Namer {
|
||||
|
||||
ArrayList<Clas> ac = new ArrayList();
|
||||
ArrayList<Fiel> af = new ArrayList();
|
||||
ArrayList<Meth> am = new ArrayList();
|
||||
|
||||
Clas c(String name) {
|
||||
Clas x = new Clas(name);
|
||||
if (ac!=null) ac.add(x);
|
||||
return x;
|
||||
}
|
||||
Fiel f(Clas clas, String name, String desc) {
|
||||
Fiel x = new Fiel(clas, name, desc);
|
||||
if (af!=null) af.add(x);
|
||||
return x;
|
||||
}
|
||||
Fiel f(Clas clas, Fiel fiel) {
|
||||
Fiel x = new Fiel(clas, fiel.name, fiel.desc);
|
||||
if (af!=null) af.add(x);
|
||||
return x;
|
||||
}
|
||||
Meth m(Clas clas, String name, String desc) {
|
||||
Meth x = new Meth(clas, name, desc);
|
||||
if (am!=null) am.add(x);
|
||||
return x;
|
||||
}
|
||||
Meth m(Clas clas, Meth meth) {
|
||||
Meth x = new Meth(clas, meth.name, meth.desc);
|
||||
if (am!=null) am.add(x);
|
||||
return x;
|
||||
}
|
||||
|
||||
public void setNames() {
|
||||
}
|
||||
}
|
||||
@@ -1,205 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import static shadersmodcore.transform.Names.*;
|
||||
|
||||
public class NamerSrg extends Namer {
|
||||
|
||||
public void setNames() {
|
||||
setNamesSrg();
|
||||
}
|
||||
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");
|
||||
guiOptions_actionPerformed = m(guiOptions_ ,"func_146284_a","("+guiButton_.desc+")V");
|
||||
guiOptions_initGui = m(guiOptions_ ,"func_73866_w_","()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");
|
||||
minecraft_startGame = m(minecraft_ ,"func_71384_a" ,"()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");
|
||||
renderBlocks_renderPistonExtension = m(renderBlocks_ ,"func_147809_c","("+block_.desc+"IIIZ)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);
|
||||
}
|
||||
}
|
||||
@@ -1,256 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
public class Names {
|
||||
|
||||
public static class Name {
|
||||
String clas;
|
||||
String name;
|
||||
String desc;
|
||||
public Name(String clas, String name, String desc) {
|
||||
this.clas = clas;
|
||||
this.name = name;
|
||||
this.desc = desc;
|
||||
}
|
||||
public Name set(String clas, String name, String desc) {
|
||||
this.clas = clas;
|
||||
this.name = name;
|
||||
this.desc = desc;
|
||||
return this;
|
||||
}
|
||||
public boolean equals(String clas, String name, String desc) {
|
||||
return this.clas.equals(clas) && this.name.equals(name) && this.desc.equals(desc);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Type extends Name {
|
||||
public Type(String desc) {
|
||||
super("","",desc);
|
||||
}
|
||||
public Type(String name, String desc) {
|
||||
super(name,name,desc);
|
||||
}
|
||||
}
|
||||
public static class Clas extends Type {
|
||||
public Clas(String name) {
|
||||
super(name,"L"+name+";");
|
||||
}
|
||||
public boolean equals(String clas) {
|
||||
return this.clas.equals(clas);
|
||||
}
|
||||
}
|
||||
public static class Fiel extends Name {
|
||||
public Fiel(Clas clas, String name, String desc) {
|
||||
super(clas.clas,name,desc);
|
||||
}
|
||||
public boolean equals(String clas, String name) {
|
||||
return this.clas.equals(clas) && this.name.equals(name);
|
||||
}
|
||||
}
|
||||
public static class Meth extends Name {
|
||||
public Meth(Clas clas, String name, String desc) {
|
||||
super(clas.clas,name,desc);
|
||||
}
|
||||
public boolean equalsNameDesc(String name, String desc) {
|
||||
return this.name.equals(name) && this.desc.equals(desc);
|
||||
}
|
||||
}
|
||||
|
||||
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 guiOptions_actionPerformed;
|
||||
static Meth guiOptions_initGui;
|
||||
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 minecraft_startGame;
|
||||
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 renderBlocks_renderPistonExtension;
|
||||
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,76 +0,0 @@
|
||||
package shadersmodcore.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 SMCCTBlock implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
if (Names.block_getAoLight.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.info(" patching");
|
||||
return new MVgetAoLight(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
return cv.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class MVgetAoLight extends MethodVisitor
|
||||
{
|
||||
public MVgetAoLight(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLdcInsn(Object cst) {
|
||||
if (cst instanceof Float)
|
||||
{
|
||||
if (((Float)cst).floatValue() == 0.2f)
|
||||
{
|
||||
mv.visitFieldInsn(GETSTATIC, "shadersmodcore/client/Shaders", "blockAoLight", "F");
|
||||
SMCLog.info(" blockAoLight");
|
||||
return;
|
||||
}
|
||||
}
|
||||
mv.visitLdcInsn(cst);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,636 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
import org.objectweb.asm.util.Textifier;
|
||||
import org.objectweb.asm.util.TraceMethodVisitor;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
import shadersmodcore.transform.SMCLog;
|
||||
|
||||
/** transformer for net.minecraft.client.renderer.EntityRenderer */
|
||||
public class SMCCTEntityRenderer implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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))
|
||||
{
|
||||
SMCLog.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))
|
||||
{
|
||||
SMCLog.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))
|
||||
{
|
||||
SMCLog.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))
|
||||
{
|
||||
SMCLog.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))
|
||||
{
|
||||
SMCLog.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))
|
||||
{
|
||||
SMCLog.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))
|
||||
{
|
||||
SMCLog.finer(" patch method %s.%s%s",classname,name,desc);
|
||||
access = access & (~ACC_PRIVATE & ~ACC_PROTECTED) | ACC_PUBLIC;
|
||||
return new MVrenderHand(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
} else
|
||||
if (Names.entityRenderer_renderWorld.equalsNameDesc(name,desc))
|
||||
{
|
||||
SMCLog.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, "shadersmodcore/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, "shadersmodcore/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, "shadersmodcore/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, "shadersmodcore/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, "shadersmodcore/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, "shadersmodcore/client/Shaders", "shouldRenderClouds", "("+Names.gameSettings_.desc+")Z");
|
||||
return;
|
||||
} else
|
||||
if (Names.renderGlobal_renderClouds.equals(owner,name,desc)) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "beginClouds", "()V");
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "endClouds", "()V");
|
||||
return;
|
||||
}
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
}
|
||||
}
|
||||
|
||||
private static class MVrenderHand extends MethodVisitor
|
||||
{
|
||||
Label la1, la2;
|
||||
public MVrenderHand(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
la1 = new Label();
|
||||
la2 = new Label();
|
||||
}
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name,
|
||||
String desc) {
|
||||
if (Names.equals("org/lwjgl/util/glu/Project","gluPerspective","(FFFF)V",owner,name,desc)) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "applyHandDepth", "()V");
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
return;
|
||||
} else
|
||||
if (Names.equals("org/lwjgl/opengl/GL11","glPushMatrix","()V",owner,name,desc)) {
|
||||
mv.visitFieldInsn(GETSTATIC, "shadersmodcore/client/Shaders", "isHandRendered", "Z");
|
||||
mv.visitJumpInsn(IFNE, la1);
|
||||
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.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
|
||||
mv.visitFieldInsn(GETSTATIC, "shadersmodcore/client/Shaders", "isCompositeRendered", "Z");
|
||||
mv.visitJumpInsn(IFNE, la2);
|
||||
mv.visitInsn(RETURN);
|
||||
mv.visitLabel(la2);
|
||||
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(FLOAD, 1);
|
||||
mv.visitInsn(F2D);
|
||||
mv.visitMethodInsn(INVOKEVIRTUAL, Names.entityRenderer_disableLightmap.clas, Names.entityRenderer_disableLightmap.name, Names.entityRenderer_disableLightmap.desc);
|
||||
return;
|
||||
} else if (Names.itemRenderer_renderItemInFirstPerson.equals(owner, name, desc)) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/ShadersRender", "renderItemFP", "("+Names.itemRenderer_.desc+"F)V");
|
||||
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, "shadersmodcore/client/Shaders", "beginRender", "("+Names.minecraft_.desc+"FJ)V");
|
||||
}
|
||||
@Override
|
||||
public void visitLdcInsn(Object cst) {
|
||||
if (cst instanceof String) {
|
||||
String scst = (String)cst;
|
||||
//SMCLog.finest(" %d Ldc %s", state, scst);
|
||||
section = scst;
|
||||
}
|
||||
mv.visitLdcInsn(cst);
|
||||
}
|
||||
@Override
|
||||
public void visitIntInsn(int opcode, int operand) {
|
||||
//SMCLog.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) {
|
||||
//SMCLog.finest(" %d, Jump %d", state, opcode);
|
||||
switch (state) {
|
||||
case 4:
|
||||
if (opcode==IF_ICMPLT) {
|
||||
++state;
|
||||
mv.visitInsn(POP2);
|
||||
mv.visitFieldInsn(GETSTATIC, "shadersmodcore/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, "shadersmodcore/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, "shadersmodcore/client/Shaders", "isShadowPass", "Z");
|
||||
mv.visitJumpInsn(IFNE, label);
|
||||
// mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "readCenterDepth", "()V");
|
||||
// mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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, "shadersmodcore/client/Shaders", "endHand", "()V");
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(FLOAD, 1);
|
||||
mv.visitVarInsn(ILOAD, 13);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/ShadersRender", "renderHand1", "("+Names.entityRenderer_.desc+"FI)V");
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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, "shadersmodcore/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) {
|
||||
//SMCLog.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, "shadersmodcore/client/Shaders", "endRender", "()V");
|
||||
return;
|
||||
}
|
||||
}
|
||||
mv.visitFrame(type, nLocal, local, nStack, stack);
|
||||
}
|
||||
@Override
|
||||
public void visitFieldInsn(int opcode, String owner, String name,
|
||||
String desc) {
|
||||
//SMCLog.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) {
|
||||
//SMCLog.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, "shadersmodcore/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, "shadersmodcore/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, "shadersmodcore/client/Shaders", "setCamera", "(F)V");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (Names.equals("Config","isSkyEnabled","()Z",owner,name,desc)) {
|
||||
state = 6;
|
||||
mv.visitFieldInsn(GETSTATIC, "shadersmodcore/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, "shadersmodcore/client/Shaders", "beginSky", "()V");
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "endSky", "()V");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (Names.renderGlobal_renderSky.equals(owner,name,desc)) {
|
||||
++state;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "beginSky", "()V");
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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, "shadersmodcore/client/ShadersRender", "setFrustrumPosition", "("+Names.frustrum_.desc+"DDD)V");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
if (Names.renderGlobal_clipRenderersByFrustum.equals(owner,name,desc)) {
|
||||
++state;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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, "shadersmodcore/client/Shaders", "beginTerrain", "()V");
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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, "shadersmodcore/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, "shadersmodcore/client/Shaders", "beginParticles", "()V");
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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, "shadersmodcore/client/Shaders", "beginWeather", "()V");
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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, "shadersmodcore/client/ShadersRender", "renderHand0", "("+Names.entityRenderer_.desc+"FI)V");
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "preWater", "()V");
|
||||
return;
|
||||
}
|
||||
case 18:
|
||||
case 19:
|
||||
case 20:
|
||||
if (Names.renderGlobal_sortAndRender.equals(owner,name,desc)) {
|
||||
++state;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "beginWater", "()V");
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "endWater", "()V");
|
||||
return;
|
||||
} else if (Names.equals(Names.renderGlobal_.clas,"renderAllSortedRenderers","(ID)I",owner,name,desc)) {
|
||||
++state;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "beginWater", "()V");
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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, "shadersmodcore/client/Shaders", "disableFog", "()V");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 24:
|
||||
if (Names.effectRenderer_renderLitParticles.equals(owner,name,desc)) {
|
||||
++state;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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, "shadersmodcore/client/Shaders", "beginParticles", "()V");
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "endParticles", "()V");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 30:
|
||||
if (Names.entityRenderer_renderHand.equals(owner,name,desc)) {
|
||||
++state;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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)
|
||||
SMCLog.severe(" state %d expect %d",state,stateEnd);
|
||||
mv.visitEnd();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,169 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTGuiOptions implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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) {
|
||||
this.classname = name;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (Names.guiOptions_initGui.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.info(" patching");
|
||||
return new MVinitGui(
|
||||
cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
if (Names.guiOptions_actionPerformed.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.info(" patching");
|
||||
return new MVactionPerformed(
|
||||
cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
return cv.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class MVinitGui extends MethodVisitor
|
||||
{
|
||||
int state = 0;
|
||||
|
||||
public MVinitGui(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitInsn(int opcode) {
|
||||
super.visitInsn(opcode);
|
||||
if (opcode == Opcodes.POP){
|
||||
if (state == 1) {
|
||||
state = 2;
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.guiOptions_buttonList.clas, Names.guiOptions_buttonList.name, Names.guiOptions_buttonList.desc);
|
||||
mv.visitTypeInsn(NEW, Names.guiButton_.clas);
|
||||
mv.visitInsn(DUP);
|
||||
mv.visitIntInsn(SIPUSH, 190);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.guiOptions_width.clas, Names.guiOptions_width.name, Names.guiOptions_width.desc);
|
||||
mv.visitInsn(ICONST_2);
|
||||
mv.visitInsn(IDIV);
|
||||
mv.visitIntInsn(SIPUSH, 155);
|
||||
mv.visitInsn(ISUB);
|
||||
mv.visitIntInsn(BIPUSH, 76);
|
||||
mv.visitInsn(IADD);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.guiOptions_height.clas, Names.guiOptions_height.name, Names.guiOptions_height.desc);
|
||||
mv.visitIntInsn(BIPUSH, 6);
|
||||
mv.visitInsn(IDIV);
|
||||
mv.visitIntInsn(BIPUSH, 120);
|
||||
mv.visitInsn(IADD);
|
||||
mv.visitIntInsn(BIPUSH, 6);
|
||||
mv.visitInsn(ISUB);
|
||||
mv.visitIntInsn(BIPUSH, 74);
|
||||
mv.visitIntInsn(BIPUSH, 20);
|
||||
mv.visitLdcInsn("Shaders...");
|
||||
mv.visitMethodInsn(INVOKESPECIAL, Names.guiButton_.clas, "<init>", "(IIIIILjava/lang/String;)V");
|
||||
mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z");
|
||||
mv.visitInsn(POP);
|
||||
SMCLog.finest(" add shaders button");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLdcInsn(Object cst) {
|
||||
if (cst instanceof String)
|
||||
{
|
||||
if (((String)cst).equals("options.language"))
|
||||
{
|
||||
if (state == 0) {
|
||||
state = 1;
|
||||
mv.visitInsn(POP);
|
||||
mv.visitInsn(POP);
|
||||
mv.visitIntInsn(BIPUSH, 74);
|
||||
mv.visitIntInsn(BIPUSH, 20);
|
||||
SMCLog.finest(" decrease language button size");
|
||||
}
|
||||
}
|
||||
}
|
||||
super.visitLdcInsn(cst);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class MVactionPerformed extends MethodVisitor
|
||||
{
|
||||
public MVactionPerformed(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitCode() {
|
||||
super.visitCode();
|
||||
mv.visitVarInsn(ALOAD, 1);
|
||||
mv.visitFieldInsn(GETFIELD, Names.guiButton_id.clas, Names.guiButton_id.name, Names.guiButton_id.desc);
|
||||
mv.visitIntInsn(SIPUSH, 190);
|
||||
Label l1 = new Label();
|
||||
mv.visitJumpInsn(IF_ICMPNE, l1);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.guiOptions_mc.clas, Names.guiOptions_mc.name, Names.guiOptions_mc.desc);
|
||||
mv.visitFieldInsn(GETFIELD, Names.minecraft_gameSettings.clas, Names.minecraft_gameSettings.name, Names.minecraft_gameSettings.desc);
|
||||
mv.visitMethodInsn(INVOKEVIRTUAL, Names.gameSettings_saveOptions.clas, Names.gameSettings_saveOptions.name, Names.gameSettings_saveOptions.desc);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.guiOptions_mc.clas, Names.guiOptions_mc.name, Names.guiOptions_mc.desc);
|
||||
mv.visitTypeInsn(NEW, "shadersmodcore/client/GuiShaders");
|
||||
mv.visitInsn(DUP);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.guiOptions_options.clas, Names.guiOptions_options.name, Names.guiOptions_options.desc);
|
||||
mv.visitMethodInsn(INVOKESPECIAL, "shadersmodcore/client/GuiShaders", "<init>", "("+Names.guiScreen_.desc+Names.gameSettings_.desc+")V");
|
||||
mv.visitMethodInsn(INVOKEVIRTUAL, Names.minecraft_displayGuiScreen.clas, Names.minecraft_displayGuiScreen.name, Names.minecraft_displayGuiScreen.desc);
|
||||
mv.visitLabel(l1);
|
||||
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
|
||||
SMCLog.finest(" shaders button action");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
package shadersmodcore.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;
|
||||
|
||||
public class SMCCTItemBlock implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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.itemBlock_block.name.equals(name)) {
|
||||
access = access & ~(ACC_PUBLIC|ACC_PRIVATE|ACC_PROTECTED) | ACC_PUBLIC;
|
||||
}
|
||||
return cv.visitField(access, name, desc, signature, value);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,118 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTItemRenderer implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s",classname,name,desc);
|
||||
if (Names.itemRenderer_updateEquipped.equalsNameDesc(name, desc))
|
||||
{
|
||||
SMCLog.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))
|
||||
{
|
||||
SMCLog.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))
|
||||
{
|
||||
SMCLog.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, "shadersmodcore/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,99 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTMinecraft implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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) {
|
||||
this.classname = name;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (Names.minecraft_startGame.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.info(" patching");
|
||||
return new MVstartGame(super.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
return super.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class MVstartGame extends MethodVisitor
|
||||
{
|
||||
int state = 0;
|
||||
|
||||
public MVstartGame(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLdcInsn(Object cst) {
|
||||
if (cst instanceof String)
|
||||
{
|
||||
if (((String)cst).equals("Startup"))
|
||||
{
|
||||
if (state == 0) {
|
||||
state = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
super.visitLdcInsn(cst);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitVarInsn(int opcode, int var) {
|
||||
if (opcode == Opcodes.ALOAD) {
|
||||
if (var == 0) {
|
||||
if (state == 1) {
|
||||
state = 2;
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "startup", "("+Names.minecraft_.desc+")V");
|
||||
//SMCLog.finest(" startup");
|
||||
}
|
||||
}
|
||||
}
|
||||
super.visitVarInsn(opcode, var);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,134 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.ListIterator;
|
||||
|
||||
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 static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.AbstractInsnNode;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTModelRenderer implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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.modelRenderer_compiled.name.equals(name) ||
|
||||
// Names.modelRenderer_displayList.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
// if (Names.modelRenderer_render.equalsNameDesc(name, desc))
|
||||
// {
|
||||
// //SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
// return new MVrender(
|
||||
// cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
// }
|
||||
// else
|
||||
// if (Names.modelRenderer_renderWithRotation.equalsNameDesc(name, desc))
|
||||
// {
|
||||
// //SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
// return new MVrender(
|
||||
// cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
// }
|
||||
// else
|
||||
if ("resetDisplayList".equals(name) && "()V".equals(desc)
|
||||
|| "getCompiled".equals(name) && "()Z".equals(desc)
|
||||
|| "getDisplayList".equals(name) && "()I".equals(desc)
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
return cv.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitEnd() {
|
||||
MethodVisitor mv;
|
||||
{
|
||||
mv = cv.visitMethod(ACC_PUBLIC, "getCompiled", "()Z", null, null);
|
||||
mv.visitCode();
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.modelRenderer_compiled.clas, Names.modelRenderer_compiled.name, Names.modelRenderer_compiled.desc);
|
||||
mv.visitInsn(IRETURN);
|
||||
mv.visitMaxs(1, 1);
|
||||
mv.visitEnd();
|
||||
}
|
||||
{
|
||||
mv = cv.visitMethod(ACC_PUBLIC, "getDisplayList", "()I", null, null);
|
||||
mv.visitCode();
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.modelRenderer_displayList.clas, Names.modelRenderer_displayList.name, Names.modelRenderer_displayList.desc);
|
||||
mv.visitInsn(IRETURN);
|
||||
mv.visitMaxs(1, 1);
|
||||
mv.visitEnd();
|
||||
}
|
||||
{
|
||||
mv = cv.visitMethod(ACC_PUBLIC, "resetDisplayList", "()V", null, null);
|
||||
mv.visitCode();
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.modelRenderer_compiled.clas, Names.modelRenderer_compiled.name, Names.modelRenderer_compiled.desc);
|
||||
Label l1 = new Label();
|
||||
mv.visitJumpInsn(IFEQ, l1);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.modelRenderer_displayList.clas, Names.modelRenderer_displayList.name, Names.modelRenderer_displayList.desc);
|
||||
mv.visitMethodInsn(INVOKESTATIC, Names.glAllocation_deleteDisplayLists.clas, Names.glAllocation_deleteDisplayLists.name, Names.glAllocation_deleteDisplayLists.desc);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitInsn(ICONST_0);
|
||||
mv.visitFieldInsn(PUTFIELD, Names.modelRenderer_displayList.clas, Names.modelRenderer_displayList.name, Names.modelRenderer_displayList.desc);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitInsn(ICONST_0);
|
||||
mv.visitFieldInsn(PUTFIELD, Names.modelRenderer_compiled.clas, Names.modelRenderer_compiled.name, Names.modelRenderer_compiled.desc);
|
||||
mv.visitLabel(l1);
|
||||
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
|
||||
mv.visitInsn(RETURN);
|
||||
mv.visitMaxs(2, 1);
|
||||
mv.visitEnd();
|
||||
}
|
||||
super.visitEnd();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,96 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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 static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTOpenGlHelper implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.info(" class %s",name);
|
||||
cv.visit(version, access, name, signature, superName, interfaces);
|
||||
}
|
||||
|
||||
//boolean has_activeTexUnit = false;
|
||||
|
||||
// @Override
|
||||
// public FieldVisitor visitField(int access, String name, String desc,
|
||||
// String signature, Object value) {
|
||||
// //if (name.equals("activeTexUnit")) {
|
||||
// // has_activeTexUnit = true;
|
||||
// //}
|
||||
// return cv.visitField(access, name, desc, signature, value);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public MethodVisitor visitMethod(int access, String name, String desc,
|
||||
String signature, String[] exceptions)
|
||||
{
|
||||
//if (!has_activeTexUnit) {
|
||||
// has_activeTexUnit = true;
|
||||
// FieldVisitor fv = cv.visitField(ACC_PUBLIC + ACC_STATIC, "activeTexUnit", "I", null, null);
|
||||
// fv.visitEnd();
|
||||
// SMCLog.finest(" add field activeTexUnit");
|
||||
//}
|
||||
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (Names.openGlHelper_setActiveTexture.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.info(" patching");
|
||||
return new MVsetActiveTexture(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
return cv.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class MVsetActiveTexture extends MethodVisitor
|
||||
{
|
||||
public MVsetActiveTexture(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitCode() {
|
||||
mv.visitCode();
|
||||
mv.visitVarInsn(ILOAD, 0);
|
||||
mv.visitFieldInsn(PUTSTATIC, "shadersmodcore/client/Shaders", "activeTexUnit", "I");
|
||||
SMCLog.finest(" set activeTexUnit");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,96 +0,0 @@
|
||||
package shadersmodcore.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 SMCCTPrjRedIlluRenderHalo implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" %s%s",name,desc);
|
||||
if ("prepareRenderState".equals(name) && "()V".equals(desc))
|
||||
{
|
||||
SMCLog.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))
|
||||
{
|
||||
SMCLog.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)) {
|
||||
SMCLog.info(" beginHalo");
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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)) {
|
||||
SMCLog.info(" endHalo");
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "endProjectRedHalo", "()V");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,82 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTRender implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (Names.render_renderShadow.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
return new MVrenderShadow(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
return cv.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class MVrenderShadow extends MethodVisitor
|
||||
{
|
||||
//protected MethodVisitor mv;
|
||||
public MVrenderShadow(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
//this.mv = mv;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitCode() {
|
||||
mv.visitCode();
|
||||
mv.visitFieldInsn(GETSTATIC, "shadersmodcore/client/Shaders", "shouldSkipDefaultShadow", "Z");
|
||||
Label l1 = new Label();
|
||||
mv.visitJumpInsn(IFEQ, l1);
|
||||
mv.visitInsn(RETURN);
|
||||
mv.visitLabel(l1);
|
||||
SMCLog.finer(" conditionally skip default shadow");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,388 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.ListIterator;
|
||||
|
||||
import org.lwjgl.opengl.GL12;
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.AbstractInsnNode;
|
||||
import org.objectweb.asm.tree.InsnList;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTRenderBlocks implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (Names.renderBlocks_renderBlockByRenderType.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
return new MVrenBlkByRenType(
|
||||
cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
else
|
||||
if (Names.renderBlocks_renderBlockFlowerPot.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
return new MVrenBlkFlowerPot(
|
||||
cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
else
|
||||
if (Names.renderBlocks_renderStdBlockWithAOP.equalsNameDesc(name, desc) ||
|
||||
Names.renderBlocks_renderStdBlockWithAO.equalsNameDesc(name, desc)
|
||||
)
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
return new MVrenBlkWithAO(access, name, desc, signature, exceptions,
|
||||
cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
else
|
||||
if (Names.renderBlocks_renderStdBlockWithCM.equalsNameDesc(name, desc) ||
|
||||
Names.renderBlocks_renderBlockCactusImpl.equalsNameDesc(name, desc) ||
|
||||
Names.renderBlocks_renderBlockBed.equalsNameDesc(name, desc) ||
|
||||
Names.renderBlocks_renderBlockFluids.equalsNameDesc(name, desc) ||
|
||||
Names.renderBlocks_renderBlockDoor.equalsNameDesc(name, desc) ||
|
||||
Names.renderBlocks_renderBlockSandFalling.equalsNameDesc(name, desc)
|
||||
)
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
return new MVrenBlkFVar(
|
||||
cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
else
|
||||
if (Names.renderBlocks_renderPistonExtension.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
return new MVrenBlkPistonExt(
|
||||
cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
return cv.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class MVrenBlkByRenType extends MethodVisitor
|
||||
{
|
||||
public MVrenBlkByRenType(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
int nPatch = 0;
|
||||
|
||||
@Override
|
||||
public void visitCode() {
|
||||
mv.visitCode();
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(ALOAD, 1);
|
||||
mv.visitVarInsn(ILOAD, 2);
|
||||
mv.visitVarInsn(ILOAD, 3);
|
||||
mv.visitVarInsn(ILOAD, 4);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "pushEntity", "("+Names.renderBlocks_.desc+Names.block_.desc+"III)V");
|
||||
//SMCLog.info(" pushEntity");
|
||||
++nPatch;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitInsn(int opcode) {
|
||||
if (opcode==Opcodes.IRETURN) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "popEntity", "()V");
|
||||
//SMCLog.info(" popEntity");
|
||||
++nPatch;
|
||||
}
|
||||
mv.visitInsn(opcode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitEnd() {
|
||||
mv.visitEnd();
|
||||
//SMCLog.info(" %d", nPatch);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class MVrenBlkFlowerPot extends MethodVisitor
|
||||
{
|
||||
public MVrenBlkFlowerPot(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
int nPatch = 0;
|
||||
int state = 0;
|
||||
|
||||
@Override
|
||||
public void visitVarInsn(int opcode, int var) {
|
||||
super.visitVarInsn(opcode, var);
|
||||
if (state==1) {
|
||||
++state;
|
||||
mv.visitVarInsn(ALOAD, var);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "pushEntity", "("+Names.block_.desc+")V");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name,
|
||||
String desc) {
|
||||
super.visitMethodInsn(opcode, owner, name, desc);
|
||||
switch (state) {
|
||||
case 0:
|
||||
if (Names.block_getBlockFromItem.equals(owner, name, desc)) {
|
||||
++state;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (Names.tessellator_addTranslation.equals(owner, name, desc)) {
|
||||
++state;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (Names.tessellator_addTranslation.equals(owner, name, desc)) {
|
||||
++state;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "popEntity", "()V");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitCode() {
|
||||
mv.visitCode();
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(ALOAD, 1);
|
||||
mv.visitVarInsn(ILOAD, 2);
|
||||
mv.visitVarInsn(ILOAD, 3);
|
||||
mv.visitVarInsn(ILOAD, 4);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "pushEntity", "("+Names.renderBlocks_.desc+Names.block_.desc+"III)V");
|
||||
//SMCLog.info(" pushEntity");
|
||||
++nPatch;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitInsn(int opcode) {
|
||||
if (opcode==Opcodes.IRETURN) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "popEntity", "()V");
|
||||
//SMCLog.info(" popEntity");
|
||||
++nPatch;
|
||||
}
|
||||
mv.visitInsn(opcode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitEnd() {
|
||||
mv.visitEnd();
|
||||
//SMCLog.info(" %d", nPatch);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static final String[] fieldsBlockLightLevel = {null,"blockLightLevel05","blockLightLevel06","blockLightLevel08"};
|
||||
|
||||
private static class MVrenBlkWithAO extends MethodVisitor
|
||||
{
|
||||
MethodVisitor mv1;
|
||||
MethodNode mn;
|
||||
int nPatch = 0;
|
||||
public MVrenBlkWithAO(final int access, final String name, final String desc,
|
||||
final String signature, final String[] exceptions,
|
||||
MethodVisitor mv) {
|
||||
super(Opcodes.ASM4);
|
||||
super.mv = this.mn = new MethodNode(access, name, desc, signature, exceptions);
|
||||
this.mv1 = mv;
|
||||
}
|
||||
@Override
|
||||
public void visitEnd() {
|
||||
mn.visitEnd();
|
||||
mn.accept(mv1);
|
||||
//SMCLog.info(" %d", nPatch);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLdcInsn(Object cst) {
|
||||
int match1 = 0;
|
||||
if (cst instanceof Float) {
|
||||
float fcst = ((Float)cst).floatValue();
|
||||
if (fcst == 0.5f) match1 = 1;
|
||||
else if (fcst == 0.6f) match1 = 2;
|
||||
else if (fcst == 0.8f) match1 = 3;
|
||||
}
|
||||
if (match1 != 0) {
|
||||
int match2 = 0;
|
||||
InsnList insns = mn.instructions;
|
||||
AbstractInsnNode insn = insns.getLast();
|
||||
if (insn!=null && insn.getOpcode()==Opcodes.FLOAD) {
|
||||
insn=insn.getPrevious();
|
||||
if (insn!=null && insn.getOpcode()==Opcodes.ALOAD) {
|
||||
insn=insn.getPrevious();
|
||||
if (insn!=null && insn.getOpcode()==Opcodes.ALOAD) {
|
||||
insn=insn.getPrevious();
|
||||
if (insn!=null && insn.getOpcode()==Opcodes.ALOAD) {
|
||||
insn=insn.getPrevious();
|
||||
if (insn!=null && insn.getOpcode()==Opcodes.ALOAD) {
|
||||
match2 = match1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (insn!=null && insn.getOpcode()==Opcodes.ALOAD) {
|
||||
insn=insn.getPrevious();
|
||||
if (insn!=null && insn.getOpcode()==Opcodes.ALOAD) {
|
||||
insn=insn.getPrevious();
|
||||
if (insn!=null && insn.getOpcode()==Opcodes.ALOAD) {
|
||||
insn=insn.getPrevious();
|
||||
if (insn!=null && insn.getOpcode()==Opcodes.ALOAD) {
|
||||
match2 = match1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (match2 != 0) {
|
||||
String fieldName = fieldsBlockLightLevel[match2];
|
||||
mn.visitFieldInsn(GETSTATIC, "shadersmodcore/client/Shaders", fieldName, "F");
|
||||
//SMCLog.info(" %s", fieldName);
|
||||
++nPatch;
|
||||
return;
|
||||
}
|
||||
}
|
||||
mn.visitLdcInsn(cst);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class MVrenBlkFVar extends MethodVisitor
|
||||
{
|
||||
int nPatch = 0;
|
||||
public MVrenBlkFVar(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
int state = 0;
|
||||
|
||||
@Override
|
||||
public void visitLdcInsn(Object cst) {
|
||||
int match1 = 0;
|
||||
if (cst instanceof Float) {
|
||||
float fcst = ((Float)cst).floatValue();
|
||||
if (fcst == 0.5f) match1 = 1;
|
||||
else if (fcst == 0.6f) match1 = 2;
|
||||
else if (fcst == 0.8f) match1 = 3;
|
||||
}
|
||||
if (match1 != 0 && state < 3) {
|
||||
++state;
|
||||
String fieldName = fieldsBlockLightLevel[match1];
|
||||
mv.visitFieldInsn(GETSTATIC, "shadersmodcore/client/Shaders", fieldName, "F");
|
||||
//SMCLog.info(" %s", fieldName);
|
||||
++nPatch;
|
||||
return;
|
||||
}
|
||||
mv.visitLdcInsn(cst);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitEnd() {
|
||||
mv.visitEnd();
|
||||
//SMCLog.info(" %d", nPatch);
|
||||
}
|
||||
}
|
||||
|
||||
private static class MVrenBlkPistonExt extends MethodVisitor
|
||||
{
|
||||
int nPatch = 0;
|
||||
public MVrenBlkPistonExt(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
int state = 0;
|
||||
|
||||
@Override
|
||||
public void visitTableSwitchInsn(int min, int max, Label dflt,
|
||||
Label... labels) {
|
||||
state = 1;
|
||||
mv.visitTableSwitchInsn(min, max, dflt, labels);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLdcInsn(Object cst) {
|
||||
int match1 = 0;
|
||||
if (cst instanceof Float) {
|
||||
float fcst = ((Float)cst).floatValue();
|
||||
if (fcst == 0.5f) match1 = 1;
|
||||
else if (fcst == 0.6f) match1 = 2;
|
||||
else if (fcst == 0.8f) match1 = 3;
|
||||
}
|
||||
if (match1 != 0 && state == 1) {
|
||||
String fieldName = fieldsBlockLightLevel[match1];
|
||||
mv.visitFieldInsn(GETSTATIC, "shadersmodcore/client/Shaders", fieldName, "F");
|
||||
//SMCLog.info(" %s", fieldName);
|
||||
++nPatch;
|
||||
return;
|
||||
}
|
||||
mv.visitLdcInsn(cst);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitEnd() {
|
||||
mv.visitEnd();
|
||||
//SMCLog.info(" %d", nPatch);
|
||||
}
|
||||
}
|
||||
|
||||
// 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,354 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
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 static org.objectweb.asm.Opcodes.*;
|
||||
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTRenderGlobal implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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.renderGlobal_worldRenderers.name.equals(name)) {
|
||||
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)
|
||||
{
|
||||
//String remappedName = SMCRemap.remapper.mapMethodName(classname, name, desc);
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (Names.renderGlobal_renderEntities.equalsNameDesc(name, desc))
|
||||
{
|
||||
SMCLog.finer(" patch method %s.%s%s",classname,name,desc);
|
||||
return new MVrenderEntities(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
else if (Names.renderGlobal_sortAndRender.equalsNameDesc(name, desc))
|
||||
{
|
||||
SMCLog.finer(" patch method %s.%s%s",classname,name,desc);
|
||||
return new MVendisTexFog(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
else if (Names.renderGlobal_renderSky.equalsNameDesc(name, desc))
|
||||
{
|
||||
SMCLog.finer(" patch method %s.%s%s",classname,name,desc);
|
||||
return new MVrenderSky(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
else if (Names.renderGlobal_drawBlockDamageTexture.equalsNameDesc(name, desc)
|
||||
|| name.equals("drawBlockDamageTexture") ) // Optifine
|
||||
{
|
||||
SMCLog.finer(" patch method %s.%s%s",classname,name,desc);
|
||||
return new MVdrawBlockDamageTexture(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
else if (Names.renderGlobal_drawSelectionBox.equalsNameDesc(name, desc))
|
||||
{
|
||||
SMCLog.finer(" patch method %s.%s%s",classname,name,desc);
|
||||
return new MVendisTexFog(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
return cv.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class MVrenderEntities extends MethodVisitor
|
||||
{
|
||||
public MVrenderEntities(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
int state = 0;
|
||||
|
||||
@Override
|
||||
public void visitLdcInsn(Object cst) {
|
||||
if (cst instanceof String) {
|
||||
String scst = (String)cst;
|
||||
if (scst.equals("entities")) {
|
||||
state = 1;
|
||||
}
|
||||
else if (scst.equals("blockentities")) {
|
||||
state = 4;
|
||||
}
|
||||
}
|
||||
mv.visitLdcInsn(cst);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitFieldInsn(int opcode, String owner, String name,
|
||||
String desc) {
|
||||
if (state==2) {
|
||||
if (Names.renderManager_instance.equals(owner, name, desc)) {
|
||||
state = 3;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "nextEntity", "()V");
|
||||
}
|
||||
}
|
||||
mv.visitFieldInsn(opcode, owner, name, desc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
if (state == 1) {
|
||||
state = 2;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "beginEntities", "()V");
|
||||
SMCLog.finest(" %s","beginEntities");
|
||||
} else if (state == 4) {
|
||||
state = 5;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "endEntities", "()V");
|
||||
SMCLog.finest(" %s","endEntities");
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "beginBlockEntities", "()V");
|
||||
SMCLog.finest(" %s","beginTileEntities");
|
||||
} else if (state == 5) {
|
||||
if (Names.entityRenderer_disableLightmap.equals(owner, name, desc)) {
|
||||
state = 6;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "endBlockEntities", "()V");
|
||||
SMCLog.finest(" %s","endTileEntities");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* detect glEnable or glDisable (TEXTURE_2D or FOG) */
|
||||
private static class MVendisTexFog extends MethodVisitor
|
||||
{
|
||||
public MVendisTexFog(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
int lastInt = 0;
|
||||
|
||||
@Override
|
||||
public void visitIntInsn(int opcode, int operand) {
|
||||
mv.visitIntInsn(opcode, operand);
|
||||
if (opcode == SIPUSH && (operand==3553 || operand==2912)) {
|
||||
lastInt = operand;
|
||||
}
|
||||
else {
|
||||
lastInt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
if (owner.equals("org/lwjgl/opengl/GL11")) {
|
||||
if (name.equals("glEnable")) {
|
||||
if (lastInt==GL11.GL_TEXTURE_2D) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "enableTexture2D", "()V");
|
||||
SMCLog.finest(" %s","enableTexture2D");
|
||||
} else if (lastInt==GL11.GL_FOG) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "enableFog", "()V");
|
||||
SMCLog.finest(" %s","enableFog");
|
||||
}
|
||||
} else if (name.equals("glDisable")) {
|
||||
if (lastInt==GL11.GL_TEXTURE_2D) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "disableTexture2D", "()V");
|
||||
SMCLog.finest(" %s","disableTexture2D");
|
||||
} else if (lastInt==GL11.GL_FOG) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "disableFog", "()V");
|
||||
SMCLog.finest(" %s","disableFog");
|
||||
}
|
||||
}
|
||||
}
|
||||
lastInt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* extends MVenableTF */
|
||||
private static class MVrenderSky extends MVendisTexFog
|
||||
{
|
||||
public MVrenderSky(MethodVisitor mv) {
|
||||
super(mv);
|
||||
}
|
||||
|
||||
int state = 0;
|
||||
boolean detectedOptifine = false;
|
||||
|
||||
int lastInt = 0;
|
||||
int lastVar = 0;
|
||||
|
||||
@Override
|
||||
public void visitIntInsn(int opcode, int operand) {
|
||||
mv.visitIntInsn(opcode, operand);
|
||||
if (opcode == SIPUSH) {
|
||||
lastInt = operand;
|
||||
} else {
|
||||
lastInt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitVarInsn(int opcode, int var) {
|
||||
mv.visitVarInsn(opcode, var);
|
||||
if (opcode == ALOAD) {
|
||||
lastVar = var;
|
||||
} else {
|
||||
lastVar = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void visitFieldInsn(int opcode, String owner, String name, String desc) {
|
||||
switch (state)
|
||||
{
|
||||
case 0:
|
||||
if (Names.vec3_xCoord.equals(owner, name)) {
|
||||
++state;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "setSkyColor", "("+Names.vec3_.desc+")V");
|
||||
mv.visitVarInsn(ALOAD, lastVar);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (Names.renderGlobal_glSkyList.equals(owner, name)) {
|
||||
++state;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "preSkyList", "()V");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
mv.visitFieldInsn(opcode, owner, name, desc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
|
||||
//SMCLog.info(" %s.%s%s",ownerM,nameM,descM);
|
||||
switch (state) {
|
||||
case 0:
|
||||
if (owner.equals("Config") && name.equals("isSkyEnabled")) {
|
||||
detectedOptifine = true;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (Names.worldClient_getRainStrength.equals(owner, name, desc)) {
|
||||
++state;
|
||||
}
|
||||
break;
|
||||
}
|
||||
//
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
//
|
||||
if (owner.equals("org/lwjgl/opengl/GL11")) {
|
||||
if (name.equals("glEnable")) {
|
||||
if (lastInt==GL11.GL_TEXTURE_2D) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "enableTexture2D", "()V");
|
||||
SMCLog.finest(" %s","enableTexture2D");
|
||||
} else if (lastInt==GL11.GL_FOG) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "enableFog", "()V");
|
||||
SMCLog.finest(" %s","enableFog");
|
||||
}
|
||||
} else if (name.equals("glDisable")) {
|
||||
if (lastInt==GL11.GL_TEXTURE_2D) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "disableTexture2D", "()V");
|
||||
SMCLog.finest(" %s","disableTexture2D");
|
||||
} else if (lastInt==GL11.GL_FOG) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "disableFog", "()V");
|
||||
SMCLog.finest(" %s","disableFog");
|
||||
}
|
||||
} else if (name.equals("glRotatef")) {
|
||||
SMCLog.finest(" *%s %d","glRotatef",state);
|
||||
if (state == 3) {
|
||||
++state;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "preCelestialRotate", "()V");
|
||||
SMCLog.finest(" %s","preCelestialRotate");
|
||||
} else if (state == 4) {
|
||||
++state;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "postCelestialRotate", "()V");
|
||||
SMCLog.finest(" %s","postCelestialRotate");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class MVdrawBlockDamageTexture extends MethodVisitor
|
||||
{
|
||||
int state = 0;
|
||||
|
||||
public MVdrawBlockDamageTexture(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitIntInsn(int opcode, int operand) {
|
||||
switch(state)
|
||||
{
|
||||
case 0:
|
||||
if (opcode==SIPUSH && operand==GL11.GL_ALPHA_TEST) {
|
||||
++state;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (opcode==SIPUSH && operand==GL11.GL_ALPHA_TEST) {
|
||||
++state;
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "endBlockDestroyProgress", "()V");
|
||||
SMCLog.finest(" %s","endBlockDestroyProgress");
|
||||
}
|
||||
break;
|
||||
}
|
||||
mv.visitIntInsn(opcode, operand);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
|
||||
switch(state)
|
||||
{
|
||||
case 1:
|
||||
if (owner.equals("org/lwjgl/opengl/GL11") && name.equals("glEnable")) {
|
||||
++state;
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "beginBlockDestroyProgress", "()V");
|
||||
SMCLog.finest(" %s","beginBlockDestroyProgress");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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 static org.objectweb.asm.Opcodes.*;
|
||||
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
/** transformer for net.minecraft.client.renderer.Tessellator */
|
||||
public class SMCCTRenderManager implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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,87 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTRenderSpider implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (Names.renderDragon_shouldRenderPass.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.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))
|
||||
{
|
||||
//SMCLog.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))
|
||||
{
|
||||
//SMCLog.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, "shadersmodcore/client/Shaders", "beginSpiderEyes", "()V");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,290 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.ListIterator;
|
||||
|
||||
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 static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.AbstractInsnNode;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTRendererLivingEntity implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (Names.rendererLivingE_doRender.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
return new MVdoRenderLiving(
|
||||
cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
else
|
||||
if (Names.rendererLivingE_renderLabel.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class MVdoRenderLiving extends MethodVisitor
|
||||
{
|
||||
public MVdoRenderLiving(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitCode() {
|
||||
//SMCLog.info(" insert code");
|
||||
mv.visitCode();
|
||||
mv.visitFieldInsn(GETSTATIC, "shadersmodcore/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, "shadersmodcore/client/Shaders", "setEntityHurtFlash", "(II)V");
|
||||
mv.visitLabel(label1);
|
||||
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
|
||||
//SMCLog.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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLdcInsn(Object cst) {
|
||||
if (cst instanceof Integer)
|
||||
{
|
||||
int icst = ((Integer)cst).intValue();
|
||||
if (icst == GL12.GL_RESCALE_NORMAL) {
|
||||
//SMCLog.info(" rescale_normal");
|
||||
if (labelEndVH != null) {
|
||||
//SMCLog.info(" jump target");
|
||||
mv.visitLabel(labelEndVH);
|
||||
labelEndVH = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
mv.visitLdcInsn(cst);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name,
|
||||
String desc) {
|
||||
//SMCLog.info(" %s.%s%s",ownerM,nameM,descM);
|
||||
if (opcode==INVOKEVIRTUAL) {
|
||||
if (Names.rendererLivingE_renderEquippedItems.equals(owner, name, desc)) {
|
||||
//SMCLog.info(" renderEquippedItems");
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "resetEntityHurtFlash", "()V");
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitFieldInsn(GETSTATIC, "shadersmodcore/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)) {
|
||||
//SMCLog.info(" glDepthFunc");
|
||||
if (state==3) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "beginLivingDamage", "()V");
|
||||
++state;
|
||||
} else if (state==4) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "endLivingDamage", "()V");
|
||||
++state;
|
||||
}
|
||||
} else if (Names.openGlHelper_setActiveTexture.equals(owner,name,desc)) {
|
||||
//SMCLog.info(" setActiveTexture");
|
||||
if (state==1) {
|
||||
++state;
|
||||
} else if (state==2) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "disableLightmap", "()V");
|
||||
++state;
|
||||
} else if (state==5) {
|
||||
++state;
|
||||
} else if (state==6) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/Shaders", "enableLightmap", "()V");
|
||||
++state;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitEnd() {
|
||||
mv.visitEnd();
|
||||
if (state != stateEnd) {
|
||||
SMCLog.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 = "shadersmodcore/client/Shaders";
|
||||
name = "sglDisableT2D";
|
||||
}
|
||||
else
|
||||
if (name.equals("glEnable"))
|
||||
{
|
||||
owner = "shadersmodcore/client/Shaders";
|
||||
name = "sglEnableT2D";
|
||||
}
|
||||
}
|
||||
}
|
||||
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,83 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.ListIterator;
|
||||
|
||||
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 static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.AbstractInsnNode;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTSmartMoveModelRotationRenderer implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.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,464 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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 static org.objectweb.asm.Opcodes.*;
|
||||
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
/** transformer for net.minecraft.client.renderer.Tessellator */
|
||||
public class SMCCTTessellator implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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 boolean inputHasStaticBuffer = false;
|
||||
|
||||
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;
|
||||
//SMCLog.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) {
|
||||
//SMCLog.fine("%x %s %s %s",access,desc,name,nameM);
|
||||
if ( name.equals("vertexPos") ||
|
||||
name.equals("normalX") ||
|
||||
name.equals("normalY") ||
|
||||
name.equals("normalZ") ||
|
||||
name.equals("midTextureU") ||
|
||||
name.equals("midTextureV")
|
||||
) {
|
||||
return null;
|
||||
} else if (((access & ACC_STATIC) != 0) && (
|
||||
Names.tessellator_byteBuffer.name.equals(name) ||
|
||||
Names.tessellator_intBuffer.name.equals(name) ||
|
||||
Names.tessellator_floatBuffer.name.equals(name) ||
|
||||
Names.tessellator_shortBuffer.name.equals(name) ||
|
||||
Names.tessellator_vertexCount.name.equals(name)
|
||||
//nameM.equals(Names.Tessellator_useVBO) ||
|
||||
//nameM.equals(Names.Tessellator_vertexBuffers)
|
||||
)) {
|
||||
inputHasStaticBuffer = true;
|
||||
//SMCLog.finest(" input has static buffer");
|
||||
access = access & (~ACC_STATIC & ~ACC_PRIVATE & ~ACC_PROTECTED) | ACC_PUBLIC;
|
||||
} 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;
|
||||
fv = cv.visitField(ACC_PUBLIC, "vertexPos", "[F", null, null);
|
||||
fv.visitEnd();
|
||||
fv = cv.visitField(ACC_PUBLIC, "normalX", "F", null, null);
|
||||
fv.visitEnd();
|
||||
fv = cv.visitField(ACC_PUBLIC, "normalY", "F", null, null);
|
||||
fv.visitEnd();
|
||||
fv = cv.visitField(ACC_PUBLIC, "normalZ", "F", null, null);
|
||||
fv.visitEnd();
|
||||
fv = cv.visitField(ACC_PUBLIC, "midTextureU", "F", null, null);
|
||||
fv.visitEnd();
|
||||
fv = cv.visitField(ACC_PUBLIC, "midTextureV", "F", null, null);
|
||||
fv.visitEnd();
|
||||
}
|
||||
//SMCLog.fine(" method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
if (name.equals("<clinit>"))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
return new MVclinit(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
} else
|
||||
if (name.equals("<init>") && desc.equals("()V"))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
return new MVinit(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
} else
|
||||
if (name.equals("<init>") && desc.equals("(I)V"))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
return new MVinitI(
|
||||
cv.visitMethod(access, name, desc, signature, exceptions)
|
||||
);
|
||||
} else
|
||||
if (Names.tessellator_draw.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
return new MVdraw(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
} else
|
||||
if (Names.tessellator_reset.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
access = access & ~(ACC_PRIVATE|ACC_PROTECTED) | ACC_PUBLIC;
|
||||
return new MVreset(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
} else
|
||||
if (Names.tessellator_addVertex.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
return new MVaddVertex(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
} else
|
||||
if (Names.tessellator_setNormal.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
return new MVsetNormal(
|
||||
cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
} else
|
||||
if (Names.tessellator_sortQuad.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
return new MVsortQuad(
|
||||
cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
} else
|
||||
{
|
||||
access = access & ~(ACC_PRIVATE|ACC_PROTECTED) | ACC_PUBLIC;
|
||||
}
|
||||
return cv.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
}
|
||||
|
||||
/*private static class MVclinit extends MethodVisitor
|
||||
{
|
||||
public MVclinit(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
}
|
||||
|
||||
private static class MVinit extends MethodVisitor
|
||||
{
|
||||
public MVinit(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitInsn(int opcode) {
|
||||
if (opcode == RETURN) {
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitIntInsn(BIPUSH, 16);
|
||||
mv.visitIntInsn(NEWARRAY, T_FLOAT);
|
||||
mv.visitFieldInsn(PUTFIELD, SMCNames.Tessellator_, "vertexPos", "[F");
|
||||
}
|
||||
mv.visitInsn(opcode);
|
||||
}
|
||||
}*/
|
||||
|
||||
private static class MVclinit extends MethodVisitor
|
||||
{
|
||||
public MVclinit(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitFieldInsn(int opcode, String owner, String name,
|
||||
String desc) {
|
||||
//SMCLog.finest(" F %d %s.%s %s", opcode, ownerM, nameM, descM);
|
||||
if (opcode==PUTSTATIC && (
|
||||
Names.tessellator_byteBuffer.equals(owner, name) ||
|
||||
Names.tessellator_intBuffer.equals(owner, name) ||
|
||||
Names.tessellator_floatBuffer.equals(owner, name) ||
|
||||
Names.tessellator_shortBuffer.equals(owner, name) ||
|
||||
Names.tessellator_vertexCount.equals(owner, name)
|
||||
//nameM.equals(Names.Tessellator_useVBO)||
|
||||
//nameM.equals(Names.Tessellator_vertexBuffers)
|
||||
))
|
||||
{
|
||||
mv.visitInsn(POP);
|
||||
return;
|
||||
} else
|
||||
if (opcode==GETSTATIC && (
|
||||
Names.tessellator_byteBuffer.equals(owner, name)
|
||||
//nameM.equals(Names.Tessellator_vertexBuffers)
|
||||
))
|
||||
{
|
||||
mv.visitInsn(ACONST_NULL);
|
||||
return;
|
||||
//} else
|
||||
//if (opcode==GETSTATIC && (
|
||||
// nameM.equals(Names.Tessellator_useVBO)
|
||||
// ))
|
||||
//{
|
||||
// mv.visitInsn(ICONST_0);
|
||||
// return;
|
||||
}
|
||||
mv.visitFieldInsn(opcode, owner, name, desc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name,
|
||||
String desc) {
|
||||
//SMCLog.finest(" M %d %s.%s %s", opcode, ownerM, nameM, descM);
|
||||
if (Names.glAllocation_createDirectByteBuffer.equals(owner, name, desc)) {
|
||||
mv.visitInsn(POP);
|
||||
mv.visitInsn(ACONST_NULL);
|
||||
return;
|
||||
} else if (Names.glAllocation_createDirectIntBuffer.equals(owner, name, desc)) {
|
||||
mv.visitInsn(POP);
|
||||
mv.visitInsn(ACONST_NULL);
|
||||
return;
|
||||
} else if (Names.equals("java/nio/ByteBuffer","asIntBuffer","()Ljava/nio/IntBuffer;",owner,name,desc) ) {
|
||||
mv.visitInsn(POP);
|
||||
mv.visitInsn(ACONST_NULL);
|
||||
return;
|
||||
} else if (Names.equals("java/nio/ByteBuffer","asFloatBuffer","()Ljava/nio/FloatBuffer;",owner,name,desc) ) {
|
||||
mv.visitInsn(POP);
|
||||
mv.visitInsn(ACONST_NULL);
|
||||
return;
|
||||
} else if (Names.equals("java/nio/ByteBuffer","asShortBuffer","()Ljava/nio/ShortBuffer;",owner,name,desc) ) {
|
||||
mv.visitInsn(POP);
|
||||
mv.visitInsn(ACONST_NULL);
|
||||
return;
|
||||
}
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
}
|
||||
}
|
||||
|
||||
private static class MVinit extends MethodVisitor
|
||||
{
|
||||
public MVinit(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
|
||||
if (opcode==INVOKESPECIAL
|
||||
&& Names.equals("java/lang/Object","<init>","()V",owner, name, desc) )
|
||||
{
|
||||
mv.visitLdcInsn(new Integer(65536));
|
||||
mv.visitMethodInsn(INVOKESPECIAL, Names.tessellator_.clas, "<init>", "(I)V");
|
||||
return;
|
||||
}
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
}
|
||||
}
|
||||
|
||||
private static class MVinitI extends MethodVisitor
|
||||
{
|
||||
public MVinitI(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitInsn(int opcode) {
|
||||
if (opcode == RETURN) {
|
||||
if (inputHasStaticBuffer) {
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(ILOAD, 1);
|
||||
mv.visitInsn(ICONST_4);
|
||||
mv.visitInsn(IMUL);
|
||||
mv.visitMethodInsn(INVOKESTATIC, Names.glAllocation_createDirectByteBuffer.clas, Names.glAllocation_createDirectByteBuffer.name, Names.glAllocation_createDirectByteBuffer.desc);
|
||||
mv.visitFieldInsn(PUTFIELD, Names.tessellator_byteBuffer.clas, Names.tessellator_byteBuffer.name, Names.tessellator_byteBuffer.desc);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.tessellator_byteBuffer.clas, Names.tessellator_byteBuffer.name, Names.tessellator_byteBuffer.desc);
|
||||
mv.visitMethodInsn(INVOKEVIRTUAL, "java/nio/ByteBuffer", "asIntBuffer", "()Ljava/nio/IntBuffer;");
|
||||
mv.visitFieldInsn(PUTFIELD, Names.tessellator_intBuffer.clas, Names.tessellator_intBuffer.name, Names.tessellator_intBuffer.desc);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.tessellator_byteBuffer.clas, Names.tessellator_byteBuffer.name, Names.tessellator_byteBuffer.desc);
|
||||
mv.visitMethodInsn(INVOKEVIRTUAL, "java/nio/ByteBuffer", "asFloatBuffer", "()Ljava/nio/FloatBuffer;");
|
||||
mv.visitFieldInsn(PUTFIELD, Names.tessellator_floatBuffer.clas, Names.tessellator_floatBuffer.name, Names.tessellator_floatBuffer.desc);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.tessellator_byteBuffer.clas, Names.tessellator_byteBuffer.name, Names.tessellator_byteBuffer.desc);
|
||||
mv.visitMethodInsn(INVOKEVIRTUAL, "java/nio/ByteBuffer", "asShortBuffer", "()Ljava/nio/ShortBuffer;");
|
||||
mv.visitFieldInsn(PUTFIELD, Names.tessellator_shortBuffer.clas, Names.tessellator_shortBuffer.name, Names.tessellator_shortBuffer.desc);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(ILOAD, 1);
|
||||
mv.visitIntInsn(NEWARRAY, T_INT);
|
||||
mv.visitFieldInsn(PUTFIELD, Names.tessellator_rawBuffer.clas, Names.tessellator_rawBuffer.name, Names.tessellator_rawBuffer.desc);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitInsn(ICONST_0);
|
||||
mv.visitFieldInsn(PUTFIELD, Names.tessellator_vertexCount.clas, Names.tessellator_vertexCount.name, Names.tessellator_vertexCount.desc);
|
||||
//mv.visitVarInsn(ALOAD, 0);
|
||||
//mv.visitFieldInsn(GETSTATIC, Names.Tessellator_, Names.Tessellator_tryVBO, "Z");
|
||||
//Label l28 = new Label();
|
||||
//mv.visitJumpInsn(IFEQ, l28);
|
||||
//mv.visitMethodInsn(INVOKESTATIC, "org/lwjgl/opengl/GLContext", "getCapabilities", "()Lorg/lwjgl/opengl/ContextCapabilities;");
|
||||
//mv.visitFieldInsn(GETFIELD, "org/lwjgl/opengl/ContextCapabilities", "GL_ARB_vertex_buffer_object", "Z");
|
||||
//mv.visitJumpInsn(IFEQ, l28);
|
||||
//mv.visitInsn(ICONST_1);
|
||||
//Label l29 = new Label();
|
||||
//mv.visitJumpInsn(GOTO, l29);
|
||||
//mv.visitLabel(l28);
|
||||
//mv.visitFrame(Opcodes.F_FULL, 2, new Object[] {Names.Tessellator_, Opcodes.INTEGER}, 1, new Object[] {Names.Tessellator_});
|
||||
//mv.visitInsn(ICONST_0);
|
||||
//mv.visitLabel(l29);
|
||||
//mv.visitFrame(Opcodes.F_FULL, 2, new Object[] {Names.Tessellator_, Opcodes.INTEGER}, 2, new Object[] {Names.Tessellator_, Opcodes.INTEGER});
|
||||
//mv.visitFieldInsn(PUTFIELD, Names.Tessellator_, Names.Tessellator_useVBO, "Z");
|
||||
//mv.visitVarInsn(ALOAD, 0);
|
||||
//mv.visitFieldInsn(GETFIELD, Names.Tessellator_, Names.Tessellator_useVBO, "Z");
|
||||
//Label l31 = new Label();
|
||||
//mv.visitJumpInsn(IFEQ, l31);
|
||||
//mv.visitVarInsn(ALOAD, 0);
|
||||
//mv.visitVarInsn(ALOAD, 0);
|
||||
//mv.visitFieldInsn(GETFIELD, Names.Tessellator_, Names.Tessellator_vboCount, "I");
|
||||
//mv.visitMethodInsn(INVOKESTATIC, Names.GLAllocation_, Names.GLAllocation_createDirectIntBuffer, Names.GLAllocation_createDirectIntBuffer_desc);
|
||||
//mv.visitFieldInsn(PUTFIELD, Names.Tessellator_, Names.Tessellator_vertexBuffers, "Ljava/nio/IntBuffer;");
|
||||
//mv.visitVarInsn(ALOAD, 0);
|
||||
//mv.visitFieldInsn(GETFIELD, Names.Tessellator_, Names.Tessellator_vertexBuffers, "Ljava/nio/IntBuffer;");
|
||||
//mv.visitMethodInsn(INVOKESTATIC, "org/lwjgl/opengl/ARBVertexBufferObject", "glGenBuffersARB", "(Ljava/nio/IntBuffer;)V");
|
||||
//mv.visitLabel(l31);
|
||||
//mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
|
||||
}
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitIntInsn(BIPUSH, 16);
|
||||
mv.visitIntInsn(NEWARRAY, T_FLOAT);
|
||||
mv.visitFieldInsn(PUTFIELD, Names.tessellator_.clas, "vertexPos", "[F");
|
||||
}
|
||||
mv.visitInsn(opcode);
|
||||
}
|
||||
}
|
||||
|
||||
private static class MVdraw extends MethodVisitor
|
||||
{
|
||||
public MVdraw(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, null);
|
||||
mv.visitCode();
|
||||
Label l0 = new Label();
|
||||
mv.visitLabel(l0);
|
||||
mv.visitLineNumber(185, l0);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/ShadersTess", "draw", "("+Names.tessellator_.desc+")I");
|
||||
mv.visitInsn(IRETURN);
|
||||
Label l1 = new Label();
|
||||
mv.visitLabel(l1);
|
||||
mv.visitLocalVariable("this", Names.tessellator_.desc, null, l0, l1, 0);
|
||||
mv.visitMaxs(1, 1);
|
||||
mv.visitEnd();
|
||||
}
|
||||
}
|
||||
|
||||
private static class MVreset extends MethodVisitor
|
||||
{
|
||||
public MVreset(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitFieldInsn(int opcode, String owner, String name,
|
||||
String desc) {
|
||||
//SMCLog.finest(" F %d %s.%s %s", opcode, ownerM, nameM, descM);
|
||||
if (opcode==GETSTATIC && Names.tessellator_byteBuffer.equals(owner, name))
|
||||
{
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, owner, name, desc);
|
||||
return;
|
||||
}
|
||||
mv.visitFieldInsn(opcode, owner, name, desc);
|
||||
}
|
||||
}
|
||||
|
||||
private static class MVaddVertex extends MethodVisitor
|
||||
{
|
||||
public MVaddVertex(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, null);
|
||||
mv.visitCode();
|
||||
Label l0 = new Label();
|
||||
mv.visitLabel(l0);
|
||||
mv.visitLineNumber(466, l0);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(DLOAD, 1);
|
||||
mv.visitVarInsn(DLOAD, 3);
|
||||
mv.visitVarInsn(DLOAD, 5);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/ShadersTess", "addVertex", "("+Names.tessellator_.desc+"DDD)V");
|
||||
Label l1 = new Label();
|
||||
mv.visitLabel(l1);
|
||||
mv.visitLineNumber(467, l1);
|
||||
mv.visitInsn(RETURN);
|
||||
Label l2 = new Label();
|
||||
mv.visitLabel(l2);
|
||||
mv.visitLocalVariable("this", Names.tessellator_.desc, null, l0, l2, 0);
|
||||
mv.visitLocalVariable("par1", "D", null, l0, l2, 1);
|
||||
mv.visitLocalVariable("par3", "D", null, l0, l2, 3);
|
||||
mv.visitLocalVariable("par5", "D", null, l0, l2, 5);
|
||||
mv.visitMaxs(7, 7);
|
||||
mv.visitEnd();
|
||||
}
|
||||
}
|
||||
|
||||
private static class MVsetNormal extends MethodVisitor
|
||||
{
|
||||
public MVsetNormal(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, null);
|
||||
mv.visitCode();
|
||||
Label l0 = new Label();
|
||||
mv.visitLabel(l0);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitInsn(ICONST_1);
|
||||
mv.visitFieldInsn(PUTFIELD, Names.tessellator_hasNormals.clas, Names.tessellator_hasNormals.name, Names.tessellator_hasNormals.desc);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(FLOAD, 1);
|
||||
mv.visitFieldInsn(PUTFIELD, Names.tessellator_.clas, "normalX", "F");
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(FLOAD, 2);
|
||||
mv.visitFieldInsn(PUTFIELD, Names.tessellator_.clas, "normalY", "F");
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitVarInsn(FLOAD, 3);
|
||||
mv.visitFieldInsn(PUTFIELD, Names.tessellator_.clas, "normalZ", "F");
|
||||
mv.visitInsn(RETURN);
|
||||
Label l5 = new Label();
|
||||
mv.visitLabel(l5);
|
||||
mv.visitLocalVariable("this", Names.tessellator_.desc, null, l0, l5, 0);
|
||||
mv.visitLocalVariable("par1", "F", null, l0, l5, 1);
|
||||
mv.visitLocalVariable("par2", "F", null, l0, l5, 2);
|
||||
mv.visitLocalVariable("par3", "F", null, l0, l5, 3);
|
||||
mv.visitMaxs(2, 4);
|
||||
mv.visitEnd();
|
||||
}
|
||||
}
|
||||
|
||||
private static class MVsortQuad extends MethodVisitor
|
||||
{
|
||||
public MVsortQuad(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitIntInsn(int opcode, int operand) {
|
||||
if (opcode == BIPUSH && operand == 32)
|
||||
{
|
||||
operand = 64;
|
||||
}
|
||||
super.visitIntInsn(opcode, operand);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
|
||||
/** transformer for net.minecraft.client.renderer.texture.AbstractTexture */
|
||||
public class SMCCTTextureAbstract implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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", "Lshadersmodcore/client/MultiTexID;", null, null);
|
||||
fv.visitEnd();
|
||||
}
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (Names.abstractTexture_deleteGlTexture.equalsNameDesc(name, desc)) {
|
||||
//SMCLog.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("()Lshadersmodcore/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", "()Lshadersmodcore/client/MultiTexID;", null, null);
|
||||
mv.visitCode();
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/ShadersTex", "getMultiTexID", "("+Names.abstractTexture_.desc+")Lshadersmodcore/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, "shadersmodcore/client/ShadersTex", "deleteTextures", "("+Names.abstractTexture_.desc+")V");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,191 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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 static org.objectweb.asm.Opcodes.*;
|
||||
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
/** transformer for net.minecraft.client.renderer.texture.TextureAtlasSprite */
|
||||
public class SMCCTTextureAtlasSprite implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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)
|
||||
{
|
||||
//SMCLog.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))
|
||||
{
|
||||
//SMCLog.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"))
|
||||
{
|
||||
//SMCLog.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))
|
||||
{
|
||||
//SMCLog.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"))
|
||||
{
|
||||
//SMCLog.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, "shadersmodcore/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, "shadersmodcore/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, "shadersmodcore/client/ShadersTex", "loadAtlasSprite", "(Ljava/awt/image/BufferedImage;IIII[III)[I");
|
||||
return;
|
||||
} else
|
||||
if (Names.textureAtlasSpri_getFrameTextureData.equals(owner,name,desc)) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/ShadersTex", "extractFrame", "([IIII)[I");
|
||||
return;
|
||||
} else
|
||||
if (Names.equals(Names.textureAtlasSpri_.clas,"fixTransparentColor","([I)V",owner,name,desc)) {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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, "shadersmodcore/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,62 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTTextureClock implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (Names.textureAtlasSpri_updateAnimation.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
return new SMCCTTextureAtlasSprite.MVanimation(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
return cv.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTTextureCompass implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (Names.textureCompass_updateCompass.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s",classname,name,desc,nameM);
|
||||
return new SMCCTTextureAtlasSprite.MVanimation(cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
return cv.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,95 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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 static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTTextureDownload implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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) {
|
||||
//SMCLog.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);
|
||||
//SMCLog.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", "()Lshadersmodcore/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", "()Lshadersmodcore/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,117 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTTextureDynamic implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (name.equals("<init>") && desc.equals("(II)V"))
|
||||
{
|
||||
//SMCLog.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))
|
||||
{
|
||||
//SMCLog.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, "shadersmodcore/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, "shadersmodcore/client/ShadersTex", "updateDynamicTexture", "(I[III"+Names.dynamicTexture_.desc+")V");
|
||||
return;
|
||||
}
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,87 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTTextureLayered implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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);
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (Names.iTextureObject_loadTexture.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.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, "shadersmodcore/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,104 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTTextureManager implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s%s",classname,name,desc,nameM,descM);
|
||||
if (Names.textureManager_bindTexture.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.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))
|
||||
{
|
||||
//SMCLog.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, "shadersmodcore/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, "shadersmodcore/client/ShadersTex", "deleteMultiTex", "("+Names.iTextureObject_.desc+")I");
|
||||
return;
|
||||
}
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,191 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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 static org.objectweb.asm.Opcodes.*;
|
||||
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTTextureMap implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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();
|
||||
}
|
||||
//SMCLog.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))
|
||||
{
|
||||
//SMCLog.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))
|
||||
{
|
||||
//SMCLog.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) {
|
||||
//SMCLog.finest(" %s.%s%s",ownerM,nameM,descM);
|
||||
if (Names.iResourceManager_getResource.equals(owner,name,desc)) {
|
||||
SMCLog.finest(" %s","loadRes");
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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)) {
|
||||
SMCLog.finest(" %s","allocateTextureMap");
|
||||
mv.visitVarInsn(ALOAD, varStitcher);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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)) {
|
||||
SMCLog.finest(" %s","setSprite setIconName");
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/ShadersTex", "setSprite", "("+Names.textureAtlasSpri_.desc+")"+Names.textureAtlasSpri_.desc);
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/ShadersTex", "setIconName", "(Ljava/lang/String;)Ljava/lang/String;");
|
||||
state = 0;
|
||||
return;
|
||||
}
|
||||
else if (Names.textureUtil_uploadTexSub.equals(owner,name,desc)) {
|
||||
SMCLog.finest(" %s","uploadTexSubForLoadAtlas");
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/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", "()Lshadersmodcore/client/MultiTexID;");
|
||||
mv.visitFieldInsn(PUTSTATIC, "shadersmodcore/client/ShadersTex", "updatingTex", "Lshadersmodcore/client/MultiTexID;");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitInsn(int opcode) {
|
||||
if (opcode==RETURN) {
|
||||
mv.visitInsn(ACONST_NULL);
|
||||
mv.visitFieldInsn(PUTSTATIC, "shadersmodcore/client/ShadersTex", "updatingTex", "Lshadersmodcore/client/MultiTexID;");
|
||||
}
|
||||
mv.visitInsn(opcode);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTTextureObject implements IClassTransformer {
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s",classname,name,desc,remappedName);
|
||||
if (name.equals("getMultiTexID") && desc.equals("()Lshadersmodcore/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", "()Lshadersmodcore/client/MultiTexID;", null, null);
|
||||
mv.visitEnd();
|
||||
// end
|
||||
cv.visitEnd();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
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;
|
||||
import static org.objectweb.asm.Opcodes.*;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class SMCCTTextureSimple implements IClassTransformer {
|
||||
|
||||
private static final int logDetail = 0;
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3) {
|
||||
SMCLog.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;
|
||||
//SMCLog.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)
|
||||
{
|
||||
//SMCLog.info(" method %s.%s%s = %s%s",classname,name,desc,nameM,descM);
|
||||
if (Names.iTextureObject_loadTexture.equalsNameDesc(name, desc))
|
||||
{
|
||||
//SMCLog.finer(" patching method %s.%s%s = %s%s",classname,name,desc,nameM,descM);
|
||||
return new MVloadTexture(
|
||||
cv.visitMethod(access, name, desc, signature, exceptions));
|
||||
}
|
||||
return cv.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class MVloadTexture extends MethodVisitor
|
||||
{
|
||||
public MVloadTexture(MethodVisitor mv) {
|
||||
super(Opcodes.ASM4, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name,
|
||||
String desc) {
|
||||
if (Names.textureUtil_uploadTextureImageAllocate.equals(owner,name,desc)) {
|
||||
//mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
mv.visitVarInsn(ALOAD, 1);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitFieldInsn(GETFIELD, Names.simpleTexture_textureLocation.clas, Names.simpleTexture_textureLocation.name, Names.simpleTexture_textureLocation.desc);
|
||||
mv.visitVarInsn(ALOAD, 0);
|
||||
mv.visitMethodInsn(INVOKEVIRTUAL, Names.simpleTexture_.clas, "getMultiTexID", "()Lshadersmodcore/client/MultiTexID;");
|
||||
mv.visitMethodInsn(INVOKESTATIC, "shadersmodcore/client/ShadersTex", "loadSimpleTexture", "(ILjava/awt/image/BufferedImage;ZZ"+Names.iResourceManager_.desc+Names.resourceLocation_.desc+"Lshadersmodcore/client/MultiTexID;)I");
|
||||
SMCLog.finer(" loadSimpleTexture");
|
||||
return;
|
||||
}
|
||||
mv.visitMethodInsn(opcode, owner, name, desc);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,84 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipException;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
import org.objectweb.asm.ClassReader;
|
||||
import org.objectweb.asm.ClassWriter;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
|
||||
public class SMCClassTransformer implements IClassTransformer {
|
||||
|
||||
Names names;
|
||||
/** map of class transformer */
|
||||
protected Map<String,IClassTransformer> ctMap;
|
||||
|
||||
public void put(Names.Clas clas, IClassTransformer ct)
|
||||
{
|
||||
ctMap.put(clas.clas.replace('/', '.'), ct);
|
||||
}
|
||||
|
||||
// constructor
|
||||
public SMCClassTransformer()
|
||||
{
|
||||
names = new Names();
|
||||
InitNames.init();
|
||||
ctMap = new HashMap();
|
||||
put(Names.block_ , new SMCCTBlock());
|
||||
put(Names.itemBlock_ , new SMCCTItemBlock());
|
||||
put(Names.minecraft_ , new SMCCTMinecraft());
|
||||
put(Names.guiOptions_ , new SMCCTGuiOptions());
|
||||
put(Names.modelRenderer_ , new SMCCTModelRenderer());
|
||||
put(Names.openGlHelper_ , new SMCCTOpenGlHelper());
|
||||
put(Names.tessellator_ , new SMCCTTessellator());
|
||||
put(Names.renderBlocks_ , new SMCCTRenderBlocks());
|
||||
put(Names.renderGlobal_ , new SMCCTRenderGlobal());
|
||||
put(Names.entityRenderer_ , new SMCCTEntityRenderer());
|
||||
put(Names.render_ , new SMCCTRender());
|
||||
put(Names.renderManager_ , new SMCCTRenderManager());
|
||||
put(Names.rendererLivingE_ , new SMCCTRendererLivingEntity());
|
||||
put(Names.renderDragon_ , new SMCCTRenderSpider());
|
||||
put(Names.renderEnderman_ , new SMCCTRenderSpider());
|
||||
put(Names.renderSpider_ , new SMCCTRenderSpider());
|
||||
put(Names.itemRenderer_ , new SMCCTItemRenderer());
|
||||
put(Names.textureDownload_ , new SMCCTTextureDownload());
|
||||
put(Names.abstractTexture_ , new SMCCTTextureAbstract());
|
||||
put(Names.iTextureObject_ , new SMCCTTextureObject());
|
||||
put(Names.simpleTexture_ , new SMCCTTextureSimple());
|
||||
put(Names.layeredTexture_ , new SMCCTTextureLayered());
|
||||
put(Names.dynamicTexture_ , new SMCCTTextureDynamic());
|
||||
put(Names.textureMap_ , new SMCCTTextureMap());
|
||||
put(Names.textureAtlasSpri_, new SMCCTTextureAtlasSprite());
|
||||
put(Names.textureClock_ , new SMCCTTextureClock());
|
||||
put(Names.textureCompass_ , new SMCCTTextureCompass());
|
||||
put(Names.textureManager_ , new SMCCTTextureManager());
|
||||
ctMap.put("mrtjp.projectred.illumination.RenderHalo$", new SMCCTPrjRedIlluRenderHalo());
|
||||
ctMap.put("net.smart.render.ModelRotationRenderer", new SMCCTSmartMoveModelRotationRenderer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] transform(String par1, String par2, byte[] par3)
|
||||
{
|
||||
byte[] bytecode = par3;
|
||||
//if (par2.startsWith("mrtjp")) SMCLog.info("**** [%s]", par2);
|
||||
IClassTransformer ct = ctMap.get(par2);
|
||||
if (ct != null)
|
||||
{
|
||||
bytecode = ct.transform(par1, par2, bytecode);
|
||||
int len1 = par3.length; //arg2!=null?arg2.length:0;
|
||||
int len2 = bytecode.length; //bytecode!=null?bytecode.length:0;
|
||||
SMCLog.fine(" %d (%+d)", len2, len2-len1);
|
||||
}
|
||||
return bytecode;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,105 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
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;
|
||||
import java.util.logging.SimpleFormatter;
|
||||
|
||||
import static java.util.logging.Level.*;
|
||||
|
||||
public abstract class SMCLog {
|
||||
|
||||
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 SMCLogger extends Logger {
|
||||
SMCLogger(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 smcLogName = "SMC";
|
||||
public static final Logger logger = new SMCLogger(smcLogName);
|
||||
public static final Level SMCINFO = new SMCLevel("INF",850);
|
||||
public static final Level SMCCONFIG = new SMCLevel("CFG",840);
|
||||
public static final Level SMCFINE = new SMCLevel("FNE",830);
|
||||
public static final Level SMCFINER = new SMCLevel("FNR",820);
|
||||
public static final Level SMCFINEST = 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(SMCINFO))
|
||||
logger.log(SMCINFO,String.format(format, args));
|
||||
}
|
||||
public static void config(String format, Object ... args) {
|
||||
if (logger.isLoggable(SMCCONFIG))
|
||||
logger.log(SMCCONFIG,String.format(format, args));
|
||||
}
|
||||
public static void fine(String format, Object ... args) {
|
||||
if (logger.isLoggable(SMCFINE))
|
||||
logger.log(SMCFINE,String.format(format, args));
|
||||
}
|
||||
public static void finer(String format, Object ... args) {
|
||||
if (logger.isLoggable(SMCFINER))
|
||||
logger.log(SMCFINER,String.format(format, args));
|
||||
}
|
||||
public static void finest(String format, Object ... args) {
|
||||
if (logger.isLoggable(SMCFINEST))
|
||||
logger.log(SMCFINEST,String.format(format, args));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
public class InitNames {
|
||||
public static void init()
|
||||
{
|
||||
new NamerMcp().setNames();
|
||||
}
|
||||
}
|
||||
@@ -1,205 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import static shadersmodcore.transform.Names.*;
|
||||
|
||||
public class Namer1_7_10 extends Namer {
|
||||
|
||||
public void setNames() {
|
||||
setNames1_7_10();
|
||||
}
|
||||
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");
|
||||
guiOptions_actionPerformed = m(guiOptions_ ,"a","("+guiButton_.desc+")V");
|
||||
guiOptions_initGui = m(guiOptions_ ,"b","()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");
|
||||
minecraft_startGame = m(minecraft_ ,"ag" ,"()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");
|
||||
renderBlocks_renderPistonExtension = m(renderBlocks_ ,"c","("+block_.desc+"IIIZ)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);
|
||||
}
|
||||
}
|
||||
@@ -1,183 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import static shadersmodcore.transform.Names.*;
|
||||
|
||||
public class Namer1_7_2 extends Namer {
|
||||
|
||||
public void setNames() {
|
||||
block_ = c("net/minecraft/block/Block");
|
||||
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");
|
||||
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",null);
|
||||
guiOptions_buttonList = f(guiOptions_ ,"field_146292_n",null);
|
||||
guiOptions_width = f(guiOptions_ ,"field_146294_l",null);
|
||||
guiOptions_height = f(guiOptions_ ,"field_146295_m",null);
|
||||
guiOptions_mc = f(guiOptions_ ,"field_146297_k",null);
|
||||
guiOptions_options = f(guiOptions_ ,"field_146443_h",null);
|
||||
layeredTexture_layeredTextureNames = f(layeredTexture_,"field_110567_b",null);
|
||||
minecraft_renderGlobal = f(minecraft_ ,"field_71438_f" ,null);
|
||||
minecraft_gameSettings = f(minecraft_ ,"field_71474_y" ,null);
|
||||
modelRenderer_displayList = f(modelRenderer_ ,"field_78811_r" ,null);
|
||||
modelRenderer_compiled = f(modelRenderer_ ,"field_78812_q" ,null);
|
||||
renderGlobal_glSkyList = f(renderGlobal_ ,"field_72771_w" ,null);
|
||||
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_instance = f(renderManager_ , "field_78727_a",renderManager_.desc);
|
||||
simpleTexture_textureLocation = f(simpleTexture_ ,"field_110568_b",resourceLocation_.desc);
|
||||
tessellator_floatBuffer = f(tessellator_ ,"field_147566_d",null);
|
||||
tessellator_shortBuffer = f(tessellator_ ,"field_147567_e",null);
|
||||
tessellator_intBuffer = f(tessellator_ ,"field_147568_c",null);
|
||||
tessellator_byteBuffer = f(tessellator_ ,"field_78394_d" ,null);
|
||||
tessellator_rawBuffer = f(tessellator_ ,"field_78405_h" ,null);
|
||||
tessellator_vertexCount = f(tessellator_ ,"field_78406_i" ,null);
|
||||
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","("+iBlockAccess_.desc+"III)F");
|
||||
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;");
|
||||
guiOptions_actionPerformed = m(guiOptions_ ,"func_146284_a","("+guiButton_.desc+")V");
|
||||
guiOptions_initGui = m(guiOptions_ ,"func_73866_w_","()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");
|
||||
minecraft_startGame = m(minecraft_ ,"func_71384_a" ,"()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_renderStdBlockWithAOP = m(renderBlocks_ ,"func_147808_b","("+block_.desc+"IIIFFF)Z");
|
||||
renderBlocks_renderPistonExtension = m(renderBlocks_ ,"func_147809_c","("+block_.desc+"IIIZ)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_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");
|
||||
worldClient_getCelestialAngle = m(worldClient_ ,"func_72826_c" ,"(F)F");
|
||||
worldClient_getRainStrength = m(worldClient_ ,"func_72867_j" ,"(F)F");
|
||||
|
||||
frustrum_setPosition = m(frustrum_,iCamera_setPosition);
|
||||
}
|
||||
}
|
||||
@@ -1,191 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import static shadersmodcore.transform.Names.*;
|
||||
|
||||
public class Namer1_7_4 extends Namer {
|
||||
|
||||
public void setNames() {
|
||||
setNames1_7_4();
|
||||
}
|
||||
public void setNames1_7_4() {
|
||||
block_ = c("ahz");
|
||||
minecraft_ = c("azi");
|
||||
guiButton_ = c("bau");
|
||||
guiOptions_ = c("bcb");
|
||||
guiScreen_ = c("bcl");
|
||||
modelRenderer_ = c("bjs");
|
||||
worldClient_ = c("bka");
|
||||
effectRenderer_ = c("blh");
|
||||
entityRenderer_ = c("bmm");
|
||||
glAllocation_ = c("azh");
|
||||
itemRenderer_ = c("bmr");
|
||||
openGlHelper_ = c("bwg");
|
||||
renderBlocks_ = c("bmf");
|
||||
renderGlobal_ = c("bmt");
|
||||
tessellator_ = c("bna");
|
||||
worldRenderer_ = c("bmh");
|
||||
frustrum_ = c("bnq");
|
||||
iCamera_ = c("bno");
|
||||
render_ = c("boh");
|
||||
renderDragon_ = c("boe");
|
||||
renderEnderman_ = c("bof");
|
||||
renderSpider_ = c("bpo");
|
||||
renderManager_ = c("bog");
|
||||
rendererLivingE_ = c("bpa");
|
||||
abstractTexture_ = c("bqi");
|
||||
dynamicTexture_ = c("bqj");
|
||||
iTextureObject_ = c("bra");
|
||||
layeredTexture_ = c("bqm");
|
||||
simpleTexture_ = c("bqn");
|
||||
stitcher_ = c("bqo");
|
||||
textureAtlasSpri_ = c("bqw");
|
||||
textureClock_ = c("bre");
|
||||
textureCompass_ = c("brf");
|
||||
textureManager_ = c("bqy");
|
||||
textureMap_ = c("bqs");
|
||||
textureUtil_ = c("brb");
|
||||
textureDownload_ = c("bqk");
|
||||
iResource_ = c("brp");
|
||||
iResourceManager_ = c("brr");
|
||||
gameSettings_ = c("bac");
|
||||
tessVertexState_ = c("bnb");
|
||||
entity_ = c("qr");
|
||||
entityLivingBase_ = c("rm");
|
||||
entityDragon_ = c("vr");
|
||||
entityEnderman_ = c("wr");
|
||||
entitySpider_ = c("xe");
|
||||
entityPlayer_ = c("xq");
|
||||
itemBlock_ = c("zy");
|
||||
itemStack_ = c("abu");
|
||||
movingObjectPos_ = c("ayn");
|
||||
resourceLocation_ = c("brq");
|
||||
vec3_ = c("ayp");
|
||||
iBlockAccess_ = c("agc");
|
||||
world_ = c("afs");
|
||||
|
||||
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");
|
||||
guiOptions_buttonList = f(guiOptions_ ,"n","Ljava/util/List;");
|
||||
guiOptions_width = f(guiOptions_ ,"l","I");
|
||||
guiOptions_height = f(guiOptions_ ,"m","I");
|
||||
guiOptions_mc = f(guiOptions_ ,"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" ,null);
|
||||
modelRenderer_compiled = f(modelRenderer_ ,"t" ,null);
|
||||
renderGlobal_glSkyList = f(renderGlobal_ ,"G" ,null);
|
||||
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_,"i","Z");
|
||||
vec3_xCoord = f(vec3_ ,"c" ,"D");
|
||||
|
||||
abstractTexture_deleteGlTexture = m(abstractTexture_,"c","()V");
|
||||
block_getAoLight = m(block_ ,"I","("+iBlockAccess_.desc+"III)F");
|
||||
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;");
|
||||
guiOptions_actionPerformed = m(guiOptions_ ,"a","("+guiButton_.desc+")V");
|
||||
guiOptions_initGui = m(guiOptions_ ,"r_","()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");
|
||||
minecraft_startGame = m(minecraft_ ,"ad" ,"()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_renderStdBlockWithAOP = m(renderBlocks_ ,"b","("+block_.desc+"IIIFFF)Z");
|
||||
renderBlocks_renderPistonExtension = m(renderBlocks_ ,"c","("+block_.desc+"IIIZ)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_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");
|
||||
worldClient_getCelestialAngle = m(worldClient_ ,"c" ,"(F)F");
|
||||
worldClient_getRainStrength = m(worldClient_ ,"j" ,"(F)F");
|
||||
|
||||
frustrum_setPosition = m(frustrum_,iCamera_setPosition);
|
||||
}
|
||||
}
|
||||
@@ -1,191 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import static shadersmodcore.transform.Names.*;
|
||||
|
||||
public class Namer1_7_5 extends Namer {
|
||||
|
||||
public void setNames() {
|
||||
setNames1_7_5();
|
||||
}
|
||||
public void setNames1_7_5() {
|
||||
block_ = c("aif");
|
||||
minecraft_ = c("azl");
|
||||
guiButton_ = c("bax");
|
||||
guiOptions_ = c("bce");
|
||||
guiScreen_ = c("bco");
|
||||
modelRenderer_ = c("bjy");
|
||||
worldClient_ = c("bkg");
|
||||
effectRenderer_ = c("bln");
|
||||
entityRenderer_ = c("bms");
|
||||
glAllocation_ = c("azk");
|
||||
itemRenderer_ = c("bmx");
|
||||
openGlHelper_ = c("bwq");
|
||||
renderBlocks_ = c("bml");
|
||||
renderGlobal_ = c("bmz");
|
||||
tessellator_ = c("bng");
|
||||
worldRenderer_ = c("bmn");
|
||||
frustrum_ = c("bnw");
|
||||
iCamera_ = c("bnu");
|
||||
render_ = c("bon");
|
||||
renderDragon_ = c("bok");
|
||||
renderEnderman_ = c("bol");
|
||||
renderSpider_ = c("bpu");
|
||||
renderManager_ = c("bom");
|
||||
rendererLivingE_ = c("bpg");
|
||||
abstractTexture_ = c("bqo");
|
||||
dynamicTexture_ = c("bqp");
|
||||
iTextureObject_ = c("brg");
|
||||
layeredTexture_ = c("bqs");
|
||||
simpleTexture_ = c("bqt");
|
||||
stitcher_ = c("bqu");
|
||||
textureAtlasSpri_ = c("brc");
|
||||
textureClock_ = c("brk");
|
||||
textureCompass_ = c("brl");
|
||||
textureManager_ = c("bre");
|
||||
textureMap_ = c("bqy");
|
||||
textureUtil_ = c("brh");
|
||||
textureDownload_ = c("bqq");
|
||||
iResource_ = c("brv");
|
||||
iResourceManager_ = c("brx");
|
||||
gameSettings_ = c("baf");
|
||||
tessVertexState_ = c("bnh");
|
||||
entity_ = c("qx");
|
||||
entityLivingBase_ = c("rs");
|
||||
entityDragon_ = c("vx");
|
||||
entityEnderman_ = c("wx");
|
||||
entitySpider_ = c("xk");
|
||||
entityPlayer_ = c("xw");
|
||||
itemBlock_ = c("aae");
|
||||
itemStack_ = c("aca");
|
||||
movingObjectPos_ = c("ayr");
|
||||
resourceLocation_ = c("brw");
|
||||
vec3_ = c("ayt");
|
||||
iBlockAccess_ = c("agi");
|
||||
world_ = c("afy");
|
||||
|
||||
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");
|
||||
guiOptions_buttonList = f(guiOptions_ ,"n","Ljava/util/List;");
|
||||
guiOptions_width = f(guiOptions_ ,"l","I");
|
||||
guiOptions_height = f(guiOptions_ ,"m","I");
|
||||
guiOptions_mc = f(guiOptions_ ,"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" ,null);
|
||||
modelRenderer_compiled = f(modelRenderer_ ,"t" ,null);
|
||||
renderGlobal_glSkyList = f(renderGlobal_ ,"G" ,null);
|
||||
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_ ,"f","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_,"i","Z");
|
||||
vec3_xCoord = f(vec3_ ,"a" ,"D");
|
||||
|
||||
abstractTexture_deleteGlTexture = m(abstractTexture_,"c","()V");
|
||||
block_getAoLight = m(block_ ,"I","("+iBlockAccess_.desc+"III)F");
|
||||
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;");
|
||||
guiOptions_actionPerformed = m(guiOptions_ ,"a","("+guiButton_.desc+")V");
|
||||
guiOptions_initGui = m(guiOptions_ ,"r_","()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");
|
||||
minecraft_startGame = m(minecraft_ ,"ad" ,"()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_renderStdBlockWithAOP = m(renderBlocks_ ,"b","("+block_.desc+"IIIFFF)Z");
|
||||
renderBlocks_renderPistonExtension = m(renderBlocks_ ,"c","("+block_.desc+"IIIZ)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_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");
|
||||
worldClient_getCelestialAngle = m(worldClient_ ,"c" ,"(F)F");
|
||||
worldClient_getRainStrength = m(worldClient_ ,"j" ,"(F)F");
|
||||
|
||||
frustrum_setPosition = m(frustrum_,iCamera_setPosition);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.commons.SimpleRemapper;
|
||||
|
||||
public class NamerMcf extends NamerMcp {
|
||||
|
||||
public void setNames()
|
||||
{
|
||||
setNamesSrg();
|
||||
rename("../build/unpacked/conf/");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,129 +0,0 @@
|
||||
package shadersmodcore.transform;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.commons.SimpleRemapper;
|
||||
|
||||
import shadersmodcore.transform.Names.Clas;
|
||||
import shadersmodcore.transform.Names.Fiel;
|
||||
import shadersmodcore.transform.Names.Meth;
|
||||
|
||||
public class NamerMcp extends NamerSrg {
|
||||
|
||||
public void setNames()
|
||||
{
|
||||
setNamesSrg();
|
||||
lookupReobfName("../conf/");
|
||||
rename("../conf/");
|
||||
}
|
||||
|
||||
public void rename(String confPath)
|
||||
{
|
||||
Map<String,String> nameMap;
|
||||
nameMap = loadNameMapCSV(confPath+"fields.csv");
|
||||
for (Fiel f : af) {
|
||||
String s = nameMap.get(f.name);
|
||||
if (s!= null) {
|
||||
f.name = s;
|
||||
}
|
||||
}
|
||||
nameMap = loadNameMapCSV(confPath+"methods.csv");
|
||||
for (Meth m : am) {
|
||||
String s = nameMap.get(m.name);
|
||||
if (s!= null) {
|
||||
m.name = s;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Map loadNameMapCSV(String fileName)
|
||||
{
|
||||
Map map = new HashMap();
|
||||
BufferedReader rd = null;
|
||||
try {
|
||||
rd = new BufferedReader(new FileReader(fileName));
|
||||
String line;
|
||||
rd.readLine(); // skip first line;
|
||||
while ((line = rd.readLine()) != null) {
|
||||
String[] tokens = line.split(",");
|
||||
if(tokens.length>1)
|
||||
{
|
||||
map.put(tokens[0],tokens[1]);
|
||||
}
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (rd != null) {
|
||||
try {
|
||||
rd.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
void lookupReobfName(String confPath)
|
||||
{
|
||||
Map<String,String> nameMap;
|
||||
nameMap = loadReobfMap(confPath+"joined.srg");
|
||||
for (Clas c : ac) {
|
||||
String s = nameMap.get(c.name);
|
||||
System.out.printf("C %s %s\n",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);
|
||||
}
|
||||
for (Meth m : am) {
|
||||
String s = nameMap.get(m.clas+"/"+m.name+m.desc);
|
||||
System.out.printf("M %s %s\n",m.name,s);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Map loadReobfMap(String fileName)
|
||||
{
|
||||
Map map = new HashMap();
|
||||
BufferedReader rd = null;
|
||||
try {
|
||||
rd = new BufferedReader(new FileReader(fileName));
|
||||
String line;
|
||||
while ((line = rd.readLine()) != null) {
|
||||
String[] tokens = line.split(" ");
|
||||
if(tokens.length>1)
|
||||
{
|
||||
if ("CL:".equals(tokens[0])) {
|
||||
map.put(tokens[2], tokens[1]);
|
||||
} else if ("FD:".equals(tokens[0])) {
|
||||
map.put(tokens[2], tokens[1]);
|
||||
} else if ("MD:".equals(tokens[0])) {
|
||||
map.put(tokens[3]+tokens[4], tokens[1].substring(tokens[1].lastIndexOf('/')+1));
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (rd != null) {
|
||||
try {
|
||||
rd.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
before_install:
|
||||
- ./gradlew setupCIWorkspace
|
||||
@@ -0,0 +1,5 @@
|
||||
// Add any additional repositories for your dependencies here
|
||||
|
||||
repositories {
|
||||
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
Manifest-Version: 1.0
|
||||
TweakClass: shadersmodcore.loading.SMCTweaker
|
||||
TweakOrder: 1100
|
||||
@@ -1,17 +0,0 @@
|
||||
[
|
||||
{
|
||||
"modid": "shadersmod",
|
||||
"name": "GLSL Shaders Mod",
|
||||
"description": "Use custom GLSL shaders to render world.",
|
||||
"version": "2.3.18",
|
||||
"mcversion": "1.7.10",
|
||||
"url": "http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1286604",
|
||||
"updateUrl": "",
|
||||
"authors": ["karyonix","sonic ether","id_miner","daxnitro"],
|
||||
"credits": "Based on daxnitro's GLSL Shaders Mod. Updated by karyonix, id_miner, sonic ether.",
|
||||
"logoFile": "",
|
||||
"screenshots": [],
|
||||
"parent":"",
|
||||
"dependencies": []
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,10 @@
|
||||
plugins {
|
||||
id 'com.diffplug.blowdryerSetup' version '1.6.0'
|
||||
}
|
||||
|
||||
apply plugin: 'com.diffplug.blowdryerSetup'
|
||||
|
||||
blowdryerSetup {
|
||||
github('GTNewHorizons/ExampleMod1.7.10', 'tag', '0.1.5')
|
||||
//devLocal '.' // Use this when testing config updates locally
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package net.minecraft.client.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ModelBase {
|
||||
public List boxList;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package net.minecraft.client.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ModelRenderer {
|
||||
|
||||
public List childModels;
|
||||
|
||||
public void resetDisplayList() {}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package net.minecraft.client.renderer;
|
||||
|
||||
public class EntityRenderer {
|
||||
|
||||
public static int anaglyphField;
|
||||
public static boolean anaglyphEnable;
|
||||
|
||||
/**
|
||||
* Render player hand
|
||||
*/
|
||||
public void renderHand(float p_78476_1_, int p_78476_2_) {}
|
||||
|
||||
public void renderWorld(float f, long l) {}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package net.minecraft.client.renderer;
|
||||
|
||||
public class RenderGlobal {
|
||||
|
||||
public WorldRenderer[] worldRenderers;
|
||||
|
||||
public void loadRenderers() {}
|
||||
}
|
||||
@@ -0,0 +1,180 @@
|
||||
package net.minecraft.client.renderer;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.FloatBuffer;
|
||||
import java.nio.IntBuffer;
|
||||
import java.nio.ShortBuffer;
|
||||
import net.minecraft.client.shader.TesselatorVertexState;
|
||||
|
||||
public class Tessellator {
|
||||
private static int nativeBufferSize;
|
||||
private static int trivertsInBuffer;
|
||||
public static boolean renderingWorldRenderer;
|
||||
public boolean defaultTexture;
|
||||
private int rawBufferSize;
|
||||
public int textureID;
|
||||
|
||||
/** The byte buffer used for GL allocation. */
|
||||
public ByteBuffer byteBuffer;
|
||||
/** The same memory as byteBuffer, but referenced as an integer buffer. */
|
||||
public IntBuffer intBuffer;
|
||||
/** The same memory as byteBuffer, but referenced as an float buffer. */
|
||||
public FloatBuffer floatBuffer;
|
||||
/** The same memory as byteBuffer, but referenced as an short buffer. */
|
||||
public ShortBuffer shortBuffer;
|
||||
/** Raw integer array. */
|
||||
public int[] rawBuffer;
|
||||
/** The number of vertices to be drawn in the next draw call. Reset to 0 between draw calls. */
|
||||
public int vertexCount;
|
||||
/** The first coordinate to be used for the texture. */
|
||||
public double textureU;
|
||||
/** The second coordinate to be used for the texture. */
|
||||
public double textureV;
|
||||
|
||||
public int brightness;
|
||||
/** The color (RGBA) value to be used for the following draw call. */
|
||||
public int color;
|
||||
/** Whether the current draw object for this tessellator has color values. */
|
||||
public boolean hasColor;
|
||||
/** Whether the current draw object for this tessellator has texture coordinates. */
|
||||
public boolean hasTexture;
|
||||
|
||||
public boolean hasBrightness;
|
||||
/** Whether the current draw object for this tessellator has normal values. */
|
||||
public boolean hasNormals;
|
||||
/** The index into the raw buffer to be used for the next data. */
|
||||
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.
|
||||
*/
|
||||
public int addedVertices;
|
||||
/** Disables all color information for the following draw call. */
|
||||
public boolean isColorDisabled;
|
||||
/** The draw mode currently being used by the tessellator. */
|
||||
public int drawMode;
|
||||
/** An offset to be applied along the x-axis for all vertices in this draw call. */
|
||||
public double xOffset;
|
||||
/** An offset to be applied along the y-axis for all vertices in this draw call. */
|
||||
public double yOffset;
|
||||
/** An offset to be applied along the z-axis for all vertices in this draw call. */
|
||||
public double zOffset;
|
||||
/** The normal to be applied to the face being drawn. */
|
||||
public int normal;
|
||||
/** The static instance of the Tessellator. */
|
||||
public static final Tessellator instance = new Tessellator();
|
||||
/** Whether this tessellator is currently in draw mode. */
|
||||
public boolean isDrawing;
|
||||
/** The size of the buffers used (in integers). */
|
||||
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 Tessellator(int p_i1250_1_) {}
|
||||
|
||||
public Tessellator() {}
|
||||
|
||||
/**
|
||||
* Draws the data set up in this tessellator and resets the state to prepare for new drawing.
|
||||
*/
|
||||
public int draw() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public TesselatorVertexState getVertexState(float p_147564_1_, float p_147564_2_, float p_147564_3_) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setVertexState(TesselatorVertexState p_147565_1_) {}
|
||||
|
||||
/**
|
||||
* Clears the tessellator state in preparation for new drawing.
|
||||
*/
|
||||
public void reset() {}
|
||||
|
||||
/**
|
||||
* Sets draw mode in the tessellator to draw quads.
|
||||
*/
|
||||
public void startDrawingQuads() {}
|
||||
|
||||
/**
|
||||
* Resets tessellator state and prepares for drawing (with the specified draw mode).
|
||||
*/
|
||||
public void startDrawing(int p_78371_1_) {}
|
||||
|
||||
/**
|
||||
* Sets the texture coordinates.
|
||||
*/
|
||||
public void setTextureUV(double p_78385_1_, double p_78385_3_) {}
|
||||
|
||||
public void setBrightness(int p_78380_1_) {}
|
||||
|
||||
/**
|
||||
* Sets the RGB values as specified, converting from floats between 0 and 1 to integers from 0-255.
|
||||
*/
|
||||
public void setColorOpaque_F(float p_78386_1_, float p_78386_2_, float p_78386_3_) {}
|
||||
|
||||
/**
|
||||
* Sets the RGBA values for the color, converting from floats between 0 and 1 to integers from 0-255.
|
||||
*/
|
||||
public void setColorRGBA_F(float p_78369_1_, float p_78369_2_, float p_78369_3_, float p_78369_4_) {}
|
||||
|
||||
/**
|
||||
* Sets the RGB values as specified, and sets alpha to opaque.
|
||||
*/
|
||||
public void setColorOpaque(int p_78376_1_, int p_78376_2_, int p_78376_3_) {}
|
||||
|
||||
/**
|
||||
* Sets the RGBA values for the color. Also clamps them to 0-255.
|
||||
*/
|
||||
public void setColorRGBA(int p_78370_1_, int p_78370_2_, int p_78370_3_, int p_78370_4_) {}
|
||||
|
||||
public void func_154352_a(byte p_154352_1_, byte p_154352_2_, byte p_154352_3_) {}
|
||||
|
||||
/**
|
||||
* Adds a vertex specifying both x,y,z and the texture u,v for it.
|
||||
*/
|
||||
public void addVertexWithUV(
|
||||
double p_78374_1_, double p_78374_3_, double p_78374_5_, double p_78374_7_, double p_78374_9_) {}
|
||||
|
||||
/**
|
||||
* Adds a vertex with the specified x,y,z to the current draw call. It will trigger a draw() if the buffer gets
|
||||
* full.
|
||||
*/
|
||||
public void addVertex(double p_78377_1_, double p_78377_3_, double p_78377_5_) {}
|
||||
|
||||
/**
|
||||
* Sets the color to the given opaque value (stored as byte values packed in an integer).
|
||||
*/
|
||||
public void setColorOpaque_I(int p_78378_1_) {}
|
||||
|
||||
/**
|
||||
* Sets the color to the given color (packed as bytes in integer) and alpha values.
|
||||
*/
|
||||
public void setColorRGBA_I(int p_78384_1_, int p_78384_2_) {}
|
||||
|
||||
/**
|
||||
* Disables colors for the current draw call.
|
||||
*/
|
||||
public void disableColor() {}
|
||||
|
||||
/**
|
||||
* Sets the normal for the current draw call.
|
||||
*/
|
||||
public void setNormal(float p_78375_1_, float p_78375_2_, float p_78375_3_) {}
|
||||
|
||||
/**
|
||||
* Sets the translation for all vertices in the current draw call.
|
||||
*/
|
||||
public void setTranslation(double p_78373_1_, double p_78373_3_, double p_78373_5_) {}
|
||||
|
||||
/**
|
||||
* Offsets the translation for all vertices in the current draw call.
|
||||
*/
|
||||
public void addTranslation(float p_78372_1_, float p_78372_2_, float p_78372_3_) {}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
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) {}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package net.minecraft.client.renderer.culling;
|
||||
|
||||
public class Frustrum implements ICamera {
|
||||
|
||||
public void setPosition(double x, double y, double z) {}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package net.minecraft.client.renderer.culling;
|
||||
|
||||
public interface ICamera {}
|
||||
@@ -0,0 +1,3 @@
|
||||
package net.minecraft.client.renderer.entity;
|
||||
|
||||
public abstract class Render {}
|
||||
@@ -0,0 +1,10 @@
|
||||
package net.minecraft.client.renderer.entity;
|
||||
|
||||
import net.minecraft.client.model.ModelBase;
|
||||
|
||||
public abstract class RendererLivingEntity extends Render {
|
||||
|
||||
public ModelBase mainModel;
|
||||
/** The model to be used during the render passes. */
|
||||
public ModelBase renderPassModel;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package net.minecraft.client.renderer.texture;
|
||||
|
||||
import com.gtnewhorizons.angelica.client.MultiTexID;
|
||||
|
||||
public abstract class AbstractTexture implements ITextureObject {
|
||||
|
||||
public int glTextureId = -1;
|
||||
public MultiTexID multiTex;
|
||||
|
||||
public int getGlTextureId() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public MultiTexID getMultiTexID() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
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() {}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package net.minecraft.client.renderer.texture;
|
||||
|
||||
import com.gtnewhorizons.angelica.client.MultiTexID;
|
||||
|
||||
public interface ITextureObject {
|
||||
|
||||
MultiTexID getMultiTexID();
|
||||
|
||||
int getGlTextureId();
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package net.minecraft.client.renderer.texture;
|
||||
|
||||
public class TextureAtlasSprite {
|
||||
|
||||
public boolean useAnisotropicFiltering;
|
||||
|
||||
public void updateAnimation() {}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package net.minecraft.client.renderer.texture;
|
||||
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class TextureMap extends AbstractTexture {
|
||||
|
||||
public static ResourceLocation locationBlocksTexture;
|
||||
public int atlasWidth;
|
||||
public int atlasHeight;
|
||||
|
||||
public int getTextureType() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public ResourceLocation completeResourceLocation(ResourceLocation resourceLocation, int i) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
Stubs for the compile stubs
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.gtnewhorizons.angelica.client;
|
||||
|
||||
public class MultiTexID {}
|
||||
@@ -0,0 +1,3 @@
|
||||
package net.minecraft.client.shader;
|
||||
|
||||
public class TesselatorVertexState {}
|
||||
@@ -0,0 +1,3 @@
|
||||
package net.minecraft.util;
|
||||
|
||||
public class ResourceLocation {}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.gtnewhorizons.angelica;
|
||||
|
||||
// Use this class for Strings only. Do not import any classes here. It will lead to issues with Mixins if in use!
|
||||
|
||||
public class Tags {
|
||||
|
||||
// GRADLETOKEN_* will be replaced by your configuration values at build time
|
||||
public static final String MODID = "GRADLETOKEN_MODID";
|
||||
public static final String MODNAME = "GRADLETOKEN_MODNAME";
|
||||
public static final String VERSION = "GRADLETOKEN_VERSION";
|
||||
public static final String GROUPNAME = "GRADLETOKEN_GROUPNAME";
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.gtnewhorizons.angelica.client;
|
||||
|
||||
import net.minecraft.client.renderer.texture.AbstractTexture;
|
||||
import net.minecraft.client.resources.IResourceManager;
|
||||
|
||||
public class DefaultTexture extends AbstractTexture {
|
||||
|
||||
public DefaultTexture() {
|
||||
loadTexture(null);
|
||||
}
|
||||
|
||||
public void loadTexture(IResourceManager resourcemanager) {
|
||||
int[] aint = ShadersTex.createAIntImage(1, 0xFFFFFFFF);
|
||||
ShadersTex.setupTexture(this.getMultiTexID(), aint, 1, 1, false, false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,354 @@
|
||||
package com.gtnewhorizons.angelica.client;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.List;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.settings.GameSettings;
|
||||
import org.lwjgl.Sys;
|
||||
|
||||
public class GuiShaders extends GuiScreen {
|
||||
/** This GUI's parent GUI. */
|
||||
protected GuiScreen parentGui;
|
||||
|
||||
private int updateTimer = -1;
|
||||
public boolean needReinit;
|
||||
|
||||
/*
|
||||
private class GuiListShaderpacks {
|
||||
int posX,posY,sizeX,sizeY;
|
||||
int viewPosY;
|
||||
int itemHeight = 20;
|
||||
int selection;
|
||||
ArrayList<String> listShaderpacks;
|
||||
public void draw() {
|
||||
Tessellator tess = Tessellator.instance;
|
||||
int listSize = listShaderpacks.size();
|
||||
int i,j;
|
||||
for (i=viewPosY/itemHeight, j=Math.min((viewPosY+sizeY)/itemHeight,listSize); i<j; ++i)
|
||||
{
|
||||
int itemY = posY-viewPosY+itemHeight*i;
|
||||
boolean selected = i==selection;
|
||||
tess.startDrawingQuads();
|
||||
tess.setColorRGBA(0,0,selected?128:0,128);
|
||||
tess.addVertex(posX,itemY,0);
|
||||
tess.addVertex(posX,itemY+itemHeight,0);
|
||||
tess.addVertex(posX+sizeX,itemY+itemHeight,0);
|
||||
tess.addVertex(posX+sizeX,itemY,0);
|
||||
tess.draw();
|
||||
field_146289_q.drawString(listShaderpacks.get(i), posX, itemY, 0xFFFFFFFF, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
private GuiListShaderpacks guiListShaderpacks;
|
||||
*/
|
||||
|
||||
private GuiSlotShaders shaderList;
|
||||
|
||||
/** This GUI's 'Done' button. */
|
||||
// private GuiSmallButton doneButton;
|
||||
|
||||
public GuiShaders(GuiScreen par1GuiScreen, GameSettings par2GameSettings) {
|
||||
this.parentGui = par1GuiScreen;
|
||||
}
|
||||
|
||||
private static String toStringOnOff(boolean value) {
|
||||
return value ? "On" : "Off";
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Adds the buttons (and other controls) to the screen in question.
|
||||
*/
|
||||
public void initGui() {
|
||||
if (Shaders.shadersConfig == null) Shaders.loadConfig();
|
||||
List buttonList = this.buttonList;
|
||||
int width = this.width;
|
||||
int height = this.height;
|
||||
buttonList.add(new GuiButton(
|
||||
17, width * 3 / 4 - 60, 30, 160, 18, "NormapMap: " + toStringOnOff(Shaders.configNormalMap)));
|
||||
buttonList.add(new GuiButton(
|
||||
18, width * 3 / 4 - 60, 50, 160, 18, "SpecularMap: " + toStringOnOff(Shaders.configSpecularMap)));
|
||||
buttonList.add(new GuiButton(
|
||||
15,
|
||||
width * 3 / 4 - 60,
|
||||
70,
|
||||
160,
|
||||
18,
|
||||
"RenderResMul: " + String.format("%.04f", Shaders.configRenderResMul)));
|
||||
buttonList.add(new GuiButton(
|
||||
16,
|
||||
width * 3 / 4 - 60,
|
||||
90,
|
||||
160,
|
||||
18,
|
||||
"ShadowResMul: " + String.format("%.04f", Shaders.configShadowResMul)));
|
||||
buttonList.add(new GuiButton(
|
||||
10,
|
||||
width * 3 / 4 - 60,
|
||||
110,
|
||||
160,
|
||||
18,
|
||||
"HandDepth: " + String.format("%.04f", Shaders.configHandDepthMul)));
|
||||
buttonList.add(new GuiButton(
|
||||
9, width * 3 / 4 - 60, 130, 160, 18, "CloudShadow: " + toStringOnOff(Shaders.configCloudShadow)));
|
||||
// buttonList.add(new GuiButton(14, width *3 /4 -60, 150, 160, 18, "ShadowClipFrustrum: "
|
||||
// +toStringOnOff(Shaders.configShadowClipFrustrum)));
|
||||
buttonList.add(new GuiButton(
|
||||
4,
|
||||
width * 3 / 4 - 60,
|
||||
170,
|
||||
160,
|
||||
18,
|
||||
"tweakBlockDamage: " + toStringOnOff(Shaders.configTweakBlockDamage)));
|
||||
buttonList.add(new GuiButton(
|
||||
19, width * 3 / 4 - 60, 190, 160, 18, "OldLighting: " + toStringOnOff(Shaders.configOldLighting)));
|
||||
// buttonList.add(new GuiButton(11, width *3 /4 -60, 210, 160, 18, "Tex Min: "
|
||||
// +Shaders.texMinFilDesc[Shaders.configTexMinFilB]));
|
||||
// buttonList.add(new GuiButton(12, width *3 /4 -60, 230, 160, 18, "Tex_n Mag: "
|
||||
// +Shaders.texMagFilDesc[Shaders.configTexMagFilN]));
|
||||
// buttonList.add(new GuiButton(13, width *3 /4 -60, 250, 160, 18, "Tex_s Mag: "
|
||||
// +Shaders.texMagFilDesc[Shaders.configTexMagFilS]));
|
||||
buttonList.add(new GuiButton(6, width * 3 / 4 - 60, height - 25, 160, 20, "Done"));
|
||||
buttonList.add(new GuiButton(5, width / 4 - 80, height - 25, 160, 20, "Open shaderpacks folder"));
|
||||
this.shaderList = new GuiSlotShaders(this);
|
||||
this.shaderList.registerScrollButtons(7, 8); // registerScrollButtons(7, 8);
|
||||
this.needReinit = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
/** actionPerformed
|
||||
* Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
|
||||
*/
|
||||
protected void actionPerformed(GuiButton par1GuiButton) {
|
||||
if (par1GuiButton.enabled) // enabled
|
||||
{
|
||||
switch (par1GuiButton.id) // id
|
||||
{
|
||||
case 4: /* New block breaking */
|
||||
Shaders.configTweakBlockDamage = !Shaders.configTweakBlockDamage;
|
||||
// displayString
|
||||
par1GuiButton.displayString = "tweakBlockDamage: " + toStringOnOff(Shaders.configTweakBlockDamage);
|
||||
break;
|
||||
|
||||
case 9: /* Cloud shadow */
|
||||
Shaders.configCloudShadow = !Shaders.configCloudShadow;
|
||||
par1GuiButton.displayString = "CloudShadow: " + toStringOnOff(Shaders.configCloudShadow);
|
||||
break;
|
||||
|
||||
case 10: /* Hand Depth */ {
|
||||
float val = Shaders.configHandDepthMul;
|
||||
float[] choices = {0.0625f, 0.125f, 0.25f, 0.5f, 1.0f};
|
||||
int i;
|
||||
if (!isShiftKeyDown()) { // isShiftKeyDown
|
||||
for (i = 0; i < choices.length && choices[i] <= val; ++i) {}
|
||||
if (i == choices.length) i = 0;
|
||||
} else {
|
||||
for (i = choices.length - 1; i >= 0 && val <= choices[i]; --i) {}
|
||||
if (i < 0) i = choices.length - 1;
|
||||
}
|
||||
Shaders.configHandDepthMul = choices[i];
|
||||
par1GuiButton.displayString = "HandDepth: " + String.format("%.4f", Shaders.configHandDepthMul);
|
||||
break;
|
||||
}
|
||||
|
||||
case 15: /* Render Resolution Multiplier */ {
|
||||
float val = Shaders.configRenderResMul;
|
||||
float[] choices = {0.25f, 0.3333333333f, 0.5f, 0.7071067812f, 1.0f, 1.414213562f, 2.0f};
|
||||
int i;
|
||||
if (!isShiftKeyDown()) {
|
||||
for (i = 0; i < choices.length && choices[i] <= val; ++i) {}
|
||||
if (i == choices.length) i = 0;
|
||||
} else {
|
||||
for (i = choices.length - 1; i >= 0 && val <= choices[i]; --i) {}
|
||||
if (i < 0) i = choices.length - 1;
|
||||
}
|
||||
Shaders.configRenderResMul = choices[i];
|
||||
par1GuiButton.displayString = "RenderResMul: " + String.format("%.4f", Shaders.configRenderResMul);
|
||||
Shaders.scheduleResize();
|
||||
break;
|
||||
}
|
||||
|
||||
case 16: /* Shadow Resolution Multiplier */ {
|
||||
float val = Shaders.configShadowResMul;
|
||||
float[] choices = {0.25f, 0.3333333333f, 0.5f, 0.7071067812f, 1.0f, 1.414213562f, 2.0f, 3.0f, 4.0f};
|
||||
int i;
|
||||
if (!isShiftKeyDown()) {
|
||||
for (i = 0; i < choices.length && choices[i] <= val; ++i) {}
|
||||
if (i == choices.length) i = 0;
|
||||
} else {
|
||||
for (i = choices.length - 1; i >= 0 && val <= choices[i]; --i) {}
|
||||
if (i < 0) i = choices.length - 1;
|
||||
}
|
||||
Shaders.configShadowResMul = choices[i];
|
||||
par1GuiButton.displayString = "ShadowResMul: " + String.format("%.4f", Shaders.configShadowResMul);
|
||||
Shaders.scheduleResizeShadow();
|
||||
break;
|
||||
}
|
||||
|
||||
case 17: /* Normal Map */ {
|
||||
Shaders.configNormalMap = !Shaders.configNormalMap;
|
||||
// displayString
|
||||
par1GuiButton.displayString = "NormapMap: " + toStringOnOff(Shaders.configNormalMap);
|
||||
mc.scheduleResourcesRefresh(); // schedule refresh texture
|
||||
break;
|
||||
}
|
||||
|
||||
case 18: /* Normal Map */ {
|
||||
Shaders.configSpecularMap = !Shaders.configSpecularMap;
|
||||
// displayString
|
||||
par1GuiButton.displayString = "SpecularMap: " + toStringOnOff(Shaders.configSpecularMap);
|
||||
mc.scheduleResourcesRefresh(); // schedule refresh texture
|
||||
break;
|
||||
}
|
||||
|
||||
case 19: /* old Lighting */ {
|
||||
Shaders.configOldLighting = !Shaders.configOldLighting;
|
||||
// displayString
|
||||
par1GuiButton.displayString = "OldLighting: " + toStringOnOff(Shaders.configOldLighting);
|
||||
Shaders.updateBlockLightLevel();
|
||||
mc.renderGlobal.loadRenderers();
|
||||
break;
|
||||
}
|
||||
|
||||
case 11: /* texture filter */ {
|
||||
Shaders.configTexMinFilB = (Shaders.configTexMinFilB + 1) % Shaders.texMinFilRange;
|
||||
Shaders.configTexMinFilN = Shaders.configTexMinFilS = Shaders.configTexMinFilB;
|
||||
par1GuiButton.displayString = "Tex Min: " + Shaders.texMinFilDesc[Shaders.configTexMinFilB];
|
||||
ShadersTex.updateTextureMinMagFilter();
|
||||
break;
|
||||
}
|
||||
|
||||
case 12: /* texture filter */ {
|
||||
Shaders.configTexMagFilN = (Shaders.configTexMagFilN + 1) % Shaders.texMagFilRange;
|
||||
par1GuiButton.displayString = "Tex_n Mag: " + Shaders.texMagFilDesc[Shaders.configTexMagFilN];
|
||||
ShadersTex.updateTextureMinMagFilter();
|
||||
break;
|
||||
}
|
||||
|
||||
case 13: /* texture filter */ {
|
||||
Shaders.configTexMagFilS = (Shaders.configTexMagFilS + 1) % Shaders.texMagFilRange;
|
||||
par1GuiButton.displayString = "Tex_s Mag: " + Shaders.texMagFilDesc[Shaders.configTexMagFilS];
|
||||
ShadersTex.updateTextureMinMagFilter();
|
||||
break;
|
||||
}
|
||||
|
||||
case 14: /* shadow frustum clipping */ {
|
||||
Shaders.configShadowClipFrustrum = !Shaders.configShadowClipFrustrum;
|
||||
par1GuiButton.displayString =
|
||||
"ShadowClipFrustrum: " + toStringOnOff(Shaders.configShadowClipFrustrum);
|
||||
ShadersTex.updateTextureMinMagFilter();
|
||||
break;
|
||||
}
|
||||
|
||||
case 5: /* Open shaderpacks folder */
|
||||
switch (net.minecraft.util.Util.getOSType()) {
|
||||
case OSX:
|
||||
{
|
||||
try {
|
||||
Runtime.getRuntime().exec(new String[] {
|
||||
"/usr/bin/open", Shaders.shaderpacksdir.getAbsolutePath()
|
||||
});
|
||||
return;
|
||||
} catch (IOException var7) {
|
||||
var7.printStackTrace();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WINDOWS:
|
||||
{
|
||||
String var2 = String.format(
|
||||
"cmd.exe /C start \"Open file\" \"%s\"",
|
||||
new Object[] {Shaders.shaderpacksdir.getAbsolutePath()});
|
||||
|
||||
try {
|
||||
Runtime.getRuntime().exec(var2);
|
||||
return;
|
||||
} catch (IOException var6) {
|
||||
var6.printStackTrace();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
boolean var8 = false;
|
||||
|
||||
try {
|
||||
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, new Object[] {(new File(mc.mcDataDir, Shaders.shaderpacksdirname)).toURI()
|
||||
});
|
||||
} catch (Throwable var5) {
|
||||
var5.printStackTrace();
|
||||
var8 = true;
|
||||
}
|
||||
|
||||
if (var8) {
|
||||
System.out.println("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) {
|
||||
}
|
||||
if (needReinit) {
|
||||
needReinit = false;
|
||||
Shaders.loadShaderPack();
|
||||
Shaders.uninit();
|
||||
this.mc.renderGlobal.loadRenderers();
|
||||
}
|
||||
this.mc.displayGuiScreen(this.parentGui); // displayGuiScreen
|
||||
break;
|
||||
|
||||
default:
|
||||
this.shaderList.actionPerformed(par1GuiButton); // actionPerformed
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Draws the screen and all the components in it.
|
||||
*/
|
||||
public void drawScreen(int par1, int par2, float par3) {
|
||||
drawDefaultBackground(); // background
|
||||
this.shaderList.drawScreen(par1, par2, par3); // drawScreen
|
||||
|
||||
if (this.updateTimer <= 0) {
|
||||
this.shaderList.updateList();
|
||||
this.updateTimer += 20;
|
||||
}
|
||||
|
||||
this.drawCenteredString(this.fontRendererObj, "Shaders ", this.width / 2, 16, 0xffffff);
|
||||
this.drawCenteredString(this.fontRendererObj, " v" + Shaders.versionString, this.width - 40, 10, 0x808080);
|
||||
// this.drawCenteredString(this.fontRenderer, "( Place zipped Shader files here. )", this.width / 4 + 10,
|
||||
// this.height - 26, 0x808080);
|
||||
super.drawScreen(par1, par2, par3);
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Called from the main game loop to update the screen.
|
||||
*/
|
||||
public void updateScreen() {
|
||||
super.updateScreen();
|
||||
--this.updateTimer;
|
||||
}
|
||||
|
||||
public Minecraft getMc() {
|
||||
return this.mc;
|
||||
}
|
||||
|
||||
public void drawCenteredString(String par1, int par2, int par3, int par4) {
|
||||
this.drawCenteredString(this.fontRendererObj, par1, par2, par3, par4);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package com.gtnewhorizons.angelica.client;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import net.minecraft.client.gui.GuiSlot;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
|
||||
class GuiSlotShaders extends GuiSlot {
|
||||
private ArrayList shaderslist;
|
||||
|
||||
final GuiShaders shadersGui;
|
||||
|
||||
public GuiSlotShaders(GuiShaders par1GuiShaders) {
|
||||
// super(par1GuiShaders.getMc(), par1GuiShaders.width / 2 + 20, par1GuiShaders.height, 40, par1GuiShaders.height
|
||||
// - 70, 16);
|
||||
super(
|
||||
par1GuiShaders.getMc(),
|
||||
par1GuiShaders.width / 2 + 20,
|
||||
par1GuiShaders.height,
|
||||
40,
|
||||
par1GuiShaders.height - 70,
|
||||
16);
|
||||
this.shadersGui = par1GuiShaders;
|
||||
this.shaderslist = Shaders.listofShaders();
|
||||
}
|
||||
|
||||
public void updateList() {
|
||||
this.shaderslist = Shaders.listofShaders();
|
||||
}
|
||||
|
||||
@Override
|
||||
/** getSize */
|
||||
protected int getSize() {
|
||||
return this.shaderslist.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
/** elementClicked */
|
||||
protected void elementClicked(int par1, boolean par2, int par3, int par4) {
|
||||
Shaders.setShaderPack((String) shaderslist.get(par1));
|
||||
shadersGui.needReinit = false;
|
||||
Shaders.loadShaderPack();
|
||||
Shaders.uninit();
|
||||
}
|
||||
|
||||
@Override
|
||||
/** isSelected */
|
||||
protected boolean isSelected(int par1) {
|
||||
return ((String) this.shaderslist.get(par1)).equals(Shaders.currentshadername);
|
||||
}
|
||||
|
||||
@Override
|
||||
/** getScrollBarX */
|
||||
protected int getScrollBarX() {
|
||||
return this.width - 6;
|
||||
}
|
||||
|
||||
@Override
|
||||
/** getContentHeight */
|
||||
protected int getContentHeight() {
|
||||
return this.getSize() * 18;
|
||||
}
|
||||
|
||||
@Override
|
||||
/** drawBackground */
|
||||
protected void drawBackground() {
|
||||
// this.shadersGui.drawDefaultBackground();
|
||||
}
|
||||
|
||||
@Override
|
||||
/** drawSlot */
|
||||
protected void drawSlot(int par1, int par2, int par3, int par4, Tessellator par5, int par6, int par7) {
|
||||
this.shadersGui.drawCenteredString(
|
||||
(String) this.shaderslist.get(par1), this.shadersGui.width / 4 + 10, par3 + 1, 0xffffff);
|
||||
}
|
||||
}
|
||||
+76
-80
@@ -1,80 +1,76 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import org.lwjgl.BufferUtils;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL13;
|
||||
import org.lwjgl.opengl.GL30;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Nathanael Lane
|
||||
*/
|
||||
public class HFNoiseTexture {
|
||||
public int texID;
|
||||
public int textureUnit;
|
||||
|
||||
public HFNoiseTexture(int width, int height){
|
||||
texID = GL11.glGenTextures();
|
||||
textureUnit = 15;
|
||||
|
||||
byte[] image = genHFNoiseImage(width, height);
|
||||
ByteBuffer data = BufferUtils.createByteBuffer(image.length);
|
||||
data.put(image);
|
||||
data.flip();
|
||||
|
||||
//GL13.glActiveTexture(GL13.GL_TEXTURE0 + this.textureUnit);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texID);
|
||||
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, width, height, 0,
|
||||
GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, data);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
|
||||
//GL30.glGenerateMipmap(GL11.GL_TEXTURE_2D);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);
|
||||
}
|
||||
|
||||
public int getID(){
|
||||
return texID;
|
||||
}
|
||||
|
||||
public void destroy(){
|
||||
GL11.glDeleteTextures(texID);
|
||||
texID = 0;
|
||||
}
|
||||
|
||||
|
||||
//from George Marsaglia's paper on XORshift PRNGs
|
||||
private int random(int seed){
|
||||
seed ^= (seed << 13);
|
||||
seed ^= (seed >> 17);
|
||||
seed ^= (seed << 5);
|
||||
return seed;
|
||||
}
|
||||
|
||||
private byte random(int x, int y, int z){
|
||||
int seed = (random(x) + random(y * 19)) * random(z * 23) - z;
|
||||
return (byte) (random(seed) % 128);
|
||||
}
|
||||
|
||||
/*
|
||||
* Just a random value for each pixel to get maximum frequency
|
||||
*/
|
||||
private byte[] genHFNoiseImage(int width, int height){
|
||||
|
||||
byte[] image = new byte[width * height * 3];
|
||||
int index = 0;
|
||||
|
||||
for(int y = 0; y < height; y++){
|
||||
for(int x = 0; x < width; x++){
|
||||
for(int z = 1; z < 4; z++){
|
||||
image[index++] = random(x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
}
|
||||
package com.gtnewhorizons.angelica.client;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import org.lwjgl.BufferUtils;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Nathanael Lane
|
||||
*/
|
||||
public class HFNoiseTexture {
|
||||
public int texID;
|
||||
public int textureUnit;
|
||||
|
||||
public HFNoiseTexture(int width, int height) {
|
||||
texID = GL11.glGenTextures();
|
||||
textureUnit = 15;
|
||||
|
||||
byte[] image = genHFNoiseImage(width, height);
|
||||
ByteBuffer data = BufferUtils.createByteBuffer(image.length);
|
||||
data.put(image);
|
||||
data.flip();
|
||||
|
||||
// GL13.glActiveTexture(GL13.GL_TEXTURE0 + this.textureUnit);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texID);
|
||||
GL11.glTexImage2D(
|
||||
GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, width, height, 0, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, data);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
|
||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
|
||||
// GL30.glGenerateMipmap(GL11.GL_TEXTURE_2D);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);
|
||||
}
|
||||
|
||||
public int getID() {
|
||||
return texID;
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
GL11.glDeleteTextures(texID);
|
||||
texID = 0;
|
||||
}
|
||||
|
||||
// from George Marsaglia's paper on XORshift PRNGs
|
||||
private int random(int seed) {
|
||||
seed ^= (seed << 13);
|
||||
seed ^= (seed >> 17);
|
||||
seed ^= (seed << 5);
|
||||
return seed;
|
||||
}
|
||||
|
||||
private byte random(int x, int y, int z) {
|
||||
int seed = (random(x) + random(y * 19)) * random(z * 23) - z;
|
||||
return (byte) (random(seed) % 128);
|
||||
}
|
||||
|
||||
/*
|
||||
* Just a random value for each pixel to get maximum frequency
|
||||
*/
|
||||
private byte[] genHFNoiseImage(int width, int height) {
|
||||
|
||||
byte[] image = new byte[width * height * 3];
|
||||
int index = 0;
|
||||
|
||||
for (int y = 0; y < height; y++) {
|
||||
for (int x = 0; x < width; x++) {
|
||||
for (int z = 1; z < 4; z++) {
|
||||
image[index++] = random(x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return image;
|
||||
}
|
||||
}
|
||||
+10
-11
@@ -1,11 +1,10 @@
|
||||
package shadersmodcore.client;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
public interface IShaderPack {
|
||||
|
||||
void close();
|
||||
|
||||
InputStream getResourceAsStream(String resName);
|
||||
|
||||
}
|
||||
package com.gtnewhorizons.angelica.client;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
public interface IShaderPack {
|
||||
|
||||
void close();
|
||||
|
||||
InputStream getResourceAsStream(String resName);
|
||||
}
|
||||
Loaded 100 of 151 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user