diff --git a/src/main/java/com/goodbird/npcgecko/client/model/ModelCustom.java b/src/main/java/com/goodbird/npcgecko/client/model/ModelCustom.java index 28f546a..482c529 100644 --- a/src/main/java/com/goodbird/npcgecko/client/model/ModelCustom.java +++ b/src/main/java/com/goodbird/npcgecko/client/model/ModelCustom.java @@ -6,20 +6,36 @@ import software.bernie.geckolib3.core.event.predicate.AnimationEvent; import software.bernie.geckolib3.core.processor.IBone; import software.bernie.geckolib3.model.AnimatedGeoModel; import software.bernie.geckolib3.model.provider.data.EntityModelData; +import software.bernie.geckolib3.resource.GeckoLibCache; public class ModelCustom extends AnimatedGeoModel { @Override public ResourceLocation getAnimationFileLocation(EntityCustomModel entity) { + if(!GeckoLibCache.getInstance().getAnimations().containsKey(entity.animResLoc)){ + return new ResourceLocation("npcgecko","animations/none.animations.json"); + } return entity.animResLoc; } @Override public ResourceLocation getModelLocation(EntityCustomModel entity) { + if(!GeckoLibCache.getInstance().getGeoModels().containsKey(entity.modelResLoc)){ + return new ResourceLocation("npcgecko","geo/modelnotfound.geo.json"); + } + if(!GeckoLibCache.getInstance().getAnimations().containsKey(entity.animResLoc)){ + return new ResourceLocation("npcgecko","geo/animfilenotfound.geo.json"); + } return entity.modelResLoc; } @Override public ResourceLocation getTextureLocation(EntityCustomModel entity) { + if(!GeckoLibCache.getInstance().getGeoModels().containsKey(entity.modelResLoc)){ + return new ResourceLocation("npcgecko","textures/model/alphabet.png"); + } + if(!GeckoLibCache.getInstance().getAnimations().containsKey(entity.animResLoc)){ + return new ResourceLocation("npcgecko","textures/model/alphabet.png"); + } return entity.textureResLoc; } diff --git a/src/main/java/com/goodbird/npcgecko/client/model/TileModelCustom.java b/src/main/java/com/goodbird/npcgecko/client/model/TileModelCustom.java index 8c011c1..e695611 100644 --- a/src/main/java/com/goodbird/npcgecko/client/model/TileModelCustom.java +++ b/src/main/java/com/goodbird/npcgecko/client/model/TileModelCustom.java @@ -3,20 +3,36 @@ package com.goodbird.npcgecko.client.model; import com.goodbird.npcgecko.tile.TileEntityCustomModel; import net.minecraft.util.ResourceLocation; import software.bernie.geckolib3.model.AnimatedGeoModel; +import software.bernie.geckolib3.resource.GeckoLibCache; public class TileModelCustom extends AnimatedGeoModel { @Override public ResourceLocation getAnimationFileLocation(TileEntityCustomModel entity) { + if(!GeckoLibCache.getInstance().getAnimations().containsKey(entity.animResLoc)){ + return new ResourceLocation("npcgecko","animations/none.animations.json"); + } return entity.animResLoc; } @Override public ResourceLocation getModelLocation(TileEntityCustomModel animatable) { + if(!GeckoLibCache.getInstance().getGeoModels().containsKey(animatable.modelResLoc)){ + return new ResourceLocation("npcgecko","geo/modelnotfound.geo.json"); + } + if(!GeckoLibCache.getInstance().getAnimations().containsKey(animatable.animResLoc)){ + return new ResourceLocation("npcgecko","geo/animfilenotfound.geo.json"); + } return animatable.modelResLoc; } @Override public ResourceLocation getTextureLocation(TileEntityCustomModel entity) { + if(!GeckoLibCache.getInstance().getGeoModels().containsKey(entity.modelResLoc)){ + return new ResourceLocation("npcgecko","textures/model/alphabet.png"); + } + if(!GeckoLibCache.getInstance().getAnimations().containsKey(entity.animResLoc)){ + return new ResourceLocation("npcgecko","textures/model/alphabet.png"); + } return entity.textureResLoc; } } diff --git a/src/main/resources/assets/npcgecko/animations/none.animations.json b/src/main/resources/assets/npcgecko/animations/none.animations.json new file mode 100644 index 0000000..61792cc --- /dev/null +++ b/src/main/resources/assets/npcgecko/animations/none.animations.json @@ -0,0 +1,6 @@ +{ + "format_version": "1.8.0", + "animations": { + }, + "geckolib_format_version": 2 +} \ No newline at end of file diff --git a/src/main/resources/assets/npcgecko/geo/animfilenotfound.geo.json b/src/main/resources/assets/npcgecko/geo/animfilenotfound.geo.json new file mode 100644 index 0000000..62b30ab --- /dev/null +++ b/src/main/resources/assets/npcgecko/geo/animfilenotfound.geo.json @@ -0,0 +1,400 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 3000, + "texture_height": 960, + "visible_bounds_width": 4, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "animation_file_not_found", + "pivot": [-13, 2, 0] + }, + { + "name": "animation", + "parent": "animation_file_not_found", + "pivot": [18.212, 7.7834, 0] + }, + { + "name": "a2", + "parent": "animation", + "pivot": [18.212, 7.7834, 0], + "cubes": [ + { + "origin": [-12.4492, 7.967, 0.6902], + "size": [2.5704, 3.672, 0.017], + "uv": { + "north": {"uv": [0, 66], "uv_size": [84, 120]}, + "south": {"uv": [84, 66], "uv_size": [-84, 120]}, + "up": {"uv": [0, 0], "uv_size": [84, 66]}, + "down": {"uv": [0, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "n2", + "parent": "animation", + "pivot": [18.212, 7.7834, 0], + "cubes": [ + { + "origin": [-9.5116, 7.967, 0.6902], + "size": [2.9376, 3.672, 0.017], + "uv": { + "north": {"uv": [1266, 66], "uv_size": [96, 120]}, + "south": {"uv": [1362, 66], "uv_size": [-96, 120]}, + "up": {"uv": [1266, 0], "uv_size": [96, 66]}, + "down": {"uv": [1266, 186], "uv_size": [96, 66]} + } + } + ] + }, + { + "name": "i2", + "parent": "animation", + "pivot": [18.212, 7.7834, 0], + "cubes": [ + { + "origin": [-6.2068, 7.967, 0.6902], + "size": [1.1016, 3.672, 0.017], + "uv": { + "north": {"uv": [810, 66], "uv_size": [36, 120]}, + "south": {"uv": [846, 66], "uv_size": [-36, 120]}, + "up": {"uv": [810, 0], "uv_size": [36, 66]}, + "down": {"uv": [810, 186], "uv_size": [36, 66]} + } + } + ] + }, + { + "name": "m", + "parent": "animation", + "pivot": [18.212, 7.7834, 0], + "cubes": [ + { + "origin": [-4.738, 7.967, 0.6902], + "size": [3.672, 3.672, 0.017], + "uv": { + "north": {"uv": [1110, 66], "uv_size": [120, 120]}, + "east": {"uv": [6, 804], "uv_size": [3, -6]}, + "south": {"uv": [1230, 66], "uv_size": [-120, 120]}, + "west": {"uv": [6, 804], "uv_size": [3, -6]}, + "up": {"uv": [1110, 0], "uv_size": [120, 66]}, + "down": {"uv": [1110, 186], "uv_size": [120, 66]} + } + } + ] + }, + { + "name": "a", + "parent": "animation", + "pivot": [18.212, 7.7834, 0], + "cubes": [ + { + "origin": [-0.6988, 7.967, 0.6902], + "size": [2.5704, 3.672, 0.017], + "uv": { + "north": {"uv": [90, 66], "uv_size": [84, 120]}, + "south": {"uv": [174, 66], "uv_size": [-84, 120]}, + "up": {"uv": [90, 0], "uv_size": [84, 66]}, + "down": {"uv": [90, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "t2", + "parent": "animation", + "pivot": [18.212, 7.7834, 0], + "cubes": [ + { + "origin": [2.2388, 7.967, 0.6902], + "size": [2.5704, 3.672, 0.017], + "uv": { + "north": {"uv": [1830, 66], "uv_size": [84, 120]}, + "south": {"uv": [1914, 66], "uv_size": [-84, 120]}, + "up": {"uv": [1830, 0], "uv_size": [84, 66]}, + "down": {"uv": [1830, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "i3", + "parent": "animation", + "pivot": [18.212, 7.7834, 0], + "cubes": [ + { + "origin": [5.1764, 7.967, 0.6902], + "size": [1.1016, 3.672, 0.017], + "uv": { + "north": {"uv": [810, 66], "uv_size": [36, 120]}, + "south": {"uv": [846, 66], "uv_size": [-36, 120]}, + "up": {"uv": [810, 0], "uv_size": [36, 66]}, + "down": {"uv": [810, 186], "uv_size": [36, 66]} + } + } + ] + }, + { + "name": "o2", + "parent": "animation", + "pivot": [18.212, 7.7834, 0], + "cubes": [ + { + "origin": [6.6452, 7.967, 0.6902], + "size": [2.5704, 3.672, 0.017], + "uv": { + "north": {"uv": [1368, 66], "uv_size": [84, 120]}, + "south": {"uv": [1452, 66], "uv_size": [-84, 120]}, + "up": {"uv": [1368, 0], "uv_size": [84, 66]}, + "down": {"uv": [1368, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "n3", + "parent": "animation", + "pivot": [18.212, 7.7834, 0], + "cubes": [ + { + "origin": [9.5828, 7.967, 0.6902], + "size": [2.9376, 3.672, 0.017], + "uv": { + "north": {"uv": [1266, 66], "uv_size": [96, 120]}, + "south": {"uv": [1362, 66], "uv_size": [-96, 120]}, + "up": {"uv": [1266, 0], "uv_size": [96, 66]}, + "down": {"uv": [1266, 186], "uv_size": [96, 66]} + } + } + ] + }, + { + "name": "file", + "parent": "animation_file_not_found", + "pivot": [-13, 2, 0] + }, + { + "name": "f2", + "parent": "file", + "pivot": [-13, 2, 0], + "cubes": [ + { + "origin": [-17.59, 2.1836, 0.6902], + "size": [2.5704, 3.672, 0.017], + "uv": { + "north": {"uv": [540, 66], "uv_size": [84, 120]}, + "south": {"uv": [624, 66], "uv_size": [-84, 120]}, + "up": {"uv": [540, 0], "uv_size": [84, 66]}, + "down": {"uv": [540, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "i", + "parent": "file", + "pivot": [-13, 2, 0], + "cubes": [ + { + "origin": [-14.6524, 2.1836, 0.6902], + "size": [1.1016, 3.672, 0.017], + "uv": { + "north": {"uv": [810, 66], "uv_size": [36, 120]}, + "south": {"uv": [846, 66], "uv_size": [-36, 120]}, + "up": {"uv": [810, 0], "uv_size": [36, 66]}, + "down": {"uv": [810, 186], "uv_size": [36, 66]} + } + } + ] + }, + { + "name": "l", + "parent": "file", + "pivot": [-13, 2, 0], + "cubes": [ + { + "origin": [-13.1836, 2.1836, 0.6902], + "size": [2.2032, 3.672, 0.017], + "uv": { + "north": {"uv": [1032, 66], "uv_size": [72, 120]}, + "south": {"uv": [1104, 66], "uv_size": [-72, 120]}, + "up": {"uv": [1032, 0], "uv_size": [72, 66]}, + "down": {"uv": [1032, 186], "uv_size": [72, 66]} + } + } + ] + }, + { + "name": "e", + "parent": "file", + "pivot": [-13, 2, 0], + "cubes": [ + { + "origin": [-10.6132, 2.1836, 0.6902], + "size": [2.5704, 3.672, 0.017], + "uv": { + "north": {"uv": [450, 66], "uv_size": [84, 120]}, + "south": {"uv": [534, 66], "uv_size": [-84, 120]}, + "up": {"uv": [450, 0], "uv_size": [84, 66]}, + "down": {"uv": [450, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "not", + "parent": "animation_file_not_found", + "pivot": [-13, 2, 0] + }, + { + "name": "n4", + "parent": "not", + "pivot": [-13, 2, 0], + "cubes": [ + { + "origin": [-6.9412, 2.1836, 0.6902], + "size": [2.9376, 3.672, 0.017], + "uv": { + "north": {"uv": [1266, 66], "uv_size": [96, 120]}, + "south": {"uv": [1362, 66], "uv_size": [-96, 120]}, + "up": {"uv": [1266, 0], "uv_size": [96, 66]}, + "down": {"uv": [1266, 186], "uv_size": [96, 66]} + } + } + ] + }, + { + "name": "o3", + "parent": "not", + "pivot": [-13, 2, 0], + "cubes": [ + { + "origin": [-3.6364, 2.1836, 0.6902], + "size": [2.5704, 3.672, 0.017], + "uv": { + "north": {"uv": [1368, 66], "uv_size": [84, 120]}, + "south": {"uv": [1452, 66], "uv_size": [-84, 120]}, + "up": {"uv": [1368, 0], "uv_size": [84, 66]}, + "down": {"uv": [1368, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "t", + "parent": "not", + "pivot": [-13, 2, 0], + "cubes": [ + { + "origin": [-0.6988, 2.1836, 0.6902], + "size": [2.5704, 3.672, 0.017], + "uv": { + "north": {"uv": [1830, 66], "uv_size": [84, 120]}, + "south": {"uv": [1914, 66], "uv_size": [-84, 120]}, + "up": {"uv": [1830, 0], "uv_size": [84, 66]}, + "down": {"uv": [1830, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "found", + "parent": "animation_file_not_found", + "pivot": [-13, 2, 0] + }, + { + "name": "f", + "parent": "found", + "pivot": [-13, 2, 0], + "cubes": [ + { + "origin": [2.9732, 2.1836, 0.6902], + "size": [2.5704, 3.672, 0.017], + "uv": { + "north": {"uv": [540, 66], "uv_size": [84, 120]}, + "south": {"uv": [624, 66], "uv_size": [-84, 120]}, + "up": {"uv": [540, 0], "uv_size": [84, 66]}, + "down": {"uv": [540, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "o", + "parent": "found", + "pivot": [-13, 2, 0], + "cubes": [ + { + "origin": [5.9108, 2.1836, 0.6902], + "size": [2.5704, 3.672, 0.017], + "uv": { + "north": {"uv": [1368, 66], "uv_size": [84, 120]}, + "south": {"uv": [1452, 66], "uv_size": [-84, 120]}, + "up": {"uv": [1368, 0], "uv_size": [84, 66]}, + "down": {"uv": [1368, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "u", + "parent": "found", + "pivot": [-13, 2, 0], + "cubes": [ + { + "origin": [8.8484, 2.1836, 0.6902], + "size": [2.5704, 3.672, 0.017], + "uv": { + "north": {"uv": [1920, 66], "uv_size": [84, 120]}, + "south": {"uv": [2004, 66], "uv_size": [-84, 120]}, + "up": {"uv": [1920, 0], "uv_size": [84, 66]}, + "down": {"uv": [1920, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "n", + "parent": "found", + "pivot": [-13, 2, 0], + "cubes": [ + { + "origin": [11.786, 2.1836, 0.6902], + "size": [2.9376, 3.672, 0.017], + "uv": { + "north": {"uv": [1266, 66], "uv_size": [96, 120]}, + "south": {"uv": [1362, 66], "uv_size": [-96, 120]}, + "up": {"uv": [1266, 0], "uv_size": [96, 66]}, + "down": {"uv": [1266, 186], "uv_size": [96, 66]} + } + } + ] + }, + { + "name": "d", + "parent": "found", + "pivot": [-13, 2, 0], + "cubes": [ + { + "origin": [15.0908, 2.1836, 0.6902], + "size": [2.5704, 3.672, 0.017], + "uv": { + "north": {"uv": [360, 66], "uv_size": [84, 120]}, + "south": {"uv": [444, 66], "uv_size": [-84, 120]}, + "up": {"uv": [360, 0], "uv_size": [84, 66]}, + "down": {"uv": [360, 186], "uv_size": [84, 66]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/npcgecko/geo/modelnotfound.geo.json b/src/main/resources/assets/npcgecko/geo/modelnotfound.geo.json new file mode 100644 index 0000000..cbe5b7d --- /dev/null +++ b/src/main/resources/assets/npcgecko/geo/modelnotfound.geo.json @@ -0,0 +1,259 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 3000, + "texture_height": 960, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "model_not_found", + "pivot": [-8, 3, 0] + }, + { + "name": "model", + "parent": "model_not_found", + "pivot": [11.323, 8.301, 0] + }, + { + "name": "m", + "parent": "model", + "pivot": [11.323, 8.301, 0], + "cubes": [ + { + "origin": [-7.658, 8.472, -0.0595], + "size": [3.42, 3.42, 0.05], + "uv": { + "north": {"uv": [1110, 66], "uv_size": [120, 120]}, + "east": {"uv": [6, 804], "uv_size": [3, -6]}, + "south": {"uv": [1230, 66], "uv_size": [-120, 120]}, + "west": {"uv": [6, 804], "uv_size": [3, -6]}, + "up": {"uv": [1110, 0], "uv_size": [120, 66]}, + "down": {"uv": [1110, 186], "uv_size": [120, 66]} + } + } + ] + }, + { + "name": "o2", + "parent": "model", + "pivot": [11.323, 8.301, 0], + "cubes": [ + { + "origin": [-3.896, 8.472, -0.0595], + "size": [2.394, 3.42, 0.05], + "uv": { + "north": {"uv": [1368, 66], "uv_size": [84, 120]}, + "south": {"uv": [1452, 66], "uv_size": [-84, 120]}, + "up": {"uv": [1368, 0], "uv_size": [84, 66]}, + "down": {"uv": [1368, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "d2", + "parent": "model", + "pivot": [11.323, 8.301, 0], + "cubes": [ + { + "origin": [-1.16, 8.472, -0.0595], + "size": [2.394, 3.42, 0.05], + "uv": { + "north": {"uv": [360, 66], "uv_size": [84, 120]}, + "south": {"uv": [444, 66], "uv_size": [-84, 120]}, + "up": {"uv": [360, 0], "uv_size": [84, 66]}, + "down": {"uv": [360, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "e", + "parent": "model", + "pivot": [11.323, 8.301, 0], + "cubes": [ + { + "origin": [1.576, 8.472, -0.0595], + "size": [2.394, 3.42, 0.05], + "uv": { + "north": {"uv": [450, 66], "uv_size": [84, 120]}, + "south": {"uv": [534, 66], "uv_size": [-84, 120]}, + "up": {"uv": [450, 0], "uv_size": [84, 66]}, + "down": {"uv": [450, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "l", + "parent": "model", + "pivot": [11.323, 8.301, 0], + "cubes": [ + { + "origin": [4.312, 8.472, -0.0595], + "size": [2.052, 3.42, 0.05], + "uv": { + "north": {"uv": [1032, 66], "uv_size": [72, 120]}, + "south": {"uv": [1104, 66], "uv_size": [-72, 120]}, + "up": {"uv": [1032, 0], "uv_size": [72, 66]}, + "down": {"uv": [1032, 186], "uv_size": [72, 66]} + } + } + ] + }, + { + "name": "not", + "parent": "model_not_found", + "pivot": [-8, 3, 0] + }, + { + "name": "n2", + "parent": "not", + "pivot": [-8, 3, 0], + "cubes": [ + { + "origin": [-11.933, 3.171, -0.0595], + "size": [2.736, 3.42, 0.05], + "uv": { + "north": {"uv": [1266, 66], "uv_size": [96, 120]}, + "south": {"uv": [1362, 66], "uv_size": [-96, 120]}, + "up": {"uv": [1266, 0], "uv_size": [96, 66]}, + "down": {"uv": [1266, 186], "uv_size": [96, 66]} + } + } + ] + }, + { + "name": "o3", + "parent": "not", + "pivot": [-8, 3, 0], + "cubes": [ + { + "origin": [-8.855, 3.171, -0.0595], + "size": [2.394, 3.42, 0.05], + "uv": { + "north": {"uv": [1368, 66], "uv_size": [84, 120]}, + "south": {"uv": [1452, 66], "uv_size": [-84, 120]}, + "up": {"uv": [1368, 0], "uv_size": [84, 66]}, + "down": {"uv": [1368, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "t", + "parent": "not", + "pivot": [-8, 3, 0], + "cubes": [ + { + "origin": [-6.119, 3.171, -0.0595], + "size": [2.394, 3.42, 0.05], + "uv": { + "north": {"uv": [1830, 66], "uv_size": [84, 120]}, + "south": {"uv": [1914, 66], "uv_size": [-84, 120]}, + "up": {"uv": [1830, 0], "uv_size": [84, 66]}, + "down": {"uv": [1830, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "found", + "parent": "model_not_found", + "pivot": [-8, 3, 0] + }, + { + "name": "f", + "parent": "found", + "pivot": [-8, 3, 0], + "cubes": [ + { + "origin": [-2.699, 3.171, -0.0595], + "size": [2.394, 3.42, 0.05], + "uv": { + "north": {"uv": [540, 66], "uv_size": [84, 120]}, + "south": {"uv": [624, 66], "uv_size": [-84, 120]}, + "up": {"uv": [540, 0], "uv_size": [84, 66]}, + "down": {"uv": [540, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "o", + "parent": "found", + "pivot": [-8, 3, 0], + "cubes": [ + { + "origin": [0.037, 3.171, -0.0595], + "size": [2.394, 3.42, 0.05], + "uv": { + "north": {"uv": [1368, 66], "uv_size": [84, 120]}, + "south": {"uv": [1452, 66], "uv_size": [-84, 120]}, + "up": {"uv": [1368, 0], "uv_size": [84, 66]}, + "down": {"uv": [1368, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "u", + "parent": "found", + "pivot": [-8, 3, 0], + "cubes": [ + { + "origin": [2.773, 3.171, -0.0595], + "size": [2.394, 3.42, 0.05], + "uv": { + "north": {"uv": [1920, 66], "uv_size": [84, 120]}, + "south": {"uv": [2004, 66], "uv_size": [-84, 120]}, + "up": {"uv": [1920, 0], "uv_size": [84, 66]}, + "down": {"uv": [1920, 186], "uv_size": [84, 66]} + } + } + ] + }, + { + "name": "n", + "parent": "found", + "pivot": [-8, 3, 0], + "cubes": [ + { + "origin": [5.509, 3.171, -0.0595], + "size": [2.736, 3.42, 0.05], + "uv": { + "north": {"uv": [1266, 66], "uv_size": [96, 120]}, + "south": {"uv": [1362, 66], "uv_size": [-96, 120]}, + "up": {"uv": [1266, 0], "uv_size": [96, 66]}, + "down": {"uv": [1266, 186], "uv_size": [96, 66]} + } + } + ] + }, + { + "name": "d", + "parent": "found", + "pivot": [-8, 3, 0], + "cubes": [ + { + "origin": [8.587, 3.171, -0.0595], + "size": [2.394, 3.42, 0.05], + "uv": { + "north": {"uv": [360, 66], "uv_size": [84, 120]}, + "south": {"uv": [444, 66], "uv_size": [-84, 120]}, + "up": {"uv": [360, 0], "uv_size": [84, 66]}, + "down": {"uv": [360, 186], "uv_size": [84, 66]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/npcgecko/textures/model/alphabet.png b/src/main/resources/assets/npcgecko/textures/model/alphabet.png new file mode 100644 index 0000000..ef83f4b Binary files /dev/null and b/src/main/resources/assets/npcgecko/textures/model/alphabet.png differ