2 |
3 | # OverflowAnimations
4 |
5 |
6 |

7 |
8 | This mod is now replaced by OverflowAnimationsV2, which integrates Sk1er OAM into the mod (users no longer need Sk1er OAM to run it) and includes a complete rewrite of the 1.7 animation features.
9 |
10 | ## **Check it out [here](https://github.com/Polyfrost/OverflowAnimationsV2/releases/latest/)!**
11 |
--------------------------------------------------------------------------------
/build.gradle.kts:
--------------------------------------------------------------------------------
1 | import gg.essential.gradle.util.noServerRunConfigs
2 |
3 | plugins {
4 | id("gg.essential.multi-version")
5 | id("gg.essential.defaults.repo")
6 | id("gg.essential.defaults.java")
7 | id("gg.essential.defaults.loom")
8 | id("com.github.johnrengelman.shadow")
9 | id("net.kyori.blossom")
10 | java
11 | }
12 |
13 | val mod_name: String by project
14 | val mod_version: String by project
15 | val mod_id: String by project
16 |
17 | preprocess {
18 | vars.put("MODERN", if (project.platform.mcMinor >= 16) 1 else 0)
19 | }
20 |
21 | blossom {
22 | replaceToken("@VER@", mod_version)
23 | replaceToken("@NAME@", mod_name)
24 | replaceToken("@ID@", mod_id)
25 | }
26 |
27 | version = mod_version
28 | group = "cc.woverflow"
29 | base {
30 | archivesName.set(mod_name)
31 | }
32 |
33 | loom.noServerRunConfigs()
34 | loom {
35 | if (project.platform.isLegacyForge) {
36 | launchConfigs.named("client") {
37 | arg("--tweakClass", "cc.polyfrost.oneconfigwrapper.OneConfigWrapper")
38 | property("mixin.debug.export", "true")
39 | }
40 | }
41 | if (project.platform.isForge) {
42 | forge {
43 | mixinConfig("mixins.${mod_id}.json")
44 | }
45 | }
46 | mixin.defaultRefmapName.set("mixins.${mod_id}.refmap.json")
47 | }
48 |
49 | repositories {
50 | maven("https://repo.polyfrost.cc/releases")
51 | }
52 |
53 | val shade: Configuration by configurations.creating {
54 | configurations.implementation.get().extendsFrom(this)
55 | }
56 |
57 | dependencies {
58 | compileOnly("cc.polyfrost:oneconfig-1.8.9-forge:0.1.0-alpha+")
59 | shade("cc.polyfrost:oneconfig-wrapper-launchwrapper:1.0.0-alpha+")
60 | modCompileOnly(rootProject.files("libs/oam.jar"))
61 | }
62 |
63 | tasks.processResources {
64 | inputs.property("id", mod_id)
65 | inputs.property("name", mod_name)
66 | val java = if (project.platform.mcMinor >= 18) {
67 | 17
68 | } else {if (project.platform.mcMinor == 17) 16 else 8 }
69 | val compatLevel = "JAVA_${java}"
70 | inputs.property("java", java)
71 | inputs.property("java_level", compatLevel)
72 | inputs.property("version", mod_version)
73 | inputs.property("mcVersionStr", project.platform.mcVersionStr)
74 | filesMatching(listOf("mcmod.info", "mixins.${mod_id}.json", "mods.toml")) {
75 | expand(mapOf(
76 | "id" to mod_id,
77 | "name" to mod_name,
78 | "java" to java,
79 | "java_level" to compatLevel,
80 | "version" to mod_version,
81 | "mcVersionStr" to project.platform.mcVersionStr
82 | ))
83 | }
84 | filesMatching("fabric.mod.json") {
85 | expand(mapOf(
86 | "id" to mod_id,
87 | "name" to mod_name,
88 | "java" to java,
89 | "java_level" to compatLevel,
90 | "version" to mod_version,
91 | "mcVersionStr" to project.platform.mcVersionStr.substringBeforeLast(".") + ".x"
92 | ))
93 | }
94 | }
95 |
96 | tasks {
97 | withType(Jar::class.java) {
98 | if (project.platform.isFabric) {
99 | exclude("mcmod.info", "mods.toml")
100 | } else {
101 | exclude("fabric.mod.json")
102 | if (project.platform.isLegacyForge) {
103 | exclude("mods.toml")
104 | } else {
105 | exclude("mcmod.info")
106 | }
107 | }
108 | }
109 | named
("shadowJar") {
110 | archiveClassifier.set("dev")
111 | configurations = listOf(shade)
112 | duplicatesStrategy = DuplicatesStrategy.EXCLUDE
113 | }
114 | remapJar {
115 | input.set(shadowJar.get().archiveFile)
116 | archiveClassifier.set("")
117 | }
118 | jar {
119 | manifest {
120 | attributes(mapOf(
121 | "ModSide" to "CLIENT",
122 | "TweakOrder" to "0",
123 | "TweakClass" to "cc.polyfrost.oneconfigwrapper.OneConfigWrapper",
124 | "MixinConfigs" to "mixins.${mod_id}.json",
125 | "ForceLoadAsMod" to true
126 | ))
127 | }
128 | dependsOn(shadowJar)
129 | archiveClassifier.set("")
130 | enabled = false
131 | }
132 | }
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | mod_name = OverflowAnimations
2 | mod_id = overflowanimations
3 | mod_version = 1.2.0-alpha1
4 |
5 | org.gradle.daemon=true
6 | org.gradle.parallel=true
7 | org.gradle.configureoncommand=true
8 | org.gradle.parallel.threads=4
9 | org.gradle.jvmargs=-Xmx3G
10 | essential.defaults.loom=0
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Polyfrost/OverflowAnimations/d97de23940dd34f7699ea92541c652802bd848a6/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | #
4 | # Copyright 2015 the original author or authors.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # https://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | ##############################################################################
20 | ##
21 | ## Gradle start up script for UN*X
22 | ##
23 | ##############################################################################
24 |
25 | # Attempt to set APP_HOME
26 | # Resolve links: $0 may be a link
27 | PRG="$0"
28 | # Need this for relative symlinks.
29 | while [ -h "$PRG" ] ; do
30 | ls=`ls -ld "$PRG"`
31 | link=`expr "$ls" : '.*-> \(.*\)$'`
32 | if expr "$link" : '/.*' > /dev/null; then
33 | PRG="$link"
34 | else
35 | PRG=`dirname "$PRG"`"/$link"
36 | fi
37 | done
38 | SAVED="`pwd`"
39 | cd "`dirname \"$PRG\"`/" >/dev/null
40 | APP_HOME="`pwd -P`"
41 | cd "$SAVED" >/dev/null
42 |
43 | APP_NAME="Gradle"
44 | APP_BASE_NAME=`basename "$0"`
45 |
46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
48 |
49 | # Use the maximum available, or set MAX_FD != -1 to use that value.
50 | MAX_FD="maximum"
51 |
52 | warn () {
53 | echo "$*"
54 | }
55 |
56 | die () {
57 | echo
58 | echo "$*"
59 | echo
60 | exit 1
61 | }
62 |
63 | # OS specific support (must be 'true' or 'false').
64 | cygwin=false
65 | msys=false
66 | darwin=false
67 | nonstop=false
68 | case "`uname`" in
69 | CYGWIN* )
70 | cygwin=true
71 | ;;
72 | Darwin* )
73 | darwin=true
74 | ;;
75 | MINGW* )
76 | msys=true
77 | ;;
78 | NONSTOP* )
79 | nonstop=true
80 | ;;
81 | esac
82 |
83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
84 |
85 |
86 | # Determine the Java command to use to start the JVM.
87 | if [ -n "$JAVA_HOME" ] ; then
88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
89 | # IBM's JDK on AIX uses strange locations for the executables
90 | JAVACMD="$JAVA_HOME/jre/sh/java"
91 | else
92 | JAVACMD="$JAVA_HOME/bin/java"
93 | fi
94 | if [ ! -x "$JAVACMD" ] ; then
95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
96 |
97 | Please set the JAVA_HOME variable in your environment to match the
98 | location of your Java installation."
99 | fi
100 | else
101 | JAVACMD="java"
102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
103 |
104 | Please set the JAVA_HOME variable in your environment to match the
105 | location of your Java installation."
106 | fi
107 |
108 | # Increase the maximum file descriptors if we can.
109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
110 | MAX_FD_LIMIT=`ulimit -H -n`
111 | if [ $? -eq 0 ] ; then
112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
113 | MAX_FD="$MAX_FD_LIMIT"
114 | fi
115 | ulimit -n $MAX_FD
116 | if [ $? -ne 0 ] ; then
117 | warn "Could not set maximum file descriptor limit: $MAX_FD"
118 | fi
119 | else
120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
121 | fi
122 | fi
123 |
124 | # For Darwin, add options to specify how the application appears in the dock
125 | if $darwin; then
126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
127 | fi
128 |
129 | # For Cygwin or MSYS, switch paths to Windows format before running java
130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
133 |
134 | JAVACMD=`cygpath --unix "$JAVACMD"`
135 |
136 | # We build the pattern for arguments to be converted via cygpath
137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
138 | SEP=""
139 | for dir in $ROOTDIRSRAW ; do
140 | ROOTDIRS="$ROOTDIRS$SEP$dir"
141 | SEP="|"
142 | done
143 | OURCYGPATTERN="(^($ROOTDIRS))"
144 | # Add a user-defined pattern to the cygpath arguments
145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
147 | fi
148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
149 | i=0
150 | for arg in "$@" ; do
151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
153 |
154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
156 | else
157 | eval `echo args$i`="\"$arg\""
158 | fi
159 | i=`expr $i + 1`
160 | done
161 | case $i in
162 | 0) set -- ;;
163 | 1) set -- "$args0" ;;
164 | 2) set -- "$args0" "$args1" ;;
165 | 3) set -- "$args0" "$args1" "$args2" ;;
166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
172 | esac
173 | fi
174 |
175 | # Escape application args
176 | save () {
177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
178 | echo " "
179 | }
180 | APP_ARGS=`save "$@"`
181 |
182 | # Collect all arguments for the java command, following the shell quoting and substitution rules
183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
184 |
185 | exec "$JAVACMD" "$@"
186 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%" == "" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%" == "" set DIRNAME=.
29 | set APP_BASE_NAME=%~n0
30 | set APP_HOME=%DIRNAME%
31 |
32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34 |
35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
37 |
38 | @rem Find java.exe
39 | if defined JAVA_HOME goto findJavaFromJavaHome
40 |
41 | set JAVA_EXE=java.exe
42 | %JAVA_EXE% -version >NUL 2>&1
43 | if "%ERRORLEVEL%" == "0" goto execute
44 |
45 | echo.
46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47 | echo.
48 | echo Please set the JAVA_HOME variable in your environment to match the
49 | echo location of your Java installation.
50 |
51 | goto fail
52 |
53 | :findJavaFromJavaHome
54 | set JAVA_HOME=%JAVA_HOME:"=%
55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
56 |
57 | if exist "%JAVA_EXE%" goto execute
58 |
59 | echo.
60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61 | echo.
62 | echo Please set the JAVA_HOME variable in your environment to match the
63 | echo location of your Java installation.
64 |
65 | goto fail
66 |
67 | :execute
68 | @rem Setup the command line
69 |
70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
71 |
72 |
73 | @rem Execute Gradle
74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
75 |
76 | :end
77 | @rem End local scope for the variables with windows NT shell
78 | if "%ERRORLEVEL%"=="0" goto mainEnd
79 |
80 | :fail
81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
82 | rem the _cmd.exe /c_ return code!
83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
84 | exit /b 1
85 |
86 | :mainEnd
87 | if "%OS%"=="Windows_NT" endlocal
88 |
89 | :omega
90 |
--------------------------------------------------------------------------------
/root.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | kotlin("jvm") version "1.6.10" apply false
3 | id("net.kyori.blossom") version "1.3.0" apply false
4 | id("com.github.johnrengelman.shadow") version "7.1.2" apply false
5 | id("gg.essential.multi-version.root")
6 | }
7 |
8 | preprocess {
9 | "1.8.9-forge"(10809, "srg") {}
10 | }
--------------------------------------------------------------------------------
/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | gradlePluginPortal()
4 | mavenCentral()
5 | maven("https://maven.fabricmc.net")
6 | maven("https://maven.architectury.dev/")
7 | maven("https://maven.minecraftforge.net")
8 | maven("https://repo.essential.gg/repository/maven-public")
9 | }
10 | plugins {
11 | val egtVersion = "0.1.7"
12 | id("gg.essential.multi-version.root") version egtVersion
13 | }
14 | }
15 |
16 | val mod_name: String by settings
17 |
18 | rootProject.name = mod_name
19 | rootProject.buildFileName = "root.gradle.kts"
20 |
21 | listOf(
22 | "1.8.9-forge"
23 | ).forEach { version ->
24 | include(":$version")
25 | project(":$version").apply {
26 | projectDir = file("versions/$version")
27 | buildFileName = "../../build.gradle.kts"
28 | }
29 |
30 | }
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/GlintHandler.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations;
2 |
3 | import cc.woverflow.overflowanimations.config.AnimationsConfig;
4 | import cc.woverflow.overflowanimations.mixin.RenderItemAccessor;
5 | import net.minecraft.client.Minecraft;
6 | import net.minecraft.client.renderer.GlStateManager;
7 | import net.minecraft.client.renderer.entity.RenderItem;
8 | import net.minecraft.client.renderer.texture.TextureMap;
9 | import net.minecraft.client.resources.model.IBakedModel;
10 | import net.minecraft.util.ResourceLocation;
11 |
12 | public class GlintHandler {
13 | private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png");
14 |
15 | public static boolean renderGlint(RenderItem instance, IBakedModel model) {
16 | if (!AnimationsConfig.enchantmentGlint) {
17 | return false;
18 | }
19 | GlStateManager.depthMask(false);
20 | GlStateManager.depthFunc(514);
21 | GlStateManager.disableLighting();
22 | GlStateManager.blendFunc(768, 1);
23 | Minecraft.getMinecraft().renderEngine.bindTexture(RES_ITEM_GLINT);
24 | GlStateManager.matrixMode(5890);
25 |
26 | // first
27 | /*?
28 | GlStateManager.pushMatrix();
29 | GlStateManager.scale(8.0, 8.0, 8.0);
30 | GlStateManager.translate((Minecraft.getSystemTime() % 3000L) / 3000.0F / 8.0F, 0.0F, 0.0F);
31 | GlStateManager.rotate(-50.0F, 0.0F, 0.0F, 1.0F);
32 | ((RenderItemAccessor) instance).invokeRenderModel(model, -8372020);
33 | GlStateManager.popMatrix();
34 |
35 | */
36 |
37 |
38 | // second
39 | GlStateManager.pushMatrix();
40 | GlStateManager.scale(8.0, 8.0, 8.0);
41 | GlStateManager.translate((Minecraft.getSystemTime() % 4873L) / 4873.0F / 8.0F, 0.0F, 0.0F);
42 | GlStateManager.rotate(10.0F, 0.0F, 0.0F, 1.0F);
43 | ((RenderItemAccessor) instance).invokeRenderModel(model, -8372020);
44 | GlStateManager.popMatrix();
45 |
46 | GlStateManager.matrixMode(5888);
47 | GlStateManager.blendFunc(770, 771);
48 | GlStateManager.enableLighting();
49 | GlStateManager.depthFunc(515);
50 | GlStateManager.depthMask(true);
51 | Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture);
52 | return true;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/MicrosRenderer.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations;
2 |
3 | import net.minecraft.client.Minecraft;
4 | import net.minecraft.client.renderer.GlStateManager;
5 | import net.minecraft.client.renderer.RenderHelper;
6 | import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
7 | import net.minecraft.client.renderer.entity.RenderItem;
8 | import net.minecraft.client.renderer.texture.TextureMap;
9 | import net.minecraft.client.resources.model.IBakedModel;
10 | import net.minecraft.item.ItemStack;
11 | import net.minecraftforge.client.ForgeHooksClient;
12 |
13 | public class MicrosRenderer {
14 |
15 | public static void oldItemRender(RenderItem instance, IBakedModel model, ItemStack stack) {
16 | GlStateManager.pushMatrix();
17 | Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
18 | Minecraft.getMinecraft().getTextureManager().getTexture(TextureMap.locationBlocksTexture).setBlurMipmap(false, false);
19 | RenderHelper.disableStandardItemLighting();
20 | GlStateManager.enableRescaleNormal();
21 | GlStateManager.enableBlend();
22 | GlStateManager.disableCull();
23 | GlStateManager.enableAlpha();
24 | GlStateManager.alphaFunc(516, 0.1F);
25 | GlStateManager.blendFunc(770, 771);
26 | GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
27 | model = ForgeHooksClient.handleCameraTransforms(model, ItemCameraTransforms.TransformType.GUI);
28 | instance.renderItem(stack, model);
29 | GlStateManager.disableRescaleNormal();
30 | GlStateManager.disableLighting();
31 | RenderHelper.enableStandardItemLighting();
32 | GlStateManager.popMatrix();
33 | Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
34 | Minecraft.getMinecraft().getTextureManager().getTexture(TextureMap.locationBlocksTexture).restoreLastBlurMipmap();
35 | }
36 |
37 | public static void oldProjectileRender(RenderItem instance, ItemStack item) {
38 | GlStateManager.pushMatrix();
39 | Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
40 | Minecraft.getMinecraft().getTextureManager().getTexture(TextureMap.locationBlocksTexture).setBlurMipmap(false, false);
41 | RenderHelper.disableStandardItemLighting();
42 | GlStateManager.enableRescaleNormal();
43 | GlStateManager.enableBlend();
44 | GlStateManager.disableCull();
45 | GlStateManager.enableAlpha();
46 | GlStateManager.alphaFunc(516, 0.1F);
47 | GlStateManager.blendFunc(770, 771);
48 | GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
49 | instance.renderItem(item, ItemCameraTransforms.TransformType.GUI);
50 | GlStateManager.disableRescaleNormal();
51 | GlStateManager.disableLighting();
52 | RenderHelper.enableStandardItemLighting();
53 | GlStateManager.popMatrix();
54 | Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
55 | Minecraft.getMinecraft().getTextureManager().getTexture(TextureMap.locationBlocksTexture).restoreLastBlurMipmap();
56 | }
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/MixcesHandler.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations;
2 |
3 | import cc.woverflow.overflowanimations.config.AnimationsConfig;
4 | import net.minecraft.block.*;
5 | import net.minecraft.client.Minecraft;
6 | import net.minecraft.client.entity.EntityPlayerSP;
7 | import net.minecraft.client.renderer.GlStateManager;
8 | import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
9 | import net.minecraft.item.*;
10 |
11 | public class MixcesHandler {
12 | public static void applyMixcesTransformations(ItemCameraTransforms.TransformType type) {
13 | if (AnimationsConfig.mixcesAnimations) {
14 | ItemStack stack = OverflowAnimations.renderingStack;
15 | final EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
16 | if (stack != null) {
17 | if (type == ItemCameraTransforms.TransformType.THIRD_PERSON) {
18 | if (stack.getItem() instanceof ItemBlock) {
19 | Block block = ((ItemBlock) stack.getItem()).getBlock();
20 | if (block instanceof BlockCarpet || block instanceof BlockSnow) {
21 | applyThatWeirdTransformation();
22 | } else if (block instanceof BlockFence) {
23 | GlStateManager.translate(0, -0.01, 0.04);
24 | GlStateManager.rotate(135, 0, 1, 0);
25 | GlStateManager.rotate(15, 1, 0, 0);
26 | GlStateManager.rotate(-15, 0, 0, 1);
27 | GlStateManager.scale(1, 1, 1);
28 | } else if (block instanceof BlockFenceGate) {
29 | GlStateManager.translate(-0.04, -0.01, 0);
30 | GlStateManager.rotate(135, 0, 1, 0);
31 | GlStateManager.rotate(10, 1, 0, 0);
32 | GlStateManager.rotate(7.5f, 0, 0, 1);
33 | GlStateManager.scale(1, 1, 1);
34 | } else if (block instanceof BlockChest || block instanceof BlockEnderChest) {
35 | GlStateManager.translate(0, 0, 0);
36 | GlStateManager.rotate(-90, 0, 1, 0);
37 | GlStateManager.rotate(0, 1, 0, 0);
38 | GlStateManager.rotate(0, 0, 0, 1);
39 | GlStateManager.scale(1, 1, 1);
40 | if (player.isSneaking()) {
41 | GlStateManager.translate(0, -0.35, 0);
42 | }
43 | } else if (block instanceof BlockLadder || block instanceof BlockPane || block instanceof BlockRail || block instanceof BlockRailPowered || block instanceof BlockRailDetector || block instanceof BlockVine || block instanceof BlockWeb || block instanceof BlockLever || block instanceof BlockBush || block instanceof BlockTorch || block instanceof BlockTripWireHook) {
44 | GlStateManager.translate(0.0985, -0.02, -0.034);
45 | GlStateManager.rotate(-13, 0, 1, 0);
46 | GlStateManager.rotate(163, 1, 0, 0);
47 | GlStateManager.rotate(193, 0, 0, 1);
48 | GlStateManager.scale(1.0, 1.0, 1.0);
49 | } else if (block instanceof BlockFurnace || block instanceof BlockDispenser || block instanceof BlockPumpkin) {
50 | GlStateManager.translate(0.025, -0.01, -0.025);
51 | GlStateManager.rotate(180, 0, 1, 0);
52 | GlStateManager.rotate(5, 1, 0, 0);
53 | GlStateManager.rotate(5, 0, 0, 1);
54 | GlStateManager.scale(1, 1, 1);
55 | } else if (block instanceof BlockBanner) {
56 | GlStateManager.translate(0.01, -0.066, -0.007);
57 | GlStateManager.rotate(-4, 0, 1, 0);
58 | GlStateManager.rotate(-4, 1, 0, 0);
59 | GlStateManager.rotate(-20, 0, 0, 1);
60 | GlStateManager.scale(1.1, 1.1, 1.1);
61 | } else if (block instanceof BlockButton) {
62 | GlStateManager.translate(0.095, -0.04, -0.095);
63 | GlStateManager.rotate(0, 0, 1, 0);
64 | GlStateManager.rotate(-5, 1, 0, 0);
65 | GlStateManager.rotate(-5, 0, 0, 1);
66 | GlStateManager.scale(1, 1, 1);
67 | } else if (block != null) {
68 | GlStateManager.translate(-0.025, -0.01, 0.025);
69 | GlStateManager.rotate(0, 0, 1, 0);
70 | GlStateManager.rotate(-5, 1, 0, 0);
71 | GlStateManager.rotate(-5, 0, 0, 1);
72 | GlStateManager.scale(1, 1, 1);
73 | } else {
74 | OverflowAnimations.renderingStack = null;
75 | return;
76 | }
77 | } else {
78 | if (stack.getItem() instanceof ItemBow) {
79 | GlStateManager.translate(0.037, 0.020, 0.007);
80 | GlStateManager.rotate(-15, 0, 1, 0);
81 | GlStateManager.rotate(0, 1, 0, 0);
82 | GlStateManager.rotate(-10, 0, 0, 1);
83 | GlStateManager.scale(1, 1, 1);
84 | } else if (stack.getItem().shouldRotateAroundWhenRendering()) {
85 | GlStateManager.translate(0.0, -0.052, -0.007);
86 | GlStateManager.rotate(-4, 0, 1, 0);
87 | GlStateManager.rotate(-4, 1, 0, 0);
88 | GlStateManager.rotate(-20, 0, 0, 1);
89 | GlStateManager.scale(1.1, 1.1, 1.1);
90 | } else if (stack.getItem().isFull3D()) {
91 | GlStateManager.translate(0.01, -0.066, -0.007);
92 | GlStateManager.rotate(-4, 0, 1, 0);
93 | GlStateManager.rotate(-4, 1, 0, 0);
94 | GlStateManager.rotate(-20, 0, 0, 1);
95 | GlStateManager.scale(1.1, 1.1, 1.1);
96 | } else if (stack.getItem() instanceof ItemSkull) {
97 | GlStateManager.translate(-0.025, -0.01, 0.025);
98 | GlStateManager.rotate(0, 0, 1, 0);
99 | GlStateManager.rotate(15, 1, 0, 0);
100 | GlStateManager.rotate(15, 0, 0, 1);
101 | GlStateManager.scale(1, 1, 1);
102 | } else if (stack.getItem() != null) {
103 | GlStateManager.translate(0.0985, -0.02, -0.034);
104 | GlStateManager.rotate(-13, 0, 1, 0);
105 | GlStateManager.rotate(163, 1, 0, 0);
106 | GlStateManager.rotate(193, 0, 0, 1);
107 | GlStateManager.scale(1.0, 1.0, 1.0);
108 | } else {
109 | //applyThatWeirdTransformation();
110 | OverflowAnimations.renderingStack = null;
111 | return;
112 | }
113 | }
114 | } else {
115 | OverflowAnimations.renderingStack = null;
116 | return;
117 | }
118 | OverflowAnimations.renderingStack = null;
119 | }
120 | }
121 | }
122 |
123 | // Carpet & Snow Layer transformations )))):
124 | private static void applyThatWeirdTransformation() {
125 | GlStateManager.translate(0.01, -0.2, -0.01);
126 | GlStateManager.rotate(180, 0, 1, 0);
127 | GlStateManager.rotate(5, 1, 0, 0);
128 | GlStateManager.rotate(5, 0, 0, 1);
129 | GlStateManager.scale(1, 1, 1);
130 | }
131 | }
132 |
133 |
134 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/OverflowAnimations.java:
--------------------------------------------------------------------------------
1 | //#if MODERN==0 || FABRIC==1
2 | package cc.woverflow.overflowanimations;
3 |
4 | import cc.polyfrost.oneconfig.utils.commands.CommandManager;
5 | import cc.woverflow.overflowanimations.command.AnimationsCommand;
6 | import cc.woverflow.overflowanimations.config.AnimationsConfig;
7 | import club.sk1er.oldanimations.config.OldAnimationsSettings;
8 | import net.minecraft.item.ItemStack;
9 | import net.minecraftforge.common.MinecraftForge;
10 | import net.minecraftforge.fml.common.Mod;
11 | import net.minecraftforge.fml.common.event.FMLInitializationEvent;
12 | import org.spongepowered.asm.lib.tree.ClassNode;
13 | import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
14 |
15 | import java.io.File;
16 |
17 | //#if MODERN==0
18 | @Mod(modid = OverflowAnimations.ID, name = OverflowAnimations.NAME, version = OverflowAnimations.VER)
19 | //#endif
20 | public class OverflowAnimations {
21 | public static final String NAME = "@NAME@", VER = "@VER@", ID = "@ID@";
22 | public static AnimationsConfig config;
23 | public static ItemStack renderingStack = null;
24 |
25 | //#if MODERN==0
26 | @Mod.EventHandler
27 | public void onInit(FMLInitializationEvent event)
28 | //#else
29 | //$$ public void onInit()
30 | //#endif
31 | {
32 | CommandManager.INSTANCE.registerCommand(AnimationsCommand.class);
33 | config = new AnimationsConfig();
34 | MinecraftForge.EVENT_BUS.register(this);
35 | }
36 |
37 | /**
38 | * @see cc.woverflow.overflowanimations.plugin.AnimationsMixinPlugin#postApply(String, ClassNode, String, IMixinInfo)
39 | */
40 | @SuppressWarnings("unused")
41 | public static boolean shouldPunch() {
42 | return OldAnimationsSettings.punching && !AnimationsConfig.spiderfrogPunching;
43 | }
44 | }
45 | //#endif
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/command/AnimationsCommand.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.command;
2 |
3 | import cc.polyfrost.oneconfig.utils.commands.annotations.Command;
4 | import cc.polyfrost.oneconfig.utils.commands.annotations.Main;
5 | import cc.woverflow.overflowanimations.OverflowAnimations;
6 |
7 | @Command(value = OverflowAnimations.ID, description = "Open the Overflow Animations GUI")
8 | public class AnimationsCommand {
9 |
10 | @Main
11 | public static void handle() {
12 | OverflowAnimations.config.openGui();
13 | }
14 | }
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/config/AnimationsConfig.java:
--------------------------------------------------------------------------------
1 | //#if MODERN==0 || FABRIC==1
2 | package cc.woverflow.overflowanimations.config;
3 |
4 | import cc.polyfrost.oneconfig.config.Config;
5 | import cc.polyfrost.oneconfig.config.annotations.Checkbox;
6 | import cc.polyfrost.oneconfig.config.annotations.Switch;
7 | import cc.polyfrost.oneconfig.config.data.Mod;
8 | import cc.polyfrost.oneconfig.config.data.ModType;
9 | import cc.polyfrost.oneconfig.config.migration.VigilanceMigrator;
10 | import cc.woverflow.overflowanimations.OverflowAnimations;
11 |
12 | import java.io.File;
13 |
14 | public class AnimationsConfig extends Config {
15 |
16 | @Switch(
17 | name = "2D Items",
18 | subcategory = "2D Items"
19 | )
20 | public static boolean items2D = false;
21 |
22 | @Checkbox(
23 | name = "Microextent 2D Sprites",
24 | subcategory = "2D Items"
25 | )
26 | public static boolean itemSprites = true;
27 |
28 | @Switch(
29 | name = "Cleaner Enchantment Glint",
30 | subcategory = "Enchantment Glint"
31 | )
32 | public static boolean enchantmentGlint = true;
33 |
34 | @Switch(
35 | name = "1.15+ New Armor Enchantment Glint",
36 | subcategory = "Enchantment Glint"
37 | )
38 | public static boolean enchantmentGlintNew = true;
39 |
40 | @Switch(
41 | name = "1.7 Third Person Blockhit Rendering",
42 | subcategory = "1.7 Animations"
43 | )
44 | public static boolean thirdPersonItemRendering = true;
45 |
46 | @Switch(
47 | name = "1.7 Item Switching (only switch on slot change)",
48 | subcategory = "1.7 Animations"
49 | )
50 | public static boolean itemSwitch = true;
51 |
52 | @Switch(
53 | name = "Spiderfrog Old Animations Item Usage Punching (Patched)",
54 | subcategory = "1.7 Animations", size = 2
55 | )
56 | public static boolean spiderfrogPunching = true;
57 |
58 | @Switch(
59 | name = "1.7 Mixces Item / Block Hand Positions",
60 | subcategory = "1.7 Animations"
61 | )
62 | public static boolean mixcesAnimations = true;
63 |
64 | @Checkbox(
65 | name = "1.7 Mixces First Person Carpet Position",
66 | subcategory = "1.7 Animations"
67 | )
68 | public static boolean firstPersonCarpetPosition = false;
69 |
70 | @Switch(
71 | name = "1.7 Projectiles",
72 | subcategory = "1.7 Animations"
73 | )
74 | public static boolean oldProjectiles = true;
75 |
76 | @Checkbox(
77 | name = "Microextent Projectile Sprites",
78 | subcategory = "1.7 Animations"
79 | )
80 | public static boolean projectileSprites = true;
81 |
82 | public AnimationsConfig() {
83 | super(new Mod(OverflowAnimations.NAME, ModType.PVP, new VigilanceMigrator(new File(new File(new File("./W-OVERFLOW"), OverflowAnimations.NAME), OverflowAnimations.NAME + ".toml").getPath())), OverflowAnimations.NAME + ".json");
84 | initialize();
85 | addDependency("firstPersonCarpetPosition", "mixcesAnimations");
86 | addDependency("itemSprites", "items2D");
87 | addDependency("projectileSprites", "oldProjectiles");
88 | }
89 | }
90 | //#endif
91 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/mixin/AnimationHandlerMixin.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.mixin;
2 |
3 | import cc.woverflow.overflowanimations.OverflowAnimations;
4 | import cc.woverflow.overflowanimations.config.AnimationsConfig;
5 | import club.sk1er.oldanimations.AnimationHandler;
6 | import net.minecraft.client.entity.EntityPlayerSP;
7 | import net.minecraft.client.renderer.GlStateManager;
8 | import net.minecraft.client.renderer.ItemRenderer;
9 | import net.minecraft.item.ItemStack;
10 | import org.objectweb.asm.Opcodes;
11 | import org.spongepowered.asm.mixin.Mixin;
12 | import org.spongepowered.asm.mixin.Shadow;
13 | import org.spongepowered.asm.mixin.injection.At;
14 | import org.spongepowered.asm.mixin.injection.Inject;
15 | import org.spongepowered.asm.mixin.injection.Redirect;
16 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
17 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
18 | import net.minecraft.client.*;
19 |
20 | @Mixin(value = AnimationHandler.class, remap = false)
21 | public abstract class AnimationHandlerMixin {
22 | @Shadow protected abstract int getArmSwingAnimationEnd(EntityPlayerSP player);
23 |
24 | @Shadow private int swingProgressInt;
25 | @Shadow private boolean isSwingInProgress;
26 |
27 | private boolean shouldSet = false;
28 | @Redirect(method = "updateSwingProgress", at = @At(value = "FIELD", target = "Lclub/sk1er/oldanimations/AnimationHandler;swingProgressInt:I", ordinal = 2, opcode = Opcodes.PUTFIELD))
29 | private void redirectSetting1(AnimationHandler instance, int value) {
30 | shouldSet = true;
31 | }
32 |
33 | @Redirect(method = "updateSwingProgress", at = @At(value = "FIELD", target = "Lclub/sk1er/oldanimations/AnimationHandler;isSwingInProgress:Z", opcode = Opcodes.PUTFIELD, ordinal = 1))
34 | private void redirectSetting2(AnimationHandler instance, boolean value) {
35 | }
36 |
37 | @Redirect(method = "updateSwingProgress", at = @At(value = "INVOKE", target = "Lclub/sk1er/oldanimations/AnimationHandler;getArmSwingAnimationEnd(Lnet/minecraft/client/entity/EntityPlayerSP;)I"))
38 | private int onGetArmSwing(AnimationHandler instance, EntityPlayerSP player) {
39 | int max = getArmSwingAnimationEnd(player);
40 | if (shouldSet) {
41 | shouldSet = false;
42 | swingProgressInt = 0;
43 | isSwingInProgress = false;
44 | }
45 | return max;
46 | }
47 |
48 | @Inject(method = "renderItemInFirstPerson", at = @At(value = "INVOKE", target = "Lclub/sk1er/oldanimations/AnimationHandler;doFirstPersonTransform(Lnet/minecraft/item/ItemStack;)Z"))
49 | private void setRenderingStack(ItemRenderer renderer, ItemStack stack, float equipProgress, float partialTicks, CallbackInfoReturnable cir) {
50 | OverflowAnimations.renderingStack = stack;
51 | }
52 |
53 | @Inject(method = { "doSwordBlock3rdPersonTransform" }, at = { @At("RETURN") })
54 | private void cancel(final CallbackInfo ci) {
55 | final EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
56 | if (AnimationsConfig.mixcesAnimations) {
57 | GlStateManager.rotate(20, 0.0f, 1.0f, 0.0f);
58 | GlStateManager.rotate(10, 1.0f, 0.0f, 0.0f);
59 | GlStateManager.rotate(0, 0.0f, 0.0f, 1.0f);
60 | GlStateManager.translate(0.072, 0.035, 0.0);
61 | if (player.isSneaking()) {
62 | GlStateManager.translate(-0.033, -0.0035, 0.05);
63 | }
64 | }
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/mixin/ForgeHooksClientMixin.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.mixin;
2 |
3 | import cc.woverflow.overflowanimations.MixcesHandler;
4 | import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
5 | import net.minecraft.client.resources.model.IBakedModel;
6 | import net.minecraftforge.client.ForgeHooksClient;
7 | import org.spongepowered.asm.mixin.Mixin;
8 | import org.spongepowered.asm.mixin.injection.At;
9 | import org.spongepowered.asm.mixin.injection.Inject;
10 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
11 |
12 | @Mixin(value = ForgeHooksClient.class, remap = false)
13 | public class ForgeHooksClientMixin {
14 |
15 | @Inject(method = "handleCameraTransforms", at = @At("RETURN"))
16 | private static void onHandlePerspective(IBakedModel model, ItemCameraTransforms.TransformType cameraTransformType, CallbackInfoReturnable cir) {
17 | MixcesHandler.applyMixcesTransformations(cameraTransformType);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/mixin/ItemRendererMixin.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.mixin;
2 |
3 | import cc.woverflow.overflowanimations.config.AnimationsConfig;
4 | import net.minecraft.client.Minecraft;
5 | import net.minecraft.client.entity.EntityPlayerSP;
6 | import net.minecraft.client.renderer.ItemRenderer;
7 | import net.minecraft.item.ItemStack;
8 | import org.spongepowered.asm.mixin.Final;
9 | import org.spongepowered.asm.mixin.Mixin;
10 | import org.spongepowered.asm.mixin.Shadow;
11 | import org.spongepowered.asm.mixin.injection.At;
12 | import org.spongepowered.asm.mixin.injection.Inject;
13 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
14 |
15 | @Mixin(ItemRenderer.class)
16 | public class ItemRendererMixin {
17 | @Shadow private float prevEquippedProgress;
18 |
19 | @Shadow private float equippedProgress;
20 |
21 | @Shadow private ItemStack itemToRender;
22 |
23 | @Shadow private int equippedItemSlot;
24 |
25 | @Shadow @Final private Minecraft mc;
26 |
27 | @Inject(method = "updateEquippedItem", at = @At("HEAD"), cancellable = true)
28 | private void update17Animation(CallbackInfo ci) {
29 | if (AnimationsConfig.itemSwitch) {
30 | ci.cancel();
31 | prevEquippedProgress = equippedProgress;
32 | EntityPlayerSP player = mc.thePlayer;
33 | ItemStack itemstack = player.inventory.getCurrentItem();
34 | boolean flag = equippedItemSlot == player.inventory.currentItem && itemstack == itemToRender;
35 |
36 | if (itemToRender == null && itemstack == null)
37 | {
38 | flag = true;
39 | }
40 |
41 | if (itemstack != null && itemToRender != null && itemstack != itemToRender && itemstack.getItem() == itemToRender.getItem() && itemstack.getItemDamage() == itemToRender.getItemDamage())
42 | {
43 | itemToRender = itemstack;
44 | flag = true;
45 | }
46 |
47 | float f = 0.4F;
48 | float f1 = flag ? 1.0F : 0.0F;
49 | float f2 = f1 - equippedProgress;
50 |
51 | if (f2 < -f)
52 | {
53 | f2 = -f;
54 | }
55 |
56 | if (f2 > f)
57 | {
58 | f2 = f;
59 | }
60 |
61 | equippedProgress += f2;
62 |
63 | if (equippedProgress < 0.1F)
64 | {
65 | itemToRender = itemstack;
66 | equippedItemSlot = player.inventory.currentItem;
67 | }
68 | }
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/mixin/LayerArmorBaseMixin_New.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.mixin;
2 |
3 | import cc.woverflow.overflowanimations.config.AnimationsConfig;
4 | import net.minecraft.client.model.ModelBase;
5 | import net.minecraft.client.renderer.OpenGlHelper;
6 | import net.minecraft.client.renderer.entity.layers.LayerArmorBase;
7 | import net.minecraft.client.renderer.entity.layers.LayerRenderer;
8 | import net.minecraft.entity.EntityLivingBase;
9 | import org.spongepowered.asm.mixin.Mixin;
10 | import org.spongepowered.asm.mixin.injection.At;
11 | import org.spongepowered.asm.mixin.injection.Inject;
12 | import org.spongepowered.asm.mixin.injection.ModifyArgs;
13 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
14 | import org.spongepowered.asm.mixin.injection.invoke.arg.Args;
15 |
16 | /**
17 | * Modified from Skyblockcatia under MIT License
18 | * https://github.com/SteveKunG/SkyBlockcatia/blob/1.8.9/LICENSE.md
19 | */
20 | @Mixin(LayerArmorBase.class)
21 | public abstract class LayerArmorBaseMixin_New implements LayerRenderer {
22 |
23 | @Inject(method = "renderGlint(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/client/model/ModelBase;FFFFFFF)V", at = @At(value = "INVOKE", target = "net/minecraft/client/renderer/GlStateManager.color(FFFF)V", ordinal = 0))
24 | private void renderNewArmorGlintPre(EntityLivingBase entitylivingbaseIn, T modelbaseIn, float p_177183_3_, float p_177183_4_, float p_177183_5_, float p_177183_6_, float p_177183_7_, float p_177183_8_, float p_177183_9_, CallbackInfo info) {
25 | if (AnimationsConfig.enchantmentGlintNew) {
26 | float light = 240.0F;
27 | OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, light, light);
28 | }
29 | }
30 |
31 | @Inject(method = "renderGlint(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/client/model/ModelBase;FFFFFFF)V", at = @At(value = "INVOKE", target = "net/minecraft/client/model/ModelBase.render(Lnet/minecraft/entity/Entity;FFFFFF)V"))
32 | private void renderNewArmorGlintPost(EntityLivingBase entitylivingbaseIn, T modelbaseIn, float p_177183_3_, float p_177183_4_, float partialTicks, float p_177183_6_, float p_177183_7_, float p_177183_8_, float scale, CallbackInfo ci) {
33 | if (AnimationsConfig.enchantmentGlintNew) {
34 | int i = entitylivingbaseIn.getBrightnessForRender(partialTicks);
35 | int j = i % 65536;
36 | int k = i / 65536;
37 | OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j, k);
38 | }
39 | }
40 |
41 | @ModifyArgs(method = "renderGlint(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/client/model/ModelBase;FFFFFFF)V", at = @At(value = "INVOKE", target = "net/minecraft/client/renderer/GlStateManager.color(FFFF)V", ordinal = 1))
42 | private void newArmorGlintColor(Args args) {
43 | if (AnimationsConfig.enchantmentGlintNew) {
44 | int rgb = getRGB((int) (((float) args.get(0)) * 255), (int) (((float) args.get(1)) * 255), (int) (((float) args.get(2)) * 255), (int) (((float) args.get(3)) * 255));
45 | if (rgb == -8372020 || rgb == -10473317) {
46 | args.set(0, 0.5608F);
47 | args.set(1, 0.3408F);
48 | args.set(2, 0.8608F);
49 | args.set(3, 1.0F);
50 | }
51 | }
52 | }
53 |
54 | private int getRGB(int r, int g, int b, int a) {
55 | return ((a & 0xFF) << 24) |
56 | ((r & 0xFF) << 16) |
57 | ((g & 0xFF) << 8) |
58 | ((b & 0xFF));
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/mixin/MinecraftMixin.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.mixin;
2 |
3 | import net.minecraft.client.Minecraft;
4 | import org.objectweb.asm.tree.ClassNode;
5 | import org.spongepowered.asm.mixin.Mixin;
6 | import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
7 | import org.spongepowered.asm.mixin.injection.At;
8 | import org.spongepowered.asm.mixin.injection.Inject;
9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
10 |
11 | /**
12 | * @see cc.woverflow.overflowanimations.plugin.AnimationsMixinPlugin#postApply(String, ClassNode, String, IMixinInfo)
13 | */
14 | @Mixin(value = Minecraft.class, priority = Integer.MAX_VALUE)
15 | public class MinecraftMixin {
16 | @Inject(method = "startGame", at = @At("HEAD"))
17 | private void onStartGame(CallbackInfo ci) {
18 | //no-op
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/mixin/PlayerControllerMPMixin.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.mixin;
2 |
3 | import cc.woverflow.overflowanimations.config.AnimationsConfig;
4 | import club.sk1er.oldanimations.config.OldAnimationsSettings;
5 | import net.minecraft.client.multiplayer.PlayerControllerMP;
6 | import org.spongepowered.asm.mixin.Mixin;
7 | import org.spongepowered.asm.mixin.injection.At;
8 | import org.spongepowered.asm.mixin.injection.Inject;
9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
10 |
11 | @Mixin(PlayerControllerMP.class)
12 | public class PlayerControllerMPMixin {
13 | @Inject(method = "getIsHittingBlock", at = @At("HEAD"), cancellable = true)
14 | private void cancelHit(CallbackInfoReturnable cir) {
15 | if (OldAnimationsSettings.punching && AnimationsConfig.spiderfrogPunching) {
16 | cir.setReturnValue(false);
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/mixin/RenderEntityItemMixin.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.mixin;
2 |
3 | import cc.woverflow.overflowanimations.MicrosRenderer;
4 | import cc.woverflow.overflowanimations.config.AnimationsConfig;
5 | import net.minecraft.client.Minecraft;
6 | import net.minecraft.client.renderer.GlStateManager;
7 | import net.minecraft.client.renderer.entity.RenderEntityItem;
8 | import net.minecraft.client.renderer.entity.RenderItem;
9 | import net.minecraft.client.resources.model.IBakedModel;
10 | import net.minecraft.entity.item.EntityItem;
11 | import net.minecraft.item.ItemStack;
12 | import org.spongepowered.asm.mixin.Final;
13 | import org.spongepowered.asm.mixin.Mixin;
14 | import org.spongepowered.asm.mixin.Shadow;
15 | import org.spongepowered.asm.mixin.injection.At;
16 | import org.spongepowered.asm.mixin.injection.Redirect;
17 |
18 | @Mixin({RenderEntityItem.class})
19 | public abstract class RenderEntityItemMixin {
20 | @Shadow
21 | @Final
22 | private RenderItem itemRenderer;
23 |
24 | @Redirect(method = {"func_177077_a"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;rotate(FFFF)V"))
25 | private void redirect(float angle, float x, float y, float z, EntityItem itemIn, double p_177077_2_, double p_177077_4_, double p_177077_6_, float p_177077_8_, IBakedModel p_177077_9_) {
26 | if (p_177077_9_.isGui3d() || !AnimationsConfig.items2D) {
27 | GlStateManager.rotate(angle, x, y, z);
28 | } else {
29 | GlStateManager.rotate(180.0F - (Minecraft.getMinecraft().getRenderManager()).playerViewY, 0.0F, 1.0F, 0.0F);
30 | GlStateManager.rotate(((Minecraft.getMinecraft()).gameSettings.thirdPersonView == 2) ? (Minecraft.getMinecraft().getRenderManager()).playerViewX : -(Minecraft.getMinecraft().getRenderManager()).playerViewX, 1.0F, 0.0F, 0.0F);
31 | }
32 | }
33 |
34 | @Redirect(method = {"doRender(Lnet/minecraft/entity/item/EntityItem;DDDFF)V"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/RenderItem;renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/resources/model/IBakedModel;)V"))
35 | public void stopItemModelRender(RenderItem instance, ItemStack stack, IBakedModel model) {
36 | if (AnimationsConfig.items2D && AnimationsConfig.itemSprites && !model.isGui3d()) {
37 | MicrosRenderer.oldItemRender(instance, model, stack);
38 | } else {
39 | this.itemRenderer.renderItem(stack, model);
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/mixin/RenderItemAccessor.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.mixin;
2 |
3 | import net.minecraft.client.renderer.entity.RenderItem;
4 | import net.minecraft.client.resources.model.IBakedModel;
5 | import org.spongepowered.asm.mixin.Mixin;
6 | import org.spongepowered.asm.mixin.gen.Invoker;
7 |
8 | @Mixin(RenderItem.class)
9 | public interface RenderItemAccessor {
10 | @Invoker("renderModel")
11 | void invokeRenderModel(IBakedModel model, int color);
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/mixin/RenderItemMixin.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.mixin;
2 |
3 | import cc.woverflow.overflowanimations.OverflowAnimations;
4 | import cc.woverflow.overflowanimations.config.AnimationsConfig;
5 | import net.minecraft.block.*;
6 | import net.minecraft.client.renderer.GlStateManager;
7 | import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
8 | import net.minecraft.client.renderer.entity.RenderItem;
9 | import net.minecraft.client.resources.model.IBakedModel;
10 | import net.minecraft.item.ItemBlock;
11 | import net.minecraft.item.ItemStack;
12 | import org.spongepowered.asm.mixin.Mixin;
13 | import org.spongepowered.asm.mixin.injection.At;
14 | import org.spongepowered.asm.mixin.injection.Inject;
15 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
16 |
17 | @Mixin(RenderItem.class)
18 | public class RenderItemMixin {
19 |
20 | @Inject(method = "renderItemModelTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;pushMatrix()V", shift = At.Shift.AFTER))
21 | private void setRenderingStack(ItemStack stack, IBakedModel model, ItemCameraTransforms.TransformType cameraTransformType, CallbackInfo ci) {
22 | if (cameraTransformType == ItemCameraTransforms.TransformType.THIRD_PERSON) {
23 | OverflowAnimations.renderingStack = stack;
24 | } else if (AnimationsConfig.mixcesAnimations && stack.getItem() != null && !model.isBuiltInRenderer()) {
25 | GlStateManager.translate(-0.01, 0.002, 0.0005);
26 | GlStateManager.rotate(0, 0, 1, 0);
27 | GlStateManager.rotate(0, 1, 0, 0);
28 | GlStateManager.rotate(0, 0, 0, 1);
29 | GlStateManager.scale(1, 1, 1);
30 | if (stack.getItem() instanceof ItemBlock) {
31 | Block block = ((ItemBlock) stack.getItem()).getBlock();
32 | if (AnimationsConfig.firstPersonCarpetPosition && (block instanceof BlockCarpet || block instanceof BlockSnow)) {
33 | GlStateManager.translate(0.015, -0.331, -0.0005);
34 | GlStateManager.rotate(0, 0, 1, 0);
35 | GlStateManager.rotate(0, 1, 0, 0);
36 | GlStateManager.rotate(0, 0, 0, 1);
37 | GlStateManager.scale(1, 1, 1);
38 | } else if (block instanceof BlockLadder || block instanceof BlockPane || block instanceof BlockRail || block instanceof BlockRailPowered || block instanceof BlockRailDetector || block instanceof BlockVine || block instanceof BlockWeb || block instanceof BlockLever || block instanceof BlockBush || block instanceof BlockTorch || block instanceof BlockTripWireHook) {
39 | GlStateManager.translate(0, 0, 0.0005);
40 | GlStateManager.rotate(0, 0, 1, 0);
41 | GlStateManager.rotate(0, 1, 0, 0);
42 | GlStateManager.rotate(0, 0, 0, 1);
43 | GlStateManager.scale(1, 1, 1);
44 | } else if (block instanceof BlockFurnace || block instanceof BlockDispenser || block instanceof BlockPumpkin || block instanceof BlockChest || block instanceof BlockEnderChest || block instanceof BlockFence || block instanceof BlockFenceGate) {
45 | GlStateManager.translate(0.015, -0.004, -0.0005);
46 | GlStateManager.rotate(0, 0, 1, 0);
47 | GlStateManager.rotate(0, 1, 0, 0);
48 | GlStateManager.rotate(0, 0, 0, 1);
49 | GlStateManager.scale(1, 1, 1);
50 | } else if (block != null) {
51 | GlStateManager.translate(0.015, -0.004, -0.0005);
52 | GlStateManager.rotate(90, 0, 1, 0);
53 | GlStateManager.rotate(0, 1, 0, 0);
54 | GlStateManager.rotate(0, 0, 0, 1);
55 | GlStateManager.scale(1, 1, 1);
56 | }
57 | }
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/mixin/RenderItemMixin_Glint.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.mixin;
2 |
3 | import cc.woverflow.overflowanimations.GlintHandler;
4 | import net.minecraft.client.renderer.entity.RenderItem;
5 | import net.minecraft.client.resources.model.IBakedModel;
6 | import org.spongepowered.asm.mixin.Mixin;
7 | import org.spongepowered.asm.mixin.injection.At;
8 | import org.spongepowered.asm.mixin.injection.Inject;
9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
10 |
11 | @Mixin(RenderItem.class)
12 | public abstract class RenderItemMixin_Glint {
13 |
14 | @Inject(method = "renderEffect", at = @At("HEAD"), cancellable = true)
15 | private void renderOldEffect(IBakedModel model, CallbackInfo ci) {
16 | if (GlintHandler.renderGlint(((RenderItem) (Object) this), model)) {
17 | ci.cancel();
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/mixin/RenderSnowballMixin.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.mixin;
2 |
3 | import cc.woverflow.overflowanimations.MicrosRenderer;
4 | import cc.woverflow.overflowanimations.config.AnimationsConfig;
5 | import net.minecraft.client.renderer.GlStateManager;
6 | import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
7 | import net.minecraft.client.renderer.entity.Render;
8 | import net.minecraft.client.renderer.entity.RenderItem;
9 | import net.minecraft.client.renderer.entity.RenderManager;
10 | import net.minecraft.client.renderer.entity.RenderSnowball;
11 | import net.minecraft.entity.Entity;
12 | import net.minecraft.item.ItemStack;
13 | import org.spongepowered.asm.mixin.Mixin;
14 | import org.spongepowered.asm.mixin.injection.At;
15 | import org.spongepowered.asm.mixin.injection.Inject;
16 | import org.spongepowered.asm.mixin.injection.ModifyArg;
17 | import org.spongepowered.asm.mixin.injection.Redirect;
18 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
19 |
20 | @Mixin(RenderSnowball.class)
21 | public abstract class RenderSnowballMixin extends Render {
22 | public RenderSnowballMixin(RenderManager renderManager) {
23 | super(renderManager);
24 | }
25 |
26 | @ModifyArg(method = "doRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;rotate(FFFF)V", ordinal = 1), index = 0)
27 | private float fixRotation(float angle) {
28 | return (renderManager.options.thirdPersonView == 2 && AnimationsConfig.oldProjectiles ? -1F : 1F) * angle;
29 | }
30 |
31 | @Inject(method = "doRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;rotate(FFFF)V", ordinal = 1, shift = At.Shift.AFTER))
32 | private void flipProjectile(T entity, double x, double y, double z, float entityYaw, float partialTicks, CallbackInfo ci) {
33 | if (AnimationsConfig.oldProjectiles) {
34 | GlStateManager.translate(-0.07, 0.47, 0.1);
35 | }
36 | }
37 |
38 | @Redirect(method = "doRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/RenderItem;renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType;)V"))
39 | public void changeToSprite(RenderItem instance, ItemStack item, ItemCameraTransforms.TransformType type) {
40 | if (AnimationsConfig.oldProjectiles && AnimationsConfig.projectileSprites) {
41 | MicrosRenderer.oldProjectileRender(instance, item);
42 | } else {
43 | instance.renderItem(item, type);
44 | }
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/mixin/RendererLivingEntityMixin.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.mixin;
2 |
3 | import cc.woverflow.overflowanimations.config.AnimationsConfig;
4 | import club.sk1er.oldanimations.AnimationHandler;
5 | import net.minecraft.client.entity.EntityPlayerSP;
6 | import net.minecraft.client.renderer.entity.RendererLivingEntity;
7 | import net.minecraft.entity.EntityLivingBase;
8 | import org.spongepowered.asm.mixin.Mixin;
9 | import org.spongepowered.asm.mixin.Shadow;
10 | import org.spongepowered.asm.mixin.injection.At;
11 | import org.spongepowered.asm.mixin.injection.Redirect;
12 |
13 | @Mixin(RendererLivingEntity.class)
14 | public abstract class RendererLivingEntityMixin {
15 | @Shadow protected abstract float getSwingProgress(T livingBase, float partialTickTime);
16 |
17 | @Redirect(method = "doRender(Lnet/minecraft/entity/EntityLivingBase;DDDFF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/RendererLivingEntity;getSwingProgress(Lnet/minecraft/entity/EntityLivingBase;F)F"))
18 | private float redirectSwing(RendererLivingEntity instance, T livingBase, float partialTickTime) {
19 | if (AnimationsConfig.thirdPersonItemRendering && livingBase instanceof EntityPlayerSP) {
20 | return AnimationHandler.getInstance().getSwingProgress(partialTickTime);
21 | } else {
22 | return getSwingProgress(livingBase, partialTickTime);
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/cc/woverflow/overflowanimations/plugin/AnimationsMixinPlugin.java:
--------------------------------------------------------------------------------
1 | package cc.woverflow.overflowanimations.plugin;
2 |
3 | import org.spongepowered.asm.lib.Opcodes;
4 | import org.spongepowered.asm.lib.tree.*;
5 | import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
6 | import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
7 |
8 | import java.util.*;
9 |
10 | public class AnimationsMixinPlugin implements IMixinConfigPlugin {
11 | @Override
12 | public void onLoad(String mixinPackage) {
13 |
14 | }
15 |
16 | @Override
17 | public String getRefMapperConfig() {
18 | return null;
19 | }
20 |
21 | @Override
22 | public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
23 | return true;
24 | }
25 |
26 | @Override
27 | public void acceptTargets(Set myTargets, Set otherTargets) {
28 |
29 | }
30 |
31 | @Override
32 | public List getMixins() {
33 | return null;
34 | }
35 |
36 | @Override
37 | public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
38 |
39 | }
40 |
41 | @Override
42 | public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
43 | if (Objects.equals(targetClassName, "net.minecraft.client.Minecraft")) {
44 | for (MethodNode method : targetClass.methods) {
45 | if (method.name.toLowerCase(Locale.ENGLISH).contains("rightclickmouse")) {
46 | ListIterator iterator = method.instructions.iterator();
47 | while (iterator.hasNext()) {
48 | AbstractInsnNode next = iterator.next();
49 | if (next instanceof FieldInsnNode) {
50 | FieldInsnNode field = (FieldInsnNode) next;
51 | if (field.owner.equals("club/sk1er/oldanimations/config/OldAnimationsSettings") && field.name.equals("punching")) {
52 | method.instructions.insert(next, new MethodInsnNode(Opcodes.INVOKESTATIC, "cc/woverflow/overflowanimations/OverflowAnimations", "shouldPunch", "()Z", false));
53 | iterator.remove();
54 | return;
55 | }
56 | }
57 | }
58 | }
59 | }
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src/main/resources/mcmod.info:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "modid": "${id}",
4 | "name": "${name}",
5 | "description": "Animations, animations, animations!",
6 | "version": "${version}",
7 | "mcversion": "${mcVersionStr}",
8 | "url": "",
9 | "updateUrl": "",
10 | "authorList": [
11 | "W-OVERFLOW",
12 | "Mixces",
13 | "Microextent"
14 | ],
15 | "credits": "",
16 | "logoFile": "",
17 | "screenshots": [],
18 | "dependencies": []
19 | }
20 | ]
21 |
--------------------------------------------------------------------------------
/src/main/resources/mixins.overflowanimations.json:
--------------------------------------------------------------------------------
1 | {
2 | "compatibilityLevel": "${java_level}",
3 | "minVersion": "0.7",
4 | "package": "cc.woverflow.overflowanimations.mixin",
5 | "refmap": "mixins.${id}.refmap.json",
6 | "plugin": "cc.woverflow.overflowanimations.plugin.AnimationsMixinPlugin",
7 | "priority": 20000,
8 | "client": [
9 | "AnimationHandlerMixin",
10 | "ForgeHooksClientMixin",
11 | "ItemRendererMixin",
12 | "LayerArmorBaseMixin_New",
13 | "MinecraftMixin",
14 | "PlayerControllerMPMixin",
15 | "RenderEntityItemMixin",
16 | "RendererLivingEntityMixin",
17 | "RenderItemAccessor",
18 | "RenderItemMixin",
19 | "RenderItemMixin_Glint",
20 | "RenderSnowballMixin"
21 | ],
22 | "verbose": true
23 | }
--------------------------------------------------------------------------------
/versions/1.12.2-1.8.9.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Polyfrost/OverflowAnimations/d97de23940dd34f7699ea92541c652802bd848a6/versions/1.12.2-1.8.9.txt
--------------------------------------------------------------------------------
/versions/1.12.2-forge/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Polyfrost/OverflowAnimations/d97de23940dd34f7699ea92541c652802bd848a6/versions/1.12.2-forge/gradle.properties
--------------------------------------------------------------------------------
/versions/1.17.1-fabric/gradle.properties:
--------------------------------------------------------------------------------
1 | fabricLanguageKotlinVersion=1.7.1+kotlin.1.6.10
2 | fabricApiVersion=0.46.1+1.17
3 | modMenuVersion=2.0.14
--------------------------------------------------------------------------------
/versions/1.17.1-forge/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Polyfrost/OverflowAnimations/d97de23940dd34f7699ea92541c652802bd848a6/versions/1.17.1-forge/gradle.properties
--------------------------------------------------------------------------------
/versions/1.18.1-fabric/gradle.properties:
--------------------------------------------------------------------------------
1 | fabricLanguageKotlinVersion=1.7.1+kotlin.1.6.10
2 | fabricApiVersion=0.46.4+1.18
3 | modMenuVersion=3.0.1
--------------------------------------------------------------------------------
/versions/1.8.9-forge/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Polyfrost/OverflowAnimations/d97de23940dd34f7699ea92541c652802bd848a6/versions/1.8.9-forge/gradle.properties
--------------------------------------------------------------------------------
/versions/mainProject:
--------------------------------------------------------------------------------
1 | 1.8.9-forge
--------------------------------------------------------------------------------