[REPO REFACTOR]: changed to a better git repository structure with branches

This commit is contained in:
2025-11-01 03:03:28 +01:00
parent 5a23c1e304
commit 26406fe87e
122 changed files with 3867 additions and 0 deletions

185
build.gradle Normal file
View File

@@ -0,0 +1,185 @@
plugins {
id 'eclipse'
id 'maven-publish'
id 'net.minecraftforge.gradle' version '5.1.+'
}
version = '1.19.2-1.3.1'
group = 'es.yoshibv.amodgus' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'amodgus'
// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17.
java.toolchain.languageVersion = JavaLanguageVersion.of(17)
println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}"
minecraft {
// The mappings can be changed at any time and must be in the following format.
// Channel: Version:
// official MCVersion Official field/method names from Mojang mapping files
// parchment YYYY.MM.DD-MCVersion Open community-sourced parameter names and javadocs layered on top of official
//
// You must be aware of the Mojang license when using the 'official' or 'parchment' mappings.
// See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
//
// Parchment is an unofficial project maintained by ParchmentMC, separate from MinecraftForge
// Additional setup is needed to use their mappings: https://github.com/ParchmentMC/Parchment/wiki/Getting-Started
//
// Use non-default mappings at your own risk. They may not always work.
// Simply re-run your setup task after changing the mappings to update your workspace.
mappings channel: 'official', version: '1.19.2'
// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Currently, this location cannot be changed from the default.
// Default run configurations.
// These can be tweaked, removed, or duplicated as needed.
runs {
client {
workingDirectory project.file('run')
// Recommended logging data for a userdev environment
// The markers can be added/remove as needed separated by commas.
// "SCAN": For mods scan.
// "REGISTRIES": For firing of registry events.
// "REGISTRYDUMP": For getting the contents of all registries.
property 'forge.logging.markers', 'REGISTRIES'
// Recommended logging level for the console
// You can set various levels here.
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
property 'forge.logging.console.level', 'debug'
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
property 'forge.enabledGameTestNamespaces', 'examplemod'
mods {
examplemod {
source sourceSets.main
}
}
}
server {
workingDirectory project.file('run')
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
property 'forge.enabledGameTestNamespaces', 'examplemod'
mods {
examplemod {
source sourceSets.main
}
}
}
// This run config launches GameTestServer and runs all registered gametests, then exits.
// By default, the server will crash when no gametests are provided.
// The gametest system is also enabled by default for other run configs under the /test command.
gameTestServer {
workingDirectory project.file('run')
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
property 'forge.enabledGameTestNamespaces', 'examplemod'
mods {
examplemod {
source sourceSets.main
}
}
}
data {
workingDirectory project.file('run')
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
args '--mod', 'examplemod', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
mods {
examplemod {
source sourceSets.main
}
}
}
}
}
// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }
repositories {
// Put repositories for dependencies here
// ForgeGradle automatically adds the Forge maven and Maven Central for you
// If you have mod jar dependencies in ./libs, you can declare them as a repository like so:
// flatDir {
// dir 'libs'
// }
maven { url 'https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/' }
}
dependencies {
// Specify the version of Minecraft to use. If this is any group other than 'net.minecraft', it is assumed
// that the dep is a ForgeGradle 'patcher' dependency, and its patches will be applied.
// The userdev artifact is a special name and will get all sorts of transformations applied to it.
minecraft 'net.minecraftforge:forge:1.19.2-43.2.6'
implementation fg.deobf('software.bernie.geckolib:geckolib-forge-1.19:3.1.40')
// Real mod deobf dependency examples - these get remapped to your current mappings
// compileOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}:api") // Adds JEI API as a compile dependency
// runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}") // Adds the full JEI mod as a runtime dependency
// implementation fg.deobf("com.tterrag.registrate:Registrate:MC${mc_version}-${registrate_version}") // Adds registrate as a dependency
// Examples using mod jars from ./libs
// implementation fg.deobf("blank:coolmod-${mc_version}:${coolmod_version}")
// For more info...
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
// http://www.gradle.org/docs/current/userguide/dependency_management.html
}
// Example for how to get properties into the manifest for reading at runtime.
jar {
manifest {
attributes([
"Specification-Title" : "amodgus",
"Specification-Vendor" : "amodgus",
"Specification-Version" : "1.19.2-1.3.1", // We are version 1 of ourselves
"Implementation-Title" : project.name,
"Implementation-Version" : project.jar.archiveVersion,
"Implementation-Vendor" : "amodgus",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
])
}
}
// Example configuration to allow publishing using the maven-publish plugin
// This is the preferred method to reobfuscate your jar file
jar.finalizedBy('reobfJar')
// However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing
// publish.dependsOn('reobfJar')
publishing {
publications {
mavenJava(MavenPublication) {
artifact jar
}
}
repositories {
maven {
url "file://${project.projectDir}/mcmodsrepo"
}
}
}
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
}

4
gradle.properties Normal file
View File

@@ -0,0 +1,4 @@
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
# This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

240
gradlew vendored Normal file
View File

