Add initial implementation of the Armory Armor mod with custom military armor sets, rendering logic, and Gradle build scripts.

This commit is contained in:
2026-03-29 15:41:20 +02:00
commit 6ef7e52a37
133 changed files with 10303 additions and 0 deletions

45
.gitignore vendored Normal file
View 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
View 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
View 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
View 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
View File

@@ -0,0 +1,2 @@
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false

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

Binary file not shown.

View File

@@ -0,0 +1,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
View 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
View 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
View 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'
}

View 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);
}
}
}

View File

@@ -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;
}
}

View File

@@ -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) {}
}

View File

@@ -0,0 +1,7 @@
package top.azimkin.armoryarmor.client;
import net.minecraft.resources.ResourceLocation;
public class InfoHolder {
public static ResourceLocation TOP_TEXTURE = null;
}

View 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) {}
}

View File

@@ -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);
}
}

View File

@@ -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_);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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());
}

View 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";
}
}
}

View 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;
}
}

View 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";
}
}
}

View File

@@ -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";
}
}

View 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";
}
}
}

View 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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View 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";
}
}
}

View 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";
}
}
}

View 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;
}
}

View File

@@ -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;
}
}

View File

@@ -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");
}
}

View File

@@ -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");
}
}

View File

@@ -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");
}
}

View File

@@ -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");
}
}

View File

@@ -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");
}
}

View File

@@ -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");
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View 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

View 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
}
}

View File

@@ -0,0 +1,8 @@
{
"format_version": "1.8.0",
"animations": {
"animation.model.new": {
"loop": true
}
}
}

View File

@@ -0,0 +1,8 @@
{
"format_version": "1.8.0",
"animations": {
"animation.model.new": {
"loop": true
}
}
}

View File

@@ -0,0 +1,8 @@
{
"format_version": "1.8.0",
"animations": {
"animation.model.new": {
"loop": true
}
}
}

View File

@@ -0,0 +1,8 @@
{
"format_version": "1.8.0",
"animations": {
"animation.model.new": {
"loop": true
}
}
}

View File

@@ -0,0 +1,8 @@
{
"format_version": "1.8.0",
"animations": {
"animation.model.new": {
"loop": true
}
}
}

View File

@@ -0,0 +1,8 @@
{
"format_version": "1.8.0",
"animations": {
"animation.model.new": {
"loop": true
}
}
}

View 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]}
]
}
]
}
]
}

View 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]}
}
}
]
}
]
}
]
}

View 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]}
}
}
]
}
]
}
]
}

View File

@@ -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]}
}
}
]
}
]
}
]
}

View 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]}
}
}
]
}
]
}
]
}

View 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]}
}
}
]
}
]
}
]
}

View 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"
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/al_quaida_2"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/al_quaida_3"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/ikonka8"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/chechen_1"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/chechen_2"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/ikonka5"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/ikonka6"
}
}

View File

@@ -0,0 +1,3 @@
newmtl m_1e0b01f4-8960-fbc5-f0eb-f0b829090472
map_Kd armory_armor:block/
newmtl none

View File

@@ -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

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/ikonka10"
}
}

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
newmtl m_fdfcfefc-7bfc-ef52-ba81-4f659e2b538e
map_Kd armory_armor:block/texture
newmtl none

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/ikonka4"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/ikonka11"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/ikonka3"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/ikonka7"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/ikonka9"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/ikonka1"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "armory_armor:item/ikonka2"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 526 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

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