Merge branch 'stable' into blend
This commit is contained in:
@@ -8,7 +8,8 @@ pipeline:
|
|||||||
commands:
|
commands:
|
||||||
- curl --fail --create-dirs -o $HOME/.gradle/init.d/mirror.gradle https://maven.johni0702.de/config/gradle
|
- curl --fail --create-dirs -o $HOME/.gradle/init.d/mirror.gradle https://maven.johni0702.de/config/gradle
|
||||||
- git config --global user.email "replaymod@drone" && git config --global user.name "Drone"
|
- git config --global user.email "replaymod@drone" && git config --global user.name "Drone"
|
||||||
- SIGNED_JAR=$(! git describe --exact 2>&1 > /dev/null; echo $?) REPRODUCIBLE_BUILD=1 ./gradlew $(bash -c "echo :versions:{1.8,1.8.9,1.9.4,1.10.2,1.11,1.11.2,1.12,1.12.1,1.12.2}:reobfJar") --parallel
|
- REPRODUCIBLE_BUILD=1 ./gradlew :1.7.10:setupCIWorkspace :jGui:1.7.10:setupCIWorkspace
|
||||||
|
- SIGNED_JAR=$(! git describe --exact 2>&1 > /dev/null; echo $?) REPRODUCIBLE_BUILD=1 ./gradlew $(bash -c "echo :{1.7.10,1.8,1.8.9,1.9.4,1.10.2,1.11,1.11.2,1.12,1.12.1,1.12.2}:reobfJar") --parallel
|
||||||
- mkdir -p build/libs && mv versions/*/build/libs/* build/libs/
|
- mkdir -p build/libs && mv versions/*/build/libs/* build/libs/
|
||||||
archive:
|
archive:
|
||||||
image: plugins/s3
|
image: plugins/s3
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
eyJhbGciOiJIUzI1NiJ9.cGlwZWxpbmU6CiAgY2xvbmU6CiAgICBpbWFnZTogcGx1Z2lucy9naXQKICAgIHRhZ3M6IHRydWUKICAgIHJlY3Vyc2l2ZTogdHJ1ZQogIGJ1aWxkOgogICAgaW1hZ2U6IG1hdmVuOjMuMy45LWpkay04CiAgICBjb21tYW5kczoKICAgICAgLSBjdXJsIC0tZmFpbCAtLWNyZWF0ZS1kaXJzIC1vICRIT01FLy5ncmFkbGUvaW5pdC5kL21pcnJvci5ncmFkbGUgaHR0cHM6Ly9tYXZlbi5qb2huaTA3MDIuZGUvY29uZmlnL2dyYWRsZQogICAgICAtIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCAicmVwbGF5bW9kQGRyb25lIiAmJiBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAiRHJvbmUiCiAgICAgIC0gU0lHTkVEX0pBUj0kKCEgZ2l0IGRlc2NyaWJlIC0tZXhhY3QgMj4mMSA-IC9kZXYvbnVsbDsgZWNobyAkPykgUkVQUk9EVUNJQkxFX0JVSUxEPTEgLi9ncmFkbGV3ICQoYmFzaCAtYyAiZWNobyA6dmVyc2lvbnM6ezEuOCwxLjguOSwxLjkuNCwxLjEwLjIsMS4xMSwxLjExLjIsMS4xMiwxLjEyLjEsMS4xMi4yfTpyZW9iZkphciIpIC0tcGFyYWxsZWwKICAgICAgLSBta2RpciAtcCBidWlsZC9saWJzICYmIG12IHZlcnNpb25zLyovYnVpbGQvbGlicy8qIGJ1aWxkL2xpYnMvCiAgYXJjaGl2ZToKICAgIGltYWdlOiBwbHVnaW5zL3MzCiAgICBhY2w6IHB1YmxpYy1yZWFkCiAgICByZWdpb246ICJ1cy1lYXN0LTEiCiAgICBidWNrZXQ6ICJyZXBsYXltb2QiCiAgICBwYXRoX3N0eWxlOiB0cnVlCiAgICBzb3VyY2U6IGJ1aWxkL2xpYnMvKgogICAgc3RyaXBfcHJlZml4OiBidWlsZC9saWJzLwogICAgdGFyZ2V0OiAvCg.GrAnS7L_wYnMV2eTmPJGweU_8ITxbbqZK9ptC6llIDg
|
eyJhbGciOiJIUzI1NiJ9.cGlwZWxpbmU6CiAgY2xvbmU6CiAgICBpbWFnZTogcGx1Z2lucy9naXQKICAgIHRhZ3M6IHRydWUKICAgIHJlY3Vyc2l2ZTogdHJ1ZQogIGJ1aWxkOgogICAgaW1hZ2U6IG1hdmVuOjMuMy45LWpkay04CiAgICBjb21tYW5kczoKICAgICAgLSBjdXJsIC0tZmFpbCAtLWNyZWF0ZS1kaXJzIC1vICRIT01FLy5ncmFkbGUvaW5pdC5kL21pcnJvci5ncmFkbGUgaHR0cHM6Ly9tYXZlbi5qb2huaTA3MDIuZGUvY29uZmlnL2dyYWRsZQogICAgICAtIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCAicmVwbGF5bW9kQGRyb25lIiAmJiBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAiRHJvbmUiCiAgICAgIC0gUkVQUk9EVUNJQkxFX0JVSUxEPTEgLi9ncmFkbGV3IDoxLjcuMTA6c2V0dXBDSVdvcmtzcGFjZSA6akd1aToxLjcuMTA6c2V0dXBDSVdvcmtzcGFjZQogICAgICAtIFNJR05FRF9KQVI9JCghIGdpdCBkZXNjcmliZSAtLWV4YWN0IDI-JjEgPiAvZGV2L251bGw7IGVjaG8gJD8pIFJFUFJPRFVDSUJMRV9CVUlMRD0xIC4vZ3JhZGxldyAkKGJhc2ggLWMgImVjaG8gOnsxLjcuMTAsMS44LDEuOC45LDEuOS40LDEuMTAuMiwxLjExLDEuMTEuMiwxLjEyLDEuMTIuMSwxLjEyLjJ9OnJlb2JmSmFyIikgLS1wYXJhbGxlbAogICAgICAtIG1rZGlyIC1wIGJ1aWxkL2xpYnMgJiYgbXYgdmVyc2lvbnMvKi9idWlsZC9saWJzLyogYnVpbGQvbGlicy8KICBhcmNoaXZlOgogICAgaW1hZ2U6IHBsdWdpbnMvczMKICAgIGFjbDogcHVibGljLXJlYWQKICAgIHJlZ2lvbjogInVzLWVhc3QtMSIKICAgIGJ1Y2tldDogInJlcGxheW1vZCIKICAgIHBhdGhfc3R5bGU6IHRydWUKICAgIHNvdXJjZTogYnVpbGQvbGlicy8qCiAgICBzdHJpcF9wcmVmaXg6IGJ1aWxkL2xpYnMvCiAgICB0YXJnZXQ6IC8K.2bNe9Pd4FUTIP9VTrFR4YuHJkgCmjIbfBCUu-Wrvap8
|
||||||
7
.gitmodules
vendored
7
.gitmodules
vendored
@@ -20,3 +20,10 @@
|
|||||||
[submodule "gradle/reprod/upstream/mixin"]
|
[submodule "gradle/reprod/upstream/mixin"]
|
||||||
path = gradle/reprod/upstream/mixin
|
path = gradle/reprod/upstream/mixin
|
||||||
url = https://github.com/SpongePowered/Mixin.git
|
url = https://github.com/SpongePowered/Mixin.git
|
||||||
|
[submodule "gradle/reprod/upstream/forgegradle-1.2"]
|
||||||
|
path = gradle/reprod/upstream/forgegradle-1.2
|
||||||
|
url = https://github.com/MinecraftForge/ForgeGradle.git
|
||||||
|
branch = FG_1.2
|
||||||
|
[submodule "gradle/reprod/upstream/srg2source-3.2"]
|
||||||
|
path = gradle/reprod/upstream/srg2source-3.2
|
||||||
|
url = https://github.com/MinecraftForge/Srg2Source.git
|
||||||
|
|||||||
10
README.md
10
README.md
@@ -10,7 +10,7 @@ to access private fields is a good indication that this has happened).
|
|||||||
|
|
||||||
### No IDE
|
### No IDE
|
||||||
You can build the mod by running `./gradlew build`. You can then find the final jar files in `versions/$MCVERSION/build/libs/`.
|
You can build the mod by running `./gradlew build`. You can then find the final jar files in `versions/$MCVERSION/build/libs/`.
|
||||||
You can also build single versions by running `./gradlew :versions:1.8:build` (builds the MC 1.8 version).
|
You can also build single versions by running `./gradlew :1.8:build` (builds the MC 1.8 version).
|
||||||
|
|
||||||
### IntelliJ
|
### IntelliJ
|
||||||
For the initial setup run `./gradlew idea genIntellijRuns`.
|
For the initial setup run `./gradlew idea genIntellijRuns`.
|
||||||
@@ -37,8 +37,6 @@ The `stable` branch contains the most recent release.
|
|||||||
The `master` branch is solely to be used for the `version.json` file that contains a list of all versions
|
The `master` branch is solely to be used for the `version.json` file that contains a list of all versions
|
||||||
used by the clients to check for updates of this mod.
|
used by the clients to check for updates of this mod.
|
||||||
|
|
||||||
The MC 1.7.10 version is currently completely separate on `1.7.10` and `1.7.10-dev` due to its huge differences with any current versions.
|
|
||||||
|
|
||||||
### The Preprocessor
|
### The Preprocessor
|
||||||
To support multiple Minecraft versions with the ReplayMod, a [JCP](https://github.com/raydac/java-comment-preprocessor)-inspired preprocessor is used:
|
To support multiple Minecraft versions with the ReplayMod, a [JCP](https://github.com/raydac/java-comment-preprocessor)-inspired preprocessor is used:
|
||||||
```java
|
```java
|
||||||
@@ -74,15 +72,15 @@ Code for the more recent MC version shall be placed in the first branch of the i
|
|||||||
Version-dependent import statements shall be placed separately from and after all other imports but before the `static` and `java.*` imports.
|
Version-dependent import statements shall be placed separately from and after all other imports but before the `static` and `java.*` imports.
|
||||||
Common version dependent code (including the fml and forge event bus) are available as static methods/fields in the `MCVer` class.
|
Common version dependent code (including the fml and forge event bus) are available as static methods/fields in the `MCVer` class.
|
||||||
|
|
||||||
The source code resides in `src/main` (gradle project `:versions:core`) and is automatically passed through the
|
The source code resides in `src/main` (gradle project `:core`) and is automatically passed through the
|
||||||
preprocessor when any of the concrete versions are built (gradle projects `:versions:1.8`, `:versions:1.8.9`, etc.).
|
preprocessor when any of the concrete versions are built (gradle projects `:1.8`, `:1.8.9`, etc.).
|
||||||
Do **NOT** edit any of the code in `versions/$MCVERSION/build/` as it is automatically generated and will be overwritten without warning.
|
Do **NOT** edit any of the code in `versions/$MCVERSION/build/` as it is automatically generated and will be overwritten without warning.
|
||||||
|
|
||||||
You can pass the original source code through the preprocessor if you wish to develop/debug with another version of Minecraft:
|
You can pass the original source code through the preprocessor if you wish to develop/debug with another version of Minecraft:
|
||||||
```bash
|
```bash
|
||||||
./gradle -PmcVersion=10904 :setCoreVersion # switches all sources in src/main to 1.9.4
|
./gradle -PmcVersion=10904 :setCoreVersion # switches all sources in src/main to 1.9.4
|
||||||
```
|
```
|
||||||
If you do so, you'll also have to run `./gradlew :versions:core:copySrg :versions:core:setupDecompWorkspace :jGui:versions:core:setupDecompWorkspace`,
|
If you do so, you'll also have to run `./gradlew :core:copySrg :core:setupDecompWorkspace :jGui:core:setupDecompWorkspace`,
|
||||||
followed by a refresh of the project in your IDE.
|
followed by a refresh of the project in your IDE.
|
||||||
|
|
||||||
Make sure to switch back to the most recent branch before committing!
|
Make sure to switch back to the most recent branch before committing!
|
||||||
|
|||||||
19
build.gradle
19
build.gradle
@@ -21,25 +21,8 @@ group= "com.replaymod"
|
|||||||
subprojects {
|
subprojects {
|
||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
mavenLocal()
|
|
||||||
mavenCentral()
|
|
||||||
maven {
|
|
||||||
name = "forge"
|
|
||||||
url = "http://files.minecraftforge.net/maven"
|
|
||||||
}
|
|
||||||
maven {
|
|
||||||
name = "sonatype"
|
|
||||||
url = "https://oss.sonatype.org/content/repositories/snapshots/"
|
|
||||||
}
|
|
||||||
maven { url 'https://jitpack.io' }
|
maven { url 'https://jitpack.io' }
|
||||||
}
|
}
|
||||||
dependencies {
|
|
||||||
classpath('com.github.SpongePowered:MixinGradle:dcfaf61'){ // 0.6
|
|
||||||
// Because forgegradle requires 6.0 (not -debug-all) while mixingradle depends on 5.0
|
|
||||||
// and putting mixin right here will place it before forge in the class loader
|
|
||||||
exclude group: 'org.ow2.asm', module: 'asm-debug-all'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
configurations.classpath.resolutionStrategy.eachDependency { dep ->
|
configurations.classpath.resolutionStrategy.eachDependency { dep ->
|
||||||
if (System.getenv('REPRODUCIBLE_BUILD') == '1') return
|
if (System.getenv('REPRODUCIBLE_BUILD') == '1') return
|
||||||
def req = dep.target
|
def req = dep.target
|
||||||
@@ -80,7 +63,7 @@ task setCoreVersion() {
|
|||||||
def vars = [MC: project.mcVersion as int, DEV_ENV: 1]
|
def vars = [MC: project.mcVersion as int, DEV_ENV: 1]
|
||||||
project.convertTree(vars, 'src/main/java')
|
project.convertTree(vars, 'src/main/java')
|
||||||
project.convertTree(vars, 'src/main/resources')
|
project.convertTree(vars, 'src/main/resources')
|
||||||
project.convertTree(vars, 'versions/core/build.gradle')
|
project.file('versions/core/mcVersion').write(vars.MC.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ subprojects {
|
|||||||
|
|
||||||
task build(type: Exec) {
|
task build(type: Exec) {
|
||||||
dependsOn applyPatches
|
dependsOn applyPatches
|
||||||
|
if (project.name == 'forgegradle-1.2') {
|
||||||
|
dependsOn ':srg2source-3.2:build'
|
||||||
|
}
|
||||||
if (project.name == 'forgegradle-2.3') {
|
if (project.name == 'forgegradle-2.3') {
|
||||||
dependsOn ':forgeflower:build'
|
dependsOn ':forgeflower:build'
|
||||||
}
|
}
|
||||||
@@ -28,6 +31,8 @@ subprojects {
|
|||||||
!rootProject.file('deps/repo/' + [
|
!rootProject.file('deps/repo/' + [
|
||||||
'mixin': 'org/spongepowered/mixin/0.7.5-SNAPSHOT',
|
'mixin': 'org/spongepowered/mixin/0.7.5-SNAPSHOT',
|
||||||
'forgeflower': 'net/minecraftforge/forgeflower/1.0.342-SNAPSHOT',
|
'forgeflower': 'net/minecraftforge/forgeflower/1.0.342-SNAPSHOT',
|
||||||
|
'srg2source-3.2': 'net/minecraftforge/srg2source/Srg2Source/3.2-SNAPSHOT',
|
||||||
|
'forgegradle-1.2': 'net/minecraftforge/gradle/ForgeGradle/1.2-SNAPSHOT',
|
||||||
'forgegradle-2.1': 'net/minecraftforge/gradle/ForgeGradle/2.1-SNAPSHOT',
|
'forgegradle-2.1': 'net/minecraftforge/gradle/ForgeGradle/2.1-SNAPSHOT',
|
||||||
'forgegradle-2.2': 'net/minecraftforge/gradle/ForgeGradle/2.2-SNAPSHOT',
|
'forgegradle-2.2': 'net/minecraftforge/gradle/ForgeGradle/2.2-SNAPSHOT',
|
||||||
'forgegradle-2.3': 'net/minecraftforge/gradle/ForgeGradle/2.3-SNAPSHOT',
|
'forgegradle-2.3': 'net/minecraftforge/gradle/ForgeGradle/2.3-SNAPSHOT',
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ a09a4ac520f9ec5ccd16195272fd8ed4c667285f9e129da5acf633bb21a7d174 /com/cloudbees/
|
|||||||
754184022345800c2d066eceeaf2f7a88a7c2aaeae23eb1c76ef598854aa9157 /com/fasterxml/jackson/core/jackson-core/2.1.3/jackson-core-2.1.3.jar
|
754184022345800c2d066eceeaf2f7a88a7c2aaeae23eb1c76ef598854aa9157 /com/fasterxml/jackson/core/jackson-core/2.1.3/jackson-core-2.1.3.jar
|
||||||
cc3bfcc34a29c041e7cafc05ed6f0c3ebf8a7dcf812489a64f4c37f4f5279adf /com/fasterxml/jackson/core/jackson-core/2.1.3/jackson-core-2.1.3.pom
|
cc3bfcc34a29c041e7cafc05ed6f0c3ebf8a7dcf812489a64f4c37f4f5279adf /com/fasterxml/jackson/core/jackson-core/2.1.3/jackson-core-2.1.3.pom
|
||||||
a30a3f89fbbea23deb5290e832eb0d12a8171ae8ba4461af2b936ed0245ee697 /com/fasterxml/oss-parent/4/oss-parent-4.pom
|
a30a3f89fbbea23deb5290e832eb0d12a8171ae8ba4461af2b936ed0245ee697 /com/fasterxml/oss-parent/4/oss-parent-4.pom
|
||||||
|
95a925c9cff6c10061b2a7b225b5b470327163f18bae1c3db37375cfba8ae308 /com/github/abrarsyed/jastyle/jAstyle/1.2/jAstyle-1.2.jar
|
||||||
|
f4d71983e5d2fbc8dda6d86439993a871feb599ad0b8e2904f0b9d179ca8e6a5 /com/github/abrarsyed/jastyle/jAstyle/1.2/jAstyle-1.2.pom
|
||||||
4cad4ee2f1c379fa1f6496912fe026d8a4f2febf0a140ff867206b00a22f988f /com/github/abrarsyed/jastyle/jAstyle/1.3/jAstyle-1.3.jar
|
4cad4ee2f1c379fa1f6496912fe026d8a4f2febf0a140ff867206b00a22f988f /com/github/abrarsyed/jastyle/jAstyle/1.3/jAstyle-1.3.jar
|
||||||
cd62bdfd946618c26b49451084361edf79cd6ddb3eae1a485ecb05319295896d /com/github/abrarsyed/jastyle/jAstyle/1.3/jAstyle-1.3.pom
|
cd62bdfd946618c26b49451084361edf79cd6ddb3eae1a485ecb05319295896d /com/github/abrarsyed/jastyle/jAstyle/1.3/jAstyle-1.3.pom
|
||||||
bd1f6f51d00168a82c25f89204cfe6cbf120f8b92f5929f8b77ed123375d8488 /com/github/fesh0r/fernflower/adbf29f8/fernflower-adbf29f8.jar
|
bd1f6f51d00168a82c25f89204cfe6cbf120f8b92f5929f8b77ed123375d8488 /com/github/fesh0r/fernflower/adbf29f8/fernflower-adbf29f8.jar
|
||||||
@@ -24,24 +26,28 @@ fbcba81b21a8bc3c0761e4798fa05285444b43d681c03c9af49f9b2e1ecb0184 /com/github/jpo
|
|||||||
485f5625683d9261d32a89c3725df4c361d4b35bfaf866fb68db17833f1fb820 /com/github/MinecraftForge/Srg2Source/dcad1a6/Srg2Source-dcad1a6.pom
|
485f5625683d9261d32a89c3725df4c361d4b35bfaf866fb68db17833f1fb820 /com/github/MinecraftForge/Srg2Source/dcad1a6/Srg2Source-dcad1a6.pom
|
||||||
f539e2ca00d43e3d2261b7334eb05137f0eb1d3d5e3cc2c2716b0071e27783ed /com/github/MinecraftForge/Srg2Source/ea4ea62/Srg2Source-ea4ea62.jar
|
f539e2ca00d43e3d2261b7334eb05137f0eb1d3d5e3cc2c2716b0071e27783ed /com/github/MinecraftForge/Srg2Source/ea4ea62/Srg2Source-ea4ea62.jar
|
||||||
fe525f413965d4f5f65b70f08b90b3d3f944714f665e2c5636a6e8fec08d3c74 /com/github/MinecraftForge/Srg2Source/ea4ea62/Srg2Source-ea4ea62.pom
|
fe525f413965d4f5f65b70f08b90b3d3f944714f665e2c5636a6e8fec08d3c74 /com/github/MinecraftForge/Srg2Source/ea4ea62/Srg2Source-ea4ea62.pom
|
||||||
|
cddfc1a07301f2fa07a5e1b6897e455d397d6d5c547d45082c267a1ee2c75f70 /com/github/ModCoderPack/MCInjector/05aa80e/MCInjector-05aa80e.jar
|
||||||
|
7191124b8491d36b9fc1eb1a4e0f8ef710a4b98e27dde92854c24d45457fd9d0 /com/github/ModCoderPack/MCInjector/05aa80e/MCInjector-05aa80e.pom
|
||||||
ecf57aab63509ec0ce3937c2215bc3a2e3cb6357cd11095978db18bd3251731a /com/github/ModCoderPack/MCInjector/7258466/MCInjector-7258466.jar
|
ecf57aab63509ec0ce3937c2215bc3a2e3cb6357cd11095978db18bd3251731a /com/github/ModCoderPack/MCInjector/7258466/MCInjector-7258466.jar
|
||||||
dc7ed1f4f0ddd8f5ce3b449db944907a5eb2855dbbbc59b08dad1247ebafba33 /com/github/ModCoderPack/MCInjector/7258466/MCInjector-7258466.pom
|
dc7ed1f4f0ddd8f5ce3b449db944907a5eb2855dbbbc59b08dad1247ebafba33 /com/github/ModCoderPack/MCInjector/7258466/MCInjector-7258466.pom
|
||||||
eec4d746869133803b0b3c8a8036a6fb1ec95c52951a0c83cd712f8414eb2155 /com/github/ReplayMod/ReplayStudio/1.10.2/9fd96a7/1.10.2-9fd96a7.jar
|
e1a215146621ab100c5d88c6c65e7b76c91f2a06ab8714ac438738ddec5ea904 /com/github/ReplayMod/ReplayStudio/1.10.2/3680c2e/1.10.2-3680c2e.jar
|
||||||
4ab7d385c3bb8ff5f644d7581ba01e8f53bf901391bc3db4a42671d691fe10a3 /com/github/ReplayMod/ReplayStudio/1.10.2/9fd96a7/1.10.2-9fd96a7.pom
|
da0b27f2719bf829f91eb4d6ea7d6e54c71b301a19578bafe6ec05e72ed04a6a /com/github/ReplayMod/ReplayStudio/1.10.2/3680c2e/1.10.2-3680c2e.pom
|
||||||
2b1cc3bb7e47f0e211d9a4f6460094cac923d6225570c3f7050d7ca400797ca3 /com/github/ReplayMod/ReplayStudio/1.11.2/9fd96a7/1.11.2-9fd96a7.jar
|
67e8b400d005235bd2825717864c4a9341567302877c857c3681adc74802b2ba /com/github/ReplayMod/ReplayStudio/1.11.2/3680c2e/1.11.2-3680c2e.jar
|
||||||
5c7a1016aec5d110283b7da5d2275624c9620f4b7e280243d36a3d91fdc9a634 /com/github/ReplayMod/ReplayStudio/1.11.2/9fd96a7/1.11.2-9fd96a7.pom
|
ff786e8da1d52bfdca8abe58bc83cf9200e027a85212da633e795811b5c8b1ee /com/github/ReplayMod/ReplayStudio/1.11.2/3680c2e/1.11.2-3680c2e.pom
|
||||||
0b5b847e3632c9af689d6962784055199b32480776d6677c3af7a5222a5d7aa8 /com/github/ReplayMod/ReplayStudio/1.11/9fd96a7/1.11-9fd96a7.jar
|
68da074f5cccd590c9584efc885f6ea842a15f1ce968aad04cbac6af2c8ecf49 /com/github/ReplayMod/ReplayStudio/1.11/3680c2e/1.11-3680c2e.jar
|
||||||
264e3bc6f5e46a779e69693a8923b7ec0ab293c0b44aebdef8ae1384e60ca9cd /com/github/ReplayMod/ReplayStudio/1.11/9fd96a7/1.11-9fd96a7.pom
|
79a6ed9587d6b23f5221b0fdff12f01de4859dc985f3cdbebf081edd4e478a54 /com/github/ReplayMod/ReplayStudio/1.11/3680c2e/1.11-3680c2e.pom
|
||||||
a57a2413914bcd3d28303fd8f15311ea75c71190a709301016e8d4a2a5b8594d /com/github/ReplayMod/ReplayStudio/1.12.1/9fd96a7/1.12.1-9fd96a7.jar
|
60549740b778011d5e4a8b786805c6de8c518ce8f627cf70369b2c71f0d399c4 /com/github/ReplayMod/ReplayStudio/1.12.1/3680c2e/1.12.1-3680c2e.jar
|
||||||
d5de52fb3678b934f9ff79010cf5f9b5808d4dbecea12176a68ba48770058292 /com/github/ReplayMod/ReplayStudio/1.12.1/9fd96a7/1.12.1-9fd96a7.pom
|
da248126087579d384175fa36eb654c8755027727aff6c285cd8e4e056ddf424 /com/github/ReplayMod/ReplayStudio/1.12.1/3680c2e/1.12.1-3680c2e.pom
|
||||||
8e394540ae4f7e482418bac8fc62b960e7d6684d0c775de4cbe31a5b6e8265ba /com/github/ReplayMod/ReplayStudio/1.12.2/9fd96a7/1.12.2-9fd96a7.jar
|
30ecf796e3697cf7d86c21f245695e659b39f55f2aecf40864ec6ac2c0eeae87 /com/github/ReplayMod/ReplayStudio/1.12.2/3680c2e/1.12.2-3680c2e.jar
|
||||||
52fffb013931c1665fec82a4b8fa689746ced42ba3aa9bf9ec0e31cb5795dd45 /com/github/ReplayMod/ReplayStudio/1.12.2/9fd96a7/1.12.2-9fd96a7.pom
|
73c4c53e5f18cffd921db81019510c47afb306eb2aea86377f44fc91e8b45130 /com/github/ReplayMod/ReplayStudio/1.12.2/3680c2e/1.12.2-3680c2e.pom
|
||||||
4a63fcc6f9028eb3861ffa2bfa530946a3bfb08740a63b079438cd63483e25d6 /com/github/ReplayMod/ReplayStudio/1.12/9fd96a7/1.12-9fd96a7.jar
|
2f0e27b40a0c3ac298573c6a2fad24829e968731676305b5f1c471a827ac7458 /com/github/ReplayMod/ReplayStudio/1.12/3680c2e/1.12-3680c2e.jar
|
||||||
84dc441594bfc55066bc47e220bec2c29b13078f43bf4825ea2efb627ac77e48 /com/github/ReplayMod/ReplayStudio/1.12/9fd96a7/1.12-9fd96a7.pom
|
282e2fa0ef80206ab592f90f8585d5ecf5adfb110dcd1cb5204971257e3fd44e /com/github/ReplayMod/ReplayStudio/1.12/3680c2e/1.12-3680c2e.pom
|
||||||
05815d75c608c7a595e0b05e253dd061f0399192d5ff801bd4638f91e2977ea9 /com/github/ReplayMod/ReplayStudio/1.8/9fd96a7/1.8-9fd96a7.jar
|
1aa22b15d5e89258fc58c2a310c915937cf93b42bf27b9fefc04d20b6b07b19c /com/github/ReplayMod/ReplayStudio/1.7.10/3680c2e/1.7.10-3680c2e.jar
|
||||||
c8f68dd69574d0a60fd4da65dd719015f15dc39689c11ec82d996d73abafb1df /com/github/ReplayMod/ReplayStudio/1.8/9fd96a7/1.8-9fd96a7.pom
|
fbd4bfe141d845248bb095d59f3aaf273bf20ad849cec89d21594754a69f3f53 /com/github/ReplayMod/ReplayStudio/1.7.10/3680c2e/1.7.10-3680c2e.pom
|
||||||
a0860a4846512e77944e4fd3e22e27e239606748aba10b4e3c0f8965439b6208 /com/github/ReplayMod/ReplayStudio/1.9.4/9fd96a7/1.9.4-9fd96a7.jar
|
96b37e76cf8b4aac4f0419d84ba6427da156cd7c4f41f9b9380d149893dd50a7 /com/github/ReplayMod/ReplayStudio/1.8/3680c2e/1.8-3680c2e.jar
|
||||||
8b4d5ad45fc62539a5add40e944e6fb22ad2b4d3954ed5b16f3f2a3b688da010 /com/github/ReplayMod/ReplayStudio/1.9.4/9fd96a7/1.9.4-9fd96a7.pom
|
7a68b798f4029b98b391076992d39633b3060d06d43edc25422edbbed09914f5 /com/github/ReplayMod/ReplayStudio/1.8/3680c2e/1.8-3680c2e.pom
|
||||||
|
5e5bea81fd85631a5f80973fab581e991d793d543e2bbbdbf1bebc15b4a279cd /com/github/ReplayMod/ReplayStudio/1.9.4/3680c2e/1.9.4-3680c2e.jar
|
||||||
|
cb0a152f7c720de75325b2cb857879596edf8c4b0de6f5b39168a1be1aa6709f /com/github/ReplayMod/ReplayStudio/1.9.4/3680c2e/1.9.4-3680c2e.pom
|
||||||
bfdcda4cbf23f28392384818a1417c2d6df687e15ce77530ef96381393102f8a /com/github/SpongePowered/MixinGradle/dcfaf61/MixinGradle-dcfaf61.jar
|
bfdcda4cbf23f28392384818a1417c2d6df687e15ce77530ef96381393102f8a /com/github/SpongePowered/MixinGradle/dcfaf61/MixinGradle-dcfaf61.jar
|
||||||
3552e0c04817d91d1b6671a051d0e1d952c8b6a8eec57b54e829de9fa3ddf002 /com/github/SpongePowered/MixinGradle/dcfaf61/MixinGradle-dcfaf61.pom
|
3552e0c04817d91d1b6671a051d0e1d952c8b6a8eec57b54e829de9fa3ddf002 /com/github/SpongePowered/MixinGradle/dcfaf61/MixinGradle-dcfaf61.pom
|
||||||
c6ebd74cd6108b8c372c95b842725ee5bd6d3303ba26cb00f18bc92f80b47956 /com/github/tony19/named-regexp/0.2.3/named-regexp-0.2.3.jar
|
c6ebd74cd6108b8c372c95b842725ee5bd6d3303ba26cb00f18bc92f80b47956 /com/github/tony19/named-regexp/0.2.3/named-regexp-0.2.3.jar
|
||||||
@@ -64,8 +70,6 @@ c885ce34249682bc0236b4a7d56efcc12048e6135a5baf7a9cde8ad8cda13fcd /com/google/cod
|
|||||||
4170a761dc5bfd3981a8e6f7aab9e2acdce82d34fd5aa9bb11e3c090d25314ce /com/google/code/findbugs/jsr305/3.0.1/jsr305-3.0.1.pom
|
4170a761dc5bfd3981a8e6f7aab9e2acdce82d34fd5aa9bb11e3c090d25314ce /com/google/code/findbugs/jsr305/3.0.1/jsr305-3.0.1.pom
|
||||||
8cc1f0813a186079f82d300a43156bdf852a88008f4f1a1fa71e788fb3b9a86d /com/google/code/google-collections/google-collect/snapshot-20080530/google-collect-snapshot-20080530.jar
|
8cc1f0813a186079f82d300a43156bdf852a88008f4f1a1fa71e788fb3b9a86d /com/google/code/google-collections/google-collect/snapshot-20080530/google-collect-snapshot-20080530.jar
|
||||||
7d131d6a082a33363bdfbf55d2fee2219d9bc8d1c455cc3f7c6403cf2a4496a5 /com/google/code/google-collections/google-collect/snapshot-20080530/google-collect-snapshot-20080530.pom
|
7d131d6a082a33363bdfbf55d2fee2219d9bc8d1c455cc3f7c6403cf2a4496a5 /com/google/code/google-collections/google-collect/snapshot-20080530/google-collect-snapshot-20080530.pom
|
||||||
35c94198255e95f6f11501eb4b3d43a5276bfdd142ab7c904722e69bff51f69e /com/google/code/gson/gson/2.1/gson-2.1.jar
|
|
||||||
894da89d477e805389c9df1d6fa8bd552285aed56a399d5749213520a7c74054 /com/google/code/gson/gson/2.1/gson-2.1.pom
|
|
||||||
c0328cd07ca9e363a5acd00c1cf4afe8cf554bd6d373834981ba05cebec687fb /com/google/code/gson/gson/2.2.4/gson-2.2.4.jar
|
c0328cd07ca9e363a5acd00c1cf4afe8cf554bd6d373834981ba05cebec687fb /com/google/code/gson/gson/2.2.4/gson-2.2.4.jar
|
||||||
ae984d5d19894ce6dc4689866eaa12f8fc31409113e60ee3b44853b8ac4fd380 /com/google/code/gson/gson/2.2.4/gson-2.2.4.pom
|
ae984d5d19894ce6dc4689866eaa12f8fc31409113e60ee3b44853b8ac4fd380 /com/google/code/gson/gson/2.2.4/gson-2.2.4.pom
|
||||||
c6221763bd79c4f1c3dc7f750b5f29a0bb38b367b81314c4f71896e340c40825 /com/google/code/gson/gson/2.8.0/gson-2.8.0.jar
|
c6221763bd79c4f1c3dc7f750b5f29a0bb38b367b81314c4f71896e340c40825 /com/google/code/gson/gson/2.8.0/gson-2.8.0.jar
|
||||||
@@ -73,6 +77,8 @@ a5331a0ecb548f9942ab5b93c7ac43c38a21e897763dde1bcdbf0774f416ca6f /com/google/cod
|
|||||||
0f1d8369b1e9f1bc4b467c8dcfdd8b59733aad5b5c8419c3a59b2f9abaf04cd2 /com/google/code/gson/gson-parent/2.8.0/gson-parent-2.8.0.pom
|
0f1d8369b1e9f1bc4b467c8dcfdd8b59733aad5b5c8419c3a59b2f9abaf04cd2 /com/google/code/gson/gson-parent/2.8.0/gson-parent-2.8.0.pom
|
||||||
4838f4f29a027522363cef1bcda1b48808880b0de4953fab6db4121ee27b649b /com/googlecode/jarjar/jarjar/1.1/jarjar-1.1.jar
|
4838f4f29a027522363cef1bcda1b48808880b0de4953fab6db4121ee27b649b /com/googlecode/jarjar/jarjar/1.1/jarjar-1.1.jar
|
||||||
be4f53c0bc04da4e3d6c65c8f3243d1ea4135e35c7d7dda88af1c582687263d7 /com/googlecode/jarjar/jarjar/1.1/jarjar-1.1.pom
|
be4f53c0bc04da4e3d6c65c8f3243d1ea4135e35c7d7dda88af1c582687263d7 /com/googlecode/jarjar/jarjar/1.1/jarjar-1.1.pom
|
||||||
|
d1296fa8926f71743be61cb4bfdac2ac3deb9ffe1a4948b1f293cb7a1bdb1800 /com/googlecode/javaewah/JavaEWAH/0.5.6/JavaEWAH-0.5.6.jar
|
||||||
|
fa5c2d7edcd57c6e1b402773dc32a180f82c111af44bfc2d483a2c7be1862e8f /com/googlecode/javaewah/JavaEWAH/0.5.6/JavaEWAH-0.5.6.pom
|
||||||
ddbbf392f8e61f770a509a49aed5f32ead19768283b4b512c626e09e1ba5cc46 /com/googlecode/mp4parser/isoparser/1.1.7/isoparser-1.1.7.jar
|
ddbbf392f8e61f770a509a49aed5f32ead19768283b4b512c626e09e1ba5cc46 /com/googlecode/mp4parser/isoparser/1.1.7/isoparser-1.1.7.jar
|
||||||
6890ebacb23d3ab51a5751a830f5269b7e8fdd19d08b7e055bc739f62b4bd174 /com/googlecode/mp4parser/isoparser/1.1.7/isoparser-1.1.7.pom
|
6890ebacb23d3ab51a5751a830f5269b7e8fdd19d08b7e055bc739f62b4bd174 /com/googlecode/mp4parser/isoparser/1.1.7/isoparser-1.1.7.pom
|
||||||
8c36a80ea613d0b6b8040a17cf837c5bbe3677bc1b06a058a6c174fdb787ebbc /com/google/guava/guava/17.0/guava-17.0.jar
|
8c36a80ea613d0b6b8040a17cf837c5bbe3677bc1b06a058a6c174fdb787ebbc /com/google/guava/guava/17.0/guava-17.0.jar
|
||||||
@@ -112,6 +118,8 @@ bbc21cab2e0b0c76c9977fdf8b80c311788094d81e6910a2a6e63d80910102c7 /com/gradle/pub
|
|||||||
89aa507536b0a93d8c9d3087d738255eefffc002cefa255ebdbd6891b8165447 /com/gradle/publish/plugin-publish-plugin/0.9.1/plugin-publish-plugin-0.9.1.pom
|
89aa507536b0a93d8c9d3087d738255eefffc002cefa255ebdbd6891b8165447 /com/gradle/publish/plugin-publish-plugin/0.9.1/plugin-publish-plugin-0.9.1.pom
|
||||||
147592c5eb8e11fc8394125954f877acf25918bae13aa210c2825aefc3030ed8 /com/ibm/icu/icu4j-core-mojang/51.2/icu4j-core-mojang-51.2.jar
|
147592c5eb8e11fc8394125954f877acf25918bae13aa210c2825aefc3030ed8 /com/ibm/icu/icu4j-core-mojang/51.2/icu4j-core-mojang-51.2.jar
|
||||||
06b382efe9d60474aa3df7f4851397b3ae0c4f142567f0fc66a8fa2706a665e4 /com/ibm/icu/icu4j-core-mojang/51.2/icu4j-core-mojang-51.2.pom
|
06b382efe9d60474aa3df7f4851397b3ae0c4f142567f0fc66a8fa2706a665e4 /com/ibm/icu/icu4j-core-mojang/51.2/icu4j-core-mojang-51.2.pom
|
||||||
|
48cd629c3081dff4d8c35e7da4efb3bcc4ed4b35c8a7e8198d5c30e0312bd912 /com/jcraft/jsch/0.1.46/jsch-0.1.46.jar
|
||||||
|
eb60cec1e570efad3d750afd9a86b763dba49e47c3c106a599c05e708260efc4 /com/jcraft/jsch/0.1.46/jsch-0.1.46.pom
|
||||||
331746fa62cfbc3368260c5a2e660936ad11be612308c120a044e120361d474e /com/martiansoftware/jsap/2.1/jsap-2.1.jar
|
331746fa62cfbc3368260c5a2e660936ad11be612308c120a044e120361d474e /com/martiansoftware/jsap/2.1/jsap-2.1.jar
|
||||||
9acf56a8579c05bedd819d99232363e2bf327e8f73c67598dbd9885a845a3c69 /com/martiansoftware/jsap/2.1/jsap-2.1.pom
|
9acf56a8579c05bedd819d99232363e2bf327e8f73c67598dbd9885a845a3c69 /com/martiansoftware/jsap/2.1/jsap-2.1.pom
|
||||||
2c149735a093b6c65a27db760896ad5c5b06e29100bb8969937667784fef4ba0 /com/mojang/authlib/1.5.16/authlib-1.5.16.jar
|
2c149735a093b6c65a27db760896ad5c5b06e29100bb8969937667784fef4ba0 /com/mojang/authlib/1.5.16/authlib-1.5.16.jar
|
||||||
@@ -132,10 +140,12 @@ a74b4370bc60e368b9c29940d3b6aae334aef3f5cf16b5c2ee5d0b775ef6ea18 /com/mojang/rea
|
|||||||
23c16b609458580d2f12abba28604264bfc71451374584a673bd52ad3b99c25c /com/mojang/realms/1.10.16/realms-1.10.16.pom
|
23c16b609458580d2f12abba28604264bfc71451374584a673bd52ad3b99c25c /com/mojang/realms/1.10.16/realms-1.10.16.pom
|
||||||
e3ab95d053a4e180693422bf56592f3c62ff273b0deb1d4a3cb5f76d8fb6994a /com/mojang/realms/1.10.17/realms-1.10.17.jar
|
e3ab95d053a4e180693422bf56592f3c62ff273b0deb1d4a3cb5f76d8fb6994a /com/mojang/realms/1.10.17/realms-1.10.17.jar
|
||||||
152235c4a886c6c9a9af7c76092a8161c5e505199b728c1a965f069a7519290f /com/mojang/realms/1.10.17/realms-1.10.17.pom
|
152235c4a886c6c9a9af7c76092a8161c5e505199b728c1a965f069a7519290f /com/mojang/realms/1.10.17/realms-1.10.17.pom
|
||||||
50ab8f15526ef8166529159fdd56b511a38ea64f91e95619acbbc9b6914848ba /com/mojang/realms/1.10.19/realms-1.10.19.jar
|
7765dab63907f149910b849de5e1f5d000b3245e806390601395c3adca000e0a /com/mojang/realms/1.10.21/realms-1.10.21.jar
|
||||||
b69780ed88a3df0941e10321685bbdbea80b415c5523ced071301189ea295de5 /com/mojang/realms/1.10.19/realms-1.10.19.pom
|
59a779e5d9ad935f32efb2f971885d1bb3ec544de5ebf80727ec260dc459862d /com/mojang/realms/1.10.21/realms-1.10.21.pom
|
||||||
9076a115056a4a3ce85b3f8b8c06b8e4ea723d856ab87592d72ac9fd3fa67c9f /com/mojang/realms/1.10.4/realms-1.10.4.jar
|
9076a115056a4a3ce85b3f8b8c06b8e4ea723d856ab87592d72ac9fd3fa67c9f /com/mojang/realms/1.10.4/realms-1.10.4.jar
|
||||||
0e436798162614ebaa8a04c225ff0100d046848759a3d8a5f5bc3c73dcdaea13 /com/mojang/realms/1.10.4/realms-1.10.4.pom
|
0e436798162614ebaa8a04c225ff0100d046848759a3d8a5f5bc3c73dcdaea13 /com/mojang/realms/1.10.4/realms-1.10.4.pom
|
||||||
|
a8ced4924d0e285ab287d94889e9920f855b9e13ef42e1c7468377b3c13bdb2b /com/mojang/realms/1.3.5/realms-1.3.5.jar
|
||||||
|
5fede9baa0b3a8064273ad05e3cafb09567de0da51426e925870059e3452ee5c /com/mojang/realms/1.3.5/realms-1.3.5.pom
|
||||||
0ad91190cd480af14954d361d7b9ffc53ab3c5344797e3c9fd90c29bf5d28499 /com/mojang/realms/1.6.1/realms-1.6.1.jar
|
0ad91190cd480af14954d361d7b9ffc53ab3c5344797e3c9fd90c29bf5d28499 /com/mojang/realms/1.6.1/realms-1.6.1.jar
|
||||||
6c724ad415af96416e035a5ae96b113b1df9247d5833fbf73135c66b23263904 /com/mojang/realms/1.6.1/realms-1.6.1.pom
|
6c724ad415af96416e035a5ae96b113b1df9247d5833fbf73135c66b23263904 /com/mojang/realms/1.6.1/realms-1.6.1.pom
|
||||||
4a6a90ed956609d6cd3a7f84622fcac87d22e9a5d4858c6d1e965af860d07a63 /com/mojang/realms/1.7.59/realms-1.7.59.jar
|
4a6a90ed956609d6cd3a7f84622fcac87d22e9a5d4858c6d1e965af860d07a63 /com/mojang/realms/1.7.59/realms-1.7.59.jar
|
||||||
@@ -211,20 +221,25 @@ ea6fdd37e68569a378fd149b0ab7cfede1de7fa3e794f4ed81f9018366fbdc51 /de/oceanlabs/m
|
|||||||
755416d68281e0c6998fc743929f36e14563510467d1c749d4bf66ba5bf82b19 /de/oceanlabs/mcp/mcp_snapshot/20161220-1.11/mcp_snapshot-20161220-1.11.zip
|
755416d68281e0c6998fc743929f36e14563510467d1c749d4bf66ba5bf82b19 /de/oceanlabs/mcp/mcp_snapshot/20161220-1.11/mcp_snapshot-20161220-1.11.zip
|
||||||
5bbf57acadec0f5ea930b793772bbbf2885098aed8d2ecf6290c170a7cd9f33e /de/oceanlabs/mcp/mcp_snapshot/20170615-1.12/mcp_snapshot-20170615-1.12.zip
|
5bbf57acadec0f5ea930b793772bbbf2885098aed8d2ecf6290c170a7cd9f33e /de/oceanlabs/mcp/mcp_snapshot/20170615-1.12/mcp_snapshot-20170615-1.12.zip
|
||||||
cf2630841a5ef712b4be22a814f1b83964850b0de4dc78f6131b66280beb3249 /de/oceanlabs/mcp/mcp_snapshot_nodoc/20141130-1.8/mcp_snapshot_nodoc-20141130-1.8.zip
|
cf2630841a5ef712b4be22a814f1b83964850b0de4dc78f6131b66280beb3249 /de/oceanlabs/mcp/mcp_snapshot_nodoc/20141130-1.8/mcp_snapshot_nodoc-20141130-1.8.zip
|
||||||
|
83d303a80071582cd07d41b35aa77c178d609a27c69c8472b794636eb50905b0 /de/oceanlabs/mcp/mcp_stable/12-1.7.10/mcp_stable-12-1.7.10.zip
|
||||||
aeed0aaba9d159b7ce60a21e2dcc36adb249fade65ce2f76c730dd0ec7270763 /de/oceanlabs/mcp/mcp_stable/22-1.8.9/mcp_stable-22-1.8.9.zip
|
aeed0aaba9d159b7ce60a21e2dcc36adb249fade65ce2f76c730dd0ec7270763 /de/oceanlabs/mcp/mcp_stable/22-1.8.9/mcp_stable-22-1.8.9.zip
|
||||||
22c45060f350fcaa94e503f4a420cf8237c26c0fcdb4ada4aa98389b75c7b231 /de/oceanlabs/mcp/RetroGuard/3.6.6/RetroGuard-3.6.6.jar
|
22c45060f350fcaa94e503f4a420cf8237c26c0fcdb4ada4aa98389b75c7b231 /de/oceanlabs/mcp/RetroGuard/3.6.6/RetroGuard-3.6.6.jar
|
||||||
d6f165bb39aaa20ee14fdcbbdb0b8fffae38067087f333ec6e0acd3f6666b2ad /de/oceanlabs/mcp/RetroGuard/3.6.6/RetroGuard-3.6.6.pom
|
d6f165bb39aaa20ee14fdcbbdb0b8fffae38067087f333ec6e0acd3f6666b2ad /de/oceanlabs/mcp/RetroGuard/3.6.6/RetroGuard-3.6.6.pom
|
||||||
* /de/oceanlabs/mcp/versions.json
|
* /de/oceanlabs/mcp/versions.json
|
||||||
|
7b18843dec340463a7e00c49325d7a6a8621a1de6ae64a4a282d629b0263d0ac /fernflower-fix-1.0.zip
|
||||||
08e0b3db3d116301f16142c88932daf954ac447427d609710c2a5ee8dfcfa1f7 /fr/inria/gforge/spoon/spoon-core/5.1.0/spoon-core-5.1.0.jar
|
08e0b3db3d116301f16142c88932daf954ac447427d609710c2a5ee8dfcfa1f7 /fr/inria/gforge/spoon/spoon-core/5.1.0/spoon-core-5.1.0.jar
|
||||||
5339568b5996c1b5ddc11cc7a640b11d3b7c65ba0ae7e250dfa12fd906e483bd /fr/inria/gforge/spoon/spoon-core/5.1.0/spoon-core-5.1.0.pom
|
5339568b5996c1b5ddc11cc7a640b11d3b7c65ba0ae7e250dfa12fd906e483bd /fr/inria/gforge/spoon/spoon-core/5.1.0/spoon-core-5.1.0.pom
|
||||||
142667dfce3afeb5cc6e18e893d895604060ecef9dfc0d261f0eb9b9e8c81cb0 /gradle/plugin/net/minecrell/gitpatcher/0.9.0/gitpatcher-0.9.0.jar
|
142667dfce3afeb5cc6e18e893d895604060ecef9dfc0d261f0eb9b9e8c81cb0 /gradle/plugin/net/minecrell/gitpatcher/0.9.0/gitpatcher-0.9.0.jar
|
||||||
37a6757b16b927873baefe8498fa92c5385eba0ded3852982965491da2dd8e3a /gradle/plugin/net/minecrell/gitpatcher/0.9.0/gitpatcher-0.9.0.pom
|
37a6757b16b927873baefe8498fa92c5385eba0ded3852982965491da2dd8e3a /gradle/plugin/net/minecrell/gitpatcher/0.9.0/gitpatcher-0.9.0.pom
|
||||||
|
96eaa32232b5a5b0f9afc121a0e1b2416e3dca50657b31e5431c0a04ae650552 /io/netty/netty-all/4.0.10.Final/netty-all-4.0.10.Final.jar
|
||||||
|
953a525bdf60c60ce59392849fad264c93276f035eb8345b7add69344352656e /io/netty/netty-all/4.0.10.Final/netty-all-4.0.10.Final.pom
|
||||||
8bc2b71a17ed1b5c6329bcc61fa9a2f7fe071074548fa137ebafec2a23d49d89 /io/netty/netty-all/4.0.15.Final/netty-all-4.0.15.Final.jar
|
8bc2b71a17ed1b5c6329bcc61fa9a2f7fe071074548fa137ebafec2a23d49d89 /io/netty/netty-all/4.0.15.Final/netty-all-4.0.15.Final.jar
|
||||||
9dfcfbce5531faa07e6afb1a2fc9579f096ffe88707bf95869d83ad81228a157 /io/netty/netty-all/4.0.15.Final/netty-all-4.0.15.Final.pom
|
9dfcfbce5531faa07e6afb1a2fc9579f096ffe88707bf95869d83ad81228a157 /io/netty/netty-all/4.0.15.Final/netty-all-4.0.15.Final.pom
|
||||||
50510e9c9874b539b98ef931fe7eeeb002f6b5b1976ea37669b9493426294561 /io/netty/netty-all/4.0.23.Final/netty-all-4.0.23.Final.jar
|
50510e9c9874b539b98ef931fe7eeeb002f6b5b1976ea37669b9493426294561 /io/netty/netty-all/4.0.23.Final/netty-all-4.0.23.Final.jar
|
||||||
990a10af14db6b136d3a539eadca5dc7b4d0ceab9a1c90c5268b0ca8ae27b14b /io/netty/netty-all/4.0.23.Final/netty-all-4.0.23.Final.pom
|
990a10af14db6b136d3a539eadca5dc7b4d0ceab9a1c90c5268b0ca8ae27b14b /io/netty/netty-all/4.0.23.Final/netty-all-4.0.23.Final.pom
|
||||||
fd5ad66cdd0a496d281b26c699f4511da7c3f95083659ebb7bae22dab876581a /io/netty/netty-all/4.1.9.Final/netty-all-4.1.9.Final.jar
|
fd5ad66cdd0a496d281b26c699f4511da7c3f95083659ebb7bae22dab876581a /io/netty/netty-all/4.1.9.Final/netty-all-4.1.9.Final.jar
|
||||||
8ec38a54fc6ed53201d507c6690805878158bcab25c2f476a74c0ccb1d78870b /io/netty/netty-all/4.1.9.Final/netty-all-4.1.9.Final.pom
|
8ec38a54fc6ed53201d507c6690805878158bcab25c2f476a74c0ccb1d78870b /io/netty/netty-all/4.1.9.Final/netty-all-4.1.9.Final.pom
|
||||||
|
6e9fd513e74194c464723421215c52f3c90bcfbacc55fd7a3d9d172011da9bb4 /io/netty/netty-parent/4.0.10.Final/netty-parent-4.0.10.Final.pom
|
||||||
8064a2f9d222704882928e6ff104decc071ab6b7b07dce8efb90100d1e624e30 /io/netty/netty-parent/4.0.15.Final/netty-parent-4.0.15.Final.pom
|
8064a2f9d222704882928e6ff104decc071ab6b7b07dce8efb90100d1e624e30 /io/netty/netty-parent/4.0.15.Final/netty-parent-4.0.15.Final.pom
|
||||||
f7f1bd6f1e1df0b300730f1551b7222f13871e40ba5a464978bd3eed94e2212d /io/netty/netty-parent/4.0.23.Final/netty-parent-4.0.23.Final.pom
|
f7f1bd6f1e1df0b300730f1551b7222f13871e40ba5a464978bd3eed94e2212d /io/netty/netty-parent/4.0.23.Final/netty-parent-4.0.23.Final.pom
|
||||||
117ff8d9069d0278585c284ab0817f826f018d9cf4e30f7e1b11f4fbc73013d1 /io/netty/netty-parent/4.1.9.Final/netty-parent-4.1.9.Final.pom
|
117ff8d9069d0278585c284ab0817f826f018d9cf4e30f7e1b11f4fbc73013d1 /io/netty/netty-parent/4.1.9.Final/netty-parent-4.1.9.Final.pom
|
||||||
@@ -232,6 +247,8 @@ b4533f3b4029e480288d85187fc9ee6789f3d362c6633d8e9b092ec455ad2f28 /it/unimi/dsi/f
|
|||||||
2b3db089f1f78a49a628d9015cca6a95e87421fa04262553cd2c4c79d66d04a7 /it/unimi/dsi/fastutil/7.0.12_mojang/fastutil-7.0.12_mojang.pom
|
2b3db089f1f78a49a628d9015cca6a95e87421fa04262553cd2c4c79d66d04a7 /it/unimi/dsi/fastutil/7.0.12_mojang/fastutil-7.0.12_mojang.pom
|
||||||
c266701bd7a4a2c36285862c1e682ccb7b5cb5b380d0de9bb1b34becf9e1c065 /it/unimi/dsi/fastutil/7.1.0/fastutil-7.1.0.jar
|
c266701bd7a4a2c36285862c1e682ccb7b5cb5b380d0de9bb1b34becf9e1c065 /it/unimi/dsi/fastutil/7.1.0/fastutil-7.1.0.jar
|
||||||
2846073506b6ff0361f08d0deafb2f3921797974e9685cae6c103f4a7f29100b /it/unimi/dsi/fastutil/7.1.0/fastutil-7.1.0.pom
|
2846073506b6ff0361f08d0deafb2f3921797974e9685cae6c103f4a7f29100b /it/unimi/dsi/fastutil/7.1.0/fastutil-7.1.0.pom
|
||||||
|
dbaa088690a23a954eff669a99d2452a24dd9f10d866725ff5d29ff4740a897e /java3d/vecmath/1.3.1/vecmath-1.3.1.jar
|
||||||
|
d0da815549fc3f46ccdba82a65fd707b4029e83e1ea335b51dabd6d34a6718b7 /java3d/vecmath/1.3.1/vecmath-1.3.1.pom
|
||||||
09adf7955baa6bddf57a4bdbf9a91cf690261314969b59a18085ece1e05eccf9 /java3d/vecmath/1.5.2/vecmath-1.5.2.jar
|
09adf7955baa6bddf57a4bdbf9a91cf690261314969b59a18085ece1e05eccf9 /java3d/vecmath/1.5.2/vecmath-1.5.2.jar
|
||||||
a4aee4668f1b127c95c9afe1b922f4c5a0b1ad879ba811077cb7d0e048dce231 /java3d/vecmath/1.5.2/vecmath-1.5.2.pom
|
a4aee4668f1b127c95c9afe1b922f4c5a0b1ad879ba811077cb7d0e048dce231 /java3d/vecmath/1.5.2/vecmath-1.5.2.pom
|
||||||
a6d2c9c0ddff7702662073b69c6dc4ec83011d22e4eb2dada28aa2d66ee47f97 /jline/jline/2.13/jline-2.13.jar
|
a6d2c9c0ddff7702662073b69c6dc4ec83011d22e4eb2dada28aa2d66ee47f97 /jline/jline/2.13/jline-2.13.jar
|
||||||
@@ -270,6 +287,9 @@ ccccd0a92f76fbb24279691daad9b67f85d80471a37e59e0da76d7754982dfe8 /mc/game/1.8/cl
|
|||||||
* /mc/game/cdcd308b7cbd15bc595850ce6557d4ade48cee7a/1.9.4.json
|
* /mc/game/cdcd308b7cbd15bc595850ce6557d4ade48cee7a/1.9.4.json
|
||||||
* /mc/game/cf72a57ff499d6d9ade870b2143ee54958bd33ef/1.12.2.json
|
* /mc/game/cf72a57ff499d6d9ade870b2143ee54958bd33ef/1.12.2.json
|
||||||
* /mc/game/d74a4b45e8877084e1bcc8121012845f28def238/1.8.json
|
* /mc/game/d74a4b45e8877084e1bcc8121012845f28def238/1.8.json
|
||||||
|
a4fc2284657544e0f4bcc964f927c2fda3e3a205178ed1d5d58883aaf9780cce /Minecraft.Download/versions/1.7.10/1.7.10.jar
|
||||||
|
ad98bf393d5380741fc9d1193624a51c3a5a52de88278890380fdf1b702afd32 /Minecraft.Download/versions/1.7.10/1.7.10.json
|
||||||
|
c70870f00c4024d829e154f7e5f4e885b02dd87991726a3308d81f513972f3fc /Minecraft.Download/versions/1.7.10/minecraft_server.1.7.10.jar
|
||||||
3bff6a1489b8e54cf130344bc5e8744db331045ad2fc736612576e1d80eb1f48 /net/java/dev/jna/jna/3.4.0/jna-3.4.0.jar
|
3bff6a1489b8e54cf130344bc5e8744db331045ad2fc736612576e1d80eb1f48 /net/java/dev/jna/jna/3.4.0/jna-3.4.0.jar
|
||||||
cf4605822bd56d135dd7031603f122a11a0ec772373f466a4f2aac72dd9a1761 /net/java/dev/jna/jna/3.4.0/jna-3.4.0.pom
|
cf4605822bd56d135dd7031603f122a11a0ec772373f466a4f2aac72dd9a1761 /net/java/dev/jna/jna/3.4.0/jna-3.4.0.pom
|
||||||
c4dadeeecaa90c8847902082aee5eb107fcf59c5d0e63a17fcaf273c0e2d2bd1 /net/java/dev/jna/jna/4.4.0/jna-4.4.0.jar
|
c4dadeeecaa90c8847902082aee5eb107fcf59c5d0e63a17fcaf273c0e2d2bd1 /net/java/dev/jna/jna/4.4.0/jna-4.4.0.jar
|
||||||
@@ -284,6 +304,8 @@ ea89d5090c8303ba4e9a0056e6d8a20429f3e021411e950bfd9eba3b6e6cf15c /net/java/dev/j
|
|||||||
ba27597365ae85a836c1f51819903668b4a1a7490e39e530633cc8a7b40b5500 /net/java/jinput/jinput-platform/2.0.5/jinput-platform-2.0.5.pom
|
ba27597365ae85a836c1f51819903668b4a1a7490e39e530633cc8a7b40b5500 /net/java/jinput/jinput-platform/2.0.5/jinput-platform-2.0.5.pom
|
||||||
c3334ff39cf0ab3b54925619101054c90098b7c733b1e7834c7b75e4c41e84a5 /net/java/jutils/jutils/1.0.0/jutils-1.0.0.jar
|
c3334ff39cf0ab3b54925619101054c90098b7c733b1e7834c7b75e4c41e84a5 /net/java/jutils/jutils/1.0.0/jutils-1.0.0.jar
|
||||||
af09ead4eb241473e7ec4d152a91a722ea09a717a202e20e4b385eac3217b7d6 /net/java/jutils/jutils/1.0.0/jutils-1.0.0.pom
|
af09ead4eb241473e7ec4d152a91a722ea09a717a202e20e4b385eac3217b7d6 /net/java/jutils/jutils/1.0.0/jutils-1.0.0.pom
|
||||||
|
0358ece24296312b655fe3c78b4fd42653bdb34c27cc9c018069e486aea8de9d /net/md-5/SpecialSource/1.7.3/SpecialSource-1.7.3.jar
|
||||||
|
bad0f99146d5617d7931761cf424386563e7b25a2ee7cfc235ed314a4776acaf /net/md-5/SpecialSource/1.7.3/SpecialSource-1.7.3.pom
|
||||||
b47c5d5810643426a3147ddb2195ef2ab67c80b167e7c2ac64a5d0dee8c030dd /net/md-5/SpecialSource/1.7.4/SpecialSource-1.7.4.jar
|
b47c5d5810643426a3147ddb2195ef2ab67c80b167e7c2ac64a5d0dee8c030dd /net/md-5/SpecialSource/1.7.4/SpecialSource-1.7.4.jar
|
||||||
5f374f8ae7afff8dbc23aff14e59c5bd585c230afe9a8dcaa7b928e8cb16a27e /net/md-5/SpecialSource/1.7.4/SpecialSource-1.7.4.pom
|
5f374f8ae7afff8dbc23aff14e59c5bd585c230afe9a8dcaa7b928e8cb16a27e /net/md-5/SpecialSource/1.7.4/SpecialSource-1.7.4.pom
|
||||||
ea608fe91f9c77a7e91061fab2c4d8eb1b865db4d062ea0fcc12a76db06c9dea /net/md-5/SpecialSource/1.8.2/SpecialSource-1.8.2.jar
|
ea608fe91f9c77a7e91061fab2c4d8eb1b865db4d062ea0fcc12a76db06c9dea /net/md-5/SpecialSource/1.8.2/SpecialSource-1.8.2.jar
|
||||||
@@ -300,6 +322,7 @@ c8396b067c800425d4f4e97ec6879262f2133b5c53575c6b82c4eb6feb22f2a1 /net/minecraftf
|
|||||||
ce0229a5c0873e5085bfb67eaea93aeed2e9f95e0534d87eadba5f1864a90778 /net/minecraftforge/forge/1.12-14.21.1.2387/forge-1.12-14.21.1.2387-userdev.jar
|
ce0229a5c0873e5085bfb67eaea93aeed2e9f95e0534d87eadba5f1864a90778 /net/minecraftforge/forge/1.12-14.21.1.2387/forge-1.12-14.21.1.2387-userdev.jar
|
||||||
0be3944587adda74c34735dc66757afed3223d8599ac6ad1b402d36d452a09f9 /net/minecraftforge/forge/1.12.2-14.23.0.2486/forge-1.12.2-14.23.0.2486.pom
|
0be3944587adda74c34735dc66757afed3223d8599ac6ad1b402d36d452a09f9 /net/minecraftforge/forge/1.12.2-14.23.0.2486/forge-1.12.2-14.23.0.2486.pom
|
||||||
7fdc682b7ae27f08d50873ae68ded2bc3e14756559fae5b9717efcf6814952c8 /net/minecraftforge/forge/1.12.2-14.23.0.2486/forge-1.12.2-14.23.0.2486-userdev.jar
|
7fdc682b7ae27f08d50873ae68ded2bc3e14756559fae5b9717efcf6814952c8 /net/minecraftforge/forge/1.12.2-14.23.0.2486/forge-1.12.2-14.23.0.2486-userdev.jar
|
||||||
|
207f089219e0f9ce70b5865519ce879e96f92b13443243b7dc3fd5ed82e3f174 /net/minecraftforge/forge/1.7.10-10.13.4.1558-1.7.10/forge-1.7.10-10.13.4.1558-1.7.10-userdev.jar
|
||||||
5d166a260388526b502b07c167beb8ae5cd18d46f60a10a029c1d6e1206e093a /net/minecraftforge/forge/1.8-11.14.4.1563/forge-1.8-11.14.4.1563.pom
|
5d166a260388526b502b07c167beb8ae5cd18d46f60a10a029c1d6e1206e093a /net/minecraftforge/forge/1.8-11.14.4.1563/forge-1.8-11.14.4.1563.pom
|
||||||
3e33989b813090abe749334b5a9a663bd37cb20e987b91f78fc616cc7fb91ee1 /net/minecraftforge/forge/1.8-11.14.4.1563/forge-1.8-11.14.4.1563-userdev.jar
|
3e33989b813090abe749334b5a9a663bd37cb20e987b91f78fc616cc7fb91ee1 /net/minecraftforge/forge/1.8-11.14.4.1563/forge-1.8-11.14.4.1563-userdev.jar
|
||||||
029ba9ca09212fbb850ea78a6b53b96b1288195b4e191194793cf5cf80d5758a /net/minecraftforge/forge/1.8.9-11.15.1.1722/forge-1.8.9-11.15.1.1722.pom
|
029ba9ca09212fbb850ea78a6b53b96b1288195b4e191194793cf5cf80d5758a /net/minecraftforge/forge/1.8.9-11.15.1.1722/forge-1.8.9-11.15.1.1722.pom
|
||||||
@@ -315,6 +338,8 @@ e74b65b8948446982a506a96176dd8baf4688237ba4903f56ca6f667b6c7ee42 /net/minecraft/
|
|||||||
60f08a3d6fc0e7948fd00fc95fad014fae5a5dc7eb991a631e0efee8bfad0b27 /net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5.pom
|
60f08a3d6fc0e7948fd00fc95fad014fae5a5dc7eb991a631e0efee8bfad0b27 /net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5.pom
|
||||||
3fcfbe3203c2ea521bf7640484fd35d6303186ea2e08e72f032d640ca067ffda /net/sf/jopt-simple/jopt-simple/4.6/jopt-simple-4.6.jar
|
3fcfbe3203c2ea521bf7640484fd35d6303186ea2e08e72f032d640ca067ffda /net/sf/jopt-simple/jopt-simple/4.6/jopt-simple-4.6.jar
|
||||||
692744a19473011539ebc1370a264b8af1c056e0ae21f5372aa9dd7d4b4e5a2b /net/sf/jopt-simple/jopt-simple/4.6/jopt-simple-4.6.pom
|
692744a19473011539ebc1370a264b8af1c056e0ae21f5372aa9dd7d4b4e5a2b /net/sf/jopt-simple/jopt-simple/4.6/jopt-simple-4.6.pom
|
||||||
|
0ffd6905a1ab99aaa1768b303015c432be9fac56047c1390ccf31bd22df5e64a /net/sf/jopt-simple/jopt-simple/4.7/jopt-simple-4.7.jar
|
||||||
|
c4330ce0d161b920ab8aba6c286444e6b619d1b6cb686653f89a9e28d476a88d /net/sf/jopt-simple/jopt-simple/4.7/jopt-simple-4.7.pom
|
||||||
26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5 /net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-4.9.jar
|
26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5 /net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-4.9.jar
|
||||||
7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092 /net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-4.9.pom
|
7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092 /net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-4.9.pom
|
||||||
9f0c8d50fa4b79b6ff1502dbec8502179d6b9497cacbe17a13074001aed537ec /net/sf/jopt-simple/jopt-simple/5.0.1/jopt-simple-5.0.1.jar
|
9f0c8d50fa4b79b6ff1502dbec8502179d6b9497cacbe17a13074001aed537ec /net/sf/jopt-simple/jopt-simple/5.0.1/jopt-simple-5.0.1.jar
|
||||||
@@ -520,6 +545,7 @@ ddf19054374a2617ba9c10d7a5ec8eeaeb8f62c2c6e430144e81da15718bb585 /org/eclipse/co
|
|||||||
17dbfaba6a138e6fc0eb361069470f00aaf70a94e2d3384f398dee4843eb8fe7 /org/eclipse/equinox/app/1.3.200-v20130910-1609/app-1.3.200-v20130910-1609.pom
|
17dbfaba6a138e6fc0eb361069470f00aaf70a94e2d3384f398dee4843eb8fe7 /org/eclipse/equinox/app/1.3.200-v20130910-1609/app-1.3.200-v20130910-1609.pom
|
||||||
83a2cde9ed188efcabebbd2db14128c531c5ba73f8abc599dcae83459a779109 /org/eclipse/equinox/app/maven-metadata.xml
|
83a2cde9ed188efcabebbd2db14128c531c5ba73f8abc599dcae83459a779109 /org/eclipse/equinox/app/maven-metadata.xml
|
||||||
6bc086aab7686a5a528d8c4ab2253d6cec7ead04b052576951e90cc561782257 /org/eclipse/equinox/common/3.6.200-v20130402-1505/common-3.6.200-v20130402-1505.jar
|
6bc086aab7686a5a528d8c4ab2253d6cec7ead04b052576951e90cc561782257 /org/eclipse/equinox/common/3.6.200-v20130402-1505/common-3.6.200-v20130402-1505.jar
|
||||||
|
843414d0e457898b1615e4c9118f86ae0cf30dd5166b8b0a1d206fbdab5fbbae /org/eclipse/equinox/common/3.6.200-v20130402-1505/common-3.6.200-v20130402-1505.jar
|
||||||
9234dbfd064411a849444abfeb8a10978672690d125beb4194f9e5b0f0a7ee5e /org/eclipse/equinox/common/3.6.200-v20130402-1505/common-3.6.200-v20130402-1505.pom
|
9234dbfd064411a849444abfeb8a10978672690d125beb4194f9e5b0f0a7ee5e /org/eclipse/equinox/common/3.6.200-v20130402-1505/common-3.6.200-v20130402-1505.pom
|
||||||
9274fc22b74d6dc42608049ea51aa046b8fc8fc60b2a7d6ff6d884d76e6ef3f6 /org/eclipse/equinox/common/maven-metadata.xml
|
9274fc22b74d6dc42608049ea51aa046b8fc8fc60b2a7d6ff6d884d76e6ef3f6 /org/eclipse/equinox/common/maven-metadata.xml
|
||||||
32b046de57df2f4887fc5a2c343740d9d12c7fe17541e2cede73cfa4ccbc2436 /org/eclipse/equinox/org.eclipse.equinox.common/3.6.0/org.eclipse.equinox.common-3.6.0.jar
|
32b046de57df2f4887fc5a2c343740d9d12c7fe17541e2cede73cfa4ccbc2436 /org/eclipse/equinox/org.eclipse.equinox.common/3.6.0/org.eclipse.equinox.common-3.6.0.jar
|
||||||
@@ -533,9 +559,14 @@ cb7c954965e6b2946c2f7be78c1e089b530e0444b1fefc2d8079a5681362bfa1 /org/eclipse/eq
|
|||||||
d7cd093fdad45c7cc979f44f7166f259607b41cf44a8afe77561594cef4c39d3 /org/eclipse/equinox/registry/maven-metadata.xml
|
d7cd093fdad45c7cc979f44f7166f259607b41cf44a8afe77561594cef4c39d3 /org/eclipse/equinox/registry/maven-metadata.xml
|
||||||
9cddda75f4a1b4469e73f44e7b61a3e897d0f657df4797f9106ffe88c4eeade0 /org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-4.6.1.jar
|
9cddda75f4a1b4469e73f44e7b61a3e897d0f657df4797f9106ffe88c4eeade0 /org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-4.6.1.jar
|
||||||
536c45e8804de01321c478cfb994377f81f1e32897636616fa21b877fd137c6f /org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-4.6.1.pom
|
536c45e8804de01321c478cfb994377f81f1e32897636616fa21b877fd137c6f /org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-4.6.1.pom
|
||||||
|
5a91ef99dc827e77c8dae1481bd5a92a0ce877304f2b25151ba4e0834e8a917d /org/eclipse/jdt/org.eclipse.jdt.core/3.10.0.v20131029-1755/org.eclipse.jdt.core-3.10.0.v20131029-1755.jar
|
||||||
|
5591ec1f9826a0506b33cb2a7bceceaf4058f667c0d5e8fd1a348c36540d9dcb /org/eclipse/jdt/org.eclipse.jdt.core/3.10.0.v20131029-1755/org.eclipse.jdt.core-3.10.0.v20131029-1755.pom
|
||||||
2082ffb0bb8f276ca164a6363e394f902163a81b7df44ede13aed33d84fdf27e /org/eclipse/jdt/org.eclipse.jdt.core/3.12.0.v20160315-2126/org.eclipse.jdt.core-3.12.0.v20160315-2126.jar
|
2082ffb0bb8f276ca164a6363e394f902163a81b7df44ede13aed33d84fdf27e /org/eclipse/jdt/org.eclipse.jdt.core/3.12.0.v20160315-2126/org.eclipse.jdt.core-3.12.0.v20160315-2126.jar
|
||||||
ec467beffac7ffa86b5687a0935b8d3540e8795c9bc0c0d326a1c24cb9be7fe8 /org/eclipse/jdt/org.eclipse.jdt.core/3.12.0.v20160315-2126/org.eclipse.jdt.core-3.12.0.v20160315-2126.pom
|
ec467beffac7ffa86b5687a0935b8d3540e8795c9bc0c0d326a1c24cb9be7fe8 /org/eclipse/jdt/org.eclipse.jdt.core/3.12.0.v20160315-2126/org.eclipse.jdt.core-3.12.0.v20160315-2126.pom
|
||||||
d6aba7a1569952e082630de6907f460f476c20d97032cb9f7e4f3e14ddb928e7 /org/eclipse/jetty/jetty-parent/14/jetty-parent-14.pom
|
d6aba7a1569952e082630de6907f460f476c20d97032cb9f7e4f3e14ddb928e7 /org/eclipse/jetty/jetty-parent/14/jetty-parent-14.pom
|
||||||
|
cf65a484e0626d6b79cc40daa820459d893ba6945cbed119859be4db0a07c1fa /org/eclipse/jgit/org.eclipse.jgit/3.2.0.201312181205-r/org.eclipse.jgit-3.2.0.201312181205-r.jar
|
||||||
|
bfe5eb76e637e740e7769f6e081c1c2815f0272f76b93b9bad0b6e686f5a9030 /org/eclipse/jgit/org.eclipse.jgit/3.2.0.201312181205-r/org.eclipse.jgit-3.2.0.201312181205-r.pom
|
||||||
|
0a6f74d2b3a411b785e305ae9678cac377aa2352815a085e4b980d5ba4323f29 /org/eclipse/jgit/org.eclipse.jgit-parent/3.2.0.201312181205-r/org.eclipse.jgit-parent-3.2.0.201312181205-r.pom
|
||||||
fa1d59411d4d2667d8f15638af7c0ac44539234c0982c27a2b65ba06c32a0b3e /org/eclipse/osgi/3.10.0-v20140606-1445/osgi-3.10.0-v20140606-1445.jar
|
fa1d59411d4d2667d8f15638af7c0ac44539234c0982c27a2b65ba06c32a0b3e /org/eclipse/osgi/3.10.0-v20140606-1445/osgi-3.10.0-v20140606-1445.jar
|
||||||
1e10819cdb1fe55d44ac94d37f3b1030275199979a73d04b7b53e2d6000d5d2e /org/eclipse/osgi/3.10.0-v20140606-1445/osgi-3.10.0-v20140606-1445.pom
|
1e10819cdb1fe55d44ac94d37f3b1030275199979a73d04b7b53e2d6000d5d2e /org/eclipse/osgi/3.10.0-v20140606-1445/osgi-3.10.0-v20140606-1445.pom
|
||||||
bddf4d130cb65fdfc1df7df1febde313fc2ff1ac83c8574ff97befd6c515cc30 /org/eclipse/osgi/3.9.1-v20130814-1242/osgi-3.9.1-v20130814-1242.pom
|
bddf4d130cb65fdfc1df7df1febde313fc2ff1ac83c8574ff97befd6c515cc30 /org/eclipse/osgi/3.9.1-v20130814-1242/osgi-3.9.1-v20130814-1242.pom
|
||||||
@@ -648,8 +679,11 @@ cd1a673205be12880e73c9c11234d809a901c024a256f4f4c7ae59b0a7aecc75 /org/scala-lang
|
|||||||
abe89207b0bfcbcf164c820cbba2c962ab5e9f3a0d0f37d81bde4f6c293a874b /org/scala-lang/scala-compiler/2.11.1/scala-compiler-2.11.1.pom
|
abe89207b0bfcbcf164c820cbba2c962ab5e9f3a0d0f37d81bde4f6c293a874b /org/scala-lang/scala-compiler/2.11.1/scala-compiler-2.11.1.pom
|
||||||
088bcb80f71b6e6a2a31d2fe7288c1fd64f19663ce281b924cdfab3fb105f4f3 /org/scala-lang/scala-library/2.11.1/scala-library-2.11.1.jar
|
088bcb80f71b6e6a2a31d2fe7288c1fd64f19663ce281b924cdfab3fb105f4f3 /org/scala-lang/scala-library/2.11.1/scala-library-2.11.1.jar
|
||||||
3268a48dc36c664e7f4bd5d88b366bf098a13f7b6e8b87611e3a4413b72860d4 /org/scala-lang/scala-library/2.11.1/scala-library-2.11.1.pom
|
3268a48dc36c664e7f4bd5d88b366bf098a13f7b6e8b87611e3a4413b72860d4 /org/scala-lang/scala-library/2.11.1/scala-library-2.11.1.pom
|
||||||
|
19495ce701fd9ba3c499c137e3ad5364acee8f87a01ef99e912f995a23fd4cb1 /org/scala-lang/scala-parser-combinators_2.11/1.0.1/scala-parser-combinators_2.11-1.0.1.jar
|
||||||
41938d1e89670979dd783102777a8b879999f4fb00a5b811b51c105b02a9d4f8 /org/scala-lang/scala-reflect/2.11.1/scala-reflect-2.11.1.jar
|
41938d1e89670979dd783102777a8b879999f4fb00a5b811b51c105b02a9d4f8 /org/scala-lang/scala-reflect/2.11.1/scala-reflect-2.11.1.jar
|
||||||
8b58df7e9e5f2f4f7d2f0dc24353f356abe965337e48504cec36a344e6294757 /org/scala-lang/scala-reflect/2.11.1/scala-reflect-2.11.1.pom
|
8b58df7e9e5f2f4f7d2f0dc24353f356abe965337e48504cec36a344e6294757 /org/scala-lang/scala-reflect/2.11.1/scala-reflect-2.11.1.pom
|
||||||
|
4a7c757d4d87dd37382bd777ad611b5875748aef148277cf25bb39eebb496d07 /org/scala-lang/scala-swing_2.11/1.0.1/scala-swing_2.11-1.0.1.jar
|
||||||
|
6c3338a4062c13dc2ce61630d9854d361a81656a4050e5080302f500dd4a8832 /org/scala-lang/scala-xml_2.11/1.0.2/scala-xml_2.11-1.0.2.jar
|
||||||
69980c038ca1b131926561591617d9c25fabfc7b29828af91597ca8570cf35fe /org/slf4j/slf4j-api/1.7.7/slf4j-api-1.7.7.jar
|
69980c038ca1b131926561591617d9c25fabfc7b29828af91597ca8570cf35fe /org/slf4j/slf4j-api/1.7.7/slf4j-api-1.7.7.jar
|
||||||
353904a7a6c28304d0dcac80fad30c48cd898f6db03b93f05ad6c90dd42d98ad /org/slf4j/slf4j-api/1.7.7/slf4j-api-1.7.7.pom
|
353904a7a6c28304d0dcac80fad30c48cd898f6db03b93f05ad6c90dd42d98ad /org/slf4j/slf4j-api/1.7.7/slf4j-api-1.7.7.pom
|
||||||
1dffae3ce768d0547e261c96898cf5d9d194bffd5600f597c9751cc6a73d33d4 /org/slf4j/slf4j-parent/1.7.7/slf4j-parent-1.7.7.pom
|
1dffae3ce768d0547e261c96898cf5d9d194bffd5600f597c9751cc6a73d33d4 /org/slf4j/slf4j-parent/1.7.7/slf4j-parent-1.7.7.pom
|
||||||
@@ -668,6 +702,7 @@ c14fb9c32b59cc03251f609416db7c0cff01f811edcccb4f6a865d6e7046bd0b /org/sonatype/f
|
|||||||
e56188aa8ce51278006aa90bc7e0f304a81e2f1219f462e7d21f262535cd2795 /org/sonatype/forge/forge-parent/5/forge-parent-5.pom
|
e56188aa8ce51278006aa90bc7e0f304a81e2f1219f462e7d21f262535cd2795 /org/sonatype/forge/forge-parent/5/forge-parent-5.pom
|
||||||
9c5f7cd5226ac8c3798cb1f800c031f7dedc1606dc50dc29567877c8224459a7 /org/sonatype/forge/forge-parent/6/forge-parent-6.pom
|
9c5f7cd5226ac8c3798cb1f800c031f7dedc1606dc50dc29567877c8224459a7 /org/sonatype/forge/forge-parent/6/forge-parent-6.pom
|
||||||
1678d4120a585d8a630131aeec4c524d928398583b7eab616ee7d5a87f520d3d /org/sonatype/oss/oss-parent/5/oss-parent-5.pom
|
1678d4120a585d8a630131aeec4c524d928398583b7eab616ee7d5a87f520d3d /org/sonatype/oss/oss-parent/5/oss-parent-5.pom
|
||||||
|
b4306d13e8f5392458a1b30866f1cff161b3d2e6999a88d059eea3932c8a8499 /org/sonatype/oss/oss-parent/6/oss-parent-6.pom
|
||||||
b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 /org/sonatype/oss/oss-parent/7/oss-parent-7.pom
|
b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 /org/sonatype/oss/oss-parent/7/oss-parent-7.pom
|
||||||
fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a /org/sonatype/oss/oss-parent/9/oss-parent-9.pom
|
fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a /org/sonatype/oss/oss-parent/9/oss-parent-9.pom
|
||||||
5a15fdba22669e0fdd06e10dcce6320879e1f7398fbc910cd0677b50672a78c4 /org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar
|
5a15fdba22669e0fdd06e10dcce6320879e1f7398fbc910cd0677b50672a78c4 /org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar
|
||||||
@@ -712,11 +747,17 @@ d1968436fc216c901fb9b82c7e878b50fd1d30091676da95b2edd3a9c0ccf92e /stax/stax-api/
|
|||||||
87b13ae136a2bb9299271a0dfe8c351f76661b654ed8fde035c2cabb198cf259 /stax/stax-api/1.0.1/stax-api-1.0.1.pom
|
87b13ae136a2bb9299271a0dfe8c351f76661b654ed8fde035c2cabb198cf259 /stax/stax-api/1.0.1/stax-api-1.0.1.pom
|
||||||
ad68a86cfd0255a2bc0525ce11ec49640caea7e34ff91eb89c3193dcccd77f05 /trove/trove/1.0.2/trove-1.0.2.jar
|
ad68a86cfd0255a2bc0525ce11ec49640caea7e34ff91eb89c3193dcccd77f05 /trove/trove/1.0.2/trove-1.0.2.jar
|
||||||
83f2682bd3ded1fe417b7e98e7ac86510cd747378eae7e3a5d1d35c7c7f0d2ea /trove/trove/1.0.2/trove-1.0.2.pom
|
83f2682bd3ded1fe417b7e98e7ac86510cd747378eae7e3a5d1d35c7c7f0d2ea /trove/trove/1.0.2/trove-1.0.2.pom
|
||||||
|
f921abc9c792f594f7fc6fc06b4a7ea330b646ea5ed3785e3589f90b16b2aad1 /tv/twitch/twitch/5.16/twitch-5.16.jar
|
||||||
|
53926731bc48ebe3e0624f551aadf8fd7b2b2da22e47271fc7db67fa6679c871 /tv/twitch/twitch/5.16/twitch-5.16.pom
|
||||||
3b90f9f7ad968b9588482e3a09b6e7d0d81c6cf7c214c5cecd8120e3ee509ae9 /tv/twitch/twitch/6.5/twitch-6.5.jar
|
3b90f9f7ad968b9588482e3a09b6e7d0d81c6cf7c214c5cecd8120e3ee509ae9 /tv/twitch/twitch/6.5/twitch-6.5.jar
|
||||||
56820ae80518871ff0af04dbfa54e311f6fa54de922d201f71bd2d3f210e94ba /tv/twitch/twitch/6.5/twitch-6.5.pom
|
56820ae80518871ff0af04dbfa54e311f6fa54de922d201f71bd2d3f210e94ba /tv/twitch/twitch/6.5/twitch-6.5.pom
|
||||||
0825d6081eef7e57434cd15525d6c1e7bc5d590e08eaea5b7516820031978af9 /tv/twitch/twitch-external-platform/4.5/twitch-external-platform-4.5-natives-windows-32.jar
|
0825d6081eef7e57434cd15525d6c1e7bc5d590e08eaea5b7516820031978af9 /tv/twitch/twitch-external-platform/4.5/twitch-external-platform-4.5-natives-windows-32.jar
|
||||||
6428eb438f53afc563d58c7f2a563ca9fcaae80db3520af744de5e5db1c9df6a /tv/twitch/twitch-external-platform/4.5/twitch-external-platform-4.5-natives-windows-64.jar
|
6428eb438f53afc563d58c7f2a563ca9fcaae80db3520af744de5e5db1c9df6a /tv/twitch/twitch-external-platform/4.5/twitch-external-platform-4.5-natives-windows-64.jar
|
||||||
5ac03ac36144e4aeeb57b8ccc968b1ed75ae4b9ed4b094f47cb2b7b64c23a67d /tv/twitch/twitch-external-platform/4.5/twitch-external-platform-4.5.pom
|
5ac03ac36144e4aeeb57b8ccc968b1ed75ae4b9ed4b094f47cb2b7b64c23a67d /tv/twitch/twitch-external-platform/4.5/twitch-external-platform-4.5.pom
|
||||||
|
8e91fe7ea60f5b584c9d4e3746e89b69c9bbcd868e015813530ecf12b3d25aeb /tv/twitch/twitch-platform/5.16/twitch-platform-5.16-natives-osx.jar
|
||||||
|
0e3854b1bfada06203eef47010ee80193054ef34192cd8cd5d705edb8b3b46a1 /tv/twitch/twitch-platform/5.16/twitch-platform-5.16-natives-windows-32.jar
|
||||||
|
e4857d9ede9e94a75642cfbd4f9ca45981c76de49842716bea7e4081c2ba3245 /tv/twitch/twitch-platform/5.16/twitch-platform-5.16-natives-windows-64.jar
|
||||||
|
90f52e42d4597f78250cad82ca28df2d2443298c97a9e88cf0a88c0b3ac13ff2 /tv/twitch/twitch-platform/5.16/twitch-platform-5.16.pom
|
||||||
4005b7d20bc7e8c37cb0fd94bb7c44b5a6373846f3cb59e7a0095f6ebdf3e4f3 /tv/twitch/twitch-platform/6.5/twitch-platform-6.5-natives-osx.jar
|
4005b7d20bc7e8c37cb0fd94bb7c44b5a6373846f3cb59e7a0095f6ebdf3e4f3 /tv/twitch/twitch-platform/6.5/twitch-platform-6.5-natives-osx.jar
|
||||||
8315b4943f4e1356c34b213d4f309784d5e36cbded1fb37c49efcc7d22c909cb /tv/twitch/twitch-platform/6.5/twitch-platform-6.5-natives-windows-32.jar
|
8315b4943f4e1356c34b213d4f309784d5e36cbded1fb37c49efcc7d22c909cb /tv/twitch/twitch-platform/6.5/twitch-platform-6.5-natives-windows-32.jar
|
||||||
75337e7362e489a6f8c9712aeced9e131e82a3ce851cafbd4d03fda284cc7116 /tv/twitch/twitch-platform/6.5/twitch-platform-6.5-natives-windows-64.jar
|
75337e7362e489a6f8c9712aeced9e131e82a3ce851cafbd4d03fda284cc7116 /tv/twitch/twitch-platform/6.5/twitch-platform-6.5-natives-windows-64.jar
|
||||||
|
|||||||
@@ -26,11 +26,23 @@ def setupDependencySubstitution = { Configuration configuration ->
|
|||||||
// FG 2.1 works for MC 1.8 as well, as long as only CI builds are performed (fails when applying source patches)
|
// FG 2.1 works for MC 1.8 as well, as long as only CI builds are performed (fails when applying source patches)
|
||||||
dep.useTarget 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT'
|
dep.useTarget 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT'
|
||||||
}
|
}
|
||||||
if (req.group == 'de.oceanlabs.mcp' && req.name == 'mcinjector' && req.version == '3.4-SNAPSHOT') {
|
if (req.group == 'de.oceanlabs.mcp' && req.name == 'mcinjector') {
|
||||||
dep.useTarget 'com.github.ModCoderPack:MCInjector:7258466'
|
switch (req.version) {
|
||||||
|
case '3.2-SNAPSHOT':
|
||||||
|
dep.useTarget 'com.github.ModCoderPack:MCInjector:05aa80e'
|
||||||
|
break
|
||||||
|
case '3.4-SNAPSHOT':
|
||||||
|
dep.useTarget 'com.github.ModCoderPack:MCInjector:7258466'
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (req.group == 'net.minecraftforge.srg2source' && req.name == 'Srg2Source') {
|
if (req.group == 'net.minecraftforge.srg2source' && req.name == 'Srg2Source') {
|
||||||
switch (req.version) {
|
switch (req.version) {
|
||||||
|
case '3.2-SNAPSHOT':
|
||||||
|
/* Fails to build on jitpack because of broken javadocs
|
||||||
|
dep.useTarget 'com.github.MinecraftForge:Srg2Source:95b5927'
|
||||||
|
*/
|
||||||
|
break
|
||||||
case '3.3-SNAPSHOT':
|
case '3.3-SNAPSHOT':
|
||||||
// Note: 3.3-SNAPSHOT is actually 5f11e29 but that doesn't build due to broken javadoc
|
// Note: 3.3-SNAPSHOT is actually 5f11e29 but that doesn't build due to broken javadoc
|
||||||
dep.useTarget 'com.github.MinecraftForge:Srg2Source:dcad1a6'
|
dep.useTarget 'com.github.MinecraftForge:Srg2Source:dcad1a6'
|
||||||
@@ -95,11 +107,19 @@ allprojects {
|
|||||||
configurations.all setupDependencySubstitution
|
configurations.all setupDependencySubstitution
|
||||||
|
|
||||||
project.tasks.all { task ->
|
project.tasks.all { task ->
|
||||||
if (task.name == 'reobfJar') {
|
if (task.name == 'reobfJar' && task.metaClass.respondsTo(task, 'getJar')) {
|
||||||
task.doLast {
|
task.doLast {
|
||||||
println 'Manually repacking archive after reobfJar task'
|
println 'Manually repacking archive after reobfJar task'
|
||||||
project.plugins.findPlugin(de.johni0702.gradle.ReproducibleBuildsPlugin.class).stripJar(task.getJar())
|
project.plugins.findPlugin(de.johni0702.gradle.ReproducibleBuildsPlugin.class).stripJar(task.getJar())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (task.name == 'reobf') {
|
||||||
|
task.doLast {
|
||||||
|
println 'Manually repacking archive(s) after reobf task'
|
||||||
|
task.outputs.files.each { file ->
|
||||||
|
project.plugins.findPlugin(de.johni0702.gradle.ReproducibleBuildsPlugin.class).stripJar(file)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
From bf77ac2f526b90bd0c04a2aca7e8d9a1bc90d014 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonas Herzig <me@johni0702.de>
|
||||||
|
Date: Thu, 8 Mar 2018 17:17:32 +0100
|
||||||
|
Subject: [PATCH] Fix build for newer gradle versions
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/build.gradle b/build.gradle
|
||||||
|
index 5e61544..737ce9e 100644
|
||||||
|
--- a/build.gradle
|
||||||
|
+++ b/build.gradle
|
||||||
|
@@ -114,7 +114,7 @@ artifacts {
|
||||||
|
}
|
||||||
|
|
||||||
|
//These should add a compile time only dependancies to eclipse, ide, and javac, but NOT to the generated POM on maven.
|
||||||
|
-sourceSets.main.compileClasspath += [ configurations.compileOnly ]
|
||||||
|
+sourceSets.main.compileClasspath += configurations.compileOnly
|
||||||
|
idea.module.scopes.PROVIDED.plus += [ configurations.compileOnly ]
|
||||||
|
eclipse.classpath.plusConfigurations += [ configurations.compileOnly ]
|
||||||
|
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
From f9056380f0e5955817df282c2ac1c8e60c9fedc2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonas Herzig <me@johni0702.de>
|
||||||
|
Date: Thu, 8 Mar 2018 17:21:53 +0100
|
||||||
|
Subject: [PATCH] Fix compilation with ECJ
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/build.gradle b/build.gradle
|
||||||
|
index 737ce9e..75c2b62 100644
|
||||||
|
--- a/build.gradle
|
||||||
|
+++ b/build.gradle
|
||||||
|
@@ -90,7 +90,7 @@ dependencies {
|
||||||
|
|
||||||
|
compileJava {
|
||||||
|
options.deprecation = true
|
||||||
|
- options.compilerArgs += ["-Werror"]
|
||||||
|
+ //options.compilerArgs += ["-Werror"]
|
||||||
|
//options.compilerArgs += ["-Werror", "-Xlint:unchecked"]
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
||||||
@@ -0,0 +1,318 @@
|
|||||||
|
From 76ef837020b1d7aa826a01bd2d3a8cdc0704a040 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonas Herzig <me@johni0702.de>
|
||||||
|
Date: Thu, 8 Mar 2018 17:31:19 +0100
|
||||||
|
Subject: [PATCH] Fix compilation for Gradle 3
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraftforge/gradle/ZipFileTree.java b/src/main/java/net/minecraftforge/gradle/ZipFileTree.java
|
||||||
|
deleted file mode 100644
|
||||||
|
index c3ab7e3..0000000
|
||||||
|
--- a/src/main/java/net/minecraftforge/gradle/ZipFileTree.java
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,267 +0,0 @@
|
||||||
|
-/*
|
||||||
|
- * Copyright 2010 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
|
||||||
|
- *
|
||||||
|
- * http://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.
|
||||||
|
- */
|
||||||
|
-// Modified by LexManos 10/23/2013 to remove FileSystemMirroringFileTree
|
||||||
|
-package net.minecraftforge.gradle;
|
||||||
|
-
|
||||||
|
-import java.io.File;
|
||||||
|
-import java.io.FileOutputStream;
|
||||||
|
-import java.io.IOException;
|
||||||
|
-import java.io.InputStream;
|
||||||
|
-import java.io.OutputStream;
|
||||||
|
-import java.util.Enumeration;
|
||||||
|
-import java.util.Iterator;
|
||||||
|
-import java.util.Map;
|
||||||
|
-import java.util.TreeMap;
|
||||||
|
-import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
-import java.util.zip.ZipEntry;
|
||||||
|
-import java.util.zip.ZipFile;
|
||||||
|
-
|
||||||
|
-import org.apache.commons.io.IOUtils;
|
||||||
|
-import org.gradle.api.GradleException;
|
||||||
|
-import org.gradle.api.InvalidUserDataException;
|
||||||
|
-import org.gradle.api.UncheckedIOException;
|
||||||
|
-import org.gradle.api.file.FileVisitDetails;
|
||||||
|
-import org.gradle.api.file.FileVisitor;
|
||||||
|
-import org.gradle.api.file.RelativePath;
|
||||||
|
-import org.gradle.api.internal.file.collections.MinimalFileTree;
|
||||||
|
-import org.gradle.util.DeprecationLogger;
|
||||||
|
-import org.gradle.util.GFileUtils;
|
||||||
|
-
|
||||||
|
-public class ZipFileTree implements MinimalFileTree
|
||||||
|
-{
|
||||||
|
- private final File zipFile;
|
||||||
|
-
|
||||||
|
- public ZipFileTree(File zipFile)
|
||||||
|
- {
|
||||||
|
- this.zipFile = zipFile;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public String getDisplayName()
|
||||||
|
- {
|
||||||
|
- return String.format("ZIP '%s'", zipFile);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public void visit(FileVisitor visitor)
|
||||||
|
- {
|
||||||
|
- if (!zipFile.exists())
|
||||||
|
- {
|
||||||
|
- DeprecationLogger.nagUserOfDeprecatedBehaviour(
|
||||||
|
- String.format("The specified zip file %s does not exist and will be silently ignored", getDisplayName())
|
||||||
|
- );
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
- if (!zipFile.isFile())
|
||||||
|
- {
|
||||||
|
- throw new InvalidUserDataException(String.format("Cannot expand %s as it is not a file.", getDisplayName()));
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- AtomicBoolean stopFlag = new AtomicBoolean();
|
||||||
|
-
|
||||||
|
- try
|
||||||
|
- {
|
||||||
|
- ZipFile zip = new ZipFile(zipFile);
|
||||||
|
- try
|
||||||
|
- {
|
||||||
|
- // The iteration order of zip.getEntries() is based on the hash of the zip entry. This isn't much use
|
||||||
|
- // to us. So, collect the entries in a map and iterate over them in alphabetical order.
|
||||||
|
- Map<String, ZipEntry> entriesByName = new TreeMap<String, ZipEntry>();
|
||||||
|
- Enumeration<? extends ZipEntry> entries = zip.entries();
|
||||||
|
- while (entries.hasMoreElements())
|
||||||
|
- {
|
||||||
|
- ZipEntry entry = (ZipEntry) entries.nextElement();
|
||||||
|
- entriesByName.put(entry.getName(), entry);
|
||||||
|
- }
|
||||||
|
- Iterator<ZipEntry> sortedEntries = entriesByName.values().iterator();
|
||||||
|
- while (!stopFlag.get() && sortedEntries.hasNext())
|
||||||
|
- {
|
||||||
|
- ZipEntry entry = sortedEntries.next();
|
||||||
|
- if (entry.isDirectory())
|
||||||
|
- {
|
||||||
|
- visitor.visitDir(new DetailsImpl(entry, zip, stopFlag));
|
||||||
|
- }
|
||||||
|
- else
|
||||||
|
- {
|
||||||
|
- visitor.visitFile(new DetailsImpl(entry, zip, stopFlag));
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- finally
|
||||||
|
- {
|
||||||
|
- zip.close();
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- catch (Exception e)
|
||||||
|
- {
|
||||||
|
- throw new GradleException(String.format("Could not expand %s.", getDisplayName()), e);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- private class DetailsImpl implements FileVisitDetails
|
||||||
|
- {
|
||||||
|
- private final ZipEntry entry;
|
||||||
|
- private final ZipFile zip;
|
||||||
|
- private final AtomicBoolean stopFlag;
|
||||||
|
- private File file;
|
||||||
|
-
|
||||||
|
- public DetailsImpl(ZipEntry entry, ZipFile zip, AtomicBoolean stopFlag)
|
||||||
|
- {
|
||||||
|
- this.entry = entry;
|
||||||
|
- this.zip = zip;
|
||||||
|
- this.stopFlag = stopFlag;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public String getDisplayName()
|
||||||
|
- {
|
||||||
|
- return String.format("zip entry %s!%s", zipFile, entry.getName());
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public void stopVisiting()
|
||||||
|
- {
|
||||||
|
- stopFlag.set(true);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /**
|
||||||
|
- * Changed this to return a broken value! Be warned! Will not be a valid file, do not read it.
|
||||||
|
- * Standard Jar/Zip tasks don't care about this, even though they call it.
|
||||||
|
- */
|
||||||
|
- public File getFile()
|
||||||
|
- {
|
||||||
|
- if (file == null)
|
||||||
|
- {
|
||||||
|
- file = new File(entry.getName());
|
||||||
|
- //copyTo(file);
|
||||||
|
- }
|
||||||
|
- return file;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public long getLastModified()
|
||||||
|
- {
|
||||||
|
- return entry.getTime();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public boolean isDirectory()
|
||||||
|
- {
|
||||||
|
- return entry.isDirectory();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public long getSize()
|
||||||
|
- {
|
||||||
|
- return entry.getSize();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public InputStream open()
|
||||||
|
- {
|
||||||
|
- try
|
||||||
|
- {
|
||||||
|
- return zip.getInputStream(entry);
|
||||||
|
- }
|
||||||
|
- catch (IOException e)
|
||||||
|
- {
|
||||||
|
- throw new UncheckedIOException(e);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public RelativePath getRelativePath()
|
||||||
|
- {
|
||||||
|
- return new RelativePath(!entry.isDirectory(), entry.getName().split("/"));
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- // Stuff below this line was --------------------------------------------------
|
||||||
|
- // Stolen from Gradle's org.gradle.api.internal.file.AbstractFileTreeElement
|
||||||
|
-
|
||||||
|
- public String toString()
|
||||||
|
- {
|
||||||
|
- return getDisplayName();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public String getName()
|
||||||
|
- {
|
||||||
|
- return getRelativePath().getLastName();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public String getPath()
|
||||||
|
- {
|
||||||
|
- return getRelativePath().getPathString();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public void copyTo(OutputStream outstr)
|
||||||
|
- {
|
||||||
|
- try
|
||||||
|
- {
|
||||||
|
- InputStream inputStream = open();
|
||||||
|
- try
|
||||||
|
- {
|
||||||
|
- IOUtils.copyLarge(inputStream, outstr);
|
||||||
|
- }
|
||||||
|
- finally
|
||||||
|
- {
|
||||||
|
- inputStream.close();
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- catch (IOException e)
|
||||||
|
- {
|
||||||
|
- throw new UncheckedIOException(e);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public boolean copyTo(File target)
|
||||||
|
- {
|
||||||
|
- validateTimeStamps();
|
||||||
|
- try
|
||||||
|
- {
|
||||||
|
- if (isDirectory())
|
||||||
|
- {
|
||||||
|
- GFileUtils.mkdirs(target);
|
||||||
|
- }
|
||||||
|
- else
|
||||||
|
- {
|
||||||
|
- GFileUtils.mkdirs(target.getParentFile());
|
||||||
|
- copyFile(target);
|
||||||
|
- }
|
||||||
|
- return true;
|
||||||
|
- }
|
||||||
|
- catch (Exception e)
|
||||||
|
- {
|
||||||
|
- throw new GradleException(String.format("Could not copy %s to '%s'.", new Object[] { getDisplayName(), target }), e);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- private void validateTimeStamps()
|
||||||
|
- {
|
||||||
|
- long lastModified = getLastModified();
|
||||||
|
- if (lastModified < 0L)
|
||||||
|
- throw new GradleException(String.format("Invalid Timestamp %s for '%s'.", new Object[] { Long.valueOf(lastModified), getDisplayName() }));
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- private void copyFile(File target) throws IOException
|
||||||
|
- {
|
||||||
|
- FileOutputStream outputStream = new FileOutputStream(target);
|
||||||
|
- try
|
||||||
|
- {
|
||||||
|
- copyTo(outputStream);
|
||||||
|
- }
|
||||||
|
- finally
|
||||||
|
- {
|
||||||
|
- outputStream.close();
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public int getMode()
|
||||||
|
- {
|
||||||
|
- return ((isDirectory()) ? 493 : 420);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
diff --git a/src/main/java/net/minecraftforge/gradle/delayed/DelayedFileTree.java b/src/main/java/net/minecraftforge/gradle/delayed/DelayedFileTree.java
|
||||||
|
index 5ecccae..aeed0a3 100644
|
||||||
|
--- a/src/main/java/net/minecraftforge/gradle/delayed/DelayedFileTree.java
|
||||||
|
+++ b/src/main/java/net/minecraftforge/gradle/delayed/DelayedFileTree.java
|
||||||
|
@@ -1,10 +1,7 @@
|
||||||
|
package net.minecraftforge.gradle.delayed;
|
||||||
|
|
||||||
|
-import net.minecraftforge.gradle.ZipFileTree;
|
||||||
|
-
|
||||||
|
import org.gradle.api.Project;
|
||||||
|
import org.gradle.api.file.FileTree;
|
||||||
|
-import org.gradle.api.internal.file.collections.FileTreeAdapter;
|
||||||
|
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public class DelayedFileTree extends DelayedBase<FileTree>
|
||||||
|
@@ -40,7 +37,7 @@ public class DelayedFileTree extends DelayedBase<FileTree>
|
||||||
|
{
|
||||||
|
if (zipTree)
|
||||||
|
//resolved = project.zipTree(DelayedString.resolve(pattern, project, resolvers));
|
||||||
|
- return new FileTreeAdapter(new ZipFileTree(project.file(DelayedBase.resolve(pattern, project, resolvers))));
|
||||||
|
+ return project.zipTree(DelayedBase.resolve(pattern, project, resolvers));
|
||||||
|
else
|
||||||
|
return project.fileTree(DelayedBase.resolve(pattern, project, resolvers));
|
||||||
|
}
|
||||||
|
diff --git a/src/main/java/net/minecraftforge/gradle/user/UserBasePlugin.java b/src/main/java/net/minecraftforge/gradle/user/UserBasePlugin.java
|
||||||
|
index adbaa27..4d39d52 100644
|
||||||
|
--- a/src/main/java/net/minecraftforge/gradle/user/UserBasePlugin.java
|
||||||
|
+++ b/src/main/java/net/minecraftforge/gradle/user/UserBasePlugin.java
|
||||||
|
@@ -1129,7 +1129,6 @@ public abstract class UserBasePlugin<T extends UserExtension> extends BasePlugin
|
||||||
|
@Override
|
||||||
|
public void execute(Object arg0)
|
||||||
|
{
|
||||||
|
- ((ScalaCompile) arg0).getScalaCompileOptions().setUseAnt(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
From 58e8ce507b599b45479aa0d6d823a4e285aecb58 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonas Herzig <me@johni0702.de>
|
||||||
|
Date: Thu, 8 Mar 2018 19:38:05 +0100
|
||||||
|
Subject: [PATCH] Remove redundant -sourcepath compiler argument
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraftforge/gradle/user/UserBasePlugin.java b/src/main/java/net/minecraftforge/gradle/user/UserBasePlugin.java
|
||||||
|
index 4d39d52..f2995e9 100644
|
||||||
|
--- a/src/main/java/net/minecraftforge/gradle/user/UserBasePlugin.java
|
||||||
|
+++ b/src/main/java/net/minecraftforge/gradle/user/UserBasePlugin.java
|
||||||
|
@@ -354,17 +354,6 @@ public abstract class UserBasePlugin<T extends UserExtension> extends BasePlugin
|
||||||
|
|
||||||
|
project.getConfigurations().getByName("apiCompile").extendsFrom(project.getConfigurations().getByName("compile"));
|
||||||
|
project.getConfigurations().getByName("testCompile").extendsFrom(project.getConfigurations().getByName("apiCompile"));
|
||||||
|
-
|
||||||
|
- // set compile not to take from libs
|
||||||
|
- JavaCompile compileTask = ((JavaCompile)project.getTasks().getByName(main.getCompileJavaTaskName()));
|
||||||
|
- List<String> args = compileTask.getOptions().getCompilerArgs();
|
||||||
|
- if (args == null || args.isEmpty())
|
||||||
|
- {
|
||||||
|
- args = Lists.newArrayList();
|
||||||
|
- }
|
||||||
|
- args.add("-sourcepath");
|
||||||
|
- args.add(".");
|
||||||
|
- compileTask.getOptions().setCompilerArgs(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readAndApplyJson(File file, String depConfig, String nativeConfig, Logger log)
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
include 'mixin'
|
include 'mixin'
|
||||||
include 'forgeflower'
|
include 'forgeflower'
|
||||||
|
include 'srg2source-3.2'
|
||||||
|
include 'forgegradle-1.2'
|
||||||
include 'forgegradle-2.1'
|
include 'forgegradle-2.1'
|
||||||
include 'forgegradle-2.2'
|
include 'forgegradle-2.2'
|
||||||
include 'forgegradle-2.3'
|
include 'forgegradle-2.3'
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ sha256val () {
|
|||||||
|
|
||||||
# Setup http(s) proxy
|
# Setup http(s) proxy
|
||||||
url="https://github.com/johni0702/proxy-witness"
|
url="https://github.com/johni0702/proxy-witness"
|
||||||
commit="01f5aa9eb6fa14a0adfa832ba33b6f7c68138c26"
|
commit="07e79a999991473489d443b8934ccca547ac7985"
|
||||||
if [ ! -d "deps/proxy-witness" ] || [ "$(git -C "deps/proxy-witness" rev-parse $commit^{commit})" != "$commit" ]; then
|
if [ ! -d "deps/proxy-witness" ] || [ "$(git -C "deps/proxy-witness" rev-parse $commit^{commit})" != "$commit" ]; then
|
||||||
rm -rf "deps/proxy-witness"
|
rm -rf "deps/proxy-witness"
|
||||||
mkdir -p "deps/proxy-witness"
|
mkdir -p "deps/proxy-witness"
|
||||||
@@ -44,11 +44,12 @@ popd # Back to root
|
|||||||
|
|
||||||
./gradlew -Preprod $PROXY_SETTINGS -I gradle/reprod/init.gradle "$@"
|
./gradlew -Preprod $PROXY_SETTINGS -I gradle/reprod/init.gradle "$@"
|
||||||
|
|
||||||
if [ "$SIGNED_JAR" == "1" ]; then
|
if [ "$(git blame -p version.txt | head -n1 | cut -d' ' -f1)" == "$(git rev-parse HEAD)" ]; then
|
||||||
echo "Trying to fetch signature for resulting jar files.."
|
echo "Trying to fetch signature for resulting jar files.."
|
||||||
pushd versions
|
pushd versions
|
||||||
for ver in */; do
|
for ver in */; do
|
||||||
[ "$ver" == "core/" ] && continue
|
[ "$ver" == "core/" ] && continue
|
||||||
|
[ -d "$ver/build/libs" ] || continue
|
||||||
pushd "$ver"
|
pushd "$ver"
|
||||||
# Note: This requires there to be one and only one jar file (ignoring source artifacts)
|
# Note: This requires there to be one and only one jar file (ignoring source artifacts)
|
||||||
jar="build/libs/$(ls build/libs | grep -v sources)"
|
jar="build/libs/$(ls build/libs | grep -v sources)"
|
||||||
|
|||||||
1
gradle/reprod/upstream/forgegradle-1.2
Submodule
1
gradle/reprod/upstream/forgegradle-1.2
Submodule
Submodule gradle/reprod/upstream/forgegradle-1.2 added at ef378b1e84
1
gradle/reprod/upstream/srg2source-3.2
Submodule
1
gradle/reprod/upstream/srg2source-3.2
Submodule
Submodule gradle/reprod/upstream/srg2source-3.2 added at 95b5927e6b
2
jGui
2
jGui
Submodule jGui updated: 88cf678236...097131041b
@@ -1,16 +1,22 @@
|
|||||||
include ':jGui'
|
include ':jGui'
|
||||||
([
|
[
|
||||||
'core',
|
'core',
|
||||||
|
'1.7.10',
|
||||||
'1.8',
|
'1.8',
|
||||||
'1.8.9',
|
'1.8.9',
|
||||||
'1.9.4',
|
'1.9.4',
|
||||||
'1.12'
|
'1.12'
|
||||||
].collect {":jGui:versions:$it"} as String[]).each {
|
].each { version ->
|
||||||
include it
|
include ":jGui:$version"
|
||||||
|
project(":jGui:$version").with {
|
||||||
|
projectDir = file("jGui/versions/$version")
|
||||||
|
buildFileName = '../common.gradle'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def versions = [
|
def versions = [
|
||||||
'core',
|
'core',
|
||||||
|
'1.7.10',
|
||||||
'1.8',
|
'1.8',
|
||||||
'1.8.9',
|
'1.8.9',
|
||||||
'1.9.4',
|
'1.9.4',
|
||||||
@@ -21,6 +27,10 @@ def versions = [
|
|||||||
'1.12.1',
|
'1.12.1',
|
||||||
'1.12.2'
|
'1.12.2'
|
||||||
]
|
]
|
||||||
versions.collect {":versions:$it"}.each {
|
versions.each { version ->
|
||||||
include it
|
include ":$version"
|
||||||
|
project(":$version").with {
|
||||||
|
projectDir = file("versions/$version")
|
||||||
|
buildFileName = '../common.gradle'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,20 @@ package com.replaymod.compat;
|
|||||||
import com.replaymod.compat.bettersprinting.DisableBetterSprinting;
|
import com.replaymod.compat.bettersprinting.DisableBetterSprinting;
|
||||||
import com.replaymod.compat.optifine.DisableFastRender;
|
import com.replaymod.compat.optifine.DisableFastRender;
|
||||||
import com.replaymod.compat.oranges17animations.HideInvisibleEntities;
|
import com.replaymod.compat.oranges17animations.HideInvisibleEntities;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import com.replaymod.compat.shaders.ShaderBeginRender;
|
import com.replaymod.compat.shaders.ShaderBeginRender;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.EventBus;
|
import net.minecraftforge.fml.common.eventhandler.EventBus;
|
||||||
import org.apache.logging.log4j.Logger;
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.Mod;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.EventBus;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
|
||||||
@@ -16,7 +24,9 @@ import static com.replaymod.core.versions.MCVer.*;
|
|||||||
version = "@MOD_VERSION@",
|
version = "@MOD_VERSION@",
|
||||||
acceptedMinecraftVersions = "@MC_VERSION@",
|
acceptedMinecraftVersions = "@MC_VERSION@",
|
||||||
acceptableRemoteVersions = "*",
|
acceptableRemoteVersions = "*",
|
||||||
|
//#if MC>=10800
|
||||||
clientSideOnly = true,
|
clientSideOnly = true,
|
||||||
|
//#endif
|
||||||
useMetadata = true)
|
useMetadata = true)
|
||||||
public class ReplayModCompat {
|
public class ReplayModCompat {
|
||||||
public static final String MOD_ID = "replaymod-compat";
|
public static final String MOD_ID = "replaymod-compat";
|
||||||
@@ -31,7 +41,9 @@ public class ReplayModCompat {
|
|||||||
@Mod.EventHandler
|
@Mod.EventHandler
|
||||||
public void init(FMLInitializationEvent event) {
|
public void init(FMLInitializationEvent event) {
|
||||||
EventBus bus = FML_BUS;
|
EventBus bus = FML_BUS;
|
||||||
|
//#if MC>=10800
|
||||||
bus.register(new ShaderBeginRender());
|
bus.register(new ShaderBeginRender());
|
||||||
|
//#endif
|
||||||
bus.register(new DisableFastRender());
|
bus.register(new DisableFastRender());
|
||||||
bus.register(new HideInvisibleEntities());
|
bus.register(new HideInvisibleEntities());
|
||||||
DisableBetterSprinting.register();
|
DisableBetterSprinting.register();
|
||||||
|
|||||||
@@ -8,13 +8,6 @@ import net.minecraft.entity.Entity;
|
|||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraftforge.client.event.GuiOpenEvent;
|
import net.minecraftforge.client.event.GuiOpenEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fml.common.Loader;
|
|
||||||
import net.minecraftforge.fml.common.ModContainer;
|
|
||||||
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
||||||
import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion;
|
|
||||||
import net.minecraftforge.fml.common.versioning.Restriction;
|
|
||||||
import net.minecraftforge.fml.common.versioning.VersionRange;
|
|
||||||
|
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
@@ -26,10 +19,30 @@ import net.minecraft.world.World;
|
|||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>= 10800
|
||||||
//$$ import net.minecraft.util.BlockPos;
|
//$$ import net.minecraft.util.BlockPos;
|
||||||
|
//#endif
|
||||||
//$$ import net.minecraft.world.IWorldAccess;
|
//$$ import net.minecraft.world.IWorldAccess;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.Loader;
|
||||||
|
import net.minecraftforge.fml.common.ModContainer;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion;
|
||||||
|
import net.minecraftforge.fml.common.versioning.Restriction;
|
||||||
|
import net.minecraftforge.fml.common.versioning.VersionRange;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.Loader;
|
||||||
|
//$$ import cpw.mods.fml.common.ModContainer;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.EventPriority;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.versioning.DefaultArtifactVersion;
|
||||||
|
//$$ import cpw.mods.fml.common.versioning.Restriction;
|
||||||
|
//$$ import cpw.mods.fml.common.versioning.VersionRange;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
import static com.replaymod.compat.ReplayModCompat.LOGGER;
|
import static com.replaymod.compat.ReplayModCompat.LOGGER;
|
||||||
@@ -106,7 +119,11 @@ public class DisableBetterSprinting {
|
|||||||
//#endif
|
//#endif
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
//#if MC>=10800
|
||||||
public void onEntityRemoved(Entity entityIn) {
|
public void onEntityRemoved(Entity entityIn) {
|
||||||
|
//#else
|
||||||
|
//$$ public void onEntityDestroy(Entity entityIn) {
|
||||||
|
//#endif
|
||||||
if (mc.playerController != null && mc.playerController.getClass().getName().equals(CONTROLLER_OVERRIDE_CLASS_NAME)) {
|
if (mc.playerController != null && mc.playerController.getClass().getName().equals(CONTROLLER_OVERRIDE_CLASS_NAME)) {
|
||||||
// Someone has secretly swapped out the player controller and is about to substitute their own player entity.
|
// Someone has secretly swapped out the player controller and is about to substitute their own player entity.
|
||||||
// This is the right time to destroy their plan.
|
// This is the right time to destroy their plan.
|
||||||
@@ -115,12 +132,21 @@ public class DisableBetterSprinting {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public void notifyLightSet(BlockPos pos) {}
|
|
||||||
@Override public void markBlockRangeForRenderUpdate(int x1, int y1, int z1, int x2, int y2, int z2) {}
|
@Override public void markBlockRangeForRenderUpdate(int x1, int y1, int z1, int x2, int y2, int z2) {}
|
||||||
|
//#if MC>=10800
|
||||||
|
@Override public void notifyLightSet(BlockPos pos) {}
|
||||||
@Override public void spawnParticle(int p_180442_1_, boolean p_180442_2_, double p_180442_3_, double p_180442_5_, double p_180442_7_, double p_180442_9_, double p_180442_11_, double p_180442_13_, int... p_180442_15_) {}
|
@Override public void spawnParticle(int p_180442_1_, boolean p_180442_2_, double p_180442_3_, double p_180442_5_, double p_180442_7_, double p_180442_9_, double p_180442_11_, double p_180442_13_, int... p_180442_15_) {}
|
||||||
@Override public void onEntityAdded(Entity entityIn) {}
|
@Override public void onEntityAdded(Entity entityIn) {}
|
||||||
@Override public void broadcastSound(int p_180440_1_, BlockPos p_180440_2_, int p_180440_3_) {}
|
@Override public void broadcastSound(int p_180440_1_, BlockPos p_180440_2_, int p_180440_3_) {}
|
||||||
@Override public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) {}
|
@Override public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) {}
|
||||||
|
//#else
|
||||||
|
//$$ @Override public void markBlockForRenderUpdate(int x, int y, int z) {}
|
||||||
|
//$$ @Override public void spawnParticle(String p_72708_1_, double p_72708_2_, double p_72708_4_, double p_72708_6_, double p_72708_8_, double p_72708_10_, double p_72708_12_) {}
|
||||||
|
//$$ @Override public void onEntityCreate(Entity entityIn) {}
|
||||||
|
//$$ @Override public void broadcastSound(int p_180440_1_, int x, int y, int z, int p_180440_3_) {}
|
||||||
|
//$$ @Override public void destroyBlockPartially(int breakerId, int x, int y, int z, int progress) {}
|
||||||
|
//$$ @Override public void onStaticEntitiesChanged() {}
|
||||||
|
//#endif
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
@Override public void notifyBlockUpdate(World worldIn, BlockPos pos, IBlockState oldState, IBlockState newState, int flags) {}
|
@Override public void notifyBlockUpdate(World worldIn, BlockPos pos, IBlockState oldState, IBlockState newState, int flags) {}
|
||||||
@Override public void playSoundToAllNearExcept(@Nullable EntityPlayer player, SoundEvent soundIn, SoundCategory category, double x, double y, double z, float volume, float pitch) {}
|
@Override public void playSoundToAllNearExcept(@Nullable EntityPlayer player, SoundEvent soundIn, SoundCategory category, double x, double y, double z, float volume, float pitch) {}
|
||||||
@@ -134,14 +160,23 @@ public class DisableBetterSprinting {
|
|||||||
//#endif
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ @Override public void markBlockForUpdate(BlockPos pos) {}
|
//$$ @Override public void markBlockForUpdate(BlockPos pos) {}
|
||||||
|
//$$ @Override public void playRecord(String recordName, BlockPos blockPosIn) {}
|
||||||
|
//#else
|
||||||
|
//$$ @Override public void markBlockForUpdate(int x, int y, int z) {}
|
||||||
|
//$$ @Override public void playRecord(String recordName, int x, int y, int z) {}
|
||||||
|
//#endif
|
||||||
//$$ @Override public void playSound(String soundName, double x, double y, double z, float volume, float pitch) {}
|
//$$ @Override public void playSound(String soundName, double x, double y, double z, float volume, float pitch) {}
|
||||||
//$$ @Override public void playSoundToNearExcept(EntityPlayer except, String soundName, double x, double y, double z, float volume, float pitch) {}
|
//$$ @Override public void playSoundToNearExcept(EntityPlayer except, String soundName, double x, double y, double z, float volume, float pitch) {}
|
||||||
//$$ @Override public void playRecord(String recordName, BlockPos blockPosIn) {}
|
|
||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
//$$ @Override public void playAuxSFX(EntityPlayer p_180439_1_, int p_180439_2_, BlockPos blockPosIn, int p_180439_4_) {}
|
//$$ @Override public void playAuxSFX(EntityPlayer p_180439_1_, int p_180439_2_, BlockPos blockPosIn, int p_180439_4_) {}
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ @Override public void playAusSFX(EntityPlayer p_180439_1_, int p_180439_2_, BlockPos blockPosIn, int p_180439_4_) {}
|
//$$ @Override public void playAusSFX(EntityPlayer p_180439_1_, int p_180439_2_, BlockPos blockPosIn, int p_180439_4_) {}
|
||||||
|
//#else
|
||||||
|
//$$ @Override public void playAuxSFX(EntityPlayer p_72706_1_, int p_72706_2_, int p_72706_3_, int p_72706_4_, int p_72706_5_, int p_72706_6_) {}
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,13 +3,18 @@ package com.replaymod.compat.mapwriter.mixin;
|
|||||||
import com.replaymod.replay.ReplayModReplay;
|
import com.replaymod.replay.ReplayModReplay;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.multiplayer.ServerData;
|
import net.minecraft.client.multiplayer.ServerData;
|
||||||
import net.minecraftforge.fml.common.Loader;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.Loader;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.Loader;
|
||||||
|
//#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Approximately this for <1.12: https://github.com/Vectron/mapwriter/commit/68234520c7a3a0ae8201a085d7e66369900586ac
|
* Approximately this for <1.12: https://github.com/Vectron/mapwriter/commit/68234520c7a3a0ae8201a085d7e66369900586ac
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -2,8 +2,14 @@ package com.replaymod.compat.optifine;
|
|||||||
|
|
||||||
import com.replaymod.render.events.ReplayRenderEvent;
|
import com.replaymod.render.events.ReplayRenderEvent;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.client.FMLClientHandler;
|
import net.minecraftforge.fml.client.FMLClientHandler;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.client.FMLClientHandler;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
public class DisableFastRender {
|
public class DisableFastRender {
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.replaymod.compat.optifine;
|
|||||||
import net.minecraft.client.settings.GameSettings;
|
import net.minecraft.client.settings.GameSettings;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
public class OptifineReflection {
|
public class OptifineReflection {
|
||||||
|
|
||||||
@@ -24,4 +25,14 @@ public class OptifineReflection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void reloadLang() {
|
||||||
|
try {
|
||||||
|
Class.forName("Lang").getDeclaredMethod("resourcesReloaded").invoke(null);
|
||||||
|
} catch (ClassNotFoundException ignore) {
|
||||||
|
// no optifine installed
|
||||||
|
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,16 @@ package com.replaymod.compat.oranges17animations;
|
|||||||
import com.replaymod.replay.camera.CameraEntity;
|
import com.replaymod.replay.camera.CameraEntity;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraftforge.client.event.RenderLivingEvent;
|
import net.minecraftforge.client.event.RenderLivingEvent;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.Loader;
|
import net.minecraftforge.fml.common.Loader;
|
||||||
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.Loader;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.EventPriority;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
//#if MC>=10800
|
||||||
package com.replaymod.compat.shaders;
|
package com.replaymod.compat.shaders;
|
||||||
|
|
||||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||||
@@ -37,3 +38,4 @@ public class ShaderBeginRender {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
//#if MC>=10800
|
||||||
package com.replaymod.compat.shaders;
|
package com.replaymod.compat.shaders;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
@@ -51,3 +52,4 @@ public class ShaderReflection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
//#if MC>=10800
|
||||||
package com.replaymod.compat.shaders.mixin;
|
package com.replaymod.compat.shaders.mixin;
|
||||||
|
|
||||||
import com.replaymod.compat.shaders.ShaderReflection;
|
import com.replaymod.compat.shaders.ShaderReflection;
|
||||||
@@ -26,3 +27,4 @@ public abstract class MixinShaderEntityRenderer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
//#if MC>=10800
|
||||||
package com.replaymod.compat.shaders.mixin;
|
package com.replaymod.compat.shaders.mixin;
|
||||||
|
|
||||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||||
@@ -27,3 +28,4 @@ public abstract class MixinShaderRenderChunk {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
//#if MC>=10800
|
||||||
package com.replaymod.compat.shaders.mixin;
|
package com.replaymod.compat.shaders.mixin;
|
||||||
|
|
||||||
import com.replaymod.compat.shaders.ShaderReflection;
|
import com.replaymod.compat.shaders.ShaderReflection;
|
||||||
@@ -38,3 +39,4 @@ public abstract class MixinShaderRenderGlobal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
//#if MC<=10710
|
||||||
|
//$$ package com.replaymod.compat.shaders.mixin;
|
||||||
|
//$$
|
||||||
|
//$$ import com.replaymod.render.hooks.EntityRendererHandler;
|
||||||
|
//$$ import com.replaymod.replay.ReplayHandler;
|
||||||
|
//$$ import com.replaymod.replay.ReplayModReplay;
|
||||||
|
//$$ import net.minecraft.client.Minecraft;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.Pseudo;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
|
//$$
|
||||||
|
//$$ @Pseudo
|
||||||
|
//$$ @Mixin(targets = "shadersmod/client/Shaders", remap = false)
|
||||||
|
//$$ public abstract class MixinShaders {
|
||||||
|
//$$
|
||||||
|
//$$ @Shadow static Minecraft mc;
|
||||||
|
//$$ @Shadow static long systemTime;
|
||||||
|
//$$ @Shadow static long lastSystemTime;
|
||||||
|
//$$ @Shadow static long diffSystemTime;
|
||||||
|
//$$ @Shadow static int frameCounter;
|
||||||
|
//$$ @Shadow static float frameTime;
|
||||||
|
//$$ @Shadow static float frameTimeCounter;
|
||||||
|
//$$
|
||||||
|
//$$ @Redirect(method = "beginRender", at = @At(value = "INVOKE", target = "Ljava/lang/System;currentTimeMillis()J"))
|
||||||
|
//$$ private static long replayModCompat_currentTimeMillis() {
|
||||||
|
//$$ ReplayHandler replayHandler = ReplayModReplay.instance.getReplayHandler();
|
||||||
|
//$$ if (replayHandler != null) {
|
||||||
|
//$$ systemTime = replayHandler.getReplaySender().currentTimeStamp();
|
||||||
|
//$$
|
||||||
|
//$$ // We need to manipulate all the other previous-frame-time-based variables too
|
||||||
|
//$$
|
||||||
|
//$$ lastSystemTime = 0; // Draw all frames as if they were the first ones
|
||||||
|
//$$ // diffSystemTime will be set to 0 by Shaders
|
||||||
|
//$$ // frameTime will be set to 0 by Shaders
|
||||||
|
//$$ frameTimeCounter = systemTime / 1000f; // will be %= 3600f by Shaders
|
||||||
|
//$$
|
||||||
|
//$$ // Set frameCounter only if rendering is in progress
|
||||||
|
//$$ EntityRendererHandler entityRendererHandler =
|
||||||
|
//$$ ((EntityRendererHandler.IEntityRenderer) mc.entityRenderer).replayModRender_getHandler();
|
||||||
|
//$$ if (entityRendererHandler != null) {
|
||||||
|
//$$ frameCounter = entityRendererHandler.getRenderInfo().getFramesDone();
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ return systemTime;
|
||||||
|
//$$ }
|
||||||
|
//$$ return System.currentTimeMillis();
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
@@ -7,17 +7,27 @@ import net.minecraft.client.settings.KeyBinding;
|
|||||||
import net.minecraft.crash.CrashReport;
|
import net.minecraft.crash.CrashReport;
|
||||||
import net.minecraft.crash.CrashReportCategory;
|
import net.minecraft.crash.CrashReportCategory;
|
||||||
import net.minecraft.util.ReportedException;
|
import net.minecraft.util.ReportedException;
|
||||||
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.InputEvent;
|
import net.minecraftforge.fml.common.gameevent.InputEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||||
import org.lwjgl.input.Keyboard;
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.client.registry.ClientRegistry;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.gameevent.InputEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.gameevent.TickEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
|
||||||
public class KeyBindingRegistry {
|
public class KeyBindingRegistry {
|
||||||
private Map<String, KeyBinding> keyBindings = new HashMap<String, KeyBinding>();
|
private Map<String, KeyBinding> keyBindings = new HashMap<String, KeyBinding>();
|
||||||
private Multimap<KeyBinding, Runnable> keyBindingHandlers = ArrayListMultimap.create();
|
private Multimap<KeyBinding, Runnable> keyBindingHandlers = ArrayListMultimap.create();
|
||||||
@@ -64,7 +74,7 @@ public class KeyBindingRegistry {
|
|||||||
|
|
||||||
public void handleRepeatedKeyBindings() {
|
public void handleRepeatedKeyBindings() {
|
||||||
for (Map.Entry<KeyBinding, Collection<Runnable>> entry : repeatedKeyBindingHandlers.asMap().entrySet()) {
|
for (Map.Entry<KeyBinding, Collection<Runnable>> entry : repeatedKeyBindingHandlers.asMap().entrySet()) {
|
||||||
if (entry.getKey().isKeyDown()) {
|
if (isKeyDown(entry.getKey())) {
|
||||||
invokeKeyBindingHandlers(entry.getKey(), entry.getValue());
|
invokeKeyBindingHandlers(entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,29 @@
|
|||||||
package com.replaymod.core;
|
package com.replaymod.core;
|
||||||
|
|
||||||
import net.minecraftforge.fml.relauncher.CoreModManager;
|
|
||||||
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.spongepowered.asm.launch.MixinBootstrap;
|
import org.spongepowered.asm.launch.MixinBootstrap;
|
||||||
import org.spongepowered.asm.mixin.Mixins;
|
import org.spongepowered.asm.mixin.Mixins;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.relauncher.CoreModManager;
|
||||||
|
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
|
||||||
|
//#else
|
||||||
|
//$$ import com.replaymod.core.asm.GLErrorTransformer;
|
||||||
|
//$$ import com.replaymod.core.asm.GLStateTrackerTransformer;
|
||||||
|
//$$ import cpw.mods.fml.relauncher.CoreModManager;
|
||||||
|
//$$ import cpw.mods.fml.relauncher.IFMLLoadingPlugin;
|
||||||
|
//$$
|
||||||
|
//$$ import java.util.ArrayList;
|
||||||
|
//$$ import java.util.List;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.security.CodeSource;
|
import java.security.CodeSource;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@IFMLLoadingPlugin.TransformerExclusions("com.replaymod.core.asm.")
|
||||||
public class LoadingPlugin implements IFMLLoadingPlugin {
|
public class LoadingPlugin implements IFMLLoadingPlugin {
|
||||||
|
|
||||||
public LoadingPlugin() {
|
public LoadingPlugin() {
|
||||||
@@ -36,6 +48,9 @@ public class LoadingPlugin implements IFMLLoadingPlugin {
|
|||||||
CoreModManager.getIgnoredMods().remove(file.getName());
|
CoreModManager.getIgnoredMods().remove(file.getName());
|
||||||
//#else
|
//#else
|
||||||
//$$ CoreModManager.getLoadedCoremods().remove(file.getName());
|
//$$ CoreModManager.getLoadedCoremods().remove(file.getName());
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ CoreModManager.getReparseableCoremods().add(file.getName());
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
} catch (URISyntaxException e) {
|
} catch (URISyntaxException e) {
|
||||||
@@ -49,8 +64,17 @@ public class LoadingPlugin implements IFMLLoadingPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String[] getASMTransformerClass() {
|
public String[] getASMTransformerClass() {
|
||||||
|
//#if MC>=10800
|
||||||
return new String[]{
|
return new String[]{
|
||||||
};
|
};
|
||||||
|
//#else
|
||||||
|
//$$ List<String> transformers = new ArrayList<>();
|
||||||
|
//$$ if ("true".equals(System.getProperty("replaymod.glerrors", "false"))) {
|
||||||
|
//$$ transformers.add(GLErrorTransformer.class.getName());
|
||||||
|
//$$ }
|
||||||
|
//$$ transformers.add(GLStateTrackerTransformer.class.getName());
|
||||||
|
//$$ return transformers.stream().toArray(String[]::new);
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -12,11 +12,23 @@ import lombok.Getter;
|
|||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.resources.FolderResourcePack;
|
import net.minecraft.client.resources.FolderResourcePack;
|
||||||
import net.minecraft.client.resources.IResourcePack;
|
import net.minecraft.client.resources.IResourcePack;
|
||||||
import net.minecraft.client.settings.GameSettings;
|
|
||||||
import net.minecraft.crash.CrashReport;
|
|
||||||
import net.minecraft.crash.CrashReportCategory;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraftforge.common.config.Configuration;
|
import net.minecraftforge.common.config.Configuration;
|
||||||
|
import org.apache.commons.io.Charsets;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
|
//#if MC>=10904
|
||||||
|
import net.minecraft.util.text.*;
|
||||||
|
//#else
|
||||||
|
//$$ import net.minecraft.util.ChatComponentText;
|
||||||
|
//$$ import net.minecraft.util.ChatComponentTranslation;
|
||||||
|
//$$ import net.minecraft.util.ChatStyle;
|
||||||
|
//$$ import net.minecraft.util.EnumChatFormatting;
|
||||||
|
//$$ import net.minecraft.util.IChatComponent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraft.client.settings.GameSettings;
|
||||||
import net.minecraftforge.fml.client.FMLClientHandler;
|
import net.minecraftforge.fml.client.FMLClientHandler;
|
||||||
import net.minecraftforge.fml.common.Loader;
|
import net.minecraftforge.fml.common.Loader;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
@@ -29,17 +41,21 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
|||||||
import net.minecraftforge.fml.common.eventhandler.EventBus;
|
import net.minecraftforge.fml.common.eventhandler.EventBus;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||||
import org.apache.commons.io.Charsets;
|
|
||||||
import org.apache.commons.io.FileUtils;
|
|
||||||
|
|
||||||
//#if MC>=10904
|
|
||||||
import net.minecraft.util.text.*;
|
|
||||||
//#else
|
//#else
|
||||||
//$$ import net.minecraft.util.ChatComponentText;
|
//$$ import cpw.mods.fml.common.Loader;
|
||||||
//$$ import net.minecraft.util.ChatComponentTranslation;
|
//$$ import cpw.mods.fml.common.Mod;
|
||||||
//$$ import net.minecraft.util.ChatStyle;
|
//$$ import cpw.mods.fml.common.Mod.EventHandler;
|
||||||
//$$ import net.minecraft.util.EnumChatFormatting;
|
//$$ import cpw.mods.fml.common.Mod.Instance;
|
||||||
//$$ import net.minecraft.util.IChatComponent;
|
//$$ import cpw.mods.fml.common.ModContainer;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.EventBus;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.gameevent.TickEvent;
|
||||||
|
//$$ import com.replaymod.replay.InputReplayTimer;
|
||||||
|
//$$
|
||||||
|
//$$ import java.util.ArrayDeque;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
@@ -57,8 +73,10 @@ import static com.replaymod.core.versions.MCVer.*;
|
|||||||
version = "@MOD_VERSION@",
|
version = "@MOD_VERSION@",
|
||||||
acceptedMinecraftVersions = "@MC_VERSION@",
|
acceptedMinecraftVersions = "@MC_VERSION@",
|
||||||
acceptableRemoteVersions = "*",
|
acceptableRemoteVersions = "*",
|
||||||
|
//#if MC>=10800
|
||||||
clientSideOnly = true,
|
clientSideOnly = true,
|
||||||
updateJSON = "https://raw.githubusercontent.com/ReplayMod/ReplayMod/master/versions.json",
|
updateJSON = "https://raw.githubusercontent.com/ReplayMod/ReplayMod/master/versions.json",
|
||||||
|
//#endif
|
||||||
guiFactory = "com.replaymod.core.gui.GuiFactory")
|
guiFactory = "com.replaymod.core.gui.GuiFactory")
|
||||||
public class ReplayMod {
|
public class ReplayMod {
|
||||||
|
|
||||||
@@ -67,18 +85,7 @@ public class ReplayMod {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Getter(lazy = true)
|
@Getter(lazy = true)
|
||||||
private static final String minecraftVersion = parseMinecraftVersion();
|
private static final String minecraftVersion = Loader.MC_VERSION;
|
||||||
private static String parseMinecraftVersion() {
|
|
||||||
CrashReport crashReport = new CrashReport("", new Throwable());
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
List<CrashReportCategory.Entry> list = crashReport.getCategory().children;
|
|
||||||
for (CrashReportCategory.Entry entry : list) {
|
|
||||||
if ("Minecraft Version".equals(entry.getKey())) {
|
|
||||||
return entry.getValue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "Unknown";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final String MOD_ID = "replaymod";
|
public static final String MOD_ID = "replaymod";
|
||||||
|
|
||||||
@@ -127,6 +134,8 @@ public class ReplayMod {
|
|||||||
|
|
||||||
//#ifdef DEV_ENV
|
//#ifdef DEV_ENV
|
||||||
static { // Note: even preInit is too late and we'd have to issue another resource reload
|
static { // Note: even preInit is too late and we'd have to issue another resource reload
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
List<IResourcePack> defaultResourcePacks = mc.defaultResourcePacks;
|
||||||
FolderResourcePack jGuiResourcePack = new FolderResourcePack(new File("../jGui/src/main/resources")) {
|
FolderResourcePack jGuiResourcePack = new FolderResourcePack(new File("../jGui/src/main/resources")) {
|
||||||
@Override
|
@Override
|
||||||
protected InputStream getInputStreamByName(String resourceName) throws IOException {
|
protected InputStream getInputStreamByName(String resourceName) throws IOException {
|
||||||
@@ -140,9 +149,23 @@ public class ReplayMod {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
List<IResourcePack> defaultResourcePacks = mc.defaultResourcePacks;
|
|
||||||
defaultResourcePacks.add(jGuiResourcePack);
|
defaultResourcePacks.add(jGuiResourcePack);
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ FolderResourcePack mainResourcePack = new FolderResourcePack(new File("../src/main/resources")) {
|
||||||
|
//$$ @Override
|
||||||
|
//$$ protected InputStream getInputStreamByName(String resourceName) throws IOException {
|
||||||
|
//$$ try {
|
||||||
|
//$$ return super.getInputStreamByName(resourceName);
|
||||||
|
//$$ } catch (IOException e) {
|
||||||
|
//$$ if ("pack.mcmeta".equals(resourceName)) {
|
||||||
|
//$$ return new ByteArrayInputStream(("{\"pack\": {\"description\": \"dummy pack for mod resources in dev-env\", \"pack_format\": 1}}").getBytes(Charsets.UTF_8));
|
||||||
|
//$$ }
|
||||||
|
//$$ throw e;
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ };
|
||||||
|
//$$ defaultResourcePacks.add(mainResourcePack);
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
@@ -152,6 +175,9 @@ public class ReplayMod {
|
|||||||
|
|
||||||
new MainMenuHandler().register();
|
new MainMenuHandler().register();
|
||||||
|
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ FML_BUS.register(this); // For runLater(Runnable)
|
||||||
|
//#endif
|
||||||
FML_BUS.register(keyBindingRegistry);
|
FML_BUS.register(keyBindingRegistry);
|
||||||
|
|
||||||
getKeyBindingRegistry().registerKeyBinding("replaymod.input.settings", 0, () -> {
|
getKeyBindingRegistry().registerKeyBinding("replaymod.input.settings", 0, () -> {
|
||||||
@@ -163,8 +189,11 @@ public class ReplayMod {
|
|||||||
public void postInit(FMLPostInitializationEvent event) throws IOException {
|
public void postInit(FMLPostInitializationEvent event) throws IOException {
|
||||||
settingsRegistry.save(); // Save default values to disk
|
settingsRegistry.save(); // Save default values to disk
|
||||||
|
|
||||||
|
// 1.7.10 crashes when render distance > 16
|
||||||
|
//#if MC>=10800
|
||||||
if(!FMLClientHandler.instance().hasOptifine())
|
if(!FMLClientHandler.instance().hasOptifine())
|
||||||
GameSettings.Options.RENDER_DISTANCE.setValueMax(64f);
|
GameSettings.Options.RENDER_DISTANCE.setValueMax(64f);
|
||||||
|
//#endif
|
||||||
|
|
||||||
testIfMoeshAndExitMinecraft();
|
testIfMoeshAndExitMinecraft();
|
||||||
|
|
||||||
@@ -212,6 +241,7 @@ public class ReplayMod {
|
|||||||
public void runLater(Runnable runnable) {
|
public void runLater(Runnable runnable) {
|
||||||
if (mc.isCallingFromMinecraftThread() && inRunLater) {
|
if (mc.isCallingFromMinecraftThread() && inRunLater) {
|
||||||
EventBus bus = FORGE_BUS;
|
EventBus bus = FORGE_BUS;
|
||||||
|
//#if MC>=10800
|
||||||
bus.register(new Object() {
|
bus.register(new Object() {
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onRenderTick(TickEvent.RenderTickEvent event) {
|
public void onRenderTick(TickEvent.RenderTickEvent event) {
|
||||||
@@ -221,13 +251,21 @@ public class ReplayMod {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
//#else
|
||||||
|
//$$ bus.register(new RunLaterHelper(runnable));
|
||||||
|
//#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//#if MC>=10800
|
||||||
//#if MC<10904
|
//#if MC<10904
|
||||||
//$$ @SuppressWarnings("unchecked")
|
//$$ @SuppressWarnings("unchecked")
|
||||||
//#endif
|
//#endif
|
||||||
Queue<FutureTask<?>> tasks = mc.scheduledTasks;
|
Queue<FutureTask<?>> tasks = mc.scheduledTasks;
|
||||||
synchronized (mc.scheduledTasks) {
|
synchronized (mc.scheduledTasks) {
|
||||||
|
//#else
|
||||||
|
//$$ Queue<ListenableFutureTask<?>> tasks = scheduledTasks;
|
||||||
|
//$$ synchronized (scheduledTasks) {
|
||||||
|
//#endif
|
||||||
tasks.add(ListenableFutureTask.create(() -> {
|
tasks.add(ListenableFutureTask.create(() -> {
|
||||||
inRunLater = true;
|
inRunLater = true;
|
||||||
try {
|
try {
|
||||||
@@ -239,6 +277,37 @@ public class ReplayMod {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ // 1.7.10: Cannot use MC's because it is processed only during ticks (so not at all when replay is paused)
|
||||||
|
//$$ private final Queue<ListenableFutureTask<?>> scheduledTasks = new ArrayDeque<>();
|
||||||
|
//$$
|
||||||
|
//$$ // in 1.7.10 apparently events can't be delivered to anonymous classes
|
||||||
|
//$$ public class RunLaterHelper {
|
||||||
|
//$$ private final Runnable runnable;
|
||||||
|
//$$
|
||||||
|
//$$ private RunLaterHelper(Runnable runnable) {
|
||||||
|
//$$ this.runnable = runnable;
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ @SubscribeEvent
|
||||||
|
//$$ public void onRenderTick(TickEvent.RenderTickEvent event) {
|
||||||
|
//$$ if (event.phase == TickEvent.Phase.START) {
|
||||||
|
//$$ runLater(runnable);
|
||||||
|
//$$ FML_BUS.unregister(this);
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ @SubscribeEvent
|
||||||
|
//$$ public void runScheduledTasks(InputReplayTimer.RunScheduledTasks event) {
|
||||||
|
//$$ synchronized (scheduledTasks) {
|
||||||
|
//$$ while (!scheduledTasks.isEmpty()) {
|
||||||
|
//$$ scheduledTasks.poll().run();
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
|
|
||||||
public String getVersion() {
|
public String getVersion() {
|
||||||
return getContainer().getVersion();
|
return getContainer().getVersion();
|
||||||
}
|
}
|
||||||
|
|||||||
95
src/main/java/com/replaymod/core/asm/GLErrorTransformer.java
Normal file
95
src/main/java/com/replaymod/core/asm/GLErrorTransformer.java
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
//#if MC<=10710
|
||||||
|
//$$ package com.replaymod.core.asm;
|
||||||
|
//$$
|
||||||
|
//$$ import net.minecraft.launchwrapper.IClassTransformer;
|
||||||
|
//$$ import org.lwjgl.opengl.GL11;
|
||||||
|
//$$ import org.lwjgl.util.glu.GLU;
|
||||||
|
//$$ 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;
|
||||||
|
//$$
|
||||||
|
//$$ /**
|
||||||
|
//$$ * Insert glGetError checks after all calls to any method in any GL*, ARB* and EXT* classes
|
||||||
|
//$$ */
|
||||||
|
//$$ public class GLErrorTransformer implements IClassTransformer {
|
||||||
|
//$$ private static final String GL_CLASS = "org.lwjgl.opengl.GL";
|
||||||
|
//$$ private static final String GL = GL_CLASS.replace('.', '/');
|
||||||
|
//$$ private static final String ARB_CLASS = "org.lwjgl.opengl.ARB";
|
||||||
|
//$$ private static final String ARB = ARB_CLASS.replace('.', '/');
|
||||||
|
//$$ private static final String EXT_CLASS = "org.lwjgl.opengl.EXT";
|
||||||
|
//$$ private static final String EXT = EXT_CLASS.replace('.', '/');
|
||||||
|
//$$ private static final String GLErrorTransformer_CLASS = GLErrorTransformer.class.getName();
|
||||||
|
//$$ private static final String GLErrorTransformer = GLErrorTransformer_CLASS.replace('.', '/');
|
||||||
|
//$$
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public byte[] transform(String name, String transformedName, byte[] basicClass) {
|
||||||
|
//$$ if (basicClass == null) return null;
|
||||||
|
//$$
|
||||||
|
//$$ ClassReader reader = new ClassReader(basicClass);
|
||||||
|
//$$ ClassWriter writer = new ClassWriter(reader, 0);
|
||||||
|
//$$ reader.accept(new ClassVisitor(Opcodes.ASM5, writer) {
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
|
||||||
|
//$$ MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
|
||||||
|
//$$ return new MethodVisitor(Opcodes.ASM5, mv) {
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
|
||||||
|
//$$ super.visitMethodInsn(opcode, owner, name, desc, itf);
|
||||||
|
//$$ if (owner.startsWith(GL) || owner.startsWith(ARB) || owner.startsWith(EXT)) {
|
||||||
|
//$$ visitLdcInsn(owner.replace('/', '.'));
|
||||||
|
//$$ visitLdcInsn(name);
|
||||||
|
//$$ super.visitMethodInsn(Opcodes.INVOKESTATIC, GLErrorTransformer, "glErrorCheck", "(Ljava/lang/String;Ljava/lang/String;)V", false);
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public void visitMaxs(int maxStack, int maxLocals) {
|
||||||
|
//$$ super.visitMaxs(maxStack + 2, maxLocals);
|
||||||
|
//$$ }
|
||||||
|
//$$ };
|
||||||
|
//$$ }
|
||||||
|
//$$ }, 0);
|
||||||
|
//$$ return writer.toByteArray();
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ private static boolean inGlBegin;
|
||||||
|
//$$
|
||||||
|
//$$ @SuppressWarnings("unused") // Called via ASM
|
||||||
|
//$$ public static void glErrorCheck(String cls, String method) {
|
||||||
|
//$$ if (method.equals("glBegin") && cls.equals(GL_CLASS + "11")) {
|
||||||
|
//$$ if (inGlBegin) {
|
||||||
|
//$$ // glBegin within glBegin
|
||||||
|
//$$ throw new GLError(GL11.GL_INVALID_OPERATION, cls, method);
|
||||||
|
//$$ }
|
||||||
|
//$$ inGlBegin = true;
|
||||||
|
//$$ return;
|
||||||
|
//$$ }
|
||||||
|
//$$ if (inGlBegin && method.equals("glEnd") && cls.equals(GL_CLASS + "11")) {
|
||||||
|
//$$ inGlBegin = false;
|
||||||
|
//$$ }
|
||||||
|
//$$ if (inGlBegin) {
|
||||||
|
//$$ return; // Cannot call glGetError in between of glBegin and glEnd
|
||||||
|
//$$ }
|
||||||
|
//$$ int err = GL11.glGetError();
|
||||||
|
//$$ if (err != 0) {
|
||||||
|
//$$ GLError e = new GLError(err, cls, method);
|
||||||
|
//$$ if ("true".equals(System.getProperty("replaymod.glerrors.throw", "true"))) {
|
||||||
|
//$$ throw e;
|
||||||
|
//$$ } else {
|
||||||
|
//$$ e.printStackTrace();
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ public static class GLError extends RuntimeException {
|
||||||
|
//$$ private GLError(int err, String cls, String method) {
|
||||||
|
//$$ super(GLU.gluErrorString(err) + " (" + err + ")");
|
||||||
|
//$$ StackTraceElement[] stack = getStackTrace();
|
||||||
|
//$$ stack[0] = new StackTraceElement(cls, method, stack[0].getFileName(), stack[0].getLineNumber());
|
||||||
|
//$$ setStackTrace(stack);
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
//#if MC<=10710
|
||||||
|
//$$ package com.replaymod.core.asm;
|
||||||
|
//$$
|
||||||
|
//$$ 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;
|
||||||
|
//$$
|
||||||
|
//$$ import java.util.HashSet;
|
||||||
|
//$$ import java.util.Set;
|
||||||
|
//$$
|
||||||
|
//$$ /**
|
||||||
|
//$$ * Redirect all calls to GL11.glEnable and GL11.glDisable to the GLStateTracker (excluding that class itself).
|
||||||
|
//$$ */
|
||||||
|
//$$ public class GLStateTrackerTransformer implements IClassTransformer {
|
||||||
|
//$$ private static final String GL11_CLASS = "org.lwjgl.opengl.GL11";
|
||||||
|
//$$ private static final String GL11 = GL11_CLASS.replace('.', '/');
|
||||||
|
//$$ private static final String glEnable = "glEnable";
|
||||||
|
//$$ private static final String glDisable = "glDisable";
|
||||||
|
//$$ private static final String GLStateTracker_CLASS = "com.replaymod.render.hooks.GLStateTracker";
|
||||||
|
//$$ private static final String GLStateTracker = GLStateTracker_CLASS.replace('.', '/');
|
||||||
|
//$$ private static final String hook_glEnable = "hook_glEnable";
|
||||||
|
//$$ private static final String hook_glDisable = "hook_glDisable";
|
||||||
|
//$$
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public byte[] transform(String name, String transformedName, byte[] basicClass) {
|
||||||
|
//$$ if (basicClass == null) return null;
|
||||||
|
//$$ // Ignore the state tracker itself
|
||||||
|
//$$ if (name.equals(GLStateTracker_CLASS)) return basicClass;
|
||||||
|
//$$
|
||||||
|
//$$ ClassReader reader = new ClassReader(basicClass);
|
||||||
|
//$$ Set<Method> eligibleMethods = findEligibleMethods(reader);
|
||||||
|
//$$ if (eligibleMethods.isEmpty()) {
|
||||||
|
//$$ return basicClass;
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ ClassWriter writer = new ClassWriter(reader, 0);
|
||||||
|
//$$ reader.accept(new ClassVisitor(Opcodes.ASM5, writer) {
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
|
||||||
|
//$$ MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
|
||||||
|
//$$ if (!eligibleMethods.contains(new Method(name, desc))) {
|
||||||
|
//$$ return mv;
|
||||||
|
//$$ }
|
||||||
|
//$$ return new MethodVisitor(Opcodes.ASM5, mv) {
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
|
||||||
|
//$$ if (owner.equals(GL11)) {
|
||||||
|
//$$ if (name.equals(glEnable)) {
|
||||||
|
//$$ owner = GLStateTracker;
|
||||||
|
//$$ name = hook_glEnable;
|
||||||
|
//$$ } else if (name.equals(glDisable)) {
|
||||||
|
//$$ owner = GLStateTracker;
|
||||||
|
//$$ name = hook_glDisable;
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ super.visitMethodInsn(opcode, owner, name, desc, itf);
|
||||||
|
//$$ }
|
||||||
|
//$$ };
|
||||||
|
//$$ }
|
||||||
|
//$$ }, 0);
|
||||||
|
//$$ return writer.toByteArray();
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ private Set<Method> findEligibleMethods(ClassReader reader) {
|
||||||
|
//$$ Set<Method> eligibleMethods = new HashSet<>();
|
||||||
|
//$$ reader.accept(new ClassVisitor(Opcodes.ASM5) {
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public MethodVisitor visitMethod(int access, String methodName, String methodDesc, String signature, String[] exceptions) {
|
||||||
|
//$$ return new MethodVisitor(Opcodes.ASM5) {
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
|
||||||
|
//$$ if (owner.equals(GL11) && (name.equals(glEnable) || name.equals(glDisable))) {
|
||||||
|
//$$ eligibleMethods.add(new Method(methodName, methodDesc));
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ };
|
||||||
|
//$$ }
|
||||||
|
//$$ }, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
|
||||||
|
//$$ return eligibleMethods;
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ private static class Method {
|
||||||
|
//$$ private final String name, desc;
|
||||||
|
//$$
|
||||||
|
//$$ private Method(String name, String desc) {
|
||||||
|
//$$ this.name = name;
|
||||||
|
//$$ this.desc = desc;
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public boolean equals(Object o) {
|
||||||
|
//$$ if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
//$$ Method method = (Method) o;
|
||||||
|
//$$ return name.equals(method.name) && desc.equals(method.desc);
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public int hashCode() {
|
||||||
|
//$$ return name.hashCode() ^ desc.hashCode();
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
@@ -3,7 +3,12 @@ package com.replaymod.core.events;
|
|||||||
import com.replaymod.core.SettingsRegistry;
|
import com.replaymod.core.SettingsRegistry;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
import net.minecraftforge.fml.common.eventhandler.Event;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.Event;
|
||||||
|
//#endif
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class SettingsChangedEvent extends Event {
|
public class SettingsChangedEvent extends Event {
|
||||||
|
|||||||
@@ -3,7 +3,12 @@ package com.replaymod.core.gui;
|
|||||||
import com.replaymod.core.ReplayMod;
|
import com.replaymod.core.ReplayMod;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.GuiScreen;
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.client.IModGuiFactory;
|
import net.minecraftforge.fml.client.IModGuiFactory;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.client.IModGuiFactory;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,14 @@ import net.minecraft.client.gui.GuiScreen;
|
|||||||
import net.minecraft.client.gui.GuiScreenRealmsProxy;
|
import net.minecraft.client.gui.GuiScreenRealmsProxy;
|
||||||
import net.minecraftforge.client.event.GuiScreenEvent;
|
import net.minecraftforge.client.event.GuiScreenEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
@@ -50,6 +55,7 @@ public class MainMenuHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=11202
|
||||||
private static class RealmsNotificationProxy extends GuiScreen {
|
private static class RealmsNotificationProxy extends GuiScreen {
|
||||||
private final GuiScreenRealmsProxy proxy;
|
private final GuiScreenRealmsProxy proxy;
|
||||||
private final int offset;
|
private final int offset;
|
||||||
@@ -59,12 +65,10 @@ public class MainMenuHandler {
|
|||||||
this.offset = offset;
|
this.offset = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
//#if MC>=11202
|
|
||||||
@Override
|
@Override
|
||||||
public void setGuiSize(int w, int h) {
|
public void setGuiSize(int w, int h) {
|
||||||
proxy.setGuiSize(w, h);
|
proxy.setGuiSize(w, h);
|
||||||
}
|
}
|
||||||
//#endif
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initGui() {
|
public void initGui() {
|
||||||
@@ -93,4 +97,5 @@ public class MainMenuHandler {
|
|||||||
proxy.onGuiClosed();
|
proxy.onGuiClosed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,13 +2,23 @@ package com.replaymod.core.utils;
|
|||||||
|
|
||||||
import com.replaymod.replaystudio.data.ModInfo;
|
import com.replaymod.replaystudio.data.ModInfo;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraftforge.fml.common.Loader;
|
|
||||||
import net.minecraftforge.fml.common.ModContainer;
|
|
||||||
//#if MC>=11200
|
//#if MC>=11200
|
||||||
import net.minecraftforge.registries.ForgeRegistry;
|
import net.minecraftforge.registries.ForgeRegistry;
|
||||||
import net.minecraftforge.registries.RegistryManager;
|
import net.minecraftforge.registries.RegistryManager;
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ import net.minecraftforge.fml.common.registry.GameData;
|
//$$ import net.minecraftforge.fml.common.registry.GameData;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.registry.GameData;
|
||||||
|
//#endif
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.Loader;
|
||||||
|
import net.minecraftforge.fml.common.ModContainer;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.Loader;
|
||||||
|
//$$ import cpw.mods.fml.common.ModContainer;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -30,6 +40,7 @@ public class ModCompat {
|
|||||||
.map(mod -> new ModInfo(mod.getModId(), mod.getName(), mod.getVersion()))
|
.map(mod -> new ModInfo(mod.getModId(), mod.getName(), mod.getVersion()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ return Stream.concat(
|
//$$ return Stream.concat(
|
||||||
//$$ ((Set<ResourceLocation>) GameData.getBlockRegistry().getKeys()).stream(),
|
//$$ ((Set<ResourceLocation>) GameData.getBlockRegistry().getKeys()).stream(),
|
||||||
//$$ ((Set<ResourceLocation>) GameData.getItemRegistry().getKeys()).stream()
|
//$$ ((Set<ResourceLocation>) GameData.getItemRegistry().getKeys()).stream()
|
||||||
@@ -37,6 +48,18 @@ public class ModCompat {
|
|||||||
//$$ .map(String::toLowerCase).map(ignoreCaseMap::get).filter(mod -> mod != null)
|
//$$ .map(String::toLowerCase).map(ignoreCaseMap::get).filter(mod -> mod != null)
|
||||||
//$$ .map(mod -> new ModInfo(mod.getModId(), mod.getName(), mod.getVersion()))
|
//$$ .map(mod -> new ModInfo(mod.getModId(), mod.getName(), mod.getVersion()))
|
||||||
//$$ .collect(Collectors.toList());
|
//$$ .collect(Collectors.toList());
|
||||||
|
//#else
|
||||||
|
//$$ return Stream.concat(
|
||||||
|
//$$ ((Set<String>) GameData.getBlockRegistry().getKeys()).stream(),
|
||||||
|
//$$ ((Set<String>) GameData.getItemRegistry().getKeys()).stream()
|
||||||
|
//$$ ).map(name -> {
|
||||||
|
//$$ if (!name.contains(":")) return null; // Still using old names without namespace, can't do anything, ignore
|
||||||
|
//$$ return name.split(":", 2)[0];
|
||||||
|
//$$ }).filter(s -> !s.equals("minecraft")).distinct()
|
||||||
|
//$$ .map(String::toLowerCase).map(ignoreCaseMap::get).filter(mod -> mod != null)
|
||||||
|
//$$ .map(mod -> new ModInfo(mod.getModId(), mod.getName(), mod.getVersion()))
|
||||||
|
//$$ .collect(Collectors.toList());
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ import net.minecraft.network.play.server.SPacketCustomPayload;
|
|||||||
//$$ import net.minecraft.network.play.server.S3FPacketCustomPayload;
|
//$$ import net.minecraft.network.play.server.S3FPacketCustomPayload;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ import io.netty.buffer.Unpooled;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.readString;
|
import static com.replaymod.core.versions.MCVer.readString;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -25,7 +29,11 @@ public class Restrictions {
|
|||||||
//#else
|
//#else
|
||||||
//$$ public String handle(S3FPacketCustomPayload packet) {
|
//$$ public String handle(S3FPacketCustomPayload packet) {
|
||||||
//#endif
|
//#endif
|
||||||
|
//#if MC>=10800
|
||||||
PacketBuffer buffer = packet.getBufferData();
|
PacketBuffer buffer = packet.getBufferData();
|
||||||
|
//#else
|
||||||
|
//$$ PacketBuffer buffer = new PacketBuffer(Unpooled.wrappedBuffer(packet.func_149168_d()));
|
||||||
|
//#endif
|
||||||
while (buffer.isReadable()) {
|
while (buffer.isReadable()) {
|
||||||
String name = readString(buffer, 64);
|
String name = readString(buffer, 64);
|
||||||
boolean active = buffer.readBoolean();
|
boolean active = buffer.readBoolean();
|
||||||
|
|||||||
@@ -19,8 +19,6 @@ import de.johni0702.minecraft.gui.layout.VerticalLayout;
|
|||||||
import de.johni0702.minecraft.gui.popup.GuiInfoPopup;
|
import de.johni0702.minecraft.gui.popup.GuiInfoPopup;
|
||||||
import de.johni0702.minecraft.gui.utils.Colors;
|
import de.johni0702.minecraft.gui.utils.Colors;
|
||||||
import net.minecraft.client.gui.GuiScreen;
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
import net.minecraft.client.network.NetworkPlayerInfo;
|
|
||||||
import net.minecraft.client.resources.DefaultPlayerSkin;
|
|
||||||
import net.minecraft.crash.CrashReport;
|
import net.minecraft.crash.CrashReport;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import org.apache.commons.io.Charsets;
|
import org.apache.commons.io.Charsets;
|
||||||
@@ -30,6 +28,17 @@ import org.lwjgl.input.Keyboard;
|
|||||||
import org.lwjgl.util.Dimension;
|
import org.lwjgl.util.Dimension;
|
||||||
import org.lwjgl.util.ReadableDimension;
|
import org.lwjgl.util.ReadableDimension;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraft.client.network.NetworkPlayerInfo;
|
||||||
|
import net.minecraft.client.resources.DefaultPlayerSkin;
|
||||||
|
|
||||||
|
import static com.replaymod.core.versions.MCVer.getConnection;
|
||||||
|
//#else
|
||||||
|
//$$ import net.minecraft.client.Minecraft;
|
||||||
|
//$$ import net.minecraft.client.entity.AbstractClientPlayer;
|
||||||
|
//$$ import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
@@ -55,7 +64,6 @@ import java.util.Date;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.getConnection;
|
|
||||||
import static net.minecraft.client.Minecraft.getMinecraft;
|
import static net.minecraft.client.Minecraft.getMinecraft;
|
||||||
|
|
||||||
public class Utils {
|
public class Utils {
|
||||||
@@ -162,6 +170,7 @@ public class Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static ResourceLocation getResourceLocationForPlayerUUID(UUID uuid) {
|
public static ResourceLocation getResourceLocationForPlayerUUID(UUID uuid) {
|
||||||
|
//#if MC>=10800
|
||||||
NetworkPlayerInfo info = getConnection(getMinecraft()).getPlayerInfo(uuid);
|
NetworkPlayerInfo info = getConnection(getMinecraft()).getPlayerInfo(uuid);
|
||||||
ResourceLocation skinLocation;
|
ResourceLocation skinLocation;
|
||||||
if (info != null && info.hasLocationSkin()) {
|
if (info != null && info.hasLocationSkin()) {
|
||||||
@@ -170,6 +179,13 @@ public class Utils {
|
|||||||
skinLocation = DefaultPlayerSkin.getDefaultSkin(uuid);
|
skinLocation = DefaultPlayerSkin.getDefaultSkin(uuid);
|
||||||
}
|
}
|
||||||
return skinLocation;
|
return skinLocation;
|
||||||
|
//#else
|
||||||
|
//$$ EntityPlayer player = Minecraft.getMinecraft().theWorld.getPlayerEntityByUUID(uuid);
|
||||||
|
//$$ if (player != null || !(player instanceof AbstractClientPlayer)) {
|
||||||
|
//$$ return AbstractClientPlayer.locationStevePng;
|
||||||
|
//$$ }
|
||||||
|
//$$ return ((AbstractClientPlayer) player).getLocationSkin();
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCtrlDown() {
|
public static boolean isCtrlDown() {
|
||||||
|
|||||||
@@ -13,12 +13,13 @@ import net.minecraft.client.multiplayer.ServerData;
|
|||||||
import net.minecraft.client.multiplayer.ServerList;
|
import net.minecraft.client.multiplayer.ServerList;
|
||||||
import net.minecraft.client.multiplayer.WorldClient;
|
import net.minecraft.client.multiplayer.WorldClient;
|
||||||
import net.minecraft.client.network.NetHandlerPlayClient;
|
import net.minecraft.client.network.NetHandlerPlayClient;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
|
||||||
import net.minecraft.client.renderer.Tessellator;
|
import net.minecraft.client.renderer.Tessellator;
|
||||||
|
import net.minecraft.client.renderer.entity.RenderManager;
|
||||||
import net.minecraft.client.renderer.texture.TextureMap;
|
import net.minecraft.client.renderer.texture.TextureMap;
|
||||||
import net.minecraft.client.renderer.vertex.VertexFormat;
|
import net.minecraft.client.renderer.vertex.VertexFormat;
|
||||||
import net.minecraft.client.renderer.vertex.VertexFormatElement;
|
import net.minecraft.client.renderer.vertex.VertexFormatElement;
|
||||||
import net.minecraft.client.resources.ResourcePackRepository;
|
import net.minecraft.client.resources.ResourcePackRepository;
|
||||||
|
import net.minecraft.client.settings.KeyBinding;
|
||||||
import net.minecraft.crash.CrashReportCategory;
|
import net.minecraft.crash.CrashReportCategory;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
@@ -27,13 +28,11 @@ import net.minecraft.network.Packet;
|
|||||||
import net.minecraft.network.PacketBuffer;
|
import net.minecraft.network.PacketBuffer;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.WorldType;
|
|
||||||
import net.minecraft.world.chunk.Chunk;
|
import net.minecraft.world.chunk.Chunk;
|
||||||
import net.minecraftforge.client.event.GuiScreenEvent;
|
import net.minecraftforge.client.event.GuiScreenEvent;
|
||||||
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||||
import net.minecraftforge.client.event.RenderLivingEvent;
|
import net.minecraftforge.client.event.RenderLivingEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fml.common.eventhandler.EventBus;
|
|
||||||
|
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
//#if MC>=11200
|
//#if MC>=11200
|
||||||
@@ -45,16 +44,39 @@ import net.minecraft.client.particle.Particle;
|
|||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
//#else
|
//#else
|
||||||
//$$ import net.minecraft.client.particle.EntityFX;
|
//$$ import net.minecraft.client.particle.EntityFX;
|
||||||
|
//#if MC>=10800
|
||||||
//$$ import net.minecraft.client.renderer.WorldRenderer;
|
//$$ import net.minecraft.client.renderer.WorldRenderer;
|
||||||
|
//#endif
|
||||||
//$$ import net.minecraft.util.MathHelper;
|
//$$ import net.minecraft.util.MathHelper;
|
||||||
//#endif
|
//#endif
|
||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ import net.minecraftforge.fml.common.FMLCommonHandler;
|
//$$ import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.FMLCommonHandler;
|
||||||
|
//#endif
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
|
import net.minecraft.client.renderer.GlStateManager.BooleanState;
|
||||||
|
import net.minecraft.world.WorldType;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.EventBus;
|
||||||
|
//#else
|
||||||
|
//$$ import com.google.common.util.concurrent.Futures;
|
||||||
|
//$$ import com.replaymod.render.hooks.GLStateTracker;
|
||||||
|
//$$ import com.replaymod.render.hooks.GLStateTracker.BooleanState;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.EventBus;
|
||||||
|
//$$ import io.netty.handler.codec.DecoderException;
|
||||||
|
//$$ import net.minecraft.client.resources.FileResourcePack;
|
||||||
|
//$$
|
||||||
|
//$$ import static org.lwjgl.opengl.GL11.*;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
@@ -151,7 +173,15 @@ public class MCVer {
|
|||||||
//#if MC>=11102
|
//#if MC>=11102
|
||||||
return buffer.readString(max);
|
return buffer.readString(max);
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ return buffer.readStringFromBuffer(max);
|
//$$ return buffer.readStringFromBuffer(max);
|
||||||
|
//#else
|
||||||
|
//$$ try {
|
||||||
|
//$$ return buffer.readStringFromBuffer(max);
|
||||||
|
//$$ } catch (IOException e) {
|
||||||
|
//$$ throw new DecoderException(e);
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,12 +217,34 @@ public class MCVer {
|
|||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
public static WorldType WorldType_DEBUG_ALL_BLOCK_STATES
|
public static WorldType WorldType_DEBUG_ALL_BLOCK_STATES
|
||||||
//#if MC>=11200
|
//#if MC>=11200
|
||||||
= WorldType.DEBUG_ALL_BLOCK_STATES;
|
= WorldType.DEBUG_ALL_BLOCK_STATES;
|
||||||
//#else
|
//#else
|
||||||
//$$ = WorldType.DEBUG_WORLD;
|
//$$ = WorldType.DEBUG_WORLD;
|
||||||
//#endif
|
//#endif
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
public static Entity getRenderViewEntity(Minecraft mc) {
|
||||||
|
return mc.getRenderViewEntity();
|
||||||
|
}
|
||||||
|
//#else
|
||||||
|
//$$ public static EntityLivingBase getRenderViewEntity(Minecraft mc) {
|
||||||
|
//$$ return mc.renderViewEntity;
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
public static void setRenderViewEntity(Minecraft mc, Entity entity) {
|
||||||
|
mc.setRenderViewEntity(entity);
|
||||||
|
}
|
||||||
|
//#else
|
||||||
|
//$$ public static void setRenderViewEntity(Minecraft mc, EntityLivingBase entity) {
|
||||||
|
//$$ mc.renderViewEntity = entity;
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
|
|
||||||
public static ResourceLocation LOCATION_BLOCKS_TEXTURE
|
public static ResourceLocation LOCATION_BLOCKS_TEXTURE
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
@@ -248,7 +300,11 @@ public class MCVer {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static Collection<Entity>[] getEntityLists(Chunk chunk) {
|
public static Collection<Entity>[] getEntityLists(Chunk chunk) {
|
||||||
|
//#if MC>=10800
|
||||||
return chunk.getEntityLists();
|
return chunk.getEntityLists();
|
||||||
|
//#else
|
||||||
|
//$$ return chunk.entityLists;
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@@ -261,19 +317,43 @@ public class MCVer {
|
|||||||
return world.playerEntities;
|
return world.playerEntities;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static GlStateManager.BooleanState fog(GlStateManager.FogState fogState) {
|
public static BooleanState fog() {
|
||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
return fogState.fog;
|
return GlStateManager.fogState.fog;
|
||||||
//#else
|
//#else
|
||||||
//$$ return fogState.field_179049_a;
|
//#if MC>=10800
|
||||||
|
//$$ return GlStateManager.fogState.field_179049_a;
|
||||||
|
//#else
|
||||||
|
//$$ return GLStateTracker.getInstance().fog;
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void fog(GlStateManager.FogState fogState, GlStateManager.BooleanState fog) {
|
public static void fog(BooleanState fog) {
|
||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
fogState.fog = fog;
|
GlStateManager.fogState.fog = fog;
|
||||||
//#else
|
//#else
|
||||||
//$$ fogState.field_179049_a = fog;
|
//#if MC>=10800
|
||||||
|
//$$ GlStateManager.fogState.field_179049_a = fog;
|
||||||
|
//#else
|
||||||
|
//$$ GLStateTracker.getInstance().fog = fog;
|
||||||
|
//#endif
|
||||||
|
//#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BooleanState texture2DState(int index) {
|
||||||
|
//#if MC>=10800
|
||||||
|
return GlStateManager.textureState[index].texture2DState;
|
||||||
|
//#else
|
||||||
|
//$$ return GLStateTracker.getInstance().texture[index];
|
||||||
|
//#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void texture2DState(int index, BooleanState texture2DState) {
|
||||||
|
//#if MC>=10800
|
||||||
|
GlStateManager.textureState[index].texture2DState = texture2DState;
|
||||||
|
//#else
|
||||||
|
//$$ GLStateTracker.getInstance().texture[index] = texture2DState;
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,7 +389,22 @@ public class MCVer {
|
|||||||
//$$ return repo.setResourcePackInstance(file);
|
//$$ return repo.setResourcePackInstance(file);
|
||||||
//#endif
|
//#endif
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ return repo.func_177319_a(file);
|
//$$ return repo.func_177319_a(file);
|
||||||
|
//#else
|
||||||
|
//$$ repo.field_148533_g = false;
|
||||||
|
//$$ repo.field_148532_f = new FileResourcePack(file);
|
||||||
|
//$$ Minecraft.getMinecraft().scheduleResourcesRefresh();
|
||||||
|
//$$ return Futures.immediateFuture(null);
|
||||||
|
//#endif
|
||||||
|
//#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isKeyDown(KeyBinding keyBinding) {
|
||||||
|
//#if MC>=10800
|
||||||
|
return keyBinding.isKeyDown();
|
||||||
|
//#else
|
||||||
|
//$$ return keyBinding.getIsKeyPressed();
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,7 +412,11 @@ public class MCVer {
|
|||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
Tessellator.getInstance().getBuffer().setTranslation(x, y, z);
|
Tessellator.getInstance().getBuffer().setTranslation(x, y, z);
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ Tessellator.getInstance().getWorldRenderer().setTranslation(x, y, z);
|
//$$ Tessellator.getInstance().getWorldRenderer().setTranslation(x, y, z);
|
||||||
|
//#else
|
||||||
|
//$$ Tessellator.instance.setTranslation(x, y, z);
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,7 +427,11 @@ public class MCVer {
|
|||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
//$$ Tessellator.getInstance().getWorldRenderer().begin(mode, DefaultVertexFormats.POSITION_COLOR);
|
//$$ Tessellator.getInstance().getWorldRenderer().begin(mode, DefaultVertexFormats.POSITION_COLOR);
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ Tessellator.getInstance().getWorldRenderer().startDrawing(mode);
|
//$$ Tessellator.getInstance().getWorldRenderer().startDrawing(mode);
|
||||||
|
//#else
|
||||||
|
//$$ Tessellator.instance.startDrawing(mode);
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
@@ -341,7 +444,11 @@ public class MCVer {
|
|||||||
//$$ VertexBuffer worldRenderer = Tessellator.getInstance().getBuffer();
|
//$$ VertexBuffer worldRenderer = Tessellator.getInstance().getBuffer();
|
||||||
//#endif
|
//#endif
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
|
//$$ WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
|
||||||
|
//#else
|
||||||
|
//$$ Tessellator worldRenderer = Tessellator.instance;
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
worldRenderer.pos(x, y, z).color(r, g, b, a).endVertex();
|
worldRenderer.pos(x, y, z).color(r, g, b, a).endVertex();
|
||||||
@@ -358,7 +465,11 @@ public class MCVer {
|
|||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
//$$ Tessellator.getInstance().getWorldRenderer().begin(mode, DefaultVertexFormats.POSITION_TEX);
|
//$$ Tessellator.getInstance().getWorldRenderer().begin(mode, DefaultVertexFormats.POSITION_TEX);
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ Tessellator.getInstance().getWorldRenderer().startDrawing(mode);
|
//$$ Tessellator.getInstance().getWorldRenderer().startDrawing(mode);
|
||||||
|
//#else
|
||||||
|
//$$ Tessellator.instance.startDrawing(mode);
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
@@ -371,7 +482,11 @@ public class MCVer {
|
|||||||
//$$ VertexBuffer worldRenderer = Tessellator.getInstance().getBuffer();
|
//$$ VertexBuffer worldRenderer = Tessellator.getInstance().getBuffer();
|
||||||
//#endif
|
//#endif
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
|
//$$ WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
|
||||||
|
//#else
|
||||||
|
//$$ Tessellator worldRenderer = Tessellator.instance;
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
worldRenderer.pos(x, y, z).tex(u, v).endVertex();
|
worldRenderer.pos(x, y, z).tex(u, v).endVertex();
|
||||||
@@ -387,7 +502,11 @@ public class MCVer {
|
|||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
//$$ Tessellator.getInstance().getWorldRenderer().begin(mode, DefaultVertexFormats.POSITION_TEX_COLOR);
|
//$$ Tessellator.getInstance().getWorldRenderer().begin(mode, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ Tessellator.getInstance().getWorldRenderer().startDrawing(mode);
|
//$$ Tessellator.getInstance().getWorldRenderer().startDrawing(mode);
|
||||||
|
//#else
|
||||||
|
//$$ Tessellator.instance.startDrawing(mode);
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
@@ -400,7 +519,11 @@ public class MCVer {
|
|||||||
//$$ VertexBuffer worldRenderer = Tessellator.getInstance().getBuffer();
|
//$$ VertexBuffer worldRenderer = Tessellator.getInstance().getBuffer();
|
||||||
//#endif
|
//#endif
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
|
//$$ WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer();
|
||||||
|
//#else
|
||||||
|
//$$ Tessellator worldRenderer = Tessellator.instance;
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
worldRenderer.pos(x, y, z).tex(u, v).color(r, g, b, a).endVertex();
|
worldRenderer.pos(x, y, z).tex(u, v).color(r, g, b, a).endVertex();
|
||||||
@@ -431,6 +554,22 @@ public class MCVer {
|
|||||||
return vertexFormat.getElements();
|
return vertexFormat.getElements();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Tessellator Tessellator_getInstance() {
|
||||||
|
//#if MC>=10800
|
||||||
|
return Tessellator.getInstance();
|
||||||
|
//#else
|
||||||
|
//$$ return Tessellator.instance;
|
||||||
|
//#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RenderManager getRenderManager() {
|
||||||
|
//#if MC>=10800
|
||||||
|
return Minecraft.getMinecraft().getRenderManager();
|
||||||
|
//#else
|
||||||
|
//$$ return RenderManager.instance;
|
||||||
|
//#endif
|
||||||
|
}
|
||||||
|
|
||||||
public static int floor(double val) {
|
public static int floor(double val) {
|
||||||
//#if MC>=11102
|
//#if MC>=11102
|
||||||
return MathHelper.floor(val);
|
return MathHelper.floor(val);
|
||||||
@@ -470,4 +609,21 @@ public class MCVer {
|
|||||||
//$$ return EntityFX.interpPosZ;
|
//$$ return EntityFX.interpPosZ;
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ public static class GlStateManager {
|
||||||
|
//$$ public static void resetColor() { /* nop */ }
|
||||||
|
//$$ public static void clearColor(float r, float g, float b, float a) { glClearColor(r, g, b, a); }
|
||||||
|
//$$ public static void enableTexture2D() { glEnable(GL_TEXTURE_2D); }
|
||||||
|
//$$ public static void enableAlpha() { glEnable(GL_ALPHA_TEST); }
|
||||||
|
//$$ public static void alphaFunc(int func, float ref) { glAlphaFunc(func, ref); }
|
||||||
|
//$$ public static void enableDepth() { glEnable(GL_DEPTH_TEST); }
|
||||||
|
//$$ public static void pushMatrix() { glPushMatrix(); }
|
||||||
|
//$$ public static void popAttrib() { glPopAttrib(); }
|
||||||
|
//$$ public static void popMatrix() { glPopMatrix(); }
|
||||||
|
//$$ public static void clear(int mask) { glClear(mask); }
|
||||||
|
//$$ public static void translate(double x, double y, double z) { glTranslated(x, y, z); }
|
||||||
|
//$$ public static void rotate(float angle, float x, float y, float z) { glRotatef(angle, x, y, z); }
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,16 +3,25 @@ package com.replaymod.editor;
|
|||||||
import com.replaymod.core.ReplayMod;
|
import com.replaymod.core.ReplayMod;
|
||||||
import com.replaymod.editor.handler.GuiHandler;
|
import com.replaymod.editor.handler.GuiHandler;
|
||||||
import com.replaymod.online.Setting;
|
import com.replaymod.online.Setting;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
import org.apache.logging.log4j.Logger;
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.Mod;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
@Mod(modid = ReplayModEditor.MOD_ID,
|
@Mod(modid = ReplayModEditor.MOD_ID,
|
||||||
version = "@MOD_VERSION@",
|
version = "@MOD_VERSION@",
|
||||||
acceptedMinecraftVersions = "@MC_VERSION@",
|
acceptedMinecraftVersions = "@MC_VERSION@",
|
||||||
acceptableRemoteVersions = "*",
|
acceptableRemoteVersions = "*",
|
||||||
|
//#if MC>=10800
|
||||||
clientSideOnly = true,
|
clientSideOnly = true,
|
||||||
|
//#endif
|
||||||
useMetadata = true)
|
useMetadata = true)
|
||||||
public class ReplayModEditor {
|
public class ReplayModEditor {
|
||||||
public static final String MOD_ID = "replaymod-editor";
|
public static final String MOD_ID = "replaymod-editor";
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import de.johni0702.minecraft.gui.popup.GuiYesNoPopup;
|
|||||||
import de.johni0702.minecraft.gui.utils.Colors;
|
import de.johni0702.minecraft.gui.utils.Colors;
|
||||||
import net.minecraft.crash.CrashReport;
|
import net.minecraft.crash.CrashReport;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import org.lwjgl.util.ReadableDimension;
|
import org.lwjgl.util.ReadableDimension;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@@ -123,7 +124,8 @@ public class GuiReplayEditor extends GuiScreen {
|
|||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void save(File inputFile, PacketStream.FilterInfo...filters) {
|
@SafeVarargs
|
||||||
|
public final void save(File inputFile, Pair<PacketStream.FilterInfo, JsonObject>... filters) {
|
||||||
save(Utils.fileNameToReplayName(inputFile.getName()), (outputFile) -> {
|
save(Utils.fileNameToReplayName(inputFile.getName()), (outputFile) -> {
|
||||||
Studio studio = new ReplayStudio();
|
Studio studio = new ReplayStudio();
|
||||||
File tmpDir = null;
|
File tmpDir = null;
|
||||||
@@ -146,7 +148,10 @@ public class GuiReplayEditor extends GuiScreen {
|
|||||||
PacketStream stream = studio.createReplayStream(in, true);
|
PacketStream stream = studio.createReplayStream(in, true);
|
||||||
|
|
||||||
stream.addFilter(new ProgressFilter(metaData.getDuration()));
|
stream.addFilter(new ProgressFilter(metaData.getDuration()));
|
||||||
for (PacketStream.FilterInfo info : filters) {
|
for (Pair<PacketStream.FilterInfo, JsonObject> pair : filters) {
|
||||||
|
PacketStream.FilterInfo info = pair.getLeft();
|
||||||
|
JsonObject config = pair.getRight();
|
||||||
|
info.getFilter().init(studio, config);
|
||||||
stream.addFilter(info.getFilter(), info.getFrom(), info.getTo());
|
stream.addFilter(info.getFilter(), info.getFrom(), info.getTo());
|
||||||
LOGGER.debug("Added filter {}", info);
|
LOGGER.debug("Added filter {}", info);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import net.minecraft.client.resources.I18n;
|
|||||||
import net.minecraft.crash.CrashReport;
|
import net.minecraft.crash.CrashReport;
|
||||||
import org.apache.commons.io.IOCase;
|
import org.apache.commons.io.IOCase;
|
||||||
import org.apache.commons.io.filefilter.SuffixFileFilter;
|
import org.apache.commons.io.filefilter.SuffixFileFilter;
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import org.lwjgl.util.Dimension;
|
import org.lwjgl.util.Dimension;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -133,12 +134,11 @@ public class GuiTrimPanel extends GuiPanel {
|
|||||||
ChangeTimestampFilter ctf = new ChangeTimestampFilter();
|
ChangeTimestampFilter ctf = new ChangeTimestampFilter();
|
||||||
JsonObject config = new JsonObject();
|
JsonObject config = new JsonObject();
|
||||||
config.addProperty("offset", -start);
|
config.addProperty("offset", -start);
|
||||||
ctf.init(null, config);
|
|
||||||
// Pass filters to save dialog
|
// Pass filters to save dialog
|
||||||
gui.save(inputReplays.getSelectedValue(),
|
gui.save(inputReplays.getSelectedValue(),
|
||||||
new PacketStream.FilterInfo(new SquashFilter(), -1, start),
|
Pair.of(new PacketStream.FilterInfo(new SquashFilter(), -1, start), new JsonObject()),
|
||||||
new PacketStream.FilterInfo(ctf, start, end),
|
Pair.of(new PacketStream.FilterInfo(ctf, start, end), config),
|
||||||
new PacketStream.FilterInfo(new RemoveFilter(), end, -1)
|
Pair.of(new PacketStream.FilterInfo(new RemoveFilter(), end, -1), new JsonObject())
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,12 @@ import net.minecraft.client.gui.GuiButton;
|
|||||||
import net.minecraft.client.gui.GuiMainMenu;
|
import net.minecraft.client.gui.GuiMainMenu;
|
||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
import net.minecraftforge.client.event.GuiScreenEvent;
|
import net.minecraftforge.client.event.GuiScreenEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
|
||||||
|
|||||||
@@ -9,9 +9,15 @@ import de.johni0702.minecraft.gui.element.GuiImage;
|
|||||||
import de.johni0702.minecraft.gui.element.IGuiImage;
|
import de.johni0702.minecraft.gui.element.IGuiImage;
|
||||||
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||||
import net.minecraft.client.settings.GameSettings;
|
import net.minecraft.client.settings.GameSettings;
|
||||||
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||||
import org.lwjgl.input.Keyboard;
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.gameevent.TickEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
|
||||||
|
|||||||
@@ -17,11 +17,16 @@ import de.johni0702.minecraft.gui.layout.GridLayout;
|
|||||||
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||||
import de.johni0702.minecraft.gui.layout.LayoutData;
|
import de.johni0702.minecraft.gui.layout.LayoutData;
|
||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
||||||
import org.lwjgl.input.Keyboard;
|
import org.lwjgl.input.Keyboard;
|
||||||
import org.lwjgl.util.Dimension;
|
import org.lwjgl.util.Dimension;
|
||||||
import org.lwjgl.util.ReadableDimension;
|
import org.lwjgl.util.ReadableDimension;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.replaymod.extras;
|
package com.replaymod.extras;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
import com.replaymod.compat.optifine.OptifineReflection;
|
||||||
import com.replaymod.core.ReplayMod;
|
import com.replaymod.core.ReplayMod;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.resources.IResourcePack;
|
import net.minecraft.client.resources.IResourcePack;
|
||||||
@@ -66,6 +67,8 @@ public class LocalizationExtra implements Extra {
|
|||||||
List<IResourcePack> defaultResourcePacks = mc.defaultResourcePacks;
|
List<IResourcePack> defaultResourcePacks = mc.defaultResourcePacks;
|
||||||
defaultResourcePacks.add(new LocalizedResourcePack(languages));
|
defaultResourcePacks.add(new LocalizedResourcePack(languages));
|
||||||
mc.getLanguageManager().onResourceManagerReload(mc.getResourceManager());
|
mc.getLanguageManager().onResourceManagerReload(mc.getResourceManager());
|
||||||
|
// Optifine does its own, additional language data loading
|
||||||
|
OptifineReflection.reloadLang();
|
||||||
LOGGER.debug("Added language files to resource packs and reloaded LanguageManager");
|
LOGGER.debug("Added language files to resource packs and reloaded LanguageManager");
|
||||||
});
|
});
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
|
|||||||
@@ -14,9 +14,14 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
|||||||
import de.johni0702.minecraft.gui.layout.VerticalLayout;
|
import de.johni0702.minecraft.gui.layout.VerticalLayout;
|
||||||
import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
|
import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
|
||||||
import de.johni0702.minecraft.gui.utils.Colors;
|
import de.johni0702.minecraft.gui.utils.Colors;
|
||||||
import net.minecraftforge.fml.common.Loader;
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.Loader;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.Loader;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import javax.net.ssl.HttpsURLConnection;
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
|
|||||||
@@ -5,10 +5,17 @@ import com.replaymod.extras.advancedscreenshots.AdvancedScreenshots;
|
|||||||
import com.replaymod.extras.playeroverview.PlayerOverview;
|
import com.replaymod.extras.playeroverview.PlayerOverview;
|
||||||
import com.replaymod.extras.urischeme.UriSchemeExtra;
|
import com.replaymod.extras.urischeme.UriSchemeExtra;
|
||||||
import com.replaymod.extras.youtube.YoutubeUpload;
|
import com.replaymod.extras.youtube.YoutubeUpload;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
import org.apache.logging.log4j.Logger;
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.Mod;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -20,7 +27,9 @@ import java.util.Optional;
|
|||||||
version = "@MOD_VERSION@",
|
version = "@MOD_VERSION@",
|
||||||
acceptedMinecraftVersions = "@MC_VERSION@",
|
acceptedMinecraftVersions = "@MC_VERSION@",
|
||||||
acceptableRemoteVersions = "*",
|
acceptableRemoteVersions = "*",
|
||||||
|
//#if MC>=10800
|
||||||
clientSideOnly = true,
|
clientSideOnly = true,
|
||||||
|
//#endif
|
||||||
useMetadata = true)
|
useMetadata = true)
|
||||||
public class ReplayModExtras {
|
public class ReplayModExtras {
|
||||||
public static final String MOD_ID = "replaymod-extras";
|
public static final String MOD_ID = "replaymod-extras";
|
||||||
|
|||||||
@@ -6,9 +6,14 @@ import com.replaymod.replay.events.ReplayDispatchKeypressesEvent;
|
|||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.GuiControls;
|
import net.minecraft.client.gui.GuiControls;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
||||||
import org.lwjgl.input.Keyboard;
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
public class AdvancedScreenshots implements Extra {
|
public class AdvancedScreenshots implements Extra {
|
||||||
|
|
||||||
private ReplayMod mod;
|
private ReplayMod mod;
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.replaymod.extras.advancedscreenshots;
|
|||||||
import com.replaymod.render.RenderSettings;
|
import com.replaymod.render.RenderSettings;
|
||||||
import com.replaymod.render.blend.BlendState;
|
import com.replaymod.render.blend.BlendState;
|
||||||
import com.replaymod.render.capturer.RenderInfo;
|
import com.replaymod.render.capturer.RenderInfo;
|
||||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
|
||||||
import com.replaymod.render.rendering.Pipelines;
|
import com.replaymod.render.rendering.Pipelines;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
@@ -11,6 +10,10 @@ import net.minecraft.crash.CrashReport;
|
|||||||
import org.lwjgl.util.Dimension;
|
import org.lwjgl.util.Dimension;
|
||||||
import org.lwjgl.util.ReadableDimension;
|
import org.lwjgl.util.ReadableDimension;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||||
|
//#endif
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class ScreenshotRenderer implements RenderInfo {
|
public class ScreenshotRenderer implements RenderInfo {
|
||||||
|
|
||||||
@@ -18,6 +21,8 @@ public class ScreenshotRenderer implements RenderInfo {
|
|||||||
|
|
||||||
private final RenderSettings settings;
|
private final RenderSettings settings;
|
||||||
|
|
||||||
|
private int framesDone;
|
||||||
|
|
||||||
public boolean renderScreenshot() throws Throwable {
|
public boolean renderScreenshot() throws Throwable {
|
||||||
try {
|
try {
|
||||||
int displayWidthBefore = mc.displayWidth;
|
int displayWidthBefore = mc.displayWidth;
|
||||||
@@ -26,7 +31,9 @@ public class ScreenshotRenderer implements RenderInfo {
|
|||||||
boolean hideGUIBefore = mc.gameSettings.hideGUI;
|
boolean hideGUIBefore = mc.gameSettings.hideGUI;
|
||||||
mc.gameSettings.hideGUI = true;
|
mc.gameSettings.hideGUI = true;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
ChunkLoadingRenderGlobal clrg = new ChunkLoadingRenderGlobal(mc.renderGlobal);
|
ChunkLoadingRenderGlobal clrg = new ChunkLoadingRenderGlobal(mc.renderGlobal);
|
||||||
|
//#endif
|
||||||
|
|
||||||
if (settings.getRenderMethod() == RenderSettings.RenderMethod.BLEND) {
|
if (settings.getRenderMethod() == RenderSettings.RenderMethod.BLEND) {
|
||||||
BlendState.setState(new BlendState(settings.getOutputFile()));
|
BlendState.setState(new BlendState(settings.getOutputFile()));
|
||||||
@@ -36,7 +43,9 @@ public class ScreenshotRenderer implements RenderInfo {
|
|||||||
new ScreenshotWriter(settings.getOutputFile())).run();
|
new ScreenshotWriter(settings.getOutputFile())).run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
clrg.uninstall();
|
clrg.uninstall();
|
||||||
|
//#endif
|
||||||
|
|
||||||
mc.gameSettings.hideGUI = hideGUIBefore;
|
mc.gameSettings.hideGUI = hideGUIBefore;
|
||||||
mc.resize(displayWidthBefore, displayHeightBefore);
|
mc.resize(displayWidthBefore, displayHeightBefore);
|
||||||
@@ -54,6 +63,11 @@ public class ScreenshotRenderer implements RenderInfo {
|
|||||||
return new Dimension(settings.getVideoWidth(), settings.getVideoHeight());
|
return new Dimension(settings.getVideoWidth(), settings.getVideoHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getFramesDone() {
|
||||||
|
return framesDone;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTotalFrames() {
|
public int getTotalFrames() {
|
||||||
// render 2 frames, because only the second contains all frames fully loaded
|
// render 2 frames, because only the second contains all frames fully loaded
|
||||||
@@ -62,6 +76,7 @@ public class ScreenshotRenderer implements RenderInfo {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float updateForNextFrame() {
|
public float updateForNextFrame() {
|
||||||
|
framesDone++;
|
||||||
return mc.timer.renderPartialTicks;
|
return mc.timer.renderPartialTicks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.replaymod.extras.playeroverview;
|
package com.replaymod.extras.playeroverview;
|
||||||
|
|
||||||
import com.google.common.base.Optional;
|
import com.google.common.base.Optional;
|
||||||
import com.google.common.base.Predicate;
|
|
||||||
import com.replaymod.core.ReplayMod;
|
import com.replaymod.core.ReplayMod;
|
||||||
import com.replaymod.core.utils.Utils;
|
import com.replaymod.core.utils.Utils;
|
||||||
import com.replaymod.extras.Extra;
|
import com.replaymod.extras.Extra;
|
||||||
@@ -12,12 +11,20 @@ import com.replaymod.replay.events.ReplayOpenEvent;
|
|||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraftforge.client.event.RenderHandEvent;
|
import net.minecraftforge.client.event.RenderHandEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
||||||
import org.lwjgl.input.Keyboard;
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import com.google.common.base.Predicate;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.EventPriority;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//$$ import net.minecraftforge.client.event.RenderPlayerEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
|
||||||
@@ -36,12 +43,19 @@ public class PlayerOverview implements Extra {
|
|||||||
public void run() {
|
public void run() {
|
||||||
if (module.getReplayHandler() != null) {
|
if (module.getReplayHandler() != null) {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
//#if MC>=10800
|
||||||
List<EntityPlayer> players = world(mod.getMinecraft()).getPlayers(EntityPlayer.class, new Predicate() {
|
List<EntityPlayer> players = world(mod.getMinecraft()).getPlayers(EntityPlayer.class, new Predicate() {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Object input) {
|
public boolean apply(Object input) {
|
||||||
return !(input instanceof CameraEntity); // Exclude the camera entity
|
return !(input instanceof CameraEntity); // Exclude the camera entity
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
//#else
|
||||||
|
//$$ List<EntityPlayer> players = mod.getMinecraft().theWorld.playerEntities;
|
||||||
|
//$$ players = players.stream()
|
||||||
|
//$$ .filter(it -> !(it instanceof CameraEntity)) // Exclude the camera entity
|
||||||
|
//$$ .collect(Collectors.toList());
|
||||||
|
//#endif
|
||||||
if (!Utils.isCtrlDown()) {
|
if (!Utils.isCtrlDown()) {
|
||||||
// Hide all players that have an UUID v2 (commonly used for NPCs)
|
// Hide all players that have an UUID v2 (commonly used for NPCs)
|
||||||
Iterator<EntityPlayer> iter = players.iterator();
|
Iterator<EntityPlayer> iter = players.iterator();
|
||||||
@@ -91,12 +105,22 @@ public class PlayerOverview implements Extra {
|
|||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void oRenderHand(RenderHandEvent event) {
|
public void oRenderHand(RenderHandEvent event) {
|
||||||
Entity view = module.getCore().getMinecraft().getRenderViewEntity();
|
Entity view = getRenderViewEntity(module.getCore().getMinecraft());
|
||||||
if (view != null && isHidden(view.getUniqueID())) {
|
if (view != null && isHidden(view.getUniqueID())) {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See MixinRender for why this is 1.7.10 only
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ @SubscribeEvent(priority = EventPriority.HIGHEST)
|
||||||
|
//$$ public void preRenderPlayer(RenderPlayerEvent.Pre event) {
|
||||||
|
//$$ if (isHidden(event.entityPlayer.getUniqueID())) {
|
||||||
|
//$$ event.setCanceled(true);
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
|
|
||||||
public boolean isSavingEnabled() {
|
public boolean isSavingEnabled() {
|
||||||
return savingEnabled;
|
return savingEnabled;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
|||||||
import de.johni0702.minecraft.gui.utils.Colors;
|
import de.johni0702.minecraft.gui.utils.Colors;
|
||||||
import net.minecraft.client.audio.PositionedSoundRecord;
|
import net.minecraft.client.audio.PositionedSoundRecord;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.entity.player.EnumPlayerModelParts;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import org.lwjgl.util.Dimension;
|
import org.lwjgl.util.Dimension;
|
||||||
import org.lwjgl.util.ReadableDimension;
|
import org.lwjgl.util.ReadableDimension;
|
||||||
@@ -32,6 +31,10 @@ import net.minecraft.init.SoundEvents;
|
|||||||
//$$ import net.minecraft.potion.Potion;
|
//$$ import net.minecraft.potion.Potion;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraft.entity.player.EnumPlayerModelParts;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -55,7 +58,11 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable {
|
|||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F));
|
getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F));
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(BUTTON_SOUND, 1.0F));
|
//$$ getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(BUTTON_SOUND, 1.0F));
|
||||||
|
//#else
|
||||||
|
//$$ getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.createPositionedSoundRecord(BUTTON_SOUND, 1.0F));
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
playersScrollable.forEach(IGuiCheckbox.class).setChecked(true);
|
playersScrollable.forEach(IGuiCheckbox.class).setChecked(true);
|
||||||
}
|
}
|
||||||
@@ -66,7 +73,11 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable {
|
|||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F));
|
getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F));
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(BUTTON_SOUND, 1.0F));
|
//$$ getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(BUTTON_SOUND, 1.0F));
|
||||||
|
//#else
|
||||||
|
//$$ getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.createPositionedSoundRecord(BUTTON_SOUND, 1.0F));
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
playersScrollable.forEach(IGuiCheckbox.class).setChecked(false);
|
playersScrollable.forEach(IGuiCheckbox.class).setChecked(false);
|
||||||
}
|
}
|
||||||
@@ -113,13 +124,23 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable {
|
|||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
if (p.isWearing(EnumPlayerModelParts.HAT)) {
|
if (p.isWearing(EnumPlayerModelParts.HAT)) {
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ if (p.func_175148_a(EnumPlayerModelParts.HAT)) {
|
//$$ if (p.func_175148_a(EnumPlayerModelParts.HAT)) {
|
||||||
|
//#else
|
||||||
|
//$$ {
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
renderer.drawTexturedRect(0, 0, 40, 8, size.getWidth(), size.getHeight(), 8, 8, 64, 64);
|
renderer.drawTexturedRect(0, 0, 40, 8, size.getWidth(), size.getHeight(), 8, 8, 64, 64);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.setSize(16, 16),
|
}.setSize(16, 16),
|
||||||
new GuiLabel().setText(p.getName()).setColor(isSpectator(p) ? Colors.DKGREY : Colors.WHITE)
|
new GuiLabel().setText(
|
||||||
|
//#if MC>=10800
|
||||||
|
p.getName()
|
||||||
|
//#else
|
||||||
|
//$$ p.getDisplayName()
|
||||||
|
//#endif
|
||||||
|
).setColor(isSpectator(p) ? Colors.DKGREY : Colors.WHITE)
|
||||||
).onClick(new Runnable() {
|
).onClick(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -175,7 +196,11 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable {
|
|||||||
public int compare(EntityPlayer o1, EntityPlayer o2) {
|
public int compare(EntityPlayer o1, EntityPlayer o2) {
|
||||||
if (isSpectator(o1) && !isSpectator(o2)) return 1;
|
if (isSpectator(o1) && !isSpectator(o2)) return 1;
|
||||||
if (isSpectator(o2) && !isSpectator(o1)) return -1;
|
if (isSpectator(o2) && !isSpectator(o1)) return -1;
|
||||||
|
//#if MC>=10800
|
||||||
return o1.getName().compareToIgnoreCase(o2.getName());
|
return o1.getName().compareToIgnoreCase(o2.getName());
|
||||||
|
//#else
|
||||||
|
//$$ return o1.getDisplayName().compareToIgnoreCase(o2.getDisplayName());
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,14 +2,19 @@ package com.replaymod.extras.playeroverview.mixin;
|
|||||||
|
|
||||||
import com.replaymod.extras.ReplayModExtras;
|
import com.replaymod.extras.ReplayModExtras;
|
||||||
import com.replaymod.extras.playeroverview.PlayerOverview;
|
import com.replaymod.extras.playeroverview.PlayerOverview;
|
||||||
import net.minecraft.client.renderer.culling.ICamera;
|
|
||||||
import net.minecraft.client.renderer.entity.Render;
|
import net.minecraft.client.renderer.entity.Render;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraft.client.renderer.culling.ICamera;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
//#else
|
||||||
|
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
//#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This mixin prevents players that are hidden in the PlayerOverview from being rendered.
|
* This mixin prevents players that are hidden in the PlayerOverview from being rendered.
|
||||||
@@ -23,9 +28,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|||||||
* One example of the previous solution breaking is when used with VanillaEnhancements because it replaces the
|
* One example of the previous solution breaking is when used with VanillaEnhancements because it replaces the
|
||||||
* RenderManager with a new custom one which in turn will reset our registered RenderPlayer instances because
|
* RenderManager with a new custom one which in turn will reset our registered RenderPlayer instances because
|
||||||
* it does so after we have already registered with the old RenderManager.
|
* it does so after we have already registered with the old RenderManager.
|
||||||
|
*
|
||||||
|
* For 1.7.10, that method doesn't exist, so we use a combination of the event and inject into
|
||||||
*/
|
*/
|
||||||
@Mixin(value = Render.class, priority = 1200)
|
@Mixin(value = Render.class, priority = 1200)
|
||||||
public abstract class MixinRender {
|
public abstract class MixinRender {
|
||||||
|
//#if MC>=10800
|
||||||
@Inject(method = "shouldRender", at=@At("HEAD"), cancellable = true)
|
@Inject(method = "shouldRender", at=@At("HEAD"), cancellable = true)
|
||||||
public void replayModExtras_isPlayerHidden(Entity entity, ICamera camera, double camX, double camY, double camZ, CallbackInfoReturnable<Boolean> ci) {
|
public void replayModExtras_isPlayerHidden(Entity entity, ICamera camera, double camX, double camY, double camZ, CallbackInfoReturnable<Boolean> ci) {
|
||||||
ReplayModExtras.instance.get(PlayerOverview.class).ifPresent(playerOverview -> {
|
ReplayModExtras.instance.get(PlayerOverview.class).ifPresent(playerOverview -> {
|
||||||
@@ -37,4 +45,17 @@ public abstract class MixinRender {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
//#else
|
||||||
|
//$$ @Inject(method = "doRenderShadowAndFire", at=@At("HEAD"), cancellable = true)
|
||||||
|
//$$ private void replayModExtras_isPlayerHidden(Entity entity, double x, double y, double z, float yaw, float time, CallbackInfo ci) {
|
||||||
|
//$$ ReplayModExtras.instance.get(PlayerOverview.class).ifPresent(playerOverview -> {
|
||||||
|
//$$ if (entity instanceof EntityPlayer) {
|
||||||
|
//$$ EntityPlayer player = (EntityPlayer) entity;
|
||||||
|
//$$ if (playerOverview.isHidden(player.getUniqueID())) {
|
||||||
|
//$$ ci.cancel();
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ });
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,12 @@ import de.johni0702.minecraft.gui.container.GuiScreen;
|
|||||||
import de.johni0702.minecraft.gui.element.GuiButton;
|
import de.johni0702.minecraft.gui.element.GuiButton;
|
||||||
import net.minecraftforge.client.event.GuiScreenEvent;
|
import net.minecraftforge.client.event.GuiScreenEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,21 @@ import com.replaymod.replaystudio.replay.ZipReplayFile;
|
|||||||
import com.replaymod.replaystudio.studio.ReplayStudio;
|
import com.replaymod.replaystudio.studio.ReplayStudio;
|
||||||
import de.johni0702.minecraft.gui.container.GuiScreen;
|
import de.johni0702.minecraft.gui.container.GuiScreen;
|
||||||
import net.minecraftforge.common.config.Configuration;
|
import net.minecraftforge.common.config.Configuration;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import org.apache.logging.log4j.Logger;
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.Mod;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -30,7 +39,9 @@ import static net.minecraft.client.Minecraft.getMinecraft;
|
|||||||
version = "@MOD_VERSION@",
|
version = "@MOD_VERSION@",
|
||||||
acceptedMinecraftVersions = "@MC_VERSION@",
|
acceptedMinecraftVersions = "@MC_VERSION@",
|
||||||
acceptableRemoteVersions = "*",
|
acceptableRemoteVersions = "*",
|
||||||
|
//#if MC>=10800
|
||||||
clientSideOnly = true,
|
clientSideOnly = true,
|
||||||
|
//#endif
|
||||||
useMetadata = true)
|
useMetadata = true)
|
||||||
public class ReplayModOnline {
|
public class ReplayModOnline {
|
||||||
public static final String MOD_ID = "replaymod-online";
|
public static final String MOD_ID = "replaymod-online";
|
||||||
|
|||||||
@@ -13,8 +13,12 @@ import net.minecraft.client.gui.GuiButton;
|
|||||||
import net.minecraft.client.gui.GuiMainMenu;
|
import net.minecraft.client.gui.GuiMainMenu;
|
||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
import net.minecraftforge.client.event.GuiScreenEvent;
|
import net.minecraftforge.client.event.GuiScreenEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,12 @@ import com.replaymod.replaystudio.pathing.path.Keyframe;
|
|||||||
import com.replaymod.replaystudio.pathing.path.Path;
|
import com.replaymod.replaystudio.pathing.path.Path;
|
||||||
import com.replaymod.replaystudio.pathing.path.Timeline;
|
import com.replaymod.replaystudio.pathing.path.Timeline;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|||||||
@@ -4,6 +4,10 @@ import com.google.common.util.concurrent.ListenableFuture;
|
|||||||
import com.replaymod.replay.ReplayHandler;
|
import com.replaymod.replay.ReplayHandler;
|
||||||
import com.replaymod.replaystudio.pathing.path.Timeline;
|
import com.replaymod.replaystudio.pathing.path.Timeline;
|
||||||
|
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Timeline player using the system time.
|
* Timeline player using the system time.
|
||||||
*/
|
*/
|
||||||
@@ -32,6 +36,9 @@ public class RealtimeTimelinePlayer extends AbstractTimelinePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ @SubscribeEvent
|
||||||
|
//#endif
|
||||||
public void onTick(ReplayTimer.UpdatedEvent event) {
|
public void onTick(ReplayTimer.UpdatedEvent event) {
|
||||||
if (secondFrame) {
|
if (secondFrame) {
|
||||||
secondFrame = false;
|
secondFrame = false;
|
||||||
|
|||||||
@@ -2,7 +2,12 @@ package com.replaymod.pathing.player;
|
|||||||
|
|
||||||
import com.replaymod.core.utils.WrappedTimer;
|
import com.replaymod.core.utils.WrappedTimer;
|
||||||
import net.minecraft.util.Timer;
|
import net.minecraft.util.Timer;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
import net.minecraftforge.fml.common.eventhandler.Event;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.Event;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import com.replaymod.replaystudio.pathing.property.PropertyPart;
|
|||||||
import com.replaymod.replaystudio.pathing.property.PropertyParts;
|
import com.replaymod.replaystudio.pathing.property.PropertyParts;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -36,7 +37,13 @@ public class SpectatorProperty extends AbstractProperty<Integer> {
|
|||||||
// Lookup entity by id, returns null if an entity with the id does not exists
|
// Lookup entity by id, returns null if an entity with the id does not exists
|
||||||
Entity target = world.getEntityByID(value);
|
Entity target = world.getEntityByID(value);
|
||||||
// Spectate entity, when called with null, returns to camera
|
// Spectate entity, when called with null, returns to camera
|
||||||
|
//#if MC>=10800
|
||||||
handler.spectateEntity(target);
|
handler.spectateEntity(target);
|
||||||
|
//#else
|
||||||
|
//$$ if (target instanceof EntityLivingBase) {
|
||||||
|
//$$ handler.spectateEntity(((EntityLivingBase) target));
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -8,13 +8,22 @@ import com.replaymod.recording.packet.PacketListener;
|
|||||||
import io.netty.channel.ChannelDuplexHandler;
|
import io.netty.channel.ChannelDuplexHandler;
|
||||||
import io.netty.channel.ChannelHandler;
|
import io.netty.channel.ChannelHandler;
|
||||||
import net.minecraft.network.NetworkManager;
|
import net.minecraft.network.NetworkManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.EventBus;
|
import net.minecraftforge.fml.common.eventhandler.EventBus;
|
||||||
import net.minecraftforge.fml.common.network.NetworkRegistry;
|
import net.minecraftforge.fml.common.network.NetworkRegistry;
|
||||||
import org.apache.logging.log4j.Logger;
|
//#else
|
||||||
import org.lwjgl.input.Keyboard;
|
//$$ import cpw.mods.fml.common.Mod;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.EventBus;
|
||||||
|
//$$ import cpw.mods.fml.common.network.NetworkRegistry;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
|
||||||
@@ -22,7 +31,9 @@ import static com.replaymod.core.versions.MCVer.*;
|
|||||||
version = "@MOD_VERSION@",
|
version = "@MOD_VERSION@",
|
||||||
acceptedMinecraftVersions = "@MC_VERSION@",
|
acceptedMinecraftVersions = "@MC_VERSION@",
|
||||||
acceptableRemoteVersions = "*",
|
acceptableRemoteVersions = "*",
|
||||||
|
//#if MC>=10800
|
||||||
clientSideOnly = true,
|
clientSideOnly = true,
|
||||||
|
//#endif
|
||||||
useMetadata = true)
|
useMetadata = true)
|
||||||
public class ReplayModRecording {
|
public class ReplayModRecording {
|
||||||
public static final String MOD_ID = "replaymod-recording";
|
public static final String MOD_ID = "replaymod-recording";
|
||||||
|
|||||||
@@ -5,16 +5,20 @@ import com.replaymod.recording.Setting;
|
|||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.FontRenderer;
|
import net.minecraft.client.gui.FontRenderer;
|
||||||
import net.minecraft.client.gui.Gui;
|
import net.minecraft.client.gui.Gui;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
|
||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import static com.replaymod.core.ReplayMod.TEXTURE;
|
import static com.replaymod.core.ReplayMod.TEXTURE;
|
||||||
import static com.replaymod.core.ReplayMod.TEXTURE_SIZE;
|
import static com.replaymod.core.ReplayMod.TEXTURE_SIZE;
|
||||||
import static com.replaymod.core.versions.MCVer.getFontRenderer;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
import static com.replaymod.core.versions.MCVer.getType;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders overlay during recording.
|
* Renders overlay during recording.
|
||||||
|
|||||||
@@ -12,16 +12,22 @@ import com.replaymod.replaystudio.replay.ZipReplayFile;
|
|||||||
import com.replaymod.replaystudio.studio.ReplayStudio;
|
import com.replaymod.replaystudio.studio.ReplayStudio;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.network.NetworkManager;
|
import net.minecraft.network.NetworkManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientDisconnectionFromServerEvent;
|
import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientDisconnectionFromServerEvent;
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
|
import static com.replaymod.core.versions.MCVer.WorldType_DEBUG_ALL_BLOCK_STATES;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.network.FMLNetworkEvent.ClientDisconnectionFromServerEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.WorldType_DEBUG_ALL_BLOCK_STATES;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles connection events and initiates recording if enabled.
|
* Handles connection events and initiates recording if enabled.
|
||||||
*/
|
*/
|
||||||
@@ -48,10 +54,12 @@ public class ConnectionEventHandler {
|
|||||||
try {
|
try {
|
||||||
boolean local = networkManager.isLocalChannel();
|
boolean local = networkManager.isLocalChannel();
|
||||||
if (local) {
|
if (local) {
|
||||||
|
//#if MC>=10800
|
||||||
if (mc.getIntegratedServer().getEntityWorld().getWorldType() == WorldType_DEBUG_ALL_BLOCK_STATES) {
|
if (mc.getIntegratedServer().getEntityWorld().getWorldType() == WorldType_DEBUG_ALL_BLOCK_STATES) {
|
||||||
logger.info("Debug World recording is not supported.");
|
logger.info("Debug World recording is not supported.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
if(!core.getSettingsRegistry().get(Setting.RECORD_SINGLEPLAYER)) {
|
if(!core.getSettingsRegistry().get(Setting.RECORD_SINGLEPLAYER)) {
|
||||||
logger.info("Singleplayer Recording is disabled");
|
logger.info("Singleplayer Recording is disabled");
|
||||||
return;
|
return;
|
||||||
@@ -102,7 +110,7 @@ public class ConnectionEventHandler {
|
|||||||
guiOverlay.register();
|
guiOverlay.register();
|
||||||
|
|
||||||
core.printInfoToChat("replaymod.chat.recordingstarted");
|
core.printInfoToChat("replaymod.chat.recordingstarted");
|
||||||
} catch(Exception e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
core.printWarningToChat("replaymod.chat.recordingfailed");
|
core.printWarningToChat("replaymod.chat.recordingfailed");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,12 @@ package com.replaymod.recording.handler;
|
|||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.channel.SimpleChannelInboundHandler;
|
import io.netty.channel.SimpleChannelInboundHandler;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.network.handshake.FMLHandshakeMessage;
|
import net.minecraftforge.fml.common.network.handshake.FMLHandshakeMessage;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.network.handshake.FMLHandshakeMessage;
|
||||||
|
//#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters out all handshake packets that were sent for recording but must
|
* Filters out all handshake packets that were sent for recording but must
|
||||||
@@ -17,7 +22,11 @@ import net.minecraftforge.fml.common.network.handshake.FMLHandshakeMessage;
|
|||||||
public class FMLHandshakeFilter extends SimpleChannelInboundHandler<FMLHandshakeMessage> {
|
public class FMLHandshakeFilter extends SimpleChannelInboundHandler<FMLHandshakeMessage> {
|
||||||
@Override
|
@Override
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, FMLHandshakeMessage msg) throws Exception {
|
protected void channelRead0(ChannelHandlerContext ctx, FMLHandshakeMessage msg) throws Exception {
|
||||||
|
//#if MC>=10800
|
||||||
if (!(msg instanceof FMLHandshakeMessage.RegistryData)) {
|
if (!(msg instanceof FMLHandshakeMessage.RegistryData)) {
|
||||||
|
//#else
|
||||||
|
//$$ if (!(msg instanceof FMLHandshakeMessage.ModIdData)) {
|
||||||
|
//#endif
|
||||||
// Pass on everything but RegistryData messages
|
// Pass on everything but RegistryData messages
|
||||||
ctx.fireChannelRead(msg);
|
ctx.fireChannelRead(msg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,12 @@ import net.minecraft.client.gui.GuiWorldSelection;
|
|||||||
//#endif
|
//#endif
|
||||||
import net.minecraftforge.client.event.GuiScreenEvent;
|
import net.minecraftforge.client.event.GuiScreenEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.getGui;
|
import static com.replaymod.core.versions.MCVer.getGui;
|
||||||
|
|
||||||
|
|||||||
@@ -7,13 +7,8 @@ import net.minecraft.item.ItemStack;
|
|||||||
import net.minecraft.network.Packet;
|
import net.minecraft.network.Packet;
|
||||||
import net.minecraft.network.play.server.*;
|
import net.minecraft.network.play.server.*;
|
||||||
import net.minecraft.server.integrated.IntegratedServer;
|
import net.minecraft.server.integrated.IntegratedServer;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
import net.minecraftforge.event.entity.minecart.MinecartInteractEvent;
|
import net.minecraftforge.event.entity.minecart.MinecartInteractEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
|
import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
||||||
import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
|
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent;
|
|
||||||
|
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
import net.minecraft.entity.EntityLiving;
|
import net.minecraft.entity.EntityLiving;
|
||||||
@@ -24,8 +19,22 @@ import net.minecraft.util.SoundCategory;
|
|||||||
import net.minecraft.util.SoundEvent;
|
import net.minecraft.util.SoundEvent;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ import net.minecraft.util.BlockPos;
|
//$$ import net.minecraft.util.BlockPos;
|
||||||
//#endif
|
//#endif
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
|
||||||
|
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||||
|
import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.gameevent.TickEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.gameevent.TickEvent.PlayerTickEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -85,6 +94,7 @@ public class RecordingEventHandler {
|
|||||||
//#else
|
//#else
|
||||||
//$$ packetListener.save(new S0CPacketSpawnPlayer(player(mc)));
|
//$$ packetListener.save(new S0CPacketSpawnPlayer(player(mc)));
|
||||||
//#endif
|
//#endif
|
||||||
|
lastX = lastY = lastZ = null;
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -143,7 +153,18 @@ public class RecordingEventHandler {
|
|||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
packet = new SPacketEntityTeleport(e.player);
|
packet = new SPacketEntityTeleport(e.player);
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ packet = new S18PacketEntityTeleport(e.player);
|
//$$ packet = new S18PacketEntityTeleport(e.player);
|
||||||
|
//#else
|
||||||
|
//$$ // In 1.7.10 the client player entity has its posY at eye height
|
||||||
|
//$$ // but for all other entities it's at their feet (as it should be).
|
||||||
|
//$$ // So, to correctly position the player, we teleport them to their feet (i.a. directly after spawn).
|
||||||
|
//$$ // Note: this leaves the lastY value offset by the eye height but because it's only used for relative
|
||||||
|
//$$ // movement, that doesn't matter.
|
||||||
|
//$$ S18PacketEntityTeleport teleportPacket = new S18PacketEntityTeleport(e.player);
|
||||||
|
//$$ teleportPacket.field_149457_c = floor(e.player.boundingBox.minY * 32);
|
||||||
|
//$$ packet = teleportPacket;
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
} else {
|
} else {
|
||||||
byte newYaw = (byte) ((int) (e.player.rotationYaw * 256.0F / 360.0F));
|
byte newYaw = (byte) ((int) (e.player.rotationYaw * 256.0F / 360.0F));
|
||||||
@@ -156,7 +177,11 @@ public class RecordingEventHandler {
|
|||||||
//#else
|
//#else
|
||||||
//$$ packet = new S14PacketEntity.S17PacketEntityLookMove(e.player.getEntityId(),
|
//$$ packet = new S14PacketEntity.S17PacketEntityLookMove(e.player.getEntityId(),
|
||||||
//$$ (byte) Math.round(dx * 32), (byte) Math.round(dy * 32), (byte) Math.round(dz * 32),
|
//$$ (byte) Math.round(dx * 32), (byte) Math.round(dy * 32), (byte) Math.round(dz * 32),
|
||||||
//$$ newYaw, newPitch, e.player.onGround);
|
//$$ newYaw, newPitch
|
||||||
|
//#if MC>=10800
|
||||||
|
//$$ , e.player.onGround
|
||||||
|
//#endif
|
||||||
|
//$$ );
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -353,7 +378,13 @@ public class RecordingEventHandler {
|
|||||||
//$$ return;
|
//$$ return;
|
||||||
//$$ }
|
//$$ }
|
||||||
//$$
|
//$$
|
||||||
//$$ packetListener.save(new S0APacketUseBed(event.entityPlayer, event.pos));
|
//$$ packetListener.save(new S0APacketUseBed(event.entityPlayer,
|
||||||
|
//#if MC>=10800
|
||||||
|
//$$ event.pos
|
||||||
|
//#else
|
||||||
|
//$$ event.x, event.y, event.z
|
||||||
|
//#endif
|
||||||
|
//$$ ));
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
wasSleeping = true;
|
wasSleeping = true;
|
||||||
@@ -388,13 +419,23 @@ public class RecordingEventHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
public void onBlockBreakAnim(int breakerId, BlockPos pos, int progress) {
|
public void onBlockBreakAnim(int breakerId, BlockPos pos, int progress) {
|
||||||
|
//#else
|
||||||
|
//$$ public void onBlockBreakAnim(int breakerId, int x, int y, int z, int progress) {
|
||||||
|
//#endif
|
||||||
EntityPlayer thePlayer = player(mc);
|
EntityPlayer thePlayer = player(mc);
|
||||||
if (thePlayer != null && breakerId == thePlayer.getEntityId()) {
|
if (thePlayer != null && breakerId == thePlayer.getEntityId()) {
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
packetListener.save(new SPacketBlockBreakAnim(breakerId, pos, progress));
|
packetListener.save(new SPacketBlockBreakAnim(breakerId, pos, progress));
|
||||||
//#else
|
//#else
|
||||||
//$$ packetListener.save(new S25PacketBlockBreakAnim(breakerId, pos, progress));
|
//$$ packetListener.save(new S25PacketBlockBreakAnim(breakerId,
|
||||||
|
//#if MC>=10800
|
||||||
|
//$$ pos,
|
||||||
|
//#else
|
||||||
|
//$$ x, y, z,
|
||||||
|
//#endif
|
||||||
|
//$$ progress));
|
||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
//#if MC<=10710
|
||||||
|
//$$ package com.replaymod.recording.mixin;
|
||||||
|
//$$
|
||||||
|
//$$ import de.johni0702.minecraft.gui.container.VanillaGuiScreen;
|
||||||
|
//$$ import net.minecraft.client.gui.GuiScreen;
|
||||||
|
//$$ import org.lwjgl.input.Keyboard;
|
||||||
|
//$$ import org.lwjgl.input.Mouse;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
//$$
|
||||||
|
//$$ import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
//$$
|
||||||
|
//$$ @Mixin(GuiScreen.class)
|
||||||
|
//$$ public abstract class MixinGuiScreen {
|
||||||
|
//$$
|
||||||
|
//$$ @Inject(method = "handleInput", at = @At("HEAD"), cancellable = true)
|
||||||
|
//$$ private void handleJGuiInput(CallbackInfo ci) {
|
||||||
|
//$$ ci.cancel();
|
||||||
|
//$$ if (Mouse.isCreated()) {
|
||||||
|
//$$ while (Mouse.next()) {
|
||||||
|
//$$ if (FORGE_BUS.post(new VanillaGuiScreen.MouseInputEvent())) {
|
||||||
|
//$$ continue;
|
||||||
|
//$$ }
|
||||||
|
//$$ handleMouseInput();
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ if (Keyboard.isCreated()) {
|
||||||
|
//$$ while (Keyboard.next()) {
|
||||||
|
//$$ if (FORGE_BUS.post(new VanillaGuiScreen.KeyboardInputEvent())) {
|
||||||
|
//$$ continue;
|
||||||
|
//$$ }
|
||||||
|
//$$ handleKeyboardInput();
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ @Shadow public abstract void handleMouseInput();
|
||||||
|
//$$
|
||||||
|
//$$ @Shadow public abstract void handleKeyboardInput();
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
@@ -9,20 +9,34 @@ import org.spongepowered.asm.mixin.injection.At;
|
|||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.network.FMLNetworkEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.network.FMLNetworkEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
@Mixin(NetHandlerLoginClient.class)
|
@Mixin(NetHandlerLoginClient.class)
|
||||||
public abstract class MixinNetHandlerLoginClient {
|
public abstract class MixinNetHandlerLoginClient {
|
||||||
|
|
||||||
@Shadow
|
@Shadow
|
||||||
|
//#if MC>=10800
|
||||||
private NetworkManager networkManager;
|
private NetworkManager networkManager;
|
||||||
|
//#else
|
||||||
|
//$$ private NetworkManager field_147393_d;
|
||||||
|
//#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts the recording right before switching into PLAY state.
|
* Starts the recording right before switching into PLAY state.
|
||||||
* We cannot use the {@link net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientConnectedToServerEvent}
|
* We cannot use the {@link FMLNetworkEvent.ClientConnectedToServerEvent}
|
||||||
* as it only fires after the forge handshake.
|
* as it only fires after the forge handshake.
|
||||||
*/
|
*/
|
||||||
@Inject(method = "handleLoginSuccess", at=@At("HEAD"))
|
@Inject(method = "handleLoginSuccess", at=@At("HEAD"))
|
||||||
public void replayModRecording_initiateRecording(CallbackInfo cb) {
|
public void replayModRecording_initiateRecording(CallbackInfo cb) {
|
||||||
|
//#if MC>=10800
|
||||||
ReplayModRecording.instance.initiateRecording(networkManager);
|
ReplayModRecording.instance.initiateRecording(networkManager);
|
||||||
|
//#else
|
||||||
|
//$$ ReplayModRecording.instance.initiateRecording(field_147393_d);
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//#if MC>=11200
|
//#if MC>=11200
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.replaymod.recording.mixin;
|
|||||||
import com.replaymod.recording.handler.RecordingEventHandler;
|
import com.replaymod.recording.handler.RecordingEventHandler;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.network.NetHandlerPlayClient;
|
import net.minecraft.client.network.NetHandlerPlayClient;
|
||||||
import net.minecraft.client.network.NetworkPlayerInfo;
|
|
||||||
import net.minecraft.network.play.server.*;
|
import net.minecraft.network.play.server.*;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
@@ -11,6 +10,7 @@ import org.spongepowered.asm.mixin.injection.At;
|
|||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
import net.minecraft.network.play.server.SPacketPlayerListItem.Action;
|
import net.minecraft.network.play.server.SPacketPlayerListItem.Action;
|
||||||
import net.minecraft.network.play.server.SPacketPlayerListItem.AddPlayerData;
|
import net.minecraft.network.play.server.SPacketPlayerListItem.AddPlayerData;
|
||||||
@@ -18,13 +18,14 @@ import net.minecraft.network.play.server.SPacketPlayerListItem.AddPlayerData;
|
|||||||
//$$ import net.minecraft.network.play.server.S38PacketPlayerListItem.Action;
|
//$$ import net.minecraft.network.play.server.S38PacketPlayerListItem.Action;
|
||||||
//$$ import net.minecraft.network.play.server.S38PacketPlayerListItem.AddPlayerData;
|
//$$ import net.minecraft.network.play.server.S38PacketPlayerListItem.AddPlayerData;
|
||||||
//#endif
|
//#endif
|
||||||
|
import net.minecraft.client.network.NetworkPlayerInfo;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
//#endif
|
||||||
|
|
||||||
@Mixin(NetHandlerPlayClient.class)
|
@Mixin(NetHandlerPlayClient.class)
|
||||||
public abstract class MixinNetHandlerPlayClient {
|
public abstract class MixinNetHandlerPlayClient {
|
||||||
@@ -32,8 +33,10 @@ public abstract class MixinNetHandlerPlayClient {
|
|||||||
@Shadow
|
@Shadow
|
||||||
private Minecraft gameController;
|
private Minecraft gameController;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Shadow
|
@Shadow
|
||||||
private Map<UUID, NetworkPlayerInfo> playerInfoMap;
|
private Map<UUID, NetworkPlayerInfo> playerInfoMap;
|
||||||
|
//#endif
|
||||||
|
|
||||||
public RecordingEventHandler getRecordingEventHandler() {
|
public RecordingEventHandler getRecordingEventHandler() {
|
||||||
return ((RecordingEventHandler.RecordingEventSender) gameController.renderGlobal).getRecordingEventHandler();
|
return ((RecordingEventHandler.RecordingEventSender) gameController.renderGlobal).getRecordingEventHandler();
|
||||||
@@ -46,6 +49,7 @@ public abstract class MixinNetHandlerPlayClient {
|
|||||||
* @param packet The packet
|
* @param packet The packet
|
||||||
* @param ci Callback info
|
* @param ci Callback info
|
||||||
*/
|
*/
|
||||||
|
//#if MC>=10800
|
||||||
@Inject(method = "handlePlayerListItem", at=@At("HEAD"))
|
@Inject(method = "handlePlayerListItem", at=@At("HEAD"))
|
||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
@@ -86,6 +90,15 @@ public abstract class MixinNetHandlerPlayClient {
|
|||||||
//$$ }
|
//$$ }
|
||||||
//$$ }
|
//$$ }
|
||||||
//#endif
|
//#endif
|
||||||
|
//#else
|
||||||
|
//$$ @Inject(method = "handleJoinGame", at=@At("RETURN"))
|
||||||
|
//$$ public void recordOwnJoin(S01PacketJoinGame packet, CallbackInfo ci) {
|
||||||
|
//$$ RecordingEventHandler handler = getRecordingEventHandler();
|
||||||
|
//$$ if (handler != null) {
|
||||||
|
//$$ handler.onPlayerJoin();
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Record the own player entity respawning.
|
* Record the own player entity respawning.
|
||||||
|
|||||||
@@ -3,9 +3,6 @@ package com.replaymod.recording.mixin;
|
|||||||
import com.replaymod.recording.handler.FMLHandshakeFilter;
|
import com.replaymod.recording.handler.FMLHandshakeFilter;
|
||||||
import io.netty.channel.ChannelPipeline;
|
import io.netty.channel.ChannelPipeline;
|
||||||
import io.netty.channel.embedded.EmbeddedChannel;
|
import io.netty.channel.embedded.EmbeddedChannel;
|
||||||
import net.minecraftforge.fml.common.network.handshake.FMLHandshakeCodec;
|
|
||||||
import net.minecraftforge.fml.common.network.handshake.NetworkDispatcher;
|
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
@@ -19,6 +16,16 @@ import net.minecraft.network.NetworkManager;
|
|||||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.network.handshake.FMLHandshakeCodec;
|
||||||
|
import net.minecraftforge.fml.common.network.handshake.NetworkDispatcher;
|
||||||
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.network.handshake.FMLHandshakeCodec;
|
||||||
|
//$$ import cpw.mods.fml.common.network.handshake.NetworkDispatcher;
|
||||||
|
//$$ import cpw.mods.fml.relauncher.Side;
|
||||||
|
//#endif
|
||||||
|
|
||||||
@Mixin(value = NetworkDispatcher.class, remap = false)
|
@Mixin(value = NetworkDispatcher.class, remap = false)
|
||||||
public abstract class MixinNetworkDispatcher {
|
public abstract class MixinNetworkDispatcher {
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ import net.minecraft.util.BlockPos;
|
//$$ import net.minecraft.util.BlockPos;
|
||||||
//#endif
|
//#endif
|
||||||
|
//#endif
|
||||||
|
|
||||||
@Mixin(RenderGlobal.class)
|
@Mixin(RenderGlobal.class)
|
||||||
public abstract class MixinRenderGlobal implements RecordingEventHandler.RecordingEventSender {
|
public abstract class MixinRenderGlobal implements RecordingEventHandler.RecordingEventSender {
|
||||||
@@ -28,10 +30,26 @@ public abstract class MixinRenderGlobal implements RecordingEventHandler.Recordi
|
|||||||
return recordingEventHandler;
|
return recordingEventHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Inject(method = "sendBlockBreakProgress", at = @At("HEAD"))
|
@Inject(method = "sendBlockBreakProgress", at = @At("HEAD"))
|
||||||
public void saveBlockBreakProgressPacket(int breakerId, BlockPos pos, int progress, CallbackInfo info) {
|
//#else
|
||||||
|
//$$ @Inject(method = "destroyBlockPartially", at = @At("HEAD"))
|
||||||
|
//#endif
|
||||||
|
public void saveBlockBreakProgressPacket(int breakerId,
|
||||||
|
//#if MC>=10800
|
||||||
|
BlockPos pos,
|
||||||
|
//#else
|
||||||
|
//$$ int x, int y, int z,
|
||||||
|
//#endif
|
||||||
|
int progress, CallbackInfo info) {
|
||||||
if (recordingEventHandler != null) {
|
if (recordingEventHandler != null) {
|
||||||
recordingEventHandler.onBlockBreakAnim(breakerId, pos, progress);
|
recordingEventHandler.onBlockBreakAnim(breakerId,
|
||||||
|
//#if MC>=10800
|
||||||
|
pos,
|
||||||
|
//#else
|
||||||
|
//$$ x, y, z,
|
||||||
|
//#endif
|
||||||
|
progress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
//#if MC<=10710
|
||||||
|
//$$ package com.replaymod.recording.mixin;
|
||||||
|
//$$
|
||||||
|
//$$ import net.minecraft.network.PacketBuffer;
|
||||||
|
//$$ import net.minecraft.network.play.server.S21PacketChunkData;
|
||||||
|
//$$ import net.minecraft.network.play.server.S26PacketMapChunkBulk;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
//$$
|
||||||
|
//$$ import java.util.concurrent.Semaphore;
|
||||||
|
//$$
|
||||||
|
//$$ @Mixin({ S21PacketChunkData.class, S26PacketMapChunkBulk.class })
|
||||||
|
//$$ public abstract class MixinS26PacketMapChunkBulk {
|
||||||
|
//$$
|
||||||
|
//$$ private byte[] rawData;
|
||||||
|
//$$
|
||||||
|
//$$ @Shadow(remap = false)
|
||||||
|
//$$ private Semaphore deflateGate;
|
||||||
|
//$$
|
||||||
|
//$$ @Inject(method = "readPacketData", at = @At("HEAD"))
|
||||||
|
//$$ private void replayModRecording_readRawPacketData(PacketBuffer data, CallbackInfo ci) {
|
||||||
|
//$$ int readerIndex = data.readerIndex();
|
||||||
|
//$$ data.readBytes(rawData = new byte[data.readableBytes()]);
|
||||||
|
//$$ data.readerIndex(readerIndex);
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ @Inject(method = "writePacketData", at = @At("HEAD"), cancellable = true)
|
||||||
|
//$$ private void replayModRecording_writePacketData(PacketBuffer data, CallbackInfo ci) {
|
||||||
|
//$$ if (rawData != null && deflateGate == null) {
|
||||||
|
//$$ data.writeBytes(rawData);
|
||||||
|
//$$ ci.cancel();
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
@@ -11,11 +11,9 @@ import io.netty.channel.ChannelInboundHandlerAdapter;
|
|||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.network.EnumConnectionState;
|
import net.minecraft.network.EnumConnectionState;
|
||||||
import net.minecraft.network.EnumPacketDirection;
|
|
||||||
import net.minecraft.network.Packet;
|
import net.minecraft.network.Packet;
|
||||||
import net.minecraft.network.PacketBuffer;
|
import net.minecraft.network.PacketBuffer;
|
||||||
import net.minecraft.network.play.server.*;
|
import net.minecraft.network.play.server.*;
|
||||||
import net.minecraftforge.fml.common.network.internal.FMLProxyPacket;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
@@ -29,6 +27,13 @@ import net.minecraft.util.text.TextComponentString;
|
|||||||
//$$ import java.util.List;
|
//$$ import java.util.List;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraft.network.EnumPacketDirection;
|
||||||
|
import net.minecraftforge.fml.common.network.internal.FMLProxyPacket;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.network.internal.FMLProxyPacket;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -105,7 +110,11 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
|||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
//$$ UUID uuid = ((S0CPacketSpawnPlayer) packet).getPlayer();
|
//$$ UUID uuid = ((S0CPacketSpawnPlayer) packet).getPlayer();
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ UUID uuid = ((S0CPacketSpawnPlayer) packet).func_179819_c();
|
//$$ UUID uuid = ((S0CPacketSpawnPlayer) packet).func_179819_c();
|
||||||
|
//#else
|
||||||
|
//$$ UUID uuid = ((S0CPacketSpawnPlayer) packet).field_148955_b.getId();
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
Set<String> uuids = new HashSet<>(Arrays.asList(metaData.getPlayers()));
|
Set<String> uuids = new HashSet<>(Arrays.asList(metaData.getPlayers()));
|
||||||
@@ -114,10 +123,12 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
|||||||
saveMetaData();
|
saveMetaData();
|
||||||
}
|
}
|
||||||
//#if MC<10904
|
//#if MC<10904
|
||||||
|
//#if MC>=10800
|
||||||
//$$ if (packet instanceof S46PacketSetCompressionLevel) {
|
//$$ if (packet instanceof S46PacketSetCompressionLevel) {
|
||||||
//$$ return; // Replay data is never compressed on the packet level
|
//$$ return; // Replay data is never compressed on the packet level
|
||||||
//$$ }
|
//$$ }
|
||||||
//#endif
|
//#endif
|
||||||
|
//#endif
|
||||||
|
|
||||||
byte[] bytes = getPacketData(packet);
|
byte[] bytes = getPacketData(packet);
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
@@ -199,16 +210,32 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
|||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
if (packet instanceof SPacketResourcePackSend) {
|
if (packet instanceof SPacketResourcePackSend) {
|
||||||
save(resourcePackRecorder.handleResourcePack((SPacketResourcePackSend) packet));
|
save(resourcePackRecorder.handleResourcePack((SPacketResourcePackSend) packet));
|
||||||
//#else
|
|
||||||
//$$ if (packet instanceof S48PacketResourcePackSend) {
|
|
||||||
//$$ save(resourcePackRecorder.handleResourcePack((S48PacketResourcePackSend) packet));
|
|
||||||
//#endif
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
|
//$$ if (packet instanceof S48PacketResourcePackSend) {
|
||||||
|
//$$ save(resourcePackRecorder.handleResourcePack((S48PacketResourcePackSend) packet));
|
||||||
|
//$$ return;
|
||||||
|
//$$ }
|
||||||
|
//#else
|
||||||
|
//$$ if (packet instanceof S3FPacketCustomPayload) {
|
||||||
|
//$$ S3FPacketCustomPayload p = (S3FPacketCustomPayload) packet;
|
||||||
|
//$$ if ("MC|RPack".equals(p.func_149169_c())) {
|
||||||
|
//$$ save(resourcePackRecorder.handleResourcePack(p));
|
||||||
|
//$$ return;
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
|
//#endif
|
||||||
|
|
||||||
if (packet instanceof FMLProxyPacket) {
|
if (packet instanceof FMLProxyPacket) {
|
||||||
// This packet requires special handling
|
// This packet requires special handling
|
||||||
|
//#if MC>=10800
|
||||||
((FMLProxyPacket) packet).toS3FPackets().forEach(this::save);
|
((FMLProxyPacket) packet).toS3FPackets().forEach(this::save);
|
||||||
|
//#else
|
||||||
|
//$$ save(((FMLProxyPacket) packet).toS3FPacket());
|
||||||
|
//#endif
|
||||||
super.channelRead(ctx, msg);
|
super.channelRead(ctx, msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -223,7 +250,12 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
|||||||
//#else
|
//#else
|
||||||
//$$ if (packet instanceof S3FPacketCustomPayload) {
|
//$$ if (packet instanceof S3FPacketCustomPayload) {
|
||||||
//$$ S3FPacketCustomPayload p = (S3FPacketCustomPayload) packet;
|
//$$ S3FPacketCustomPayload p = (S3FPacketCustomPayload) packet;
|
||||||
//$$ if (Restrictions.PLUGIN_CHANNEL.equals(p.getChannelName())) {
|
//#if MC>=10800
|
||||||
|
//$$ String channelName = p.getChannelName();
|
||||||
|
//#else
|
||||||
|
//$$ String channelName = p.func_149169_c();
|
||||||
|
//#endif
|
||||||
|
//$$ if (Restrictions.PLUGIN_CHANNEL.equals(channelName)) {
|
||||||
//$$ packet = new S40PacketDisconnect(new ChatComponentText("Please update to view this replay."));
|
//$$ packet = new S40PacketDisconnect(new ChatComponentText("Please update to view this replay."));
|
||||||
//#endif
|
//#endif
|
||||||
save(packet);
|
save(packet);
|
||||||
@@ -304,7 +336,11 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
|||||||
//$$ }
|
//$$ }
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
Integer packetId = EnumConnectionState.PLAY.getPacketId(EnumPacketDirection.CLIENTBOUND, packet);
|
Integer packetId = EnumConnectionState.PLAY.getPacketId(EnumPacketDirection.CLIENTBOUND, packet);
|
||||||
|
//#else
|
||||||
|
//$$ Integer packetId = (Integer) EnumConnectionState.PLAY.func_150755_b().inverse().get(packet.getClass());
|
||||||
|
//#endif
|
||||||
if (packetId == null) {
|
if (packetId == null) {
|
||||||
throw new IOException("Unknown packet type:" + packet.getClass());
|
throw new IOException("Unknown packet type:" + packet.getClass());
|
||||||
}
|
}
|
||||||
@@ -322,7 +358,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addMarker() {
|
public void addMarker() {
|
||||||
Entity view = Minecraft.getMinecraft().getRenderViewEntity();
|
Entity view = getRenderViewEntity(Minecraft.getMinecraft());
|
||||||
int timestamp = (int) (System.currentTimeMillis() - startTime);
|
int timestamp = (int) (System.currentTimeMillis() - startTime);
|
||||||
|
|
||||||
Marker marker = new Marker();
|
Marker marker = new Marker();
|
||||||
|
|||||||
@@ -2,21 +2,15 @@ package com.replaymod.recording.packet;
|
|||||||
|
|
||||||
import com.google.common.hash.Hashing;
|
import com.google.common.hash.Hashing;
|
||||||
import com.google.common.io.Files;
|
import com.google.common.io.Files;
|
||||||
import com.google.common.util.concurrent.FutureCallback;
|
|
||||||
import com.google.common.util.concurrent.Futures;
|
|
||||||
import com.google.common.util.concurrent.ListenableFuture;
|
|
||||||
import com.replaymod.replaystudio.replay.ReplayFile;
|
import com.replaymod.replaystudio.replay.ReplayFile;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.GuiScreenWorking;
|
import net.minecraft.client.gui.GuiScreenWorking;
|
||||||
import net.minecraft.client.gui.GuiYesNo;
|
import net.minecraft.client.gui.GuiYesNo;
|
||||||
import net.minecraft.client.gui.GuiYesNoCallback;
|
import net.minecraft.client.gui.GuiYesNoCallback;
|
||||||
import net.minecraft.client.multiplayer.ServerData;
|
import net.minecraft.client.multiplayer.ServerData;
|
||||||
import net.minecraft.client.network.NetHandlerPlayClient;
|
|
||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
import net.minecraft.client.resources.ResourcePackRepository;
|
import net.minecraft.client.resources.ResourcePackRepository;
|
||||||
import net.minecraft.network.NetworkManager;
|
|
||||||
import net.minecraft.util.HttpUtil;
|
import net.minecraft.util.HttpUtil;
|
||||||
import org.apache.commons.io.FileUtils;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
@@ -25,20 +19,39 @@ import net.minecraft.network.play.client.CPacketResourcePackStatus;
|
|||||||
import net.minecraft.network.play.client.CPacketResourcePackStatus.Action;
|
import net.minecraft.network.play.client.CPacketResourcePackStatus.Action;
|
||||||
import net.minecraft.network.play.server.SPacketResourcePackSend;
|
import net.minecraft.network.play.server.SPacketResourcePackSend;
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ import net.minecraft.network.play.client.C19PacketResourcePackStatus;
|
//$$ import net.minecraft.network.play.client.C19PacketResourcePackStatus;
|
||||||
//$$ import net.minecraft.network.play.client.C19PacketResourcePackStatus.Action;
|
//$$ import net.minecraft.network.play.client.C19PacketResourcePackStatus.Action;
|
||||||
//$$ import net.minecraft.network.play.server.S48PacketResourcePackSend;
|
//$$ import net.minecraft.network.play.server.S48PacketResourcePackSend;
|
||||||
|
//#else
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import com.google.common.util.concurrent.FutureCallback;
|
||||||
|
import com.google.common.util.concurrent.Futures;
|
||||||
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
import net.minecraft.client.network.NetHandlerPlayClient;
|
||||||
|
import net.minecraft.network.NetworkManager;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
//#else
|
||||||
|
//$$ import net.minecraft.client.multiplayer.ServerData.ServerResourceMode;
|
||||||
|
//$$ import net.minecraft.client.multiplayer.ServerList;
|
||||||
|
//$$ import net.minecraft.client.resources.FileResourcePack;
|
||||||
|
//$$ import net.minecraft.network.play.server.S3FPacketCustomPayload;
|
||||||
|
//$$ import org.apache.commons.io.Charsets;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Records resource packs and handles incoming resource pack packets during recording.
|
* Records resource packs and handles incoming resource pack packets during recording.
|
||||||
*/
|
*/
|
||||||
@@ -84,6 +97,7 @@ public class ResourcePackRecorder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
public CPacketResourcePackStatus makeStatusPacket(String hash, Action action) {
|
public CPacketResourcePackStatus makeStatusPacket(String hash, Action action) {
|
||||||
//#if MC>=11002
|
//#if MC>=11002
|
||||||
@@ -282,5 +296,78 @@ public class ResourcePackRecorder {
|
|||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//#else
|
||||||
|
//$$ public synchronized S3FPacketCustomPayload handleResourcePack(S3FPacketCustomPayload packet) {
|
||||||
|
//$$ final int requestId = nextRequestId++;
|
||||||
|
//$$ final String url = new String(packet.func_149168_d(), Charsets.UTF_8);
|
||||||
|
//$$
|
||||||
|
//$$ ServerData serverData = mc.getCurrentServerData();
|
||||||
|
//$$ ServerResourceMode resourceMode = serverData == null ? ServerResourceMode.PROMPT : serverData.getResourceMode();
|
||||||
|
//$$ if (resourceMode == ServerResourceMode.ENABLED) {
|
||||||
|
//$$ downloadResourcePack(requestId, url);
|
||||||
|
//$$ mc.getResourcePackRepository().obtainResourcePack(url);
|
||||||
|
//$$ } else if (resourceMode == ServerResourceMode.PROMPT) {
|
||||||
|
//$$ // Lambdas MUST NOT be used with methods that need re-obfuscation in FG prior to 2.2 (will result in AbstractMethodError)
|
||||||
|
//$$ //noinspection Convert2Lambda
|
||||||
|
//$$ mc.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() {
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public void confirmClicked(boolean result, int id) {
|
||||||
|
//$$ if (serverData != null) {
|
||||||
|
//$$ serverData.setResourceMode(ServerResourceMode.ENABLED);
|
||||||
|
//$$ ServerList.func_147414_b(serverData);
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ mc.displayGuiScreen(null);
|
||||||
|
//$$
|
||||||
|
//$$ if (result) {
|
||||||
|
//$$ downloadResourcePack(requestId, url);
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ }, I18n.format("multiplayer.texturePrompt.line1"), I18n.format("multiplayer.texturePrompt.line2"), 0));
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ return new S3FPacketCustomPayload(packet.func_149169_c(), ("replay://" + requestId).getBytes(Charsets.UTF_8));
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ private void downloadResourcePack(final int requestId, String url) {
|
||||||
|
//$$ final ResourcePackRepository repo = mc.mcResourcePackRepository;
|
||||||
|
//$$
|
||||||
|
//$$ String fileName = url.substring(url.lastIndexOf("/") + 1);
|
||||||
|
//$$
|
||||||
|
//$$ if (fileName.contains("?")) {
|
||||||
|
//$$ fileName = fileName.substring(0, fileName.indexOf("?"));
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ if (!fileName.endsWith(".zip")) {
|
||||||
|
//$$ return;
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ fileName = fileName.replaceAll("\\W", "");
|
||||||
|
//$$
|
||||||
|
//$$ File file = new File(repo.field_148534_e, fileName);
|
||||||
|
//$$
|
||||||
|
//$$ HashMap<String, String> hashmap = new HashMap<>();
|
||||||
|
//$$ hashmap.put("X-Minecraft-Username", mc.getSession().getUsername());
|
||||||
|
//$$ hashmap.put("X-Minecraft-UUID", mc.getSession().getPlayerID());
|
||||||
|
//$$ hashmap.put("X-Minecraft-Version", "1.7.10");
|
||||||
|
//$$
|
||||||
|
//$$ GuiScreenWorking guiScreen = new GuiScreenWorking();
|
||||||
|
//$$ Minecraft.getMinecraft().displayGuiScreen(guiScreen);
|
||||||
|
//$$ repo.func_148529_f();
|
||||||
|
//$$ repo.field_148533_g = true;
|
||||||
|
//$$ // Lambdas MUST NOT be used with methods that need re-obfuscation in FG prior to 2.2 (will result in AbstractMethodError)
|
||||||
|
//$$ //noinspection Convert2Lambda
|
||||||
|
//$$ HttpUtil.downloadResourcePack(file, url, new HttpUtil.DownloadListener() {
|
||||||
|
//$$ public void onDownloadComplete(File file) {
|
||||||
|
//$$ if (repo.field_148533_g) {
|
||||||
|
//$$ repo.field_148533_g = false;
|
||||||
|
//$$ repo.field_148532_f = new FileResourcePack(file);
|
||||||
|
//$$ Minecraft.getMinecraft().scheduleResourcesRefresh();
|
||||||
|
//$$ recordResourcePack(file, requestId);
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ }, hashmap, 50*1024*1024, guiScreen, Minecraft.getMinecraft().getProxy());
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,11 +6,18 @@ import com.replaymod.replay.events.ReplayCloseEvent;
|
|||||||
import net.minecraft.crash.CrashReport;
|
import net.minecraft.crash.CrashReport;
|
||||||
import net.minecraft.util.ReportedException;
|
import net.minecraft.util.ReportedException;
|
||||||
import net.minecraftforge.common.config.Configuration;
|
import net.minecraftforge.common.config.Configuration;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import org.apache.commons.io.FileUtils;
|
//#else
|
||||||
import org.apache.logging.log4j.Logger;
|
//$$ import cpw.mods.fml.common.Mod;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -23,7 +30,9 @@ import static com.replaymod.core.versions.MCVer.*;
|
|||||||
version = "@MOD_VERSION@",
|
version = "@MOD_VERSION@",
|
||||||
acceptedMinecraftVersions = "@MC_VERSION@",
|
acceptedMinecraftVersions = "@MC_VERSION@",
|
||||||
acceptableRemoteVersions = "*",
|
acceptableRemoteVersions = "*",
|
||||||
|
//#if MC>=10800
|
||||||
clientSideOnly = true,
|
clientSideOnly = true,
|
||||||
|
//#endif
|
||||||
useMetadata = true)
|
useMetadata = true)
|
||||||
public class ReplayModRender {
|
public class ReplayModRender {
|
||||||
public static final String MOD_ID = "replaymod-render";
|
public static final String MOD_ID = "replaymod-render";
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import net.minecraft.client.Minecraft;
|
|||||||
import net.minecraft.crash.CrashReport;
|
import net.minecraft.crash.CrashReport;
|
||||||
import net.minecraft.crash.CrashReportCategory;
|
import net.minecraft.crash.CrashReportCategory;
|
||||||
import net.minecraft.util.Util;
|
import net.minecraft.util.Util;
|
||||||
import net.minecraftforge.fml.common.versioning.ComparableVersion;
|
|
||||||
import org.apache.commons.exec.CommandLine;
|
import org.apache.commons.exec.CommandLine;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
@@ -28,6 +27,12 @@ import java.util.Comparator;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.versioning.ComparableVersion;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.versioning.ComparableVersion;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import static com.replaymod.render.ReplayModRender.LOGGER;
|
import static com.replaymod.render.ReplayModRender.LOGGER;
|
||||||
import static org.apache.commons.lang3.Validate.isTrue;
|
import static org.apache.commons.lang3.Validate.isTrue;
|
||||||
|
|
||||||
@@ -61,7 +66,13 @@ public class VideoWriter implements FrameConsumer<RGBFrame> {
|
|||||||
|
|
||||||
String executable = settings.getExportCommand().isEmpty() ? findFFmpeg() : settings.getExportCommand();
|
String executable = settings.getExportCommand().isEmpty() ? findFFmpeg() : settings.getExportCommand();
|
||||||
LOGGER.info("Starting {} with args: {}", executable, commandArgs);
|
LOGGER.info("Starting {} with args: {}", executable, commandArgs);
|
||||||
String[] cmdline = new CommandLine(executable).addArguments(commandArgs).toStrings();
|
String[] cmdline;
|
||||||
|
try {
|
||||||
|
cmdline = new CommandLine(executable).addArguments(commandArgs).toStrings();
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
LOGGER.error("Failed to parse ffmpeg command line:", e);
|
||||||
|
throw new FFmpegStartupException(settings, e.getLocalizedMessage());
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
process = new ProcessBuilder(cmdline).directory(outputFolder).start();
|
process = new ProcessBuilder(cmdline).directory(outputFolder).start();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|||||||
@@ -7,16 +7,22 @@ import com.replaymod.render.frame.OpenGlFrame;
|
|||||||
import com.replaymod.render.rendering.FrameCapturer;
|
import com.replaymod.render.rendering.FrameCapturer;
|
||||||
import com.replaymod.render.shader.Program;
|
import com.replaymod.render.shader.Program;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
|
||||||
import net.minecraft.crash.CrashReport;
|
import net.minecraft.crash.CrashReport;
|
||||||
import net.minecraft.util.ReportedException;
|
import net.minecraft.util.ReportedException;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import org.lwjgl.util.ReadableDimension;
|
import org.lwjgl.util.ReadableDimension;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
|
import static net.minecraft.client.renderer.GlStateManager.*;
|
||||||
|
//#else
|
||||||
|
//$$ import com.replaymod.render.hooks.GLStateTracker.BooleanState;
|
||||||
|
//$$ import static com.replaymod.core.versions.MCVer.GlStateManager.*;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.fog;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
import static net.minecraft.client.renderer.GlStateManager.*;
|
|
||||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||||
|
|
||||||
@@ -43,6 +49,11 @@ public class ODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
|
|||||||
return renderInfo.getFrameSize();
|
return renderInfo.getFrameSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getFramesDone() {
|
||||||
|
return renderInfo.getFramesDone();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTotalFrames() {
|
public int getTotalFrames() {
|
||||||
return renderInfo.getTotalFrames();
|
return renderInfo.getTotalFrames();
|
||||||
@@ -76,9 +87,9 @@ public class ODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
|
|||||||
linkState(1, "lightMapEnabled");
|
linkState(1, "lightMapEnabled");
|
||||||
linkState(2, "hurtTextureEnabled");
|
linkState(2, "hurtTextureEnabled");
|
||||||
final Program.Uniform uniform = shaderProgram.getUniformVariable("fogEnabled");
|
final Program.Uniform uniform = shaderProgram.getUniformVariable("fogEnabled");
|
||||||
previousFogState = fog(GlStateManager.fogState);
|
previousFogState = fog();
|
||||||
uniform.set(previousFogState.currentState);
|
uniform.set(previousFogState.currentState);
|
||||||
fog(GlStateManager.fogState, new BooleanState(previousFogState.capability) {
|
fog(new BooleanState(previousFogState.capability) {
|
||||||
@Override
|
@Override
|
||||||
public void setState(boolean state) {
|
public void setState(boolean state) {
|
||||||
super.setState(state);
|
super.setState(state);
|
||||||
@@ -97,15 +108,15 @@ public class ODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
|
|||||||
|
|
||||||
private void linkState(int id, String var) {
|
private void linkState(int id, String var) {
|
||||||
final Program.Uniform uniform = shaderProgram.getUniformVariable(var);
|
final Program.Uniform uniform = shaderProgram.getUniformVariable(var);
|
||||||
previousStates[id] = GlStateManager.textureState[id].texture2DState;
|
previousStates[id] = texture2DState(id);
|
||||||
uniform.set(previousStates[id].currentState);
|
uniform.set(previousStates[id].currentState);
|
||||||
GlStateManager.textureState[id].texture2DState = new BooleanState(previousStates[id].capability) {
|
texture2DState(id, new BooleanState(previousStates[id].capability) {
|
||||||
@Override
|
@Override
|
||||||
public void setState(boolean state) {
|
public void setState(boolean state) {
|
||||||
super.setState(state);
|
super.setState(state);
|
||||||
uniform.set(state);
|
uniform.set(state);
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -133,10 +144,10 @@ public class ODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
|
|||||||
left.close();
|
left.close();
|
||||||
right.close();
|
right.close();
|
||||||
shaderProgram.delete();
|
shaderProgram.delete();
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < previousStates.length; i++) {
|
||||||
GlStateManager.textureState[i].texture2DState = previousStates[i];
|
texture2DState(i, previousStates[i]);
|
||||||
}
|
}
|
||||||
fog(GlStateManager.fogState, previousFogState);
|
fog(previousFogState);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class CubicStereoFrameCapturer extends CubicPboOpenGlFrameCapturer {
|
private class CubicStereoFrameCapturer extends CubicPboOpenGlFrameCapturer {
|
||||||
|
|||||||
@@ -15,7 +15,12 @@ import org.lwjgl.util.WritableDimension;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import static net.minecraft.client.renderer.GlStateManager.*;
|
import static net.minecraft.client.renderer.GlStateManager.*;
|
||||||
|
//#else
|
||||||
|
//$$ import static com.replaymod.core.versions.MCVer.GlStateManager.*;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import org.lwjgl.util.ReadableDimension;
|
|||||||
public interface RenderInfo {
|
public interface RenderInfo {
|
||||||
ReadableDimension getFrameSize();
|
ReadableDimension getFrameSize();
|
||||||
|
|
||||||
|
int getFramesDone();
|
||||||
|
|
||||||
int getTotalFrames();
|
int getTotalFrames();
|
||||||
|
|
||||||
float updateForNextFrame();
|
float updateForNextFrame();
|
||||||
|
|||||||
@@ -3,7 +3,12 @@ package com.replaymod.render.events;
|
|||||||
import com.replaymod.render.rendering.VideoRenderer;
|
import com.replaymod.render.rendering.VideoRenderer;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
import net.minecraftforge.fml.common.eventhandler.Event;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.Event;
|
||||||
|
//#endif
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public abstract class ReplayRenderEvent extends Event {
|
public abstract class ReplayRenderEvent extends Event {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
//#if MC>=10800
|
||||||
package com.replaymod.render.hooks;
|
package com.replaymod.render.hooks;
|
||||||
|
|
||||||
import com.replaymod.render.utils.JailingQueue;
|
import com.replaymod.render.utils.JailingQueue;
|
||||||
@@ -22,15 +23,30 @@ import static com.replaymod.core.versions.MCVer.*;
|
|||||||
public class ChunkLoadingRenderGlobal {
|
public class ChunkLoadingRenderGlobal {
|
||||||
|
|
||||||
private final RenderGlobal hooked;
|
private final RenderGlobal hooked;
|
||||||
private final ChunkRenderDispatcher renderDispatcher;
|
private ChunkRenderDispatcher renderDispatcher;
|
||||||
private final JailingQueue<ChunkCompileTaskGenerator> workerJailingQueue;
|
private JailingQueue<ChunkCompileTaskGenerator> workerJailingQueue;
|
||||||
private final CustomChunkRenderWorker renderWorker;
|
private CustomChunkRenderWorker renderWorker;
|
||||||
private int frame;
|
private int frame;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public ChunkLoadingRenderGlobal(RenderGlobal renderGlobal) {
|
public ChunkLoadingRenderGlobal(RenderGlobal renderGlobal) {
|
||||||
this.hooked = renderGlobal;
|
this.hooked = renderGlobal;
|
||||||
this.renderDispatcher = renderGlobal.renderDispatcher;
|
|
||||||
|
setup(renderGlobal.renderDispatcher);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateRenderDispatcher(ChunkRenderDispatcher renderDispatcher) {
|
||||||
|
if (this.renderDispatcher != null) {
|
||||||
|
workerJailingQueue.freeAll();
|
||||||
|
this.renderDispatcher = null;
|
||||||
|
}
|
||||||
|
if (renderDispatcher != null) {
|
||||||
|
setup(renderDispatcher);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setup(ChunkRenderDispatcher renderDispatcher) {
|
||||||
|
this.renderDispatcher = renderDispatcher;
|
||||||
this.renderWorker = new CustomChunkRenderWorker(renderDispatcher, new RegionRenderCacheBuilder());
|
this.renderWorker = new CustomChunkRenderWorker(renderDispatcher, new RegionRenderCacheBuilder());
|
||||||
|
|
||||||
int workerThreads = renderDispatcher.listThreadedWorkers.size();
|
int workerThreads = renderDispatcher.listThreadedWorkers.size();
|
||||||
@@ -128,3 +144,4 @@ public class ChunkLoadingRenderGlobal {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|||||||
@@ -2,11 +2,18 @@ package com.replaymod.render.hooks;
|
|||||||
|
|
||||||
import com.replaymod.render.RenderSettings;
|
import com.replaymod.render.RenderSettings;
|
||||||
import com.replaymod.render.capturer.CaptureData;
|
import com.replaymod.render.capturer.CaptureData;
|
||||||
|
import com.replaymod.render.capturer.RenderInfo;
|
||||||
import com.replaymod.render.capturer.WorldRenderer;
|
import com.replaymod.render.capturer.WorldRenderer;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||||
|
//#else
|
||||||
|
//$$ import com.replaymod.core.versions.MCVer.GlStateManager;
|
||||||
|
//$$ import cpw.mods.fml.common.FMLCommonHandler;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@@ -16,12 +23,16 @@ public class EntityRendererHandler implements WorldRenderer {
|
|||||||
@Getter
|
@Getter
|
||||||
protected final RenderSettings settings;
|
protected final RenderSettings settings;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final RenderInfo renderInfo;
|
||||||
|
|
||||||
public CaptureData data;
|
public CaptureData data;
|
||||||
|
|
||||||
public boolean omnidirectional;
|
public boolean omnidirectional;
|
||||||
|
|
||||||
public EntityRendererHandler(RenderSettings settings) {
|
public EntityRendererHandler(RenderSettings settings, RenderInfo renderInfo) {
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
|
this.renderInfo = renderInfo;
|
||||||
|
|
||||||
((IEntityRenderer) mc.entityRenderer).replayModRender_setHandler(this);
|
((IEntityRenderer) mc.entityRenderer).replayModRender_setHandler(this);
|
||||||
}
|
}
|
||||||
@@ -41,7 +52,11 @@ public class EntityRendererHandler implements WorldRenderer {
|
|||||||
GlStateManager.enableAlpha();
|
GlStateManager.enableAlpha();
|
||||||
GlStateManager.alphaFunc(516, 0.5F);
|
GlStateManager.alphaFunc(516, 0.5F);
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
mc.entityRenderer.renderWorldPass(2, partialTicks, finishTimeNano);
|
mc.entityRenderer.renderWorldPass(2, partialTicks, finishTimeNano);
|
||||||
|
//#else
|
||||||
|
//$$ mc.entityRenderer.renderWorld(partialTicks, finishTimeNano);
|
||||||
|
//#endif
|
||||||
|
|
||||||
FMLCommonHandler.instance().onRenderTickEnd(partialTicks);
|
FMLCommonHandler.instance().onRenderTickEnd(partialTicks);
|
||||||
}
|
}
|
||||||
|
|||||||
70
src/main/java/com/replaymod/render/hooks/GLStateTracker.java
Normal file
70
src/main/java/com/replaymod/render/hooks/GLStateTracker.java
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
//#if MC<=10710
|
||||||
|
//$$ package com.replaymod.render.hooks;
|
||||||
|
//$$
|
||||||
|
//$$ import org.lwjgl.opengl.GL11;
|
||||||
|
//$$ import org.lwjgl.opengl.GL13;
|
||||||
|
//$$
|
||||||
|
//$$ /**
|
||||||
|
//$$ * Tracks OpenGL state for use in the ODS shader.
|
||||||
|
//$$ * All methods should be called from the GL mixins only.
|
||||||
|
//$$ */
|
||||||
|
//$$ public class GLStateTracker {
|
||||||
|
//$$ private static ThreadLocal<GLStateTracker> stateTracker = ThreadLocal.withInitial(GLStateTracker::new);
|
||||||
|
//$$ public static GLStateTracker getInstance() {
|
||||||
|
//$$ return stateTracker.get();
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ public int activeTexture;
|
||||||
|
//$$ public BooleanState fog = new BooleanState(GL11.GL_FOG);
|
||||||
|
//$$ public BooleanState[] texture = new BooleanState[32];
|
||||||
|
//$$ {
|
||||||
|
//$$ for (int i = 0; i < texture.length; i++) {
|
||||||
|
//$$ texture[i] = new BooleanState(GL11.GL_TEXTURE_2D);
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ public void updateActiveTexture(int magic) {
|
||||||
|
//$$ this.activeTexture = magic - GL13.GL_TEXTURE0;
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ public void updateEnabledState(int magic, boolean enabled) {
|
||||||
|
//$$ switch (magic) {
|
||||||
|
//$$ case GL11.GL_FOG: fog.setState(enabled); break;
|
||||||
|
//$$ case GL11.GL_TEXTURE_2D: texture[activeTexture].setState(enabled); break;
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ public static class BooleanState {
|
||||||
|
//$$ public int capability;
|
||||||
|
//$$ public boolean currentState;
|
||||||
|
//$$
|
||||||
|
//$$ public BooleanState(int capability) {
|
||||||
|
//$$ this.capability = capability;
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ public void setState(boolean enabled) {
|
||||||
|
//$$ this.currentState = enabled;
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ public boolean getState() {
|
||||||
|
//$$ return currentState;
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ // Called via ASM (see GLStateTrackerTransformer)
|
||||||
|
//$$ @Deprecated
|
||||||
|
//$$ @SuppressWarnings("unused")
|
||||||
|
//$$ public static void hook_glEnable(int magic) {
|
||||||
|
//$$ GL11.glEnable(magic);
|
||||||
|
//$$ getInstance().updateEnabledState(magic, true);
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ // Called via ASM (see GLStateTrackerTransformer)
|
||||||
|
//$$ @Deprecated
|
||||||
|
//$$ @SuppressWarnings("unused")
|
||||||
|
//$$ public static void hook_glDisable(int magic) {
|
||||||
|
//$$ GL11.glDisable(magic);
|
||||||
|
//$$ getInstance().updateEnabledState(magic, false);
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
@@ -7,38 +7,68 @@ package com.replaymod.render.mixin;
|
|||||||
//$$ import net.minecraft.client.Minecraft;
|
//$$ import net.minecraft.client.Minecraft;
|
||||||
//$$ import net.minecraft.client.particle.EffectRenderer;
|
//$$ import net.minecraft.client.particle.EffectRenderer;
|
||||||
//$$ import net.minecraft.client.particle.EntityFX;
|
//$$ import net.minecraft.client.particle.EntityFX;
|
||||||
//$$ import net.minecraft.client.renderer.WorldRenderer;
|
|
||||||
//$$ import net.minecraft.entity.Entity;
|
//$$ import net.minecraft.entity.Entity;
|
||||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||||
//$$ import org.spongepowered.asm.mixin.injection.At;
|
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||||
//$$ import org.spongepowered.asm.mixin.injection.Redirect;
|
//$$ import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
//$$
|
//$$
|
||||||
|
//#if MC>=10800
|
||||||
|
//$$ import net.minecraft.client.renderer.WorldRenderer;
|
||||||
|
//#else
|
||||||
|
//$$ import net.minecraft.client.renderer.Tessellator;
|
||||||
|
//#endif
|
||||||
|
//$$
|
||||||
//$$ @Mixin(EffectRenderer.class)
|
//$$ @Mixin(EffectRenderer.class)
|
||||||
//$$ public abstract class MixinEffectRenderer {
|
//$$ public abstract class MixinEffectRenderer {
|
||||||
|
//#if MC>=10800
|
||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||||
//#else
|
//#else
|
||||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;func_180434_a(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;func_180434_a(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||||
//#endif
|
//#endif
|
||||||
//$$ private void renderNormalParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
|
//$$ private void renderNormalParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
|
||||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||||
//$$ renderParticle(fx, worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
//$$ renderParticle(fx, worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||||
//$$ }
|
//$$ }
|
||||||
|
//#else
|
||||||
|
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/Tessellator;FFFFFF)V"))
|
||||||
|
//$$ private void renderNormalParticle(EntityFX fx, Tessellator tesselator, float partialTicks,
|
||||||
|
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||||
|
//$$ renderParticle(fx, tesselator, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
//$$
|
//$$
|
||||||
|
//#if MC>=10800
|
||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||||
//#else
|
//#else
|
||||||
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;func_180434_a(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;func_180434_a(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||||
//#endif
|
//#endif
|
||||||
//$$ private void renderLitParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
|
//$$ private void renderLitParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
|
||||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||||
//$$ renderParticle(fx, worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
//$$ renderParticle(fx, worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||||
//$$ }
|
//$$ }
|
||||||
|
//#else
|
||||||
|
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/Tessellator;FFFFFF)V"))
|
||||||
|
//$$ private void renderLitParticle(EntityFX fx, Tessellator tessellator, float partialTicks,
|
||||||
|
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||||
|
//$$ renderParticle(fx, tessellator, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
//$$
|
//$$
|
||||||
//$$ private void renderParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
|
//$$ private void renderParticle(EntityFX fx,
|
||||||
|
//#if MC>=10800
|
||||||
|
//$$ WorldRenderer worldRenderer, Entity view,
|
||||||
|
//#else
|
||||||
|
//$$ Tessellator tessellator,
|
||||||
|
//#endif
|
||||||
|
//$$ float partialTicks,
|
||||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||||
//$$ EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) Minecraft.getMinecraft().entityRenderer).replayModRender_getHandler();
|
//$$ EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) Minecraft.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||||
//$$ if (handler != null && handler.omnidirectional) {
|
//$$ if (handler != null && handler.omnidirectional) {
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ Entity view = Minecraft.getMinecraft().renderViewEntity;
|
||||||
|
//#endif
|
||||||
//$$ // Align all particles towards the camera
|
//$$ // Align all particles towards the camera
|
||||||
//$$ double dx = fx.prevPosX + (fx.posX - fx.prevPosX) * partialTicks - view.posX;
|
//$$ double dx = fx.prevPosX + (fx.posX - fx.prevPosX) * partialTicks - view.posX;
|
||||||
//$$ double dy = fx.prevPosY + (fx.posY - fx.prevPosY) * partialTicks - view.posY;
|
//$$ double dy = fx.prevPosY + (fx.posY - fx.prevPosY) * partialTicks - view.posY;
|
||||||
@@ -60,7 +90,11 @@ package com.replaymod.render.mixin;
|
|||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
//$$ fx.renderParticle(worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
//$$ fx.renderParticle(worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ fx.func_180434_a(worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
//$$ fx.func_180434_a(worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||||
|
//#else
|
||||||
|
//$$ fx.renderParticle(tessellator, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
//$$ }
|
//$$ }
|
||||||
//$$ }
|
//$$ }
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ import com.replaymod.render.hooks.EntityRendererHandler;
|
|||||||
import com.replaymod.replay.camera.CameraEntity;
|
import com.replaymod.replay.camera.CameraEntity;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.EntityRenderer;
|
import net.minecraft.client.renderer.EntityRenderer;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
|
||||||
import net.minecraft.client.renderer.RenderGlobal;
|
import net.minecraft.client.renderer.RenderGlobal;
|
||||||
import net.minecraft.client.settings.GameSettings;
|
import net.minecraft.client.settings.GameSettings;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
import org.lwjgl.util.ReadableColor;
|
import org.lwjgl.util.ReadableColor;
|
||||||
@@ -28,6 +28,14 @@ import net.minecraft.util.math.RayTraceResult;
|
|||||||
//$$ import net.minecraft.util.MovingObjectPosition;
|
//$$ import net.minecraft.util.MovingObjectPosition;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
|
//#else
|
||||||
|
//$$ import com.replaymod.core.versions.MCVer.GlStateManager;
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
|
|
||||||
@Mixin(value = EntityRenderer.class)
|
@Mixin(value = EntityRenderer.class)
|
||||||
public abstract class MixinEntityRenderer implements EntityRendererHandler.IEntityRenderer, EntityRendererHandler.GluPerspective {
|
public abstract class MixinEntityRenderer implements EntityRendererHandler.IEntityRenderer, EntityRendererHandler.GluPerspective {
|
||||||
@Shadow
|
@Shadow
|
||||||
@@ -45,6 +53,17 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
|||||||
return replayModRender_handler;
|
return replayModRender_handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE",target =
|
||||||
|
//$$ "Lnet/minecraft/client/renderer/RenderGlobal;updateRenderers(Lnet/minecraft/entity/EntityLivingBase;Z)Z"))
|
||||||
|
//$$ private boolean replayModRender_updateAllChunks(RenderGlobal self, EntityLivingBase view, boolean renderAllChunks) {
|
||||||
|
//$$ if (replayModRender_handler != null) {
|
||||||
|
//$$ renderAllChunks = true;
|
||||||
|
//$$ }
|
||||||
|
//$$ return self.updateRenderers(view, renderAllChunks);
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
|
|
||||||
@Inject(method = "setupFog", at = @At("HEAD"), cancellable = true)
|
@Inject(method = "setupFog", at = @At("HEAD"), cancellable = true)
|
||||||
private void replayModRender_onSetupFog(int fogDistanceFlag, float partialTicks, CallbackInfo ci) {
|
private void replayModRender_onSetupFog(int fogDistanceFlag, float partialTicks, CallbackInfo ci) {
|
||||||
if (replayModRender_handler == null) return;
|
if (replayModRender_handler == null) return;
|
||||||
@@ -56,7 +75,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
|||||||
@Inject(method = "orientCamera", at = @At("HEAD"))
|
@Inject(method = "orientCamera", at = @At("HEAD"))
|
||||||
private void replayModRender_resetRotationIfNeeded(float partialTicks, CallbackInfo ci) {
|
private void replayModRender_resetRotationIfNeeded(float partialTicks, CallbackInfo ci) {
|
||||||
if (replayModRender_handler != null) {
|
if (replayModRender_handler != null) {
|
||||||
Entity entity = Minecraft.getMinecraft().getRenderViewEntity();
|
Entity entity = getRenderViewEntity(Minecraft.getMinecraft());
|
||||||
RenderSettings settings = replayModRender_handler.getSettings();
|
RenderSettings settings = replayModRender_handler.getSettings();
|
||||||
if (settings.isStabilizeYaw()) {
|
if (settings.isStabilizeYaw()) {
|
||||||
entity.prevRotationYaw = entity.rotationYaw = 0;
|
entity.prevRotationYaw = entity.rotationYaw = 0;
|
||||||
@@ -79,7 +98,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
|||||||
@Inject(method = "setupCameraTransform", at = @At("HEAD"))
|
@Inject(method = "setupCameraTransform", at = @At("HEAD"))
|
||||||
private void replayModRender_beforeSetupCameraTransform(float partialTicks, int renderPass, CallbackInfo ci) {
|
private void replayModRender_beforeSetupCameraTransform(float partialTicks, int renderPass, CallbackInfo ci) {
|
||||||
if (replayModRender_handler != null) {
|
if (replayModRender_handler != null) {
|
||||||
Entity entity = Minecraft.getMinecraft().getRenderViewEntity();
|
Entity entity = getRenderViewEntity(Minecraft.getMinecraft());
|
||||||
orgYaw = entity.rotationYaw;
|
orgYaw = entity.rotationYaw;
|
||||||
orgPitch = entity.rotationPitch;
|
orgPitch = entity.rotationPitch;
|
||||||
orgPrevYaw = entity.prevRotationYaw;
|
orgPrevYaw = entity.prevRotationYaw;
|
||||||
@@ -91,7 +110,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
|||||||
@Inject(method = "setupCameraTransform", at = @At("RETURN"))
|
@Inject(method = "setupCameraTransform", at = @At("RETURN"))
|
||||||
private void replayModRender_afterSetupCameraTransform(float partialTicks, int renderPass, CallbackInfo ci) {
|
private void replayModRender_afterSetupCameraTransform(float partialTicks, int renderPass, CallbackInfo ci) {
|
||||||
if (replayModRender_handler != null) {
|
if (replayModRender_handler != null) {
|
||||||
Entity entity = Minecraft.getMinecraft().getRenderViewEntity();
|
Entity entity = getRenderViewEntity(Minecraft.getMinecraft());
|
||||||
entity.rotationYaw = orgYaw;
|
entity.rotationYaw = orgYaw;
|
||||||
entity.rotationPitch = orgPitch;
|
entity.rotationPitch = orgPitch;
|
||||||
entity.prevRotationYaw = orgPrevYaw;
|
entity.prevRotationYaw = orgPrevYaw;
|
||||||
@@ -109,7 +128,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
|||||||
ci.cancel();
|
ci.cancel();
|
||||||
return; // No spectator hands during 360° view, we wouldn't even know where to put it
|
return; // No spectator hands during 360° view, we wouldn't even know where to put it
|
||||||
}
|
}
|
||||||
Entity currentEntity = Minecraft.getMinecraft().getRenderViewEntity();
|
Entity currentEntity = getRenderViewEntity(Minecraft.getMinecraft());
|
||||||
if (currentEntity instanceof EntityPlayer && !(currentEntity instanceof CameraEntity)) {
|
if (currentEntity instanceof EntityPlayer && !(currentEntity instanceof CameraEntity)) {
|
||||||
if (renderPass == 2) { // Need to update render pass
|
if (renderPass == 2) { // Need to update render pass
|
||||||
renderPass = replayModRender_handler.data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE ? 1 : 0;
|
renderPass = replayModRender_handler.data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE ? 1 : 0;
|
||||||
@@ -127,7 +146,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
|||||||
@Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V"))
|
@Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V"))
|
||||||
private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, RayTraceResult rtr, int alwaysZero, float partialTicks) {
|
private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, RayTraceResult rtr, int alwaysZero, float partialTicks) {
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/MovingObjectPosition;IF)V"))
|
//$$ @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/MovingObjectPosition;IF)V"))
|
||||||
|
//#else
|
||||||
|
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/MovingObjectPosition;IF)V"))
|
||||||
|
//#endif
|
||||||
//$$ private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, MovingObjectPosition rtr, int alwaysZero, float partialTicks) {
|
//$$ private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, MovingObjectPosition rtr, int alwaysZero, float partialTicks) {
|
||||||
//#endif
|
//#endif
|
||||||
if (replayModRender_handler == null) {
|
if (replayModRender_handler == null) {
|
||||||
@@ -137,7 +160,12 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
|||||||
|
|
||||||
private int orgRenderDistanceChunks;
|
private int orgRenderDistanceChunks;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Inject(method = "renderWorldPass", at = @At(value = "JUMP", ordinal = 0))
|
@Inject(method = "renderWorldPass", at = @At(value = "JUMP", ordinal = 0))
|
||||||
|
//#else
|
||||||
|
//$$ @Inject(method = "renderWorld", at = @At(value = "INVOKE", ordinal = 0, shift = At.Shift.AFTER,
|
||||||
|
//$$ target = "Lnet/minecraft/client/renderer/culling/ClippingHelperImpl;getInstance()Lnet/minecraft/client/renderer/culling/ClippingHelper;"))
|
||||||
|
//#endif
|
||||||
private void replayModRender_beforeRenderSky(CallbackInfo ci) {
|
private void replayModRender_beforeRenderSky(CallbackInfo ci) {
|
||||||
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
|
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
|
||||||
GameSettings settings = Minecraft.getMinecraft().gameSettings;
|
GameSettings settings = Minecraft.getMinecraft().gameSettings;
|
||||||
@@ -146,15 +174,24 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(FI)V"))
|
@Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(FI)V"))
|
||||||
private void replayModRender_renderSky(RenderGlobal instance, float partialTicks, int renderPass) {
|
private void replayModRender_renderSky(RenderGlobal instance, float partialTicks, int renderPass) {
|
||||||
|
//#else
|
||||||
|
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(F)V"))
|
||||||
|
//$$ private void replayModRender_renderSky(RenderGlobal instance, float partialTicks) {
|
||||||
|
//#endif
|
||||||
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
|
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
|
||||||
Minecraft.getMinecraft().gameSettings.renderDistanceChunks = orgRenderDistanceChunks;
|
Minecraft.getMinecraft().gameSettings.renderDistanceChunks = orgRenderDistanceChunks;
|
||||||
ReadableColor color = replayModRender_handler.getSettings().getChromaKeyingColor();
|
ReadableColor color = replayModRender_handler.getSettings().getChromaKeyingColor();
|
||||||
GlStateManager.clearColor(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, 1);
|
GlStateManager.clearColor(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, 1);
|
||||||
GlStateManager.clear(GL11.GL_COLOR_BUFFER_BIT);
|
GlStateManager.clear(GL11.GL_COLOR_BUFFER_BIT);
|
||||||
} else {
|
} else {
|
||||||
|
//#if MC>=10800
|
||||||
instance.renderSky(partialTicks, renderPass);
|
instance.renderSky(partialTicks, renderPass);
|
||||||
|
//#else
|
||||||
|
//$$ instance.renderSky(partialTicks);
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,7 +199,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
|||||||
* Stereoscopic Renderer
|
* Stereoscopic Renderer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 0))
|
@Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 0))
|
||||||
|
//#else
|
||||||
|
//$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 0, remap = false))
|
||||||
|
//#endif
|
||||||
private void replayModRender_setupStereoscopicProjection(float partialTicks, int renderPass, CallbackInfo ci) {
|
private void replayModRender_setupStereoscopicProjection(float partialTicks, int renderPass, CallbackInfo ci) {
|
||||||
if (replayModRender_getHandler() != null) {
|
if (replayModRender_getHandler() != null) {
|
||||||
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||||
@@ -173,7 +214,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 1))
|
@Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 1))
|
||||||
|
//#else
|
||||||
|
//$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 1, remap = false))
|
||||||
|
//#endif
|
||||||
private void replayModRender_setupStereoscopicModelView(float partialTicks, int renderPass, CallbackInfo ci) {
|
private void replayModRender_setupStereoscopicModelView(float partialTicks, int renderPass, CallbackInfo ci) {
|
||||||
if (replayModRender_getHandler() != null) {
|
if (replayModRender_getHandler() != null) {
|
||||||
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||||
@@ -193,15 +238,21 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
|||||||
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
|
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
|
@Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
|
||||||
|
//#else
|
||||||
|
//$$ @Redirect(method = "renderHand", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
|
||||||
|
//#endif
|
||||||
private void replayModRender_gluPerspective$1(float fovY, float aspect, float zNear, float zFar) {
|
private void replayModRender_gluPerspective$1(float fovY, float aspect, float zNear, float zFar) {
|
||||||
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
|
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Redirect(method = "renderCloudsCheck", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
|
@Redirect(method = "renderCloudsCheck", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
|
||||||
private void replayModRender_gluPerspective$2(float fovY, float aspect, float zNear, float zFar) {
|
private void replayModRender_gluPerspective$2(float fovY, float aspect, float zNear, float zFar) {
|
||||||
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
|
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void replayModRender_gluPerspective(float fovY, float aspect, float zNear, float zFar) {
|
public void replayModRender_gluPerspective(float fovY, float aspect, float zNear, float zFar) {
|
||||||
|
|||||||
@@ -2,13 +2,22 @@ package com.replaymod.render.mixin;
|
|||||||
|
|
||||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.culling.Frustum;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraft.client.renderer.culling.Frustum;
|
||||||
|
//#else
|
||||||
|
//$$ import net.minecraft.client.renderer.culling.Frustrum;
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Mixin(Frustum.class)
|
@Mixin(Frustum.class)
|
||||||
|
//#else
|
||||||
|
//$$ @Mixin(Frustrum.class)
|
||||||
|
//#endif
|
||||||
public abstract class MixinFrustum {
|
public abstract class MixinFrustum {
|
||||||
@Inject(method = "isBoxInFrustum", at = @At("HEAD"), cancellable = true)
|
@Inject(method = "isBoxInFrustum", at = @At("HEAD"), cancellable = true)
|
||||||
public void isBoxInFrustum(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, CallbackInfoReturnable<Boolean> ci) {
|
public void isBoxInFrustum(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, CallbackInfoReturnable<Boolean> ci) {
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
//#if MC<=10710
|
||||||
|
//$$ package com.replaymod.render.mixin;
|
||||||
|
//$$
|
||||||
|
//$$ import com.replaymod.render.hooks.GLStateTracker;
|
||||||
|
//$$ import net.minecraft.client.renderer.OpenGlHelper;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
//$$
|
||||||
|
//$$ @Mixin(OpenGlHelper.class)
|
||||||
|
//$$ public abstract class MixinOpenGlHelper {
|
||||||
|
//$$ @Inject(method = "setActiveTexture", at = @At("RETURN"))
|
||||||
|
//$$ private static void replayModRender_trackActiveTexture(int magic, CallbackInfo ci) {
|
||||||
|
//$$ GLStateTracker.getInstance().updateActiveTexture(magic);
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
//#if MC>=10800
|
||||||
package com.replaymod.render.mixin;
|
package com.replaymod.render.mixin;
|
||||||
|
|
||||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||||
@@ -9,6 +10,7 @@ import org.spongepowered.asm.mixin.Mixin;
|
|||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
//#if MC<10904
|
//#if MC<10904
|
||||||
@@ -66,4 +68,19 @@ public abstract class MixinRenderGlobal {
|
|||||||
ci.cancel();
|
ci.cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject(method = "setWorldAndLoadRenderers", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher;stopWorkerThreads()V"))
|
||||||
|
private void stopWorkerThreadsAndChunkLoadingRenderGlobal(CallbackInfo ci) {
|
||||||
|
if (replayModRender_hook != null) {
|
||||||
|
replayModRender_hook.updateRenderDispatcher(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "loadRenderers", at = @At(value = "RETURN"))
|
||||||
|
private void setupChunkLoadingRenderGlobal(CallbackInfo ci) {
|
||||||
|
if (replayModRender_hook != null) {
|
||||||
|
replayModRender_hook.updateRenderDispatcher(renderDispatcher);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|||||||
@@ -51,9 +51,9 @@ public class Pipelines {
|
|||||||
RenderSettings settings = renderInfo.getRenderSettings();
|
RenderSettings settings = renderInfo.getRenderSettings();
|
||||||
FrameCapturer<OpenGlFrame> capturer;
|
FrameCapturer<OpenGlFrame> capturer;
|
||||||
if (PixelBufferObject.SUPPORTED) {
|
if (PixelBufferObject.SUPPORTED) {
|
||||||
capturer = new SimplePboOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo);
|
capturer = new SimplePboOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo);
|
||||||
} else {
|
} else {
|
||||||
capturer = new SimpleOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo);
|
capturer = new SimpleOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo);
|
||||||
}
|
}
|
||||||
return new Pipeline<>(capturer, new OpenGlToRGBProcessor(), consumer);
|
return new Pipeline<>(capturer, new OpenGlToRGBProcessor(), consumer);
|
||||||
}
|
}
|
||||||
@@ -62,9 +62,9 @@ public class Pipelines {
|
|||||||
RenderSettings settings = renderInfo.getRenderSettings();
|
RenderSettings settings = renderInfo.getRenderSettings();
|
||||||
FrameCapturer<StereoscopicOpenGlFrame> capturer;
|
FrameCapturer<StereoscopicOpenGlFrame> capturer;
|
||||||
if (PixelBufferObject.SUPPORTED) {
|
if (PixelBufferObject.SUPPORTED) {
|
||||||
capturer = new StereoscopicPboOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo);
|
capturer = new StereoscopicPboOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo);
|
||||||
} else {
|
} else {
|
||||||
capturer = new StereoscopicOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo);
|
capturer = new StereoscopicOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo);
|
||||||
}
|
}
|
||||||
return new Pipeline<>(capturer, new StereoscopicToRGBProcessor(), consumer);
|
return new Pipeline<>(capturer, new StereoscopicToRGBProcessor(), consumer);
|
||||||
}
|
}
|
||||||
@@ -73,9 +73,9 @@ public class Pipelines {
|
|||||||
RenderSettings settings = renderInfo.getRenderSettings();
|
RenderSettings settings = renderInfo.getRenderSettings();
|
||||||
FrameCapturer<CubicOpenGlFrame> capturer;
|
FrameCapturer<CubicOpenGlFrame> capturer;
|
||||||
if (PixelBufferObject.SUPPORTED) {
|
if (PixelBufferObject.SUPPORTED) {
|
||||||
capturer = new CubicPboOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo, settings.getVideoWidth() / 4);
|
capturer = new CubicPboOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, settings.getVideoWidth() / 4);
|
||||||
} else {
|
} else {
|
||||||
capturer = new CubicOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo, settings.getVideoWidth() / 4);
|
capturer = new CubicOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, settings.getVideoWidth() / 4);
|
||||||
}
|
}
|
||||||
return new Pipeline<>(capturer, new CubicToRGBProcessor(), consumer);
|
return new Pipeline<>(capturer, new CubicToRGBProcessor(), consumer);
|
||||||
}
|
}
|
||||||
@@ -84,9 +84,9 @@ public class Pipelines {
|
|||||||
RenderSettings settings = renderInfo.getRenderSettings();
|
RenderSettings settings = renderInfo.getRenderSettings();
|
||||||
FrameCapturer<CubicOpenGlFrame> capturer;
|
FrameCapturer<CubicOpenGlFrame> capturer;
|
||||||
if (PixelBufferObject.SUPPORTED) {
|
if (PixelBufferObject.SUPPORTED) {
|
||||||
capturer = new CubicPboOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo, settings.getVideoWidth() / 4);
|
capturer = new CubicPboOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, settings.getVideoWidth() / 4);
|
||||||
} else {
|
} else {
|
||||||
capturer = new CubicOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo, settings.getVideoWidth() / 4);
|
capturer = new CubicOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, settings.getVideoWidth() / 4);
|
||||||
}
|
}
|
||||||
return new Pipeline<>(capturer, new EquirectangularToRGBProcessor(settings.getVideoWidth() / 4), consumer);
|
return new Pipeline<>(capturer, new EquirectangularToRGBProcessor(settings.getVideoWidth() / 4), consumer);
|
||||||
}
|
}
|
||||||
@@ -94,20 +94,20 @@ public class Pipelines {
|
|||||||
public static Pipeline<ODSOpenGlFrame, RGBFrame> newODSPipeline(RenderInfo renderInfo, FrameConsumer<RGBFrame> consumer) {
|
public static Pipeline<ODSOpenGlFrame, RGBFrame> newODSPipeline(RenderInfo renderInfo, FrameConsumer<RGBFrame> consumer) {
|
||||||
RenderSettings settings = renderInfo.getRenderSettings();
|
RenderSettings settings = renderInfo.getRenderSettings();
|
||||||
FrameCapturer<ODSOpenGlFrame> capturer =
|
FrameCapturer<ODSOpenGlFrame> capturer =
|
||||||
new ODSFrameCapturer(new EntityRendererHandler(settings), renderInfo, settings.getVideoWidth() / 4);
|
new ODSFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, settings.getVideoWidth() / 4);
|
||||||
return new Pipeline<>(capturer, new ODSToRGBProcessor(settings.getVideoWidth() / 4), consumer);
|
return new Pipeline<>(capturer, new ODSToRGBProcessor(settings.getVideoWidth() / 4), consumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Pipeline<RGBFrame, RGBFrame> newBlendPipeline(RenderInfo renderInfo) throws IOException {
|
public static Pipeline<RGBFrame, RGBFrame> newBlendPipeline(RenderInfo renderInfo) {
|
||||||
RenderSettings settings = renderInfo.getRenderSettings();
|
RenderSettings settings = renderInfo.getRenderSettings();
|
||||||
FrameCapturer<RGBFrame> capturer = new BlendFrameCapturer(new EntityRendererHandler(settings), renderInfo);
|
FrameCapturer<RGBFrame> capturer = new BlendFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo);
|
||||||
FrameConsumer<RGBFrame> consumer = new FrameConsumer<RGBFrame>() {
|
FrameConsumer<RGBFrame> consumer = new FrameConsumer<RGBFrame>() {
|
||||||
@Override
|
@Override
|
||||||
public void consume(RGBFrame frame) {
|
public void consume(RGBFrame frame) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() throws IOException {
|
public void close() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return new Pipeline<>(capturer, new DummyProcessor<>(), consumer);
|
return new Pipeline<>(capturer, new DummyProcessor<>(), consumer);
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import com.replaymod.render.events.ReplayRenderEvent;
|
|||||||
import com.replaymod.render.frame.RGBFrame;
|
import com.replaymod.render.frame.RGBFrame;
|
||||||
import com.replaymod.render.gui.GuiRenderingDone;
|
import com.replaymod.render.gui.GuiRenderingDone;
|
||||||
import com.replaymod.render.gui.GuiVideoRenderer;
|
import com.replaymod.render.gui.GuiVideoRenderer;
|
||||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
|
||||||
import com.replaymod.render.metadata.MetadataInjector;
|
import com.replaymod.render.metadata.MetadataInjector;
|
||||||
import com.replaymod.render.utils.SoundHandler;
|
import com.replaymod.render.utils.SoundHandler;
|
||||||
import com.replaymod.replay.ReplayHandler;
|
import com.replaymod.replay.ReplayHandler;
|
||||||
@@ -36,6 +35,13 @@ import net.minecraft.util.SoundCategory;
|
|||||||
//$$ import net.minecraft.client.audio.SoundCategory;
|
//$$ import net.minecraft.client.audio.SoundCategory;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||||
|
import static net.minecraft.client.renderer.GlStateManager.*;
|
||||||
|
//#else
|
||||||
|
//$$ import static com.replaymod.core.versions.MCVer.GlStateManager.*;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
@@ -47,10 +53,6 @@ import java.util.concurrent.FutureTask;
|
|||||||
import static com.google.common.collect.Iterables.getLast;
|
import static com.google.common.collect.Iterables.getLast;
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
import static com.replaymod.render.ReplayModRender.LOGGER;
|
import static com.replaymod.render.ReplayModRender.LOGGER;
|
||||||
import static net.minecraft.client.renderer.GlStateManager.clear;
|
|
||||||
import static net.minecraft.client.renderer.GlStateManager.enableTexture2D;
|
|
||||||
import static net.minecraft.client.renderer.GlStateManager.popMatrix;
|
|
||||||
import static net.minecraft.client.renderer.GlStateManager.pushMatrix;
|
|
||||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||||
|
|
||||||
@@ -73,7 +75,9 @@ public class VideoRenderer implements RenderInfo {
|
|||||||
|
|
||||||
private TimelinePlayer timelinePlayer;
|
private TimelinePlayer timelinePlayer;
|
||||||
private Future<Void> timelinePlayerFuture;
|
private Future<Void> timelinePlayerFuture;
|
||||||
|
//#if MC>=10800
|
||||||
private ChunkLoadingRenderGlobal chunkLoadingRenderGlobal;
|
private ChunkLoadingRenderGlobal chunkLoadingRenderGlobal;
|
||||||
|
//#endif
|
||||||
|
|
||||||
private int framesDone;
|
private int framesDone;
|
||||||
private int totalFrames;
|
private int totalFrames;
|
||||||
@@ -262,7 +266,9 @@ public class VideoRenderer implements RenderInfo {
|
|||||||
//$$ gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight());
|
//$$ gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight());
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
chunkLoadingRenderGlobal = new ChunkLoadingRenderGlobal(mc.renderGlobal);
|
chunkLoadingRenderGlobal = new ChunkLoadingRenderGlobal(mc.renderGlobal);
|
||||||
|
//#endif
|
||||||
|
|
||||||
// Set up our own framebuffer to render the GUI to
|
// Set up our own framebuffer to render the GUI to
|
||||||
guiFramebuffer = new Framebuffer(displayWidth, displayHeight, true);
|
guiFramebuffer = new Framebuffer(displayWidth, displayHeight, true);
|
||||||
@@ -288,9 +294,11 @@ public class VideoRenderer implements RenderInfo {
|
|||||||
//$$ mc.gameSettings.mapSoundLevels = originalSoundLevels;
|
//$$ mc.gameSettings.mapSoundLevels = originalSoundLevels;
|
||||||
//#endif
|
//#endif
|
||||||
mc.displayGuiScreen(null);
|
mc.displayGuiScreen(null);
|
||||||
|
//#if MC>=10800
|
||||||
if (chunkLoadingRenderGlobal != null) {
|
if (chunkLoadingRenderGlobal != null) {
|
||||||
chunkLoadingRenderGlobal.uninstall();
|
chunkLoadingRenderGlobal.uninstall();
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|
||||||
new SoundHandler().playRenderSuccessSound();
|
new SoundHandler().playRenderSuccessSound();
|
||||||
|
|
||||||
@@ -314,11 +322,15 @@ public class VideoRenderer implements RenderInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mc.currentScreen = gui.toMinecraft();
|
mc.currentScreen = gui.toMinecraft();
|
||||||
|
//#if MC>=10800
|
||||||
try {
|
try {
|
||||||
mc.runTick();
|
mc.runTick();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
//#else
|
||||||
|
//$$ mc.runTick();
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawGui() {
|
public void drawGui() {
|
||||||
@@ -339,6 +351,7 @@ public class VideoRenderer implements RenderInfo {
|
|||||||
ScaledResolution scaled = newScaledResolution(mc);
|
ScaledResolution scaled = newScaledResolution(mc);
|
||||||
gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight());
|
gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight());
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
try {
|
try {
|
||||||
gui.toMinecraft().handleInput();
|
gui.toMinecraft().handleInput();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -346,6 +359,9 @@ public class VideoRenderer implements RenderInfo {
|
|||||||
// It isn't actually thrown here, so we'll deal with it the easy way
|
// It isn't actually thrown here, so we'll deal with it the easy way
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
//#else
|
||||||
|
//$$ gui.toMinecraft().handleInput();
|
||||||
|
//#endif
|
||||||
|
|
||||||
int mouseX = Mouse.getX() * scaled.getScaledWidth() / mc.displayWidth;
|
int mouseX = Mouse.getX() * scaled.getScaledWidth() / mc.displayWidth;
|
||||||
int mouseY = scaled.getScaledHeight() - Mouse.getY() * scaled.getScaledHeight() / mc.displayHeight - 1;
|
int mouseY = scaled.getScaledHeight() - Mouse.getY() * scaled.getScaledHeight() / mc.displayHeight - 1;
|
||||||
@@ -363,7 +379,11 @@ public class VideoRenderer implements RenderInfo {
|
|||||||
if (settings.isHighPerformance()) {
|
if (settings.isHighPerformance()) {
|
||||||
Display.update();
|
Display.update();
|
||||||
} else {
|
} else {
|
||||||
|
//#if MC>=10800
|
||||||
mc.updateDisplay();
|
mc.updateDisplay();
|
||||||
|
//#else
|
||||||
|
//$$ mc.resetSize();
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
if (Mouse.isGrabbed()) {
|
if (Mouse.isGrabbed()) {
|
||||||
Mouse.setGrabbed(false);
|
Mouse.setGrabbed(false);
|
||||||
|
|||||||
@@ -13,11 +13,20 @@ import net.minecraft.util.ReportedException;
|
|||||||
import net.minecraft.util.Timer;
|
import net.minecraft.util.Timer;
|
||||||
import net.minecraftforge.client.ForgeHooksClient;
|
import net.minecraftforge.client.ForgeHooksClient;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
|
||||||
import org.lwjgl.input.Keyboard;
|
import org.lwjgl.input.Keyboard;
|
||||||
import org.lwjgl.input.Mouse;
|
import org.lwjgl.input.Mouse;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.FMLCommonHandler;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.Event;
|
||||||
|
//$$ import net.minecraft.client.renderer.entity.RenderManager;
|
||||||
|
//$$
|
||||||
|
//$$ import static com.replaymod.core.versions.MCVer.FML_BUS;
|
||||||
|
//#endif
|
||||||
|
|
||||||
public class InputReplayTimer extends WrappedTimer {
|
public class InputReplayTimer extends WrappedTimer {
|
||||||
private final ReplayModReplay mod;
|
private final ReplayModReplay mod;
|
||||||
@@ -33,6 +42,11 @@ public class InputReplayTimer extends WrappedTimer {
|
|||||||
public void updateTimer() {
|
public void updateTimer() {
|
||||||
super.updateTimer();
|
super.updateTimer();
|
||||||
|
|
||||||
|
// 1.7.10: We have to run the scheduled executables (ours only) because MC would only run them every tick
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ FML_BUS.post(new RunScheduledTasks());
|
||||||
|
//#endif
|
||||||
|
|
||||||
// If we are in a replay, we have to manually process key and mouse events as the
|
// If we are in a replay, we have to manually process key and mouse events as the
|
||||||
// tick speed may vary or there may not be any ticks at all (when the replay is paused)
|
// tick speed may vary or there may not be any ticks at all (when the replay is paused)
|
||||||
if (mod.getReplayHandler() != null) {
|
if (mod.getReplayHandler() != null) {
|
||||||
@@ -45,11 +59,15 @@ public class InputReplayTimer extends WrappedTimer {
|
|||||||
handleKeyEvent();
|
handleKeyEvent();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
//#if MC>=10800
|
||||||
try {
|
try {
|
||||||
mc.currentScreen.handleInput();
|
mc.currentScreen.handleInput();
|
||||||
} catch (IOException e) { // *SIGH*
|
} catch (IOException e) { // *SIGH*
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
//#else
|
||||||
|
//$$ mc.currentScreen.handleInput();
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -91,17 +109,22 @@ public class InputReplayTimer extends WrappedTimer {
|
|||||||
mc.setIngameFocus();
|
mc.setIngameFocus();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
//#if MC>=10800
|
||||||
try {
|
try {
|
||||||
mc.currentScreen.handleMouseInput();
|
mc.currentScreen.handleMouseInput();
|
||||||
} catch (IOException e) { // WHO IS RESPONSIBLE FOR THIS MESS?!?
|
} catch (IOException e) { // WHO IS RESPONSIBLE FOR THIS MESS?!?
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
//#else
|
||||||
|
//$$ mc.currentScreen.handleMouseInput();
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
FMLCommonHandler.instance().fireMouseInput();
|
FMLCommonHandler.instance().fireMouseInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void handleKeyEvent() {
|
protected void handleKeyEvent() {
|
||||||
|
// TODO 1.7.10: This might be missing some 1.7.10-only key bindings or implement some of them incorrectly
|
||||||
int key = Keyboard.getEventKey() == 0 ? Keyboard.getEventCharacter() + 256 : Keyboard.getEventKey();
|
int key = Keyboard.getEventKey() == 0 ? Keyboard.getEventCharacter() + 256 : Keyboard.getEventKey();
|
||||||
boolean pressed = Keyboard.getEventKeyState();
|
boolean pressed = Keyboard.getEventKeyState();
|
||||||
|
|
||||||
@@ -131,15 +154,23 @@ public class InputReplayTimer extends WrappedTimer {
|
|||||||
if (pressed) {
|
if (pressed) {
|
||||||
// This might be subject to change as vanilla shaders are still kinda unused in 1.8
|
// This might be subject to change as vanilla shaders are still kinda unused in 1.8
|
||||||
if (key == Keyboard.KEY_F4 && mc.entityRenderer != null) {
|
if (key == Keyboard.KEY_F4 && mc.entityRenderer != null) {
|
||||||
|
//#if MC>=10800
|
||||||
mc.entityRenderer.switchUseShader();
|
mc.entityRenderer.switchUseShader();
|
||||||
|
//#else
|
||||||
|
//$$ mc.entityRenderer.activateNextShader();
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mc.currentScreen != null) {
|
if (mc.currentScreen != null) {
|
||||||
|
//#if MC>=10800
|
||||||
try {
|
try {
|
||||||
mc.currentScreen.handleKeyboardInput();
|
mc.currentScreen.handleKeyboardInput();
|
||||||
} catch (IOException e) { // AND WHO THOUGHT THIS WAS A GREAT IDEA?
|
} catch (IOException e) { // AND WHO THOUGHT THIS WAS A GREAT IDEA?
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
//#else
|
||||||
|
//$$ mc.currentScreen.handleKeyboardInput();
|
||||||
|
//#endif
|
||||||
} else {
|
} else {
|
||||||
if (key == Keyboard.KEY_ESCAPE) {
|
if (key == Keyboard.KEY_ESCAPE) {
|
||||||
mc.displayInGameMenu();
|
mc.displayInGameMenu();
|
||||||
@@ -176,7 +207,11 @@ public class InputReplayTimer extends WrappedTimer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (key == 48 && Keyboard.isKeyDown(61)) {
|
if (key == 48 && Keyboard.isKeyDown(61)) {
|
||||||
|
//#if MC>=10800
|
||||||
mc.getRenderManager().setDebugBoundingBox(!mc.getRenderManager().isDebugBoundingBox());
|
mc.getRenderManager().setDebugBoundingBox(!mc.getRenderManager().isDebugBoundingBox());
|
||||||
|
//#else
|
||||||
|
//$$ RenderManager.debugBoundingBox = !RenderManager.debugBoundingBox;
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key == 25 && Keyboard.isKeyDown(61)) {
|
if (key == 25 && Keyboard.isKeyDown(61)) {
|
||||||
@@ -196,6 +231,7 @@ public class InputReplayTimer extends WrappedTimer {
|
|||||||
if (mc.gameSettings.keyBindTogglePerspective.isPressed()) {
|
if (mc.gameSettings.keyBindTogglePerspective.isPressed()) {
|
||||||
mc.gameSettings.thirdPersonView = (mc.gameSettings.thirdPersonView + 1) % 3;
|
mc.gameSettings.thirdPersonView = (mc.gameSettings.thirdPersonView + 1) % 3;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
if (mc.entityRenderer != null) { // Extra check, not in vanilla code
|
if (mc.entityRenderer != null) { // Extra check, not in vanilla code
|
||||||
if (mc.gameSettings.thirdPersonView == 0) {
|
if (mc.gameSettings.thirdPersonView == 0) {
|
||||||
mc.entityRenderer.loadEntityShader(mc.getRenderViewEntity());
|
mc.entityRenderer.loadEntityShader(mc.getRenderViewEntity());
|
||||||
@@ -203,6 +239,7 @@ public class InputReplayTimer extends WrappedTimer {
|
|||||||
mc.entityRenderer.loadEntityShader(null);
|
mc.entityRenderer.loadEntityShader(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,4 +259,8 @@ public class InputReplayTimer extends WrappedTimer {
|
|||||||
|
|
||||||
FMLCommonHandler.instance().fireKeyInput();
|
FMLCommonHandler.instance().fireKeyInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ public static class RunScheduledTasks extends Event {}
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,15 @@ import lombok.AccessLevel;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
|
||||||
import net.minecraft.util.ScreenShotHelper;
|
import net.minecraft.util.ScreenShotHelper;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
|
//#else
|
||||||
|
//$$ import com.replaymod.core.versions.MCVer.GlStateManager;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.replaymod.replay;
|
package com.replaymod.replay;
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import com.mojang.authlib.GameProfile;
|
|
||||||
import com.replaymod.core.utils.Restrictions;
|
import com.replaymod.core.utils.Restrictions;
|
||||||
import com.replaymod.core.utils.WrappedTimer;
|
import com.replaymod.core.utils.WrappedTimer;
|
||||||
import com.replaymod.replay.camera.CameraEntity;
|
import com.replaymod.replay.camera.CameraEntity;
|
||||||
@@ -18,22 +17,41 @@ import net.minecraft.client.Minecraft;
|
|||||||
import net.minecraft.client.entity.EntityOtherPlayerMP;
|
import net.minecraft.client.entity.EntityOtherPlayerMP;
|
||||||
import net.minecraft.client.gui.GuiScreen;
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
import net.minecraft.client.gui.ScaledResolution;
|
import net.minecraft.client.gui.ScaledResolution;
|
||||||
import net.minecraft.client.network.NetHandlerPlayClient;
|
|
||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.network.EnumPacketDirection;
|
|
||||||
import net.minecraft.network.NetworkManager;
|
import net.minecraft.network.NetworkManager;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
import net.minecraftforge.fml.client.FMLClientHandler;
|
|
||||||
import net.minecraftforge.fml.common.network.handshake.NetworkDispatcher;
|
|
||||||
import org.lwjgl.opengl.Display;
|
import org.lwjgl.opengl.Display;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static com.replaymod.core.versions.MCVer.*;
|
//#if MC>=10800
|
||||||
|
import com.mojang.authlib.GameProfile;
|
||||||
|
import net.minecraft.client.network.NetHandlerPlayClient;
|
||||||
|
import net.minecraft.network.EnumPacketDirection;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import net.minecraftforge.fml.client.FMLClientHandler;
|
||||||
|
import net.minecraftforge.fml.common.network.handshake.NetworkDispatcher;
|
||||||
|
|
||||||
import static net.minecraft.client.renderer.GlStateManager.*;
|
import static net.minecraft.client.renderer.GlStateManager.*;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.Loader;
|
||||||
|
//$$ import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
|
||||||
|
//$$ import com.replaymod.replay.gui.screen.GuiOpeningReplay;
|
||||||
|
//$$ import io.netty.channel.ChannelOutboundHandlerAdapter;
|
||||||
|
//$$ import net.minecraft.client.network.NetHandlerLoginClient;
|
||||||
|
//$$ import net.minecraft.entity.EntityLivingBase;
|
||||||
|
//$$ import net.minecraft.network.EnumConnectionState;
|
||||||
|
//$$
|
||||||
|
//$$ import java.net.InetSocketAddress;
|
||||||
|
//$$ import java.net.SocketAddress;
|
||||||
|
//$$
|
||||||
|
//$$ import static com.replaymod.core.versions.MCVer.GlStateManager.*;
|
||||||
|
//$$ import static com.replaymod.replay.ReplayModReplay.LOGGER;
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
import static com.replaymod.core.versions.MCVer.*;
|
||||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||||
|
|
||||||
@@ -82,7 +100,7 @@ public class ReplayHandler {
|
|||||||
|
|
||||||
markers = new ArrayList<>(replayFile.getMarkers().or(Collections.emptySet()));
|
markers = new ArrayList<>(replayFile.getMarkers().or(Collections.emptySet()));
|
||||||
|
|
||||||
replaySender = new ReplaySender(this, replayFile, asyncMode);
|
replaySender = new ReplaySender(this, replayFile, false);
|
||||||
|
|
||||||
setup();
|
setup();
|
||||||
|
|
||||||
@@ -90,6 +108,8 @@ public class ReplayHandler {
|
|||||||
overlay.setVisible(true);
|
overlay.setVisible(true);
|
||||||
|
|
||||||
FML_BUS.post(new ReplayOpenEvent.Post(this));
|
FML_BUS.post(new ReplayOpenEvent.Post(this));
|
||||||
|
|
||||||
|
replaySender.setAsyncMode(asyncMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void restartedReplay() {
|
void restartedReplay() {
|
||||||
@@ -148,6 +168,7 @@ public class ReplayHandler {
|
|||||||
//$$ mc.ingameGUI.getChatGUI().clearChatMessages();
|
//$$ mc.ingameGUI.getChatGUI().clearChatMessages();
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
NetworkManager networkManager = new NetworkManager(EnumPacketDirection.CLIENTBOUND) {
|
NetworkManager networkManager = new NetworkManager(EnumPacketDirection.CLIENTBOUND) {
|
||||||
@Override
|
@Override
|
||||||
public void exceptionCaught(ChannelHandlerContext ctx, Throwable t) {
|
public void exceptionCaught(ChannelHandlerContext ctx, Throwable t) {
|
||||||
@@ -177,6 +198,44 @@ public class ReplayHandler {
|
|||||||
//$$ channel.pipeline().addAfter("ReplayModReplay_replaySender", "fml:packet_handler", networkDispatcher);
|
//$$ channel.pipeline().addAfter("ReplayModReplay_replaySender", "fml:packet_handler", networkDispatcher);
|
||||||
//$$ channel.pipeline().fireChannelActive();
|
//$$ channel.pipeline().fireChannelActive();
|
||||||
//#endif
|
//#endif
|
||||||
|
//#else
|
||||||
|
//$$ NetworkManager networkManager = new NetworkManager(true) {
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public SocketAddress getRemoteAddress() {
|
||||||
|
//$$ // See https://github.com/Dyonovan/TCNodeTracker/issues/37
|
||||||
|
//$$ if (Loader.isModLoaded("tcnodetracker")) {
|
||||||
|
//$$ StackTraceElement elem = Thread.currentThread().getStackTrace()[2];
|
||||||
|
//$$ if ("com.dyonovan.tcnodetracker.events.ClientConnectionEvent".equals(elem.getClassName())) {
|
||||||
|
//$$ LOGGER.debug("TCNodeTracker crash workaround applied");
|
||||||
|
//$$ return new InetSocketAddress("replaymod.dummy", 0);
|
||||||
|
//$$ }
|
||||||
|
//$$ }
|
||||||
|
//$$ return super.getRemoteAddress();
|
||||||
|
//$$ }
|
||||||
|
//$$
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public void exceptionCaught(ChannelHandlerContext ctx, Throwable t) {
|
||||||
|
//$$ t.printStackTrace();
|
||||||
|
//$$ }
|
||||||
|
//$$ };
|
||||||
|
//$$ networkManager.setNetHandler(new NetHandlerLoginClient(networkManager, mc, null));
|
||||||
|
//$$
|
||||||
|
//$$ mc.displayGuiScreen(new GuiOpeningReplay(networkManager));
|
||||||
|
//$$
|
||||||
|
//$$ ChannelOutboundHandlerAdapter dummyHandler = new ChannelOutboundHandlerAdapter();
|
||||||
|
//$$ channel = new EmbeddedChannel(dummyHandler);
|
||||||
|
//$$ channel.pipeline().remove(dummyHandler);
|
||||||
|
//$$ channel.pipeline().addFirst("ReplayModReplay_replaySender", replaySender);
|
||||||
|
//$$ channel.pipeline().addAfter("ReplayModReplay_replaySender", "packet_handler", networkManager);
|
||||||
|
//$$ channel.pipeline().fireChannelActive();
|
||||||
|
//$$
|
||||||
|
//$$ // Call twice to force-overwrite the NetworkManager's internal state
|
||||||
|
//$$ networkManager.setConnectionState(EnumConnectionState.PLAY);
|
||||||
|
//$$ networkManager.getNetHandler().onConnectionStateTransition(EnumConnectionState.LOGIN, EnumConnectionState.PLAY);
|
||||||
|
//$$ networkManager.setConnectionState(EnumConnectionState.PLAY);
|
||||||
|
//$$
|
||||||
|
//$$ FMLNetworkHandler.fmlClientHandshake(networkManager);
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReplayFile getReplayFile() {
|
public ReplayFile getReplayFile() {
|
||||||
@@ -236,7 +295,11 @@ public class ReplayHandler {
|
|||||||
* When the entity is {@code null} or the camera entity, the camera becomes the view entity.
|
* When the entity is {@code null} or the camera entity, the camera becomes the view entity.
|
||||||
* @param e The entity to spectate
|
* @param e The entity to spectate
|
||||||
*/
|
*/
|
||||||
|
//#if MC>=10800
|
||||||
public void spectateEntity(Entity e) {
|
public void spectateEntity(Entity e) {
|
||||||
|
//#else
|
||||||
|
//$$ public void spectateEntity(EntityLivingBase e) {
|
||||||
|
//#endif
|
||||||
CameraEntity cameraEntity = getCameraEntity();
|
CameraEntity cameraEntity = getCameraEntity();
|
||||||
if (cameraEntity == null) {
|
if (cameraEntity == null) {
|
||||||
return; // Cannot spectate if we have no camera
|
return; // Cannot spectate if we have no camera
|
||||||
@@ -254,15 +317,15 @@ public class ReplayHandler {
|
|||||||
cameraEntity.setCameraController(new SpectatorCameraController(cameraEntity));
|
cameraEntity.setCameraController(new SpectatorCameraController(cameraEntity));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mc.getRenderViewEntity() != e) {
|
if (getRenderViewEntity(mc) != e) {
|
||||||
mc.setRenderViewEntity(e);
|
setRenderViewEntity(mc, e);
|
||||||
cameraEntity.setCameraPosRot(e);
|
cameraEntity.setCameraPosRot(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the camera as the view entity.
|
* Set the camera as the view entity.
|
||||||
* This is equivalent to {@link #spectateEntity(Entity) spectateEntity(null)}.
|
* This is equivalent to {@code spectateEntity(null)}.
|
||||||
*/
|
*/
|
||||||
public void spectateCamera() {
|
public void spectateCamera() {
|
||||||
spectateEntity(null);
|
spectateEntity(null);
|
||||||
@@ -273,7 +336,7 @@ public class ReplayHandler {
|
|||||||
* @return {@code true} if the camera is the view entity, {@code false} otherwise
|
* @return {@code true} if the camera is the view entity, {@code false} otherwise
|
||||||
*/
|
*/
|
||||||
public boolean isCameraView() {
|
public boolean isCameraView() {
|
||||||
return player(mc) instanceof CameraEntity && player(mc) == mc.getRenderViewEntity();
|
return player(mc) instanceof CameraEntity && player(mc) == getRenderViewEntity(mc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -374,11 +437,15 @@ public class ReplayHandler {
|
|||||||
entity.prevRotationYaw = entity.rotationYaw;
|
entity.prevRotationYaw = entity.rotationYaw;
|
||||||
entity.prevRotationPitch = entity.rotationPitch;
|
entity.prevRotationPitch = entity.rotationPitch;
|
||||||
}
|
}
|
||||||
|
//#if MC>=10800
|
||||||
try {
|
try {
|
||||||
mc.runTick();
|
mc.runTick();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace(); // This should never be thrown but whatever
|
e.printStackTrace(); // This should never be thrown but whatever
|
||||||
}
|
}
|
||||||
|
//#else
|
||||||
|
//$$ mc.runTick();
|
||||||
|
//#endif
|
||||||
|
|
||||||
//finally, updating the camera's position (which is not done by the sync jumping)
|
//finally, updating the camera's position (which is not done by the sync jumping)
|
||||||
moveCameraToTargetPosition();
|
moveCameraToTargetPosition();
|
||||||
|
|||||||
@@ -19,12 +19,20 @@ import com.replaymod.replaystudio.replay.ReplayFile;
|
|||||||
import com.replaymod.replaystudio.replay.ZipReplayFile;
|
import com.replaymod.replaystudio.replay.ZipReplayFile;
|
||||||
import com.replaymod.replaystudio.studio.ReplayStudio;
|
import com.replaymod.replaystudio.studio.ReplayStudio;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
import org.apache.logging.log4j.Logger;
|
//#else
|
||||||
import org.lwjgl.input.Keyboard;
|
//$$ import cpw.mods.fml.common.Mod;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -36,7 +44,9 @@ import java.util.Optional;
|
|||||||
version = "@MOD_VERSION@",
|
version = "@MOD_VERSION@",
|
||||||
acceptedMinecraftVersions = "@MC_VERSION@",
|
acceptedMinecraftVersions = "@MC_VERSION@",
|
||||||
acceptableRemoteVersions = "*",
|
acceptableRemoteVersions = "*",
|
||||||
|
//#if MC>=10800
|
||||||
clientSideOnly = true,
|
clientSideOnly = true,
|
||||||
|
//#endif
|
||||||
useMetadata = true)
|
useMetadata = true)
|
||||||
public class ReplayModReplay {
|
public class ReplayModReplay {
|
||||||
public static final String MOD_ID = "replaymod-replay";
|
public static final String MOD_ID = "replaymod-replay";
|
||||||
|
|||||||
@@ -31,8 +31,6 @@ import net.minecraft.world.WorldType;
|
|||||||
import net.minecraft.world.chunk.Chunk;
|
import net.minecraft.world.chunk.Chunk;
|
||||||
import net.minecraft.world.chunk.IChunkProvider;
|
import net.minecraft.world.chunk.IChunkProvider;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
|
|
||||||
@@ -50,6 +48,15 @@ import net.minecraft.util.text.ITextComponent;
|
|||||||
//$$ import net.minecraft.util.IChatComponent;
|
//$$ import net.minecraft.util.IChatComponent;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.gameevent.TickEvent;
|
||||||
|
//$$ import org.apache.commons.io.Charsets;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -89,6 +96,10 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
SPacketPlayerAbilities.class,
|
SPacketPlayerAbilities.class,
|
||||||
SPacketTitle.class
|
SPacketTitle.class
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
|
//$$ S43PacketCamera.class,
|
||||||
|
//$$ S45PacketTitle.class,
|
||||||
|
//#endif
|
||||||
//$$ S06PacketUpdateHealth.class,
|
//$$ S06PacketUpdateHealth.class,
|
||||||
//$$ S2DPacketOpenWindow.class,
|
//$$ S2DPacketOpenWindow.class,
|
||||||
//$$ S2EPacketCloseWindow.class,
|
//$$ S2EPacketCloseWindow.class,
|
||||||
@@ -97,9 +108,7 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
//$$ S36PacketSignEditorOpen.class,
|
//$$ S36PacketSignEditorOpen.class,
|
||||||
//$$ S37PacketStatistics.class,
|
//$$ S37PacketStatistics.class,
|
||||||
//$$ S1FPacketSetExperience.class,
|
//$$ S1FPacketSetExperience.class,
|
||||||
//$$ S43PacketCamera.class,
|
//$$ S39PacketPlayerAbilities.class
|
||||||
//$$ S39PacketPlayerAbilities.class,
|
|
||||||
//$$ S45PacketTitle.class
|
|
||||||
//#endif
|
//#endif
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -390,7 +399,11 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
|
|
||||||
int i = readVarInt(pb);
|
int i = readVarInt(pb);
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
Packet p = EnumConnectionState.PLAY.getPacket(EnumPacketDirection.CLIENTBOUND, i);
|
Packet p = EnumConnectionState.PLAY.getPacket(EnumPacketDirection.CLIENTBOUND, i);
|
||||||
|
//#else
|
||||||
|
//$$ Packet p = Packet.generatePacket(EnumConnectionState.PLAY.func_150755_b(), i);
|
||||||
|
//#endif
|
||||||
p.readPacketData(pb);
|
p.readPacketData(pb);
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
@@ -409,7 +422,12 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
//$$ if (p instanceof S3FPacketCustomPayload) {
|
//$$ if (p instanceof S3FPacketCustomPayload) {
|
||||||
//$$ S3FPacketCustomPayload packet = (S3FPacketCustomPayload) p;
|
//$$ S3FPacketCustomPayload packet = (S3FPacketCustomPayload) p;
|
||||||
//#endif
|
//#endif
|
||||||
if (Restrictions.PLUGIN_CHANNEL.equals(packet.getChannelName())) {
|
//#if MC>=10800
|
||||||
|
String channelName = packet.getChannelName();
|
||||||
|
//#else
|
||||||
|
//$$ String channelName = packet.func_149169_c();
|
||||||
|
//#endif
|
||||||
|
if (Restrictions.PLUGIN_CHANNEL.equals(channelName)) {
|
||||||
final String unknown = replayHandler.getRestrictions().handle(packet);
|
final String unknown = replayHandler.getRestrictions().handle(packet);
|
||||||
if (unknown == null) {
|
if (unknown == null) {
|
||||||
return null;
|
return null;
|
||||||
@@ -461,9 +479,15 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
//$$ if (p instanceof S3FPacketCustomPayload) {
|
//$$ if (p instanceof S3FPacketCustomPayload) {
|
||||||
//$$ S3FPacketCustomPayload packet = (S3FPacketCustomPayload) p;
|
//$$ S3FPacketCustomPayload packet = (S3FPacketCustomPayload) p;
|
||||||
//#endif
|
//#endif
|
||||||
if ("MC|BOpen".equals(packet.getChannelName())) {
|
//#if MC>=10800
|
||||||
|
String channelName = packet.getChannelName();
|
||||||
|
//#else
|
||||||
|
//$$ String channelName = packet.func_149169_c();
|
||||||
|
//#endif
|
||||||
|
if ("MC|BOpen".equals(channelName)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
//#if MC>=10800
|
||||||
}
|
}
|
||||||
|
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
@@ -476,10 +500,15 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
//$$ String url = packet.getURL();
|
//$$ String url = packet.getURL();
|
||||||
//#else
|
//#else
|
||||||
//$$ String url = packet.func_179783_a();
|
//$$ String url = packet.func_179783_a();
|
||||||
//#endif
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
if (url.startsWith("replay://")) {
|
if (url.startsWith("replay://")) {
|
||||||
|
//#else
|
||||||
|
//$$ String url;
|
||||||
|
//$$ if ("MC|RPack".equals(channelName) &&
|
||||||
|
//$$ (url = new String(packet.func_149168_d(), Charsets.UTF_8)).startsWith("replay://")) {
|
||||||
|
//#endif
|
||||||
int id = Integer.parseInt(url.substring("replay://".length()));
|
int id = Integer.parseInt(url.substring("replay://".length()));
|
||||||
Map<Integer, String> index = replayFile.getResourcePackIndex();
|
Map<Integer, String> index = replayFile.getResourcePackIndex();
|
||||||
if (index != null) {
|
if (index != null) {
|
||||||
@@ -503,11 +532,16 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
//#else
|
//#else
|
||||||
//$$ if(p instanceof S01PacketJoinGame) {
|
//$$ if(p instanceof S01PacketJoinGame) {
|
||||||
//$$ S01PacketJoinGame packet = (S01PacketJoinGame) p;
|
//$$ S01PacketJoinGame packet = (S01PacketJoinGame) p;
|
||||||
//$$ int entId = packet.getEntityId();
|
//#if MC>=10800
|
||||||
|
//$$ int entId = packet.getEntityId();
|
||||||
|
//#else
|
||||||
|
//$$ int entId = packet.func_149197_c();
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
allowMovement = true;
|
allowMovement = true;
|
||||||
actualID = entId;
|
actualID = entId;
|
||||||
entId = -1789435; // Camera entity id should be negative which is an invalid id and can't be used by servers
|
entId = -1789435; // Camera entity id should be negative which is an invalid id and can't be used by servers
|
||||||
|
//#if MC>=10800
|
||||||
int dimension = packet.getDimension();
|
int dimension = packet.getDimension();
|
||||||
EnumDifficulty difficulty = packet.getDifficulty();
|
EnumDifficulty difficulty = packet.getDifficulty();
|
||||||
int maxPlayers = packet.getMaxPlayers();
|
int maxPlayers = packet.getMaxPlayers();
|
||||||
@@ -520,6 +554,15 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
//$$ p = new S01PacketJoinGame(entId, GameType.SPECTATOR, false, dimension,
|
//$$ p = new S01PacketJoinGame(entId, GameType.SPECTATOR, false, dimension,
|
||||||
//$$ difficulty, maxPlayers, worldType, false);
|
//$$ difficulty, maxPlayers, worldType, false);
|
||||||
//#endif
|
//#endif
|
||||||
|
//#else
|
||||||
|
//$$ int dimension = packet.func_149194_f();
|
||||||
|
//$$ EnumDifficulty difficulty = packet.func_149192_g();
|
||||||
|
//$$ int maxPlayers = packet.func_149193_h();
|
||||||
|
//$$ WorldType worldType = packet.func_149196_i();
|
||||||
|
//$$
|
||||||
|
//$$ p = new S01PacketJoinGame(entId, GameType.ADVENTURE, false, dimension,
|
||||||
|
//$$ difficulty, maxPlayers, worldType);
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
@@ -535,7 +578,12 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
//$$ respawn.getDifficulty(), respawn.getWorldType(), GameType.SPECTATOR);
|
//$$ respawn.getDifficulty(), respawn.getWorldType(), GameType.SPECTATOR);
|
||||||
//#else
|
//#else
|
||||||
//$$ p = new S07PacketRespawn(respawn.func_149082_c(),
|
//$$ p = new S07PacketRespawn(respawn.func_149082_c(),
|
||||||
//$$ respawn.func_149081_d(), respawn.func_149080_f(), GameType.SPECTATOR);
|
//$$ respawn.func_149081_d(), respawn.func_149080_f(),
|
||||||
|
//#if MC>=10800
|
||||||
|
//$$ GameType.SPECTATOR);
|
||||||
|
//#else
|
||||||
|
//$$ GameType.ADVENTURE);
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
@@ -560,6 +608,7 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
|
|
||||||
CameraEntity cent = replayHandler.getCameraEntity();
|
CameraEntity cent = replayHandler.getCameraEntity();
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
for (SPacketPlayerPosLook.EnumFlags relative : ppl.getFlags()) {
|
for (SPacketPlayerPosLook.EnumFlags relative : ppl.getFlags()) {
|
||||||
if (relative == SPacketPlayerPosLook.EnumFlags.X
|
if (relative == SPacketPlayerPosLook.EnumFlags.X
|
||||||
@@ -574,6 +623,7 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
return null; // At least one of the coordinates is relative, so we don't care
|
return null; // At least one of the coordinates is relative, so we don't care
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|
||||||
if(cent != null) {
|
if(cent != null) {
|
||||||
//#if MC>=10809
|
//#if MC>=10809
|
||||||
@@ -654,8 +704,10 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
ctx.channel().attr(NetworkManager.PROTOCOL_ATTRIBUTE_KEY).set(EnumConnectionState.PLAY);
|
ctx.channel().attr(NetworkManager.PROTOCOL_ATTRIBUTE_KEY).set(EnumConnectionState.PLAY);
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ ctx.attr(NetworkManager.attrKeyConnectionState).set(EnumConnectionState.PLAY);
|
//$$ ctx.attr(NetworkManager.attrKeyConnectionState).set(EnumConnectionState.PLAY);
|
||||||
//#endif
|
//#endif
|
||||||
|
//#endif
|
||||||
super.channelActive(ctx);
|
super.channelActive(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ import lombok.Setter;
|
|||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.entity.AbstractClientPlayer;
|
import net.minecraft.client.entity.AbstractClientPlayer;
|
||||||
import net.minecraft.client.entity.EntityPlayerSP;
|
|
||||||
import net.minecraft.client.network.NetHandlerPlayClient;
|
import net.minecraft.client.network.NetHandlerPlayClient;
|
||||||
import net.minecraft.client.settings.KeyBinding;
|
import net.minecraft.client.settings.KeyBinding;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.EntityLiving;
|
import net.minecraft.entity.EntityLiving;
|
||||||
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.item.EntityItemFrame;
|
import net.minecraft.entity.item.EntityItemFrame;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
@@ -25,9 +25,6 @@ import net.minecraftforge.client.event.EntityViewRenderEvent;
|
|||||||
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||||
import net.minecraftforge.client.event.RenderHandEvent;
|
import net.minecraftforge.client.event.RenderHandEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
|
||||||
|
|
||||||
//#if MC>=10904
|
//#if MC>=10904
|
||||||
import net.minecraft.inventory.EntityEquipmentSlot;
|
import net.minecraft.inventory.EntityEquipmentSlot;
|
||||||
@@ -46,6 +43,19 @@ import net.minecraft.util.text.ITextComponent;
|
|||||||
//$$ import net.minecraft.util.MovingObjectPosition;
|
//$$ import net.minecraft.util.MovingObjectPosition;
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
|
import net.minecraft.client.entity.EntityPlayerSP;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||||
|
//#else
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.EventPriority;
|
||||||
|
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
//$$ import cpw.mods.fml.common.gameevent.TickEvent;
|
||||||
|
//$$ import net.minecraft.client.entity.EntityClientPlayerMP;
|
||||||
|
//$$ import net.minecraft.util.Session;
|
||||||
|
//#endif
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
@@ -57,7 +67,13 @@ import static com.replaymod.core.versions.MCVer.*;
|
|||||||
* During a replay the player should be an instance of this class.
|
* During a replay the player should be an instance of this class.
|
||||||
* Camera movement is controlled by a separate {@link CameraController}.
|
* Camera movement is controlled by a separate {@link CameraController}.
|
||||||
*/
|
*/
|
||||||
public class CameraEntity extends EntityPlayerSP {
|
public class CameraEntity
|
||||||
|
//#if MC>=10800
|
||||||
|
extends EntityPlayerSP
|
||||||
|
//#else
|
||||||
|
//$$ extends EntityClientPlayerMP
|
||||||
|
//#endif
|
||||||
|
{
|
||||||
/**
|
/**
|
||||||
* Roll of this camera in degrees.
|
* Roll of this camera in degrees.
|
||||||
*/
|
*/
|
||||||
@@ -89,8 +105,13 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
//$$ public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatisticsManager statisticsManager) {
|
//$$ public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatisticsManager statisticsManager) {
|
||||||
//$$ super(mcIn, worldIn, netHandlerPlayClient, statisticsManager);
|
//$$ super(mcIn, worldIn, netHandlerPlayClient, statisticsManager);
|
||||||
//#else
|
//#else
|
||||||
|
//#if MC>=10800
|
||||||
//$$ public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatFileWriter statFileWriter) {
|
//$$ public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatFileWriter statFileWriter) {
|
||||||
//$$ super(mcIn, worldIn, netHandlerPlayClient, statFileWriter);
|
//$$ super(mcIn, worldIn, netHandlerPlayClient, statFileWriter);
|
||||||
|
//#else
|
||||||
|
//$$ public CameraEntity(Minecraft mcIn, World worldIn, Session session, NetHandlerPlayClient netHandlerPlayClient, StatFileWriter statFileWriter) {
|
||||||
|
//$$ super(mcIn, worldIn, session, netHandlerPlayClient, statFileWriter);
|
||||||
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
//#endif
|
//#endif
|
||||||
FORGE_BUS.register(eventHandler);
|
FORGE_BUS.register(eventHandler);
|
||||||
@@ -151,31 +172,45 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
* @param to The entity whose position to copy
|
* @param to The entity whose position to copy
|
||||||
*/
|
*/
|
||||||
public void setCameraPosRot(Entity to) {
|
public void setCameraPosRot(Entity to) {
|
||||||
|
if (to == this) return;
|
||||||
|
//#if MC>=10800
|
||||||
|
float yOffset = 0;
|
||||||
|
//#else
|
||||||
|
//$$ float yOffset = 1.62f; // Magic value (eye height) from EntityRenderer#orientCamera
|
||||||
|
//#endif
|
||||||
prevPosX = to.prevPosX;
|
prevPosX = to.prevPosX;
|
||||||
prevPosY = to.prevPosY;
|
prevPosY = to.prevPosY + yOffset;
|
||||||
prevPosZ = to.prevPosZ;
|
prevPosZ = to.prevPosZ;
|
||||||
prevRotationYaw = to.prevRotationYaw;
|
prevRotationYaw = to.prevRotationYaw;
|
||||||
prevRotationPitch = to.prevRotationPitch;
|
prevRotationPitch = to.prevRotationPitch;
|
||||||
posX = to.posX;
|
posX = to.posX;
|
||||||
posY = to.posY;
|
posY = to.posY + yOffset;
|
||||||
posZ = to.posZ;
|
posZ = to.posZ;
|
||||||
rotationYaw = to.rotationYaw;
|
rotationYaw = to.rotationYaw;
|
||||||
rotationPitch = to.rotationPitch;
|
rotationPitch = to.rotationPitch;
|
||||||
lastTickPosX = to.lastTickPosX;
|
lastTickPosX = to.lastTickPosX;
|
||||||
lastTickPosY = to.lastTickPosY;
|
lastTickPosY = to.lastTickPosY + yOffset;
|
||||||
lastTickPosZ = to.lastTickPosZ;
|
lastTickPosZ = to.lastTickPosZ;
|
||||||
updateBoundingBox();
|
updateBoundingBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateBoundingBox() {
|
private void updateBoundingBox() {
|
||||||
|
//#if MC>=10800
|
||||||
setEntityBoundingBox(new AxisAlignedBB(
|
setEntityBoundingBox(new AxisAlignedBB(
|
||||||
|
//#else
|
||||||
|
//$$ this.boundingBox.setBB(AxisAlignedBB.getBoundingBox(
|
||||||
|
//#endif
|
||||||
posX - width / 2, posY, posZ - width / 2,
|
posX - width / 2, posY, posZ - width / 2,
|
||||||
posX + width / 2, posY + height, posZ + width / 2));
|
posX + width / 2, posY + height, posZ + width / 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdate() {
|
public void onUpdate() {
|
||||||
Entity view = mc.getRenderViewEntity();
|
//#if MC>=10800
|
||||||
|
Entity view = getRenderViewEntity(mc);
|
||||||
|
//#else
|
||||||
|
//$$ EntityLivingBase view = getRenderViewEntity(mc);
|
||||||
|
//#endif
|
||||||
if (view != null) {
|
if (view != null) {
|
||||||
// Make sure we're always spectating the right entity
|
// Make sure we're always spectating the right entity
|
||||||
// This is important if the spectated player respawns as their
|
// This is important if the spectated player respawns as their
|
||||||
@@ -191,9 +226,9 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
}
|
}
|
||||||
view = world(this).getPlayerEntityByUUID(spectating);
|
view = world(this).getPlayerEntityByUUID(spectating);
|
||||||
if (view != null) {
|
if (view != null) {
|
||||||
mc.setRenderViewEntity(view);
|
setRenderViewEntity(mc, view);
|
||||||
} else {
|
} else {
|
||||||
mc.setRenderViewEntity(this);
|
setRenderViewEntity(mc, this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -216,7 +251,7 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRotation(float yaw, float pitch) {
|
public void setRotation(float yaw, float pitch) {
|
||||||
if (mc.getRenderViewEntity() == this) {
|
if (getRenderViewEntity(mc) == this) {
|
||||||
// Only update camera rotation when the camera is the view
|
// Only update camera rotation when the camera is the view
|
||||||
super.setRotation(yaw, pitch);
|
super.setRotation(yaw, pitch);
|
||||||
}
|
}
|
||||||
@@ -232,10 +267,17 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
return falseUnlessSpectating(e -> e.isInsideOfMaterial(materialIn)); // Make sure no overlays are rendered
|
return falseUnlessSpectating(e -> e.isInsideOfMaterial(materialIn)); // Make sure no overlays are rendered
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Override
|
@Override
|
||||||
public boolean isInLava() {
|
public boolean isInLava() {
|
||||||
return falseUnlessSpectating(Entity::isInLava); // Make sure no lava overlay is rendered
|
return falseUnlessSpectating(Entity::isInLava); // Make sure no lava overlay is rendered
|
||||||
}
|
}
|
||||||
|
//#else
|
||||||
|
//$$ @Override
|
||||||
|
//$$ public boolean handleLavaMovement() {
|
||||||
|
//$$ return falseUnlessSpectating(Entity::handleLavaMovement); // Make sure no lava overlay is rendered
|
||||||
|
//$$ }
|
||||||
|
//#endif
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isInWater() {
|
public boolean isInWater() {
|
||||||
@@ -248,7 +290,7 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean falseUnlessSpectating(Function<Entity, Boolean> property) {
|
private boolean falseUnlessSpectating(Function<Entity, Boolean> property) {
|
||||||
Entity view = mc.getRenderViewEntity();
|
Entity view = getRenderViewEntity(mc);
|
||||||
if (view != null && view != this) {
|
if (view != null && view != this) {
|
||||||
return property.apply(view);
|
return property.apply(view);
|
||||||
}
|
}
|
||||||
@@ -260,20 +302,24 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
return false; // We are in full control of ourselves
|
return false; // We are in full control of ourselves
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Override
|
@Override
|
||||||
protected void createRunningParticles() {
|
protected void createRunningParticles() {
|
||||||
// We do not produce any particles, we are a camera
|
// We do not produce any particles, we are a camera
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canBeCollidedWith() {
|
public boolean canBeCollidedWith() {
|
||||||
return false; // We are a camera, we cannot collide
|
return false; // We are a camera, we cannot collide
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Override
|
@Override
|
||||||
public boolean isSpectator() {
|
public boolean isSpectator() {
|
||||||
return ReplayModReplay.instance.getReplayHandler().isCameraView(); // Make sure we're treated as spectator
|
return ReplayModReplay.instance.getReplayHandler().isCameraView(); // Make sure we're treated as spectator
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldRenderInPass(int pass) {
|
public boolean shouldRenderInPass(int pass) {
|
||||||
@@ -285,7 +331,7 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isInvisible() {
|
public boolean isInvisible() {
|
||||||
Entity view = mc.getRenderViewEntity();
|
Entity view = getRenderViewEntity(mc);
|
||||||
if (view != this) {
|
if (view != this) {
|
||||||
return view.isInvisible();
|
return view.isInvisible();
|
||||||
}
|
}
|
||||||
@@ -294,13 +340,14 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResourceLocation getLocationSkin() {
|
public ResourceLocation getLocationSkin() {
|
||||||
Entity view = mc.getRenderViewEntity();
|
Entity view = getRenderViewEntity(mc);
|
||||||
if (view != this && view instanceof EntityPlayer) {
|
if (view != this && view instanceof EntityPlayer) {
|
||||||
return Utils.getResourceLocationForPlayerUUID(view.getUniqueID());
|
return Utils.getResourceLocationForPlayerUUID(view.getUniqueID());
|
||||||
}
|
}
|
||||||
return super.getLocationSkin();
|
return super.getLocationSkin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@Override
|
@Override
|
||||||
public String getSkinType() {
|
public String getSkinType() {
|
||||||
Entity view = mc.getRenderViewEntity();
|
Entity view = mc.getRenderViewEntity();
|
||||||
@@ -309,10 +356,11 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
}
|
}
|
||||||
return super.getSkinType();
|
return super.getSkinType();
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getSwingProgress(float renderPartialTicks) {
|
public float getSwingProgress(float renderPartialTicks) {
|
||||||
Entity view = mc.getRenderViewEntity();
|
Entity view = getRenderViewEntity(mc);
|
||||||
if (view != this && view instanceof EntityPlayer) {
|
if (view != this && view instanceof EntityPlayer) {
|
||||||
return ((EntityPlayer) view).getSwingProgress(renderPartialTicks);
|
return ((EntityPlayer) view).getSwingProgress(renderPartialTicks);
|
||||||
}
|
}
|
||||||
@@ -403,17 +451,21 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
|
|
||||||
if (mc.gameSettings.keyBindAttack.isPressed() || mc.gameSettings.keyBindUseItem.isPressed()) {
|
if (mc.gameSettings.keyBindAttack.isPressed() || mc.gameSettings.keyBindUseItem.isPressed()) {
|
||||||
if (canSpectate(mc.pointedEntity)) {
|
if (canSpectate(mc.pointedEntity)) {
|
||||||
ReplayModReplay.instance.getReplayHandler().spectateEntity(mc.pointedEntity);
|
ReplayModReplay.instance.getReplayHandler().spectateEntity(
|
||||||
|
//#if MC<=10710
|
||||||
|
//$$ (EntityLivingBase)
|
||||||
|
//#endif
|
||||||
|
mc.pointedEntity);
|
||||||
// Make sure we don't exit right away
|
// Make sure we don't exit right away
|
||||||
mc.gameSettings.keyBindSneak.pressTime = 0;
|
mc.gameSettings.keyBindSneak.pressTime = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, KeyBinding> keyBindings = ReplayMod.instance.getKeyBindingRegistry().getKeyBindings();
|
Map<String, KeyBinding> keyBindings = ReplayMod.instance.getKeyBindingRegistry().getKeyBindings();
|
||||||
if (keyBindings.get("replaymod.input.rollclockwise").isKeyDown()) {
|
if (isKeyDown(keyBindings.get("replaymod.input.rollclockwise"))) {
|
||||||
roll += Utils.isCtrlDown() ? 0.2 : 1;
|
roll += Utils.isCtrlDown() ? 0.2 : 1;
|
||||||
}
|
}
|
||||||
if (keyBindings.get("replaymod.input.rollcounterclockwise").isKeyDown()) {
|
if (isKeyDown(keyBindings.get("replaymod.input.rollcounterclockwise"))) {
|
||||||
roll -= Utils.isCtrlDown() ? 0.2 : 1;
|
roll -= Utils.isCtrlDown() ? 0.2 : 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -427,7 +479,11 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
|
|
||||||
public boolean canSpectate(Entity e) {
|
public boolean canSpectate(Entity e) {
|
||||||
return e != null && !e.isInvisible()
|
return e != null && !e.isInvisible()
|
||||||
|
//#if MC>=10800
|
||||||
&& (e instanceof EntityPlayer || e instanceof EntityLiving || e instanceof EntityItemFrame);
|
&& (e instanceof EntityPlayer || e instanceof EntityLiving || e instanceof EntityItemFrame);
|
||||||
|
//#else
|
||||||
|
//$$ && e instanceof EntityPlayer; // cannot be more generic since 1.7.10 has no concept of eye height
|
||||||
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//#if MC>=11102
|
//#if MC>=11102
|
||||||
@@ -448,7 +504,14 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
//$$ }
|
//$$ }
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
private class EventHandler {
|
//#if MC>=10800
|
||||||
|
private
|
||||||
|
//#else
|
||||||
|
//$$ public // All event handlers need to be public in 1.7.10
|
||||||
|
//#endif
|
||||||
|
class EventHandler {
|
||||||
|
private EventHandler() {}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onPreClientTick(TickEvent.ClientTickEvent event) {
|
public void onPreClientTick(TickEvent.ClientTickEvent event) {
|
||||||
if (event.phase == TickEvent.Phase.START) {
|
if (event.phase == TickEvent.Phase.START) {
|
||||||
@@ -490,14 +553,14 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onRenderHand(RenderHandEvent event) {
|
public void onRenderHand(RenderHandEvent event) {
|
||||||
// Unless we are spectating another player, don't render our hand
|
// Unless we are spectating another player, don't render our hand
|
||||||
if (mc.getRenderViewEntity() == CameraEntity.this || !(mc.getRenderViewEntity() instanceof EntityPlayer)) {
|
if (getRenderViewEntity(mc) == CameraEntity.this || !(getRenderViewEntity(mc) instanceof EntityPlayer)) {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent(priority = EventPriority.LOWEST)
|
@SubscribeEvent(priority = EventPriority.LOWEST)
|
||||||
public void onRenderHandMonitor(RenderHandEvent event) {
|
public void onRenderHandMonitor(RenderHandEvent event) {
|
||||||
Entity view = mc.getRenderViewEntity();
|
Entity view = getRenderViewEntity(mc);
|
||||||
if (view instanceof EntityPlayer) {
|
if (view instanceof EntityPlayer) {
|
||||||
EntityPlayer player = (EntityPlayer) view;
|
EntityPlayer player = (EntityPlayer) view;
|
||||||
// When the spectated player has changed, force equip their items to prevent the equip animation
|
// When the spectated player has changed, force equip their items to prevent the equip animation
|
||||||
@@ -525,6 +588,7 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if MC>=10800
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onEntityViewRenderEvent(EntityViewRenderEvent.CameraSetup event) {
|
public void onEntityViewRenderEvent(EntityViewRenderEvent.CameraSetup event) {
|
||||||
if (mc.getRenderViewEntity() == CameraEntity.this) {
|
if (mc.getRenderViewEntity() == CameraEntity.this) {
|
||||||
@@ -535,6 +599,7 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
//#endif
|
//#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//#endif
|
||||||
|
|
||||||
private boolean heldItemTooltipsWasTrue;
|
private boolean heldItemTooltipsWasTrue;
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class ClassicCameraController implements CameraController {
|
|||||||
boolean forward = false, backward = false, left = false, right = false, up = false, down = false;
|
boolean forward = false, backward = false, left = false, right = false, up = false, down = false;
|
||||||
speedup = false;
|
speedup = false;
|
||||||
for(KeyBinding kb : Minecraft.getMinecraft().gameSettings.keyBindings) {
|
for(KeyBinding kb : Minecraft.getMinecraft().gameSettings.keyBindings) {
|
||||||
if(!kb.isKeyDown()) continue;
|
if(!isKeyDown(kb)) continue;
|
||||||
if(kb.getKeyDescription().equals("key.forward")) {
|
if(kb.getKeyDescription().equals("key.forward")) {
|
||||||
forward = true;
|
forward = true;
|
||||||
speedup = true;
|
speedup = true;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user