@@ -0,0 +1,240 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original 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 POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
APP_BASE_NAME=${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 "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# 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 ;; #(
MSYS* | 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" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

91
gradlew.bat vendored Normal file
View File

@@ -0,0 +1,91 @@
@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 Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@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% equ 0 goto execute
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 execute
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
: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 %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 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!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

6
settings.gradle Normal file
View File

@@ -0,0 +1,6 @@
pluginManagement {
repositories {
gradlePluginPortal()
maven { url = 'https://maven.minecraftforge.net/' }
}
}

View File

@@ -0,0 +1,34 @@
package dev.galliard.amodgus;
import dev.galliard.amodgus.events.MobsAttrsEvent;
import dev.galliard.amodgus.events.MobsRendererEvents;
import dev.galliard.amodgus.init.InitItems;
import dev.galliard.amodgus.init.MobsInit;
import dev.galliard.amodgus.painting.ModPaintings;
import dev.galliard.amodgus.sound.ModSounds;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import software.bernie.geckolib3.GeckoLib;
import static net.minecraftforge.common.MinecraftForge.EVENT_BUS;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@Mod(Amodgus.MODID)
public class Amodgus {
public static final String MODID = "amodgus";
public static final Logger LOGGER = LogManager.getLogger();
public Amodgus() {
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
InitItems.ITEMS.register(bus);
EVENT_BUS.register(new MobsAttrsEvent());
EVENT_BUS.register(new MobsRendererEvents());
MobsInit.register(bus);
GeckoLib.initialize();
ModSounds.register(bus);
ModPaintings.register(bus);
}
}

View File

@@ -0,0 +1,29 @@
package dev.galliard.amodgus.client.models;
import dev.galliard.amodgus.entities.AmongusEntity;
import dev.galliard.amodgus.Amodgus;
import dev.galliard.amodgus.client.renderer.AmongusRenderer;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib3.model.AnimatedGeoModel;
public class AmongusModel extends AnimatedGeoModel<AmongusEntity> {
@Override
public ResourceLocation getModelResource(AmongusEntity object) {
// TODO Apéndice de método generado automáticamente
return new ResourceLocation(Amodgus.MODID, "geo/amongus.geo.json");
}
@Override
public ResourceLocation getTextureResource(AmongusEntity object) {
// TODO Apéndice de método generado automáticamente
return AmongusRenderer.LOCATION_BY_VARIANT.get(object.getVariant());
}
@Override
public ResourceLocation getAnimationResource(AmongusEntity animatable) {
// TODO Apéndice de método generado automáticamente
return new ResourceLocation(Amodgus.MODID, "animations/amongus.animation.json");
}
}

View File

@@ -0,0 +1,29 @@
package dev.galliard.amodgus.client.models;
import dev.galliard.amodgus.client.renderer.AmongusRenderer;
import dev.galliard.amodgus.entities.ImpostorEntity;
import dev.galliard.amodgus.Amodgus;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib3.model.AnimatedGeoModel;
public class ImpostorModel extends AnimatedGeoModel<ImpostorEntity> {
@Override
public ResourceLocation getModelResource(ImpostorEntity object) {
// TODO Apéndice de método generado automáticamente
return new ResourceLocation(Amodgus.MODID, "geo/amongus.geo.json");
}
@Override
public ResourceLocation getTextureResource(ImpostorEntity object) {
// TODO Apéndice de método generado automáticamente
return AmongusRenderer.LOCATION_BY_VARIANT.get(object.getVariant());
}
@Override
public ResourceLocation getAnimationResource(ImpostorEntity animatable) {
// TODO Apéndice de método generado automáticamente
return new ResourceLocation(Amodgus.MODID, "animations/amongus.animation.json");
}
}

View File

@@ -0,0 +1,80 @@
package dev.galliard.amodgus.client.renderer;
import java.util.Map;
import dev.galliard.amodgus.client.models.AmongusModel;
import dev.galliard.amodgus.entities.AmongusEntity;
import dev.galliard.amodgus.entities.variant.AmongusVariant;
import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import dev.galliard.amodgus.Amodgus;
import com.google.common.collect.Maps;
import net.minecraft.Util;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRendererProvider.Context;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib3.renderers.geo.GeoEntityRenderer;
public class AmongusRenderer extends GeoEntityRenderer<AmongusEntity> {
public static final Map<AmongusVariant, ResourceLocation> LOCATION_BY_VARIANT =
Util.make(Maps.newEnumMap(AmongusVariant.class), (p_114874_) -> {
p_114874_.put(AmongusVariant.RED,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_red.png"));
p_114874_.put(AmongusVariant.YELLOW,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_yellow.png"));
p_114874_.put(AmongusVariant.ORANGE,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_orange.png"));
p_114874_.put(AmongusVariant.GREEN,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_green.png"));
p_114874_.put(AmongusVariant.LIME,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_lime.png"));
p_114874_.put(AmongusVariant.PURPLE,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_purple.png"));
p_114874_.put(AmongusVariant.MAGENTA,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_magenta.png"));
p_114874_.put(AmongusVariant.PINK,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_pink.png"));
p_114874_.put(AmongusVariant.WHITE,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_white.png"));
p_114874_.put(AmongusVariant.BLACK,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_black.png"));
p_114874_.put(AmongusVariant.BROWN,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_brown.png"));
p_114874_.put(AmongusVariant.BLUE,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_blue.png"));
p_114874_.put(AmongusVariant.CYAN,
new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_cyan.png"));
});
public AmongusRenderer(Context renderManager) {
super(renderManager, new AmongusModel());
// TODO Apéndice de constructor generado automáticamente
this.shadowRadius = 0.5f;
}
@Override
public ResourceLocation getTextureLocation(AmongusEntity object) {
// TODO Apéndice de método generado automáticamente
return LOCATION_BY_VARIANT.get(object.getVariant());
}
@Override
public RenderType getRenderType(AmongusEntity animatable, float partialTicks, PoseStack stack,
@Nullable MultiBufferSource renderTypeBuffer,
@Nullable VertexConsumer vertexBuilder, int packedLightIn,
ResourceLocation textureLocation) {
stack.scale(1.0f, 1.0f, 1.0f);
return super.getRenderType(animatable, partialTicks, stack, renderTypeBuffer, vertexBuilder, packedLightIn, textureLocation);
}
}

View File

@@ -0,0 +1,40 @@
package dev.galliard.amodgus.client.renderer;
import dev.galliard.amodgus.entities.ImpostorEntity;
import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import dev.galliard.amodgus.Amodgus;
import dev.galliard.amodgus.client.models.ImpostorModel;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRendererProvider.Context;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib3.renderers.geo.GeoEntityRenderer;
public class ImpostorRenderer extends GeoEntityRenderer<ImpostorEntity> {
public ImpostorRenderer(Context renderManager) {
super(renderManager, new ImpostorModel());
// TODO Auto-generated constructor stub
this.shadowRadius = 0.5f;
}
@Override
public ResourceLocation getTextureLocation(ImpostorEntity object) {
// TODO Apéndice de método generado automáticamente
return new ResourceLocation(Amodgus.MODID, "textures/entities/amongus_black.png");
}
@Override
public RenderType getRenderType(ImpostorEntity animatable, float partialTicks, PoseStack stack,
@Nullable MultiBufferSource renderTypeBuffer,
@Nullable VertexConsumer vertexBuilder, int packedLightIn,
ResourceLocation textureLocation) {
stack.scale(1.0f, 1.0f, 1.0f);
return super.getRenderType(animatable, partialTicks, stack, renderTypeBuffer, vertexBuilder, packedLightIn, textureLocation);
}
}

View File

@@ -0,0 +1,376 @@
package dev.galliard.amodgus.entities;
import java.util.Random;
import java.util.UUID;
import dev.galliard.amodgus.entities.variant.AmongusVariant;
import org.jetbrains.annotations.Nullable;
import dev.galliard.amodgus.Amodgus;
import dev.galliard.amodgus.init.MobsInit;
import dev.galliard.amodgus.sound.ModSounds;
import net.minecraft.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.util.RandomSource;
import net.minecraft.world.DifficultyInstance;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.AgeableMob;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobSpawnType;
import net.minecraft.world.entity.NeutralMob;
import net.minecraft.world.entity.SpawnGroupData;
import net.minecraft.world.entity.TamableAnimal;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.ai.goal.FloatGoal;
import net.minecraft.world.entity.ai.goal.FollowOwnerGoal;
import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal;
import net.minecraft.world.entity.ai.goal.MeleeAttackGoal;
import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal;
import net.minecraft.world.entity.ai.goal.SitWhenOrderedToGoal;
import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal;
import net.minecraft.world.entity.ai.goal.target.OwnerHurtByTargetGoal;
import net.minecraft.world.entity.ai.goal.target.OwnerHurtTargetGoal;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.ServerLevelAccessor;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.scores.Team;
import net.minecraftforge.event.ForgeEventFactory;
import net.minecraftforge.registries.ForgeRegistries;
import software.bernie.geckolib3.core.IAnimatable;
import software.bernie.geckolib3.core.PlayState;
import software.bernie.geckolib3.core.builder.AnimationBuilder;
import software.bernie.geckolib3.core.builder.ILoopType;
import software.bernie.geckolib3.core.controller.AnimationController;
import software.bernie.geckolib3.core.event.predicate.AnimationEvent;
import software.bernie.geckolib3.core.manager.AnimationData;
import software.bernie.geckolib3.core.manager.AnimationFactory;
public class AmongusEntity extends TamableAnimal implements IAnimatable, NeutralMob {
@SuppressWarnings("removal")
private AnimationFactory factory = new AnimationFactory(this);
private static final EntityDataAccessor<Boolean> SITTING =
SynchedEntityData.defineId(AmongusEntity.class, EntityDataSerializers.BOOLEAN);
private static final EntityDataAccessor<Integer> DATA_ID_TYPE_VARIANT =
SynchedEntityData.defineId(AmongusEntity.class, EntityDataSerializers.INT);
public AmongusEntity(EntityType<? extends TamableAnimal> entityType, Level world) {
super(entityType, world);
// TODO Apéndice de constructor generado automáticamente
}
public static AttributeSupplier setAttributes() {
return TamableAnimal.createMobAttributes()
.add(Attributes.MAX_HEALTH, 14.00)
.add(Attributes.ATTACK_DAMAGE,6.0f)
.add(Attributes.ATTACK_SPEED,1.8f)
.add(Attributes.MOVEMENT_SPEED, 0.3f).build();
}
@Override
protected void registerGoals() {
this.goalSelector.addGoal(1, new FloatGoal(this));
this.targetSelector.addGoal(4, new OwnerHurtByTargetGoal(this));
this.targetSelector.addGoal(5, new OwnerHurtTargetGoal(this));
this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this));
this.goalSelector.addGoal(5, new MeleeAttackGoal(this, 1.0D, true));
this.goalSelector.addGoal(6, new FollowOwnerGoal(this, 1.2D, 8.0F, 2.0F, false));
this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 6.0f));
this.goalSelector.addGoal(10, new RandomLookAroundGoal(this));
this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0D));
}
@Nullable
@Override
public AgeableMob getBreedOffspring(ServerLevel p_146743_, AgeableMob p_146744_) {
return MobsInit.AMONGUS.get().create(p_146743_);
}
private <E extends IAnimatable> PlayState predicate(AnimationEvent<E> event) {
if (event.isMoving()) {
event.getController().setAnimation(new AnimationBuilder().addAnimation("walk", (ILoopType)ILoopType.EDefaultLoopTypes.LOOP));
return PlayState.CONTINUE;
}
if (this.isSitting()) {
event.getController().setAnimation(new AnimationBuilder().addAnimation("sitting", (ILoopType)ILoopType.EDefaultLoopTypes.LOOP));
return PlayState.CONTINUE;
}
event.getController().setAnimation(new AnimationBuilder().addAnimation("idle", (ILoopType)ILoopType.EDefaultLoopTypes.LOOP));
return PlayState.CONTINUE;
}
private <E extends IAnimatable> PlayState deathPredicate(AnimationEvent<E> event) {
if (this.isDeadOrDying()) {
this.setHealth(0.5f);
event.getController().setAnimation(new AnimationBuilder().addAnimation("death", (ILoopType)ILoopType.EDefaultLoopTypes.PLAY_ONCE));
this.die(getLastDamageSource());
return PlayState.CONTINUE;
}
return PlayState.CONTINUE;
}
@Override
public void registerControllers(AnimationData data) {
data.addAnimationController(new AnimationController<IAnimatable>((IAnimatable)this, "controller", 0.0f, this::predicate));
data.addAnimationController(new AnimationController<IAnimatable>((IAnimatable)this, "deathController", 0.0f, this::deathPredicate));
}
@Override
public AnimationFactory getFactory() {
return this.factory;
}
protected void playStepSound(BlockPos pos, BlockState blockIn) {
this.playSound(SoundEvents.NETHERITE_BLOCK_PLACE, 0.15F, 1.0F);
}
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
return SoundEvents.DOLPHIN_HURT;
}
protected SoundEvent getDeathSound() {
return ModSounds.AMONGUS_DEATH.get();
}
protected float getSoundVolume() {
return 0.4F;
}
@Override
public InteractionResult mobInteract(Player player, InteractionHand hand) {
ItemStack itemstack = player.getItemInHand(hand);
Item item = itemstack.getItem();
Item healItem = ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"flask"));
Item[] itemsForTaming = {
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"red_toy")),
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"blue_toy")),
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"cyan_toy")),
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"green_toy")),
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"lime_toy")),
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"yellow_toy")),
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"orange_toy")),
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"pink_toy")),
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"purple_toy")),
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"magenta_toy")),
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"black_toy")),
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"white_toy")),
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Amodgus.MODID,"brown_toy"))
};
if (!isTame()) {
if (this.level.isClientSide) {
return InteractionResult.CONSUME;
} else {
if (!player.getAbilities().instabuild) {
itemstack.shrink(1);
}
if (!ForgeEventFactory.onAnimalTame(this, player)) {
if (!this.level.isClientSide) {
if((getVariant() == AmongusVariant.RED && item == itemsForTaming[0]) ||
(getVariant() == AmongusVariant.BLUE && item == itemsForTaming[1]) ||
(getVariant() == AmongusVariant.CYAN && item == itemsForTaming[2]) ||
(getVariant() == AmongusVariant.GREEN && item == itemsForTaming[3]) ||
(getVariant() == AmongusVariant.LIME && item == itemsForTaming[4]) ||
(getVariant() == AmongusVariant.YELLOW && item == itemsForTaming[5]) ||
(getVariant() == AmongusVariant.ORANGE && item == itemsForTaming[6]) ||
(getVariant() == AmongusVariant.PINK && item == itemsForTaming[7]) ||
(getVariant() == AmongusVariant.PURPLE && item == itemsForTaming[8]) ||
(getVariant() == AmongusVariant.MAGENTA && item == itemsForTaming[9]) ||
(getVariant() == AmongusVariant.BLACK && item == itemsForTaming[10]) ||
(getVariant() == AmongusVariant.WHITE && item == itemsForTaming[11]) ||
(getVariant() == AmongusVariant.BROWN && item == itemsForTaming[12])) {
super.tame(player);
this.navigation.recomputePath();
this.setTarget(null);
this.level.broadcastEntityEvent(this, (byte)7);
setSitting(true);
}
}
}
return InteractionResult.SUCCESS;
}
}
if(player == this.getOwner()) {
if(isTame() && this.getHealth() < this.getMaxHealth() && item == healItem) {
this.setSitting(false);
this.setOrderedToSit(false);
this.setHealth(this.getHealth() + 5.0f);
this.summonParticles(ParticleTypes.HAPPY_VILLAGER);
return InteractionResult.SUCCESS;
}
if(isTame() && !this.level.isClientSide && hand == InteractionHand.MAIN_HAND) {
setSitting(!isSitting());
return InteractionResult.SUCCESS;
}
}
return super.mobInteract(player, hand);
}
private void summonParticles(ParticleOptions particleoptions) {
for(int i = 0; i < 7; ++i) {
double d0 = this.random.nextGaussian() * 0.02D;
double d1 = this.random.nextGaussian() * 0.02D;
double d2 = this.random.nextGaussian() * 0.02D;
this.level.addParticle(particleoptions, this.getRandomX(1.0D), this.getRandomY() + 0.5D, this.getRandomZ(1.0D), d0, d1, d2);
}
}
public static boolean canSpawn(EntityType<AmongusEntity> entity, LevelAccessor levelAccess,
MobSpawnType spawnType, BlockPos pos, RandomSource random) {
return checkAnimalSpawnRules(entity, levelAccess, spawnType, pos, random);
}
@Override
public void readAdditionalSaveData(CompoundTag tag) {
super.readAdditionalSaveData(tag);
setSitting(tag.getBoolean("isSitting"));
this.entityData.set(DATA_ID_TYPE_VARIANT, tag.getInt("Variant"));
}
@Override
public void addAdditionalSaveData(CompoundTag tag) {
super.addAdditionalSaveData(tag);
tag.putBoolean("isSitting", this.isSitting());
tag.putInt("Variant", this.getTypeVariant());
}
@Override
protected void defineSynchedData() {
super.defineSynchedData();
this.entityData.define(SITTING, false);
this.entityData.define(DATA_ID_TYPE_VARIANT, 0);
}
public void setSitting(boolean sitting) {
this.entityData.set(SITTING, sitting);
this.setOrderedToSit(sitting);
}
public boolean isSitting() {
return this.entityData.get(SITTING);
}
@Override
public Team getTeam() {
return super.getTeam();
}
public boolean canBeLeashed(Player player) {
return false;
}
@Override
public void setTame(boolean tamed) {
super.setTame(tamed);
if (tamed) {
getAttribute(Attributes.MAX_HEALTH).setBaseValue(20.0D);
getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(6.0D);
getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue((double)0.3f);
} else {
getAttribute(Attributes.MAX_HEALTH).setBaseValue(14.0D);
getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(3.0D);
getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue((double)0.3f);
}
}
/* VARIANTS */
public SpawnGroupData finalizeSpawn(ServerLevelAccessor p_146746_, DifficultyInstance p_146747_,
MobSpawnType p_146748_, @Nullable SpawnGroupData p_146749_,
@Nullable CompoundTag p_146750_) {
AmongusVariant variant = Util.getRandom(AmongusVariant.values(), this.random);
System.out.println("\n\nVariant:" + variant);
Level level = this.getLevel();
ServerLevel srvLevel = p_146746_.getLevel();
ImpostorEntity ie = new ImpostorEntity(MobsInit.IMPOSTOR.get(), level);
Random random = new Random();
double n = random.nextDouble();
System.out.println("Random number:" + n);
setVariant(variant);
if (n < 0.5 && variant.equals(AmongusVariant.BLACK)) {
System.out.println("Se cumple la probabilidad del 50%");
this.remove(Entity.RemovalReason.DISCARDED);
ie.setPos(new Vec3(this.getX()+1, this.getY(), this.getZ()+1));
srvLevel.addFreshEntity(ie);
} else {
System.out.println("No se cumple la probabilidad del 50%");
}
return super.finalizeSpawn(p_146746_, p_146747_, p_146748_, p_146749_, p_146750_);
}
public AmongusVariant getVariant() {
return AmongusVariant.byId(this.getTypeVariant() & 255);
}
private int getTypeVariant() {
return this.entityData.get(DATA_ID_TYPE_VARIANT);
}
private void setVariant(AmongusVariant variant) {
this.entityData.set(DATA_ID_TYPE_VARIANT, variant.getId() & 255);
}
@Override
public int getRemainingPersistentAngerTime() {
// TODO Apéndice de método generado automáticamente
return 0;
}
@Override
public void setRemainingPersistentAngerTime(int p_21673_) {
// TODO Apéndice de método generado automáticamente
}
@Override
public UUID getPersistentAngerTarget() {
// TODO Apéndice de método generado automáticamente
return null;
}
@Override
public void setPersistentAngerTarget(UUID p_21672_) {
// TODO Apéndice de método generado automáticamente
}
@Override
public void startPersistentAngerTimer() {
// TODO Apéndice de método generado automáticamente
}
}

