@ -0,0 +1,27 @@ | |||
# gradle | |||
.gradle/ | |||
build/ | |||
out/ | |||
classes/ | |||
# idea | |||
.idea/ | |||
*.iml | |||
*.ipr | |||
*.iws | |||
# vscode | |||
.settings/ | |||
.vscode/ | |||
bin/ | |||
.classpath | |||
.project | |||
# fabric | |||
run/ | |||
remappedSrc/ |
@ -0,0 +1,4 @@ | |||
# Changelog | |||
**1.0** | |||
* Initial Release |
@ -0,0 +1,19 @@ | |||
pipeline { | |||
agent { | |||
docker { | |||
image 'openjdk:8-jdk' | |||
} | |||
} | |||
stages { | |||
stage('Build') { | |||
steps { | |||
sh './gradlew build' | |||
} | |||
post { | |||
success { | |||
archiveArtifacts artifacts: 'build/libs/*', fingerprint: true | |||
} | |||
} | |||
} | |||
} | |||
} |
@ -0,0 +1,21 @@ | |||
MIT License | |||
Copyright (c) 2020 TheBrokenRail | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in all | |||
copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||
SOFTWARE. |
@ -0,0 +1,19 @@ | |||
# Gulliver Reloaded | |||
The Gulliver mod remade for modern Minecraft! | |||
This mod add potions that change the size of entities (including the player). | |||
## Brewing Stand Recipes | |||
| Input | Ingredient | Output | | |||
| --- | --- | --- | | |||
| Awkward Potion | Bone Meal | Potion of Growing (3:00) | | |||
| Potion of Growing (3:00) | Redstone Dust | Potion of Growing (8:00) | | |||
| Potion of Growing (3:00) | Glowstone Dust | Potion of Growing II (1:30) | | |||
| Potion of Growing (3:00) | Fermented Spider Eye | Potion of Shrinking (3:00) | | |||
| Potion of Growing (8:00) | Fermented Spider Eye | Potion of Shrinking (8:00) | | |||
| Potion of Growing II (1:30) | Fermented Spider Eye | Potion of Shrinking II (1:30) | | |||
| Potion of Shrinking (3:00) | Redstone Dust | Potion of Shrinking (8:00) | | |||
| Potion of Shrinking (3:00) | Glowstone Dust | Potion of Shrinking II (1:30) | | |||
## Changelog | |||
[View Changelog](CHANGELOG.md) |
@ -0,0 +1,94 @@ | |||
plugins { | |||
id 'fabric-loom' version '0.2.7-SNAPSHOT' | |||
id 'com.matthewprenger.cursegradle' version '1.4.0' | |||
} | |||
compileJava { | |||
sourceCompatibility = JavaVersion.VERSION_1_8 | |||
targetCompatibility = JavaVersion.VERSION_1_8 | |||
} | |||
archivesBaseName = project.archives_base_name | |||
def mod_version = project.mod_version as Object | |||
version = "${mod_version}+${project.minecraft_version}" | |||
group = project.maven_group as Object | |||
minecraft { | |||
} | |||
dependencies { | |||
minecraft "com.mojang:minecraft:${project.minecraft_version}" | |||
mappings "net.fabricmc:yarn:${project.minecraft_version}+build.${project.yarn_build}:v2" | |||
modImplementation "net.fabricmc:fabric-loader:${project.fabric_loader_version}" | |||
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" | |||
modImplementation "io.github.prospector:modmenu:${project.mod_menu_version}" | |||
} | |||
processResources { | |||
inputs.property 'version', mod_version | |||
inputs.property 'name', rootProject.name | |||
from(sourceSets.main.resources.srcDirs) { | |||
include 'fabric.mod.json' | |||
expand 'version': mod_version, 'name': rootProject.name | |||
} | |||
from(sourceSets.main.resources.srcDirs) { | |||
exclude 'fabric.mod.json' | |||
} | |||
} | |||
// ensure that the encoding is set to UTF-8, no matter what the system default is | |||
// this fixes some edge cases with special characters not displaying correctly | |||
// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html | |||
tasks.withType(JavaCompile) { | |||
options.encoding = 'UTF-8' | |||
} | |||
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task | |||
// if it is present. | |||
// If you remove this task, sources will not be generated. | |||
task sourcesJar(type: Jar, dependsOn: classes) { | |||
classifier 'sources' | |||
from sourceSets.main.allSource | |||
} | |||
task javadocJar(type: Jar, dependsOn: javadoc) { | |||
classifier 'javadoc' | |||
from javadoc.destinationDir | |||
} | |||
artifacts { | |||
archives sourcesJar | |||
archives javadocJar | |||
} | |||
jar { | |||
from "LICENSE" | |||
} | |||
if (project.hasProperty('curseforge.api_key')) { | |||
curseforge { | |||
apiKey = project.getProperty('curseforge.api_key') | |||
project { | |||
id = project.curseforge_id | |||
changelog = 'A changelog can be found at https://gitea.thebrokenrail.com/TheBrokenRail/SorceryCraft/src/branch/master/CHANGELOG.md' | |||
releaseType = 'release' | |||
addGameVersion project.simple_minecraft_version | |||
addGameVersion 'Fabric' | |||
mainArtifact(remapJar) { | |||
displayName = "SorceryCraft v${mod_version} for ${project.minecraft_version}" | |||
} | |||
afterEvaluate { | |||
uploadTask.dependsOn('remapJar') | |||
} | |||
relations { | |||
requiredDependency 'fabric-api' | |||
} | |||
} | |||
options { | |||
forgeGradleIntegration = false | |||
} | |||
} | |||
} |
@ -0,0 +1,20 @@ | |||
# Done to increase the memory available to gradle. | |||
org.gradle.jvmargs = -Xmx1G | |||
# Fabric Properties | |||
# check these on https://fabricmc.net/use | |||
minecraft_version = 20w13b | |||
curseforge_id = 371246 | |||
simple_minecraft_version = 1.16-Snapshot | |||
yarn_build = 4 | |||
fabric_loader_version = 0.7.8+build.189 | |||
# Mod Properties | |||
mod_version = 1.0.0 | |||
maven_group = com.thebrokenrail | |||
archives_base_name = gulliverreloaded | |||
# Dependencies | |||
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api | |||
fabric_api_version = 0.5.6+build.313-1.16 | |||
mod_menu_version = 1.11.0+build.2 |
@ -0,0 +1,6 @@ | |||
#Sat Feb 29 21:58:32 EST 2020 | |||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.2.2-all.zip | |||
distributionBase=GRADLE_USER_HOME | |||
distributionPath=wrapper/dists | |||
zipStorePath=wrapper/dists | |||
zipStoreBase=GRADLE_USER_HOME |
@ -0,0 +1,188 @@ | |||
#!/usr/bin/env sh | |||
# | |||
# Copyright 2015 the original author or authors. | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# https://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# | |||
############################################################################## | |||
## | |||
## Gradle start up script for UN*X | |||
## | |||
############################################################################## | |||
# Attempt to set APP_HOME | |||
# Resolve links: $0 may be a link | |||
PRG="$0" | |||
# Need this for relative symlinks. | |||
while [ -h "$PRG" ] ; do | |||
ls=`ls -ld "$PRG"` | |||
link=`expr "$ls" : '.*-> \(.*\)$'` | |||
if expr "$link" : '/.*' > /dev/null; then | |||
PRG="$link" | |||
else | |||
PRG=`dirname "$PRG"`"/$link" | |||
fi | |||
done | |||
SAVED="`pwd`" | |||
cd "`dirname \"$PRG\"`/" >/dev/null | |||
APP_HOME="`pwd -P`" | |||
cd "$SAVED" >/dev/null | |||
APP_NAME="Gradle" | |||
APP_BASE_NAME=`basename "$0"` | |||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | |||
# Use the maximum available, or set MAX_FD != -1 to use that value. | |||
MAX_FD="maximum" | |||
warn () { | |||
echo "$*" | |||
} | |||
die () { | |||
echo | |||
echo "$*" | |||
echo | |||
exit 1 | |||
} | |||
# OS specific support (must be 'true' or 'false'). | |||
cygwin=false | |||
msys=false | |||
darwin=false | |||
nonstop=false | |||
case "`uname`" in | |||
CYGWIN* ) | |||
cygwin=true | |||
;; | |||
Darwin* ) | |||
darwin=true | |||
;; | |||
MINGW* ) | |||
msys=true | |||
;; | |||
NONSTOP* ) | |||
nonstop=true | |||
;; | |||
esac | |||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | |||
# Determine the Java command to use to start the JVM. | |||
if [ -n "$JAVA_HOME" ] ; then | |||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | |||
# IBM's JDK on AIX uses strange locations for the executables | |||
JAVACMD="$JAVA_HOME/jre/sh/java" | |||
else | |||
JAVACMD="$JAVA_HOME/bin/java" | |||
fi | |||
if [ ! -x "$JAVACMD" ] ; then | |||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | |||
Please set the JAVA_HOME variable in your environment to match the | |||
location of your Java installation." | |||
fi | |||
else | |||
JAVACMD="java" | |||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |||
Please set the JAVA_HOME variable in your environment to match the | |||
location of your Java installation." | |||
fi | |||
# Increase the maximum file descriptors if we can. | |||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then | |||
MAX_FD_LIMIT=`ulimit -H -n` | |||
if [ $? -eq 0 ] ; then | |||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | |||
MAX_FD="$MAX_FD_LIMIT" | |||
fi | |||
ulimit -n $MAX_FD | |||
if [ $? -ne 0 ] ; then | |||
warn "Could not set maximum file descriptor limit: $MAX_FD" | |||
fi | |||
else | |||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | |||
fi | |||
fi | |||
# For Darwin, add options to specify how the application appears in the dock | |||
if $darwin; then | |||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | |||
fi | |||
# For Cygwin, switch paths to Windows format before running java | |||
if $cygwin ; then | |||
APP_HOME=`cygpath --path --mixed "$APP_HOME"` | |||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | |||
JAVACMD=`cygpath --unix "$JAVACMD"` | |||
# We build the pattern for arguments to be converted via cygpath | |||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | |||
SEP="" | |||
for dir in $ROOTDIRSRAW ; do | |||
ROOTDIRS="$ROOTDIRS$SEP$dir" | |||
SEP="|" | |||
done | |||
OURCYGPATTERN="(^($ROOTDIRS))" | |||
# Add a user-defined pattern to the cygpath arguments | |||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then | |||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | |||
fi | |||
# Now convert the arguments - kludge to limit ourselves to /bin/sh | |||
i=0 | |||
for arg in "$@" ; do | |||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | |||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | |||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | |||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | |||
else | |||
eval `echo args$i`="\"$arg\"" | |||
fi | |||
i=$((i+1)) | |||
done | |||
case $i in | |||
(0) set -- ;; | |||
(1) set -- "$args0" ;; | |||
(2) set -- "$args0" "$args1" ;; | |||
(3) set -- "$args0" "$args1" "$args2" ;; | |||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;; | |||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | |||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | |||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | |||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | |||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | |||
esac | |||
fi | |||
# Escape application args | |||
save () { | |||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done | |||
echo " " | |||
} | |||
APP_ARGS=$(save "$@") | |||
# Collect all arguments for the java command, following the shell quoting and substitution rules | |||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" | |||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong | |||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then | |||
cd "$(dirname "$0")" | |||
fi | |||
exec "$JAVACMD" "$@" |
@ -0,0 +1,100 @@ | |||
@rem | |||
@rem Copyright 2015 the original author or authors. | |||
@rem | |||
@rem Licensed under the Apache License, Version 2.0 (the "License"); | |||
@rem you may not use this file except in compliance with the License. | |||
@rem You may obtain a copy of the License at | |||
@rem | |||
@rem https://www.apache.org/licenses/LICENSE-2.0 | |||
@rem | |||
@rem Unless required by applicable law or agreed to in writing, software | |||
@rem distributed under the License is distributed on an "AS IS" BASIS, | |||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
@rem See the License for the specific language governing permissions and | |||
@rem limitations under the License. | |||
@rem | |||
@if "%DEBUG%" == "" @echo off | |||
@rem ########################################################################## | |||
@rem | |||
@rem Gradle startup script for Windows | |||
@rem | |||
@rem ########################################################################## | |||
@rem Set local scope for the variables with windows NT shell | |||
if "%OS%"=="Windows_NT" setlocal | |||
set DIRNAME=%~dp0 | |||
if "%DIRNAME%" == "" set DIRNAME=. | |||
set APP_BASE_NAME=%~n0 | |||
set APP_HOME=%DIRNAME% | |||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" | |||
@rem Find java.exe | |||
if defined JAVA_HOME goto findJavaFromJavaHome | |||
set JAVA_EXE=java.exe | |||
%JAVA_EXE% -version >NUL 2>&1 | |||
if "%ERRORLEVEL%" == "0" goto init | |||
echo. | |||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |||
echo. | |||
echo Please set the JAVA_HOME variable in your environment to match the | |||
echo location of your Java installation. | |||
goto fail | |||
:findJavaFromJavaHome | |||
set JAVA_HOME=%JAVA_HOME:"=% | |||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe | |||
if exist "%JAVA_EXE%" goto init | |||
echo. | |||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | |||
echo. | |||
echo Please set the JAVA_HOME variable in your environment to match the | |||
echo location of your Java installation. | |||
goto fail | |||
:init | |||
@rem Get command-line arguments, handling Windows variants | |||
if not "%OS%" == "Windows_NT" goto win9xME_args | |||
:win9xME_args | |||
@rem Slurp the command line arguments. | |||
set CMD_LINE_ARGS= | |||
set _SKIP=2 | |||
:win9xME_args_slurp | |||
if "x%~1" == "x" goto execute | |||
set CMD_LINE_ARGS=%* | |||
:execute | |||
@rem Setup the command line | |||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | |||
@rem Execute Gradle | |||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | |||
:end | |||
@rem End local scope for the variables with windows NT shell | |||
if "%ERRORLEVEL%"=="0" goto mainEnd | |||
:fail | |||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | |||
rem the _cmd.exe /c_ return code! | |||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | |||
exit /b 1 | |||
:mainEnd | |||
if "%OS%"=="Windows_NT" endlocal | |||
:omega |
@ -0,0 +1,12 @@ | |||
pluginManagement { | |||
repositories { | |||
jcenter() | |||
maven { | |||
name = 'Fabric' | |||
url = 'https://maven.fabricmc.net/' | |||
} | |||
gradlePluginPortal() | |||
} | |||
} | |||
rootProject.name = 'Gulliver Reloaded' |
@ -0,0 +1,34 @@ | |||
package com.thebrokenrail.gulliverreloaded; | |||
import net.minecraft.entity.effect.StatusEffect; | |||
import net.minecraft.potion.Potion; | |||
public class CustomPotion { | |||
private StatusEffect statusEffect; | |||
private Potion potion; | |||
private Potion longPotion; | |||
private Potion strongPotion; | |||
public CustomPotion(StatusEffect statusEffect, Potion potion, Potion longPotion, Potion strongPotion) { | |||
this.statusEffect = statusEffect; | |||
this.potion = potion; | |||
this.longPotion = longPotion; | |||
this.strongPotion = strongPotion; | |||
} | |||
public StatusEffect getStatusEffect() { | |||
return statusEffect; | |||
} | |||
public Potion getPotion() { | |||
return potion; | |||
} | |||
public Potion getLongPotion() { | |||
return longPotion; | |||
} | |||
public Potion getStrongPotion() { | |||
return strongPotion; | |||
} | |||
} |
@ -0,0 +1,47 @@ | |||
package com.thebrokenrail.gulliverreloaded; | |||
import com.thebrokenrail.gulliverreloaded.mixin.BrewingRecipeRegistryAccessor; | |||
import com.thebrokenrail.gulliverreloaded.mixin.StatusEffectAccessor; | |||
import net.fabricmc.api.ModInitializer; | |||
import net.minecraft.entity.effect.StatusEffect; | |||
import net.minecraft.entity.effect.StatusEffectInstance; | |||
import net.minecraft.entity.effect.StatusEffectType; | |||
import net.minecraft.entity.effect.StatusEffects; | |||
import net.minecraft.item.Items; | |||
import net.minecraft.potion.Potion; | |||
import net.minecraft.potion.Potions; | |||
import net.minecraft.util.Identifier; | |||
import net.minecraft.util.registry.Registry; | |||
public class GulliverReloaded implements ModInitializer { | |||
public static final String NAMESPACE = "gulliverreloaded"; | |||
public static CustomPotion SHRINK_EFFECT; | |||
public static CustomPotion GROW_EFFECT; | |||
@Override | |||
public void onInitialize() { | |||
SHRINK_EFFECT = registerEffect("shrink", 2039713); | |||
GROW_EFFECT = registerEffect("grow", 16262179); | |||
registerBrewingRecipe(); | |||
} | |||
private CustomPotion registerEffect(String name, int color) { | |||
StatusEffect effect = Registry.register(Registry.STATUS_EFFECT, new Identifier(NAMESPACE, name), StatusEffectAccessor.createStatusEffect(StatusEffectType.NEUTRAL, color)); | |||
Potion potion = Registry.register(Registry.POTION, new Identifier(NAMESPACE, name), new Potion(new StatusEffectInstance(effect, 3600))); | |||
Potion longPotion = Registry.register(Registry.POTION, new Identifier(NAMESPACE, "long_" + name), new Potion(name, new StatusEffectInstance(effect, 9600))); | |||
Potion strongPotion = Registry.register(Registry.POTION, new Identifier(NAMESPACE, "strong_" + name), new Potion(name, new StatusEffectInstance(effect, 1800, 1))); | |||
return new CustomPotion(effect, potion, longPotion, strongPotion); | |||
} | |||
private void registerBrewingRecipe() { | |||
BrewingRecipeRegistryAccessor.callRegisterPotionRecipe(Potions.AWKWARD, Items.BONE_MEAL, GROW_EFFECT.getPotion()); | |||
BrewingRecipeRegistryAccessor.callRegisterPotionRecipe(GROW_EFFECT.getPotion(), Items.REDSTONE, GROW_EFFECT.getLongPotion()); | |||
BrewingRecipeRegistryAccessor.callRegisterPotionRecipe(GROW_EFFECT.getPotion(), Items.GLOWSTONE_DUST, GROW_EFFECT.getStrongPotion()); | |||
BrewingRecipeRegistryAccessor.callRegisterPotionRecipe(GROW_EFFECT.getPotion(), Items.FERMENTED_SPIDER_EYE, SHRINK_EFFECT.getPotion()); | |||
BrewingRecipeRegistryAccessor.callRegisterPotionRecipe(GROW_EFFECT.getLongPotion(), Items.FERMENTED_SPIDER_EYE, SHRINK_EFFECT.getLongPotion()); | |||
BrewingRecipeRegistryAccessor.callRegisterPotionRecipe(GROW_EFFECT.getStrongPotion(), Items.FERMENTED_SPIDER_EYE, SHRINK_EFFECT.getStrongPotion()); | |||
BrewingRecipeRegistryAccessor.callRegisterPotionRecipe(SHRINK_EFFECT.getPotion(), Items.REDSTONE, SHRINK_EFFECT.getLongPotion()); | |||
BrewingRecipeRegistryAccessor.callRegisterPotionRecipe(SHRINK_EFFECT.getPotion(), Items.GLOWSTONE_DUST, SHRINK_EFFECT.getStrongPotion()); | |||
} | |||
} |
@ -0,0 +1,9 @@ | |||
package com.thebrokenrail.gulliverreloaded; | |||
import net.minecraft.entity.EntityDimensions; | |||
public interface ScaledEntity { | |||
float getScale(); | |||
EntityDimensions scaleDimensions(EntityDimensions dimensions); | |||
} |
@ -0,0 +1,16 @@ | |||
package com.thebrokenrail.gulliverreloaded.mixin; | |||
import net.minecraft.item.Item; | |||
import net.minecraft.potion.Potion; | |||
import net.minecraft.recipe.BrewingRecipeRegistry; | |||
import org.spongepowered.asm.mixin.Mixin; | |||
import org.spongepowered.asm.mixin.gen.Invoker; | |||
@SuppressWarnings("unused") | |||
@Mixin(BrewingRecipeRegistry.class) | |||
public interface BrewingRecipeRegistryAccessor { | |||
@Invoker | |||
static void callRegisterPotionRecipe(Potion input, Item item, Potion output) { | |||
throw new UnsupportedOperationException(); | |||
} | |||
} |
@ -0,0 +1,97 @@ | |||
package com.thebrokenrail.gulliverreloaded.mixin; | |||
import com.thebrokenrail.gulliverreloaded.GulliverReloaded; | |||
import com.thebrokenrail.gulliverreloaded.ScaledEntity; | |||
import net.minecraft.entity.EntityDimensions; | |||
import net.minecraft.entity.EntityPose; | |||
import net.minecraft.entity.LivingEntity; | |||
import net.minecraft.entity.data.DataTracker; | |||
import net.minecraft.entity.data.TrackedData; | |||
import net.minecraft.entity.data.TrackedDataHandlerRegistry; | |||
import net.minecraft.entity.effect.StatusEffect; | |||
import net.minecraft.entity.effect.StatusEffectInstance; | |||
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 org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; | |||
import java.util.Map; | |||
@SuppressWarnings("unused") | |||
@Mixin(LivingEntity.class) | |||
public abstract class MixinLivingEntity implements ScaledEntity { | |||
private static final TrackedData<Float> SCALE = DataTracker.registerData(LivingEntity.class, TrackedDataHandlerRegistry.FLOAT); | |||
@Shadow | |||
public abstract Map<StatusEffect, StatusEffectInstance> getActiveStatusEffects(); | |||
@Override | |||
public float getScale() { | |||
return ((LivingEntity) (Object) this).getDataTracker().get(SCALE); | |||
} | |||
private float computeScale() { | |||
Map<StatusEffect, StatusEffectInstance> effects = getActiveStatusEffects(); | |||
if (effects != null && effects.size() > 0) { | |||
int shrink = effects.get(GulliverReloaded.SHRINK_EFFECT.getStatusEffect()) != null ? effects.get(GulliverReloaded.SHRINK_EFFECT.getStatusEffect()).getAmplifier() + 1 : 0; | |||
int grow = effects.get(GulliverReloaded.GROW_EFFECT.getStatusEffect()) != null ? effects.get(GulliverReloaded.GROW_EFFECT.getStatusEffect()).getAmplifier() + 1 : 0; | |||
float value = grow - shrink; | |||
if (value > 0) { | |||
return (float) Math.pow(2f, value); | |||
} else { | |||
return (float) Math.pow(0.5f, Math.abs(value)); | |||
} | |||
} else { | |||
return 1f; | |||
} | |||
} | |||
@Inject(at = @At("RETURN"), method = "getDimensions", cancellable = true) | |||
public void getDimensions(EntityPose pose, CallbackInfoReturnable<EntityDimensions> info) { | |||
info.setReturnValue(scaleDimensions(info.getReturnValue())); | |||
} | |||
@Override | |||
public EntityDimensions scaleDimensions(EntityDimensions dimensions) { | |||
float scale = getScale(); | |||
return new EntityDimensions(Math.max(dimensions.width * scale, 0.5f), Math.max(dimensions.height * scale, 0.5f), dimensions.fixed); | |||
} | |||
@Inject(at = @At("RETURN"), method = "getJumpVelocity", cancellable = true) | |||
public void getJumpVelocity(CallbackInfoReturnable<Float> info) { | |||
info.setReturnValue(info.getReturnValue() * (float) Math.pow(getScale(), 0.2f)); | |||
} | |||
@Inject(at = @At("RETURN"), method = "getMovementSpeed()F", cancellable = true) | |||
public void getMovementSpeed(CallbackInfoReturnable<Float> info) { | |||
info.setReturnValue(info.getReturnValue() * (float) Math.pow(getScale(), 0.2f)); | |||
} | |||
@Inject(at = @At("RETURN"), method = "getEyeHeight", cancellable = true) | |||
public void getEyeHeight(EntityPose pose, EntityDimensions dimensions, CallbackInfoReturnable<Float> info) { | |||
if (pose != EntityPose.SLEEPING) { | |||
info.setReturnValue(info.getReturnValue() * getScale()); | |||
} | |||
} | |||
@Inject(at = @At("HEAD"), method = "tick") | |||
public void tick(CallbackInfo info) { | |||
if (!((LivingEntity) (Object) this).getEntityWorld().isClient()) { | |||
((LivingEntity) (Object) this).getDataTracker().set(SCALE, computeScale()); | |||
} | |||
} | |||
@Inject(at = @At("RETURN"), method = "initDataTracker") | |||
public void initDataTracker(CallbackInfo info) { | |||
((LivingEntity) (Object) this).getDataTracker().startTracking(SCALE, 1f); | |||
} | |||
@Inject(at = @At("RETURN"), method = "onTrackedDataSet") | |||
public void onTrackedDataSet(TrackedData<?> data, CallbackInfo info) { | |||
if (SCALE.equals(data)) { | |||
((LivingEntity) (Object) this).calculateDimensions(); | |||
} | |||
} | |||
} |
@ -0,0 +1,23 @@ | |||
package com.thebrokenrail.gulliverreloaded.mixin; | |||
import com.thebrokenrail.gulliverreloaded.ScaledEntity; | |||
import net.fabricmc.api.EnvType; | |||
import net.fabricmc.api.Environment; | |||
import net.minecraft.client.render.entity.LivingEntityRenderer; | |||
import net.minecraft.client.util.math.MatrixStack; | |||
import net.minecraft.entity.LivingEntity; | |||
import org.spongepowered.asm.mixin.Mixin; | |||
import org.spongepowered.asm.mixin.injection.At; | |||
import org.spongepowered.asm.mixin.injection.ModifyArg; | |||
@SuppressWarnings("unused") | |||
@Environment(EnvType.CLIENT) | |||
@Mixin(LivingEntityRenderer.class) | |||
public class MixinLivingEntityRenderer { | |||
@ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/LivingEntityRenderer;scale(Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/client/util/math/MatrixStack;F)V"), method = "render", index = 1) | |||
public MatrixStack adjustScale(LivingEntity livingEntity, MatrixStack matrices, float amount) { | |||
float scale = ((ScaledEntity) livingEntity).getScale(); | |||
matrices.scale(scale, scale, scale); | |||
return matrices; | |||
} | |||
} |
@ -0,0 +1,32 @@ | |||
package com.thebrokenrail.gulliverreloaded.mixin; | |||
import com.thebrokenrail.gulliverreloaded.ScaledEntity; | |||
import net.minecraft.entity.EntityDimensions; | |||
import net.minecraft.entity.EntityPose; | |||
import net.minecraft.entity.player.PlayerEntity; | |||
import org.spongepowered.asm.mixin.Final; | |||
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.CallbackInfoReturnable; | |||
import java.util.Map; | |||
@SuppressWarnings("unused") | |||
@Mixin(PlayerEntity.class) | |||
public abstract class MixinPlayerEntity { | |||
@Shadow | |||
@Final | |||
private static Map<EntityPose, EntityDimensions> POSE_DIMENSIONS; | |||
@Inject(at = @At("RETURN"), method = "getMovementSpeed()F", cancellable = true) | |||
public void getMovementSpeed(CallbackInfoReturnable<Float> info) { | |||
info.setReturnValue(info.getReturnValue() * ((ScaledEntity) this).getScale()); | |||
} | |||
@Inject(at = @At("RETURN"), method = "getDimensions", cancellable = true) | |||
public void getDimensions(EntityPose pose, CallbackInfoReturnable<EntityDimensions> info) { | |||
info.setReturnValue(((ScaledEntity) this).scaleDimensions(info.getReturnValue())); | |||
} | |||
} |
@ -0,0 +1,15 @@ | |||
package com.thebrokenrail.gulliverreloaded.mixin; | |||
import net.minecraft.entity.effect.StatusEffect; | |||
import net.minecraft.entity.effect.StatusEffectType; | |||
import org.spongepowered.asm.mixin.Mixin; | |||
import org.spongepowered.asm.mixin.gen.Invoker; | |||
@SuppressWarnings("unused") | |||
@Mixin(StatusEffect.class) | |||
public interface StatusEffectAccessor { | |||
@Invoker | |||
static StatusEffect createStatusEffect(StatusEffectType type, int color) { | |||
throw new UnsupportedOperationException(); | |||
} | |||
} |
@ -0,0 +1,10 @@ | |||
{ | |||
"effect.gulliverreloaded.shrink": "Shrink", | |||
"effect.gulliverreloaded.grow": "Grow", | |||
"item.minecraft.potion.effect.shrink": "Potion of Shrinking", | |||
"item.minecraft.potion.effect.grow": "Potion of Growing", | |||
"item.minecraft.splash_potion.effect.shrink": "Splash Potion of Shrinking", | |||
"item.minecraft.splash_potion.effect.grow": "Splash Potion of Growing", | |||
"item.minecraft.tipped_arrow.effect.shrink": "Arrow of Shrinking", | |||
"item.minecraft.tipped_arrow.effect.grow": "Arrow of Growing" | |||
} |
@ -0,0 +1,31 @@ | |||
{ | |||
"schemaVersion": 1, | |||
"id": "modid", | |||
"version": "${version}", | |||
"name": "${name}", | |||
"description": "The Gulliver mod remade for modern Minecraft!", | |||
"authors": [ | |||
"TheBrokenRail" | |||
], | |||
"contact": { | |||
"homepage": "https://thebrokenrail.com/", | |||
"sources": "https://gitea.thebrokenrail.com/TheBrokenRail/GulliverReloaded.git", | |||
"issues": "https://gitea.thebrokenrail.com/TheBrokenRail/GulliverReloaded/issues" | |||
}, | |||
"license": "MIT", | |||
"icon": "assets/gulliverreloaded/textures/mob_effect/shrink.png", | |||
"environment": "*", | |||
"entrypoints": { | |||
"main": [ | |||
"com.thebrokenrail.gulliverreloaded.GulliverReloaded" | |||
] | |||
}, | |||
"mixins": [ | |||
"gulliverreloaded.mixins.json" | |||
], | |||
"depends": { | |||
"fabricloader": ">=0.7.4", | |||
"fabric": "*", | |||
"minecraft": "1.16.x" | |||
} | |||
} |
@ -0,0 +1,17 @@ | |||
{ | |||
"required": true, | |||
"package": "com.thebrokenrail.gulliverreloaded.mixin", | |||
"compatibilityLevel": "JAVA_8", | |||
"client": [ | |||
"MixinLivingEntityRenderer" | |||
], | |||
"mixins": [ | |||
"BrewingRecipeRegistryAccessor", | |||
"MixinLivingEntity", | |||
"MixinPlayerEntity", | |||
"StatusEffectAccessor" | |||
], | |||
"injectors": { | |||
"defaultRequire": 1 | |||
} | |||
} |