Add initial implementation of the Armory Armor mod with custom military armor sets, rendering logic, and Gradle build scripts.
45
.gitignore
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
# Gradle
|
||||
.gradle/
|
||||
build/
|
||||
!gradle/wrapper/gradle-wrapper.jar
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
# IDE - IntelliJ IDEA
|
||||
.idea/
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
out/
|
||||
!**/src/main/**/out/
|
||||
!**/src/test/**/out/
|
||||
|
||||
# IDE - Eclipse
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
bin/
|
||||
!**/src/main/**/bin/
|
||||
!**/src/test/**/bin/
|
||||
|
||||
# IDE - VS Code
|
||||
.vscode/
|
||||
|
||||
# OS specific
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
|
||||
# Runtime
|
||||
run/
|
||||
run-server/
|
||||
run-client/
|
||||
|
||||
# Local configuration
|
||||
local.properties
|
||||
35
README.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Armory Armor
|
||||
|
||||
Мод для Minecraft с военной броней.
|
||||
|
||||
## Добавленные сеты брони
|
||||
|
||||
- **SEAL** — экипировка спецназа
|
||||
- **USMC** — броня морской пехоты
|
||||
- **Chicom** — китайская броня
|
||||
- **Al Quaida** — террористический сет
|
||||
- **Chechen** — чеченская броня
|
||||
- **Islamic** — исламская броня
|
||||
|
||||
## Сборка
|
||||
|
||||
```bash
|
||||
./gradlew build
|
||||
```
|
||||
|
||||
Готовый мод будет в `build/libs/`.
|
||||
|
||||
## Рендер
|
||||
Реализован собственный рендер для брони, которая наслаивается на скин.
|
||||
|
||||
`top.azimkin.armoryarmor.procedures.RenderEventProcedure#computeArmorItems` - добавление новых сетов
|
||||
|
||||
## TODO
|
||||
|
||||
- [ ] Почистить мусорные файлы
|
||||
- [ ] Поудалять говно-код из mcreator'а
|
||||
- [ ] Система паков
|
||||
- [ ] Более чистое создание новых сетов
|
||||
- [ ] Удобные классы конфигурации
|
||||
|
||||
Думаю шанс на реализацию этих дел крайне мал :)
|
||||
40
armory_armor.gradle
Normal file
@@ -0,0 +1,40 @@
|
||||
repositories {
|
||||
maven {
|
||||
url = "https://cursemaven.com"
|
||||
}
|
||||
maven {
|
||||
url = 'https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// проверка работы на женских скинах
|
||||
implementation fg.deobf("curse.maven:in-game-account-switcher-232676:5457030")
|
||||
// вроде были какие-то баги
|
||||
implementation fg.deobf("curse.maven:immediatelyfast-686911:6312293")
|
||||
// рендер ишуес
|
||||
implementation fg.deobf("curse.maven:embeddium-908741:5681725")
|
||||
implementation fg.deobf("curse.maven:oculus-581495:6020952")
|
||||
|
||||
// 3д-броня
|
||||
implementation fg.deobf('software.bernie.geckolib:geckolib-forge-1.20.1:4.4.9')
|
||||
}
|
||||
|
||||
minecraft {
|
||||
runs {
|
||||
client {
|
||||
property 'mixin.env.remapRefMap', 'true'
|
||||
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
||||
}
|
||||
server {
|
||||
property 'mixin.env.remapRefMap', 'true'
|
||||
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
||||
}
|
||||
data {
|
||||
property 'mixin.env.remapRefMap', 'true'
|
||||
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
64
build.gradle
Normal file
@@ -0,0 +1,64 @@
|
||||
plugins {
|
||||
id 'eclipse'
|
||||
id 'net.minecraftforge.gradle' version '[6.0.16,6.2)'
|
||||
id 'org.spongepowered.mixin' version '0.7.+'
|
||||
}
|
||||
|
||||
version = '1.2.0'
|
||||
group = 'dev.azimkin.armoryarmor'
|
||||
archivesBaseName = 'ArmoryArmor'
|
||||
def mod_id = "armory_armor"
|
||||
|
||||
java.toolchain.languageVersion = JavaLanguageVersion.of(17)
|
||||
|
||||
minecraft {
|
||||
mappings channel: 'official', version: '1.20.1'
|
||||
|
||||
accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
|
||||
|
||||
copyIdeResources = true
|
||||
|
||||
runs {
|
||||
client {
|
||||
def mcreatorJvmOptions = System.getenv('MCREATOR_JVM_OPTIONS')
|
||||
if (mcreatorJvmOptions) {
|
||||
jvmArgs += mcreatorJvmOptions.split("\\s+").findAll { it.trim() }.toList()
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
}
|
||||
|
||||
configureEach {
|
||||
workingDirectory project.file('run')
|
||||
|
||||
property 'forge.logging.markers', 'REGISTRIES'
|
||||
property 'forge.logging.console.level', 'debug'
|
||||
|
||||
mods {
|
||||
examplemod {
|
||||
source sourceSets.main
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
annotationProcessor 'org.spongepowered:mixin:0.8.5:processor'
|
||||
|
||||
minecraft 'net.minecraftforge:forge:1.20.1-47.3.0'
|
||||
}
|
||||
|
||||
mixin {
|
||||
add sourceSets.main, "${mod_id}.refmap.json"
|
||||
|
||||
config "${mod_id}.mixins.json"
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile).configureEach {
|
||||
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
|
||||
}
|
||||
|
||||
apply from: 'armory_armor.gradle'
|
||||
|
||||
2
gradle.properties
Normal file
@@ -0,0 +1,2 @@
|
||||
org.gradle.jvmargs=-Xmx3G
|
||||
org.gradle.daemon=false
|
||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
7
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
244
gradlew
vendored
Normal file
@@ -0,0 +1,244 @@
|
||||
#!/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/HEAD/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
|
||||
|
||||
# This is normally unused
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
||||
|
||||
# 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*)
|
||||
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC3045
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC3045
|
||||
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" "$@"
|
||||
92
gradlew.bat
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
@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=.
|
||||
@rem This is normally unused
|
||||
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
|
||||
13
settings.gradle
Normal file
@@ -0,0 +1,13 @@
|
||||
pluginManagement {
|
||||
repositories {
|
||||
gradlePluginPortal()
|
||||
maven {
|
||||
name = 'MinecraftForge'
|
||||
url = 'https://maven.minecraftforge.net/'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.7.0'
|
||||
}
|
||||
82
src/main/java/top/azimkin/armoryarmor/ArmoryArmorMod.java
Normal file
@@ -0,0 +1,82 @@
|
||||
package top.azimkin.armoryarmor;
|
||||
|
||||
import top.azimkin.armoryarmor.init.ArmoryArmorModTabs;
|
||||
import top.azimkin.armoryarmor.init.ArmoryArmorModItems;
|
||||
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
|
||||
import net.minecraftforge.network.simple.SimpleChannel;
|
||||
import net.minecraftforge.network.NetworkRegistry;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
import net.minecraftforge.fml.util.thread.SidedThreadGroups;
|
||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.eventbus.api.IEventBus;
|
||||
import net.minecraftforge.event.TickEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.List;
|
||||
import java.util.Collection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.AbstractMap;
|
||||
|
||||
@Mod("armory_armor")
|
||||
public class ArmoryArmorMod {
|
||||
public static final Logger LOGGER = LogManager.getLogger(ArmoryArmorMod.class);
|
||||
public static final String MODID = "armory_armor";
|
||||
|
||||
public ArmoryArmorMod() {
|
||||
// Start of user code block mod constructor
|
||||
// End of user code block mod constructor
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
|
||||
|
||||
ArmoryArmorModItems.REGISTRY.register(bus);
|
||||
|
||||
ArmoryArmorModTabs.REGISTRY.register(bus);
|
||||
|
||||
// Start of user code block mod init
|
||||
// End of user code block mod init
|
||||
}
|
||||
|
||||
// Start of user code block mod methods
|
||||
// End of user code block mod methods
|
||||
private static final String PROTOCOL_VERSION = "1";
|
||||
public static final SimpleChannel PACKET_HANDLER = NetworkRegistry.newSimpleChannel(new ResourceLocation(MODID, MODID), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals);
|
||||
private static int messageID = 0;
|
||||
|
||||
public static <T> void addNetworkMessage(Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, BiConsumer<T, Supplier<NetworkEvent.Context>> messageConsumer) {
|
||||
PACKET_HANDLER.registerMessage(messageID, messageType, encoder, decoder, messageConsumer);
|
||||
messageID++;
|
||||
}
|
||||
|
||||
private static final Collection<AbstractMap.SimpleEntry<Runnable, Integer>> workQueue = new ConcurrentLinkedQueue<>();
|
||||
|
||||
public static void queueServerWork(int tick, Runnable action) {
|
||||
if (Thread.currentThread().getThreadGroup() == SidedThreadGroups.SERVER)
|
||||
workQueue.add(new AbstractMap.SimpleEntry<>(action, tick));
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void tick(TickEvent.ServerTickEvent event) {
|
||||
if (event.phase == TickEvent.Phase.END) {
|
||||
List<AbstractMap.SimpleEntry<Runnable, Integer>> actions = new ArrayList<>();
|
||||
workQueue.forEach(work -> {
|
||||
work.setValue(work.getValue() - 1);
|
||||
if (work.getValue() == 0)
|
||||
actions.add(work);
|
||||
});
|
||||
actions.forEach(e -> e.getKey().run());
|
||||
workQueue.removeAll(actions);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package top.azimkin.armoryarmor.armor;
|
||||
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.item.ArmorMaterial;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ModernArmorMaterial implements ArmorMaterial {
|
||||
private final String name;
|
||||
|
||||
public ModernArmorMaterial(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDurabilityForType(ArmorItem.@NotNull Type type) {
|
||||
return new int[]{13, 15, 16, 11}[type.getSlot().getIndex()] * 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefenseForType(ArmorItem.@NotNull Type type) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull SoundEvent getEquipSound() {
|
||||
return SoundEvents.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Ingredient getRepairIngredient() {
|
||||
return Ingredient.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package top.azimkin.armoryarmor.client;
|
||||
|
||||
import com.mojang.blaze3d.platform.NativeImage;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class ArmorTextureManager {
|
||||
private final Map<String, PreparableTexture> textures = new ConcurrentHashMap<>();
|
||||
|
||||
public ResourceLocation getTexture(ResourceLocation playerSkin, ArmorData armorSkin) {
|
||||
//textures.clear();
|
||||
PreparableTexture data = textures.get(getKey(playerSkin, armorSkin.resourceLocation()));
|
||||
return data == null ? prepareTextureInMap(playerSkin, armorSkin) : data.rl();
|
||||
}
|
||||
|
||||
public ResourceLocation prepareTextureInMap(ResourceLocation playerSkin, ArmorData armorSkin) {
|
||||
try (NativeImage img = TextureUtil.fromResourceLocation(playerSkin);
|
||||
NativeImage img2 = TextureUtil.fromResourceLocation(armorSkin.resourceLocation());) {
|
||||
if (img == null || img2 == null) return playerSkin;
|
||||
BufferedImage first = TextureUtil.toBufferedImage(img),
|
||||
second = TextureUtil.toBufferedImage(img2);
|
||||
TextureUtil.clearLayerPart(first, TextureUtil.SkinLayer.LEFT_FEET);
|
||||
TextureUtil.clearLayerPart(first, TextureUtil.SkinLayer.RIGHT_FEET);
|
||||
TextureUtil.clearLayerPart(first, TextureUtil.SkinLayer.BODY);
|
||||
TextureUtil.clearLayerPart(first, TextureUtil.SkinLayer.LEFT_HAND);
|
||||
TextureUtil.clearLayerPart(first, TextureUtil.SkinLayer.RIGHT_HAND);
|
||||
if (armorSkin.hideHat)
|
||||
TextureUtil.clearLayerPart(first, TextureUtil.SkinLayer.HAT);
|
||||
ResourceLocation rl = TextureUtil.toResourceLocation(TextureUtil.combine(first, second));
|
||||
textures.put(getKey(playerSkin, armorSkin.resourceLocation()), new PreparableTexture(rl, false));
|
||||
return rl;
|
||||
}
|
||||
}
|
||||
|
||||
private String getKey(ResourceLocation playerSkin, ResourceLocation armorSkin) {
|
||||
return playerSkin.toString() + "|" + armorSkin.toString();
|
||||
}
|
||||
|
||||
public record PreparableTexture(ResourceLocation rl, boolean isCompleted) {}
|
||||
public record ArmorData(ResourceLocation resourceLocation, boolean hideHat) {}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package top.azimkin.armoryarmor.client;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
public class InfoHolder {
|
||||
public static ResourceLocation TOP_TEXTURE = null;
|
||||
}
|
||||
165
src/main/java/top/azimkin/armoryarmor/client/TextureUtil.java
Normal file
@@ -0,0 +1,165 @@
|
||||
package top.azimkin.armoryarmor.client;
|
||||
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import com.mojang.blaze3d.platform.NativeImage;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.texture.AbstractTexture;
|
||||
import net.minecraft.client.renderer.texture.DynamicTexture;
|
||||
import net.minecraft.client.renderer.texture.HttpTexture;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.packs.resources.Resource;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
import org.lwjgl.system.MemoryUtil;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Field;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Arrays;
|
||||
import java.util.Optional;
|
||||
|
||||
public class TextureUtil {
|
||||
public static BufferedImage toBufferedImage(NativeImage image) {
|
||||
try {
|
||||
return ImageIO.read(new ByteArrayInputStream(image.asByteArray()));
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static NativeImage fromResourceLocation(ResourceLocation location) {
|
||||
return getNativeImageFromTexture(location);
|
||||
}
|
||||
|
||||
public static NativeImage getNativeImageFromTexture(ResourceLocation location) {
|
||||
Optional<Resource> r = Minecraft.getInstance().getResourceManager().getResource(location);
|
||||
if (r.isEmpty()) {
|
||||
try {
|
||||
return getNativeImageFromSkin(location);
|
||||
} catch (Throwable t) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
try (InputStream is = r.get().open()) {
|
||||
return NativeImage.read(is);
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static File getFileFromHttpTexture(HttpTexture texture) {
|
||||
Class<HttpTexture> clazz = HttpTexture.class;
|
||||
Field[] flds = clazz.getDeclaredFields();
|
||||
Field field = Arrays.stream(flds)
|
||||
.filter(f -> f.getType() == File.class)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if (field == null) return null;
|
||||
try {
|
||||
field.setAccessible(true);
|
||||
return (File) field.get(texture);
|
||||
} catch (Throwable e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static NativeImage getNativeImageFromSkin(ResourceLocation location) {
|
||||
AbstractTexture texture = Minecraft.getInstance().getTextureManager().getTexture(location);
|
||||
if (texture instanceof HttpTexture httpTexture) {
|
||||
File f = getFileFromHttpTexture(httpTexture);
|
||||
if (f == null) return null;
|
||||
try {
|
||||
return NativeImage.read(Files.newInputStream(f.toPath()));
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
/*int texId = texture.getId();
|
||||
GlStateManager._bindTexture(texId);
|
||||
|
||||
int width = 64; // standard skin width
|
||||
int height = 64; // standard skin height
|
||||
|
||||
ByteBuffer buffer = MemoryUtil.memAlloc(width * height * 4);
|
||||
GL11.glGetTexImage(GL11.GL_TEXTURE_2D, 0, GL12.GL_BGRA, GL11.GL_UNSIGNED_BYTE, buffer);
|
||||
|
||||
byte[] bytes = new byte[buffer.remaining()];
|
||||
buffer.get(bytes);
|
||||
MemoryUtil.memFree(buffer);
|
||||
|
||||
// Convert bytes to NativeImage if needed
|
||||
NativeImage image = new NativeImage(width, height, false);
|
||||
for (int y = 0; y < height; y++) {
|
||||
for (int x = 0; x < width; x++) {
|
||||
int i = (y * width + x) * 4;
|
||||
|
||||
int b = buffer.get(i) & 0xFF;
|
||||
int g = buffer.get(i+1) & 0xFF;
|
||||
int r = buffer.get(i+2) & 0xFF;
|
||||
int a = buffer.get(i+3) & 0xFF;
|
||||
|
||||
int argb = (a << 24) | (r << 16) | (g << 8) | b;
|
||||
image.setPixelRGBA(x, y, argb);
|
||||
}
|
||||
}
|
||||
MemoryUtil.memFree(buffer);
|
||||
return image;*/
|
||||
|
||||
}
|
||||
|
||||
public static BufferedImage combine(BufferedImage image1, BufferedImage image2) {
|
||||
Graphics2D g2d = image1.createGraphics();
|
||||
g2d.drawImage(image2, 0, 0, image1.getWidth(), image1.getHeight(), null);
|
||||
g2d.dispose();
|
||||
return image1;
|
||||
}
|
||||
|
||||
public static void clearLayerPart(BufferedImage image, SkinLayer layer) {
|
||||
//Graphics2D g2d = image.createGraphics();
|
||||
//g2d.setComposite(AlphaComposite.Clear);
|
||||
clearArea(image, layer.firstArea);
|
||||
clearArea(image, layer.secondArea);
|
||||
//g2d.dispose();
|
||||
}
|
||||
|
||||
private static void clearArea(BufferedImage image, Area area) {
|
||||
for (int x = area.x1; x < area.x2; x++) {
|
||||
for (int y = area.y1; y < area.y2; y++) {
|
||||
image.setRGB(x, y, 0);
|
||||
}
|
||||
}
|
||||
//g2d.fillRect(area.x1, area.y1, area.x1-area.x2, area.y1-area.y2);
|
||||
}
|
||||
|
||||
public static ResourceLocation toResourceLocation(BufferedImage image) {
|
||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||
try {
|
||||
ImageIO.write(image, "png", stream);
|
||||
return Minecraft.getInstance().getTextureManager()
|
||||
.register("armory_armor_custom", new DynamicTexture(NativeImage.read(stream.toByteArray())));
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public enum SkinLayer {
|
||||
LEFT_HAND(new Area(52, 48, 59, 51), new Area(48, 52, 63, 63)),
|
||||
RIGHT_HAND(new Area(44, 32, 51, 35), new Area(40, 36, 55, 47)),
|
||||
BODY(new Area(20, 32, 35, 35), new Area(16, 36, 39, 47)),
|
||||
LEFT_FEET(new Area(4, 48, 11, 51), new Area(0, 52, 15, 63)),
|
||||
RIGHT_FEET(new Area(4, 32, 11, 35), new Area(0, 36, 15, 47)),
|
||||
HAT(new Area(40, 0, 55, 7), new Area(32, 8, 63, 15));
|
||||
public final Area firstArea, secondArea;
|
||||
SkinLayer(Area firstArea, Area secondArea) {
|
||||
this.firstArea = firstArea;
|
||||
this.secondArea = secondArea;
|
||||
}
|
||||
}
|
||||
|
||||
public record Area(int x1, int y1, int x2, int y2) {}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package top.azimkin.armoryarmor.client.renderer;
|
||||
|
||||
import top.azimkin.armoryarmor.item.model.ChicomModel;
|
||||
import top.azimkin.armoryarmor.item.ChicomItem;
|
||||
|
||||
import software.bernie.geckolib.renderer.GeoArmorRenderer;
|
||||
import software.bernie.geckolib.cache.object.GeoBone;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
|
||||
public class ChicomArmorRenderer extends GeoArmorRenderer<ChicomItem> {
|
||||
public ChicomArmorRenderer() {
|
||||
super(new ChicomModel());
|
||||
this.head = new GeoBone(null, "armorHead", false, (double) 0, false, false);
|
||||
this.body = new GeoBone(null, "armorBody", false, (double) 0, false, false);
|
||||
this.rightArm = new GeoBone(null, "armorRightArm", false, (double) 0, false, false);
|
||||
this.leftArm = new GeoBone(null, "armorLeftArm", false, (double) 0, false, false);
|
||||
this.rightLeg = new GeoBone(null, "armorRightLeg", false, (double) 0, false, false);
|
||||
this.leftLeg = new GeoBone(null, "armorLeftLeg", false, (double) 0, false, false);
|
||||
this.rightBoot = new GeoBone(null, "armorRightBoot", false, (double) 0, false, false);
|
||||
this.leftBoot = new GeoBone(null, "armorLeftBoot", false, (double) 0, false, false);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package top.azimkin.armoryarmor.client.renderer;
|
||||
|
||||
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
|
||||
|
||||
public class FixedPlayerRender extends PlayerRenderer {
|
||||
public FixedPlayerRender(EntityRendererProvider.Context context, boolean p_174558_) {
|
||||
super(context, p_174558_);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package top.azimkin.armoryarmor.client.renderer;
|
||||
|
||||
import top.azimkin.armoryarmor.item.model.SealarmorModel;
|
||||
import top.azimkin.armoryarmor.item.SealarmorItem;
|
||||
|
||||
import software.bernie.geckolib.renderer.GeoArmorRenderer;
|
||||
import software.bernie.geckolib.cache.object.GeoBone;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
|
||||
public class SealarmorArmorRenderer extends GeoArmorRenderer<SealarmorItem> {
|
||||
public SealarmorArmorRenderer() {
|
||||
super(new SealarmorModel());
|
||||
this.head = new GeoBone(null, "armorHead", false, (double) 0, false, false);
|
||||
this.body = new GeoBone(null, "armorBody", false, (double) 0, false, false);
|
||||
this.rightArm = new GeoBone(null, "armorRightArm", false, (double) 0, false, false);
|
||||
this.leftArm = new GeoBone(null, "armorLeftArm", false, (double) 0, false, false);
|
||||
this.rightLeg = new GeoBone(null, "armorRightLeg", false, (double) 0, false, false);
|
||||
this.leftLeg = new GeoBone(null, "armorLeftLeg", false, (double) 0, false, false);
|
||||
this.rightBoot = new GeoBone(null, "armorRightBoot", false, (double) 0, false, false);
|
||||
this.leftBoot = new GeoBone(null, "armorLeftBoot", false, (double) 0, false, false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package top.azimkin.armoryarmor.client.renderer;
|
||||
|
||||
import top.azimkin.armoryarmor.item.model.Sealarmorhelmet2Model;
|
||||
import top.azimkin.armoryarmor.item.Sealarmorhelmet2Item;
|
||||
|
||||
import software.bernie.geckolib.renderer.GeoArmorRenderer;
|
||||
import software.bernie.geckolib.cache.object.GeoBone;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
|
||||
public class Sealarmorhelmet2ArmorRenderer extends GeoArmorRenderer<Sealarmorhelmet2Item> {
|
||||
public Sealarmorhelmet2ArmorRenderer() {
|
||||
super(new Sealarmorhelmet2Model());
|
||||
this.head = new GeoBone(null, "armorHead", false, (double) 0, false, false);
|
||||
this.body = new GeoBone(null, "armorBody", false, (double) 0, false, false);
|
||||
this.rightArm = new GeoBone(null, "armorRightArm", false, (double) 0, false, false);
|
||||
this.leftArm = new GeoBone(null, "armorLeftArm", false, (double) 0, false, false);
|
||||
this.rightLeg = new GeoBone(null, "armorRightLeg", false, (double) 0, false, false);
|
||||
this.leftLeg = new GeoBone(null, "armorLeftLeg", false, (double) 0, false, false);
|
||||
this.rightBoot = new GeoBone(null, "armorRightBoot", false, (double) 0, false, false);
|
||||
this.leftBoot = new GeoBone(null, "armorLeftBoot", false, (double) 0, false, false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package top.azimkin.armoryarmor.client.renderer;
|
||||
|
||||
import top.azimkin.armoryarmor.item.model.SealarmorhelmetModel;
|
||||
import top.azimkin.armoryarmor.item.SealarmorhelmetItem;
|
||||
|
||||
import software.bernie.geckolib.renderer.GeoArmorRenderer;
|
||||
import software.bernie.geckolib.cache.object.GeoBone;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
|
||||
public class SealarmorhelmetArmorRenderer extends GeoArmorRenderer<SealarmorhelmetItem> {
|
||||
public SealarmorhelmetArmorRenderer() {
|
||||
super(new SealarmorhelmetModel());
|
||||
this.head = new GeoBone(null, "armorHead", false, (double) 0, false, false);
|
||||
this.body = new GeoBone(null, "armorBody", false, (double) 0, false, false);
|
||||
this.rightArm = new GeoBone(null, "armorRightArm", false, (double) 0, false, false);
|
||||
this.leftArm = new GeoBone(null, "armorLeftArm", false, (double) 0, false, false);
|
||||
this.rightLeg = new GeoBone(null, "armorRightLeg", false, (double) 0, false, false);
|
||||
this.leftLeg = new GeoBone(null, "armorLeftLeg", false, (double) 0, false, false);
|
||||
this.rightBoot = new GeoBone(null, "armorRightBoot", false, (double) 0, false, false);
|
||||
this.leftBoot = new GeoBone(null, "armorLeftBoot", false, (double) 0, false, false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package top.azimkin.armoryarmor.client.renderer;
|
||||
|
||||
import top.azimkin.armoryarmor.item.model.UsmcarmorModel;
|
||||
import top.azimkin.armoryarmor.item.UsmcarmorItem;
|
||||
|
||||
import software.bernie.geckolib.renderer.GeoArmorRenderer;
|
||||
import software.bernie.geckolib.cache.object.GeoBone;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
|
||||
public class UsmcarmorArmorRenderer extends GeoArmorRenderer<UsmcarmorItem> {
|
||||
public UsmcarmorArmorRenderer() {
|
||||
super(new UsmcarmorModel());
|
||||
this.head = new GeoBone(null, "armorHead", false, (double) 0, false, false);
|
||||
this.body = new GeoBone(null, "armorBody", false, (double) 0, false, false);
|
||||
this.rightArm = new GeoBone(null, "armorRightArm", false, (double) 0, false, false);
|
||||
this.leftArm = new GeoBone(null, "armorLeftArm", false, (double) 0, false, false);
|
||||
this.rightLeg = new GeoBone(null, "armorRightLeg", false, (double) 0, false, false);
|
||||
this.leftLeg = new GeoBone(null, "armorLeftLeg", false, (double) 0, false, false);
|
||||
this.rightBoot = new GeoBone(null, "armorRightBoot", false, (double) 0, false, false);
|
||||
this.leftBoot = new GeoBone(null, "armorLeftBoot", false, (double) 0, false, false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package top.azimkin.armoryarmor.client.renderer;
|
||||
|
||||
import top.azimkin.armoryarmor.item.model.UsmcarmorhelmetModel;
|
||||
import top.azimkin.armoryarmor.item.UsmcarmorhelmetItem;
|
||||
|
||||
import software.bernie.geckolib.renderer.GeoArmorRenderer;
|
||||
import software.bernie.geckolib.cache.object.GeoBone;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
|
||||
public class UsmcarmorhelmetArmorRenderer extends GeoArmorRenderer<UsmcarmorhelmetItem> {
|
||||
public UsmcarmorhelmetArmorRenderer() {
|
||||
super(new UsmcarmorhelmetModel());
|
||||
this.head = new GeoBone(null, "armorHead", false, (double) 0, false, false);
|
||||
this.body = new GeoBone(null, "armorBody", false, (double) 0, false, false);
|
||||
this.rightArm = new GeoBone(null, "armorRightArm", false, (double) 0, false, false);
|
||||
this.leftArm = new GeoBone(null, "armorLeftArm", false, (double) 0, false, false);
|
||||
this.rightLeg = new GeoBone(null, "armorRightLeg", false, (double) 0, false, false);
|
||||
this.leftLeg = new GeoBone(null, "armorLeftLeg", false, (double) 0, false, false);
|
||||
this.rightBoot = new GeoBone(null, "armorRightBoot", false, (double) 0, false, false);
|
||||
this.leftBoot = new GeoBone(null, "armorLeftBoot", false, (double) 0, false, false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package top.azimkin.armoryarmor.init;
|
||||
|
||||
import top.azimkin.armoryarmor.item.UsmcarmorhelmetItem;
|
||||
import top.azimkin.armoryarmor.item.UsmcarmorItem;
|
||||
import top.azimkin.armoryarmor.item.SealarmorhelmetItem;
|
||||
import top.azimkin.armoryarmor.item.Sealarmorhelmet2Item;
|
||||
import top.azimkin.armoryarmor.item.SealarmorItem;
|
||||
import top.azimkin.armoryarmor.item.ChicomItem;
|
||||
|
||||
import software.bernie.geckolib.animatable.GeoItem;
|
||||
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.event.TickEvent;
|
||||
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
|
||||
@Mod.EventBusSubscriber
|
||||
public class ArmorAnimationFactory {
|
||||
@SubscribeEvent
|
||||
public static void animatedArmors(TickEvent.PlayerTickEvent event) {
|
||||
String animation = "";
|
||||
if (event.phase == TickEvent.Phase.END) {
|
||||
if (event.player.getItemBySlot(EquipmentSlot.HEAD).getItem() != (ItemStack.EMPTY).getItem() && event.player.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof GeoItem) {
|
||||
if (!event.player.getItemBySlot(EquipmentSlot.HEAD).getOrCreateTag().getString("geckoAnim").equals("")) {
|
||||
animation = event.player.getItemBySlot(EquipmentSlot.HEAD).getOrCreateTag().getString("geckoAnim");
|
||||
event.player.getItemBySlot(EquipmentSlot.HEAD).getOrCreateTag().putString("geckoAnim", "");
|
||||
if (event.player.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof SealarmorItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof SealarmorhelmetItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof Sealarmorhelmet2Item animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof UsmcarmorItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof UsmcarmorhelmetItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof ChicomItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
}
|
||||
}
|
||||
if (event.player.getItemBySlot(EquipmentSlot.CHEST).getItem() != (ItemStack.EMPTY).getItem() && event.player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof GeoItem) {
|
||||
if (!event.player.getItemBySlot(EquipmentSlot.CHEST).getOrCreateTag().getString("geckoAnim").equals("")) {
|
||||
animation = event.player.getItemBySlot(EquipmentSlot.CHEST).getOrCreateTag().getString("geckoAnim");
|
||||
event.player.getItemBySlot(EquipmentSlot.CHEST).getOrCreateTag().putString("geckoAnim", "");
|
||||
if (event.player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof SealarmorItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof SealarmorhelmetItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof Sealarmorhelmet2Item animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof UsmcarmorItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof UsmcarmorhelmetItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof ChicomItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
}
|
||||
}
|
||||
if (event.player.getItemBySlot(EquipmentSlot.LEGS).getItem() != (ItemStack.EMPTY).getItem() && event.player.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof GeoItem) {
|
||||
if (!event.player.getItemBySlot(EquipmentSlot.LEGS).getOrCreateTag().getString("geckoAnim").equals("")) {
|
||||
animation = event.player.getItemBySlot(EquipmentSlot.LEGS).getOrCreateTag().getString("geckoAnim");
|
||||
event.player.getItemBySlot(EquipmentSlot.LEGS).getOrCreateTag().putString("geckoAnim", "");
|
||||
if (event.player.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof SealarmorItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof SealarmorhelmetItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof Sealarmorhelmet2Item animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof UsmcarmorItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof UsmcarmorhelmetItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof ChicomItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
}
|
||||
}
|
||||
if (event.player.getItemBySlot(EquipmentSlot.FEET).getItem() != (ItemStack.EMPTY).getItem() && event.player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof GeoItem) {
|
||||
if (!event.player.getItemBySlot(EquipmentSlot.FEET).getOrCreateTag().getString("geckoAnim").equals("")) {
|
||||
animation = event.player.getItemBySlot(EquipmentSlot.FEET).getOrCreateTag().getString("geckoAnim");
|
||||
event.player.getItemBySlot(EquipmentSlot.FEET).getOrCreateTag().putString("geckoAnim", "");
|
||||
if (event.player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof SealarmorItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof SealarmorhelmetItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof Sealarmorhelmet2Item animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof UsmcarmorItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof UsmcarmorhelmetItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
if (event.player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof ChicomItem animatable && event.player.level().isClientSide())
|
||||
animatable.animationprocedure = animation;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
|
||||
/*
|
||||
* MCreator note: This file will be REGENERATED on each build.
|
||||
*/
|
||||
package top.azimkin.armoryarmor.init;
|
||||
|
||||
import top.azimkin.armoryarmor.item.*;
|
||||
import top.azimkin.armoryarmor.ArmoryArmorMod;
|
||||
|
||||
import net.minecraftforge.registries.RegistryObject;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ArmoryArmorModItems {
|
||||
public static final DeferredRegister<Item> REGISTRY = DeferredRegister.create(ForgeRegistries.ITEMS, ArmoryArmorMod.MODID);
|
||||
public static final RegistryObject<SealarmorItem> SEALARMOR_CHESTPLATE = REGISTRY.register("sealarmor_chestplate", () -> new SealarmorItem(ArmorItem.Type.CHESTPLATE, new Item.Properties()));
|
||||
public static final RegistryObject<SealarmorhelmetItem> SEALARMORHELMET_HELMET = REGISTRY.register("sealarmorhelmet_helmet", () -> new SealarmorhelmetItem(ArmorItem.Type.HELMET, new Item.Properties()));
|
||||
public static final RegistryObject<Sealarmorhelmet2Item> SEALARMORHELMET_2_HELMET = REGISTRY.register("sealarmorhelmet_2_helmet", () -> new Sealarmorhelmet2Item(ArmorItem.Type.HELMET, new Item.Properties()));
|
||||
public static final RegistryObject<Item> USMC_LEGGINGS = REGISTRY.register("usmc_leggings", UsmcItem.Leggings::new);
|
||||
public static final RegistryObject<Item> ALQAIDA_LEGGINGS = REGISTRY.register("alqaida_leggings", AlqaidaItem.Leggings::new);
|
||||
public static final RegistryObject<Item> ISLAMIC_LEGGINGS = REGISTRY.register("islamic_leggings", IslamicItem.Leggings::new);
|
||||
public static final RegistryObject<Item> USMC_2_LEGGINGS = REGISTRY.register("usmc_2_leggings", Usmc2Item.Leggings::new);
|
||||
public static final RegistryObject<UsmcarmorItem> USMCARMOR_CHESTPLATE = REGISTRY.register("usmcarmor_chestplate", () -> new UsmcarmorItem(ArmorItem.Type.CHESTPLATE, new Item.Properties()));
|
||||
public static final RegistryObject<UsmcarmorhelmetItem> USMCARMORHELMET_HELMET = REGISTRY.register("usmcarmorhelmet_helmet", () -> new UsmcarmorhelmetItem(ArmorItem.Type.HELMET, new Item.Properties()));
|
||||
public static final RegistryObject<ChicomItem> CHICOM_CHESTPLATE = REGISTRY.register("chicom_chestplate", () -> new ChicomItem(ArmorItem.Type.CHESTPLATE, new Item.Properties()));
|
||||
public static final RegistryObject<Item> SEAL_LEGGINGS = REGISTRY.register("seal_leggings", SealItem.Leggings::new);
|
||||
|
||||
public static final RegistryObject<ModernArmorItem> CHECHEN_1 = REGISTRY.register("chechen_1", () -> new ModernArmorItem("chechen_1", ArmorItem.Type.LEGGINGS, new Item.Properties()));
|
||||
public static final RegistryObject<ModernArmorItem> CHECHEN_2 = REGISTRY.register("chechen_2", () -> new ModernArmorItem("chechen_2", ArmorItem.Type.LEGGINGS, new Item.Properties()));
|
||||
public static final RegistryObject<ModernArmorItem> AL_QUAIDA_3 = REGISTRY.register("al_quaida_3", () -> new ModernArmorItem("al_quaida_3", ArmorItem.Type.LEGGINGS, new Item.Properties()));
|
||||
public static final RegistryObject<ModernArmorItem> AL_QUAIDA_2 = REGISTRY.register("al_quaida_2", () -> new ModernArmorItem("al_quaida_2", ArmorItem.Type.LEGGINGS, new Item.Properties()));
|
||||
|
||||
public static final List<RegistryObject<? extends Item>> ITEMS = new ArrayList<>();
|
||||
|
||||
static {
|
||||
registerItems();
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unused", "unchecked"})
|
||||
private static void registerItems() {
|
||||
try {
|
||||
for (var f : ArmoryArmorModItems.class.getDeclaredFields()) {
|
||||
if (Modifier.isStatic(f.getModifiers()) && Modifier.isFinal(f.getModifiers()) && f.getType() == RegistryObject.class) {
|
||||
ITEMS.add(((RegistryObject<? extends Item>) f.get(null)));
|
||||
}
|
||||
}
|
||||
} catch (Throwable throwable) {
|
||||
ArmoryArmorMod.LOGGER.error("Error while trying to register items in a tab", throwable);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package top.azimkin.armoryarmor.init;
|
||||
|
||||
import top.azimkin.armoryarmor.ArmoryArmorMod;
|
||||
|
||||
import net.minecraftforge.registries.RegistryObject;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
|
||||
public class ArmoryArmorModTabs {
|
||||
public static final DeferredRegister<CreativeModeTab> REGISTRY = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, ArmoryArmorMod.MODID);
|
||||
public static final RegistryObject<CreativeModeTab> ARMORY_ARMOR = REGISTRY.register("armory_armor",
|
||||
() -> CreativeModeTab.builder().title(Component.translatable("item_group.armory_armor.armory_armor")).icon(() -> new ItemStack(ArmoryArmorModItems.SEALARMORHELMET_HELMET.get())).displayItems((parameters, tabData) -> {
|
||||
for (var item : ArmoryArmorModItems.ITEMS) {
|
||||
tabData.accept(item.get());
|
||||
}
|
||||
}).build());
|
||||
}
|
||||
69
src/main/java/top/azimkin/armoryarmor/item/AlqaidaItem.java
Normal file
@@ -0,0 +1,69 @@
|
||||
|
||||
package top.azimkin.armoryarmor.item;
|
||||
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ArmorMaterial;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
|
||||
public abstract class AlqaidaItem extends ArmorItem {
|
||||
public AlqaidaItem(ArmorItem.Type type, Item.Properties properties) {
|
||||
super(new ArmorMaterial() {
|
||||
@Override
|
||||
public int getDurabilityForType(ArmorItem.Type type) {
|
||||
return new int[]{13, 15, 16, 11}[type.getSlot().getIndex()] * 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefenseForType(ArmorItem.Type type) {
|
||||
return new int[]{0, 0, 0, 0}[type.getSlot().getIndex()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getEquipSound() {
|
||||
return SoundEvents.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ingredient getRepairIngredient() {
|
||||
return Ingredient.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "alqaida";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0f;
|
||||
}
|
||||
}, type, properties);
|
||||
}
|
||||
|
||||
public static class Leggings extends AlqaidaItem {
|
||||
public Leggings() {
|
||||
super(ArmorItem.Type.LEGGINGS, new Item.Properties());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) {
|
||||
return "armory_armor:textures/models/armor/voidarmor_layer_2.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
152
src/main/java/top/azimkin/armoryarmor/item/ChicomItem.java
Normal file
@@ -0,0 +1,152 @@
|
||||
|
||||
package top.azimkin.armoryarmor.item;
|
||||
|
||||
import top.azimkin.armoryarmor.client.renderer.ChicomArmorRenderer;
|
||||
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
import software.bernie.geckolib.renderer.GeoArmorRenderer;
|
||||
import software.bernie.geckolib.core.object.PlayState;
|
||||
import software.bernie.geckolib.core.animation.RawAnimation;
|
||||
import software.bernie.geckolib.core.animation.AnimationState;
|
||||
import software.bernie.geckolib.core.animation.AnimationController;
|
||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
||||
import software.bernie.geckolib.constant.DataTickets;
|
||||
import software.bernie.geckolib.animatable.GeoItem;
|
||||
|
||||
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
|
||||
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ArmorMaterial;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.entity.decoration.ArmorStand;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.client.model.HumanoidModel;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.List;
|
||||
|
||||
public class ChicomItem extends ArmorItem implements GeoItem {
|
||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||
public String animationprocedure = "empty";
|
||||
|
||||
public ChicomItem(ArmorItem.Type type, Item.Properties properties) {
|
||||
super(new ArmorMaterial() {
|
||||
@Override
|
||||
public int getDurabilityForType(ArmorItem.Type type) {
|
||||
return new int[]{13, 15, 16, 11}[type.getSlot().getIndex()] * 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefenseForType(ArmorItem.Type type) {
|
||||
return new int[]{0, 0, 0, 0}[type.getSlot().getIndex()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getEquipSound() {
|
||||
return SoundEvents.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ingredient getRepairIngredient() {
|
||||
return Ingredient.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "chicom";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0f;
|
||||
}
|
||||
}, type, properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
|
||||
consumer.accept(new IClientItemExtensions() {
|
||||
private GeoArmorRenderer<?> renderer;
|
||||
|
||||
@Override
|
||||
public HumanoidModel<?> getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel<?> original) {
|
||||
if (this.renderer == null)
|
||||
this.renderer = new ChicomArmorRenderer();
|
||||
this.renderer.prepForRender(livingEntity, itemStack, equipmentSlot, original);
|
||||
return this.renderer;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendHoverText(ItemStack itemstack, Level world, List<Component> list, TooltipFlag flag) {
|
||||
super.appendHoverText(itemstack, world, list, flag);
|
||||
}
|
||||
|
||||
private PlayState predicate(AnimationState event) {
|
||||
if (this.animationprocedure.equals("empty")) {
|
||||
event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.model.new"));
|
||||
Entity entity = (Entity) event.getData(DataTickets.ENTITY);
|
||||
if (entity instanceof ArmorStand) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.STOP;
|
||||
}
|
||||
|
||||
String prevAnim = "empty";
|
||||
|
||||
private PlayState procedurePredicate(AnimationState event) {
|
||||
if (!this.animationprocedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED || (!this.animationprocedure.equals(prevAnim) && !this.animationprocedure.equals("empty"))) {
|
||||
if (!this.animationprocedure.equals(prevAnim))
|
||||
event.getController().forceAnimationReset();
|
||||
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationprocedure));
|
||||
if (event.getController().getAnimationState() == AnimationController.State.STOPPED) {
|
||||
this.animationprocedure = "empty";
|
||||
event.getController().forceAnimationReset();
|
||||
}
|
||||
Entity entity = (Entity) event.getData(DataTickets.ENTITY);
|
||||
if (entity instanceof ArmorStand) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
} else if (animationprocedure.equals("empty")) {
|
||||
prevAnim = "empty";
|
||||
return PlayState.STOP;
|
||||
}
|
||||
prevAnim = this.animationprocedure;
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||
data.add(new AnimationController(this, "controller", 5, this::predicate));
|
||||
data.add(new AnimationController(this, "procedureController", 5, this::procedurePredicate));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||
return this.cache;
|
||||
}
|
||||
}
|
||||
69
src/main/java/top/azimkin/armoryarmor/item/IslamicItem.java
Normal file
@@ -0,0 +1,69 @@
|
||||
|
||||
package top.azimkin.armoryarmor.item;
|
||||
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ArmorMaterial;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
|
||||
public abstract class IslamicItem extends ArmorItem {
|
||||
public IslamicItem(ArmorItem.Type type, Item.Properties properties) {
|
||||
super(new ArmorMaterial() {
|
||||
@Override
|
||||
public int getDurabilityForType(ArmorItem.Type type) {
|
||||
return new int[]{13, 15, 16, 11}[type.getSlot().getIndex()] * 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefenseForType(ArmorItem.Type type) {
|
||||
return new int[]{0, 0, 0, 0}[type.getSlot().getIndex()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getEquipSound() {
|
||||
return SoundEvents.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ingredient getRepairIngredient() {
|
||||
return Ingredient.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "islamic";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0f;
|
||||
}
|
||||
}, type, properties);
|
||||
}
|
||||
|
||||
public static class Leggings extends IslamicItem {
|
||||
public Leggings() {
|
||||
super(ArmorItem.Type.LEGGINGS, new Item.Properties());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) {
|
||||
return "armory_armor:textures/models/armor/voidarmor_layer_2.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package top.azimkin.armoryarmor.item;
|
||||
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import top.azimkin.armoryarmor.armor.ModernArmorMaterial;
|
||||
|
||||
public class ModernArmorItem extends ArmorItem {
|
||||
public ModernArmorItem(String name, Type type, Properties properties) {
|
||||
super(new ModernArmorMaterial(name), type, properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) {
|
||||
return "armory_armor:textures/models/armor/voidarmor_layer_2.png";
|
||||
}
|
||||
}
|
||||
69
src/main/java/top/azimkin/armoryarmor/item/SealItem.java
Normal file
@@ -0,0 +1,69 @@
|
||||
|
||||
package top.azimkin.armoryarmor.item;
|
||||
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ArmorMaterial;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
|
||||
public abstract class SealItem extends ArmorItem {
|
||||
public SealItem(ArmorItem.Type type, Item.Properties properties) {
|
||||
super(new ArmorMaterial() {
|
||||
@Override
|
||||
public int getDurabilityForType(ArmorItem.Type type) {
|
||||
return new int[]{13, 15, 16, 11}[type.getSlot().getIndex()] * 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefenseForType(ArmorItem.Type type) {
|
||||
return new int[]{0, 0, 0, 0}[type.getSlot().getIndex()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getEquipSound() {
|
||||
return SoundEvents.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ingredient getRepairIngredient() {
|
||||
return Ingredient.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "seal";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0f;
|
||||
}
|
||||
}, type, properties);
|
||||
}
|
||||
|
||||
public static class Leggings extends SealItem {
|
||||
public Leggings() {
|
||||
super(ArmorItem.Type.LEGGINGS, new Item.Properties());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) {
|
||||
return "armory_armor:textures/models/armor/voidarmor_layer_2.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
152
src/main/java/top/azimkin/armoryarmor/item/SealarmorItem.java
Normal file
@@ -0,0 +1,152 @@
|
||||
|
||||
package top.azimkin.armoryarmor.item;
|
||||
|
||||
import top.azimkin.armoryarmor.client.renderer.SealarmorArmorRenderer;
|
||||
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
import software.bernie.geckolib.renderer.GeoArmorRenderer;
|
||||
import software.bernie.geckolib.core.object.PlayState;
|
||||
import software.bernie.geckolib.core.animation.RawAnimation;
|
||||
import software.bernie.geckolib.core.animation.AnimationState;
|
||||
import software.bernie.geckolib.core.animation.AnimationController;
|
||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
||||
import software.bernie.geckolib.constant.DataTickets;
|
||||
import software.bernie.geckolib.animatable.GeoItem;
|
||||
|
||||
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
|
||||
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ArmorMaterial;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.entity.decoration.ArmorStand;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.client.model.HumanoidModel;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.List;
|
||||
|
||||
public class SealarmorItem extends ArmorItem implements GeoItem {
|
||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||
public String animationprocedure = "empty";
|
||||
|
||||
public SealarmorItem(ArmorItem.Type type, Item.Properties properties) {
|
||||
super(new ArmorMaterial() {
|
||||
@Override
|
||||
public int getDurabilityForType(ArmorItem.Type type) {
|
||||
return new int[]{13, 15, 16, 11}[type.getSlot().getIndex()] * 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefenseForType(ArmorItem.Type type) {
|
||||
return new int[]{0, 0, 0, 0}[type.getSlot().getIndex()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getEquipSound() {
|
||||
return SoundEvents.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ingredient getRepairIngredient() {
|
||||
return Ingredient.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "sealarmor";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0f;
|
||||
}
|
||||
}, type, properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
|
||||
consumer.accept(new IClientItemExtensions() {
|
||||
private GeoArmorRenderer<?> renderer;
|
||||
|
||||
@Override
|
||||
public HumanoidModel<?> getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel<?> original) {
|
||||
if (this.renderer == null)
|
||||
this.renderer = new SealarmorArmorRenderer();
|
||||
this.renderer.prepForRender(livingEntity, itemStack, equipmentSlot, original);
|
||||
return this.renderer;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendHoverText(ItemStack itemstack, Level world, List<Component> list, TooltipFlag flag) {
|
||||
super.appendHoverText(itemstack, world, list, flag);
|
||||
}
|
||||
|
||||
private PlayState predicate(AnimationState event) {
|
||||
if (this.animationprocedure.equals("empty")) {
|
||||
event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.model.new"));
|
||||
Entity entity = (Entity) event.getData(DataTickets.ENTITY);
|
||||
if (entity instanceof ArmorStand) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.STOP;
|
||||
}
|
||||
|
||||
String prevAnim = "empty";
|
||||
|
||||
private PlayState procedurePredicate(AnimationState event) {
|
||||
if (!this.animationprocedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED || (!this.animationprocedure.equals(prevAnim) && !this.animationprocedure.equals("empty"))) {
|
||||
if (!this.animationprocedure.equals(prevAnim))
|
||||
event.getController().forceAnimationReset();
|
||||
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationprocedure));
|
||||
if (event.getController().getAnimationState() == AnimationController.State.STOPPED) {
|
||||
this.animationprocedure = "empty";
|
||||
event.getController().forceAnimationReset();
|
||||
}
|
||||
Entity entity = (Entity) event.getData(DataTickets.ENTITY);
|
||||
if (entity instanceof ArmorStand) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
} else if (animationprocedure.equals("empty")) {
|
||||
prevAnim = "empty";
|
||||
return PlayState.STOP;
|
||||
}
|
||||
prevAnim = this.animationprocedure;
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||
data.add(new AnimationController(this, "controller", 5, this::predicate));
|
||||
data.add(new AnimationController(this, "procedureController", 5, this::procedurePredicate));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||
return this.cache;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
|
||||
package top.azimkin.armoryarmor.item;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import top.azimkin.armoryarmor.client.renderer.Sealarmorhelmet2ArmorRenderer;
|
||||
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
import software.bernie.geckolib.renderer.GeoArmorRenderer;
|
||||
import software.bernie.geckolib.core.object.PlayState;
|
||||
import software.bernie.geckolib.core.animation.RawAnimation;
|
||||
import software.bernie.geckolib.core.animation.AnimationState;
|
||||
import software.bernie.geckolib.core.animation.AnimationController;
|
||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
||||
import software.bernie.geckolib.constant.DataTickets;
|
||||
import software.bernie.geckolib.animatable.GeoItem;
|
||||
|
||||
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
|
||||
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ArmorMaterial;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.entity.decoration.ArmorStand;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.client.model.HumanoidModel;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.List;
|
||||
|
||||
public class Sealarmorhelmet2Item extends ArmorItem implements GeoItem {
|
||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||
public String animationprocedure = "empty";
|
||||
|
||||
public Sealarmorhelmet2Item(ArmorItem.Type type, Item.Properties properties) {
|
||||
super(new ArmorMaterial() {
|
||||
@Override
|
||||
public int getDurabilityForType(ArmorItem.Type type) {
|
||||
return new int[]{13, 15, 16, 11}[type.getSlot().getIndex()] * 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefenseForType(ArmorItem.Type type) {
|
||||
return new int[]{0, 0, 0, 0}[type.getSlot().getIndex()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getEquipSound() {
|
||||
return SoundEvents.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ingredient getRepairIngredient() {
|
||||
return Ingredient.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "sealarmorhelmet_2";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0f;
|
||||
}
|
||||
}, type, properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
|
||||
consumer.accept(new IClientItemExtensions() {
|
||||
private GeoArmorRenderer<?> renderer;
|
||||
|
||||
@Override
|
||||
public @NotNull HumanoidModel<?> getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel<?> original) {
|
||||
if (this.renderer == null)
|
||||
this.renderer = new Sealarmorhelmet2ArmorRenderer();
|
||||
this.renderer.prepForRender(livingEntity, itemStack, equipmentSlot, original);
|
||||
return this.renderer;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendHoverText(ItemStack itemstack, Level world, List<Component> list, TooltipFlag flag) {
|
||||
super.appendHoverText(itemstack, world, list, flag);
|
||||
}
|
||||
|
||||
private PlayState predicate(AnimationState event) {
|
||||
if (this.animationprocedure.equals("empty")) {
|
||||
event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.model.new"));
|
||||
Entity entity = (Entity) event.getData(DataTickets.ENTITY);
|
||||
if (entity instanceof ArmorStand) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.STOP;
|
||||
}
|
||||
|
||||
String prevAnim = "empty";
|
||||
|
||||
private PlayState procedurePredicate(AnimationState event) {
|
||||
if (!this.animationprocedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED || (!this.animationprocedure.equals(prevAnim) && !this.animationprocedure.equals("empty"))) {
|
||||
if (!this.animationprocedure.equals(prevAnim))
|
||||
event.getController().forceAnimationReset();
|
||||
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationprocedure));
|
||||
if (event.getController().getAnimationState() == AnimationController.State.STOPPED) {
|
||||
this.animationprocedure = "empty";
|
||||
event.getController().forceAnimationReset();
|
||||
}
|
||||
Entity entity = (Entity) event.getData(DataTickets.ENTITY);
|
||||
if (entity instanceof ArmorStand) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
} else if (animationprocedure.equals("empty")) {
|
||||
prevAnim = "empty";
|
||||
return PlayState.STOP;
|
||||
}
|
||||
prevAnim = this.animationprocedure;
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||
data.add(new AnimationController(this, "controller", 5, this::predicate));
|
||||
data.add(new AnimationController(this, "procedureController", 5, this::procedurePredicate));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||
return this.cache;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
|
||||
package top.azimkin.armoryarmor.item;
|
||||
|
||||
import top.azimkin.armoryarmor.client.renderer.SealarmorhelmetArmorRenderer;
|
||||
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
import software.bernie.geckolib.renderer.GeoArmorRenderer;
|
||||
import software.bernie.geckolib.core.object.PlayState;
|
||||
import software.bernie.geckolib.core.animation.RawAnimation;
|
||||
import software.bernie.geckolib.core.animation.AnimationState;
|
||||
import software.bernie.geckolib.core.animation.AnimationController;
|
||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
||||
import software.bernie.geckolib.constant.DataTickets;
|
||||
import software.bernie.geckolib.animatable.GeoItem;
|
||||
|
||||
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
|
||||
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ArmorMaterial;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.entity.decoration.ArmorStand;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.client.model.HumanoidModel;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.List;
|
||||
|
||||
public class SealarmorhelmetItem extends ArmorItem implements GeoItem {
|
||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||
public String animationprocedure = "empty";
|
||||
|
||||
public SealarmorhelmetItem(ArmorItem.Type type, Item.Properties properties) {
|
||||
super(new ArmorMaterial() {
|
||||
@Override
|
||||
public int getDurabilityForType(ArmorItem.Type type) {
|
||||
return new int[]{13, 15, 16, 11}[type.getSlot().getIndex()] * 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefenseForType(ArmorItem.Type type) {
|
||||
return new int[]{0, 0, 0, 0}[type.getSlot().getIndex()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getEquipSound() {
|
||||
return SoundEvents.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ingredient getRepairIngredient() {
|
||||
return Ingredient.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "sealarmorhelmet";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0f;
|
||||
}
|
||||
}, type, properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
|
||||
consumer.accept(new IClientItemExtensions() {
|
||||
private GeoArmorRenderer<?> renderer;
|
||||
|
||||
@Override
|
||||
public HumanoidModel<?> getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel<?> original) {
|
||||
if (this.renderer == null)
|
||||
this.renderer = new SealarmorhelmetArmorRenderer();
|
||||
this.renderer.prepForRender(livingEntity, itemStack, equipmentSlot, original);
|
||||
return this.renderer;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendHoverText(ItemStack itemstack, Level world, List<Component> list, TooltipFlag flag) {
|
||||
super.appendHoverText(itemstack, world, list, flag);
|
||||
}
|
||||
|
||||
private PlayState predicate(AnimationState event) {
|
||||
if (this.animationprocedure.equals("empty")) {
|
||||
event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.model.new"));
|
||||
Entity entity = (Entity) event.getData(DataTickets.ENTITY);
|
||||
if (entity instanceof ArmorStand) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.STOP;
|
||||
}
|
||||
|
||||
String prevAnim = "empty";
|
||||
|
||||
private PlayState procedurePredicate(AnimationState event) {
|
||||
if (!this.animationprocedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED || (!this.animationprocedure.equals(prevAnim) && !this.animationprocedure.equals("empty"))) {
|
||||
if (!this.animationprocedure.equals(prevAnim))
|
||||
event.getController().forceAnimationReset();
|
||||
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationprocedure));
|
||||
if (event.getController().getAnimationState() == AnimationController.State.STOPPED) {
|
||||
this.animationprocedure = "empty";
|
||||
event.getController().forceAnimationReset();
|
||||
}
|
||||
Entity entity = (Entity) event.getData(DataTickets.ENTITY);
|
||||
if (entity instanceof ArmorStand) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
} else if (animationprocedure.equals("empty")) {
|
||||
prevAnim = "empty";
|
||||
return PlayState.STOP;
|
||||
}
|
||||
prevAnim = this.animationprocedure;
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||
data.add(new AnimationController(this, "controller", 5, this::predicate));
|
||||
data.add(new AnimationController(this, "procedureController", 5, this::procedurePredicate));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||
return this.cache;
|
||||
}
|
||||
}
|
||||
69
src/main/java/top/azimkin/armoryarmor/item/Usmc2Item.java
Normal file
@@ -0,0 +1,69 @@
|
||||
|
||||
package top.azimkin.armoryarmor.item;
|
||||
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ArmorMaterial;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
|
||||
public abstract class Usmc2Item extends ArmorItem {
|
||||
public Usmc2Item(ArmorItem.Type type, Item.Properties properties) {
|
||||
super(new ArmorMaterial() {
|
||||
@Override
|
||||
public int getDurabilityForType(ArmorItem.Type type) {
|
||||
return new int[]{13, 15, 16, 11}[type.getSlot().getIndex()] * 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefenseForType(ArmorItem.Type type) {
|
||||
return new int[]{0, 0, 0, 0}[type.getSlot().getIndex()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getEquipSound() {
|
||||
return SoundEvents.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ingredient getRepairIngredient() {
|
||||
return Ingredient.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "usmc_2";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0f;
|
||||
}
|
||||
}, type, properties);
|
||||
}
|
||||
|
||||
public static class Leggings extends Usmc2Item {
|
||||
public Leggings() {
|
||||
super(ArmorItem.Type.LEGGINGS, new Item.Properties());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) {
|
||||
return "armory_armor:textures/models/armor/voidarmor_layer_2.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
69
src/main/java/top/azimkin/armoryarmor/item/UsmcItem.java
Normal file
@@ -0,0 +1,69 @@
|
||||
|
||||
package top.azimkin.armoryarmor.item;
|
||||
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ArmorMaterial;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
|
||||
public abstract class UsmcItem extends ArmorItem {
|
||||
public UsmcItem(ArmorItem.Type type, Item.Properties properties) {
|
||||
super(new ArmorMaterial() {
|
||||
@Override
|
||||
public int getDurabilityForType(ArmorItem.Type type) {
|
||||
return new int[]{13, 15, 16, 11}[type.getSlot().getIndex()] * 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefenseForType(ArmorItem.Type type) {
|
||||
return new int[]{0, 0, 0, 0}[type.getSlot().getIndex()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getEquipSound() {
|
||||
return SoundEvents.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ingredient getRepairIngredient() {
|
||||
return Ingredient.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "usmc";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0f;
|
||||
}
|
||||
}, type, properties);
|
||||
}
|
||||
|
||||
public static class Leggings extends UsmcItem {
|
||||
public Leggings() {
|
||||
super(ArmorItem.Type.LEGGINGS, new Item.Properties());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) {
|
||||
return "armory_armor:textures/models/armor/voidarmor_layer_2.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
152
src/main/java/top/azimkin/armoryarmor/item/UsmcarmorItem.java
Normal file
@@ -0,0 +1,152 @@
|
||||
|
||||
package top.azimkin.armoryarmor.item;
|
||||
|
||||
import top.azimkin.armoryarmor.client.renderer.UsmcarmorArmorRenderer;
|
||||
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
import software.bernie.geckolib.renderer.GeoArmorRenderer;
|
||||
import software.bernie.geckolib.core.object.PlayState;
|
||||
import software.bernie.geckolib.core.animation.RawAnimation;
|
||||
import software.bernie.geckolib.core.animation.AnimationState;
|
||||
import software.bernie.geckolib.core.animation.AnimationController;
|
||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
||||
import software.bernie.geckolib.constant.DataTickets;
|
||||
import software.bernie.geckolib.animatable.GeoItem;
|
||||
|
||||
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
|
||||
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ArmorMaterial;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.entity.decoration.ArmorStand;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.client.model.HumanoidModel;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.List;
|
||||
|
||||
public class UsmcarmorItem extends ArmorItem implements GeoItem {
|
||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||
public String animationprocedure = "empty";
|
||||
|
||||
public UsmcarmorItem(ArmorItem.Type type, Item.Properties properties) {
|
||||
super(new ArmorMaterial() {
|
||||
@Override
|
||||
public int getDurabilityForType(ArmorItem.Type type) {
|
||||
return new int[]{13, 15, 16, 11}[type.getSlot().getIndex()] * 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefenseForType(ArmorItem.Type type) {
|
||||
return new int[]{0, 0, 0, 0}[type.getSlot().getIndex()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getEquipSound() {
|
||||
return SoundEvents.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ingredient getRepairIngredient() {
|
||||
return Ingredient.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "usmcarmor";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0f;
|
||||
}
|
||||
}, type, properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
|
||||
consumer.accept(new IClientItemExtensions() {
|
||||
private GeoArmorRenderer<?> renderer;
|
||||
|
||||
@Override
|
||||
public HumanoidModel<?> getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel<?> original) {
|
||||
if (this.renderer == null)
|
||||
this.renderer = new UsmcarmorArmorRenderer();
|
||||
this.renderer.prepForRender(livingEntity, itemStack, equipmentSlot, original);
|
||||
return this.renderer;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendHoverText(ItemStack itemstack, Level world, List<Component> list, TooltipFlag flag) {
|
||||
super.appendHoverText(itemstack, world, list, flag);
|
||||
}
|
||||
|
||||
private PlayState predicate(AnimationState event) {
|
||||
if (this.animationprocedure.equals("empty")) {
|
||||
event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.model.new"));
|
||||
Entity entity = (Entity) event.getData(DataTickets.ENTITY);
|
||||
if (entity instanceof ArmorStand) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.STOP;
|
||||
}
|
||||
|
||||
String prevAnim = "empty";
|
||||
|
||||
private PlayState procedurePredicate(AnimationState event) {
|
||||
if (!this.animationprocedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED || (!this.animationprocedure.equals(prevAnim) && !this.animationprocedure.equals("empty"))) {
|
||||
if (!this.animationprocedure.equals(prevAnim))
|
||||
event.getController().forceAnimationReset();
|
||||
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationprocedure));
|
||||
if (event.getController().getAnimationState() == AnimationController.State.STOPPED) {
|
||||
this.animationprocedure = "empty";
|
||||
event.getController().forceAnimationReset();
|
||||
}
|
||||
Entity entity = (Entity) event.getData(DataTickets.ENTITY);
|
||||
if (entity instanceof ArmorStand) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
} else if (animationprocedure.equals("empty")) {
|
||||
prevAnim = "empty";
|
||||
return PlayState.STOP;
|
||||
}
|
||||
prevAnim = this.animationprocedure;
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||
data.add(new AnimationController(this, "controller", 5, this::predicate));
|
||||
data.add(new AnimationController(this, "procedureController", 5, this::procedurePredicate));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||
return this.cache;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
|
||||
package top.azimkin.armoryarmor.item;
|
||||
|
||||
import top.azimkin.armoryarmor.client.renderer.UsmcarmorhelmetArmorRenderer;
|
||||
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
import software.bernie.geckolib.renderer.GeoArmorRenderer;
|
||||
import software.bernie.geckolib.core.object.PlayState;
|
||||
import software.bernie.geckolib.core.animation.RawAnimation;
|
||||
import software.bernie.geckolib.core.animation.AnimationState;
|
||||
import software.bernie.geckolib.core.animation.AnimationController;
|
||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
||||
import software.bernie.geckolib.constant.DataTickets;
|
||||
import software.bernie.geckolib.animatable.GeoItem;
|
||||
|
||||
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
|
||||
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ArmorMaterial;
|
||||
import net.minecraft.world.item.ArmorItem;
|
||||
import net.minecraft.world.entity.decoration.ArmorStand;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.client.model.HumanoidModel;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.List;
|
||||
|
||||
public class UsmcarmorhelmetItem extends ArmorItem implements GeoItem {
|
||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||
public String animationprocedure = "empty";
|
||||
|
||||
public UsmcarmorhelmetItem(ArmorItem.Type type, Item.Properties properties) {
|
||||
super(new ArmorMaterial() {
|
||||
@Override
|
||||
public int getDurabilityForType(ArmorItem.Type type) {
|
||||
return new int[]{13, 15, 16, 11}[type.getSlot().getIndex()] * 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefenseForType(ArmorItem.Type type) {
|
||||
return new int[]{0, 0, 0, 0}[type.getSlot().getIndex()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnchantmentValue() {
|
||||
return 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getEquipSound() {
|
||||
return SoundEvents.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ingredient getRepairIngredient() {
|
||||
return Ingredient.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "usmcarmorhelmet";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getToughness() {
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getKnockbackResistance() {
|
||||
return 0f;
|
||||
}
|
||||
}, type, properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
|
||||
consumer.accept(new IClientItemExtensions() {
|
||||
private GeoArmorRenderer<?> renderer;
|
||||
|
||||
@Override
|
||||
public HumanoidModel<?> getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel<?> original) {
|
||||
if (this.renderer == null)
|
||||
this.renderer = new UsmcarmorhelmetArmorRenderer();
|
||||
this.renderer.prepForRender(livingEntity, itemStack, equipmentSlot, original);
|
||||
return this.renderer;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendHoverText(ItemStack itemstack, Level world, List<Component> list, TooltipFlag flag) {
|
||||
super.appendHoverText(itemstack, world, list, flag);
|
||||
}
|
||||
|
||||
private PlayState predicate(AnimationState event) {
|
||||
if (this.animationprocedure.equals("empty")) {
|
||||
event.getController().setAnimation(RawAnimation.begin().thenLoop("animation.model.new"));
|
||||
Entity entity = (Entity) event.getData(DataTickets.ENTITY);
|
||||
if (entity instanceof ArmorStand) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.STOP;
|
||||
}
|
||||
|
||||
String prevAnim = "empty";
|
||||
|
||||
private PlayState procedurePredicate(AnimationState event) {
|
||||
if (!this.animationprocedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED || (!this.animationprocedure.equals(prevAnim) && !this.animationprocedure.equals("empty"))) {
|
||||
if (!this.animationprocedure.equals(prevAnim))
|
||||
event.getController().forceAnimationReset();
|
||||
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationprocedure));
|
||||
if (event.getController().getAnimationState() == AnimationController.State.STOPPED) {
|
||||
this.animationprocedure = "empty";
|
||||
event.getController().forceAnimationReset();
|
||||
}
|
||||
Entity entity = (Entity) event.getData(DataTickets.ENTITY);
|
||||
if (entity instanceof ArmorStand) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
} else if (animationprocedure.equals("empty")) {
|
||||
prevAnim = "empty";
|
||||
return PlayState.STOP;
|
||||
}
|
||||
prevAnim = this.animationprocedure;
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||
data.add(new AnimationController(this, "controller", 5, this::predicate));
|
||||
data.add(new AnimationController(this, "procedureController", 5, this::procedurePredicate));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||
return this.cache;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package top.azimkin.armoryarmor.item.model;
|
||||
|
||||
import top.azimkin.armoryarmor.item.ChicomItem;
|
||||
|
||||
import software.bernie.geckolib.model.GeoModel;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
public class ChicomModel extends GeoModel<ChicomItem> {
|
||||
@Override
|
||||
public ResourceLocation getAnimationResource(ChicomItem object) {
|
||||
return new ResourceLocation("armory_armor", "animations/chicom.animation.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getModelResource(ChicomItem object) {
|
||||
return new ResourceLocation("armory_armor", "geo/chicom.geo.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureResource(ChicomItem object) {
|
||||
return new ResourceLocation("armory_armor", "textures/item/chicom_texture.png");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package top.azimkin.armoryarmor.item.model;
|
||||
|
||||
import top.azimkin.armoryarmor.item.SealarmorItem;
|
||||
|
||||
import software.bernie.geckolib.model.GeoModel;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
public class SealarmorModel extends GeoModel<SealarmorItem> {
|
||||
@Override
|
||||
public ResourceLocation getAnimationResource(SealarmorItem object) {
|
||||
return new ResourceLocation("armory_armor", "animations/seal-vest.animation.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getModelResource(SealarmorItem object) {
|
||||
return new ResourceLocation("armory_armor", "geo/seal-vest.geo.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureResource(SealarmorItem object) {
|
||||
return new ResourceLocation("armory_armor", "textures/item/texture.png");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package top.azimkin.armoryarmor.item.model;
|
||||
|
||||
import top.azimkin.armoryarmor.item.Sealarmorhelmet2Item;
|
||||
|
||||
import software.bernie.geckolib.model.GeoModel;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
public class Sealarmorhelmet2Model extends GeoModel<Sealarmorhelmet2Item> {
|
||||
@Override
|
||||
public ResourceLocation getAnimationResource(Sealarmorhelmet2Item object) {
|
||||
return new ResourceLocation("armory_armor", "animations/seal_healmet2.animation.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getModelResource(Sealarmorhelmet2Item object) {
|
||||
return new ResourceLocation("armory_armor", "geo/seal_healmet2.geo.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureResource(Sealarmorhelmet2Item object) {
|
||||
return new ResourceLocation("armory_armor", "textures/item/seal_helmet2_texture.png");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package top.azimkin.armoryarmor.item.model;
|
||||
|
||||
import top.azimkin.armoryarmor.item.SealarmorhelmetItem;
|
||||
|
||||
import software.bernie.geckolib.model.GeoModel;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
public class SealarmorhelmetModel extends GeoModel<SealarmorhelmetItem> {
|
||||
@Override
|
||||
public ResourceLocation getAnimationResource(SealarmorhelmetItem object) {
|
||||
return new ResourceLocation("armory_armor", "animations/seal-helmet1.animation.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getModelResource(SealarmorhelmetItem object) {
|
||||
return new ResourceLocation("armory_armor", "geo/seal-helmet1.geo.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureResource(SealarmorhelmetItem object) {
|
||||
return new ResourceLocation("armory_armor", "textures/item/seal_helmet_texture.png");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package top.azimkin.armoryarmor.item.model;
|
||||
|
||||
import top.azimkin.armoryarmor.item.UsmcarmorItem;
|
||||
|
||||
import software.bernie.geckolib.model.GeoModel;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
public class UsmcarmorModel extends GeoModel<UsmcarmorItem> {
|
||||
@Override
|
||||
public ResourceLocation getAnimationResource(UsmcarmorItem object) {
|
||||
return new ResourceLocation("armory_armor", "animations/usmc_vest.animation.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getModelResource(UsmcarmorItem object) {
|
||||
return new ResourceLocation("armory_armor", "geo/usmc_vest.geo.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureResource(UsmcarmorItem object) {
|
||||
return new ResourceLocation("armory_armor", "textures/item/usmc_vest_texture.png");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package top.azimkin.armoryarmor.item.model;
|
||||
|
||||
import top.azimkin.armoryarmor.item.UsmcarmorhelmetItem;
|
||||
|
||||
import software.bernie.geckolib.model.GeoModel;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
public class UsmcarmorhelmetModel extends GeoModel<UsmcarmorhelmetItem> {
|
||||
@Override
|
||||
public ResourceLocation getAnimationResource(UsmcarmorhelmetItem object) {
|
||||
return new ResourceLocation("armory_armor", "animations/usmc_helmet.animation.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getModelResource(UsmcarmorhelmetItem object) {
|
||||
return new ResourceLocation("armory_armor", "geo/usmc_helmet.geo.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureResource(UsmcarmorhelmetItem object) {
|
||||
return new ResourceLocation("armory_armor", "textures/item/usmc_helmet_texture.png");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package top.azimkin.armoryarmor.mixin;
|
||||
|
||||
import net.minecraft.client.player.AbstractClientPlayer;
|
||||
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
import top.azimkin.armoryarmor.client.InfoHolder;
|
||||
|
||||
@Mixin(PlayerRenderer.class)
|
||||
public class PlayerRenderMixin {
|
||||
@Inject(method = "getTextureLocation(Lnet/minecraft/client/player/AbstractClientPlayer;)Lnet/minecraft/resources/ResourceLocation;", at = @At(value = "HEAD"), cancellable = true)
|
||||
public void getTextureLocation(AbstractClientPlayer p_117783_, CallbackInfoReturnable<ResourceLocation> cir) {
|
||||
if (InfoHolder.TOP_TEXTURE == null) return;
|
||||
cir.setReturnValue(InfoHolder.TOP_TEXTURE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package top.azimkin.armoryarmor.procedures;
|
||||
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraftforge.client.event.RenderPlayerEvent;
|
||||
import net.minecraftforge.eventbus.api.EventPriority;
|
||||
import net.minecraftforge.registries.RegistryObject;
|
||||
import top.azimkin.armoryarmor.client.ArmorTextureManager;
|
||||
import top.azimkin.armoryarmor.client.InfoHolder;
|
||||
import top.azimkin.armoryarmor.init.ArmoryArmorModItems;
|
||||
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.client.event.RenderLivingEvent;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.client.player.AbstractClientPlayer;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Mod.EventBusSubscriber(value = {Dist.CLIENT})
|
||||
public class RenderEventProcedure {
|
||||
private static final Map<Item, ArmorTextureManager.ArmorData> armorItems = new LinkedHashMap<>();
|
||||
private static final ResourceLocation DEFAULT_TEXTURE = new ResourceLocation("armory_armor:textures/models/armor/voidarmor_layer_2.png");
|
||||
private static final ArmorTextureManager manager = new ArmorTextureManager();
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
@SubscribeEvent(priority = EventPriority.HIGHEST)
|
||||
public static void onEventTriggeredPre(RenderPlayerEvent.Pre event) {
|
||||
computeArmorItems();
|
||||
AbstractClientPlayer player = (AbstractClientPlayer) event.getEntity();
|
||||
Item slotItem = player.getItemBySlot(EquipmentSlot.LEGS).getItem();
|
||||
ArmorTextureManager.ArmorData data = armorItems.get(slotItem);
|
||||
if (data == null) {
|
||||
InfoHolder.TOP_TEXTURE = null;
|
||||
return;
|
||||
}
|
||||
|
||||
InfoHolder.TOP_TEXTURE = manager.getTexture(player.getSkinTextureLocation(), data);
|
||||
}
|
||||
|
||||
private static void fastCmpFunc(RegistryObject<? extends Item> i, String loc, boolean hideHat) {
|
||||
ResourceLocation t = ResourceLocation.tryParse(loc);
|
||||
if (t == null) t = DEFAULT_TEXTURE;
|
||||
RenderEventProcedure.armorItems.put(i.get(), new ArmorTextureManager.ArmorData(t, hideHat));
|
||||
}
|
||||
|
||||
private static void computeArmorItems() {
|
||||
if (!armorItems.isEmpty()) return;
|
||||
fastCmpFunc(ArmoryArmorModItems.SEAL_LEGGINGS,"armory_armor:textures/entities/seal.png", false);
|
||||
fastCmpFunc(ArmoryArmorModItems.USMC_LEGGINGS,"armory_armor:textures/entities/usmc.png", false);
|
||||
fastCmpFunc(ArmoryArmorModItems.ALQAIDA_LEGGINGS,"armory_armor:textures/entities/al-qaida.png", true);
|
||||
fastCmpFunc(ArmoryArmorModItems.ISLAMIC_LEGGINGS,"armory_armor:textures/entities/islamic_army.png", true);
|
||||
fastCmpFunc(ArmoryArmorModItems.USMC_2_LEGGINGS,"armory_armor:textures/entities/usmc2.png", false);
|
||||
fastCmpFunc(ArmoryArmorModItems.CHECHEN_1,"armory_armor:textures/entities/chechen_1.png", true);
|
||||
fastCmpFunc(ArmoryArmorModItems.CHECHEN_2,"armory_armor:textures/entities/chechen_2.png", true);
|
||||
fastCmpFunc(ArmoryArmorModItems.AL_QUAIDA_2,"armory_armor:textures/entities/al_quaida_2.png", true);
|
||||
fastCmpFunc(ArmoryArmorModItems.AL_QUAIDA_3,"armory_armor:textures/entities/al_quaida_3.png", true);
|
||||
}
|
||||
}
|
||||
33
src/main/resources/META-INF/mods.toml
Normal file
@@ -0,0 +1,33 @@
|
||||
modLoader="javafml"
|
||||
loaderVersion="[47,)"
|
||||
license="All Rights Reserved"
|
||||
|
||||
[[mods]]
|
||||
modId="armory_armor"
|
||||
version="1.1.0"
|
||||
displayName="Armory armor"
|
||||
displayURL="https://azimkin.top"
|
||||
credits="Thx Azimkin Development for this mod"
|
||||
authors="Azimkin"
|
||||
|
||||
# Start of user code block mod configuration
|
||||
# End of user code block mod configuration
|
||||
|
||||
[[dependencies.armory_armor]]
|
||||
modId="minecraft"
|
||||
mandatory=true
|
||||
versionRange="[1.20.1]"
|
||||
ordering="AFTER"
|
||||
side="BOTH"
|
||||
|
||||
|
||||
[[dependencies.armory_armor]]
|
||||
modId="geckolib"
|
||||
mandatory=false
|
||||
versionRange="[0,)"
|
||||
ordering="NONE"
|
||||
side="BOTH"
|
||||
|
||||
|
||||
# Start of user code block dependencies configuration
|
||||
# End of user code block dependencies configuration
|
||||
17
src/main/resources/armory_armor.mixins.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"package": "top.azimkin.armoryarmor.mixin",
|
||||
"required": true,
|
||||
"minVersion": "0.8",
|
||||
"compatibilityLevel": "JAVA_17",
|
||||
"refmap": "armory_armor.refmap.json",
|
||||
"mixins": [],
|
||||
"client": [
|
||||
"PlayerRenderMixin"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
},
|
||||
"overwrites": {
|
||||
"requireAnnotations": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.model.new": {
|
||||
"loop": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.model.new": {
|
||||
"loop": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.model.new": {
|
||||
"loop": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.model.new": {
|
||||
"loop": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.model.new": {
|
||||
"loop": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.model.new": {
|
||||
"loop": true
|
||||
}
|
||||
}
|
||||
}
|
||||
90
src/main/resources/assets/armory_armor/geo/chicom.geo.json
Normal file
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"format_version": "1.12.0",
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.unknown",
|
||||
"texture_width": 32,
|
||||
"texture_height": 32,
|
||||
"visible_bounds_width": 2,
|
||||
"visible_bounds_height": 3.5,
|
||||
"visible_bounds_offset": [0, 1.25, 0]
|
||||
},
|
||||
"bones": [
|
||||
{
|
||||
"name": "bipedHead",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "armorBody",
|
||||
"parent": "bipedHead",
|
||||
"pivot": [0, 24, 0]
|
||||
},
|
||||
{
|
||||
"name": "bone13",
|
||||
"parent": "armorBody",
|
||||
"pivot": [0, 21, 0],
|
||||
"cubes": [
|
||||
{"origin": [-4, 12, -2], "size": [8, 12, 4], "inflate": 0.27, "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone14",
|
||||
"parent": "bone13",
|
||||
"pivot": [1.2, 15, -2.4],
|
||||
"rotation": [7.5, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "bone15",
|
||||
"parent": "bone14",
|
||||
"pivot": [2.2, 15, -2.3],
|
||||
"rotation": [5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [1.22064, 14.96993, -3.20689], "size": [2, 4, 2], "pivot": [2.2, 15, -2.3], "rotation": [5.12076, -12.45167, -1.10693], "uv": [16, 22]},
|
||||
{"origin": [1.22064, 14.96993, -3.20689], "size": [2, 4, 2], "inflate": 0.1, "pivot": [2.2, 15, -2.3], "rotation": [5.12076, -12.45167, -1.10693], "uv": [8, 22]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone16",
|
||||
"parent": "bone14",
|
||||
"pivot": [3.9, 15, -1.6],
|
||||
"rotation": [0, -20, 0],
|
||||
"cubes": [
|
||||
{"origin": [2.9, 15, -2.6], "size": [2, 3, 2], "pivot": [3.9, 15, -1.6], "rotation": [5.12076, -12.45167, -1.10693], "uv": [24, 15]},
|
||||
{"origin": [2.9, 15, -2.6], "size": [2, 3, 2], "inflate": 0.1, "pivot": [3.9, 15, -1.6], "rotation": [5.12076, -12.45167, -1.10693], "uv": [24, 10]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone17",
|
||||
"parent": "bone14",
|
||||
"pivot": [-3.9, 15, -1.6],
|
||||
"rotation": [0, 20, 0],
|
||||
"cubes": [
|
||||
{"origin": [-4.9, 15, -2.6], "size": [2, 3, 2], "pivot": [-3.9, 15, -1.6], "rotation": [5.12076, 12.45167, 1.10693], "uv": [24, 5]},
|
||||
{"origin": [-4.9, 15, -2.6], "size": [2, 3, 2], "inflate": 0.1, "pivot": [-3.9, 15, -1.6], "rotation": [5.12076, 12.45167, 1.10693], "uv": [24, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone18",
|
||||
"parent": "bone14",
|
||||
"pivot": [-2.2, 15, -2.3],
|
||||
"rotation": [5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-3.22064, 14.96993, -3.20689], "size": [2, 4, 2], "pivot": [-2.2, 15, -2.3], "rotation": [5.12076, 12.45167, 1.10693], "uv": [0, 22]},
|
||||
{"origin": [-3.22064, 14.96993, -3.20689], "size": [2, 4, 2], "inflate": 0.1, "pivot": [-2.2, 15, -2.3], "rotation": [5.12076, 12.45167, 1.10693], "uv": [16, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone19",
|
||||
"parent": "bone14",
|
||||
"pivot": [2.2, 15, -2.4],
|
||||
"rotation": [5, -2.5, 0],
|
||||
"cubes": [
|
||||
{"origin": [-0.99568, 14.96995, -3.30472], "size": [2, 4, 2], "pivot": [2.2, 15, -2.4], "rotation": [5, 0, 0], "uv": [8, 16]},
|
||||
{"origin": [-0.99568, 14.96995, -3.30472], "size": [2, 4, 2], "inflate": 0.1, "pivot": [2.2, 15, -2.4], "rotation": [5, 0, 0], "uv": [0, 16]}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
264
src/main/resources/assets/armory_armor/geo/seal-helmet1.geo.json
Normal file
@@ -0,0 +1,264 @@
|
||||
{
|
||||
"format_version": "1.12.0",
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.unknown",
|
||||
"texture_width": 64,
|
||||
"texture_height": 64,
|
||||
"visible_bounds_width": 2,
|
||||
"visible_bounds_height": 3.5,
|
||||
"visible_bounds_offset": [0, 1.25, 0]
|
||||
},
|
||||
"bones": [
|
||||
{
|
||||
"name": "bipedHead",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "armorHead",
|
||||
"parent": "bipedHead",
|
||||
"pivot": [0, 24, 0]
|
||||
},
|
||||
{
|
||||
"name": "bone14",
|
||||
"parent": "armorHead",
|
||||
"pivot": [0, 29.7, -7.1],
|
||||
"rotation": [9.5, 0, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-1, 29.7, -6.1],
|
||||
"size": [2, 2, 2],
|
||||
"pivot": [0, 29.7, -5.1],
|
||||
"rotation": [-10, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [4, 48], "uv_size": [2, 2]},
|
||||
"east": {"uv": [48, 7], "uv_size": [2, 2]},
|
||||
"south": {"uv": [8, 48], "uv_size": [2, 2]},
|
||||
"west": {"uv": [48, 9], "uv_size": [2, 2]},
|
||||
"up": {"uv": [10, 48], "uv_size": [2, 2]},
|
||||
"down": {"uv": [48, 13], "uv_size": [2, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [1, 28.7, -6.1],
|
||||
"size": [3, 3, 2],
|
||||
"pivot": [2, 29.7, -5.1],
|
||||
"rotation": [-10, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [45, 19], "uv_size": [3, 3]},
|
||||
"east": {"uv": [45, 27], "uv_size": [2, 3]},
|
||||
"south": {"uv": [20, 45], "uv_size": [3, 3]},
|
||||
"west": {"uv": [29, 45], "uv_size": [2, 3]},
|
||||
"up": {"uv": [45, 30], "uv_size": [3, 2]},
|
||||
"down": {"uv": [31, 47], "uv_size": [3, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4, 28.7, -6.1],
|
||||
"size": [3, 3, 2],
|
||||
"pivot": [-3, 29.7, -5.1],
|
||||
"rotation": [-10, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [23, 45], "uv_size": [3, 3]},
|
||||
"east": {"uv": [45, 32], "uv_size": [2, 3]},
|
||||
"south": {"uv": [26, 45], "uv_size": [3, 3]},
|
||||
"west": {"uv": [34, 45], "uv_size": [2, 3]},
|
||||
"up": {"uv": [0, 46], "uv_size": [3, 2]},
|
||||
"down": {"uv": [3, 48], "uv_size": [3, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.9, 29.6, -5.1],
|
||||
"size": [9.8, 1, 10.2],
|
||||
"inflate": 0.2,
|
||||
"pivot": [-3, 30.6, -5.1],
|
||||
"rotation": [-10, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [37, 26], "uv_size": [10, 1]},
|
||||
"east": {"uv": [45, 4], "uv_size": [10, 1]},
|
||||
"south": {"uv": [45, 5], "uv_size": [10, 1]},
|
||||
"west": {"uv": [45, 6], "uv_size": [10, 1]},
|
||||
"up": {"uv": [0, 0], "uv_size": [10, 10]},
|
||||
"down": {"uv": [0, 20], "uv_size": [10, -10]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone13",
|
||||
"parent": "armorHead",
|
||||
"pivot": [0, 30, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-4.6, 23.4, -4.6],
|
||||
"size": [9.2, 9.2, 9.2],
|
||||
"inflate": 0.04,
|
||||
"uv": {
|
||||
"north": {"uv": [10, 0], "uv_size": [9, 9]},
|
||||
"east": {"uv": [10, 9], "uv_size": [9, 9]},
|
||||
"south": {"uv": [10, 18], "uv_size": [9, 9]},
|
||||
"west": {"uv": [19, 0], "uv_size": [9, 9]},
|
||||
"up": {"uv": [19, 9], "uv_size": [9, 9]},
|
||||
"down": {"uv": [19, 27], "uv_size": [9, -9]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.6, 23.4, -4.6],
|
||||
"size": [9.2, 9.2, 9.2],
|
||||
"inflate": 0.5,
|
||||
"uv": {
|
||||
"north": {"uv": [0, 20], "uv_size": [9, 9]},
|
||||
"east": {"uv": [9, 27], "uv_size": [9, 9]},
|
||||
"south": {"uv": [18, 27], "uv_size": [9, 9]},
|
||||
"west": {"uv": [27, 27], "uv_size": [9, 9]},
|
||||
"up": {"uv": [28, 0], "uv_size": [9, 9]},
|
||||
"down": {"uv": [28, 18], "uv_size": [9, -9]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [1.9, 26, -5],
|
||||
"size": [4, 1, 6],
|
||||
"pivot": [4.9, 26, 0],
|
||||
"rotation": [12.24818, 3.16808, -1.83564],
|
||||
"uv": {
|
||||
"north": {"uv": [45, 35], "uv_size": [4, 1]},
|
||||
"east": {"uv": [45, 22], "uv_size": [6, 1]},
|
||||
"south": {"uv": [47, 24], "uv_size": [4, 1]},
|
||||
"west": {"uv": [45, 23], "uv_size": [6, 1]},
|
||||
"up": {"uv": [44, 36], "uv_size": [4, 6]},
|
||||
"down": {"uv": [44, 48], "uv_size": [4, -6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [5, 27.3, -1],
|
||||
"size": [1, 2, 5],
|
||||
"pivot": [5, 27.3, 0],
|
||||
"rotation": [-2.47864, -0.32621, -7.49294],
|
||||
"uv": {
|
||||
"north": {"uv": [9, 25], "uv_size": [1, 2]},
|
||||
"east": {"uv": [37, 24], "uv_size": [5, 2]},
|
||||
"south": {"uv": [8, 43], "uv_size": [1, 2]},
|
||||
"west": {"uv": [42, 24], "uv_size": [5, 2]},
|
||||
"up": {"uv": [9, 20], "uv_size": [1, 5]},
|
||||
"down": {"uv": [8, 43], "uv_size": [1, -5]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-6, 27.3, -1],
|
||||
"size": [1, 2, 5],
|
||||
"pivot": [-5, 27.3, 0],
|
||||
"rotation": [-2.47864, 0.32621, 7.49294],
|
||||
"uv": {
|
||||
"north": {"uv": [24, 48], "uv_size": [1, 2]},
|
||||
"east": {"uv": [45, 0], "uv_size": [5, 2]},
|
||||
"south": {"uv": [25, 48], "uv_size": [1, 2]},
|
||||
"west": {"uv": [45, 2], "uv_size": [5, 2]},
|
||||
"up": {"uv": [6, 46], "uv_size": [1, 5]},
|
||||
"down": {"uv": [7, 51], "uv_size": [1, -5]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1, 29.8, -6],
|
||||
"size": [2, 2, 2],
|
||||
"pivot": [0, 29.8, -6],
|
||||
"rotation": [-7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [47, 25], "uv_size": [2, 2]},
|
||||
"east": {"uv": [47, 27], "uv_size": [2, 2]},
|
||||
"south": {"uv": [31, 47], "uv_size": [2, 2]},
|
||||
"west": {"uv": [47, 32], "uv_size": [2, 2]},
|
||||
"up": {"uv": [0, 48], "uv_size": [2, 2]},
|
||||
"down": {"uv": [2, 50], "uv_size": [2, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.6, 23.4, -4.6],
|
||||
"size": [9.2, 9.2, 9.2],
|
||||
"inflate": 0.18,
|
||||
"uv": {
|
||||
"north": {"uv": [28, 18], "uv_size": [9, 9]},
|
||||
"east": {"uv": [0, 29], "uv_size": [9, 9]},
|
||||
"south": {"uv": [9, 36], "uv_size": [9, 9]},
|
||||
"west": {"uv": [18, 36], "uv_size": [9, 9]},
|
||||
"up": {"uv": [27, 36], "uv_size": [9, 9]},
|
||||
"down": {"uv": [36, 36], "uv_size": [9, -9]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4, 24, -4.1],
|
||||
"size": [8, 8, 8],
|
||||
"inflate": 0.52,
|
||||
"uv": {
|
||||
"north": {"uv": [36, 36], "uv_size": [8, 8]},
|
||||
"east": {"uv": [37, 0], "uv_size": [8, 8]},
|
||||
"south": {"uv": [37, 8], "uv_size": [8, 8]},
|
||||
"west": {"uv": [37, 16], "uv_size": [8, 8]},
|
||||
"up": {"uv": [0, 38], "uv_size": [8, 8]},
|
||||
"down": {"uv": [36, 52], "uv_size": [8, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-5.1, 26, -0.5],
|
||||
"size": [1, 3, 3],
|
||||
"pivot": [-5.1, 27, 1.5],
|
||||
"rotation": [6.76795, 2.12613, 8.36404],
|
||||
"uv": {
|
||||
"north": {"uv": [33, 47], "uv_size": [1, 3]},
|
||||
"east": {"uv": [45, 7], "uv_size": [3, 3]},
|
||||
"south": {"uv": [12, 48], "uv_size": [1, 3]},
|
||||
"west": {"uv": [8, 45], "uv_size": [3, 3]},
|
||||
"up": {"uv": [13, 48], "uv_size": [1, 3]},
|
||||
"down": {"uv": [48, 16], "uv_size": [1, -3]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [3.9, 26, -0.5],
|
||||
"size": [1, 3, 3],
|
||||
"pivot": [5.1, 27, 1.5],
|
||||
"rotation": [6.76795, -2.12613, -8.36404],
|
||||
"uv": {
|
||||
"north": {"uv": [14, 48], "uv_size": [1, 3]},
|
||||
"east": {"uv": [45, 10], "uv_size": [3, 3]},
|
||||
"south": {"uv": [15, 48], "uv_size": [1, 3]},
|
||||
"west": {"uv": [11, 45], "uv_size": [3, 3]},
|
||||
"up": {"uv": [16, 48], "uv_size": [1, 3]},
|
||||
"down": {"uv": [48, 19], "uv_size": [1, -3]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [4.5, 26, -0.5],
|
||||
"size": [1, 3, 3],
|
||||
"inflate": 0.1,
|
||||
"pivot": [5.3, 27, 1.5],
|
||||
"rotation": [6.76795, -2.12613, -8.36404],
|
||||
"uv": {
|
||||
"north": {"uv": [17, 48], "uv_size": [1, 3]},
|
||||
"east": {"uv": [45, 13], "uv_size": [3, 3]},
|
||||
"south": {"uv": [18, 48], "uv_size": [1, 3]},
|
||||
"west": {"uv": [14, 45], "uv_size": [3, 3]},
|
||||
"up": {"uv": [19, 48], "uv_size": [1, 3]},
|
||||
"down": {"uv": [48, 22], "uv_size": [1, -3]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-5.5, 26, -0.5],
|
||||
"size": [1, 3, 3],
|
||||
"inflate": 0.1,
|
||||
"pivot": [-5.3, 27, 1.5],
|
||||
"rotation": [6.76795, 2.12613, 8.36404],
|
||||
"uv": {
|
||||
"north": {"uv": [20, 48], "uv_size": [1, 3]},
|
||||
"east": {"uv": [45, 16], "uv_size": [3, 3]},
|
||||
"south": {"uv": [21, 48], "uv_size": [1, 3]},
|
||||
"west": {"uv": [17, 45], "uv_size": [3, 3]},
|
||||
"up": {"uv": [22, 48], "uv_size": [1, 3]},
|
||||
"down": {"uv": [23, 51], "uv_size": [1, -3]}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
604
src/main/resources/assets/armory_armor/geo/seal-vest.geo.json
Normal file
@@ -0,0 +1,604 @@
|
||||
{
|
||||
"format_version": "1.12.0",
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.unknown",
|
||||
"texture_width": 64,
|
||||
"texture_height": 64,
|
||||
"visible_bounds_width": 2,
|
||||
"visible_bounds_height": 3.5,
|
||||
"visible_bounds_offset": [0, 1.25, 0]
|
||||
},
|
||||
"bones": [
|
||||
{
|
||||
"name": "bipedBody",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "armorBody",
|
||||
"parent": "bipedBody",
|
||||
"pivot": [0, 24, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-4.3, 13.9, -2.5],
|
||||
"size": [2, 4.5, 5],
|
||||
"pivot": [-3.3, 14.9, -0.5],
|
||||
"rotation": [0, 0, -6.5],
|
||||
"uv": {
|
||||
"north": {"uv": [12, 35], "uv_size": [2, 4]},
|
||||
"east": {"uv": [5, 27], "uv_size": [5, 4]},
|
||||
"south": {"uv": [35, 17], "uv_size": [2, 4]},
|
||||
"west": {"uv": [10, 27], "uv_size": [5, 4]},
|
||||
"up": {"uv": [34, 4], "uv_size": [2, 5]},
|
||||
"down": {"uv": [22, 39], "uv_size": [2, -5]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [2.3, 13.9, -2.5],
|
||||
"size": [2, 4.5, 5],
|
||||
"pivot": [3.3, 14.9, -0.5],
|
||||
"rotation": [0, 0, 6.5],
|
||||
"uv": {
|
||||
"north": {"uv": [6, 35], "uv_size": [2, 4]},
|
||||
"east": {"uv": [26, 26], "uv_size": [5, 4]},
|
||||
"south": {"uv": [8, 35], "uv_size": [2, 4]},
|
||||
"west": {"uv": [0, 27], "uv_size": [5, 4]},
|
||||
"up": {"uv": [10, 33], "uv_size": [2, 5]},
|
||||
"down": {"uv": [33, 37], "uv_size": [2, -5]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.61419, 18.54483, 1.90474],
|
||||
"size": [0.8, 2.1, 1],
|
||||
"pivot": [1.28581, 21.64483, 0.40474],
|
||||
"rotation": [6.9349, -2.8631, 22.3265],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 21], "uv_size": [1, 2]},
|
||||
"east": {"uv": [22, 44], "uv_size": [1, 2]},
|
||||
"south": {"uv": [23, 44], "uv_size": [1, 2]},
|
||||
"west": {"uv": [44, 24], "uv_size": [1, 2]},
|
||||
"up": {"uv": [44, 31], "uv_size": [1, 1]},
|
||||
"down": {"uv": [32, 45], "uv_size": [1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.7, 20.25, 1.7],
|
||||
"size": [5.4, 1.95, 1],
|
||||
"pivot": [0, 23.2, 0.2],
|
||||
"rotation": [7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [0, 33], "uv_size": [5, 2]},
|
||||
"east": {"uv": [20, 44], "uv_size": [1, 2]},
|
||||
"south": {"uv": [5, 33], "uv_size": [5, 2]},
|
||||
"west": {"uv": [21, 44], "uv_size": [1, 2]},
|
||||
"up": {"uv": [42, 8], "uv_size": [5, 1]},
|
||||
"down": {"uv": [42, 10], "uv_size": [5, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [1.81419, 18.54483, 1.90474],
|
||||
"size": [0.8, 2.1, 1],
|
||||
"pivot": [-1.28581, 21.64483, 0.40474],
|
||||
"rotation": [6.9349, 2.8631, -22.3265],
|
||||
"uv": {
|
||||
"north": {"uv": [16, 44], "uv_size": [1, 2]},
|
||||
"east": {"uv": [17, 44], "uv_size": [1, 2]},
|
||||
"south": {"uv": [44, 17], "uv_size": [1, 2]},
|
||||
"west": {"uv": [18, 44], "uv_size": [1, 2]},
|
||||
"up": {"uv": [44, 30], "uv_size": [1, 1]},
|
||||
"down": {"uv": [31, 45], "uv_size": [1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.7, 20.25, 2.725],
|
||||
"size": [7.4, 1.95, 0],
|
||||
"pivot": [0, 23.2, 0.225],
|
||||
"rotation": [7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [22, 30], "uv_size": [7, 2]},
|
||||
"east": {"uv": [0, 0], "uv_size": [0, 2]},
|
||||
"south": {"uv": [29, 30], "uv_size": [7, 2]},
|
||||
"west": {"uv": [0, 0], "uv_size": [0, 2]},
|
||||
"up": {"uv": [0, 0], "uv_size": [7, 0]},
|
||||
"down": {"uv": [0, 0], "uv_size": [7, 0]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.49636, 18.28926, 1.76724],
|
||||
"size": [7, 1.975, 1],
|
||||
"pivot": [0.00364, 22.68926, 0.26724],
|
||||
"rotation": [7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [30, 2], "uv_size": [7, 2]},
|
||||
"east": {"uv": [14, 44], "uv_size": [1, 2]},
|
||||
"south": {"uv": [15, 30], "uv_size": [7, 2]},
|
||||
"west": {"uv": [15, 44], "uv_size": [1, 2]},
|
||||
"up": {"uv": [40, 4], "uv_size": [7, 1]},
|
||||
"down": {"uv": [40, 6], "uv_size": [7, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.49636, 13.53998, 2.13062],
|
||||
"size": [7, 5, 1],
|
||||
"pivot": [0.00364, 22.93998, 0.63062],
|
||||
"rotation": [2.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [22, 7], "uv_size": [7, 5]},
|
||||
"east": {"uv": [3, 42], "uv_size": [1, 5]},
|
||||
"south": {"uv": [22, 12], "uv_size": [7, 5]},
|
||||
"west": {"uv": [4, 42], "uv_size": [1, 5]},
|
||||
"up": {"uv": [39, 38], "uv_size": [7, 1]},
|
||||
"down": {"uv": [39, 40], "uv_size": [7, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.61419, 18.54483, -2.90474],
|
||||
"size": [0.8, 2.1, 1],
|
||||
"pivot": [1.28581, 21.64483, -0.40474],
|
||||
"rotation": [-6.9349, 2.8631, 22.3265],
|
||||
"uv": {
|
||||
"north": {"uv": [11, 44], "uv_size": [1, 2]},
|
||||
"east": {"uv": [12, 44], "uv_size": [1, 2]},
|
||||
"south": {"uv": [44, 12], "uv_size": [1, 2]},
|
||||
"west": {"uv": [13, 44], "uv_size": [1, 2]},
|
||||
"up": {"uv": [40, 15], "uv_size": [1, 1]},
|
||||
"down": {"uv": [30, 45], "uv_size": [1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [1.81419, 18.54483, -2.90474],
|
||||
"size": [0.8, 2.1, 1],
|
||||
"pivot": [-1.28581, 21.64483, -0.40474],
|
||||
"rotation": [-6.9349, -2.8631, -22.3265],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 0], "uv_size": [1, 2]},
|
||||
"east": {"uv": [44, 2], "uv_size": [1, 2]},
|
||||
"south": {"uv": [10, 44], "uv_size": [1, 2]},
|
||||
"west": {"uv": [44, 10], "uv_size": [1, 2]},
|
||||
"up": {"uv": [14, 35], "uv_size": [1, 1]},
|
||||
"down": {"uv": [36, 17], "uv_size": [1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.49636, 18.28926, -2.76724],
|
||||
"size": [7, 1.975, 1],
|
||||
"pivot": [0.00364, 22.68926, -0.26724],
|
||||
"rotation": [-7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [29, 15], "uv_size": [7, 2]},
|
||||
"east": {"uv": [36, 43], "uv_size": [1, 2]},
|
||||
"south": {"uv": [30, 0], "uv_size": [7, 2]},
|
||||
"west": {"uv": [43, 42], "uv_size": [1, 2]},
|
||||
"up": {"uv": [39, 36], "uv_size": [7, 1]},
|
||||
"down": {"uv": [39, 38], "uv_size": [7, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.7, 20.25, -2.725],
|
||||
"size": [7.4, 1.95, 0],
|
||||
"pivot": [0, 23.2, -0.225],
|
||||
"rotation": [-7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [29, 11], "uv_size": [7, 2]},
|
||||
"east": {"uv": [0, 0], "uv_size": [0, 2]},
|
||||
"south": {"uv": [29, 13], "uv_size": [7, 2]},
|
||||
"west": {"uv": [0, 0], "uv_size": [0, 2]},
|
||||
"up": {"uv": [0, 0], "uv_size": [7, 0]},
|
||||
"down": {"uv": [0, 0], "uv_size": [7, 0]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.7, 20.25, -2.7],
|
||||
"size": [5.4, 1.95, 1],
|
||||
"pivot": [0, 23.2, -0.2],
|
||||
"rotation": [-7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [24, 5], "uv_size": [5, 2]},
|
||||
"east": {"uv": [36, 30], "uv_size": [1, 2]},
|
||||
"south": {"uv": [28, 32], "uv_size": [5, 2]},
|
||||
"west": {"uv": [35, 43], "uv_size": [1, 2]},
|
||||
"up": {"uv": [42, 6], "uv_size": [5, 1]},
|
||||
"down": {"uv": [42, 8], "uv_size": [5, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.49636, 13.53998, -3.13062],
|
||||
"size": [7, 5, 1],
|
||||
"pivot": [0.00364, 22.93998, -0.63062],
|
||||
"rotation": [-2.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [0, 22], "uv_size": [7, 5]},
|
||||
"east": {"uv": [1, 42], "uv_size": [1, 5]},
|
||||
"south": {"uv": [7, 22], "uv_size": [7, 5]},
|
||||
"west": {"uv": [2, 42], "uv_size": [1, 5]},
|
||||
"up": {"uv": [39, 34], "uv_size": [7, 1]},
|
||||
"down": {"uv": [39, 36], "uv_size": [7, -1]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone20",
|
||||
"parent": "armorBody",
|
||||
"pivot": [0, 15.6, 5.1],
|
||||
"rotation": [2, 0, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-3, 13.6, 4.1],
|
||||
"size": [6, 5, 2],
|
||||
"uv": {
|
||||
"north": {"uv": [24, 0], "uv_size": [6, 5]},
|
||||
"east": {"uv": [24, 34], "uv_size": [2, 5]},
|
||||
"south": {"uv": [26, 17], "uv_size": [6, 5]},
|
||||
"west": {"uv": [26, 34], "uv_size": [2, 5]},
|
||||
"up": {"uv": [0, 31], "uv_size": [6, 2]},
|
||||
"down": {"uv": [6, 33], "uv_size": [6, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3, 13.6, 3.1],
|
||||
"size": [6, 8.7, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [14, 18], "uv_size": [6, 9]},
|
||||
"east": {"uv": [31, 34], "uv_size": [1, 9]},
|
||||
"south": {"uv": [20, 18], "uv_size": [6, 9]},
|
||||
"west": {"uv": [32, 34], "uv_size": [1, 9]},
|
||||
"up": {"uv": [41, 23], "uv_size": [6, 1]},
|
||||
"down": {"uv": [24, 42], "uv_size": [6, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.1, 14.6, 3.9],
|
||||
"size": [3, 4, 2],
|
||||
"pivot": [0.9, 15.6, 4.9],
|
||||
"rotation": [0, 0, -5],
|
||||
"uv": {
|
||||
"north": {"uv": [12, 31], "uv_size": [3, 4]},
|
||||
"east": {"uv": [18, 39], "uv_size": [2, 4]},
|
||||
"south": {"uv": [31, 26], "uv_size": [3, 4]},
|
||||
"west": {"uv": [20, 39], "uv_size": [2, 4]},
|
||||
"up": {"uv": [41, 26], "uv_size": [3, 2]},
|
||||
"down": {"uv": [41, 30], "uv_size": [3, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [1.1, 14.6, 3.9],
|
||||
"size": [3, 4, 2],
|
||||
"pivot": [-0.9, 15.6, 4.9],
|
||||
"rotation": [0, 0, 5],
|
||||
"uv": {
|
||||
"north": {"uv": [15, 32], "uv_size": [3, 4]},
|
||||
"east": {"uv": [39, 20], "uv_size": [2, 4]},
|
||||
"south": {"uv": [32, 17], "uv_size": [3, 4]},
|
||||
"west": {"uv": [22, 39], "uv_size": [2, 4]},
|
||||
"up": {"uv": [41, 30], "uv_size": [3, 2]},
|
||||
"down": {"uv": [41, 34], "uv_size": [3, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2, 14.6, 5.7],
|
||||
"size": [4, 3, 1],
|
||||
"pivot": [0, 15.6, 4.7],
|
||||
"rotation": [-7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [18, 32], "uv_size": [4, 3]},
|
||||
"east": {"uv": [43, 17], "uv_size": [1, 3]},
|
||||
"south": {"uv": [32, 21], "uv_size": [4, 3]},
|
||||
"west": {"uv": [19, 43], "uv_size": [1, 3]},
|
||||
"up": {"uv": [22, 17], "uv_size": [4, 1]},
|
||||
"down": {"uv": [30, 5], "uv_size": [4, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2, 21.55236, 3.8475],
|
||||
"size": [4, 2, 1],
|
||||
"pivot": [0, 23.55236, 5.8475],
|
||||
"rotation": [-2.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [38, 24], "uv_size": [4, 2]},
|
||||
"east": {"uv": [44, 28], "uv_size": [1, 2]},
|
||||
"south": {"uv": [24, 39], "uv_size": [4, 2]},
|
||||
"west": {"uv": [29, 44], "uv_size": [1, 2]},
|
||||
"up": {"uv": [42, 14], "uv_size": [4, 1]},
|
||||
"down": {"uv": [12, 44], "uv_size": [4, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3, 18.45236, 3.8475],
|
||||
"size": [6, 4, 2],
|
||||
"pivot": [0, 20.45236, 4.8475],
|
||||
"rotation": [7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [16, 7], "uv_size": [6, 4]},
|
||||
"east": {"uv": [39, 26], "uv_size": [2, 4]},
|
||||
"south": {"uv": [26, 22], "uv_size": [6, 4]},
|
||||
"west": {"uv": [39, 30], "uv_size": [2, 4]},
|
||||
"up": {"uv": [22, 32], "uv_size": [6, 2]},
|
||||
"down": {"uv": [32, 26], "uv_size": [6, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4, 12.9, -3.9],
|
||||
"size": [8, 11, 7],
|
||||
"pivot": [0, 14.9, 5.1],
|
||||
"rotation": [-5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [0, 0], "uv_size": [8, 11]},
|
||||
"east": {"uv": [0, 11], "uv_size": [7, 11]},
|
||||
"south": {"uv": [8, 0], "uv_size": [8, 11]},
|
||||
"west": {"uv": [7, 11], "uv_size": [7, 11]},
|
||||
"up": {"uv": [14, 11], "uv_size": [8, 7]},
|
||||
"down": {"uv": [16, 7], "uv_size": [8, -7]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone",
|
||||
"parent": "armorBody",
|
||||
"pivot": [1, 19.3, -3],
|
||||
"rotation": [5, 0, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [0, 18.3, -4],
|
||||
"size": [3, 3, 2],
|
||||
"uv": {
|
||||
"north": {"uv": [34, 26], "uv_size": [3, 3]},
|
||||
"east": {"uv": [16, 40], "uv_size": [2, 3]},
|
||||
"south": {"uv": [28, 34], "uv_size": [3, 3]},
|
||||
"west": {"uv": [35, 40], "uv_size": [2, 3]},
|
||||
"up": {"uv": [39, 40], "uv_size": [3, 2]},
|
||||
"down": {"uv": [41, 2], "uv_size": [3, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [0, 18.3, -4],
|
||||
"size": [3, 3, 2],
|
||||
"inflate": 0.1,
|
||||
"uv": {
|
||||
"north": {"uv": [0, 35], "uv_size": [3, 3]},
|
||||
"east": {"uv": [41, 15], "uv_size": [2, 3]},
|
||||
"south": {"uv": [3, 35], "uv_size": [3, 3]},
|
||||
"west": {"uv": [41, 18], "uv_size": [2, 3]},
|
||||
"up": {"uv": [41, 2], "uv_size": [3, 2]},
|
||||
"down": {"uv": [41, 23], "uv_size": [3, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone6",
|
||||
"parent": "armorBody",
|
||||
"pivot": [1.2, 13, -3.2]
|
||||
},
|
||||
{
|
||||
"name": "bone9",
|
||||
"parent": "bone6",
|
||||
"pivot": [3.2, 13.05, -2.8],
|
||||
"rotation": [7.67995, -12.39135, -1.6575],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [2.2, 14.05, -3.8],
|
||||
"size": [2, 4, 2],
|
||||
"inflate": 0.1,
|
||||
"pivot": [3.2, 13.05, -2.8],
|
||||
"rotation": [5.12076, -12.45167, -1.10693],
|
||||
"uv": {
|
||||
"north": {"uv": [18, 35], "uv_size": [2, 4]},
|
||||
"east": {"uv": [20, 35], "uv_size": [2, 4]},
|
||||
"south": {"uv": [35, 32], "uv_size": [2, 4]},
|
||||
"west": {"uv": [36, 4], "uv_size": [2, 4]},
|
||||
"up": {"uv": [34, 9], "uv_size": [2, 2]},
|
||||
"down": {"uv": [10, 44], "uv_size": [2, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [2.2, 14.05, -3.8],
|
||||
"size": [2, 4, 2],
|
||||
"pivot": [3.2, 13.05, -2.8],
|
||||
"rotation": [5.12076, -12.45167, -1.10693],
|
||||
"uv": {
|
||||
"north": {"uv": [36, 8], "uv_size": [2, 4]},
|
||||
"east": {"uv": [36, 12], "uv_size": [2, 4]},
|
||||
"south": {"uv": [14, 36], "uv_size": [2, 4]},
|
||||
"west": {"uv": [16, 36], "uv_size": [2, 4]},
|
||||
"up": {"uv": [42, 10], "uv_size": [2, 2]},
|
||||
"down": {"uv": [42, 14], "uv_size": [2, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone10",
|
||||
"parent": "bone6",
|
||||
"pivot": [-3.4, 13.05, -3.4],
|
||||
"rotation": [5.12076, 12.45167, 1.10693],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-4.4, 14.05, -3.4],
|
||||
"size": [2, 4, 1],
|
||||
"pivot": [-3.4, 13.05, -3.4],
|
||||
"rotation": [5.12076, 12.45167, 1.10693],
|
||||
"uv": {
|
||||
"north": {"uv": [35, 36], "uv_size": [2, 4]},
|
||||
"east": {"uv": [5, 42], "uv_size": [1, 4]},
|
||||
"south": {"uv": [37, 0], "uv_size": [2, 4]},
|
||||
"west": {"uv": [24, 42], "uv_size": [1, 4]},
|
||||
"up": {"uv": [44, 19], "uv_size": [2, 1]},
|
||||
"down": {"uv": [44, 27], "uv_size": [2, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.4, 14.05, -3.4],
|
||||
"size": [2, 4, 1],
|
||||
"inflate": 0.1,
|
||||
"pivot": [-3.4, 13.05, -3.4],
|
||||
"rotation": [5.12076, 12.45167, 1.10693],
|
||||
"uv": {
|
||||
"north": {"uv": [37, 16], "uv_size": [2, 4]},
|
||||
"east": {"uv": [25, 42], "uv_size": [1, 4]},
|
||||
"south": {"uv": [37, 20], "uv_size": [2, 4]},
|
||||
"west": {"uv": [26, 42], "uv_size": [1, 4]},
|
||||
"up": {"uv": [27, 44], "uv_size": [2, 1]},
|
||||
"down": {"uv": [44, 28], "uv_size": [2, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.4, 18.05, -2.9],
|
||||
"size": [2, 4, 0],
|
||||
"pivot": [-3.4, 13.05, -3.4],
|
||||
"rotation": [5.12076, 12.45167, 1.10693],
|
||||
"uv": {
|
||||
"north": {"uv": [37, 26], "uv_size": [2, 4]},
|
||||
"east": {"uv": [0, 0], "uv_size": [0, 4]},
|
||||
"south": {"uv": [28, 37], "uv_size": [2, 4]},
|
||||
"west": {"uv": [0, 0], "uv_size": [0, 4]},
|
||||
"up": {"uv": [0, 0], "uv_size": [2, 0]},
|
||||
"down": {"uv": [0, 0], "uv_size": [2, 0]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone11",
|
||||
"parent": "bone6",
|
||||
"pivot": [1.1, 13, -3.2],
|
||||
"rotation": [7.52136, -4.97856, -0.32745],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [0.1, 14, -4.2],
|
||||
"size": [2, 4, 2],
|
||||
"pivot": [1.1, 13, -3.2],
|
||||
"rotation": [5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [37, 30], "uv_size": [2, 4]},
|
||||
"east": {"uv": [33, 37], "uv_size": [2, 4]},
|
||||
"south": {"uv": [37, 34], "uv_size": [2, 4]},
|
||||
"west": {"uv": [0, 38], "uv_size": [2, 4]},
|
||||
"up": {"uv": [42, 24], "uv_size": [2, 2]},
|
||||
"down": {"uv": [27, 44], "uv_size": [2, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.1, 14, -4.2],
|
||||
"size": [2, 4, 2],
|
||||
"inflate": 0.1,
|
||||
"pivot": [1.1, 13, -3.2],
|
||||
"rotation": [5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [2, 38], "uv_size": [2, 4]},
|
||||
"east": {"uv": [4, 38], "uv_size": [2, 4]},
|
||||
"south": {"uv": [38, 4], "uv_size": [2, 4]},
|
||||
"west": {"uv": [38, 8], "uv_size": [2, 4]},
|
||||
"up": {"uv": [29, 42], "uv_size": [2, 2]},
|
||||
"down": {"uv": [37, 44], "uv_size": [2, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone12",
|
||||
"parent": "bone6",
|
||||
"pivot": [-1.1, 13, -3.2],
|
||||
"rotation": [7.52136, 4.97856, 0.32745],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-2.1, 14, -4.2],
|
||||
"size": [2, 4, 2],
|
||||
"pivot": [-1.1, 13, -3.2],
|
||||
"rotation": [5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [10, 38], "uv_size": [2, 4]},
|
||||
"east": {"uv": [38, 12], "uv_size": [2, 4]},
|
||||
"south": {"uv": [37, 38], "uv_size": [2, 4]},
|
||||
"west": {"uv": [39, 0], "uv_size": [2, 4]},
|
||||
"up": {"uv": [39, 42], "uv_size": [2, 2]},
|
||||
"down": {"uv": [42, 42], "uv_size": [2, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.1, 14, -4.2],
|
||||
"size": [2, 4, 2],
|
||||
"inflate": 0.1,
|
||||
"pivot": [-1.1, 13, -3.2],
|
||||
"rotation": [5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [6, 39], "uv_size": [2, 4]},
|
||||
"east": {"uv": [8, 39], "uv_size": [2, 4]},
|
||||
"south": {"uv": [12, 39], "uv_size": [2, 4]},
|
||||
"west": {"uv": [39, 16], "uv_size": [2, 4]},
|
||||
"up": {"uv": [41, 42], "uv_size": [2, 2]},
|
||||
"down": {"uv": [6, 45], "uv_size": [2, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone19",
|
||||
"parent": "armorBody",
|
||||
"pivot": [1.3, 22.74474, -0.83494],
|
||||
"rotation": [0, 0, -10],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-2.73892, 21.91215, -2.8],
|
||||
"size": [1.4, 3.35, 5.2],
|
||||
"uv": {
|
||||
"north": {"uv": [8, 43], "uv_size": [1, 3]},
|
||||
"east": {"uv": [29, 5], "uv_size": [5, 3]},
|
||||
"south": {"uv": [9, 43], "uv_size": [1, 3]},
|
||||
"west": {"uv": [29, 8], "uv_size": [5, 3]},
|
||||
"up": {"uv": [34, 41], "uv_size": [1, 5]},
|
||||
"down": {"uv": [0, 47], "uv_size": [1, -5]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.8, 24.5, -1.7],
|
||||
"size": [1.5, 1, 3],
|
||||
"uv": {
|
||||
"north": {"uv": [22, 43], "uv_size": [2, 1]},
|
||||
"east": {"uv": [16, 43], "uv_size": [3, 1]},
|
||||
"south": {"uv": [31, 43], "uv_size": [2, 1]},
|
||||
"west": {"uv": [43, 16], "uv_size": [3, 1]},
|
||||
"up": {"uv": [40, 12], "uv_size": [2, 3]},
|
||||
"down": {"uv": [14, 43], "uv_size": [2, -3]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone18",
|
||||
"parent": "armorBody",
|
||||
"pivot": [-1.3, 22.74474, -0.83494],
|
||||
"rotation": [0, 0, 10],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [1.33892, 21.91215, -2.8],
|
||||
"size": [1.4, 3.35, 5.2],
|
||||
"uv": {
|
||||
"north": {"uv": [25, 27], "uv_size": [1, 3]},
|
||||
"east": {"uv": [15, 27], "uv_size": [5, 3]},
|
||||
"south": {"uv": [36, 21], "uv_size": [1, 3]},
|
||||
"west": {"uv": [20, 27], "uv_size": [5, 3]},
|
||||
"up": {"uv": [30, 37], "uv_size": [1, 5]},
|
||||
"down": {"uv": [33, 46], "uv_size": [1, -5]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [1.3, 24.5, -1.7],
|
||||
"size": [1.5, 1, 3],
|
||||
"uv": {
|
||||
"north": {"uv": [20, 43], "uv_size": [2, 1]},
|
||||
"east": {"uv": [34, 29], "uv_size": [3, 1]},
|
||||
"south": {"uv": [43, 20], "uv_size": [2, 1]},
|
||||
"west": {"uv": [43, 15], "uv_size": [3, 1]},
|
||||
"up": {"uv": [40, 6], "uv_size": [2, 3]},
|
||||
"down": {"uv": [40, 12], "uv_size": [2, -3]}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
{
|
||||
"format_version": "1.12.0",
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.unknown",
|
||||
"texture_width": 64,
|
||||
"texture_height": 64,
|
||||
"visible_bounds_width": 2,
|
||||
"visible_bounds_height": 3.5,
|
||||
"visible_bounds_offset": [0, 1.25, 0]
|
||||
},
|
||||
"bones": [
|
||||
{
|
||||
"name": "bipedHead",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "armorHead",
|
||||
"parent": "bipedHead",
|
||||
"pivot": [0, 24, 0]
|
||||
},
|
||||
{
|
||||
"name": "bone10",
|
||||
"parent": "armorHead",
|
||||
"pivot": [0, 29.7, -7.1],
|
||||
"rotation": [9.5, 0, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-1, 29.7, -6.1],
|
||||
"size": [2, 2, 2],
|
||||
"pivot": [0, 29.7, -5.1],
|
||||
"rotation": [-10, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [45, 27], "uv_size": [2, 2]},
|
||||
"east": {"uv": [28, 45], "uv_size": [2, 2]},
|
||||
"south": {"uv": [45, 29], "uv_size": [2, 2]},
|
||||
"west": {"uv": [30, 45], "uv_size": [2, 2]},
|
||||
"up": {"uv": [45, 31], "uv_size": [2, 2]},
|
||||
"down": {"uv": [32, 47], "uv_size": [2, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [1, 28.7, -6.1],
|
||||
"size": [3, 3, 2],
|
||||
"pivot": [2, 29.7, -5.1],
|
||||
"rotation": [-10, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 43], "uv_size": [3, 3]},
|
||||
"east": {"uv": [8, 45], "uv_size": [2, 3]},
|
||||
"south": {"uv": [45, 0], "uv_size": [3, 3]},
|
||||
"west": {"uv": [45, 9], "uv_size": [2, 3]},
|
||||
"up": {"uv": [10, 45], "uv_size": [3, 2]},
|
||||
"down": {"uv": [45, 14], "uv_size": [3, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4, 28.7, -6.1],
|
||||
"size": [3, 3, 2],
|
||||
"pivot": [-3, 29.7, -5.1],
|
||||
"rotation": [-10, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [45, 3], "uv_size": [3, 3]},
|
||||
"east": {"uv": [13, 45], "uv_size": [2, 3]},
|
||||
"south": {"uv": [45, 6], "uv_size": [3, 3]},
|
||||
"west": {"uv": [45, 14], "uv_size": [2, 3]},
|
||||
"up": {"uv": [15, 45], "uv_size": [3, 2]},
|
||||
"down": {"uv": [45, 19], "uv_size": [3, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.9, 29.6, -5.1],
|
||||
"size": [9.8, 1, 10.2],
|
||||
"inflate": 0.2,
|
||||
"pivot": [-3, 30.6, -5.1],
|
||||
"rotation": [-10, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [37, 26], "uv_size": [10, 1]},
|
||||
"east": {"uv": [44, 40], "uv_size": [10, 1]},
|
||||
"south": {"uv": [44, 41], "uv_size": [10, 1]},
|
||||
"west": {"uv": [44, 42], "uv_size": [10, 1]},
|
||||
"up": {"uv": [0, 0], "uv_size": [10, 10]},
|
||||
"down": {"uv": [0, 20], "uv_size": [10, -10]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone9",
|
||||
"parent": "armorHead",
|
||||
"pivot": [0, 30, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-4.6, 23.4, -4.6],
|
||||
"size": [9.2, 9.2, 9.2],
|
||||
"inflate": 0.1,
|
||||
"uv": {
|
||||
"north": {"uv": [10, 0], "uv_size": [9, 9]},
|
||||
"east": {"uv": [10, 9], "uv_size": [9, 9]},
|
||||
"south": {"uv": [10, 18], "uv_size": [9, 9]},
|
||||
"west": {"uv": [19, 0], "uv_size": [9, 9]},
|
||||
"up": {"uv": [19, 9], "uv_size": [9, 9]},
|
||||
"down": {"uv": [19, 27], "uv_size": [9, -9]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.6, 23.4, -4.6],
|
||||
"size": [9.2, 9.2, 9.2],
|
||||
"inflate": 0.3,
|
||||
"uv": {
|
||||
"north": {"uv": [0, 20], "uv_size": [9, 9]},
|
||||
"east": {"uv": [9, 27], "uv_size": [9, 9]},
|
||||
"south": {"uv": [18, 27], "uv_size": [9, 9]},
|
||||
"west": {"uv": [27, 27], "uv_size": [9, 9]},
|
||||
"up": {"uv": [28, 0], "uv_size": [9, 9]},
|
||||
"down": {"uv": [28, 18], "uv_size": [9, -9]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.6, 23.4, -4.6],
|
||||
"size": [9.2, 9.2, 9.2],
|
||||
"inflate": 0.6,
|
||||
"uv": {
|
||||
"north": {"uv": [28, 18], "uv_size": [9, 9]},
|
||||
"east": {"uv": [0, 29], "uv_size": [9, 9]},
|
||||
"south": {"uv": [9, 36], "uv_size": [9, 9]},
|
||||
"west": {"uv": [18, 36], "uv_size": [9, 9]},
|
||||
"up": {"uv": [27, 36], "uv_size": [9, 9]},
|
||||
"down": {"uv": [36, 36], "uv_size": [9, -9]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4, 24, -4.1],
|
||||
"size": [8, 8, 8],
|
||||
"inflate": 0.52,
|
||||
"uv": {
|
||||
"north": {"uv": [36, 36], "uv_size": [8, 8]},
|
||||
"east": {"uv": [37, 0], "uv_size": [8, 8]},
|
||||
"south": {"uv": [37, 8], "uv_size": [8, 8]},
|
||||
"west": {"uv": [37, 16], "uv_size": [8, 8]},
|
||||
"up": {"uv": [0, 38], "uv_size": [8, 8]},
|
||||
"down": {"uv": [36, 52], "uv_size": [8, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [5, 27.5, -1],
|
||||
"size": [1, 2, 5],
|
||||
"pivot": [5, 27.5, 0],
|
||||
"rotation": [-2.47864, -0.32621, -7.49294],
|
||||
"uv": {
|
||||
"north": {"uv": [9, 25], "uv_size": [1, 2]},
|
||||
"east": {"uv": [37, 24], "uv_size": [5, 2]},
|
||||
"south": {"uv": [8, 43], "uv_size": [1, 2]},
|
||||
"west": {"uv": [42, 24], "uv_size": [5, 2]},
|
||||
"up": {"uv": [9, 20], "uv_size": [1, 5]},
|
||||
"down": {"uv": [8, 43], "uv_size": [1, -5]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-6, 27.5, -1],
|
||||
"size": [1, 2, 5],
|
||||
"pivot": [-5, 27.5, 0],
|
||||
"rotation": [-2.47864, 0.32621, 7.49294],
|
||||
"uv": {
|
||||
"north": {"uv": [45, 33], "uv_size": [1, 2]},
|
||||
"east": {"uv": [44, 36], "uv_size": [5, 2]},
|
||||
"south": {"uv": [34, 45], "uv_size": [1, 2]},
|
||||
"west": {"uv": [44, 38], "uv_size": [5, 2]},
|
||||
"up": {"uv": [18, 45], "uv_size": [1, 5]},
|
||||
"down": {"uv": [19, 50], "uv_size": [1, -5]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1, 29.8, -6],
|
||||
"size": [2, 2, 2],
|
||||
"pivot": [0, 29.8, -6],
|
||||
"rotation": [-7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [45, 19], "uv_size": [2, 2]},
|
||||
"east": {"uv": [20, 45], "uv_size": [2, 2]},
|
||||
"south": {"uv": [45, 21], "uv_size": [2, 2]},
|
||||
"west": {"uv": [22, 45], "uv_size": [2, 2]},
|
||||
"up": {"uv": [24, 45], "uv_size": [2, 2]},
|
||||
"down": {"uv": [26, 47], "uv_size": [2, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
127
src/main/resources/assets/armory_armor/geo/usmc_helmet.geo.json
Normal file
@@ -0,0 +1,127 @@
|
||||
{
|
||||
"format_version": "1.12.0",
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.unknown",
|
||||
"texture_width": 64,
|
||||
"texture_height": 64,
|
||||
"visible_bounds_width": 2,
|
||||
"visible_bounds_height": 3.5,
|
||||
"visible_bounds_offset": [0, 1.25, 0]
|
||||
},
|
||||
"bones": [
|
||||
{
|
||||
"name": "bipedHead",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "armorHead",
|
||||
"parent": "bipedHead",
|
||||
"pivot": [0, 24, 0]
|
||||
},
|
||||
{
|
||||
"name": "bone11",
|
||||
"parent": "armorHead",
|
||||
"pivot": [0, 30, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-4.6, 23.4, -4.6],
|
||||
"size": [9.2, 9.2, 9.2],
|
||||
"inflate": 0.1,
|
||||
"uv": {
|
||||
"north": {"uv": [0, 0], "uv_size": [9, 9]},
|
||||
"east": {"uv": [0, 9], "uv_size": [9, 9]},
|
||||
"south": {"uv": [9, 0], "uv_size": [9, 9]},
|
||||
"west": {"uv": [9, 9], "uv_size": [9, 9]},
|
||||
"up": {"uv": [0, 18], "uv_size": [9, 9]},
|
||||
"down": {"uv": [18, 9], "uv_size": [9, -9]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.6, 23.4, -4.6],
|
||||
"size": [9.2, 9.2, 9.2],
|
||||
"inflate": 0.3,
|
||||
"uv": {
|
||||
"north": {"uv": [9, 18], "uv_size": [9, 9]},
|
||||
"east": {"uv": [18, 9], "uv_size": [9, 9]},
|
||||
"south": {"uv": [18, 18], "uv_size": [9, 9]},
|
||||
"west": {"uv": [0, 27], "uv_size": [9, 9]},
|
||||
"up": {"uv": [27, 0], "uv_size": [9, 9]},
|
||||
"down": {"uv": [9, 36], "uv_size": [9, -9]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.6, 23.4, -4.6],
|
||||
"size": [9.2, 9.2, 9.2],
|
||||
"inflate": 0.6,
|
||||
"uv": {
|
||||
"north": {"uv": [27, 9], "uv_size": [9, 9]},
|
||||
"east": {"uv": [18, 27], "uv_size": [9, 9]},
|
||||
"south": {"uv": [27, 18], "uv_size": [9, 9]},
|
||||
"west": {"uv": [27, 27], "uv_size": [9, 9]},
|
||||
"up": {"uv": [0, 36], "uv_size": [9, 9]},
|
||||
"down": {"uv": [36, 9], "uv_size": [9, -9]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4, 24, -4.1],
|
||||
"size": [8, 8, 8],
|
||||
"inflate": 0.52,
|
||||
"uv": {
|
||||
"north": {"uv": [9, 36], "uv_size": [8, 8]},
|
||||
"east": {"uv": [36, 9], "uv_size": [8, 8]},
|
||||
"south": {"uv": [17, 36], "uv_size": [8, 8]},
|
||||
"west": {"uv": [36, 17], "uv_size": [8, 8]},
|
||||
"up": {"uv": [25, 36], "uv_size": [8, 8]},
|
||||
"down": {"uv": [36, 33], "uv_size": [8, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [5, 27.5, -1],
|
||||
"size": [1, 2, 5],
|
||||
"pivot": [5, 27.5, 0],
|
||||
"rotation": [-2.47864, -0.32621, -7.49294],
|
||||
"uv": {
|
||||
"north": {"uv": [37, 40], "uv_size": [1, 2]},
|
||||
"east": {"uv": [33, 36], "uv_size": [5, 2]},
|
||||
"south": {"uv": [37, 42], "uv_size": [1, 2]},
|
||||
"west": {"uv": [36, 33], "uv_size": [5, 2]},
|
||||
"up": {"uv": [38, 37], "uv_size": [1, 5]},
|
||||
"down": {"uv": [39, 42], "uv_size": [1, -5]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-6, 27.5, -1],
|
||||
"size": [1, 2, 5],
|
||||
"pivot": [-5, 27.5, 0],
|
||||
"rotation": [-2.47864, 0.32621, 7.49294],
|
||||
"uv": {
|
||||
"north": {"uv": [42, 37], "uv_size": [1, 2]},
|
||||
"east": {"uv": [33, 38], "uv_size": [5, 2]},
|
||||
"south": {"uv": [38, 42], "uv_size": [1, 2]},
|
||||
"west": {"uv": [38, 35], "uv_size": [5, 2]},
|
||||
"up": {"uv": [33, 40], "uv_size": [1, 5]},
|
||||
"down": {"uv": [34, 45], "uv_size": [1, -5]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1, 29.8, -6],
|
||||
"size": [2, 2, 2],
|
||||
"pivot": [0, 29.8, -6],
|
||||
"rotation": [-7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [35, 40], "uv_size": [2, 2]},
|
||||
"east": {"uv": [40, 37], "uv_size": [2, 2]},
|
||||
"south": {"uv": [40, 39], "uv_size": [2, 2]},
|
||||
"west": {"uv": [41, 33], "uv_size": [2, 2]},
|
||||
"up": {"uv": [40, 41], "uv_size": [2, 2]},
|
||||
"down": {"uv": [35, 44], "uv_size": [2, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
512
src/main/resources/assets/armory_armor/geo/usmc_vest.geo.json
Normal file
@@ -0,0 +1,512 @@
|
||||
{
|
||||
"format_version": "1.12.0",
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.unknown",
|
||||
"texture_width": 64,
|
||||
"texture_height": 64,
|
||||
"visible_bounds_width": 2,
|
||||
"visible_bounds_height": 3.5,
|
||||
"visible_bounds_offset": [0, 1.25, 0]
|
||||
},
|
||||
"bones": [
|
||||
{
|
||||
"name": "bipedHead",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "armorBody",
|
||||
"parent": "bipedHead",
|
||||
"pivot": [0, 24, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-2, 22.2, -2.7],
|
||||
"size": [4, 3, 4],
|
||||
"pivot": [0, 23.2, -0.7],
|
||||
"rotation": [15, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [34, 19], "uv_size": [4, 3]},
|
||||
"east": {"uv": [34, 22], "uv_size": [4, 3]},
|
||||
"south": {"uv": [34, 29], "uv_size": [4, 3]},
|
||||
"west": {"uv": [34, 32], "uv_size": [4, 3]},
|
||||
"up": {"uv": [5, 29], "uv_size": [4, 4]},
|
||||
"down": {"uv": [34, 19], "uv_size": [4, -4]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.5, 8.65, -3.525],
|
||||
"size": [5, 5, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [33, 5], "uv_size": [5, 5]},
|
||||
"east": {"uv": [5, 45], "uv_size": [1, 5]},
|
||||
"south": {"uv": [33, 10], "uv_size": [5, 5]},
|
||||
"west": {"uv": [6, 45], "uv_size": [1, 5]},
|
||||
"up": {"uv": [43, 32], "uv_size": [5, 1]},
|
||||
"down": {"uv": [43, 34], "uv_size": [5, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4, 17.65, -2.525],
|
||||
"size": [8, 6.8, 5.05],
|
||||
"uv": {
|
||||
"north": {"uv": [0, 0], "uv_size": [8, 7]},
|
||||
"east": {"uv": [17, 28], "uv_size": [5, 7]},
|
||||
"south": {"uv": [0, 7], "uv_size": [8, 7]},
|
||||
"west": {"uv": [0, 29], "uv_size": [5, 7]},
|
||||
"up": {"uv": [25, 25], "uv_size": [8, 5]},
|
||||
"down": {"uv": [9, 33], "uv_size": [8, -5]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-5, 13.675, -3],
|
||||
"size": [2, 5, 6],
|
||||
"pivot": [-4, 15.675, -1],
|
||||
"rotation": [0, 0, -3.5],
|
||||
"uv": {
|
||||
"north": {"uv": [27, 37], "uv_size": [2, 5]},
|
||||
"east": {"uv": [22, 30], "uv_size": [6, 5]},
|
||||
"south": {"uv": [29, 37], "uv_size": [2, 5]},
|
||||
"west": {"uv": [28, 30], "uv_size": [6, 5]},
|
||||
"up": {"uv": [0, 36], "uv_size": [2, 6]},
|
||||
"down": {"uv": [2, 42], "uv_size": [2, -6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [3, 13.675, -3],
|
||||
"size": [2, 5, 6],
|
||||
"pivot": [4, 15.675, -1],
|
||||
"rotation": [0, 0, 3.5],
|
||||
"uv": {
|
||||
"north": {"uv": [31, 37], "uv_size": [2, 5]},
|
||||
"east": {"uv": [33, 0], "uv_size": [6, 5]},
|
||||
"south": {"uv": [33, 37], "uv_size": [2, 5]},
|
||||
"west": {"uv": [5, 33], "uv_size": [6, 5]},
|
||||
"up": {"uv": [23, 37], "uv_size": [2, 6]},
|
||||
"down": {"uv": [25, 43], "uv_size": [2, -6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.49636, 13.53998, 2.13062],
|
||||
"size": [9, 5, 1],
|
||||
"pivot": [0.00364, 22.93998, 0.63062],
|
||||
"rotation": [2.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [16, 18], "uv_size": [9, 5]},
|
||||
"east": {"uv": [7, 45], "uv_size": [1, 5]},
|
||||
"south": {"uv": [16, 23], "uv_size": [9, 5]},
|
||||
"west": {"uv": [8, 45], "uv_size": [1, 5]},
|
||||
"up": {"uv": [38, 8], "uv_size": [9, 1]},
|
||||
"down": {"uv": [38, 10], "uv_size": [9, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.99636, 18.28926, 1.76724],
|
||||
"size": [8, 5.85, 1],
|
||||
"pivot": [-0.49636, 22.68926, 0.26724],
|
||||
"rotation": [7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [8, 0], "uv_size": [8, 6]},
|
||||
"east": {"uv": [26, 43], "uv_size": [1, 6]},
|
||||
"south": {"uv": [8, 6], "uv_size": [8, 6]},
|
||||
"west": {"uv": [43, 41], "uv_size": [1, 6]},
|
||||
"up": {"uv": [41, 36], "uv_size": [8, 1]},
|
||||
"down": {"uv": [42, 38], "uv_size": [8, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.99636, 18.28926, 1.76724],
|
||||
"size": [8, 5.85, 1],
|
||||
"inflate": 0.3,
|
||||
"pivot": [-0.49636, 22.68926, 0.26724],
|
||||
"rotation": [7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [8, 12], "uv_size": [8, 6]},
|
||||
"east": {"uv": [44, 16], "uv_size": [1, 6]},
|
||||
"south": {"uv": [0, 14], "uv_size": [8, 6]},
|
||||
"west": {"uv": [44, 26], "uv_size": [1, 6]},
|
||||
"up": {"uv": [42, 38], "uv_size": [8, 1]},
|
||||
"down": {"uv": [42, 40], "uv_size": [8, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.49636, 13.53998, 2.13062],
|
||||
"size": [9, 5, 1],
|
||||
"inflate": 0.3,
|
||||
"pivot": [0.00364, 22.93998, 0.63062],
|
||||
"rotation": [2.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [0, 24], "uv_size": [9, 5]},
|
||||
"east": {"uv": [9, 45], "uv_size": [1, 5]},
|
||||
"south": {"uv": [24, 0], "uv_size": [9, 5]},
|
||||
"west": {"uv": [10, 45], "uv_size": [1, 5]},
|
||||
"up": {"uv": [38, 10], "uv_size": [9, 1]},
|
||||
"down": {"uv": [38, 12], "uv_size": [9, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.99636, 18.28926, -2.76724],
|
||||
"size": [8, 5.85, 1],
|
||||
"inflate": 0.3,
|
||||
"pivot": [-0.49636, 22.68926, -0.26724],
|
||||
"rotation": [-7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [16, 0], "uv_size": [8, 6]},
|
||||
"east": {"uv": [35, 44], "uv_size": [1, 6]},
|
||||
"south": {"uv": [16, 6], "uv_size": [8, 6]},
|
||||
"west": {"uv": [36, 44], "uv_size": [1, 6]},
|
||||
"up": {"uv": [42, 40], "uv_size": [8, 1]},
|
||||
"down": {"uv": [43, 1], "uv_size": [8, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.49636, 13.53998, -3.13062],
|
||||
"size": [9, 5, 1],
|
||||
"inflate": 0.3,
|
||||
"pivot": [0.00364, 22.93998, -0.63062],
|
||||
"rotation": [-2.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [24, 5], "uv_size": [9, 5]},
|
||||
"east": {"uv": [11, 45], "uv_size": [1, 5]},
|
||||
"south": {"uv": [24, 10], "uv_size": [9, 5]},
|
||||
"west": {"uv": [12, 45], "uv_size": [1, 5]},
|
||||
"up": {"uv": [38, 12], "uv_size": [9, 1]},
|
||||
"down": {"uv": [38, 14], "uv_size": [9, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.99636, 18.28926, -2.76724],
|
||||
"size": [8, 5.85, 1],
|
||||
"pivot": [-0.49636, 22.68926, -0.26724],
|
||||
"rotation": [-7.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [16, 12], "uv_size": [8, 6]},
|
||||
"east": {"uv": [44, 41], "uv_size": [1, 6]},
|
||||
"south": {"uv": [8, 18], "uv_size": [8, 6]},
|
||||
"west": {"uv": [4, 45], "uv_size": [1, 6]},
|
||||
"up": {"uv": [43, 1], "uv_size": [8, 1]},
|
||||
"down": {"uv": [43, 3], "uv_size": [8, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.49636, 13.53998, -3.13062],
|
||||
"size": [9, 5, 1],
|
||||
"pivot": [0.00364, 22.93998, -0.63062],
|
||||
"rotation": [-2.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [25, 15], "uv_size": [9, 5]},
|
||||
"east": {"uv": [45, 16], "uv_size": [1, 5]},
|
||||
"south": {"uv": [25, 20], "uv_size": [9, 5]},
|
||||
"west": {"uv": [17, 45], "uv_size": [1, 5]},
|
||||
"up": {"uv": [38, 14], "uv_size": [9, 1]},
|
||||
"down": {"uv": [38, 16], "uv_size": [9, -1]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone14",
|
||||
"parent": "armorBody",
|
||||
"pivot": [-1, 2.1, 0],
|
||||
"rotation": [-5, 20, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [1, 14.5, 2],
|
||||
"size": [3, 3, 2],
|
||||
"pivot": [-1, 2.1, 0],
|
||||
"rotation": [-5.01215, 3.98475, -0.34919],
|
||||
"uv": {
|
||||
"north": {"uv": [35, 37], "uv_size": [3, 3]},
|
||||
"east": {"uv": [33, 42], "uv_size": [2, 3]},
|
||||
"south": {"uv": [4, 38], "uv_size": [3, 3]},
|
||||
"west": {"uv": [43, 3], "uv_size": [2, 3]},
|
||||
"up": {"uv": [22, 28], "uv_size": [3, 2]},
|
||||
"down": {"uv": [38, 35], "uv_size": [3, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [2, 17.5, 2.5],
|
||||
"size": [1, 1, 1],
|
||||
"pivot": [-1, 2.1, 0],
|
||||
"rotation": [-5.01215, 3.98475, -0.34919],
|
||||
"uv": {
|
||||
"north": {"uv": [15, 24], "uv_size": [1, 1]},
|
||||
"east": {"uv": [24, 15], "uv_size": [1, 1]},
|
||||
"south": {"uv": [24, 16], "uv_size": [1, 1]},
|
||||
"west": {"uv": [24, 17], "uv_size": [1, 1]},
|
||||
"up": {"uv": [15, 25], "uv_size": [1, 1]},
|
||||
"down": {"uv": [15, 27], "uv_size": [1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [1, 16.9, 2],
|
||||
"size": [3, 1, 2],
|
||||
"inflate": 0.1,
|
||||
"pivot": [-1, 2.1, 0],
|
||||
"rotation": [-5.01215, 3.98475, -0.34919],
|
||||
"uv": {
|
||||
"north": {"uv": [45, 5], "uv_size": [3, 1]},
|
||||
"east": {"uv": [39, 4], "uv_size": [2, 1]},
|
||||
"south": {"uv": [45, 21], "uv_size": [3, 1]},
|
||||
"west": {"uv": [45, 45], "uv_size": [2, 1]},
|
||||
"up": {"uv": [43, 6], "uv_size": [3, 2]},
|
||||
"down": {"uv": [10, 45], "uv_size": [3, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone15",
|
||||
"parent": "armorBody",
|
||||
"pivot": [1, 2.1, 0],
|
||||
"rotation": [-5, -20, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-4, 14.5, 2],
|
||||
"size": [3, 3, 2],
|
||||
"pivot": [1, 2.1, 0],
|
||||
"rotation": [-5.01215, -3.98475, 0.34919],
|
||||
"uv": {
|
||||
"north": {"uv": [38, 5], "uv_size": [3, 3]},
|
||||
"east": {"uv": [13, 43], "uv_size": [2, 3]},
|
||||
"south": {"uv": [7, 38], "uv_size": [3, 3]},
|
||||
"west": {"uv": [15, 43], "uv_size": [2, 3]},
|
||||
"up": {"uv": [17, 43], "uv_size": [3, 2]},
|
||||
"down": {"uv": [20, 45], "uv_size": [3, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3, 17.5, 2.5],
|
||||
"size": [1, 1, 1],
|
||||
"pivot": [1, 2.1, 0],
|
||||
"rotation": [-5.01215, -3.98475, 0.34919],
|
||||
"uv": {
|
||||
"north": {"uv": [15, 27], "uv_size": [1, 1]},
|
||||
"east": {"uv": [33, 29], "uv_size": [1, 1]},
|
||||
"south": {"uv": [4, 36], "uv_size": [1, 1]},
|
||||
"west": {"uv": [4, 37], "uv_size": [1, 1]},
|
||||
"up": {"uv": [10, 38], "uv_size": [1, 1]},
|
||||
"down": {"uv": [38, 25], "uv_size": [1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4, 16.9, 2],
|
||||
"size": [3, 1, 2],
|
||||
"inflate": 0.1,
|
||||
"pivot": [1, 2.1, 0],
|
||||
"rotation": [-5.01215, -3.98475, 0.34919],
|
||||
"uv": {
|
||||
"north": {"uv": [45, 43], "uv_size": [3, 1]},
|
||||
"east": {"uv": [0, 46], "uv_size": [2, 1]},
|
||||
"south": {"uv": [45, 44], "uv_size": [3, 1]},
|
||||
"west": {"uv": [2, 46], "uv_size": [2, 1]},
|
||||
"up": {"uv": [23, 43], "uv_size": [3, 2]},
|
||||
"down": {"uv": [43, 26], "uv_size": [3, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone23",
|
||||
"parent": "armorBody",
|
||||
"pivot": [0, 3.07953, -0.52156],
|
||||
"rotation": [-7.5, 0, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-3, 13.97953, 1.37844],
|
||||
"size": [6, 4, 2.3],
|
||||
"inflate": 0.1,
|
||||
"uv": {
|
||||
"north": {"uv": [0, 20], "uv_size": [6, 4]},
|
||||
"east": {"uv": [6, 20], "uv_size": [2, 4]},
|
||||
"south": {"uv": [9, 24], "uv_size": [6, 4]},
|
||||
"west": {"uv": [38, 16], "uv_size": [2, 4]},
|
||||
"up": {"uv": [17, 35], "uv_size": [6, 2]},
|
||||
"down": {"uv": [23, 37], "uv_size": [6, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3, 14.07953, 0.17844],
|
||||
"size": [6, 2, 0],
|
||||
"pivot": [0, 25.27953, -0.12156],
|
||||
"rotation": [23, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [29, 35], "uv_size": [6, 2]},
|
||||
"east": {"uv": [0, 0], "uv_size": [0, 2]},
|
||||
"south": {"uv": [35, 35], "uv_size": [6, 2]},
|
||||
"west": {"uv": [0, 0], "uv_size": [0, 2]},
|
||||
"up": {"uv": [0, 0], "uv_size": [6, 0]},
|
||||
"down": {"uv": [0, 0], "uv_size": [6, 0]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3, 13.97953, 1.37844],
|
||||
"size": [6, 4, 2.3],
|
||||
"uv": {
|
||||
"north": {"uv": [11, 33], "uv_size": [6, 4]},
|
||||
"east": {"uv": [38, 20], "uv_size": [2, 4]},
|
||||
"south": {"uv": [33, 25], "uv_size": [6, 4]},
|
||||
"west": {"uv": [38, 29], "uv_size": [2, 4]},
|
||||
"up": {"uv": [11, 37], "uv_size": [6, 2]},
|
||||
"down": {"uv": [17, 39], "uv_size": [6, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone4",
|
||||
"parent": "armorBody",
|
||||
"pivot": [1.2, 13.3, -3.2]
|
||||
},
|
||||
{
|
||||
"name": "bone8",
|
||||
"parent": "bone4",
|
||||
"pivot": [3.2, 13.35, -2.8],
|
||||
"rotation": [7.67995, -12.39135, -1.6575],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [2.2, 14.35, -3.8],
|
||||
"size": [2, 4, 2],
|
||||
"inflate": 0.1,
|
||||
"pivot": [3.2, 13.35, -2.8],
|
||||
"rotation": [5.12076, -12.45167, -1.10693],
|
||||
"uv": {
|
||||
"north": {"uv": [38, 37], "uv_size": [2, 4]},
|
||||
"east": {"uv": [39, 0], "uv_size": [2, 4]},
|
||||
"south": {"uv": [10, 39], "uv_size": [2, 4]},
|
||||
"west": {"uv": [12, 39], "uv_size": [2, 4]},
|
||||
"up": {"uv": [43, 34], "uv_size": [2, 2]},
|
||||
"down": {"uv": [44, 24], "uv_size": [2, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [2.2, 14.35, -3.8],
|
||||
"size": [2, 4, 2],
|
||||
"pivot": [3.2, 13.35, -2.8],
|
||||
"rotation": [5.12076, -12.45167, -1.10693],
|
||||
"uv": {
|
||||
"north": {"uv": [14, 39], "uv_size": [2, 4]},
|
||||
"east": {"uv": [16, 39], "uv_size": [2, 4]},
|
||||
"south": {"uv": [18, 39], "uv_size": [2, 4]},
|
||||
"west": {"uv": [20, 39], "uv_size": [2, 4]},
|
||||
"up": {"uv": [45, 3], "uv_size": [2, 2]},
|
||||
"down": {"uv": [18, 47], "uv_size": [2, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone2",
|
||||
"parent": "bone4",
|
||||
"pivot": [-3.2, 13.35, -2.8],
|
||||
"rotation": [7.67995, 12.39135, 1.6575],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-4.2, 14.35, -3.8],
|
||||
"size": [2, 4, 2],
|
||||
"inflate": 0.1,
|
||||
"pivot": [-3.2, 13.35, -2.8],
|
||||
"rotation": [5.12076, 12.45167, 1.10693],
|
||||
"uv": {
|
||||
"north": {"uv": [39, 24], "uv_size": [2, 4]},
|
||||
"east": {"uv": [40, 16], "uv_size": [2, 4]},
|
||||
"south": {"uv": [40, 20], "uv_size": [2, 4]},
|
||||
"west": {"uv": [40, 28], "uv_size": [2, 4]},
|
||||
"up": {"uv": [20, 45], "uv_size": [2, 2]},
|
||||
"down": {"uv": [22, 47], "uv_size": [2, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.2, 14.35, -3.8],
|
||||
"size": [2, 4, 2],
|
||||
"pivot": [-3.2, 13.35, -2.8],
|
||||
"rotation": [5.12076, 12.45167, 1.10693],
|
||||
"uv": {
|
||||
"north": {"uv": [35, 40], "uv_size": [2, 4]},
|
||||
"east": {"uv": [40, 37], "uv_size": [2, 4]},
|
||||
"south": {"uv": [41, 0], "uv_size": [2, 4]},
|
||||
"west": {"uv": [4, 41], "uv_size": [2, 4]},
|
||||
"up": {"uv": [24, 45], "uv_size": [2, 2]},
|
||||
"down": {"uv": [45, 28], "uv_size": [2, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone7",
|
||||
"parent": "bone4",
|
||||
"pivot": [1.1, 13.3, -3.2],
|
||||
"rotation": [7.52136, -4.97856, -0.32745],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [0.1, 14.3, -4.2],
|
||||
"size": [2, 4, 2],
|
||||
"pivot": [1.1, 13.3, -3.2],
|
||||
"rotation": [5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [41, 4], "uv_size": [2, 4]},
|
||||
"east": {"uv": [6, 41], "uv_size": [2, 4]},
|
||||
"south": {"uv": [8, 41], "uv_size": [2, 4]},
|
||||
"west": {"uv": [41, 24], "uv_size": [2, 4]},
|
||||
"up": {"uv": [45, 28], "uv_size": [2, 2]},
|
||||
"down": {"uv": [45, 32], "uv_size": [2, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.1, 14.3, -4.2],
|
||||
"size": [2, 4, 2],
|
||||
"inflate": 0.1,
|
||||
"pivot": [1.1, 13.3, -3.2],
|
||||
"rotation": [5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [41, 32], "uv_size": [2, 4]},
|
||||
"east": {"uv": [37, 41], "uv_size": [2, 4]},
|
||||
"south": {"uv": [39, 41], "uv_size": [2, 4]},
|
||||
"west": {"uv": [41, 41], "uv_size": [2, 4]},
|
||||
"up": {"uv": [33, 45], "uv_size": [2, 2]},
|
||||
"down": {"uv": [45, 36], "uv_size": [2, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone5",
|
||||
"parent": "bone4",
|
||||
"pivot": [-1.1, 13.3, -3.2],
|
||||
"rotation": [7.52136, 4.97856, 0.32745],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-2.1, 14.3, -4.2],
|
||||
"size": [2, 4, 2],
|
||||
"pivot": [-1.1, 13.3, -3.2],
|
||||
"rotation": [5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [0, 42], "uv_size": [2, 4]},
|
||||
"east": {"uv": [2, 42], "uv_size": [2, 4]},
|
||||
"south": {"uv": [42, 16], "uv_size": [2, 4]},
|
||||
"west": {"uv": [42, 20], "uv_size": [2, 4]},
|
||||
"up": {"uv": [37, 45], "uv_size": [2, 2]},
|
||||
"down": {"uv": [39, 47], "uv_size": [2, -2]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.1, 14.3, -4.2],
|
||||
"size": [2, 4, 2],
|
||||
"inflate": 0.1,
|
||||
"pivot": [-1.1, 13.3, -3.2],
|
||||
"rotation": [5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [27, 42], "uv_size": [2, 4]},
|
||||
"east": {"uv": [42, 28], "uv_size": [2, 4]},
|
||||
"south": {"uv": [29, 42], "uv_size": [2, 4]},
|
||||
"west": {"uv": [31, 42], "uv_size": [2, 4]},
|
||||
"up": {"uv": [41, 45], "uv_size": [2, 2]},
|
||||
"down": {"uv": [45, 43], "uv_size": [2, -2]}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
36
src/main/resources/assets/armory_armor/lang/en_us.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"item.armory_armor.usmcarmorhelmet_helmet": "USMC защитный шлем",
|
||||
"item.armory_armor.seal_leggings": "Seal униформа",
|
||||
"item.armory_armor.sealarmorhelmet_2_boots": "Sealarmorhelmet 2 Boots",
|
||||
"item.armory_armor.usmcarmor_chestplate": "USMC жилет",
|
||||
"item.armory_armor.sealarmor_chestplate": "SEAL жилет",
|
||||
"item.armory_armor.sealarmor_boots": "Sealarmor Boots",
|
||||
"item.armory_armor.sealarmorhelmet_chestplate": "Sealarmorhelmet Chestplate",
|
||||
"item.armory_armor.chicom_leggings": "Chicom Leggings",
|
||||
"item.armory_armor.sealarmorhelmet_2_leggings": "Sealarmorhelmet 2 Leggings",
|
||||
"item.armory_armor.sealarmorhelmet_2_chestplate": "Sealarmorhelmet 2 Chestplate",
|
||||
"item.armory_armor.usmc_leggings": "USMC унифомра",
|
||||
"item.armory_armor.sealarmor_leggings": "SEAL униформа",
|
||||
"item.armory_armor.alqaida_leggings": "Al quaida униформа",
|
||||
"item.armory_armor.al_quaida_2": "Al quaida униформа 2",
|
||||
"item.armory_armor.al_quaida_3": "Al quaida униформа 3",
|
||||
"item.armory_armor.usmcarmorhelmet_chestplate": "Usmcarmorhelmet Chestplate",
|
||||
"item.armory_armor.chicom_helmet": "Chicom Helmet",
|
||||
"item.armory_armor.sealarmorhelmet_2_helmet": "USMC 2 защитный шлем",
|
||||
"item.armory_armor.sealarmor_helmet": "Sealarmor Helmet",
|
||||
"item.armory_armor.usmc_2_leggings": "USMC 2 униформа",
|
||||
"item.armory_armor.chicom_chestplate": "Разгрузочный пояс",
|
||||
"item.armory_armor.sealarmorhelmet_helmet": "SEAL защитный шлем",
|
||||
"item.armory_armor.chicom_boots": "Chicom Boots",
|
||||
"item.armory_armor.usmcarmorhelmet_boots": "Usmcarmorhelmet Boots",
|
||||
"item.armory_armor.sealarmorhelmet_boots": "Sealarmorhelmet Boots",
|
||||
"item.armory_armor.usmcarmor_leggings": "Usmcarmor Leggings",
|
||||
"item.armory_armor.islamic_leggings": "Islamic униформа",
|
||||
"item.armory_armor.sealarmorhelmet_leggings": "Sealarmorhelmet Leggings",
|
||||
"item.armory_armor.usmcarmorhelmet_leggings": "Usmcarmorhelmet Leggings",
|
||||
"item.armory_armor.usmcarmor_helmet": "Usmcarmor Helmet",
|
||||
"item.armory_armor.usmcarmor_boots": "Usmcarmor Boots",
|
||||
"item_group.armory_armor.armory_armor": "Armory Armor",
|
||||
"item.armory_armor.chechen_1": "Chechen униформа 1",
|
||||
"item.armory_armor.chechen_2": "Chechen униформа 2"
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/al_quaida_2"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/al_quaida_3"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/ikonka8"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/chechen_1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/chechen_2"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/ikonka5"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/ikonka6"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
newmtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
map_Kd armory_armor:block/
|
||||
newmtl none
|
||||
@@ -0,0 +1,739 @@
|
||||
# Made in Blockbench 4.12.6
|
||||
mtllib SEAL helmet.mtl
|
||||
|
||||
o cube
|
||||
v 0.0625 2.0013307826469586 -0.2568758626790386
|
||||
v 0.0625 2.002421599584255 -0.38187110306206007
|
||||
v 0.0625 1.876335542263937 -0.25796667961633535
|
||||
v 0.0625 1.877426359201234 -0.3829619199993568
|
||||
v -0.0625 2.002421599584255 -0.38187110306206007
|
||||
v -0.0625 2.0013307826469586 -0.2568758626790386
|
||||
v -0.0625 1.877426359201234 -0.3829619199993568
|
||||
v -0.0625 1.876335542263937 -0.25796667961633535
|
||||
vt 0.0625 0.25
|
||||
vt 0.09375 0.25
|
||||
vt 0.09375 0.21875
|
||||
vt 0.0625 0.21875
|
||||
vt 0.75 0.890625
|
||||
vt 0.78125 0.890625
|
||||
vt 0.78125 0.859375
|
||||
vt 0.75 0.859375
|
||||
vt 0.125 0.25
|
||||
vt 0.15625 0.25
|
||||
vt 0.15625 0.21875
|
||||
vt 0.125 0.21875
|
||||
vt 0.75 0.859375
|
||||
vt 0.78125 0.859375
|
||||
vt 0.78125 0.828125
|
||||
vt 0.75 0.828125
|
||||
vt 0.1875 0.21875
|
||||
vt 0.15625 0.21875
|
||||
vt 0.15625 0.25
|
||||
vt 0.1875 0.25
|
||||
vt 0.78125 0.828125
|
||||
vt 0.75 0.828125
|
||||
vt 0.75 0.796875
|
||||
vt 0.78125 0.796875
|
||||
vn 0 0.008726535498373933 -0.9999619230641713
|
||||
vn 1 0 0
|
||||
vn 0 -0.008726535498373933 0.9999619230641713
|
||||
vn -1 0 0
|
||||
vn 0 0.9999619230641713 0.008726535498373933
|
||||
vn 0 -0.9999619230641713 -0.008726535498373933
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 4/4/1 7/3/1 5/2/1 2/1/1
|
||||
f 3/8/2 4/7/2 2/6/2 1/5/2
|
||||
f 8/12/3 3/11/3 1/10/3 6/9/3
|
||||
f 7/16/4 8/15/4 6/14/4 5/13/4
|
||||
f 6/20/5 1/19/5 2/18/5 5/17/5
|
||||
f 7/24/6 4/23/6 3/22/6 8/21/6
|
||||
o cube
|
||||
v -0.0625 2.0013307826469586 -0.2568758626790386
|
||||
v -0.0625 2.002421599584255 -0.38187110306206007
|
||||
v -0.0625 1.8138379220724263 -0.2585120880849837
|
||||
v -0.0625 1.814928739009723 -0.38350732846800517
|
||||
v -0.25 2.002421599584255 -0.38187110306206007
|
||||
v -0.25 2.0013307826469586 -0.2568758626790386
|
||||
v -0.25 1.814928739009723 -0.38350732846800517
|
||||
v -0.25 1.8138379220724263 -0.2585120880849837
|
||||
vt 0.703125 0.703125
|
||||
vt 0.75 0.703125
|
||||
vt 0.75 0.65625
|
||||
vt 0.703125 0.65625
|
||||
vt 0.703125 0.578125
|
||||
vt 0.734375 0.578125
|
||||
vt 0.734375 0.53125
|
||||
vt 0.703125 0.53125
|
||||
vt 0.3125 0.296875
|
||||
vt 0.359375 0.296875
|
||||
vt 0.359375 0.25
|
||||
vt 0.3125 0.25
|
||||
vt 0.453125 0.296875
|
||||
vt 0.484375 0.296875
|
||||
vt 0.484375 0.25
|
||||
vt 0.453125 0.25
|
||||
vt 0.75 0.5
|
||||
vt 0.703125 0.5
|
||||
vt 0.703125 0.53125
|
||||
vt 0.75 0.53125
|
||||
vt 0.53125 0.296875
|
||||
vt 0.484375 0.296875
|
||||
vt 0.484375 0.265625
|
||||
vt 0.53125 0.265625
|
||||
vn 0 0.008726535498373933 -0.9999619230641713
|
||||
vn 1 0 0
|
||||
vn 0 -0.008726535498373933 0.9999619230641713
|
||||
vn -1 0 0
|
||||
vn 0 0.9999619230641713 0.008726535498373933
|
||||
vn 0 -0.9999619230641713 -0.008726535498373933
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 12/28/7 15/27/7 13/26/7 10/25/7
|
||||
f 11/32/8 12/31/8 10/30/8 9/29/8
|
||||
f 16/36/9 11/35/9 9/34/9 14/33/9
|
||||
f 15/40/10 16/39/10 14/38/10 13/37/10
|
||||
f 14/44/11 9/43/11 10/42/11 13/41/11
|
||||
f 15/48/12 12/47/12 11/46/12 16/45/12
|
||||
o cube
|
||||
v 0.25 2.0013307826469586 -0.2568758626790386
|
||||
v 0.25 2.002421599584255 -0.38187110306206007
|
||||
v 0.25 1.8138379220724263 -0.2585120880849837
|
||||
v 0.25 1.814928739009723 -0.38350732846800517
|
||||
v 0.0625 2.002421599584255 -0.38187110306206007
|
||||
v 0.0625 2.0013307826469586 -0.2568758626790386
|
||||
v 0.0625 1.814928739009723 -0.38350732846800517
|
||||
v 0.0625 1.8138379220724263 -0.2585120880849837
|
||||
vt 0.359375 0.296875
|
||||
vt 0.40625 0.296875
|
||||
vt 0.40625 0.25
|
||||
vt 0.359375 0.25
|
||||
vt 0.703125 0.5
|
||||
vt 0.734375 0.5
|
||||
vt 0.734375 0.453125
|
||||
vt 0.703125 0.453125
|
||||
vt 0.40625 0.296875
|
||||
vt 0.453125 0.296875
|
||||
vt 0.453125 0.25
|
||||
vt 0.40625 0.25
|
||||
vt 0.53125 0.296875
|
||||
vt 0.5625 0.296875
|
||||
vt 0.5625 0.25
|
||||
vt 0.53125 0.25
|
||||
vt 0.046875 0.25
|
||||
vt 0 0.25
|
||||
vt 0 0.28125
|
||||
vt 0.046875 0.28125
|
||||
vt 0.09375 0.28125
|
||||
vt 0.046875 0.28125
|
||||
vt 0.046875 0.25
|
||||
vt 0.09375 0.25
|
||||
vn 0 0.008726535498373933 -0.9999619230641713
|
||||
vn 1 0 0
|
||||
vn 0 -0.008726535498373933 0.9999619230641713
|
||||
vn -1 0 0
|
||||
vn 0 0.9999619230641713 0.008726535498373933
|
||||
vn 0 -0.9999619230641713 -0.008726535498373933
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 20/52/13 23/51/13 21/50/13 18/49/13
|
||||
f 19/56/14 20/55/14 18/54/14 17/53/14
|
||||
f 24/60/15 19/59/15 17/58/15 22/57/15
|
||||
f 23/64/16 24/63/16 22/62/16 21/61/16
|
||||
f 22/68/17 17/67/17 18/66/17 21/65/17
|
||||
f 23/72/18 20/71/18 19/70/18 24/69/18
|
||||
o cube
|
||||
v 0.3187499999999999 1.9391867917834145 0.32033610404793167
|
||||
v 0.3187499999999999 1.9449681215510872 -0.3421386699820818
|
||||
v 0.3187499999999999 1.8516901235152996 0.3195725321918239
|
||||
v 0.3187499999999999 1.8574714532829724 -0.3429022418381895
|
||||
v -0.31874999999999987 1.9449681215510872 -0.3421386699820818
|
||||
v -0.31874999999999987 1.9391867917834145 0.32033610404793167
|
||||
v -0.31874999999999987 1.8574714532829724 -0.3429022418381895
|
||||
v -0.31874999999999987 1.8516901235152996 0.3195725321918239
|
||||
vt 0.578125 0.59375
|
||||
vt 0.734375 0.59375
|
||||
vt 0.734375 0.578125
|
||||
vt 0.578125 0.578125
|
||||
vt 0.703125 0.9375
|
||||
vt 0.859375 0.9375
|
||||
vt 0.859375 0.921875
|
||||
vt 0.703125 0.921875
|
||||
vt 0.703125 0.921875
|
||||
vt 0.859375 0.921875
|
||||
vt 0.859375 0.90625
|
||||
vt 0.703125 0.90625
|
||||
vt 0.703125 0.90625
|
||||
vt 0.859375 0.90625
|
||||
vt 0.859375 0.890625
|
||||
vt 0.703125 0.890625
|
||||
vt 0.15625 0.84375
|
||||
vt 0 0.84375
|
||||
vt 0 1
|
||||
vt 0.15625 1
|
||||
vt 0.15625 0.84375
|
||||
vt 0 0.84375
|
||||
vt 0 0.6875
|
||||
vt 0.15625 0.6875
|
||||
vn 0 0.008726535498373933 -0.9999619230641713
|
||||
vn 1 0 0
|
||||
vn 0 -0.008726535498373933 0.9999619230641713
|
||||
vn -1 0 0
|
||||
vn 0 0.9999619230641713 0.008726535498373933
|
||||
vn 0 -0.9999619230641713 -0.008726535498373933
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 28/76/19 31/75/19 29/74/19 26/73/19
|
||||
f 27/80/20 28/79/20 26/78/20 25/77/20
|
||||
f 32/84/21 27/83/21 25/82/21 30/81/21
|
||||
f 31/88/22 32/87/22 30/86/22 29/85/22
|
||||
f 30/92/23 25/91/23 26/90/23 29/89/23
|
||||
f 31/96/24 28/95/24 27/94/24 32/93/24
|
||||
o cube
|
||||
v 0.29 2.04 0.29
|
||||
v 0.29 2.04 -0.29
|
||||
v 0.29 1.46 0.29
|
||||
v 0.29 1.46 -0.29
|
||||
v -0.29 2.04 -0.29
|
||||
v -0.29 2.04 0.29
|
||||
v -0.29 1.46 -0.29
|
||||
v -0.29 1.46 0.29
|
||||
vt 0.15625 1
|
||||
vt 0.296875 1
|
||||
vt 0.296875 0.859375
|
||||
vt 0.15625 0.859375
|
||||
vt 0.15625 0.859375
|
||||
vt 0.296875 0.859375
|
||||
vt 0.296875 0.71875
|
||||
vt 0.15625 0.71875
|
||||
vt 0.15625 0.71875
|
||||
vt 0.296875 0.71875
|
||||
vt 0.296875 0.578125
|
||||
vt 0.15625 0.578125
|
||||
vt 0.296875 1
|
||||
vt 0.4375 1
|
||||
vt 0.4375 0.859375
|
||||
vt 0.296875 0.859375
|
||||
vt 0.4375 0.71875
|
||||
vt 0.296875 0.71875
|
||||
vt 0.296875 0.859375
|
||||
vt 0.4375 0.859375
|
||||
vt 0.4375 0.71875
|
||||
vt 0.296875 0.71875
|
||||
vt 0.296875 0.578125
|
||||
vt 0.4375 0.578125
|
||||
vn 0 0 -1
|
||||
vn 1 0 0
|
||||
vn 0 0 1
|
||||
vn -1 0 0
|
||||
vn 0 1 0
|
||||
vn 0 -1 0
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 36/100/25 39/99/25 37/98/25 34/97/25
|
||||
f 35/104/26 36/103/26 34/102/26 33/101/26
|
||||
f 40/108/27 35/107/27 33/106/27 38/105/27
|
||||
f 39/112/28 40/111/28 38/110/28 37/109/28
|
||||
f 38/116/29 33/115/29 34/114/29 37/113/29
|
||||
f 39/120/30 36/119/30 35/118/30 40/117/30
|
||||
o cube
|
||||
v 0.29874999999999996 2.04875 0.29874999999999996
|
||||
v 0.29874999999999996 2.04875 -0.29874999999999996
|
||||
v 0.29874999999999996 1.45125 0.29874999999999996
|
||||
v 0.29874999999999996 1.45125 -0.29874999999999996
|
||||
v -0.29874999999999996 2.04875 -0.29874999999999996
|
||||
v -0.29874999999999996 2.04875 0.29874999999999996
|
||||
v -0.29874999999999996 1.45125 -0.29874999999999996
|
||||
v -0.29874999999999996 1.45125 0.29874999999999996
|
||||
vt 0.4375 0.71875
|
||||
vt 0.578125 0.71875
|
||||
vt 0.578125 0.578125
|
||||
vt 0.4375 0.578125
|
||||
vt 0 0.546875
|
||||
vt 0.140625 0.546875
|
||||
vt 0.140625 0.40625
|
||||
vt 0 0.40625
|
||||
vt 0.140625 0.4375
|
||||
vt 0.28125 0.4375
|
||||
vt 0.28125 0.296875
|
||||
vt 0.140625 0.296875
|
||||
vt 0.28125 0.4375
|
||||
vt 0.421875 0.4375
|
||||
vt 0.421875 0.296875
|
||||
vt 0.28125 0.296875
|
||||
vt 0.5625 0.296875
|
||||
vt 0.421875 0.296875
|
||||
vt 0.421875 0.4375
|
||||
vt 0.5625 0.4375
|
||||
vt 0.703125 0.578125
|
||||
vt 0.5625 0.578125
|
||||
vt 0.5625 0.4375
|
||||
vt 0.703125 0.4375
|
||||
vn 0 0 -1
|
||||
vn 1 0 0
|
||||
vn 0 0 1
|
||||
vn -1 0 0
|
||||
vn 0 1 0
|
||||
vn 0 -1 0
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 44/124/31 47/123/31 45/122/31 42/121/31
|
||||
f 43/128/32 44/127/32 42/126/32 41/125/32
|
||||
f 48/132/33 43/131/33 41/130/33 46/129/33
|
||||
f 47/136/34 48/135/34 46/134/34 45/133/34
|
||||
f 46/140/35 41/139/35 42/138/35 45/137/35
|
||||
f 47/144/36 44/143/36 43/142/36 48/141/36
|
||||
o cube
|
||||
v 0.2825 2.0324999999999998 0.27625
|
||||
v 0.2825 2.0324999999999998 -0.28874999999999995
|
||||
v 0.2825 1.4675 0.27625
|
||||
v 0.2825 1.4675 -0.28874999999999995
|
||||
v -0.2825 2.0324999999999998 -0.28874999999999995
|
||||
v -0.2825 2.0324999999999998 0.27625
|
||||
v -0.2825 1.4675 -0.28874999999999995
|
||||
v -0.2825 1.4675 0.27625
|
||||
vt 0.5625 0.4375
|
||||
vt 0.6875 0.4375
|
||||
vt 0.6875 0.3125
|
||||
vt 0.5625 0.3125
|
||||
vt 0.578125 1
|
||||
vt 0.703125 1
|
||||
vt 0.703125 0.875
|
||||
vt 0.578125 0.875
|
||||
vt 0.578125 0.875
|
||||
vt 0.703125 0.875
|
||||
vt 0.703125 0.75
|
||||
vt 0.578125 0.75
|
||||
vt 0.578125 0.75
|
||||
vt 0.703125 0.75
|
||||
vt 0.703125 0.625
|
||||
vt 0.578125 0.625
|
||||
vt 0.125 0.28125
|
||||
vt 0 0.28125
|
||||
vt 0 0.40625
|
||||
vt 0.125 0.40625
|
||||
vt 0.6875 0.3125
|
||||
vt 0.5625 0.3125
|
||||
vt 0.5625 0.1875
|
||||
vt 0.6875 0.1875
|
||||
vn 0 0 -1
|
||||
vn 1 0 0
|
||||
vn 0 0 1
|
||||
vn -1 0 0
|
||||
vn 0 1 0
|
||||
vn 0 -1 0
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 52/148/37 55/147/37 53/146/37 50/145/37
|
||||
f 51/152/38 52/151/38 50/150/38 49/149/38
|
||||
f 56/156/39 51/155/39 49/154/39 54/153/39
|
||||
f 55/160/40 56/159/40 54/158/40 53/157/40
|
||||
f 54/164/41 49/163/41 50/162/41 53/161/41
|
||||
f 55/168/42 52/167/42 51/166/42 56/165/42
|
||||
o cube
|
||||
v 0.31875 2.06875 0.31875
|
||||
v 0.31875 2.06875 -0.31875
|
||||
v 0.31875 1.43125 0.31875
|
||||
v 0.31875 1.43125 -0.31875
|
||||
v -0.3187500000000001 2.06875 -0.31875
|
||||
v -0.3187500000000001 2.06875 0.31875
|
||||
v -0.3187500000000001 1.43125 -0.31875
|
||||
v -0.3187500000000001 1.43125 0.31875
|
||||
vt 0 0.6875
|
||||
vt 0.140625 0.6875
|
||||
vt 0.140625 0.546875
|
||||
vt 0 0.546875
|
||||
vt 0.140625 0.578125
|
||||
vt 0.28125 0.578125
|
||||
vt 0.28125 0.4375
|
||||
vt 0.140625 0.4375
|
||||
vt 0.28125 0.578125
|
||||
vt 0.421875 0.578125
|
||||
vt 0.421875 0.4375
|
||||
vt 0.28125 0.4375
|
||||
vt 0.421875 0.578125
|
||||
vt 0.5625 0.578125
|
||||
vt 0.5625 0.4375
|
||||
vt 0.421875 0.4375
|
||||
vt 0.578125 0.859375
|
||||
vt 0.4375 0.859375
|
||||
vt 0.4375 1
|
||||
vt 0.578125 1
|
||||
vt 0.578125 0.859375
|
||||
vt 0.4375 0.859375
|
||||
vt 0.4375 0.71875
|
||||
vt 0.578125 0.71875
|
||||
vn 0 0 -1
|
||||
vn 1 0 0
|
||||
vn 0 0 1
|
||||
vn -1 0 0
|
||||
vn 0 1 0
|
||||
vn 0 -1 0
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 60/172/43 63/171/43 61/170/43 58/169/43
|
||||
f 59/176/44 60/175/44 58/174/44 57/173/44
|
||||
f 64/180/45 59/179/45 57/178/45 62/177/45
|
||||
f 63/184/46 64/183/46 62/182/46 61/181/46
|
||||
f 62/188/47 57/187/47 58/186/47 61/185/47
|
||||
f 63/192/48 60/191/48 59/190/48 64/189/48
|
||||
o cube
|
||||
v -0.29618422597249355 1.8191578063526626 0.255167832577919
|
||||
v -0.29618422597249355 1.83278886490433 -0.0570347366664116
|
||||
v -0.3125 1.6953451531586654 0.24976205539546445
|
||||
v -0.3125 1.7089762117103329 -0.06244051384886611
|
||||
v -0.35814952980835646 1.840938987417286 -0.05667889463267606
|
||||
v -0.35814952980835646 1.8273079288656184 0.2555236746116545
|
||||
v -0.3744653038358629 1.7171263342232888 -0.06208467181513057
|
||||
v -0.3744653038358629 1.7034952756716213 0.2501178974292
|
||||
vt 0.140625 0.609375
|
||||
vt 0.15625 0.609375
|
||||
vt 0.15625 0.578125
|
||||
vt 0.140625 0.578125
|
||||
vt 0.578125 0.625
|
||||
vt 0.65625 0.625
|
||||
vt 0.65625 0.59375
|
||||
vt 0.578125 0.59375
|
||||
vt 0.125 0.328125
|
||||
vt 0.140625 0.328125
|
||||
vt 0.140625 0.296875
|
||||
vt 0.125 0.296875
|
||||
vt 0.65625 0.625
|
||||
vt 0.734375 0.625
|
||||
vt 0.734375 0.59375
|
||||
vt 0.65625 0.59375
|
||||
vt 0.15625 0.609375
|
||||
vt 0.140625 0.609375
|
||||
vt 0.140625 0.6875
|
||||
vt 0.15625 0.6875
|
||||
vt 0.140625 0.40625
|
||||
vt 0.125 0.40625
|
||||
vt 0.125 0.328125
|
||||
vt 0.140625 0.328125
|
||||
vn -1.7347234759768075e-18 0.043619387365336 -0.9990482215818579
|
||||
vn 0.9914448613738105 -0.13040196020729422 -0.005693472539768734
|
||||
vn 1.7347234759768075e-18 -0.043619387365336 0.9990482215818579
|
||||
vn -0.9914448613738105 0.13040196020729422 0.005693472539768734
|
||||
vn 0.13052619222005152 0.9905012255519768 0.04324621745963608
|
||||
vn -0.13052619222005152 -0.9905012255519768 -0.04324621745963608
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 68/196/49 71/195/49 69/194/49 66/193/49
|
||||
f 67/200/50 68/199/50 66/198/50 65/197/50
|
||||
f 72/204/51 67/203/51 65/202/51 70/201/51
|
||||
f 71/208/52 72/207/52 70/206/52 69/205/52
|
||||
f 70/212/53 65/211/53 66/210/53 69/209/53
|
||||
f 71/216/54 68/215/54 67/214/54 72/213/54
|
||||
o cube
|
||||
v 0.35814952980835646 1.8273079288656184 0.2555236746116545
|
||||
v 0.35814952980835646 1.840938987417286 -0.05667889463267606
|
||||
v 0.3744653038358629 1.7034952756716213 0.2501178974292
|
||||
v 0.3744653038358629 1.7171263342232888 -0.06208467181513057
|
||||
v 0.29618422597249355 1.83278886490433 -0.0570347366664116
|
||||
v 0.29618422597249355 1.8191578063526626 0.255167832577919
|
||||
v 0.3125 1.7089762117103329 -0.06244051384886611
|
||||
v 0.3125 1.6953451531586654 0.24976205539546445
|
||||
vt 0.375 0.25
|
||||
vt 0.390625 0.25
|
||||
vt 0.390625 0.21875
|
||||
vt 0.375 0.21875
|
||||
vt 0.703125 1
|
||||
vt 0.78125 1
|
||||
vt 0.78125 0.96875
|
||||
vt 0.703125 0.96875
|
||||
vt 0.390625 0.25
|
||||
vt 0.40625 0.25
|
||||
vt 0.40625 0.21875
|
||||
vt 0.390625 0.21875
|
||||
vt 0.703125 0.96875
|
||||
vt 0.78125 0.96875
|
||||
vt 0.78125 0.9375
|
||||
vt 0.703125 0.9375
|
||||
vt 0.109375 0.203125
|
||||
vt 0.09375 0.203125
|
||||
vt 0.09375 0.28125
|
||||
vt 0.109375 0.28125
|
||||
vt 0.125 0.28125
|
||||
vt 0.109375 0.28125
|
||||
vt 0.109375 0.203125
|
||||
vt 0.125 0.203125
|
||||
vn 1.7347234759768075e-18 0.043619387365336 -0.9990482215818579
|
||||
vn 0.9914448613738105 0.13040196020729422 0.005693472539768734
|
||||
vn -1.7347234759768075e-18 -0.043619387365336 0.9990482215818579
|
||||
vn -0.9914448613738105 -0.13040196020729422 -0.005693472539768734
|
||||
vn -0.13052619222005152 0.9905012255519768 0.04324621745963608
|
||||
vn 0.13052619222005152 -0.9905012255519768 -0.04324621745963608
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 76/220/55 79/219/55 77/218/55 74/217/55
|
||||
f 75/224/56 76/223/56 74/222/56 73/221/56
|
||||
f 80/228/57 75/227/57 73/226/57 78/225/57
|
||||
f 79/232/58 80/231/58 78/230/58 77/229/58
|
||||
f 78/236/59 73/235/59 74/234/59 77/233/59
|
||||
f 79/240/60 76/239/60 75/238/60 80/237/60
|
||||
o cube
|
||||
v 0.0625 1.9701148336442205 -0.23475361830076702
|
||||
v 0.0625 1.986430607671727 -0.35868422597249333
|
||||
v 0.0625 1.8461842259724943 -0.25106939232827347
|
||||
v 0.0625 1.8625000000000007 -0.3749999999999998
|
||||
v -0.0625 1.986430607671727 -0.35868422597249333
|
||||
v -0.0625 1.9701148336442205 -0.23475361830076702
|
||||
v -0.0625 1.8625000000000007 -0.3749999999999998
|
||||
v -0.0625 1.8461842259724943 -0.25106939232827347
|
||||
vt 0.734375 0.609375
|
||||
vt 0.765625 0.609375
|
||||
vt 0.765625 0.578125
|
||||
vt 0.734375 0.578125
|
||||
vt 0.734375 0.578125
|
||||
vt 0.765625 0.578125
|
||||
vt 0.765625 0.546875
|
||||
vt 0.734375 0.546875
|
||||
vt 0.484375 0.265625
|
||||
vt 0.515625 0.265625
|
||||
vt 0.515625 0.234375
|
||||
vt 0.484375 0.234375
|
||||
vt 0.734375 0.5
|
||||
vt 0.765625 0.5
|
||||
vt 0.765625 0.46875
|
||||
vt 0.734375 0.46875
|
||||
vt 0.03125 0.21875
|
||||
vt 0 0.21875
|
||||
vt 0 0.25
|
||||
vt 0.03125 0.25
|
||||
vt 0.0625 0.25
|
||||
vt 0.03125 0.25
|
||||
vt 0.03125 0.21875
|
||||
vt 0.0625 0.21875
|
||||
vn 0 0.13052619222005157 -0.9914448613738104
|
||||
vn 1 0 0
|
||||
vn 0 -0.13052619222005157 0.9914448613738104
|
||||
vn -1 0 0
|
||||
vn 0 0.9914448613738104 0.13052619222005157
|
||||
vn 0 -0.9914448613738104 -0.13052619222005157
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 84/244/61 87/243/61 85/242/61 82/241/61
|
||||
f 83/248/62 84/247/62 82/246/62 81/245/62
|
||||
f 88/252/63 83/251/63 81/250/63 86/249/63
|
||||
f 87/256/64 88/255/64 86/254/64 85/253/64
|
||||
f 86/260/65 81/259/65 82/258/65 85/257/65
|
||||
f 87/264/66 84/263/66 83/262/66 88/261/66
|
||||
o cube
|
||||
v -0.22373397375735601 1.8064382988488867 0.13826837625060115
|
||||
v -0.23378239123047978 1.7855815456334638 -0.04779686809018582
|
||||
v -0.2500069968076749 1.622106013532391 0.16034974508940808
|
||||
v -0.2600554142807987 1.6012492603169681 -0.02571549925137888
|
||||
v -0.2955750621066383 1.7946666643283957 -0.04547815200369429
|
||||
v -0.2855266446335145 1.8155234175438184 0.1405870923370927
|
||||
v -0.3218480851569572 1.6103343790119 -0.02339678316488733
|
||||
v -0.31179966768383344 1.6311911322273227 0.16266846117589964
|
||||
vt 0.21875 0.25
|
||||
vt 0.234375 0.25
|
||||
vt 0.234375 0.203125
|
||||
vt 0.21875 0.203125
|
||||
vt 0.703125 0.84375
|
||||
vt 0.75 0.84375
|
||||
vt 0.75 0.796875
|
||||
vt 0.703125 0.796875
|
||||
vt 0.234375 0.25
|
||||
vt 0.25 0.25
|
||||
vt 0.25 0.203125
|
||||
vt 0.234375 0.203125
|
||||
vt 0.171875 0.296875
|
||||
vt 0.21875 0.296875
|
||||
vt 0.21875 0.25
|
||||
vt 0.171875 0.25
|
||||
vt 0.265625 0.203125
|
||||
vt 0.25 0.203125
|
||||
vt 0.25 0.25
|
||||
vt 0.265625 0.25
|
||||
vt 0.765625 0.75
|
||||
vt 0.75 0.75
|
||||
vt 0.75 0.703125
|
||||
vt 0.765625 0.703125
|
||||
vn -0.0535915598566601 -0.11123601714892141 -0.9923479698175307
|
||||
vn 0.9886827340185362 -0.145361899118907 -0.03709945738386479
|
||||
vn 0.0535915598566601 0.11123601714892141 0.9923479698175307
|
||||
vn -0.9886827340185362 0.145361899118907 0.03709945738386479
|
||||
vn 0.1401227896017008 0.983105521687977 -0.11776730047363708
|
||||
vn -0.1401227896017008 -0.983105521687977 0.11776730047363708
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 92/268/67 95/267/67 93/266/67 90/265/67
|
||||
f 91/272/68 92/271/68 90/270/68 89/269/68
|
||||
f 96/276/69 91/275/69 89/274/69 94/273/69
|
||||
f 95/280/70 96/279/70 94/278/70 93/277/70
|
||||
f 94/284/71 89/283/71 90/282/71 93/281/71
|
||||
f 95/288/72 92/287/72 91/286/72 96/285/72
|
||||
o cube
|
||||
v -0.11939276925548908 1.6933861056047452 0.0581073650986635
|
||||
v -0.10169876650018486 1.6132232238068367 -0.3077967680405371
|
||||
v -0.12208162849579979 1.632363555142619 0.07134626124158512
|
||||
v -0.10438762574049557 1.5522006733447107 -0.2945578718976155
|
||||
v -0.35118859578474165 1.6212191240162146 -0.32161308677616157
|
||||
v -0.3688825985400459 1.7013820058141231 0.04429104636303903
|
||||
v -0.35387745502505236 1.5601965735540886 -0.30837419063323995
|
||||
v -0.3715714577803566 1.640359455351997 0.05752994250596065
|
||||
vt 0.703125 0.453125
|
||||
vt 0.765625 0.453125
|
||||
vt 0.765625 0.4375
|
||||
vt 0.703125 0.4375
|
||||
vt 0.703125 0.65625
|
||||
vt 0.796875 0.65625
|
||||
vt 0.796875 0.640625
|
||||
vt 0.703125 0.640625
|
||||
vt 0.734375 0.625
|
||||
vt 0.796875 0.625
|
||||
vt 0.796875 0.609375
|
||||
vt 0.734375 0.609375
|
||||
vt 0.703125 0.640625
|
||||
vt 0.796875 0.640625
|
||||
vt 0.796875 0.625
|
||||
vt 0.703125 0.625
|
||||
vt 0.75 0.34375
|
||||
vt 0.6875 0.34375
|
||||
vt 0.6875 0.4375
|
||||
vt 0.75 0.4375
|
||||
vt 0.75 0.34375
|
||||
vt 0.6875 0.34375
|
||||
vt 0.6875 0.25
|
||||
vt 0.75 0.25
|
||||
vn 0.04718400734747798 -0.21376768479442268 -0.9757443550378683
|
||||
vn 0.9979593171382273 -0.031983600837511686 0.055265274942497875
|
||||
vn -0.04718400734747798 0.21376768479442268 0.9757443550378683
|
||||
vn -0.9979593171382273 0.031983600837511686 -0.055265274942497875
|
||||
vn 0.04302174784497145 0.9763608073940182 -0.21182233828674588
|
||||
vn -0.04302174784497145 -0.9763608073940182 0.21182233828674588
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 100/292/73 103/291/73 101/290/73 98/289/73
|
||||
f 99/296/74 100/295/74 98/294/74 97/293/74
|
||||
f 104/300/75 99/299/75 97/298/75 102/297/75
|
||||
f 103/304/76 104/303/76 102/302/76 101/301/76
|
||||
f 102/308/77 97/307/77 98/306/77 101/305/77
|
||||
f 103/312/78 100/311/78 99/310/78 104/309/78
|
||||
o cube
|
||||
v 0.2978851788087462 1.8173404412828047 0.14105083555439102
|
||||
v 0.30793359628187 1.796483688067382 -0.04501440878639598
|
||||
v 0.32415820185906513 1.633008155966309 0.16313220439319798
|
||||
v 0.3342066193321889 1.6121514027508863 -0.022933039947589023
|
||||
v 0.24614092540571147 1.7873985693724503 -0.047333124872887516
|
||||
v 0.23609250793258774 1.808255322587873 0.13873211946789946
|
||||
v 0.2724139484560304 1.6030662840559546 -0.025251756034080572
|
||||
v 0.2623655309829066 1.6239230372713773 0.16081348830670641
|
||||
vt 0.515625 0.265625
|
||||
vt 0.53125 0.265625
|
||||
vt 0.53125 0.21875
|
||||
vt 0.515625 0.21875
|
||||
vt 0.703125 0.890625
|
||||
vt 0.75 0.890625
|
||||
vt 0.75 0.84375
|
||||
vt 0.703125 0.84375
|
||||
vt 0.1875 0.25
|
||||
vt 0.203125 0.25
|
||||
vt 0.203125 0.203125
|
||||
vt 0.1875 0.203125
|
||||
vt 0.125 0.296875
|
||||
vt 0.171875 0.296875
|
||||
vt 0.171875 0.25
|
||||
vt 0.125 0.25
|
||||
vt 0.21875 0.203125
|
||||
vt 0.203125 0.203125
|
||||
vt 0.203125 0.25
|
||||
vt 0.21875 0.25
|
||||
vt 0.765625 0.796875
|
||||
vt 0.75 0.796875
|
||||
vt 0.75 0.75
|
||||
vt 0.765625 0.75
|
||||
vn 0.0535915598566601 -0.11123601714892141 -0.9923479698175307
|
||||
vn 0.9886827340185362 0.145361899118907 0.03709945738386479
|
||||
vn -0.0535915598566601 0.11123601714892141 0.9923479698175307
|
||||
vn -0.9886827340185362 -0.145361899118907 -0.03709945738386479
|
||||
vn -0.1401227896017008 0.983105521687977 -0.11776730047363708
|
||||
vn 0.1401227896017008 -0.983105521687977 0.11776730047363708
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 108/316/79 111/315/79 109/314/79 106/313/79
|
||||
f 107/320/80 108/319/80 106/318/80 105/317/80
|
||||
f 112/324/81 107/323/81 105/322/81 110/321/81
|
||||
f 111/328/82 112/327/82 110/326/82 109/325/82
|
||||
f 110/332/83 105/331/83 106/330/83 109/329/83
|
||||
f 111/336/84 108/335/84 107/334/84 112/333/84
|
||||
o cube
|
||||
v -0.25356106033608883 1.8160034690750968 0.14443012025994795
|
||||
v -0.2642793723074208 1.7937562656453125 -0.05403947370355819
|
||||
v -0.28158561825642897 1.6193823647375014 0.16798358035467537
|
||||
v -0.292303930227761 1.5971351613077172 -0.030486013608830756
|
||||
v -0.338430577358811 1.8046584080792307 -0.05125701439976835
|
||||
v -0.32771226538747894 1.826905611509015 0.1472125795637378
|
||||
v -0.3664551352791512 1.6080373037416351 -0.0277035543050409
|
||||
v -0.35573682330781914 1.6302845071714194 0.17076603965846524
|
||||
vt 0.265625 0.25
|
||||
vt 0.28125 0.25
|
||||
vt 0.28125 0.203125
|
||||
vt 0.265625 0.203125
|
||||
vt 0.703125 0.796875
|
||||
vt 0.75 0.796875
|
||||
vt 0.75 0.75
|
||||
vt 0.703125 0.75
|
||||
vt 0.28125 0.25
|
||||
vt 0.296875 0.25
|
||||
vt 0.296875 0.203125
|
||||
vt 0.28125 0.203125
|
||||
vt 0.21875 0.296875
|
||||
vt 0.265625 0.296875
|
||||
vt 0.265625 0.25
|
||||
vt 0.21875 0.25
|
||||
vt 0.3125 0.203125
|
||||
vt 0.296875 0.203125
|
||||
vt 0.296875 0.25
|
||||
vt 0.3125 0.25
|
||||
vt 0.765625 0.703125
|
||||
vt 0.75 0.703125
|
||||
vt 0.75 0.65625
|
||||
vt 0.765625 0.65625
|
||||
vn -0.0535915598566601 -0.11123601714892141 -0.9923479698175307
|
||||
vn 0.9886827340185362 -0.145361899118907 -0.03709945738386479
|
||||
vn 0.0535915598566601 0.11123601714892141 0.9923479698175307
|
||||
vn -0.9886827340185362 0.145361899118907 0.03709945738386479
|
||||
vn 0.1401227896017008 0.983105521687977 -0.11776730047363708
|
||||
vn -0.1401227896017008 -0.983105521687977 0.11776730047363708
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 116/340/85 119/339/85 117/338/85 114/337/85
|
||||
f 115/344/86 116/343/86 114/342/86 113/341/86
|
||||
f 120/348/87 115/347/87 113/346/87 118/345/87
|
||||
f 119/352/88 120/351/88 118/350/88 117/349/88
|
||||
f 118/356/89 113/355/89 114/354/89 117/353/89
|
||||
f 119/360/90 116/359/90 115/358/90 120/357/90
|
||||
o cube
|
||||
v 0.32771226538747894 1.826905611509015 0.1472125795637378
|
||||
v 0.338430577358811 1.8046584080792307 -0.05125701439976835
|
||||
v 0.35573682330781914 1.6302845071714194 0.17076603965846524
|
||||
v 0.3664551352791512 1.6080373037416351 -0.0277035543050409
|
||||
v 0.2642793723074208 1.7937562656453125 -0.05403947370355819
|
||||
v 0.25356106033608883 1.8160034690750968 0.14443012025994795
|
||||
v 0.292303930227761 1.5971351613077172 -0.030486013608830756
|
||||
v 0.28158561825642897 1.6193823647375014 0.16798358035467537
|
||||
vt 0.3125 0.25
|
||||
vt 0.328125 0.25
|
||||
vt 0.328125 0.203125
|
||||
vt 0.3125 0.203125
|
||||
vt 0.703125 0.75
|
||||
vt 0.75 0.75
|
||||
vt 0.75 0.703125
|
||||
vt 0.703125 0.703125
|
||||
vt 0.328125 0.25
|
||||
vt 0.34375 0.25
|
||||
vt 0.34375 0.203125
|
||||
vt 0.328125 0.203125
|
||||
vt 0.265625 0.296875
|
||||
vt 0.3125 0.296875
|
||||
vt 0.3125 0.25
|
||||
vt 0.265625 0.25
|
||||
vt 0.359375 0.203125
|
||||
vt 0.34375 0.203125
|
||||
vt 0.34375 0.25
|
||||
vt 0.359375 0.25
|
||||
vt 0.375 0.25
|
||||
vt 0.359375 0.25
|
||||
vt 0.359375 0.203125
|
||||
vt 0.375 0.203125
|
||||
vn 0.0535915598566601 -0.11123601714892141 -0.9923479698175307
|
||||
vn 0.9886827340185362 0.145361899118907 0.03709945738386479
|
||||
vn -0.0535915598566601 0.11123601714892141 0.9923479698175307
|
||||
vn -0.9886827340185362 -0.145361899118907 -0.03709945738386479
|
||||
vn -0.1401227896017008 0.983105521687977 -0.11776730047363708
|
||||
vn 0.1401227896017008 -0.983105521687977 0.11776730047363708
|
||||
usemtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
|
||||
f 124/364/91 127/363/91 125/362/91 122/361/91
|
||||
f 123/368/92 124/367/92 122/366/92 121/365/92
|
||||
f 128/372/93 123/371/93 121/370/93 126/369/93
|
||||
f 127/376/94 128/375/94 126/374/94 125/373/94
|
||||
f 126/380/95 121/379/95 122/378/95 125/377/95
|
||||
f 127/384/96 124/383/96 123/382/96 128/381/96
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/ikonka10"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
newmtl m_fdfcfefc-7bfc-ef52-ba81-4f659e2b538e
|
||||
illum 1
|
||||
Ns 0.0
|
||||
Ni 1.45
|
||||
d 1.0
|
||||
Ka 1.0 1.0 1.0
|
||||
Kd 0.8 0.8 0.8
|
||||
Ks 0.0 0.0 0.0
|
||||
map_Kd armory_armor:block/texture
|
||||
Ke 0.0 0.0 0.0
|
||||
1538
src/main/resources/assets/armory_armor/models/item/seal_vest-fix.obj
Normal file
@@ -0,0 +1,3 @@
|
||||
newmtl m_fdfcfefc-7bfc-ef52-ba81-4f659e2b538e
|
||||
map_Kd armory_armor:block/texture
|
||||
newmtl none
|
||||
1705
src/main/resources/assets/armory_armor/models/item/seal_vest.obj
Normal file
@@ -0,0 +1,10 @@
|
||||
newmtl m_fdfcfefc-7bfc-ef52-ba81-4f659e2b538e.001
|
||||
illum 1
|
||||
Ns 0.0
|
||||
Ni 1.45
|
||||
d 1.0
|
||||
Ka 1.0 1.0 1.0
|
||||
Kd 0.8 0.8 0.8
|
||||
Ks 0.0 0.0 0.0
|
||||
map_Kd armory_armor:block/texture
|
||||
Ke 0.0 0.0 0.0
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/ikonka4"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/ikonka11"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/ikonka3"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/ikonka7"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/ikonka9"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/ikonka1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "armory_armor:item/ikonka2"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 522 B |
|
After Width: | Height: | Size: 531 B |
|
After Width: | Height: | Size: 522 B |
|
After Width: | Height: | Size: 526 B |
|
After Width: | Height: | Size: 440 B |
BIN
src/main/resources/assets/armory_armor/textures/item/ikonka1.png
Normal file
|
After Width: | Height: | Size: 679 B |