View File

@@ -0,0 +1,161 @@
package dev.galliard.amodgus.entities;
import dev.galliard.amodgus.entities.variant.AmongusVariant;
import org.jetbrains.annotations.Nullable;
import dev.galliard.amodgus.sound.ModSounds;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.DifficultyInstance;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobSpawnType;
import net.minecraft.world.entity.SpawnGroupData;
import net.minecraft.world.entity.TamableAnimal;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.ai.goal.FloatGoal;
import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal;
import net.minecraft.world.entity.ai.goal.MeleeAttackGoal;
import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal;
import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal;
import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal;
import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal;
import net.minecraft.world.entity.monster.Monster;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.ServerLevelAccessor;
import net.minecraft.world.level.block.state.BlockState;
import software.bernie.geckolib3.core.IAnimatable;
import software.bernie.geckolib3.core.PlayState;
import software.bernie.geckolib3.core.builder.AnimationBuilder;
import software.bernie.geckolib3.core.builder.ILoopType;
import software.bernie.geckolib3.core.controller.AnimationController;
import software.bernie.geckolib3.core.event.predicate.AnimationEvent;
import software.bernie.geckolib3.core.manager.AnimationData;
import software.bernie.geckolib3.core.manager.AnimationFactory;
public class ImpostorEntity extends Monster implements IAnimatable {
@SuppressWarnings("removal")
private AnimationFactory factory = new AnimationFactory(this);
private static final EntityDataAccessor<Integer> DATA_ID_TYPE_VARIANT =
SynchedEntityData.defineId(ImpostorEntity.class, EntityDataSerializers.INT);
public ImpostorEntity(EntityType<? extends Monster> entityType, Level world) {
super(entityType, world);
// TODO Apéndice de constructor generado automáticamente
}
public static AttributeSupplier setAttributes() {
return TamableAnimal.createMobAttributes()
.add(Attributes.MAX_HEALTH, 14.00)
.add(Attributes.ATTACK_DAMAGE,7.0f)
.add(Attributes.ATTACK_SPEED,2.2f)
.add(Attributes.MOVEMENT_SPEED, 0.5f).build();
}
@Override
protected void registerGoals() {
this.goalSelector.addGoal(1, new FloatGoal(this));
this.goalSelector.addGoal(5, new MeleeAttackGoal(this, 1.0D, true));
this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 6.0f));
this.goalSelector.addGoal(10, new RandomLookAroundGoal(this));
this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 1.0D));
this.targetSelector.addGoal(1, (new HurtByTargetGoal(this)).setAlertOthers(ImpostorEntity.class));
this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Player.class, true));
this.targetSelector.addGoal(6, new NearestAttackableTargetGoal<>(this, AmongusEntity.class, false));
}
private <E extends IAnimatable> PlayState predicate(AnimationEvent<E> event) {
if (event.isMoving()) {
event.getController().setAnimation(new AnimationBuilder().addAnimation("walk", (ILoopType)ILoopType.EDefaultLoopTypes.LOOP));
return PlayState.CONTINUE;
}
event.getController().setAnimation(new AnimationBuilder().addAnimation("idle", (ILoopType)ILoopType.EDefaultLoopTypes.LOOP));
return PlayState.CONTINUE;
}
private <E extends IAnimatable> PlayState deathPredicate(AnimationEvent<E> event) {
if (this.isDeadOrDying()) {
this.setHealth(0.5f);
event.getController().setAnimation(new AnimationBuilder().addAnimation("death", (ILoopType)ILoopType.EDefaultLoopTypes.PLAY_ONCE));
this.die(getLastDamageSource());
return PlayState.CONTINUE;
}
return PlayState.CONTINUE;
}
@Override
public void registerControllers(AnimationData data) {
data.addAnimationController(new AnimationController<IAnimatable>((IAnimatable)this, "controller", 0.0f, this::predicate));
data.addAnimationController(new AnimationController<IAnimatable>((IAnimatable)this, "deathController", 0.0f, this::deathPredicate));
}
@Override
public AnimationFactory getFactory() {
return this.factory;
}
protected void playStepSound(BlockPos pos, BlockState blockIn) {
this.playSound(SoundEvents.NETHERITE_BLOCK_PLACE, 0.15F, 1.0F);
}
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
return SoundEvents.SHULKER_HURT;
}
protected SoundEvent getDeathSound() {
return ModSounds.AMONGUS_DEATH.get();
}
protected float getSoundVolume() {
return 0.4F;
}
@Override
public void readAdditionalSaveData(CompoundTag tag) {
super.readAdditionalSaveData(tag);
this.entityData.set(DATA_ID_TYPE_VARIANT, tag.getInt("Variant"));
}
@Override
public void addAdditionalSaveData(CompoundTag tag) {
super.addAdditionalSaveData(tag);
tag.putInt("Variant", this.getTypeVariant());
}
@Override
protected void defineSynchedData() {
super.defineSynchedData();
this.entityData.define(DATA_ID_TYPE_VARIANT, 0);
}
/* VARIANTS */
public SpawnGroupData finalizeSpawn(ServerLevelAccessor p_146746_, DifficultyInstance p_146747_,
MobSpawnType p_146748_, @Nullable SpawnGroupData p_146749_,
@Nullable CompoundTag p_146750_) {
AmongusVariant variant = AmongusVariant.BLACK;
setVariant(variant);
return super.finalizeSpawn(p_146746_, p_146747_, p_146748_, p_146749_, p_146750_);
}
public AmongusVariant getVariant() {
return AmongusVariant.byId(this.getTypeVariant() & 255);
}
private int getTypeVariant() {
return this.entityData.get(DATA_ID_TYPE_VARIANT);
}
private void setVariant(AmongusVariant variant) {
this.entityData.set(DATA_ID_TYPE_VARIANT, variant.getId() & 255);
}
}

View File

@@ -0,0 +1,36 @@
package dev.galliard.amodgus.entities.variant;
import java.util.Arrays;
import java.util.Comparator;
public enum AmongusVariant {
RED(0),
YELLOW(1),
ORANGE(2),
GREEN(3),
LIME(4),
PURPLE(5),
MAGENTA(6),
PINK(7),
WHITE(8),
BLACK(9),
BROWN(10),
BLUE(11),
CYAN(12);
private static final AmongusVariant[] BY_ID = Arrays.stream(values()).sorted(Comparator.
comparingInt(AmongusVariant::getId)).toArray(AmongusVariant[]::new);
private final int id;
AmongusVariant(int id) {
this.id = id;
}
public int getId() {
return this.id;
}
public static AmongusVariant byId(int id) {
return BY_ID[id % BY_ID.length];
}
}

View File

