├── .gitignore
├── HEADER
├── LICENSE
├── NOTICE
├── README.md
├── assets
├── 2019-04-26_08.04.42.jpg
├── howto-cutout
│ ├── compose-1-result.png
│ ├── compose-1.png
│ ├── compose-2-result.png
│ ├── decompose-result.png
│ ├── mask-result-1.png
│ ├── mask-result-2.png
│ └── save-box.png
├── jmx_icon.png
├── jmx_logo.png
├── logo.xcf
├── material_template.json
├── redstone_glow.png
├── redstone_ore.xcf
├── redstone_ore_bits.png
├── redstone_ore_shader-RGBA.xcf
├── redstone_ore_shader.png
├── redstone_ore_shader.xcf
└── stone_ore_mask.png
├── checkstyle.xml
├── fabric
├── build.gradle
├── gradle.properties
├── project.gradle
├── settings.gradle
└── src
│ └── main
│ ├── java
│ └── io
│ │ └── vram
│ │ └── jmx
│ │ ├── Configurator.java
│ │ ├── JsonModelExtensions.java
│ │ ├── api
│ │ └── JmxInitializer.java
│ │ ├── json
│ │ ├── FaceExtData.java
│ │ ├── JmxModelExt.java
│ │ ├── JmxTexturesExt.java
│ │ ├── ext
│ │ │ ├── JmxExtension.java
│ │ │ └── JsonBlockModelExt.java
│ │ ├── model
│ │ │ ├── BakedQuadFactoryExt.java
│ │ │ ├── BakedQuadFactoryHelper.java
│ │ │ ├── JmxBakedModel.java
│ │ │ └── JsonUnbakedModelHelper.java
│ │ ├── v0
│ │ │ ├── FaceExtDataV0.java
│ │ │ ├── JmxMaterialV0.java
│ │ │ ├── JmxModelExtV0.java
│ │ │ └── JmxTexturesExtV0.java
│ │ └── v1
│ │ │ ├── FaceExtDataV1.java
│ │ │ ├── JmxModelExtV1.java
│ │ │ └── JmxTexturesExtV1.java
│ │ └── mixin
│ │ ├── MixinBlockElementFace.java
│ │ ├── MixinBlockElementFaceDeserializer.java
│ │ ├── MixinBlockModel.java
│ │ ├── MixinBlockModelDeserializer.java
│ │ ├── MixinFaceBakery.java
│ │ ├── MixinModelBakery.java
│ │ └── MixinTextureAtlas.java
│ └── resources
│ ├── assets
│ └── jmx
│ │ ├── jmx_icon.png
│ │ └── models
│ │ └── block
│ │ ├── 2
│ │ ├── jmx_crop.json
│ │ ├── jmx_cross.json
│ │ ├── jmx_cube.json
│ │ ├── jmx_cube_all.json
│ │ ├── jmx_cube_bottom_top.json
│ │ ├── jmx_cube_column.json
│ │ ├── jmx_cube_directional.json
│ │ ├── jmx_cube_mirrored.json
│ │ ├── jmx_cube_mirrored_all.json
│ │ ├── jmx_cube_top.json
│ │ ├── jmx_door_bottom.json
│ │ ├── jmx_door_bottom_rh.json
│ │ ├── jmx_door_top.json
│ │ ├── jmx_door_top_rh.json
│ │ ├── jmx_fence_inventory.json
│ │ ├── jmx_fence_post.json
│ │ ├── jmx_fence_side.json
│ │ ├── jmx_orientable.json
│ │ ├── jmx_orientable_vertical.json
│ │ ├── jmx_orientable_with_bottom.json
│ │ ├── jmx_slab.json
│ │ ├── jmx_slab_top.json
│ │ ├── jmx_stairs.json
│ │ ├── jmx_stem_fruit.json
│ │ ├── jmx_stem_growth0.json
│ │ ├── jmx_stem_growth1.json
│ │ ├── jmx_stem_growth2.json
│ │ ├── jmx_stem_growth3.json
│ │ ├── jmx_stem_growth4.json
│ │ ├── jmx_stem_growth5.json
│ │ ├── jmx_stem_growth6.json
│ │ ├── jmx_stem_growth7.json
│ │ ├── jmx_template_farmland.json
│ │ ├── jmx_template_fence_gate.json
│ │ ├── jmx_template_fence_gate_open.json
│ │ ├── jmx_template_fence_gate_wall.json
│ │ ├── jmx_template_fence_gate_wall_open.json
│ │ ├── jmx_template_glass_pane_noside.json
│ │ ├── jmx_template_glass_pane_noside_alt.json
│ │ ├── jmx_template_glass_pane_post.json
│ │ ├── jmx_template_glass_pane_side.json
│ │ ├── jmx_template_glass_pane_side_alt.json
│ │ ├── jmx_template_glazed_terracotta.json
│ │ ├── jmx_template_orientable_trapdoor_bottom.json
│ │ ├── jmx_template_orientable_trapdoor_open.json
│ │ ├── jmx_template_orientable_trapdoor_top.json
│ │ ├── jmx_template_piston.json
│ │ ├── jmx_template_piston_head.json
│ │ ├── jmx_template_piston_head_short.json
│ │ ├── jmx_template_rail_raised_ne.json
│ │ ├── jmx_template_rail_raised_sw.json
│ │ ├── jmx_template_torch.json
│ │ ├── jmx_template_trapdoor_bottom.json
│ │ ├── jmx_template_trapdoor_open.json
│ │ ├── jmx_template_trapdoor_top.json
│ │ ├── jmx_template_wall_post.json
│ │ └── jmx_template_wall_side.json
│ │ ├── 3
│ │ ├── jmx_crop.json
│ │ ├── jmx_cross.json
│ │ ├── jmx_cube.json
│ │ ├── jmx_cube_all.json
│ │ ├── jmx_cube_bottom_top.json
│ │ ├── jmx_cube_column.json
│ │ ├── jmx_cube_directional.json
│ │ ├── jmx_cube_mirrored.json
│ │ ├── jmx_cube_mirrored_all.json
│ │ ├── jmx_cube_top.json
│ │ ├── jmx_door_bottom.json
│ │ ├── jmx_door_bottom_rh.json
│ │ ├── jmx_door_top.json
│ │ ├── jmx_door_top_rh.json
│ │ ├── jmx_fence_inventory.json
│ │ ├── jmx_fence_post.json
│ │ ├── jmx_fence_side.json
│ │ ├── jmx_orientable.json
│ │ ├── jmx_orientable_vertical.json
│ │ ├── jmx_orientable_with_bottom.json
│ │ ├── jmx_slab.json
│ │ ├── jmx_slab_top.json
│ │ ├── jmx_stairs.json
│ │ ├── jmx_stem_fruit.json
│ │ ├── jmx_stem_growth0.json
│ │ ├── jmx_stem_growth1.json
│ │ ├── jmx_stem_growth2.json
│ │ ├── jmx_stem_growth3.json
│ │ ├── jmx_stem_growth4.json
│ │ ├── jmx_stem_growth5.json
│ │ ├── jmx_stem_growth6.json
│ │ ├── jmx_stem_growth7.json
│ │ ├── jmx_template_farmland.json
│ │ ├── jmx_template_fence_gate.json
│ │ ├── jmx_template_fence_gate_open.json
│ │ ├── jmx_template_fence_gate_wall.json
│ │ ├── jmx_template_fence_gate_wall_open.json
│ │ ├── jmx_template_glass_pane_noside.json
│ │ ├── jmx_template_glass_pane_noside_alt.json
│ │ ├── jmx_template_glass_pane_post.json
│ │ ├── jmx_template_glass_pane_side.json
│ │ ├── jmx_template_glass_pane_side_alt.json
│ │ ├── jmx_template_glazed_terracotta.json
│ │ ├── jmx_template_orientable_trapdoor_bottom.json
│ │ ├── jmx_template_orientable_trapdoor_open.json
│ │ ├── jmx_template_orientable_trapdoor_top.json
│ │ ├── jmx_template_piston.json
│ │ ├── jmx_template_piston_head.json
│ │ ├── jmx_template_piston_head_short.json
│ │ ├── jmx_template_rail_raised_ne.json
│ │ ├── jmx_template_rail_raised_sw.json
│ │ ├── jmx_template_torch.json
│ │ ├── jmx_template_trapdoor_bottom.json
│ │ ├── jmx_template_trapdoor_open.json
│ │ ├── jmx_template_trapdoor_top.json
│ │ ├── jmx_template_wall_post.json
│ │ └── jmx_template_wall_side.json
│ │ └── v1
│ │ ├── 2
│ │ ├── jmx_carpet.json
│ │ ├── jmx_crop.json
│ │ ├── jmx_cross.json
│ │ ├── jmx_cube.json
│ │ ├── jmx_cube_all.json
│ │ ├── jmx_cube_bottom_top.json
│ │ ├── jmx_cube_column.json
│ │ ├── jmx_cube_directional.json
│ │ ├── jmx_cube_mirrored.json
│ │ ├── jmx_cube_mirrored_all.json
│ │ ├── jmx_cube_top.json
│ │ ├── jmx_door_bottom.json
│ │ ├── jmx_door_bottom_rh.json
│ │ ├── jmx_door_top.json
│ │ ├── jmx_door_top_rh.json
│ │ ├── jmx_fence_inventory.json
│ │ ├── jmx_fence_post.json
│ │ ├── jmx_fence_side.json
│ │ ├── jmx_orientable.json
│ │ ├── jmx_orientable_vertical.json
│ │ ├── jmx_orientable_with_bottom.json
│ │ ├── jmx_slab.json
│ │ ├── jmx_slab_top.json
│ │ ├── jmx_stairs.json
│ │ ├── jmx_stem_fruit.json
│ │ ├── jmx_stem_growth0.json
│ │ ├── jmx_stem_growth1.json
│ │ ├── jmx_stem_growth2.json
│ │ ├── jmx_stem_growth3.json
│ │ ├── jmx_stem_growth4.json
│ │ ├── jmx_stem_growth5.json
│ │ ├── jmx_stem_growth6.json
│ │ ├── jmx_stem_growth7.json
│ │ ├── jmx_template_farmland.json
│ │ ├── jmx_template_fence_gate.json
│ │ ├── jmx_template_fence_gate_open.json
│ │ ├── jmx_template_fence_gate_wall.json
│ │ ├── jmx_template_fence_gate_wall_open.json
│ │ ├── jmx_template_glass_pane_noside.json
│ │ ├── jmx_template_glass_pane_noside_alt.json
│ │ ├── jmx_template_glass_pane_post.json
│ │ ├── jmx_template_glass_pane_side.json
│ │ ├── jmx_template_glass_pane_side_alt.json
│ │ ├── jmx_template_glazed_terracotta.json
│ │ ├── jmx_template_orientable_trapdoor_bottom.json
│ │ ├── jmx_template_orientable_trapdoor_open.json
│ │ ├── jmx_template_orientable_trapdoor_top.json
│ │ ├── jmx_template_piston.json
│ │ ├── jmx_template_piston_head.json
│ │ ├── jmx_template_piston_head_short.json
│ │ ├── jmx_template_rail_raised_ne.json
│ │ ├── jmx_template_rail_raised_sw.json
│ │ ├── jmx_template_torch.json
│ │ ├── jmx_template_trapdoor_bottom.json
│ │ ├── jmx_template_trapdoor_open.json
│ │ ├── jmx_template_trapdoor_top.json
│ │ ├── jmx_template_wall_post.json
│ │ ├── jmx_template_wall_side.json
│ │ ├── jmx_template_wall_side_tall.json
│ │ └── jmx_wall_inventory.json
│ │ ├── 3
│ │ ├── jmx_carpet.json
│ │ ├── jmx_crop.json
│ │ ├── jmx_cross.json
│ │ ├── jmx_cube.json
│ │ ├── jmx_cube_all.json
│ │ ├── jmx_cube_bottom_top.json
│ │ ├── jmx_cube_column.json
│ │ ├── jmx_cube_directional.json
│ │ ├── jmx_cube_mirrored.json
│ │ ├── jmx_cube_mirrored_all.json
│ │ ├── jmx_cube_top.json
│ │ ├── jmx_door_bottom.json
│ │ ├── jmx_door_bottom_rh.json
│ │ ├── jmx_door_top.json
│ │ ├── jmx_door_top_rh.json
│ │ ├── jmx_fence_inventory.json
│ │ ├── jmx_fence_post.json
│ │ ├── jmx_fence_side.json
│ │ ├── jmx_orientable.json
│ │ ├── jmx_orientable_vertical.json
│ │ ├── jmx_orientable_with_bottom.json
│ │ ├── jmx_slab.json
│ │ ├── jmx_slab_top.json
│ │ ├── jmx_stairs.json
│ │ ├── jmx_stem_fruit.json
│ │ ├── jmx_stem_growth0.json
│ │ ├── jmx_stem_growth1.json
│ │ ├── jmx_stem_growth2.json
│ │ ├── jmx_stem_growth3.json
│ │ ├── jmx_stem_growth4.json
│ │ ├── jmx_stem_growth5.json
│ │ ├── jmx_stem_growth6.json
│ │ ├── jmx_stem_growth7.json
│ │ ├── jmx_template_farmland.json
│ │ ├── jmx_template_fence_gate.json
│ │ ├── jmx_template_fence_gate_open.json
│ │ ├── jmx_template_fence_gate_wall.json
│ │ ├── jmx_template_fence_gate_wall_open.json
│ │ ├── jmx_template_glass_pane_noside.json
│ │ ├── jmx_template_glass_pane_noside_alt.json
│ │ ├── jmx_template_glass_pane_post.json
│ │ ├── jmx_template_glass_pane_side.json
│ │ ├── jmx_template_glass_pane_side_alt.json
│ │ ├── jmx_template_glazed_terracotta.json
│ │ ├── jmx_template_orientable_trapdoor_bottom.json
│ │ ├── jmx_template_orientable_trapdoor_open.json
│ │ ├── jmx_template_orientable_trapdoor_top.json
│ │ ├── jmx_template_piston.json
│ │ ├── jmx_template_piston_head.json
│ │ ├── jmx_template_piston_head_short.json
│ │ ├── jmx_template_rail_raised_ne.json
│ │ ├── jmx_template_rail_raised_sw.json
│ │ ├── jmx_template_torch.json
│ │ ├── jmx_template_trapdoor_bottom.json
│ │ ├── jmx_template_trapdoor_open.json
│ │ ├── jmx_template_trapdoor_top.json
│ │ ├── jmx_template_wall_post.json
│ │ ├── jmx_template_wall_side.json
│ │ ├── jmx_template_wall_side_tall.json
│ │ └── jmx_wall_inventory.json
│ │ ├── block.json
│ │ └── thin_block.json
│ ├── fabric.mod.json
│ └── jmx.mixins.json
├── forge
├── build.gradle
├── gradle.properties
└── settings.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── gruntle.sh
├── gruntle_common.gradle
├── project_common.gradle
├── scripts
├── jmx.ts
├── make_parent_models_v1.ts
└── vanilla.ts
├── testpack
├── assets
│ ├── jmx
│ │ ├── materials
│ │ │ ├── bedrock
│ │ │ │ ├── background.json
│ │ │ │ └── fern.json
│ │ │ ├── redstone.json
│ │ │ └── redstone
│ │ │ │ ├── background.json
│ │ │ │ └── bits.json
│ │ ├── shaders
│ │ │ └── redstone.frag
│ │ └── textures
│ │ │ └── block
│ │ │ ├── redstone_ore_bits.png
│ │ │ ├── redstone_ore_shader.png
│ │ │ └── stone_ore_mask.png
│ └── minecraft
│ │ └── models
│ │ ├── block
│ │ ├── bedrock.json
│ │ ├── bedrock_mirrored.json
│ │ ├── oak_planks.json
│ │ ├── oak_slab.json
│ │ ├── oak_slab_top.json
│ │ └── redstone_ore.json
│ │ └── item
│ │ ├── bedrock.json
│ │ ├── oak_planks.json
│ │ ├── oak_slab.json
│ │ └── redstone_ore.json
└── pack.mcmeta
└── upload.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Windows
2 | Thumbs.db
3 |
4 | ## exclude large animated textures
5 | *_anim.png
6 | *_anim_low.png
7 |
8 | # eclipse
9 | bin
10 | *.launch
11 | .settings
12 | .metadata
13 | .classpath
14 | .project
15 | eclipse
16 | gruntle
17 |
18 | build
19 | run
20 |
21 |
22 | ##idea
23 | *.iml
24 | *.ipr
25 | *.iws
26 | out/
27 |
28 | ## Jars
29 |
30 | ### OSX (adds a lot of garbage)###
31 | .DS_Store
32 | .AppleDouble
33 | .LSOverride
34 |
35 | # Thumbnails
36 | ._*
37 |
38 | #stuff
39 | #config
40 | logs
41 | .html
42 | discarded textures
43 | *.nps
44 | /.apt_generated/
45 | notes.txt
46 | *.csv
47 | .mixin.out/audit/mixin_implementation_report.txt
48 |
49 | # symlinked vanilla assets
50 | src/main/resources/assets/vanilla_mc
51 | .checkstyle
52 | .vscode
53 |
54 | .gradle
55 |
--------------------------------------------------------------------------------
/HEADER:
--------------------------------------------------------------------------------
1 | This file is part of JSON Model Extensions and is licensed to the project under
2 | terms that are compatible with the GNU Lesser General Public License.
3 | See the NOTICE file distributed with this work for additional information
4 | regarding copyright ownership and licensing.
5 |
6 | This program is free software: you can redistribute it and/or modify
7 | it under the terms of the GNU Lesser General Public License as published by
8 | the Free Software Foundation, either version 3 of the License, or
9 | (at your option) any later version.
10 |
11 | This program is distributed in the hope that it will be useful,
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | GNU General Public License for more details.
15 |
16 | You should have received a copy of the GNU Lesser General Public License
17 | along with this program. If not, see .
18 |
--------------------------------------------------------------------------------
/NOTICE:
--------------------------------------------------------------------------------
1 | JSON Model Extensions
2 | Copyright © Original Authors
3 |
4 | Versions of this work published prior to October 3, 2021 were licensed under
5 | the Apache License, Version 2.0, which can be found here:
6 |
7 | http://www.apache.org/licenses/LICENSE-2.0
8 |
9 | On and after October 3, 2021 the work is licensed under the GNU
10 | Lesser General Public License as published by the Free Software Foundation,
11 | either version 3 of the License, or (at your option) any later version.
12 |
13 | You should have received a copy of the GNU Lesser General Public License
14 | along with this program. If not, see .
15 |
16 | Versions of the work published prior to October 3, 2021 can be used
17 | under the terms of either license. Additions and changes after that
18 | date are licensed under the GNU Lesser General Public License exclusively.
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # JMX
2 | Minecraft JSON Model Loader Extensions for Fabric
3 |
4 | For information, consult the [Wiki](https://github.com/grondag/json-model-extensions/wiki)
5 |
--------------------------------------------------------------------------------
/assets/2019-04-26_08.04.42.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/2019-04-26_08.04.42.jpg
--------------------------------------------------------------------------------
/assets/howto-cutout/compose-1-result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/howto-cutout/compose-1-result.png
--------------------------------------------------------------------------------
/assets/howto-cutout/compose-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/howto-cutout/compose-1.png
--------------------------------------------------------------------------------
/assets/howto-cutout/compose-2-result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/howto-cutout/compose-2-result.png
--------------------------------------------------------------------------------
/assets/howto-cutout/decompose-result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/howto-cutout/decompose-result.png
--------------------------------------------------------------------------------
/assets/howto-cutout/mask-result-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/howto-cutout/mask-result-1.png
--------------------------------------------------------------------------------
/assets/howto-cutout/mask-result-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/howto-cutout/mask-result-2.png
--------------------------------------------------------------------------------
/assets/howto-cutout/save-box.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/howto-cutout/save-box.png
--------------------------------------------------------------------------------
/assets/jmx_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/jmx_icon.png
--------------------------------------------------------------------------------
/assets/jmx_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/jmx_logo.png
--------------------------------------------------------------------------------
/assets/logo.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/logo.xcf
--------------------------------------------------------------------------------
/assets/material_template.json:
--------------------------------------------------------------------------------
1 | {
2 | "spriteDepth": 1,
3 | "vertexSource": "canvas:default.vert",
4 | "fragmentSource": "canvas:default.frag",
5 | "layers": [
6 | {
7 | "spriteIndex": 0,
8 | "disableAo": false,
9 | "disableColorIndex": false,
10 | "disableDiffuse": false,
11 | "blendMode": "solid",
12 | "emissive": false
13 | },
14 | {
15 | "spriteIndex": 1,
16 | "disableAo": false,
17 | "disableColorIndex": false,
18 | "disableDiffuse": false,
19 | "blendMode": "translucent",
20 | "emissive": false
21 | },
22 | {
23 | "spriteIndex": 2,
24 | "disableAo": false,
25 | "disableColorIndex": false,
26 | "disableDiffuse": false,
27 | "blendMode": "cutout",
28 | "emissive": false
29 | }
30 | ]
31 | }
--------------------------------------------------------------------------------
/assets/redstone_glow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/redstone_glow.png
--------------------------------------------------------------------------------
/assets/redstone_ore.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/redstone_ore.xcf
--------------------------------------------------------------------------------
/assets/redstone_ore_bits.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/redstone_ore_bits.png
--------------------------------------------------------------------------------
/assets/redstone_ore_shader-RGBA.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/redstone_ore_shader-RGBA.xcf
--------------------------------------------------------------------------------
/assets/redstone_ore_shader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/redstone_ore_shader.png
--------------------------------------------------------------------------------
/assets/redstone_ore_shader.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/redstone_ore_shader.xcf
--------------------------------------------------------------------------------
/assets/stone_ore_mask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vram-guild/json-model-extensions/e9f529b5dd4ee0f04a0e0d56e59f110e8ac5aca4/assets/stone_ore_mask.png
--------------------------------------------------------------------------------
/fabric/gradle.properties:
--------------------------------------------------------------------------------
1 | #### STANDARD VRAM PROPERTIES FOR FABRIC
2 | #### MAKE CHANGES IN ..\project_common.gradle
3 | #### CHANGES MADE HERE WILL BE OVERWRITTEN!
4 |
5 | org.gradle.jvmargs=-Xmx2G
6 | org.gradle.daemon=false
7 |
--------------------------------------------------------------------------------
/fabric/project.gradle:
--------------------------------------------------------------------------------
1 | dependencies {
2 | modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
3 |
4 | modImplementation("io.vram:frex-fabric:19.2.307")
5 | include("io.vram:frex-fabric:19.2.307:fat")
6 | }
7 |
8 | sourceSets {
9 | main {
10 | java {
11 | srcDirs = ['src/main/java']
12 | include '**/*'
13 | exclude '*.DS_Store'
14 | }
15 | resources {
16 | srcDirs = ['src/main/resources']
17 | include '**/*'
18 | exclude '*.DS_Store'
19 | }
20 | }
21 | test {
22 | java {
23 | exclude '**/*'
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/fabric/settings.gradle:
--------------------------------------------------------------------------------
1 | // VRAM STANDARD GRADLE SETTINGS FOR FABRIC
2 | // DO NOT MAKE CHANGES HERE - THEY WILL BE OVERWRITTEN BY AUTOMATED UPDATE
3 |
4 | pluginManagement {
5 | repositories {
6 | mavenCentral()
7 | maven {
8 | name = 'Fabric'
9 | url = 'https://maven.fabricmc.net/'
10 | }
11 | gradlePluginPortal()
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/fabric/src/main/java/io/vram/jmx/Configurator.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of JSON Model Extensions and is licensed to the project under
3 | * terms that are compatible with the GNU Lesser General Public License.
4 | * See the NOTICE file distributed with this work for additional information
5 | * regarding copyright ownership and licensing.
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU Lesser General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU Lesser General Public License
18 | * along with this program. If not, see .
19 | */
20 |
21 | package io.vram.jmx;
22 |
23 | import java.io.File;
24 | import java.io.FileInputStream;
25 | import java.io.FileOutputStream;
26 | import java.io.IOException;
27 | import java.util.Locale;
28 | import java.util.Properties;
29 |
30 | import net.fabricmc.loader.api.FabricLoader;
31 |
32 | public class Configurator {
33 | public static boolean loadVanillaModels;
34 | public static boolean logResolutionErrors;
35 |
36 | static {
37 | final File configFile = new File(FabricLoader.getInstance().getConfigDir().toFile(), "jmx.properties");
38 | final Properties properties = new Properties();
39 |
40 | if (configFile.exists()) {
41 | try (FileInputStream stream = new FileInputStream(configFile)) {
42 | properties.load(stream);
43 | } catch (final IOException e) {
44 | JsonModelExtensions.LOG.warn("[JMX] Could not read property file '" + configFile.getAbsolutePath() + "'", e);
45 | }
46 | }
47 |
48 | loadVanillaModels = ((String) properties.computeIfAbsent("load-vanilla-models", (a) -> "false")).toLowerCase(Locale.ROOT).equals("true");
49 | logResolutionErrors = ((String) properties.computeIfAbsent("log-resolution-errors", (a) -> "false")).toLowerCase(Locale.ROOT).equals("true");
50 |
51 | try (FileOutputStream stream = new FileOutputStream(configFile)) {
52 | properties.store(stream, "JMX properties file");
53 | } catch (final IOException e) {
54 | JsonModelExtensions.LOG.warn("[JMX] Could not store property file '" + configFile.getAbsolutePath() + "'", e);
55 | }
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/fabric/src/main/java/io/vram/jmx/JsonModelExtensions.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of JSON Model Extensions and is licensed to the project under
3 | * terms that are compatible with the GNU Lesser General Public License.
4 | * See the NOTICE file distributed with this work for additional information
5 | * regarding copyright ownership and licensing.
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU Lesser General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU Lesser General Public License
18 | * along with this program. If not, see .
19 | */
20 |
21 | package io.vram.jmx;
22 |
23 | import org.apache.logging.log4j.LogManager;
24 | import org.apache.logging.log4j.Logger;
25 |
26 | import net.fabricmc.api.ClientModInitializer;
27 | import net.fabricmc.loader.api.FabricLoader;
28 |
29 | import io.vram.jmx.api.JmxInitializer;
30 |
31 | public class JsonModelExtensions implements ClientModInitializer {
32 | public static final Logger LOG = LogManager.getLogger("JMX");
33 |
34 | public static final String MODID = "json-model-extensions";
35 |
36 | private static boolean isEndpointInitializationNeeded = true;
37 |
38 | @Override
39 | public void onInitializeClient() {
40 | // NOOP
41 | }
42 |
43 | public static void initializeEndpointsOnce() {
44 | if (isEndpointInitializationNeeded) {
45 | FabricLoader.getInstance().getEntrypoints("jmx", JmxInitializer.class).forEach(api -> api.onInitalizeJmx());
46 | isEndpointInitializationNeeded = false;
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/fabric/src/main/java/io/vram/jmx/api/JmxInitializer.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of JSON Model Extensions and is licensed to the project under
3 | * terms that are compatible with the GNU Lesser General Public License.
4 | * See the NOTICE file distributed with this work for additional information
5 | * regarding copyright ownership and licensing.
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU Lesser General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU Lesser General Public License
18 | * along with this program. If not, see .
19 | */
20 |
21 | package io.vram.jmx.api;
22 |
23 | /**
24 | * Use to make JMX an optional dependency. To do so, implement this interface
25 | * in a stand-alone class and declare a "jmx" end point in the mod's
26 | * fabric.mod.json that points to the implementation.
27 | *
28 | *
Every mod that implements this interface and declares and end point will receive
29 | * exactly one call to {@link #onInitalizeJmx()}.
30 | *
31 | *
To maintain an optional dependency, all calls to JMX methods must be isolated to
32 | * the JmxEntryPoint instance or to classes that are only loaded if {@link #onInitalizeJmx()}
33 | * is called.
34 | *
35 | *
Note that it is NOT necessary to implement this interface and register a
36 | * "jmx" end point for mods that nest the JMX library or have a hard dependency on JMX.
37 | * Such mods can safely handle JMX registration in their client initialize instance.
38 | */
39 | public interface JmxInitializer {
40 | /**
41 | * Signals mods that maintain an optional dependency on JMX that JMX is
42 | * loaded. Such mod should handle initialization activities that reference
43 | * JMX classes during this call.
44 | *
45 | *
Will be called after mod initialization but before mode baking begins.
46 | * It will be called exactly once per game start - subsequent resource or renderer
47 | * reloads will not cause it to be called again.
48 | */
49 | void onInitalizeJmx();
50 | }
51 |
--------------------------------------------------------------------------------
/fabric/src/main/java/io/vram/jmx/json/JmxTexturesExt.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of JSON Model Extensions and is licensed to the project under
3 | * terms that are compatible with the GNU Lesser General Public License.
4 | * See the NOTICE file distributed with this work for additional information
5 | * regarding copyright ownership and licensing.
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU Lesser General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU Lesser General Public License
18 | * along with this program. If not, see .
19 | */
20 |
21 | package io.vram.jmx.json;
22 |
23 | import java.util.Map;
24 |
25 | import com.google.gson.JsonObject;
26 |
27 | import com.mojang.datafixers.util.Either;
28 |
29 | import net.minecraft.client.resources.model.Material;
30 |
31 | import io.vram.jmx.json.v0.JmxTexturesExtV0;
32 | import io.vram.jmx.json.v1.JmxTexturesExtV1;
33 |
34 | public abstract class JmxTexturesExt {
35 | public static void handleJmxTextures(JsonObject obj, Map> map) {
36 | switch (JmxModelExt.VERSION.get()) {
37 | case 0:
38 | default:
39 | JmxTexturesExtV0.handleTexturesV0(obj, map);
40 | break;
41 | case 1:
42 | JmxTexturesExtV1.handleTexturesV1(obj, map);
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/fabric/src/main/java/io/vram/jmx/json/ext/JmxExtension.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of JSON Model Extensions and is licensed to the project under
3 | * terms that are compatible with the GNU Lesser General Public License.
4 | * See the NOTICE file distributed with this work for additional information
5 | * regarding copyright ownership and licensing.
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU Lesser General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU Lesser General Public License
18 | * along with this program. If not, see .
19 | */
20 |
21 | package io.vram.jmx.json.ext;
22 |
23 | public interface JmxExtension {
24 | T jmx_ext();
25 |
26 | void jmx_ext(T val);
27 | }
28 |
--------------------------------------------------------------------------------
/fabric/src/main/java/io/vram/jmx/json/ext/JsonBlockModelExt.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of JSON Model Extensions and is licensed to the project under
3 | * terms that are compatible with the GNU Lesser General Public License.
4 | * See the NOTICE file distributed with this work for additional information
5 | * regarding copyright ownership and licensing.
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU Lesser General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU Lesser General Public License
18 | * along with this program. If not, see .
19 | */
20 |
21 | package io.vram.jmx.json.ext;
22 |
23 | import java.util.Map;
24 |
25 | import com.mojang.datafixers.util.Either;
26 |
27 | import net.minecraft.client.resources.model.Material;
28 | import net.minecraft.resources.ResourceLocation;
29 |
30 | import io.vram.jmx.json.JmxModelExt;
31 |
32 | public interface JsonBlockModelExt {
33 | JmxModelExt> jmx_modelExt();
34 |
35 | JsonBlockModelExt jmx_parent();
36 |
37 | ResourceLocation jmx_parentId();
38 |
39 | void jmx_parent(JsonBlockModelExt parent);
40 |
41 | Map> jmx_textureMap();
42 | }
43 |
--------------------------------------------------------------------------------
/fabric/src/main/java/io/vram/jmx/json/model/BakedQuadFactoryExt.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of JSON Model Extensions and is licensed to the project under
3 | * terms that are compatible with the GNU Lesser General Public License.
4 | * See the NOTICE file distributed with this work for additional information
5 | * regarding copyright ownership and licensing.
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU Lesser General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU Lesser General Public License
18 | * along with this program. If not, see .
19 | */
20 |
21 | package io.vram.jmx.json.model;
22 |
23 | import net.minecraft.client.renderer.block.model.BlockElement;
24 | import net.minecraft.client.renderer.block.model.BlockElementFace;
25 | import net.minecraft.client.renderer.block.model.BlockFaceUV;
26 | import net.minecraft.client.renderer.texture.TextureAtlasSprite;
27 | import net.minecraft.client.resources.model.ModelState;
28 | import net.minecraft.core.Direction;
29 | import net.minecraft.resources.ResourceLocation;
30 |
31 | import io.vram.frex.api.buffer.QuadEmitter;
32 |
33 | public interface BakedQuadFactoryExt {
34 | void jmx_bake(QuadEmitter q, int spriteIndex, BlockElement element, BlockElementFace elementFace, BlockFaceUV tex, TextureAtlasSprite sprite, Direction face, ModelState modelBakeSettings, ResourceLocation modelId);
35 | }
36 |
--------------------------------------------------------------------------------
/fabric/src/main/java/io/vram/jmx/json/model/BakedQuadFactoryHelper.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of JSON Model Extensions and is licensed to the project under
3 | * terms that are compatible with the GNU Lesser General Public License.
4 | * See the NOTICE file distributed with this work for additional information
5 | * regarding copyright ownership and licensing.
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU Lesser General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU Lesser General Public License
18 | * along with this program. If not, see .
19 | */
20 |
21 | package io.vram.jmx.json.model;
22 |
23 | public class BakedQuadFactoryHelper {
24 | public static final int UV_LEN = 4;
25 | private static final ThreadLocal HELPERS = ThreadLocal.withInitial(BakedQuadFactoryHelper::new);
26 |
27 | public static BakedQuadFactoryHelper get() {
28 | return HELPERS.get();
29 | }
30 |
31 | public final int[] data = new int[32];
32 | public final float[] uv = new float[UV_LEN];
33 | public final float[] pos = new float[6];
34 | }
35 |
--------------------------------------------------------------------------------
/fabric/src/main/java/io/vram/jmx/mixin/MixinBlockElementFace.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of JSON Model Extensions and is licensed to the project under
3 | * terms that are compatible with the GNU Lesser General Public License.
4 | * See the NOTICE file distributed with this work for additional information
5 | * regarding copyright ownership and licensing.
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU Lesser General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU Lesser General Public License
18 | * along with this program. If not, see .
19 | */
20 |
21 | package io.vram.jmx.mixin;
22 |
23 | import org.apache.commons.lang3.ObjectUtils;
24 | import org.spongepowered.asm.mixin.Mixin;
25 | import org.spongepowered.asm.mixin.injection.At;
26 | import org.spongepowered.asm.mixin.injection.Inject;
27 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
28 |
29 | import net.minecraft.client.renderer.block.model.BlockElementFace;
30 |
31 | import io.vram.jmx.json.FaceExtData;
32 | import io.vram.jmx.json.ext.JmxExtension;
33 |
34 | @Mixin(BlockElementFace.class)
35 | public class MixinBlockElementFace implements JmxExtension {
36 | private FaceExtData jmx_ext;
37 |
38 | @Override
39 | public FaceExtData jmx_ext() {
40 | return jmx_ext;
41 | }
42 |
43 | @Override
44 | public void jmx_ext(FaceExtData val) {
45 | jmx_ext = val;
46 | }
47 |
48 | @Inject(at = @At("RETURN"), method = "")
49 | private void onInit(CallbackInfo ci) {
50 | jmx_ext = ObjectUtils.defaultIfNull(FaceExtData.TRANSFER.get(), FaceExtData.empty());
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/fabric/src/main/java/io/vram/jmx/mixin/MixinBlockElementFaceDeserializer.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of JSON Model Extensions and is licensed to the project under
3 | * terms that are compatible with the GNU Lesser General Public License.
4 | * See the NOTICE file distributed with this work for additional information
5 | * regarding copyright ownership and licensing.
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU Lesser General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU Lesser General Public License
18 | * along with this program. If not, see .
19 | */
20 |
21 | package io.vram.jmx.mixin;
22 |
23 | import java.lang.reflect.Type;
24 |
25 | import com.google.gson.JsonDeserializationContext;
26 | import com.google.gson.JsonElement;
27 | import com.google.gson.JsonObject;
28 | import org.spongepowered.asm.mixin.Mixin;
29 | import org.spongepowered.asm.mixin.injection.At;
30 | import org.spongepowered.asm.mixin.injection.Inject;
31 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
32 | import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
33 |
34 | import net.minecraft.core.Direction;
35 |
36 | import io.vram.jmx.json.FaceExtData;
37 |
38 | @Mixin(targets = "net.minecraft.client.renderer.block.model.BlockElementFace$Deserializer")
39 | public class MixinBlockElementFaceDeserializer {
40 | @Inject(method = "deserialize(Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/client/renderer/block/model/BlockElementFace;", allow = 1, require = 1, locals = LocalCapture.CAPTURE_FAILEXCEPTION,
41 | at = @At(
42 | value = "INVOKE",
43 | ordinal = 0,
44 | target = "Lnet/minecraft/client/renderer/block/model/BlockElementFace$Deserializer;getCullFacing(Lcom/google/gson/JsonObject;)Lnet/minecraft/core/Direction;"))
45 | private void hookDeserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context, CallbackInfoReturnable ci, JsonObject jsonObj) {
46 | FaceExtData.deserialize(jsonObj, context);
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/fabric/src/main/java/io/vram/jmx/mixin/MixinBlockModelDeserializer.java:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of JSON Model Extensions and is licensed to the project under
3 | * terms that are compatible with the GNU Lesser General Public License.
4 | * See the NOTICE file distributed with this work for additional information
5 | * regarding copyright ownership and licensing.
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU Lesser General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU Lesser General Public License
18 | * along with this program. If not, see .
19 | */
20 |
21 | package io.vram.jmx.mixin;
22 |
23 | import java.util.Map;
24 |
25 | import com.google.gson.JsonObject;
26 | import org.spongepowered.asm.mixin.Mixin;
27 | import org.spongepowered.asm.mixin.injection.At;
28 | import org.spongepowered.asm.mixin.injection.Inject;
29 | import org.spongepowered.asm.mixin.injection.ModifyVariable;
30 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
31 |
32 | import com.mojang.datafixers.util.Either;
33 |
34 | import net.minecraft.client.renderer.block.model.BlockModel;
35 | import net.minecraft.client.resources.model.Material;
36 |
37 | import io.vram.jmx.json.JmxModelExt;
38 | import io.vram.jmx.json.JmxTexturesExt;
39 |
40 | @Mixin(BlockModel.Deserializer.class)
41 | public class MixinBlockModelDeserializer {
42 | @Inject(at = @At("RETURN"), method = "getTextureMap")
43 | private void onGetTextureMap(JsonObject jsonObj, CallbackInfoReturnable