@@ -0,0 +1,32 @@
package dev.galliard.amodgus.events;
import dev.galliard.amodgus.entities.AmongusEntity;
import dev.galliard.amodgus.entities.ImpostorEntity;
import dev.galliard.amodgus.Amodgus;
import dev.galliard.amodgus.init.MobsInit;
import net.minecraft.world.entity.SpawnPlacements;
import net.minecraft.world.entity.monster.Monster;
import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
@Mod.EventBusSubscriber(modid = Amodgus.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class MobsAttrsEvent {
@SuppressWarnings("deprecation")
@SubscribeEvent
public static void commonSetup(FMLCommonSetupEvent event) {
event.enqueueWork(() -> SpawnPlacements.register(MobsInit.AMONGUS.get(),
SpawnPlacements.Type.ON_GROUND, Heightmap.Types.WORLD_SURFACE, AmongusEntity::canSpawn));
event.enqueueWork(() -> SpawnPlacements.register(MobsInit.IMPOSTOR.get(),
SpawnPlacements.Type.ON_GROUND, Heightmap.Types.WORLD_SURFACE, Monster::checkMonsterSpawnRules));
}
@SubscribeEvent
public static void entityAttributes(EntityAttributeCreationEvent event) {
event.put(MobsInit.AMONGUS.get(), AmongusEntity.setAttributes());
event.put(MobsInit.IMPOSTOR.get(), ImpostorEntity.setAttributes());
}
}

View File

@@ -0,0 +1,20 @@
package dev.galliard.amodgus.events;
import dev.galliard.amodgus.Amodgus;
import dev.galliard.amodgus.client.renderer.AmongusRenderer;
import dev.galliard.amodgus.client.renderer.ImpostorRenderer;
import dev.galliard.amodgus.init.MobsInit;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.EntityRenderersEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
@Mod.EventBusSubscriber(modid=Amodgus.MODID,bus=Mod.EventBusSubscriber.Bus.MOD, value=Dist.CLIENT)
public class MobsRendererEvents {
@SubscribeEvent
public static void entityRenders(EntityRenderersEvent.RegisterRenderers event) {
event.registerEntityRenderer(MobsInit.AMONGUS.get(),AmongusRenderer::new);
event.registerEntityRenderer(MobsInit.IMPOSTOR.get(),ImpostorRenderer::new);
}
}

View File

@@ -0,0 +1,17 @@
package dev.galliard.amodgus.init;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
public class AmodgusTab extends CreativeModeTab{
public static final AmodgusTab AMODGUS_TAB = new AmodgusTab(CreativeModeTab.TABS.length, "Amodgus");
private AmodgusTab(int index, String label) {
super(index, label);
}
@Override
public ItemStack makeIcon() {
return new ItemStack(InitItems.KNIFE.get());
}
}

View File

@@ -0,0 +1,102 @@
package dev.galliard.amodgus.init;
import dev.galliard.amodgus.sound.ModSounds;
import dev.galliard.amodgus.Amodgus;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.RecordItem;
import net.minecraft.world.item.SwordItem;
import net.minecraft.world.item.Tiers;
import net.minecraftforge.common.ForgeSpawnEggItem;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class InitItems {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(
ForgeRegistries.ITEMS, Amodgus.MODID
);
public static final RegistryObject<SwordItem> KNIFE = ITEMS.register(
"knife", () -> new SwordItem(
Tiers.IRON,
2,
-2.0f,
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB))
);
public static final RegistryObject<Item> EGGHAT = ITEMS.register(
"egghat", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> AMONGUS_SPAWN_EGG = ITEMS.register(
"amongus_spawn_egg", () -> new ForgeSpawnEggItem(
MobsInit.AMONGUS, 0xb4202a, 0xb9bffb, new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> IMPOSTOR_SPAWN_EGG = ITEMS.register(
"impostor_spawn_egg", () -> new ForgeSpawnEggItem(
MobsInit.IMPOSTOR, 0x3f474e, 0x1e1f26, new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> RED_TOY = ITEMS.register(
"red_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> BLACK_TOY = ITEMS.register(
"black_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> WHITE_TOY = ITEMS.register(
"white_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> CYAN_TOY = ITEMS.register(
"cyan_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> PINK_TOY = ITEMS.register(
"pink_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> PURPLE_TOY = ITEMS.register(
"purple_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> MAGENTA_TOY = ITEMS.register(
"magenta_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> BLUE_TOY = ITEMS.register(
"blue_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> BROWN_TOY = ITEMS.register(
"brown_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> GREEN_TOY = ITEMS.register(
"green_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> LIME_TOY = ITEMS.register(
"lime_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> YELLOW_TOY = ITEMS.register(
"yellow_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> ORANGE_TOY = ITEMS.register(
"orange_toy", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> FLASK = ITEMS.register(
"flask", () -> new Item(
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1))
);
public static final RegistryObject<Item> AMONGUS_DRIP_SONG_MUSIC_DISC = ITEMS.register("music_disc_amongus_drip",
() -> new RecordItem(4, ModSounds.AMONGUS_DRIP,
new Item.Properties().tab(AmodgusTab.AMODGUS_TAB).stacksTo(1), 0));
}

View File

@@ -0,0 +1,33 @@
package dev.galliard.amodgus.init;
import dev.galliard.amodgus.entities.AmongusEntity;
import dev.galliard.amodgus.entities.ImpostorEntity;
import dev.galliard.amodgus.Amodgus;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobCategory;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class MobsInit {
public static final DeferredRegister<EntityType<?>> MOBS =
DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, Amodgus.MODID);
public static final RegistryObject<EntityType<AmongusEntity>> AMONGUS =
MOBS.register("amongus",
() -> EntityType.Builder.of(AmongusEntity::new, MobCategory.CREATURE)
.sized(0.4f, 1.0f)
.build(new ResourceLocation(Amodgus.MODID,"amongus").toString()));
public static final RegistryObject<EntityType<ImpostorEntity>> IMPOSTOR =
MOBS.register("impostor",
() -> EntityType.Builder.of(ImpostorEntity::new, MobCategory.MONSTER)
.sized(0.4f, 1.0f)
.build(new ResourceLocation(Amodgus.MODID,"impostor").toString()));
public static void register(IEventBus eventBus) {
MOBS.register(eventBus);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class BlackToyItem extends Item{
public BlackToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class BlueToyItem extends Item{
public BlueToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class BrownToyItem extends Item{
public BrownToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class CyanToyItem extends Item{
public CyanToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class EggHatItem extends Item{
public EggHatItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class Flask extends Item{
public Flask(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class GreenToyItem extends Item{
public GreenToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class ImpostorKnifeItem extends Item {
public ImpostorKnifeItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class LimeToyItem extends Item{
public LimeToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class MagentaToyItem extends Item{
public MagentaToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class OrangeToyItem extends Item{
public OrangeToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class PinkToyItem extends Item{
public PinkToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class PurpleToyItem extends Item{
public PurpleToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class RedToyItem extends Item{
public RedToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class WhiteToyItem extends Item{
public WhiteToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,16 @@
package dev.galliard.amodgus.init.custom;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
public class YellowToyItem extends Item{
public YellowToyItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult useOn(UseOnContext pContext) {
return super.useOn(pContext);
}
}

View File

@@ -0,0 +1,20 @@
package dev.galliard.amodgus.painting;
import dev.galliard.amodgus.Amodgus;
import net.minecraft.world.entity.decoration.PaintingVariant;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class ModPaintings {
public static final DeferredRegister<PaintingVariant> PAINTING_VARIANTS =
DeferredRegister.create(ForgeRegistries.PAINTING_VARIANTS, Amodgus.MODID);
public static final RegistryObject<PaintingVariant> IMPOSTOR = PAINTING_VARIANTS.register("impostor",
() -> new PaintingVariant(64,32));
public static void register(IEventBus bus) {
PAINTING_VARIANTS.register(bus);
}
}

View File

@@ -0,0 +1,28 @@
package dev.galliard.amodgus.sound;
import dev.galliard.amodgus.Amodgus;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class ModSounds {
public static final DeferredRegister<SoundEvent> SOUND_EVENTS =
DeferredRegister.create(ForgeRegistries.SOUND_EVENTS, Amodgus.MODID);
public static final RegistryObject<SoundEvent> AMONGUS_DRIP =
registerSoundEvent("amongus_drip");
public static final RegistryObject<SoundEvent> AMONGUS_DEATH =
registerSoundEvent("amongus_death");
private static RegistryObject<SoundEvent> registerSoundEvent(String name){
return SOUND_EVENTS.register(name, () -> new SoundEvent(new ResourceLocation(Amodgus.MODID, name)));
}
public static void register(IEventBus eventBus) {
SOUND_EVENTS.register(eventBus);
}
}

View File

@@ -0,0 +1,37 @@
# This is an example mods.toml file. It contains the data relating to the loading mods.
# There are several mandatory fields (#mandatory), and many more that are optional (#optional).
# The overall format is standard TOML format, v0.5.0.
# Note that there are a couple of TOML lists in this file.
# Find more information on toml format here: https://github.com/toml-lang/toml
# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
modLoader="javafml" #mandatory
# A version range to match for said mod loader - for regular FML @Mod it will be the forge version
loaderVersion="[40,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions.
# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties.
# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here.
license="GNU General Public License v3.0"
# A URL to refer people to when problems occur with this mod
#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional
# A list of mods - how many allowed here is determined by the individual mod loader
[[mods]] #mandatory
# The modid of the mod
modId="amodgus" #mandatory
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
# ${file.jarVersion} will substitute the value of the Implementation-Version as read from the mod's JAR file metadata
# see the associated build.gradle script for how to populate this completely automatically during a build
version="1.19.2-1.3.0-BETA" #mandatory
# A display name for the mod
displayName="Amodgus" #mandatory
# A URL to query for updates for this mod. See the JSON update specification https://mcforge.readthedocs.io/en/latest/gettingstarted/autoupdate/
#updateJSONURL="https://change.me.example.invalid/updates.json" #optional
# A URL for the "homepage" for this mod, displayed in the mod UI
#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" #optional
# A file name (in the root of the mod JAR) containing a logo for display
logoFile="logo.png" #optional
# A text field displayed in the mod UI
authors="yoshibv" #optional
# The description text for the mod (multi line!) (#mandatory)
description='''
This is
a sus mod!
'''

View File

@@ -0,0 +1,733 @@
{
"format_version": "1.8.0",
"animations": {
"idle": {
"loop": true,
"animation_length": 4,
"bones": {
"h_lower_body": {
"rotation": {
"0.0": [0, 0, 0],
"0.05": [-0.24375, 0, 0],
"0.1": [-0.475, 0, 0],
"0.15": [-0.69375, 0, 0],
"0.2": [-0.9, 0, 0],
"0.25": [-1.09375, 0, 0],
"0.3": [-1.275, 0, 0],
"0.35": [-1.44375, 0, 0],
"0.4": [-1.6, 0, 0],
"0.45": [-1.74375, 0, 0],
"0.5": [-1.875, 0, 0],
"0.55": [-1.99375, 0, 0],
"0.6": [-2.1, 0, 0],
"0.65": [-2.19375, 0, 0],
"0.7": [-2.275, 0, 0],
"0.75": [-2.34375, 0, 0],
"0.8": [-2.4, 0, 0],
"0.85": [-2.44375, 0, 0],
"0.9": [-2.475, 0, 0],
"0.95": [-2.49375, 0, 0],
"1.0": [-2.5, 0, 0],
"1.05": [-2.49375, 0, 0],
"1.1": [-2.475, 0, 0],
"1.15": [-2.44375, 0, 0],
"1.2": [-2.4, 0, 0],
"1.25": [-2.34375, 0, 0],
"1.3": [-2.275, 0, 0],
"1.35": [-2.19375, 0, 0],
"1.4": [-2.1, 0, 0],
"1.45": [-1.99375, 0, 0],
"1.5": [-1.875, 0, 0],
"1.55": [-1.74375, 0, 0],
"1.6": [-1.6, 0, 0],
"1.65": [-1.44375, 0, 0],
"1.7": [-1.275, 0, 0],
"1.75": [-1.09375, 0, 0],
"1.8": [-0.9, 0, 0],
"1.85": [-0.69375, 0, 0],
"1.9": [-0.475, 0, 0],
"1.95": [-0.24375, 0, 0],
"2.0": [0, 0, 0],
"2.05": [0.24375, 0, 0],
"2.1": [0.475, 0, 0],
"2.15": [0.69375, 0, 0],
"2.2": [0.9, 0, 0],
"2.25": [1.09375, 0, 0],
"2.3": [1.275, 0, 0],
"2.35": [1.44375, 0, 0],
"2.4": [1.6, 0, 0],
"2.45": [1.74375, 0, 0],
"2.5": [1.875, 0, 0],
"2.55": [1.99375, 0, 0],
"2.6": [2.1, 0, 0],
"2.65": [2.19375, 0, 0],
"2.7": [2.275, 0, 0],
"2.75": [2.34375, 0, 0],
"2.8": [2.4, 0, 0],
"2.85": [2.44375, 0, 0],
"2.9": [2.475, 0, 0],
"2.95": [2.49375, 0, 0],
"3.0": [2.5, 0, 0],
"3.05": [2.49375, 0, 0],
"3.1": [2.475, 0, 0],
"3.15": [2.44375, 0, 0],
"3.2": [2.4, 0, 0],
"3.25": [2.34375, 0, 0],
"3.3": [2.275, 0, 0],
"3.35": [2.19375, 0, 0],
"3.4": [2.1, 0, 0],
"3.45": [1.99375, 0, 0],
"3.5": [1.875, 0, 0],
"3.55": [1.74375, 0, 0],
"3.6": [1.6, 0, 0],
"3.65": [1.44375, 0, 0],
"3.7": [1.275, 0, 0],
"3.75": [1.09375, 0, 0],
"3.8": [0.9, 0, 0],
"3.85": [0.69375, 0, 0],
"3.9": [0.475, 0, 0],
"3.95": [0.24375, 0, 0],
"4.0": [0, 0, 0]
},
"position": {
"0.0": [0, -0.1, 0],
"0.05": [0, -0.09925, 0],
"0.1": [0, -0.097, 0],
"0.15": [0, -0.09325, 0],
"0.2": [0, -0.088, 0],
"0.25": [0, -0.08125, 0],
"0.3": [0, -0.073, 0],
"0.35": [0, -0.06325, 0],
"0.4": [0, -0.052, 0],
"0.45": [0, -0.03925, 0],
"0.5": [0, -0.025, 0],
"0.55": [0, -0.00925, 0],
"0.6": [0, 0.008, 0],
"0.65": [0, 0.02675, 0],
"0.7": [0, 0.047, 0],
"0.75": [0, 0.06875, 0],
"0.8": [0, 0.092, 0],
"0.85": [0, 0.11675, 0],
"0.9": [0, 0.143, 0],
"0.95": [0, 0.17075, 0],
"1.0": [0, 0.2, 0],
"1.05": [0, 0.22925, 0],
"1.1": [0, 0.257, 0],
"1.15": [0, 0.28325, 0],
"1.2": [0, 0.308, 0],
"1.25": [0, 0.33125, 0],
"1.3": [0, 0.353, 0],
"1.35": [0, 0.37325, 0],
"1.4": [0, 0.392, 0],
"1.45": [0, 0.40925, 0],
"1.5": [0, 0.425, 0],
"1.55": [0, 0.43925, 0],
"1.6": [0, 0.452, 0],
"1.65": [0, 0.46325, 0],
"1.7": [0, 0.473, 0],
"1.75": [0, 0.48125, 0],
"1.8": [0, 0.488, 0],
"1.85": [0, 0.49325, 0],
"1.9": [0, 0.497, 0],
"1.95": [0, 0.49925, 0],
"2.0": [0, 0.5, 0],
"2.05": [0, 0.49925, 0],
"2.1": [0, 0.497, 0],
"2.15": [0, 0.49325, 0],
"2.2": [0, 0.488, 0],
"2.25": [0, 0.48125, 0],
"2.3": [0, 0.473, 0],
"2.35": [0, 0.46325, 0],
"2.4": [0, 0.452, 0],
"2.45": [0, 0.43925, 0],
"2.5": [0, 0.425, 0],
"2.55": [0, 0.40925, 0],
"2.6": [0, 0.392, 0],
"2.65": [0, 0.37325, 0],
"2.7": [0, 0.353, 0],
"2.75": [0, 0.33125, 0],
"2.8": [0, 0.308, 0],
"2.85": [0, 0.28325, 0],
"2.9": [0, 0.257, 0],
"2.95": [0, 0.22925, 0],
"3.0": [0, 0.2, 0],
"3.05": [0, 0.17075, 0],
"3.1": [0, 0.143, 0],
"3.15": [0, 0.11675, 0],
"3.2": [0, 0.092, 0],
"3.25": [0, 0.06875, 0],
"3.3": [0, 0.047, 0],
"3.35": [0, 0.02675, 0],
"3.4": [0, 0.008, 0],
"3.45": [0, -0.00925, 0],
"3.5": [0, -0.025, 0],
"3.55": [0, -0.03925, 0],
"3.6": [0, -0.052, 0],
"3.65": [0, -0.06325, 0],
"3.7": [0, -0.073, 0],
"3.75": [0, -0.08125, 0],
"3.8": [0, -0.088, 0],
"3.85": [0, -0.09325, 0],
"3.9": [0, -0.097, 0],
"3.95": [0, -0.09925, 0],
"4.0": [0, -0.1, 0]
}
},
"upper_body": {
"rotation": [0, 0, 0]
},
"right_leg": {
"position": [0, 0, 0]
}
}
},
"spawn": {
"animation_length": 3.7,
"bones": {
"crewmate": {
"rotation": {
"0.0": [0, -2160, 0],
"0.05": [0, -1886.08267, 0],
"0.1": [0, -1639.08267, 0],
"0.15": [0, -1417.176, 0],
"0.2": [0, -1218.60267, 0],
"0.25": [0, -1041.66667, 0],
"0.3": [0, -884.736, 0],
"0.35": [0, -746.24267, 0],
"0.4": [0, -624.68267, 0],
"0.45": [0, -518.616, 0],
"0.5": [0, -426.66667, 0],
"0.55": [0, -347.52267, 0],
"0.6": [0, -279.936, 0],
"0.65": [0, -222.72267, 0],
"0.7": [0, -174.76267, 0],
"0.75": [0, -135, 0],
"0.8": [0, -102.44267, 0],
"0.85": [0, -76.16267, 0],
"0.9": [0, -55.296, 0],
"0.95": [0, -39.04267, 0],
"1.0": [0, -26.66667, 0],
"1.05": [0, -17.496, 0],
"1.1": [0, -10.92267, 0],
"1.15": [0, -6.40267, 0],
"1.2": [0, -3.456, 0],
"1.25": [0, -1.66667, 0],
"1.3": [0, -0.68267, 0],
"1.35": [0, -0.216, 0],
"1.4": [0, -0.04267, 0],
"1.45": [0, -0.00267, 0],
"1.5": [0, 0, 0]
},
"position": {
"0.0": [0, -19, 0],
"0.05": [0, -16.59054, 0],
"0.1": [0, -14.41786, 0],
"0.15": [0, -12.4659, 0],
"0.2": [0, -10.71919, 0],
"0.25": [0, -9.16281, 0],
"0.3": [0, -7.7824, 0],
"0.35": [0, -6.56417, 0],
"0.4": [0, -5.49489, 0],
"0.45": [0, -4.5619, 0],
"0.5": [0, -3.75309, 0],
"0.55": [0, -3.05691, 0],
"0.6": [0, -2.4624, 0],
"0.65": [0, -1.95913, 0],
"0.7": [0, -1.53726, 0],
"0.75": [0, -1.1875, 0],
"0.8": [0, -0.90112, 0],
"0.85": [0, -0.66995, 0],
"0.9": [0, -0.4864, 0],
"0.95": [0, -0.34343, 0],
"1.0": [0, -0.23457, 0],
"1.05": [0, -0.1539, 0],
"1.1": [0, -0.09608, 0],
"1.15": [0, -0.05632, 0],
"1.2": [0, -0.0304, 0],
"1.25": [0, -0.01466, 0],
"1.3": [0, -0.006, 0],
"1.35": [0, -0.0019, 0],
"1.4": [0, -0.00038, 0],
"1.45": [0, -0.00002, 0],
"1.5": [0, 0, 0]
}
},
"h_lower_body": {
"rotation": {
"0.0": [0, 0, 0],
"0.8": [-12.5, 7.5, 20],
"0.85": [-12.49202, 7.49999, 19.98664],
"0.9": [-12.43612, 7.4999, 19.89315],
"0.95": [-12.28441, 7.49965, 19.63939],
"1.0": [-11.98896, 7.49916, 19.14523],
"1.05": [-11.50188, 7.49837, 18.33053],
"1.1": [-10.77525, 7.49718, 17.11516],
"1.15": [-9.76116, 7.49552, 15.41897],
"1.2": [-8.41171, 7.49331, 13.16185],
"1.25": [-6.67898, 7.49048, 10.26365],
"1.3": [-4.51506, 7.48694, 6.64424],
"1.35": [-1.87204, 7.48261, 2.22349],
"1.4": [1.29798, 7.47742, -3.07875],
"1.45": [5.04292, 7.4713, -9.3426],
"1.5": [3.94838, 5.8505, -7.31613],
"1.55": [3.28447, 4.8674, -6.08696],
"1.6": [2.94355, 4.36256, -5.45577],
"1.65": [2.81794, 4.17657, -5.22322],
"1.7": [2.8, 4.15, -5.19],
"1.75": [2.84577, 4.21778, -5.27475],
"1.8": [2.9831, 4.42113, -5.52899],
"1.85": [3.21197, 4.76003, -5.95272],
"1.9": [3.53238, 5.23451, -6.54595],
"1.95": [3.94435, 5.84454, -7.30867],
"2.0": [4.44786, 6.59014, -8.24089],
"2.05": [5.04292, 7.4713, -9.3426],
"2.55": [5.04292, 7.4713, -9.3426],
"2.6": [-1.60207, -2.37353, 2.96802],
"2.65": [-0.06284, -0.0931, 0.11642],
"2.7": [0.38327, 0.56783, -0.71005],
"2.75": [-0.23005, -0.34083, 0.4262],
"2.8": [0.06403, 0.09486, -0.11862],
"2.85": [0.00862, 0.01277, -0.01597],
"2.9": [-0.0192, -0.02844, 0.03557],
"2.95": [0.01035, 0.01534, -0.01918],
"3.0": [-0.00246, -0.00365, 0.00456]
},
"position": {
"0.8": [0, 0, 0],
"1.5": [0, 0, -1],
"2.4": [0, 0, -1],
"2.45": [0, 0, -0.42188],
"2.5": [0, 0, -0.125],
"2.55": [0, 0, -0.01563],
"2.6": [0, 0, 0]
}
},
"right_leg": {
"rotation": {
"0.0": [-30, 0, 0],
"1.25": [-29.62165, 4.98093, 9.3426],
"1.3": [-29.01713, 4.87927, 9.15193],
"1.35": [-27.20356, 4.57432, 8.57994],
"1.4": [-24.18094, 4.06606, 7.62661],
"1.45": [-19.94928, 3.3545, 6.29196],
"1.5": [-14.50856, 2.43964, 4.57597],
"1.55": [-7.85881, 1.32147, 2.47865],
"1.6": [0, 0, 0],
"2.4": [0, 0, 0],
"2.55": [-5, 0, 0],
"2.8": [0, 0, 0]
},
"position": {
"0.0": [0, 1, -2],
"1.25": [0, 1, -2],
"1.3": [0, 0.97959, -2],
"1.35": [0, 0.91837, -2],
"1.4": [0, 0.81633, -2],
"1.45": [0, 0.67347, -2],
"1.5": [0, 0.4898, -2],
"1.55": [0, 0.26531, -2],
"1.6": [0, 0, -2],
"2.4": [0, 0, -2],
"2.55": [0, 1, -2],
"2.8": [0, 0, 0]
}
},
"right_hand": {
"rotation": {
"0.0": [-5.17544, 14.94159, 31.1622],
"0.75": [6.51309, 14.4189, 75.16442],
"1.2": [6.51309, 14.4189, 75.16442],
"1.25": [6.48911, 13.67609, 76.01153],
"1.3": [6.41719, 11.44766, 78.55287],
"1.35": [6.29732, 7.73363, 82.78843],
"1.4": [6.1295, 2.53397, 88.71822],
"1.45": [5.91374, -4.15129, 96.34223],
"1.5": [5.69797, -10.83656, 103.96624],
"1.55": [5.53016, -16.03622, 109.89603],
"1.6": [5.41029, -19.75025, 114.13159],
"1.65": [5.33836, -21.97868, 116.67293],
"1.7": [5.31439, -22.72148, 117.52004],
"2.05": [5.69797, -10.83656, 103.96624],
"2.1": [5.68585, -11.20792, 104.3898],
"2.15": [5.64948, -12.32199, 105.66046],
"2.2": [5.58886, -14.17878, 107.77824],
"2.25": [5.50399, -16.77828, 110.74312],
"2.3": [5.41912, -19.37778, 113.70801],
"2.35": [5.3585, -21.23457, 115.82578],
"2.4": [5.32212, -22.34864, 117.09645],
"2.45": [5.31, -22.72, 117.52],
"2.5": [2.655, -22.72, 83.76],
"2.55": [0, -22.72, 50],
"2.6": [0, -17.67111, 38.88889],
"2.65": [0, -5.04889, 11.11111],
"2.7": [0, 0, 0]
},
"position": {
"0.0": [-8, 0, 0],
"0.75": [-9.85664, -0.2558, 0.69817],
"1.2": [-9.85664, -0.2558, 0.69817],
"1.25": [-9.79249, -0.15619, 0.70084],
"1.3": [-9.60001, 0.14262, 0.70887],
"1.35": [-9.27921, 0.64064, 0.72224],
"1.4": [-8.8301, 1.33788, 0.74096],
"1.45": [-8.25267, 2.23432, 0.76504],
"1.5": [-7.67524, 3.13076, 0.78911],
"1.55": [-7.22612, 3.82799, 0.80783],
"1.6": [-6.90533, 4.32601, 0.82121],
"1.65": [-6.71285, 4.62482, 0.82923],
"1.7": [-6.64869, 4.72443, 0.83191],
"2.05": [-7.67524, 3.13076, 0.78911],
"2.1": [-7.6432, 3.18042, 0.79039],
"2.15": [-7.54708, 3.32941, 0.79422],
"2.2": [-7.38689, 3.57773, 0.80061],
"2.25": [-7.16262, 3.92538, 0.80955],
"2.3": [-6.93835, 4.27302, 0.8185],
"2.35": [-6.77815, 4.52134, 0.82489],
"2.4": [-6.68204, 4.67034, 0.82872],
"2.45": [-6.65, 4.72, 0.83],
"2.5": [-6.65, 2.72, 0.83],
"2.55": [-6.65, 0.72, 0.83],
"2.6": [-5.17222, 0.56, 0.64556],
"2.65": [-1.47778, 0.16, 0.18444],
"2.7": [0, 0, 0]
}
},
"left_hand": {
"rotation": {
"0.0": [-5.17544, -14.94159, -31.1622],
"0.75": [6.51309, -14.4189, -75.16442],
"1.2": [6.51309, -14.4189, -75.16442],
"1.25": [6.48911, -13.67609, -76.01153],
"1.3": [6.41719, -11.44766, -78.55287],
"1.35": [6.29732, -7.73363, -82.78843],
"1.4": [6.1295, -2.53397, -88.71822],
"1.45": [5.91374, 4.15129, -96.34223],
"1.5": [5.69797, 10.83656, -103.96624],
"1.55": [5.53016, 16.03622, -109.89603],
"1.6": [5.41029, 19.75025, -114.13159],
"1.65": [5.33836, 21.97868, -116.67293],
"1.7": [5.31439, 22.72148, -117.52004],
"2.05": [5.69797, 10.83656, -103.96624],
"2.1": [5.68585, 11.20792, -104.3898],
"2.15": [5.64948, 12.32199, -105.66046],
"2.2": [5.58886, 14.17878, -107.77824],
"2.25": [5.50399, 16.77828, -110.74312],
"2.3": [5.41912, 19.37778, -113.70801],
"2.35": [5.3585, 21.23457, -115.82578],
"2.4": [5.32212, 22.34864, -117.09645],
"2.45": [5.31, 22.72, -117.52],
"2.5": [2.655, 22.72, -83.76],
"2.55": [0, 22.72, -50],
"2.6": [0, 17.67111, -38.88889],
"2.65": [0, 5.04889, -11.11111],
"2.7": [0, 0, 0]
},
"position": {
"0.0": [8, 0, 0],
"0.75": [9.85664, -0.2558, 0.69817],
"1.2": [9.85664, -0.2558, 0.69817],
"1.25": [9.79249, -0.15619, 0.70084],
"1.3": [9.60001, 0.14262, 0.70887],
"1.35": [9.27921, 0.64064, 0.72224],
"1.4": [8.8301, 1.33788, 0.74096],
"1.45": [8.25267, 2.23432, 0.76504],
"1.5": [7.67524, 3.13076, 0.78911],
"1.55": [7.22612, 3.82799, 0.80783],
"1.6": [6.90533, 4.32601, 0.82121],
"1.65": [6.71285, 4.62482, 0.82923],
"1.7": [6.64869, 4.72443, 0.83191],
"2.05": [7.67524, 3.13076, 0.78911],
"2.1": [7.6432, 3.18042, 0.79039],
"2.15": [7.54708, 3.32941, 0.79422],
"2.2": [7.38689, 3.57773, 0.80061],
"2.25": [7.16262, 3.92538, 0.80955],
"2.3": [6.93835, 4.27302, 0.8185],
"2.35": [6.77815, 4.52134, 0.82489],
"2.4": [6.68204, 4.67034, 0.82872],
"2.45": [6.65, 4.72, 0.83],
"2.5": [6.65, 2.72, 0.83],
"2.55": [6.65, 0.72, 0.83],
"2.6": [5.17222, 0.56, 0.64556],
"2.65": [1.47778, 0.16, 0.18444],
"2.7": [0, 0, 0]
}
},
"hands": {
"rotation": {
"0.0": [0, 0, 0],
"1.2": [0, 0, 0],
"1.7": [-37.5, 0, 7.5],
"1.95": [-22.5, 0, 7.5],
"2.25": [-22.19157, -3.81024, -1.75249],
"2.7": [0, 0, 0]
}
}
}
},
"death": {
"animation_length": 1.3,
"bones": {
"crewmate": {
"rotation": {
"0.0": [0, 0, 0],
"0.05": [0.9, 0, 0],
"0.1": [3.6, 0, 0],
"0.15": [8.1, 0, 0],
"0.2": [14.4, 0, 0],
"0.25": [22.5, 0, 0],
"0.3": [32.4, 0, 0],
"0.35": [44.1, 0, 0],
"0.4": [57.6, 0, 0],
"0.45": [72.9, 0, 0],
"0.5": [90, 0, 0]
},
"position": {
"0.0": [0, 0, 0],
"0.05": [0, 0.02, -0.025],
"0.1": [0, 0.08, -0.1],
"0.15": [0, 0.18, -0.225],
"0.2": [0, 0.32, -0.4],
"0.25": [0, 0.5, -0.625],
"0.3": [0, 0.72, -0.9],
"0.35": [0, 0.98, -1.225],
"0.4": [0, 1.28, -1.6],
"0.45": [0, 1.62, -2.025],
"0.5": [0, 2, -2.5]
}
},
"h_lower_body": {
"rotation": {
"0.1": [0, 0, 0],
"0.5": [-90, 0, 0],
"0.55": [-87.34131, 0, 0],
"0.6": [-79.36523, 0, 0],
"0.65": [-66.07178, 0, 0],
"0.7": [-47.46094, 0, 0],
"0.75": [-23.53271, 0, 0],
"0.8": [-2.72461, 0, 0],
"0.85": [-14.56787, 0, 0],
"0.9": [-21.09375, 0, 0],
"0.95": [-22.30225, 0, 0],
"1.0": [-18.19336, 0, 0],
"1.05": [-8.76709, 0, 0],
"1.1": [-2.46094, 0, 0],
"1.15": [-5.60303, 0, 0],
"1.2": [-3.42773, 0, 0],
"1.25": [-1.2085, 0, 0],
"1.3": [0, 0, 0]
},
"position": {
"0.1": [0, 0, 0],
"0.5": [0, 0, 0],
"0.55": [0, 0, 0],
"0.6": [0, 0, 0],
"0.65": [0, 0, 0],
"0.7": [0, 0, 0],
"0.75": [0, 0, 0],
"0.8": [0, 0, 0],
"0.85": [0, 0, 0],
"0.9": [0, 0, 0],
"0.95": [0, 0, 0],
"1.0": [0, 0, 0],
"1.05": [0, 0, 0],
"1.1": [0, 0, 0],
"1.15": [0, 0, 0],
"1.2": [0, 0, 0],
"1.25": [0, 0, 0],
"1.3": [0, 0, 0]
}
},
"upper_body": {
"scale": {
"0.0": [1, 1, 1],
"0.05": [0, 0, 0]
}
}
}
},
"walk": {
"loop": true,
"animation_length": 0.8,
"bones": {
"crewmate": {
"position": {
"0.0": [0, 0, 0],
"0.05": [0, 1.32288, 0],
"0.1": [0, 1.73205, 0],
"0.15": [0, 1.93649, 0],
"0.2": [0, 2, 0],
"0.25": [0, 1.93649, 0],
"0.3": [0, 1.73205, 0],
"0.35": [0, 1.32288, 0],
"0.4": [0, 0, 0],
"0.45": [0, 1.32288, 0],
"0.5": [0, 1.73205, 0],
"0.55": [0, 1.93649, 0],
"0.6": [0, 2, 0],
"0.65": [0, 1.93649, 0],
"0.7": [0, 1.73205, 0],
"0.75": [0, 1.32288, 0],
"0.8": [0, 0, 0]
}
},
"backpack": {
"rotation": {
"0.0": [0, 0, 0],
"0.05": [-3.75, 0, 0],
"0.1": [-5, 0, 0],
"0.15": [-3.75, 0, 0],
"0.2": [0, 0, 0],
"0.25": [3.75, 0, 0],
"0.3": [5, 0, 0],
"0.35": [3.75, 0, 0],
"0.4": [0, 0, 0],
"0.45": [-3.75, 0, 0],
"0.5": [-5, 0, 0],
"0.55": [-3.75, 0, 0],
"0.6": [0, 0, 0],
"0.65": [3.75, 0, 0],
"0.7": [5, 0, 0],
"0.75": [3.75, 0, 0],
"0.8": [0, 0, 0]
},
"position": {
"0.0": [0, 0.5, 0],
"0.05": [0, 0.125, 0],
"0.1": [0, 0, 0],
"0.15": [0, 0.125, 0],
"0.2": [0, 0.5, 0],
"0.25": [0, 0.875, 0],
"0.3": [0, 1, 0],
"0.35": [0, 0.875, 0],
"0.4": [0, 0.5, 0],
"0.45": [0, 0.125, 0],
"0.5": [0, 0, 0],
"0.55": [0, 0.125, 0],
"0.6": [0, 0.5, 0],
"0.65": [0, 0.875, 0],
"0.7": [0, 1, 0],
"0.75": [0, 0.875, 0],
"0.8": [0, 0.5, 0]
}
},
"right_leg": {
"rotation": {
"0.0": [44.91211, 0, 0],
"0.05": [-7.19661, 0, 0],
"0.1": [-29.10563, 0, 0],
"0.15": [-38.31724, 0, 0],
"0.2": [-42.19025, 0, 0],
"0.25": [-43.81864, 0, 0],
"0.3": [-44.5033, 0, 0],
"0.35": [-44.79116, 0, 0],
"0.4": [-45, 0, 0],
"0.45": [7.15966, 0, 0],
"0.5": [29.0901, 0, 0],
"0.55": [38.31071, 0, 0],
"0.6": [42.1875, 0, 0],
"0.65": [43.81749, 0, 0],
"0.7": [44.50282, 0, 0],
"0.75": [44.79096, 0, 0],
"0.8": [44.91211, 0, 0]
},
"position": {
"0.0": [0, 0, 1.99609],
"0.05": [0, 0, -0.31985],
"0.1": [0, 0, -1.29358],
"0.15": [0, 0, -1.70299],
"0.2": [0, 0, -1.87512],
"0.25": [0, 0, -1.9475],
"0.3": [0, 0, -1.97792],
"0.35": [0, 0, -1.99072],
"0.4": [0, 0, -2],
"0.45": [0, 0, 0.31821],
"0.5": [0, 0, 1.29289],
"0.55": [0, 0, 1.7027],
"0.6": [0, 0, 1.875],
"0.65": [0, 0, 1.94744],
"0.7": [0, 0, 1.9779],
"0.75": [0, 0, 1.99071],
"0.8": [0, 0, 1.99609]
}
},
"left_leg": {
"rotation": {
"0.0": [-45, 0, 0],
"0.05": [7.15966, 0, 0],
"0.1": [29.0901, 0, 0],
"0.15": [38.31071, 0, 0],
"0.2": [42.1875, 0, 0],
"0.25": [43.81749, 0, 0],
"0.3": [44.50282, 0, 0],
"0.35": [44.79096, 0, 0],
"0.4": [44.91211, 0, 0],
"0.45": [-7.19661, 0, 0],
"0.5": [-29.10563, 0, 0],
"0.55": [-38.31724, 0, 0],
"0.6": [-42.19025, 0, 0],
"0.65": [-43.81864, 0, 0],
"0.7": [-44.5033, 0, 0],
"0.75": [-44.79116, 0, 0],
"0.8": [-45, 0, 0]
},
"position": {
"0.0": [0, 0, -2],
"0.05": [0, 0, 0.31821],
"0.1": [0, 0, 1.29289],
"0.15": [0, 0, 1.7027],
"0.2": [0, 0, 1.875],
"0.25": [0, 0, 1.94744],
"0.3": [0, 0, 1.9779],
"0.35": [0, 0, 1.99071],
"0.4": [0, 0, 1.99609],
"0.45": [0, 0, -0.31985],
"0.5": [0, 0, -1.29358],
"0.55": [0, 0, -1.70299],
"0.6": [0, 0, -1.87512],
"0.65": [0, 0, -1.9475],
"0.7": [0, 0, -1.97792],
"0.75": [0, 0, -1.99072],
"0.8": [0, 0, -2]
}
}
}
},
"sitting": {
"loop": "hold_on_last_frame",
"animation_length": 1.91667,
"bones": {
"crewmate": {
"rotation": {
"0.0": [0, 0, 0],
"0.0833": [0, 0, 0]
},
"position": {
"0.0": [0, 0, 0],
"0.0833": [0, -4, 0]
}
},
"right_leg": {
"rotation": {
"0.0": [0, 0, 0],
"0.0833": [-90, 15, 0]
},
"position": {
"0.0": [0, 0, 0],
"0.0833": [0, -1, 0]
}
},
"left_leg": {
"rotation": {
"0.0": [0, 0, 0],
"0.0833": [-90, -15, 0]
},
"position": {
"0.0": [0, 0, 0],
"0.0833": [0, -1, 0]
}
}
}
}
},
"geckolib_format_version": 2
}

View File

@@ -0,0 +1,298 @@
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.unknown",
"texture_width": 64,
"texture_height": 64,
"visible_bounds_width": 2,
"visible_bounds_height": 2.5,
"visible_bounds_offset": [0, 0.75, 0]
},
"bones": [
{
"name": "crewmate",
"pivot": [0, 0, -1]
},
{
"name": "h_lower_body",
"parent": "crewmate",
"pivot": [0, 5.5, -0.5],
"cubes": [
{
"origin": [-5, 4, -4],
"size": [10, 7, 7],
"uv": {
"north": {"uv": [0, 0], "uv_size": [10, 7]},
"east": {"uv": [9, 24], "uv_size": [7, 7]},
"south": {"uv": [0, 8], "uv_size": [10, 7]},
"west": {"uv": [17, 25], "uv_size": [7, 7]},
"up": {"uv": [11, 0], "uv_size": [10, 7]},
"down": {"uv": [11, 15], "uv_size": [10, -7]}
}
},
{
"origin": [5.3, 11.3, 3.3],
"size": [-10.6, -7.6, -7.6],
"uv": {
"north": {"uv": [43, 2], "uv_size": [0, 0]},
"east": {"uv": [43, 2], "uv_size": [0, 0]},
"south": {"uv": [43, 2], "uv_size": [0, 0]},
"west": {"uv": [43, 2], "uv_size": [0, 0]},
"up": {"uv": [43, 2], "uv_size": [0, 0]},
"down": {"uv": [49, 2], "uv_size": [0, 0]}
}
},
{
"origin": [-3, 11, -0.5],
"size": [6, 5, 0],
"uv": {
"north": {"uv": [9, 32], "uv_size": [6, 5]},
"south": {"uv": [15, 32], "uv_size": [-6, 5]}
}
}
]
},
{
"name": "upper_body",
"parent": "h_lower_body",
"pivot": [0, 13.9, -0.5],
"cubes": [
{
"origin": [-5, 11, -4],
"size": [10, 7, 7],
"uv": {
"north": {"uv": [0, 16], "uv_size": [10, 7]},
"east": {"uv": [25, 25], "uv_size": [7, 7]},
"south": {"uv": [11, 16], "uv_size": [10, 7]},
"west": {"uv": [31, 16], "uv_size": [7, 7]},
"up": {"uv": [22, 0], "uv_size": [10, 7]},
"down": {"uv": [22, 15], "uv_size": [10, -7]}
}
},
{
"origin": [5.3, 18.3, 3.3],
"size": [-10.6, -7.6, -7.6],
"uv": {
"north": {"uv": [43, 2], "uv_size": [0, 0]},
"east": {"uv": [43, 2], "uv_size": [0, 0]},
"south": {"uv": [43, 2], "uv_size": [0, 0]},
"west": {"uv": [43, 2], "uv_size": [0, 0]},
"up": {"uv": [49, 2], "uv_size": [0, 0]},
"down": {"uv": [43, 2], "uv_size": [0, 0]}
}
},
{
"origin": [-4, 11.5, -5],
"size": [8, 4, 1],
"uv": {
"north": {"uv": [0, 33], "uv_size": [8, 4]},
"east": {"uv": [31, 38], "uv_size": [1, 4]},
"west": {"uv": [33, 38], "uv_size": [1, 4]},
"up": {"uv": [33, 13], "uv_size": [8, 1]},
"down": {"uv": [37, 7], "uv_size": [8, -1]}
}
},
{
"origin": [-4.3, 11.2, -4.05],
"size": [8.6, 4.6, -0.001],
"uv": {
"north": {"uv": [46, 2], "uv_size": [0, 0]}
}
},
{
"origin": [4.3, 15.8, -3.7],
"size": [-8.6, -4.6, -1.6],
"uv": {
"north": {"uv": [46, 2], "uv_size": [0, 0]},
"east": {"uv": [46, 2], "uv_size": [0, 0]},
"south": {"uv": [46, 2], "uv_size": [0, 0]},
"west": {"uv": [46, 2], "uv_size": [0, 0]},
"up": {"uv": [46, 2], "uv_size": [0, 0]},
"down": {"uv": [46, 2], "uv_size": [0, 0]}
}
}
]
},
{
"name": "backpack",
"parent": "h_lower_body",
"pivot": [0, 9.5, 2.5],
"cubes": [
{
"origin": [-4, 5.5, 3],
"size": [8, 8, 3],
"uv": {
"north": {"uv": [22, 16], "uv_size": [8, 8]},
"east": {"uv": [33, 0], "uv_size": [3, 8]},
"south": {"uv": [0, 24], "uv_size": [8, 8]},
"west": {"uv": [16, 33], "uv_size": [3, 8]},
"up": {"uv": [33, 9], "uv_size": [8, 3]},
"down": {"uv": [20, 36], "uv_size": [8, -3]}
}
},
{
"origin": [4.3, 13.8, 6.3],
"size": [-8.6, -8.6, -3.6],
"uv": {
"north": {"uv": [43, 2], "uv_size": [0, 0]},
"east": {"uv": [43, 2], "uv_size": [0, 0]},
"south": {"uv": [43, 2], "uv_size": [0, 0]},
"west": {"uv": [43, 2], "uv_size": [0, 0]},
"up": {"uv": [43, 2], "uv_size": [0, 0]},
"down": {"uv": [43, 2], "uv_size": [0, 0]}
}
}
]
},
{
"name": "hands",
"parent": "h_lower_body",
"pivot": [0, 5.5, -0.5]
},
{
"name": "left_hand",
"parent": "hands",
"pivot": [2, 9.5, -1.5],
"cubes": [
{
"origin": [2, 5.5, -3.5],
"size": [2, 4, 5],
"uv": {
"north": {"uv": [15, 38], "uv_size": [-2, 4]},
"east": {"uv": [34, 33], "uv_size": [-5, 4]},
"south": {"uv": [30, 38], "uv_size": [-2, 4]},
"west": {"uv": [38, 24], "uv_size": [-5, 4]},
"up": {"uv": [27, 37], "uv_size": [-2, 5]},
"down": {"uv": [12, 43], "uv_size": [-2, -5]}
}
},
{
"origin": [4.3, 9.8, 1.8],
"size": [-2.6, -4.6, -5.6],
"uv": {
"north": {"uv": [43, 2], "uv_size": [0, 0]},
"east": {"uv": [43, 2], "uv_size": [0, 0]},
"south": {"uv": [43, 2], "uv_size": [0, 0]},
"west": {"uv": [43, 2], "uv_size": [0, 0]},
"up": {"uv": [43, 2], "uv_size": [0, 0]},
"down": {"uv": [43, 2], "uv_size": [0, 0]}
}
}
]
},
{
"name": "right_hand",
"parent": "hands",
"pivot": [2, 9.5, -1.5],
"cubes": [
{
"origin": [-4, 5.5, -3.5],
"size": [2, 4, 5],
"uv": {
"north": {"uv": [13, 38], "uv_size": [2, 4]},
"east": {"uv": [33, 24], "uv_size": [5, 4]},
"south": {"uv": [28, 38], "uv_size": [2, 4]},
"west": {"uv": [29, 33], "uv_size": [5, 4]},
"up": {"uv": [25, 37], "uv_size": [2, 5]},
"down": {"uv": [10, 43], "uv_size": [2, -5]}
}
},
{
"origin": [2.3, 9.8, 1.8],
"size": [-2.6, -4.6, -5.6],
"uv": {
"north": {"uv": [43, 2], "uv_size": [0, 0]},
"east": {"uv": [43, 2], "uv_size": [0, 0]},
"south": {"uv": [43, 2], "uv_size": [0, 0]},
"west": {"uv": [43, 2], "uv_size": [0, 0]},
"up": {"uv": [43, 2], "uv_size": [0, 0]},
"down": {"uv": [43, 2], "uv_size": [0, 0]}
}
}
]
},
{
"name": "right_leg",
"parent": "crewmate",
"pivot": [-3, 4.5, -1],
"cubes": [
{
"origin": [-5, 0, -3],
"size": [4, 5, 4],
"inflate": -0.025,
"uv": {
"north": {"uv": [35, 29], "uv_size": [4, 5]},
"east": {"uv": [35, 35], "uv_size": [4, 5]},
"south": {"uv": [37, 0], "uv_size": [4, 5]},
"west": {"uv": [20, 37], "uv_size": [4, 5]},
"up": {"uv": [0, 38], "uv_size": [4, 4]},
"down": {"uv": [5, 42], "uv_size": [4, -4]}
}
},
{
"origin": [-0.7, 5.3, 1.3],
"size": [-4.6, -5.6, -4.6],
"uv": {
"north": {"uv": [43, 2], "uv_size": [0, 0]},
"east": {"uv": [43, 2], "uv_size": [0, 0]},
"south": {"uv": [43, 2], "uv_size": [0, 0]},
"west": {"uv": [43, 2], "uv_size": [0, 0]},
"up": {"uv": [43, 2], "uv_size": [0, 0]},
"down": {"uv": [49, 2], "uv_size": [0, 0]}
}
}
]
},
{
"name": "left_leg",
"parent": "crewmate",
"pivot": [3, 4.5, -1],
"cubes": [
{
"origin": [1, 0, -3],
"size": [4, 5, 4],
"inflate": -0.025,
"uv": {
"north": {"uv": [39, 29], "uv_size": [-4, 5]},
"east": {"uv": [24, 37], "uv_size": [-4, 5]},
"south": {"uv": [41, 0], "uv_size": [-4, 5]},
"west": {"uv": [39, 35], "uv_size": [-4, 5]},
"up": {"uv": [4, 38], "uv_size": [-4, 4]},
"down": {"uv": [9, 42], "uv_size": [-4, -4]}
}
},
{
"origin": [5.3, 5.3, 1.3],
"size": [-4.6, -5.6, -4.6],
"uv": {
"north": {"uv": [43, 2], "uv_size": [0, 0]},
"east": {"uv": [43, 2], "uv_size": [0, 0]},
"south": {"uv": [43, 2], "uv_size": [0, 0]},
"west": {"uv": [43, 2], "uv_size": [0, 0]},
"up": {"uv": [43, 2], "uv_size": [0, 0]},
"down": {"uv": [49, 2], "uv_size": [0, 0]}
}
}
]
},
{
"name": "hitbox",
"pivot": [0, 13, -3],
"cubes": [
{
"origin": [-5.5, 0, -5.5],
"size": [11, 18, 11],
"uv": {}
}
]
},
{
"name": "tag_nametag",
"pivot": [0, 23, -1]
}
]
}
]
}

View File

@@ -0,0 +1,25 @@
{
"itemGroup.Amodgus": "Amodgus",
"item.amodgus.knife": "§eImpostor Knife",
"item.amodgus.flask": "§aFlask",
"item.amodgus.egghat": "Egg Hat",
"item.amodgus.amongus_spawn_egg": "Amongus Spawn Egg",
"item.amodgus.impostor_spawn_egg": "Impostor Spawn Egg",
"item.amodgus.red_toy": "Red Toy",
"item.amodgus.black_toy": "Black Toy",
"item.amodgus.white_toy": "White Toy",
"item.amodgus.green_toy": "Green Toy",
"item.amodgus.lime_toy": "Lime Toy",
"item.amodgus.yellow_toy": "Yellow Toy",
"item.amodgus.orange_toy": "Orange Toy",
"item.amodgus.pink_toy": "Pink Toy",
"item.amodgus.magenta_toy": "Magenta Toy",
"item.amodgus.purple_toy": "Purple Toy",
"item.amodgus.blue_toy": "Blue Toy",
"item.amodgus.cyan_toy": "Cyan Toy",
"item.amodgus.brown_toy": "Brown Toy",
"entity.amodgus.amongus": "Amongus",
"entity.amodgus.impostor": "Amongus",
"item.amodgus.music_disc_amongus_drip": "§bMusic Disc",
"item.amodgus.music_disc_amongus_drip.desc": "Leonz - Amongus Drip"
}

View File

@@ -0,0 +1,27 @@
{
"itemGroup.Amodgus": "Amodgus",
"item.amodgus.knife": "§eCuchillo de Impostor",
"item.amodgus.flask": "§aFrasco",
"item.amodgus.egghat": "Sombrero de Huevo",
"item.amodgus.amongus_spawn_egg": "Generar Amongus",
"item.amodgus.impostor_spawn_egg": "Generar Impostor",
"item.amodgus.red_toy": "Juguete Rojo",
"item.amodgus.black_toy": "Juguete Negro",
"item.amodgus.white_toy": "Juguete Blanco",
"item.amodgus.green_toy": "Juguete Verde",
"item.amodgus.lime_toy": "Juguete Lima",
"item.amodgus.yellow_toy": "Juguete Amarillo",
"item.amodgus.orange_toy": "Juguete Naranja",
"item.amodgus.pink_toy": "Juguete Rosa",
"item.amodgus.magenta_toy": "Juguete Magenta",
"item.amodgus.purple_toy": "Juguete Morado",
"item.amodgus.blue_toy": "Juguete Azul",
"item.amodgus.cyan_toy": "Juguete Cyan",
"item.amodgus.brown_toy": "Juguete Marrón",
"entity.amodgus.amongus": "Amongus",
"entity.amodgus.impostor": "Amongus",
"item.amodgus.music_disc_amongus_drip": "§bDisco de música",
"item.amodgus.music_disc_amongus_drip.desc": "Leonz - Amongus Drip",
"advancements.amodgus.title": "§dUn tipo sospechoso...",
"advancements.amodgus.description": "§eDomestica un Amongus"
}

View File

@@ -0,0 +1,3 @@
{
"parent": "minecraft:item/template_spawn_egg"
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/black_toy"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/blue_toy"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/brown_toy"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/cyan_toy"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/egghat"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/flask"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/green_toy"
}
}

View File

@@ -0,0 +1,3 @@
{
"parent": "minecraft:item/template_spawn_egg"
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "amodgus:items/knife"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/lime_toy"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/magenta_toy"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/music_disc_amongus_drip"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/orange_toy"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/pink_toy"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/purple_toy"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/red_toy"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/white_toy"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "amodgus:items/yellow_toy"
}
}

View File

@@ -0,0 +1,18 @@
{
"amongus_drip": {
"sounds": [
{
"name": "amodgus:amongus_drip",
"stream": true
}
]
},
"amongus_death": {
"sounds": [
{
"name": "amodgus:amongus_death",
"stream": true
}
]
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 990 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 977 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 987 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1002 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1008 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1004 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 986 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1006 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 955 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 980 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -0,0 +1,23 @@
{
"display": {
"icon": {
"item": "amodgus:red_toy"
},
"title": "§dA suspicious guy",
"description": "§eTame an Amongus",
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false
},
"criteria": {
"requirement": {
"trigger": "minecraft:tame_animal",
"conditions": {
"entity": {
"type": "amodgus:amongus"
}
}
}
}
}

View File

@@ -0,0 +1,299 @@
{
"type": "minecraft:chest",
"pools": [
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:lead",
"weight": 20
},
{
"type": "minecraft:item",
"name": "minecraft:golden_apple",
"weight": 15
},
{
"type": "minecraft:item",
"name": "minecraft:music_disc_13",
"weight": 15
},
{
"type": "minecraft:item",
"name": "amodgus:music_disc_amongus_drip",
"weight": 3
},
{
"type": "minecraft:item",
"name": "minecraft:name_tag",
"weight": 20
},
{
"type": "minecraft:item",
"name": "minecraft:chainmail_chestplate",
"weight": 10
},
{
"type": "minecraft:item",
"name": "minecraft:diamond_hoe",
"weight": 15
},
{
"type": "minecraft:item",
"name": "minecraft:diamond_chestplate",
"weight": 5
},
{
"type": "minecraft:item",
"functions": [
{
"function": "minecraft:enchant_randomly"
}
],
"name": "minecraft:book",
"weight": 10
}
],
"rolls": {
"type": "minecraft:uniform",
"max": 3.0,
"min": 1.0
}
},
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 4.0,
"min": 1.0
},
"function": "minecraft:set_count"
}
],
"name": "minecraft:iron_ingot",
"weight": 10
},
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 4.0,
"min": 1.0
},
"function": "minecraft:set_count"
}
],
"name": "minecraft:gold_ingot",
"weight": 5
},
{
"type": "minecraft:item",
"name": "minecraft:bread",
"weight": 20
},
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 4.0,
"min": 1.0
},
"function": "minecraft:set_count"
}
],
"name": "minecraft:wheat",
"weight": 20
},
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 3.0,
"min": 1.0
},
"function": "minecraft:set_count"
}
],
"name": "amodgus:flask",
"weight": 25
},
{
"type": "minecraft:item",
"name": "minecraft:bucket",
"weight": 10
},
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 4.0,
"min": 1.0
},
"function": "minecraft:set_count"
}
],
"name": "minecraft:redstone",
"weight": 15
},
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 4.0,
"min": 1.0
},
"function": "minecraft:set_count"
}
],
"name": "minecraft:coal",
"weight": 15
},
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 4.0,
"min": 2.0
},
"function": "minecraft:set_count"
}
],
"name": "minecraft:melon_seeds",
"weight": 10
},
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 4.0,
"min": 2.0
},
"function": "minecraft:set_count"
}
],
"name": "minecraft:pumpkin_seeds",
"weight": 10
},
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 4.0,
"min": 2.0
},
"function": "minecraft:set_count"
}
],
"name": "minecraft:beetroot_seeds",
"weight": 10
}
],
"rolls": {
"type": "minecraft:uniform",
"max": 4.0,
"min": 1.0
}
},
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 8.0,
"min": 1.0
},
"function": "minecraft:set_count"
}
],
"name": "minecraft:bone",
"weight": 10
},
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 8.0,
"min": 1.0
},
"function": "minecraft:set_count"
}
],
"name": "minecraft:gunpowder",
"weight": 10
},
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 8.0,
"min": 1.0
},
"function": "minecraft:set_count"
}
],
"name": "minecraft:rotten_flesh",
"weight": 10
},
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 8.0,
"min": 1.0
},
"function": "minecraft:set_count"
}
],
"name": "minecraft:string",
"weight": 10
}
],
"rolls": 3.0
}
]
}

View File

@@ -0,0 +1,38 @@
{
"type": "minecraft:entity",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "amodgus:knife",
"weight": 10,
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
},
{
"type": "minecraft:item",
"name": "minecraft:air",
"weight": 90,
"functions": [
{
"function": "set_count",
"count": {
"min": 0,
"max": 0
}
}
]
}
]
}
]
}

View File

@@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###",
"#OO",
"# #"
],
"key": {
"#": {
"item": "minecraft:black_concrete"
},
"O": {
"item": "minecraft:light_blue_stained_glass_pane"
}
},
"result": {
"item": "amodgus:black_toy"
}
}

Some files were not shown because too many files have changed in this diff Show More