├── .gitignore
├── README.md
├── src
└── main
│ ├── resources
│ ├── datalists
│ │ ├── animatedarmor.yaml
│ │ ├── animatedentity.yaml
│ │ └── animateditem.yaml
│ ├── forge-1.20.1
│ │ ├── procedures
│ │ │ ├── no_animation.java.ftl
│ │ │ ├── is_geckolib_entity.java.ftl
│ │ │ ├── get_entity_animation.java.ftl
│ │ │ ├── get_entity_texture.java.ftl
│ │ │ ├── get_item_animation.java.ftl
│ │ │ ├── set_entity_texture.java.ftl
│ │ │ ├── stop_procedure.java.ftl
│ │ │ ├── play_newgeckoanim.java.ftl
│ │ │ ├── stop_item_animation.java.ftl
│ │ │ ├── item_animation.java.ftl
│ │ │ ├── stop_armor_animation.java.ftl
│ │ │ ├── set_armor_animation.java.ftl
│ │ │ ├── stop_block_animation.java.ftl
│ │ │ └── block_animation.java.ftl
│ │ ├── templates
│ │ │ ├── ajson
│ │ │ │ ├── spawn_egg.json.ftl
│ │ │ │ ├── armor
│ │ │ │ │ ├── tool.json.ftl
│ │ │ │ │ ├── item_cmodel_obj.json.ftl
│ │ │ │ │ ├── item_cmodel.json.ftl
│ │ │ │ │ └── item.json.ftl
│ │ │ │ ├── item.json.ftl
│ │ │ │ ├── blockstate.json.ftl
│ │ │ │ ├── block_particle.json.ftl
│ │ │ │ ├── block_item.json.ftl
│ │ │ │ └── entity_spawn_biome_modifier.json.ftl
│ │ │ ├── animatedblockutil
│ │ │ │ ├── blockentityrenderer.java.ftl
│ │ │ │ ├── displayitem
│ │ │ │ │ ├── displayrenderer.java.ftl
│ │ │ │ │ ├── displaymodel.java.ftl
│ │ │ │ │ └── displayitem.java.ftl
│ │ │ │ ├── listeners
│ │ │ │ │ └── blocklistener.java.ftl
│ │ │ │ └── blockentitymodel.java.ftl
│ │ │ ├── aentity
│ │ │ │ ├── animation_sync_factory.java.ftl
│ │ │ │ ├── livingentity_layer.java.ftl
│ │ │ │ ├── livingentity_model.java.ftl
│ │ │ │ ├── livingentity_projectile.java.ftl
│ │ │ │ └── livingentity_renderer.java.ftl
│ │ │ ├── aarmor
│ │ │ │ ├── armor_model.java.ftl
│ │ │ │ ├── armor_renderer.java.ftl
│ │ │ │ └── animation_sync_factory.java.ftl
│ │ │ ├── aitem
│ │ │ │ ├── item_model.java.ftl
│ │ │ │ ├── firstperson
│ │ │ │ │ └── anim_utils.java.ftl
│ │ │ │ ├── animation_sync_factory.java.ftl
│ │ │ │ └── item_container.java.ftl
│ │ │ ├── ablock
│ │ │ │ ├── placed_oregen.json.ftl
│ │ │ │ └── configured_oregen.json.ftl
│ │ │ └── elementinits
│ │ │ │ └── blockentities.java.ftl
│ │ ├── mappings
│ │ │ ├── animatedentity.yaml
│ │ │ ├── animateditem.yaml
│ │ │ └── animatedarmor.yaml
│ │ ├── animateditem.definition.yaml
│ │ ├── animatedentity.definition.yaml
│ │ └── animatedblock.definition.yaml
│ ├── help
│ │ ├── pl_PL
│ │ │ └── geckolib
│ │ │ │ ├── name.md
│ │ │ │ ├── armor_texture.md
│ │ │ │ ├── armor_model.md
│ │ │ │ ├── swim_animation.md
│ │ │ │ ├── attack_animation.md
│ │ │ │ ├── riding_animation.md
│ │ │ │ ├── death_time.md
│ │ │ │ ├── finished_dying.md
│ │ │ │ ├── disable_death_rotation.md
│ │ │ │ ├── eye_height.md
│ │ │ │ ├── conditional_animation.md
│ │ │ │ ├── fully_equipped.md
│ │ │ │ ├── idle_animation.md
│ │ │ │ ├── aggression_animation.md
│ │ │ │ ├── death_animation.md
│ │ │ │ ├── loop_animation.md
│ │ │ │ ├── sprint_animation.md
│ │ │ │ ├── baby_model.md
│ │ │ │ ├── sneak_animation.md
│ │ │ │ ├── condition_solid_bounding_box.md
│ │ │ │ ├── walk_animation.md
│ │ │ │ ├── first_person.md
│ │ │ │ ├── animation_name.md
│ │ │ │ ├── flight_animation.md
│ │ │ │ ├── model_arm.md
│ │ │ │ ├── head_movement.md
│ │ │ │ ├── lerp.md
│ │ │ │ └── animation_perspective.md
│ │ ├── zh_CN
│ │ │ └── geckolib
│ │ │ │ ├── name.md
│ │ │ │ ├── armor_texture.md
│ │ │ │ ├── block_animations.md
│ │ │ │ ├── death_time.md
│ │ │ │ ├── armor_model.md
│ │ │ │ ├── attack_animation.md
│ │ │ │ ├── eye_height.md
│ │ │ │ ├── finished_dying.md
│ │ │ │ ├── riding_animation.md
│ │ │ │ ├── swim_animation.md
│ │ │ │ ├── disable_swing.md
│ │ │ │ ├── idle_animation.md
│ │ │ │ ├── visual_scale.md
│ │ │ │ ├── conditional_animation.md
│ │ │ │ ├── death_animation.md
│ │ │ │ ├── disable_death_rotation.md
│ │ │ │ ├── fully_equipped.md
│ │ │ │ ├── loop_animation.md
│ │ │ │ ├── aggression_animation.md
│ │ │ │ ├── baby_model.md
│ │ │ │ ├── sneak_animation.md
│ │ │ │ ├── sprint_animation.md
│ │ │ │ ├── display_settings.md
│ │ │ │ ├── bounding_box_scale.md
│ │ │ │ ├── condition_solid_bounding_box.md
│ │ │ │ ├── model_arm.md
│ │ │ │ ├── walk_animation.md
│ │ │ │ ├── first_person.md
│ │ │ │ ├── head_movement.md
│ │ │ │ ├── flight_animation.md
│ │ │ │ ├── lerp.md
│ │ │ │ ├── animation_name.md
│ │ │ │ └── animation_perspective.md
│ │ ├── fr_FR
│ │ │ └── geckolib
│ │ │ │ ├── name.md
│ │ │ │ ├── armor_texture.md
│ │ │ │ ├── armor_model.md
│ │ │ │ ├── riding_animation.md
│ │ │ │ ├── swim_animation.md
│ │ │ │ ├── attack_animation.md
│ │ │ │ ├── conditional_animation.md
│ │ │ │ ├── finished_dying.md
│ │ │ │ ├── death_time.md
│ │ │ │ ├── disable_death_rotation.md
│ │ │ │ ├── aggression_animation.md
│ │ │ │ ├── death_animation.md
│ │ │ │ ├── eye_height.md
│ │ │ │ ├── fully_equipped.md
│ │ │ │ ├── idle_animation.md
│ │ │ │ ├── sneak_animation.md
│ │ │ │ ├── sprint_animation.md
│ │ │ │ ├── loop_animation.md
│ │ │ │ ├── baby_model.md
│ │ │ │ ├── condition_solid_bounding_box.md
│ │ │ │ ├── walk_animation.md
│ │ │ │ ├── first_person.md
│ │ │ │ ├── head_movement.md
│ │ │ │ ├── model_arm.md
│ │ │ │ ├── animation_name.md
│ │ │ │ ├── flight_animation.md
│ │ │ │ ├── lerp.md
│ │ │ │ └── animation_perspective.md
│ │ ├── default
│ │ │ └── geckolib
│ │ │ │ ├── name.md
│ │ │ │ ├── armor_texture.md
│ │ │ │ ├── armor_model.md
│ │ │ │ ├── block_animations.md
│ │ │ │ ├── attack_animation.md
│ │ │ │ ├── finished_dying.md
│ │ │ │ ├── swim_animation.md
│ │ │ │ ├── death_time.md
│ │ │ │ ├── fully_equipped.md
│ │ │ │ ├── riding_animation.md
│ │ │ │ ├── conditional_animation.md
│ │ │ │ ├── animate_blockitem.md
│ │ │ │ ├── disable_swing.md
│ │ │ │ ├── disable_death_rotation.md
│ │ │ │ ├── death_animation.md
│ │ │ │ ├── idle_animation.md
│ │ │ │ ├── eye_height.md
│ │ │ │ ├── sneak_animation.md
│ │ │ │ ├── aggression_animation.md
│ │ │ │ ├── loop_animation.md
│ │ │ │ ├── sprint_animation.md
│ │ │ │ ├── condition_solid_bounding_box.md
│ │ │ │ ├── baby_model.md
│ │ │ │ ├── display_settings.md
│ │ │ │ ├── visual_scale.md
│ │ │ │ ├── attack_interval.md
│ │ │ │ ├── bounding_box_scale
│ │ │ │ ├── bounding_box_scale.md
│ │ │ │ ├── first_person.md
│ │ │ │ ├── walk_animation.md
│ │ │ │ ├── animation_name.md
│ │ │ │ ├── flight_animation.md
│ │ │ │ ├── model_arm.md
│ │ │ │ ├── head_movement.md
│ │ │ │ ├── animation_perspective.md
│ │ │ │ └── lerp.md
│ │ ├── es_AR
│ │ │ └── geckolib
│ │ │ │ ├── name.md
│ │ │ │ ├── armor_texture.md
│ │ │ │ ├── armor_model.md
│ │ │ │ ├── attack_animation.md
│ │ │ │ ├── finished_dying.md
│ │ │ │ ├── swim_animation.md
│ │ │ │ ├── riding_animation.md
│ │ │ │ ├── death_time.md
│ │ │ │ ├── conditional_animation.md
│ │ │ │ ├── disable_death_rotation.md
│ │ │ │ ├── fully_equipped.md
│ │ │ │ ├── eye_height.md
│ │ │ │ ├── aggression_animation.md
│ │ │ │ ├── death_animation.md
│ │ │ │ ├── idle_animation.md
│ │ │ │ ├── sneak_animation.md
│ │ │ │ ├── sprint_animation.md
│ │ │ │ ├── condition_solid_bounding_box.md
│ │ │ │ ├── baby_model.md
│ │ │ │ ├── loop_animation.md
│ │ │ │ ├── first_person.md
│ │ │ │ ├── animation_name.md
│ │ │ │ ├── walk_animation.md
│ │ │ │ ├── flight_animation.md
│ │ │ │ ├── head_movement.md
│ │ │ │ ├── model_arm.md
│ │ │ │ ├── lerp.md
│ │ │ │ └── animation_perspective.md
│ │ └── es_CL
│ │ │ └── geckolib
│ │ │ ├── name.md
│ │ │ ├── armor_texture.md
│ │ │ ├── armor_model.md
│ │ │ ├── attack_animation.md
│ │ │ ├── finished_dying.md
│ │ │ ├── swim_animation.md
│ │ │ ├── riding_animation.md
│ │ │ ├── death_time.md
│ │ │ ├── conditional_animation.md
│ │ │ ├── disable_death_rotation.md
│ │ │ ├── fully_equipped.md
│ │ │ ├── eye_height.md
│ │ │ ├── aggression_animation.md
│ │ │ ├── death_animation.md
│ │ │ ├── idle_animation.md
│ │ │ ├── sneak_animation.md
│ │ │ ├── sprint_animation.md
│ │ │ ├── condition_solid_bounding_box.md
│ │ │ ├── baby_model.md
│ │ │ ├── loop_animation.md
│ │ │ ├── first_person.md
│ │ │ ├── animation_name.md
│ │ │ ├── walk_animation.md
│ │ │ ├── flight_animation.md
│ │ │ ├── head_movement.md
│ │ │ ├── model_arm.md
│ │ │ ├── lerp.md
│ │ │ └── animation_perspective.md
│ ├── neoforge-1.21.1
│ │ ├── procedures
│ │ │ ├── no_animation.java.ftl
│ │ │ ├── is_geckolib_entity.java.ftl
│ │ │ ├── get_entity_animation.java.ftl
│ │ │ ├── get_entity_texture.java.ftl
│ │ │ ├── get_item_animation.java.ftl
│ │ │ ├── set_entity_texture.java.ftl
│ │ │ ├── stop_procedure.java.ftl
│ │ │ ├── play_newgeckoanim.java.ftl
│ │ │ ├── stop_item_animation.java.ftl
│ │ │ ├── item_animation.java.ftl
│ │ │ ├── stop_armor_animation.java.ftl
│ │ │ ├── stop_block_animation.java.ftl
│ │ │ ├── set_armor_animation.java.ftl
│ │ │ └── block_animation.java.ftl
│ │ ├── templates
│ │ │ ├── ajson
│ │ │ │ ├── spawn_egg.json.ftl
│ │ │ │ ├── armor
│ │ │ │ │ ├── tool.json.ftl
│ │ │ │ │ ├── item_cmodel.json.ftl
│ │ │ │ │ ├── item_cmodel_obj.json.ftl
│ │ │ │ │ └── item.json.ftl
│ │ │ │ ├── item.json.ftl
│ │ │ │ ├── blockstate.json.ftl
│ │ │ │ ├── block_particle.json.ftl
│ │ │ │ ├── block_item.json.ftl
│ │ │ │ └── entity_spawn_biome_modifier.json.ftl
│ │ │ ├── animatedblockutil
│ │ │ │ ├── blockentityrenderer.java.ftl
│ │ │ │ ├── displayitem
│ │ │ │ │ ├── displayrenderer.java.ftl
│ │ │ │ │ ├── displaymodel.java.ftl
│ │ │ │ │ └── displayitem.java.ftl
│ │ │ │ ├── listeners
│ │ │ │ │ └── blocklistener.java.ftl
│ │ │ │ └── blockentitymodel.java.ftl
│ │ │ ├── aitem
│ │ │ │ ├── firstperson
│ │ │ │ │ └── anim_utils.java.ftl
│ │ │ │ ├── item_model.java.ftl
│ │ │ │ ├── animation_sync_factory.java.ftl
│ │ │ │ ├── item_container.java.ftl
│ │ │ │ └── item_renderer.java.ftl
│ │ │ ├── aentity
│ │ │ │ ├── animation_sync_factory.java.ftl
│ │ │ │ ├── livingentity_layer.java.ftl
│ │ │ │ ├── livingentity_model.java.ftl
│ │ │ │ ├── livingentity_projectile.java.ftl
│ │ │ │ └── livingentity_renderer.java.ftl
│ │ │ ├── aarmor
│ │ │ │ ├── armor_model.java.ftl
│ │ │ │ ├── armor_renderer.java.ftl
│ │ │ │ └── animation_sync_factory.java.ftl
│ │ │ ├── json
│ │ │ │ └── monster_room_mobs.json.ftl
│ │ │ ├── ablock
│ │ │ │ ├── placed_oregen.json.ftl
│ │ │ │ └── configured_oregen.json.ftl
│ │ │ └── modbase
│ │ │ │ ├── enumextensions.json.ftl
│ │ │ │ └── neoforge.mods.toml.ftl
│ │ ├── mappings
│ │ │ ├── animatedentity.yaml
│ │ │ ├── animateditem.yaml
│ │ │ └── animatedarmor.yaml
│ │ ├── animateditem.definition.yaml
│ │ ├── animatedentity.definition.yaml
│ │ └── animatedblock.definition.yaml
│ ├── procedures
│ │ ├── $geckolib.json
│ │ ├── no_animation.json
│ │ ├── is_geckolib_entity.json
│ │ ├── get_entity_texture.json
│ │ ├── get_entity_animation.json
│ │ ├── get_item_animation.json
│ │ ├── stop_procedure.json
│ │ ├── stop_item_animation.json
│ │ ├── stop_armor_animation.json
│ │ ├── set_entity_texture.json
│ │ ├── play_newgeckoanim.json
│ │ ├── item_animation.json
│ │ ├── set_armor_animation.json
│ │ ├── stop_block_animation.json
│ │ └── block_animation.json
│ ├── lang
│ │ └── texts_fr_FR.properties
│ ├── themes
│ │ ├── matrix
│ │ │ └── images
│ │ │ │ ├── model
│ │ │ │ ├── geckolib.png
│ │ │ │ └── small_geckolib.png
│ │ │ │ ├── mod_types
│ │ │ │ ├── animatedarmor.png
│ │ │ │ ├── animatedblock.png
│ │ │ │ ├── animateditem.png
│ │ │ │ ├── animatedentity.png
│ │ │ │ └── animatedblock.aseprite
│ │ │ │ └── 16px
│ │ │ │ └── importgeckolibmodel.png
│ │ ├── midnight
│ │ │ └── images
│ │ │ │ ├── model
│ │ │ │ ├── geckolib.png
│ │ │ │ └── small_geckolib.png
│ │ │ │ ├── mod_types
│ │ │ │ ├── animatedarmor.png
│ │ │ │ ├── animatedblock.png
│ │ │ │ ├── animateditem.png
│ │ │ │ └── animatedentity.png
│ │ │ │ └── 16px
│ │ │ │ └── importgeckolibmodel.png
│ │ ├── default_dark
│ │ │ └── images
│ │ │ │ ├── model
│ │ │ │ ├── geckolib.png
│ │ │ │ └── small_geckolib.png
│ │ │ │ ├── 16px
│ │ │ │ ├── geckolibicon.png
│ │ │ │ ├── questionmark.png
│ │ │ │ └── importgeckolibmodel.png
│ │ │ │ └── mod_types
│ │ │ │ ├── animateditem.png
│ │ │ │ ├── animatedarmor.png
│ │ │ │ ├── animatedblock.png
│ │ │ │ └── animatedentity.png
│ │ └── default_light
│ │ │ └── images
│ │ │ └── mod_types
│ │ │ ├── animatedarmor.png
│ │ │ ├── animatedblock.png
│ │ │ ├── animateditem.png
│ │ │ └── animatedentity.png
│ ├── plugin.json
│ ├── LICENSE
│ └── apis
│ │ └── geckolib.yaml
│ └── java
│ └── net
│ └── nerdypuzzle
│ └── geckolib
│ ├── element
│ └── types
│ │ └── GeckolibElement.java
│ ├── parts
│ ├── RefactoredSystemsICopyPastedBecauseIWasTooBloodyLazyToActuallyProperlyReplace.java
│ ├── arm_pose_list
│ │ ├── JArmPoseList.java
│ │ └── JArmPoseEntry.java
│ ├── GeomodelRenderer.java
│ ├── blockstate_list
│ │ └── JBlockstateList.java
│ └── WTextureComboBoxRenderer.java
│ ├── registry
│ ├── PluginActions.java
│ └── PluginElementTypes.java
│ └── Launcher.java
├── gradle.properties
├── settings.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── update.json
├── LICENSE
└── gradlew.bat
/.gitignore:
--------------------------------------------------------------------------------
1 | /.gradle/
2 | /.idea/
3 | /build/
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MCreator-Nerdys_Geckolib_Plugin
2 |
--------------------------------------------------------------------------------
/src/main/resources/datalists/animatedarmor.yaml:
--------------------------------------------------------------------------------
1 | - nothing
--------------------------------------------------------------------------------
/src/main/resources/datalists/animatedentity.yaml:
--------------------------------------------------------------------------------
1 | - nothing
--------------------------------------------------------------------------------
/src/main/resources/datalists/animateditem.yaml:
--------------------------------------------------------------------------------
1 | - nothing
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/no_animation.java.ftl:
--------------------------------------------------------------------------------
1 | "empty"
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/name.md:
--------------------------------------------------------------------------------
1 | Nazwa plików json GeckoLib.
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/name.md:
--------------------------------------------------------------------------------
1 | GeckoLib中json文件的名称。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/armor_texture.md:
--------------------------------------------------------------------------------
1 | GeckoLib中盔甲模型的纹理。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/block_animations.md:
--------------------------------------------------------------------------------
1 | 方块可以使用的流程动画数量。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/death_time.md:
--------------------------------------------------------------------------------
1 | 该参数决定实体死亡后保持死亡状态的时间。
2 |
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/no_animation.java.ftl:
--------------------------------------------------------------------------------
1 | "empty"
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/name.md:
--------------------------------------------------------------------------------
1 | Le nom des fichiers json de GeckoLib.
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/armor_model.md:
--------------------------------------------------------------------------------
1 | GeckoLib中json模型和动画的名称。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/attack_animation.md:
--------------------------------------------------------------------------------
1 | 此动画将在每次实体进行攻击时播放一次。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/eye_height.md:
--------------------------------------------------------------------------------
1 | 启用此参数时,它将覆盖实体的眼睛高度到指定的值。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/finished_dying.md:
--------------------------------------------------------------------------------
1 | 实体到达其死亡时间时,就会触发这个流程。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/riding_animation.md:
--------------------------------------------------------------------------------
1 | 如果实体被骑乘,这个动画将取代行走动画。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/swim_animation.md:
--------------------------------------------------------------------------------
1 | 此动画将取代实体在水中时的待机动画。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/name.md:
--------------------------------------------------------------------------------
1 | The name of the GeckoLib json files.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/armor_texture.md:
--------------------------------------------------------------------------------
1 | Tekstura modelu zbroi GeckoLib.
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/disable_swing.md:
--------------------------------------------------------------------------------
1 | 启用此选项后,在手持该物品进行攻击时您的手臂将不会摆动。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/idle_animation.md:
--------------------------------------------------------------------------------
1 | 此动画将在实体处于待机状态且没有其他动画时播放。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/visual_scale.md:
--------------------------------------------------------------------------------
1 | 这将决定实体模型的大小。但不会改变实体的边框大小。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/name.md:
--------------------------------------------------------------------------------
1 | El nombre de los archivos json de GeckoLib.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/name.md:
--------------------------------------------------------------------------------
1 | El nombre de los archivos json de GeckoLib.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/armor_model.md:
--------------------------------------------------------------------------------
1 | Nazwa modelu i animacji json GeckoLib.
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/conditional_animation.md:
--------------------------------------------------------------------------------
1 | 当返回一个有效的动画名时,将对实体播放该动画。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/death_animation.md:
--------------------------------------------------------------------------------
1 | 这个动画将在实体死亡时播放。使用它的时候最好禁用死亡旋转。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/disable_death_rotation.md:
--------------------------------------------------------------------------------
1 | 勾选此参数可防止实体模型在实体死亡时向一侧旋转。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/fully_equipped.md:
--------------------------------------------------------------------------------
1 | 如果勾选了此选项,只有在穿着全套盔甲时,盔甲动画才会播放。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/loop_animation.md:
--------------------------------------------------------------------------------
1 | 返回值为true时,通过返回的动画条件或动画流程使其动画循环。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/armor_texture.md:
--------------------------------------------------------------------------------
1 | The texture of the GeckoLib armor model.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/armor_texture.md:
--------------------------------------------------------------------------------
1 | La textura del modelo de armadura GeckoLib.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/armor_texture.md:
--------------------------------------------------------------------------------
1 | La textura del modelo de armadura GeckoLib.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/armor_texture.md:
--------------------------------------------------------------------------------
1 | La texture du modèle d'armure de GeckoLib.
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/aggression_animation.md:
--------------------------------------------------------------------------------
1 | 这段动画将在实体对其他实体攻击时播放,并将替换行走动画。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/baby_model.md:
--------------------------------------------------------------------------------
1 | 如果它是使用刷怪蛋或通过繁殖两个实体生成的幼年实体,则此参数控制实体模型的大小。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/sneak_animation.md:
--------------------------------------------------------------------------------
1 | 实体的潜行状态为true时,此动画将播放,这可通过潜行的流程块来完成。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/sprint_animation.md:
--------------------------------------------------------------------------------
1 | 实体的疾跑状态为true时,此动画将播放,这可通过疾跑的流程块来完成。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/armor_model.md:
--------------------------------------------------------------------------------
1 | El nombre del modelo y animación json de GeckoLib.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/armor_model.md:
--------------------------------------------------------------------------------
1 | El nombre del modelo y animación json de GeckoLib.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/armor_model.md:
--------------------------------------------------------------------------------
1 | Le nom du modèle et de l'animation GeckoLib json.
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/display_settings.md:
--------------------------------------------------------------------------------
1 | Blockbench导出的显示设置文件。这用于正确呈现物品模型,因此是必需的。
2 |
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/is_geckolib_entity.java.ftl:
--------------------------------------------------------------------------------
1 | (${input$entity} instanceof GeoEntity)
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/armor_model.md:
--------------------------------------------------------------------------------
1 | The name of the GeckoLib json model and animation.
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/bounding_box_scale.md:
--------------------------------------------------------------------------------
1 | 这决定了实体的边框大小。当改变实体的大小时,这个也应该改变,否则边框将保持默认大小。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/condition_solid_bounding_box.md:
--------------------------------------------------------------------------------
1 | 返回值为true时,实体的边框将是实心的。例如,船就使用了这个功能。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/model_arm.md:
--------------------------------------------------------------------------------
1 | 这将是搜索模型组时禁用或替换玩家手臂使用的名称。那只手臂将会有模型组的动画。如果指定的模型组不存在,则手臂不显示。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/walk_animation.md:
--------------------------------------------------------------------------------
1 | 这是在实体行走且没有其他动画正在播放时的动画。如果实体有飞行动画,那此动画只会在实体在地面上行走时播放。
2 |
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/is_geckolib_entity.java.ftl:
--------------------------------------------------------------------------------
1 | (${input$entity} instanceof GeoEntity)
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | mcreator_path=C:/Users/demet/Desktop/repos/RangedContribution/CustomMcreatorRelease/MCreator/MCreator
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/ajson/spawn_egg.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/template_spawn_egg"
3 | }
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/block_animations.md:
--------------------------------------------------------------------------------
1 | The amount of procedure animations that the block can use.
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/first_person.md:
--------------------------------------------------------------------------------
1 | 当勾选此选项时,以下指定的模型组将被替换为玩家手臂。这些手臂仅会在第一人称视角显示在屏幕上,并且不会成为模型的一部分。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/head_movement.md:
--------------------------------------------------------------------------------
1 | 勾选此参数可指定一个模型组,默认的头部运动动画将应用于该模型组。确保你写的组名正确,否则这将在生成实体时游戏崩溃。
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/swim_animation.md:
--------------------------------------------------------------------------------
1 | Ta animacja zastąpi animację bezczynności gdy istota jest w wodzie.
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/flight_animation.md:
--------------------------------------------------------------------------------
1 | 此动画将在实体飞行时播放,并在实体返回地面时停止。如果你的实体只会飞,您不应该使用这个,因为这会阻止行走动画在空中播放。
2 |
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/ajson/spawn_egg.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/template_spawn_egg"
3 | }
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/attack_animation.md:
--------------------------------------------------------------------------------
1 | Ta animacja będzie odtwarzana za każdym razem gdy istota wykona atak.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/riding_animation.md:
--------------------------------------------------------------------------------
1 | Ta animacja zastąpi animację chodzenia, jeśli istota jest ujeżdżana.
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/lerp.md:
--------------------------------------------------------------------------------
1 | 此参数决定了实体从一个动画过渡到另一个动画所需的时间。将此值设置得高会使过渡更平滑,而将其设置得低则会降低平滑度。要完全禁用转换,请将此值设置为零。
2 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'GeckoLib'
2 |
3 | include ":MCreator"
4 | project(":MCreator").projectDir = file(mcreator_path)
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/attack_animation.md:
--------------------------------------------------------------------------------
1 | This animation will play once every time the entity performs an attack.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/death_time.md:
--------------------------------------------------------------------------------
1 | Ten parametr określa liczbę ticków, przez które byt pozostanie martwa po śmierci.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/finished_dying.md:
--------------------------------------------------------------------------------
1 | This procedure is triggered when the entity reaches the end of its death time.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/swim_animation.md:
--------------------------------------------------------------------------------
1 | This animation will replace the idle animation while the entity is in water.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/attack_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación se reproducirá una vez cada vez que la entidad realice un ataque.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/attack_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación se reproducirá una vez cada vez que la entidad realice un ataque.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/riding_animation.md:
--------------------------------------------------------------------------------
1 | Cette animation remplacera l'animation de marche si l'entité est chevauchée.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/swim_animation.md:
--------------------------------------------------------------------------------
1 | Cette animation remplacera l'animation de ralenti lorsque l'entité est dans l'eau.
--------------------------------------------------------------------------------
/src/main/resources/procedures/$geckolib.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "GeckoLib",
3 | "color": 117,
4 | "api": true
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/death_time.md:
--------------------------------------------------------------------------------
1 | This parameter determines the amount of ticks the entity will stay dead for after dying.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/fully_equipped.md:
--------------------------------------------------------------------------------
1 | If checked, armor animations will only play while a full set of this armor is worn.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/riding_animation.md:
--------------------------------------------------------------------------------
1 | This animation will replace the walking animation if the entity is being ridden.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/finished_dying.md:
--------------------------------------------------------------------------------
1 | Este procedimiento se activa cuando la entidad alcanza el final de su tiempo de muerte.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/swim_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación sustituirá a la animación de reposo mientras la entidad esté en el agua.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/finished_dying.md:
--------------------------------------------------------------------------------
1 | Este procedimiento se activa cuando la entidad alcanza el final de su tiempo de muerte.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/swim_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación sustituirá a la animación de reposo mientras la entidad esté en el agua.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/attack_animation.md:
--------------------------------------------------------------------------------
1 | Cette animation sera jouée une fois chaque fois que l'entité effectuera une attaque.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/conditional_animation.md:
--------------------------------------------------------------------------------
1 | Si un nom d'animation valide est renvoyé, cette animation sera jouée à l'entité.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/finished_dying.md:
--------------------------------------------------------------------------------
1 | Cette procédure est déclenchée lorsque l'entité atteint la fin de son temps de mort.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/finished_dying.md:
--------------------------------------------------------------------------------
1 | Ta procedura jest uruchamiana, gdy istota osiągnie koniec swojego czasu śmierci.
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/animation_name.md:
--------------------------------------------------------------------------------
1 | 这应该是您想让特定字段播放的动画名称。例如,有效的输入可以是animation.example.idle或如果你没有使用它,直接输入idle也会产生相同的效果。
2 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/conditional_animation.md:
--------------------------------------------------------------------------------
1 | While a valid animation name is returned, will play that animation to the entity.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/riding_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación reemplazará a la animación de caminar si la entidad está siendo montada.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/riding_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación reemplazará a la animación de caminar si la entidad está siendo montada.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/death_time.md:
--------------------------------------------------------------------------------
1 | Ce paramètre détermine le nombre de ticks pendant lesquels l'entité restera morte après sa mort.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/animate_blockitem.md:
--------------------------------------------------------------------------------
1 | If checked, the item used to place the block down will play the idle animation of the block.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/disable_swing.md:
--------------------------------------------------------------------------------
1 | Enabling this option will prevent your arm from swinging when attacking with this item held.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/death_time.md:
--------------------------------------------------------------------------------
1 | Este parámetro determina la cantidad de ticks que la entidad permanecerá muerta después de morir.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/death_time.md:
--------------------------------------------------------------------------------
1 | Este parámetro determina la cantidad de ticks que la entidad permanecerá muerta después de morir.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/disable_death_rotation.md:
--------------------------------------------------------------------------------
1 | Zaznaczenie tego parametru zapobiega obracaniu się modelu bytu na boki, kiedy ten umiera.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/conditional_animation.md:
--------------------------------------------------------------------------------
1 | Mientras se devuelva un nombre de animación válido, reproducirá esa animación a la entidad.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/conditional_animation.md:
--------------------------------------------------------------------------------
1 | Mientras se devuelva un nombre de animación válido, reproducirá esa animación a la entidad.
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/get_entity_animation.java.ftl:
--------------------------------------------------------------------------------
1 | ((${(field$entityname)?replace("CUSTOM:", "")}Entity) ${input$entity}).animationprocedure
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/disable_death_rotation.md:
--------------------------------------------------------------------------------
1 | Checking this parameter prevents the entity model from rotating to the side when the entity dies.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/eye_height.md:
--------------------------------------------------------------------------------
1 | Kiedy ten parametr jest włączony, nadpisze on pozycję hitboxa na wysokości oczu bytu do określonej wartości.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/death_animation.md:
--------------------------------------------------------------------------------
1 | This animation will play when the entity dies. It is ideal to have death rotation disabled when using it.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/idle_animation.md:
--------------------------------------------------------------------------------
1 | This is the animation that will play while the entity is in an idle state, and no other animation is active.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/conditional_animation.md:
--------------------------------------------------------------------------------
1 | Gdy wartość nazwy animacji jest zwrócona, dana animacja zostanie odtworzona dla danego bytu.
2 |
3 |
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/get_entity_animation.java.ftl:
--------------------------------------------------------------------------------
1 | ((${(field$entityname)?replace("CUSTOM:", "")}Entity) ${input$entity}).animationprocedure
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/eye_height.md:
--------------------------------------------------------------------------------
1 | When this parameter is enabled, it will override the entity's eye height position of the hitbox to the specified value.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/disable_death_rotation.md:
--------------------------------------------------------------------------------
1 | La activación de este parámetro impide que el modelo de entidad gire hacia un lado cuando la entidad muere.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/disable_death_rotation.md:
--------------------------------------------------------------------------------
1 | La activación de este parámetro impide que el modelo de entidad gire hacia un lado cuando la entidad muere.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/disable_death_rotation.md:
--------------------------------------------------------------------------------
1 | Le fait de cocher ce paramètre empêche le modèle de l'entité de pivoter sur le côté lorsque l'entité meurt.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/fully_equipped.md:
--------------------------------------------------------------------------------
1 | Jeśli ta opcja jest zaznaczona, animacje zbroi będą odtwarzane tylko wtedy, kiedy gracz nośi pełny zestaw zbroi.
2 |
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/idle_animation.md:
--------------------------------------------------------------------------------
1 | To jest animacja, która będzie odtwarzana, gdy byt jest w stanie bezczynności i żadna inna animacja nie jest aktywna.
--------------------------------------------------------------------------------
/src/main/resources/lang/texts_fr_FR.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/lang/texts_fr_FR.properties
--------------------------------------------------------------------------------
/src/main/java/net/nerdypuzzle/geckolib/element/types/GeckolibElement.java:
--------------------------------------------------------------------------------
1 | package net.nerdypuzzle.geckolib.element.types;
2 |
3 | public interface GeckolibElement {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/mappings/animatedentity.yaml:
--------------------------------------------------------------------------------
1 | _mcreator_prefix: "CUSTOM:"
2 | _mcreator_map_template:
3 | - "@NAME"
4 | - "@NAME"
5 | - "@modid:@registryname"
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/mappings/animateditem.yaml:
--------------------------------------------------------------------------------
1 | _mcreator_prefix: "CUSTOM:"
2 | _mcreator_map_template:
3 | - "@NAME"
4 | - "@NAME"
5 | - "@modid:@registryname"
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/fully_equipped.md:
--------------------------------------------------------------------------------
1 | Si está marcada, las animaciones de armadura sólo se reproducirán mientras se lleve un conjunto completo de esta armadura.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/fully_equipped.md:
--------------------------------------------------------------------------------
1 | Si está marcada, las animaciones de armadura sólo se reproducirán mientras se lleve un conjunto completo de esta armadura.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/aggression_animation.md:
--------------------------------------------------------------------------------
1 | Cette animation sera jouée si l'entité est agressive envers une autre entité et remplacera l'animation de marche.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/aggression_animation.md:
--------------------------------------------------------------------------------
1 | Ta animacja zostanie odtworzona, jeśli byt jest agresywny w stosunku do innego bytu oraz zastąpi animację chodzenia.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/sneak_animation.md:
--------------------------------------------------------------------------------
1 | This animation will play while the entity has sneaking set to true, which can be done through the sneaking procedure block.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/eye_height.md:
--------------------------------------------------------------------------------
1 | Cuando este parámetro está habilitado, anulará la posición de la altura del ojo de la entidad del hitbox al valor especificado.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/eye_height.md:
--------------------------------------------------------------------------------
1 | Cuando este parámetro está habilitado, anulará la posición de la altura del ojo de la entidad del hitbox al valor especificado.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/death_animation.md:
--------------------------------------------------------------------------------
1 | Cette animation est jouée lorsque l'entité meurt. L'idéal est d'avoir la rotation de mort désactivée lorsque vous l'utilisez.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/eye_height.md:
--------------------------------------------------------------------------------
1 | Lorsque ce paramètre est activé, il remplace la position de la hauteur des yeux de l'entité de la hitbox par la valeur spécifiée.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/fully_equipped.md:
--------------------------------------------------------------------------------
1 | Si cette case est cochée, les animations d'armure ne seront jouées que lorsqu'un ensemble complet de cette armure est porté.
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/mappings/animatedentity.yaml:
--------------------------------------------------------------------------------
1 | _mcreator_prefix: "CUSTOM:"
2 | _mcreator_map_template:
3 | - "@NAME"
4 | - "@NAME"
5 | - "@modid:@registryname"
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/mappings/animateditem.yaml:
--------------------------------------------------------------------------------
1 | _mcreator_prefix: "CUSTOM:"
2 | _mcreator_map_template:
3 | - "@NAME"
4 | - "@NAME"
5 | - "@modid:@registryname"
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/mappings/animatedarmor.yaml:
--------------------------------------------------------------------------------
1 | _mcreator_prefix: "CUSTOM:"
2 | _mcreator_map_template:
3 | - "@NAME"
4 | - "@registryname"
5 | - "@modid:@registryname"
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/aggression_animation.md:
--------------------------------------------------------------------------------
1 | This animation will play if the entity is being aggressive towards another entity and will replace the walking animation.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/loop_animation.md:
--------------------------------------------------------------------------------
1 | While the returned value is true, animations played through the returned animation condition or animation procedures will loop.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/sprint_animation.md:
--------------------------------------------------------------------------------
1 | This animation will play while the entity has sprinting set to true, which can be done through the sprinting procedure block.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/aggression_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación se reproducirá si la entidad está siendo agresiva hacia otra entidad y reemplazará la animación de caminar.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/death_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación se reproducirá cuando la entidad muera. Lo ideal es tener desactivada la rotación de la muerte cuando se utiliza.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/idle_animation.md:
--------------------------------------------------------------------------------
1 | Esta es la animación que se reproducirá mientras la entidad se encuentre en estado inactivo, y ninguna otra animación esté activa.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/aggression_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación se reproducirá si la entidad está siendo agresiva hacia otra entidad y reemplazará la animación de caminar.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/death_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación se reproducirá cuando la entidad muera. Lo ideal es tener desactivada la rotación de la muerte cuando se utiliza.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/idle_animation.md:
--------------------------------------------------------------------------------
1 | Esta es la animación que se reproducirá mientras la entidad se encuentre en estado inactivo, y ninguna otra animación esté activa.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/idle_animation.md:
--------------------------------------------------------------------------------
1 | Il s'agit de l'animation qui sera jouée lorsque l'entité est dans un état d'inactivité et qu'aucune autre animation n'est active.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/death_animation.md:
--------------------------------------------------------------------------------
1 | Ta animacja zostanie odtworzona, gdy byt umrze. Idealnie jest mieć wyłączoną rotację śmierci podczas korzystania z tej funkcji.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/loop_animation.md:
--------------------------------------------------------------------------------
1 | Gdy zwrócona wartość jest prawidłowa, animacje odtwarzane przez zwrócony warunek animacji lub procedury animacji będą się zapętlać.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/sprint_animation.md:
--------------------------------------------------------------------------------
1 | Ta animacja będzie odtwarzana gdy jednostka ma ustawiony sprint wartość true, co można zrobić za pomocą bloku procedury sprintu.
--------------------------------------------------------------------------------
/src/main/resources/help/zh_CN/geckolib/animation_perspective.md:
--------------------------------------------------------------------------------
1 | 这个参数决定了在哪种视角下物品动画会播放。“All Perspectives”将始终允许动画播放,“First Person”仅在进入第一人称视角时播放动画,而“Third/Second Person”仅在未进入第一人称视角时播放动画。
2 |
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/mappings/animatedarmor.yaml:
--------------------------------------------------------------------------------
1 | _mcreator_prefix: "CUSTOM:"
2 | _mcreator_map_template:
3 | - "@NAME"
4 | - "@registryname"
5 | - "@modid:@registryname"
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/get_entity_texture.java.ftl:
--------------------------------------------------------------------------------
1 | (${input$entity} instanceof ${(field$element)?replace("CUSTOM:", "")}Entity animatable ? animatable.getTexture() : "null")
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/condition_solid_bounding_box.md:
--------------------------------------------------------------------------------
1 | While the returned value is true, the entity's bounding box is solid.
2 | This feature is used by boats, for example.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/baby_model.md:
--------------------------------------------------------------------------------
1 | Ten parametr kontroluje skalę modelu bytu, jeśli byt został utworzony przy użyciu jajka spawnującego lub przy rozmnażaniu dwóch bytow.
2 |
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/ajson/armor/tool.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/handheld",
3 | "textures": {
4 | "layer0": "${modid}:item/${data.texture}"
5 | }
6 | }
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/baby_model.md:
--------------------------------------------------------------------------------
1 | This parameter controls the scale the entity's model will have if it is the child spawned using spawn eggs or by breeding two entities together.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/display_settings.md:
--------------------------------------------------------------------------------
1 | The display settings file that was exported from blockbench.
2 | This is used to properly render the item model and is therefore required.
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/get_entity_texture.java.ftl:
--------------------------------------------------------------------------------
1 | (${input$entity} instanceof ${(field$element)?replace("CUSTOM:", "")}Entity animatable ? animatable.getTexture() : "null")
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/ajson/armor/tool.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/handheld",
3 | "textures": {
4 | "layer0": "${modid}:item/${data.texture}"
5 | }
6 | }
--------------------------------------------------------------------------------
/src/main/resources/themes/matrix/images/model/geckolib.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/matrix/images/model/geckolib.png
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/get_item_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcitems.ftl">
2 | ((${(field$itemname)?replace("CUSTOM:", "")}Item) ${mappedMCItemToItem(input$item)}).animationprocedure
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/sneak_animation.md:
--------------------------------------------------------------------------------
1 | Cette animation sera jouée lorsque l'entité a la fonction "sneaking" activée, ce qui peut être fait par le biais du bloc de procédure "sneaking".
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/sprint_animation.md:
--------------------------------------------------------------------------------
1 | Cette animation sera jouée lorsque l'entité aura activé la fonction de sprint, ce qui peut être fait par le biais du bloc de procédure de sprint.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/sneak_animation.md:
--------------------------------------------------------------------------------
1 | Ta animacja będzie odtwarzana, gdy jednostka ma ustawione skradanie się na wartość true, co można zrobić za pomocą bloku procedury skradania się.
--------------------------------------------------------------------------------
/src/main/resources/procedures/no_animation.json:
--------------------------------------------------------------------------------
1 | {
2 | "inputsInline": true,
3 | "output": "String",
4 | "colour": 364,
5 | "mcreator": {
6 | "toolbox_id": "geckolib"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/resources/themes/midnight/images/model/geckolib.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/midnight/images/model/geckolib.png
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/set_entity_texture.java.ftl:
--------------------------------------------------------------------------------
1 | if (${input$entity} instanceof ${(field$element)?replace("CUSTOM:", "")}Entity animatable)
2 | animatable.setTexture(${input$texture});
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/condition_solid_bounding_box.md:
--------------------------------------------------------------------------------
1 | Wówczas gdy zwrócona wartość jest prawidłowa, obwiednia bytu jest stała.
2 | Z tej funkcji korzystają na przykład łodzie.
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/get_item_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcitems.ftl">
2 | ((${(field$itemname)?replace("CUSTOM:", "")}Item) ${mappedMCItemToItem(input$item)}).animationprocedure
--------------------------------------------------------------------------------
/src/main/resources/themes/default_dark/images/model/geckolib.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_dark/images/model/geckolib.png
--------------------------------------------------------------------------------
/src/main/resources/themes/matrix/images/model/small_geckolib.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/matrix/images/model/small_geckolib.png
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/sneak_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación se reproducirá mientras la entidad tenga sneaking configurado a true, lo que puede hacerse a través del bloque de procedimiento sneaking.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/sprint_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación se reproducirá mientras la entidad tenga sprinting configurado a true, lo que puede hacerse a través del bloque de procedimiento sprinting.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/sneak_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación se reproducirá mientras la entidad tenga sneaking configurado a true, lo que puede hacerse a través del bloque de procedimiento sneaking.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/sprint_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación se reproducirá mientras la entidad tenga sprinting configurado a true, lo que puede hacerse a través del bloque de procedimiento sprinting.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/loop_animation.md:
--------------------------------------------------------------------------------
1 | Si la valeur renvoyée est vraie, les animations jouées par le biais de la condition d'animation renvoyée ou des procédures d'animation tourneront en boucle.
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/set_entity_texture.java.ftl:
--------------------------------------------------------------------------------
1 | if (${input$entity} instanceof ${(field$element)?replace("CUSTOM:", "")}Entity animatable)
2 | animatable.setTexture(${input$texture});
--------------------------------------------------------------------------------
/src/main/resources/themes/default_dark/images/16px/geckolibicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_dark/images/16px/geckolibicon.png
--------------------------------------------------------------------------------
/src/main/resources/themes/default_dark/images/16px/questionmark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_dark/images/16px/questionmark.png
--------------------------------------------------------------------------------
/src/main/resources/themes/matrix/images/mod_types/animatedarmor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/matrix/images/mod_types/animatedarmor.png
--------------------------------------------------------------------------------
/src/main/resources/themes/matrix/images/mod_types/animatedblock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/matrix/images/mod_types/animatedblock.png
--------------------------------------------------------------------------------
/src/main/resources/themes/matrix/images/mod_types/animateditem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/matrix/images/mod_types/animateditem.png
--------------------------------------------------------------------------------
/src/main/resources/themes/midnight/images/model/small_geckolib.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/midnight/images/model/small_geckolib.png
--------------------------------------------------------------------------------
/src/main/resources/themes/matrix/images/16px/importgeckolibmodel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/matrix/images/16px/importgeckolibmodel.png
--------------------------------------------------------------------------------
/src/main/resources/themes/matrix/images/mod_types/animatedentity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/matrix/images/mod_types/animatedentity.png
--------------------------------------------------------------------------------
/src/main/resources/themes/midnight/images/mod_types/animatedarmor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/midnight/images/mod_types/animatedarmor.png
--------------------------------------------------------------------------------
/src/main/resources/themes/midnight/images/mod_types/animatedblock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/midnight/images/mod_types/animatedblock.png
--------------------------------------------------------------------------------
/src/main/resources/themes/midnight/images/mod_types/animateditem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/midnight/images/mod_types/animateditem.png
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/condition_solid_bounding_box.md:
--------------------------------------------------------------------------------
1 | Mientras el valor devuelto es verdadero, la caja delimitadora de la entidad es sólida.
2 | Esta característica la utilizan, por ejemplo, los barcos.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/condition_solid_bounding_box.md:
--------------------------------------------------------------------------------
1 | Mientras el valor devuelto es verdadero, la caja delimitadora de la entidad es sólida.
2 | Esta característica la utilizan, por ejemplo, los barcos.
--------------------------------------------------------------------------------
/src/main/resources/themes/default_dark/images/mod_types/animateditem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_dark/images/mod_types/animateditem.png
--------------------------------------------------------------------------------
/src/main/resources/themes/default_dark/images/model/small_geckolib.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_dark/images/model/small_geckolib.png
--------------------------------------------------------------------------------
/src/main/resources/themes/matrix/images/mod_types/animatedblock.aseprite:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/matrix/images/mod_types/animatedblock.aseprite
--------------------------------------------------------------------------------
/src/main/resources/themes/midnight/images/16px/importgeckolibmodel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/midnight/images/16px/importgeckolibmodel.png
--------------------------------------------------------------------------------
/src/main/resources/themes/midnight/images/mod_types/animatedentity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/midnight/images/mod_types/animatedentity.png
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/visual_scale.md:
--------------------------------------------------------------------------------
1 | This determines how big or small the entity's model will appear.
2 | This does not change the entity's bounding box size, even if it looks like it changed, only its size.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/baby_model.md:
--------------------------------------------------------------------------------
1 | Este parámetro controla la escala que tendrá el modelo de la entidad si es el hijo engendrado utilizando huevos de engendrar o mediante la reproducción de dos entidades juntas.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/baby_model.md:
--------------------------------------------------------------------------------
1 | Este parámetro controla la escala que tendrá el modelo de la entidad si es el hijo engendrado utilizando huevos de engendrar o mediante la reproducción de dos entidades juntas.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/baby_model.md:
--------------------------------------------------------------------------------
1 | Ce paramètre contrôle l'échelle que le modèle de l'entité aura s'il s'agit de l'enfant engendré à l'aide d'œufs de reproduction ou par la reproduction de deux entités ensemble.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/condition_solid_bounding_box.md:
--------------------------------------------------------------------------------
1 | Si la valeur renvoyée est vraie, le rectangle de délimitation de l'entité est solide.
2 | Cette caractéristique est utilisée par les bateaux, par exemple.
--------------------------------------------------------------------------------
/src/main/resources/themes/default_dark/images/16px/importgeckolibmodel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_dark/images/16px/importgeckolibmodel.png
--------------------------------------------------------------------------------
/src/main/resources/themes/default_dark/images/mod_types/animatedarmor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_dark/images/mod_types/animatedarmor.png
--------------------------------------------------------------------------------
/src/main/resources/themes/default_dark/images/mod_types/animatedblock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_dark/images/mod_types/animatedblock.png
--------------------------------------------------------------------------------
/src/main/resources/themes/default_dark/images/mod_types/animatedentity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_dark/images/mod_types/animatedentity.png
--------------------------------------------------------------------------------
/src/main/resources/themes/default_light/images/mod_types/animatedarmor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_light/images/mod_types/animatedarmor.png
--------------------------------------------------------------------------------
/src/main/resources/themes/default_light/images/mod_types/animatedblock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_light/images/mod_types/animatedblock.png
--------------------------------------------------------------------------------
/src/main/resources/themes/default_light/images/mod_types/animateditem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_light/images/mod_types/animateditem.png
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/loop_animation.md:
--------------------------------------------------------------------------------
1 | Mientras el valor devuelto sea verdadero, las animaciones reproducidas a través de la condición de animación devuelta o los procedimientos de animación se reproducirán en bucle.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/loop_animation.md:
--------------------------------------------------------------------------------
1 | Mientras el valor devuelto sea verdadero, las animaciones reproducidas a través de la condición de animación devuelta o los procedimientos de animación se reproducirán en bucle.
--------------------------------------------------------------------------------
/src/main/resources/themes/default_light/images/mod_types/animatedentity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/HEAD/src/main/resources/themes/default_light/images/mod_types/animatedentity.png
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/attack_interval.md:
--------------------------------------------------------------------------------
1 | This determines how long the attack animation of your entity keeps playing.
2 | If you set this value higher than how long the animation lasts, it will play again after finishing.
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/stop_procedure.java.ftl:
--------------------------------------------------------------------------------
1 | if (${input$entity} instanceof ${(field$name)?replace("CUSTOM:", "")}Entity) {
2 | ((${(field$name)?replace("CUSTOM:", "")}Entity) ${input$entity}).setAnimation("empty");
3 | }
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/walk_animation.md:
--------------------------------------------------------------------------------
1 | To jest animacja będzie odtwarzana gdy istota idzie i żadna inna animacja nie jest aktywna.
2 | Jeśli byt ma animację latania, będzie ona odtwarzana tylko wtedy gdy istota chodzi po ziemi.
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/stop_procedure.java.ftl:
--------------------------------------------------------------------------------
1 | if (${input$entity} instanceof ${(field$name)?replace("CUSTOM:", "")}Entity) {
2 | ((${(field$name)?replace("CUSTOM:", "")}Entity) ${input$entity}).setAnimation("empty");
3 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/ajson/item.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "${modid}:displaysettings/${data.displaySettings?replace(".json", "")}",
3 | "textures": {
4 | "layer0": "${modid}:item/${data.texture}"
5 | }
6 | }
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/bounding_box_scale:
--------------------------------------------------------------------------------
1 | This determined how big or small the entity's bounding box will be.
2 | When changing the entity's scale, this should be changed too otherwise the bounding box will stay as the default size.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/bounding_box_scale.md:
--------------------------------------------------------------------------------
1 | This determined how big or small the entity's bounding box will be.
2 | When changing the entity's scale, this should be changed too otherwise the bounding box will stay as the default size.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/first_person.md:
--------------------------------------------------------------------------------
1 | When this option is checked, the model groups specified below will be replaced by player arms.
2 | These arms will only be rendered on the screen in first person and will not be part of the model.
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/ajson/item.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "${modid}:displaysettings/${data.displaySettings?replace(".json", "")}",
3 | "textures": {
4 | "layer0": "${modid}:item/${data.texture}"
5 | }
6 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/play_newgeckoanim.java.ftl:
--------------------------------------------------------------------------------
1 | if (${input$entity} instanceof ${(field$name)?replace("CUSTOM:", "")}Entity) {
2 | ((${(field$name)?replace("CUSTOM:", "")}Entity) ${input$entity}).setAnimation(${input$animation});
3 | }
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/first_person.md:
--------------------------------------------------------------------------------
1 | Gdy ta opcja jest aktywna, wymienione poniżej grupy modeli zostaną zastąpione ramionami graczy.
2 | Te ramiona będą renderowane na ekranie tylko w pierwszej osobie i nie będą częścią modelu.
3 |
4 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/walk_animation.md:
--------------------------------------------------------------------------------
1 | This is the animation that will play while the entity is walking, and no other animation is active.
2 | If the entity has a flying animation, this will only play while the entity is walking on the ground.
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/play_newgeckoanim.java.ftl:
--------------------------------------------------------------------------------
1 | if (${input$entity} instanceof ${(field$name)?replace("CUSTOM:", "")}Entity) {
2 | ((${(field$name)?replace("CUSTOM:", "")}Entity) ${input$entity}).setAnimation(${input$animation});
3 | }
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/animation_name.md:
--------------------------------------------------------------------------------
1 | This should be the name of the animation you want this specific field to play.
2 | For example, a valid input can be animation.example.idle or if you didn't use that, just typing idle would work the same way.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/walk_animation.md:
--------------------------------------------------------------------------------
1 | Il s'agit de l'animation qui sera jouée lorsque l'entité marche et qu'aucune autre animation n'est active.
2 | Si l'entité possède une animation de vol, celle-ci ne sera jouée que lorsque l'entité marchera sur le sol.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/animation_name.md:
--------------------------------------------------------------------------------
1 | To powinna być nazwa animacji, którą chcesz odtworzyć w tym konkretnym pol
2 | Na przykład poprawnym wkładem może być animation.example.idle lub, jeśli go nie użyłeś, samo wpisanie idle zadziałałoby w ten sam sposób.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/first_person.md:
--------------------------------------------------------------------------------
1 | Lorsque cette option est cochée, les groupes de modèles spécifiés ci-dessous seront remplacés par les bras du joueur.
2 | Ces bras seront uniquement rendus à l'écran à la première personne et ne feront pas partie du modèle.
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/ajson/blockstate.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "${modid}:custom/${registryname}_particle"
3 | <#if data.particleTexture?has_content>,
4 | "textures": {
5 | "particle": "${modid}:block/${data.particleTexture}"
6 | }
7 | #if>
8 | }
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/first_person.md:
--------------------------------------------------------------------------------
1 | Cuando esta opción está marcada, los grupos de modelos especificados a continuación serán sustituidos por brazos de jugador.
2 | Estos brazos sólo se renderizarán en la pantalla en primera persona y no formarán parte del modelo.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/first_person.md:
--------------------------------------------------------------------------------
1 | Cuando esta opción está marcada, los grupos de modelos especificados a continuación serán sustituidos por brazos de jugador.
2 | Estos brazos sólo se renderizarán en la pantalla en primera persona y no formarán parte del modelo.
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/ajson/blockstate.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "${modid}:custom/${registryname}_particle"
3 | <#if data.particleTexture?has_content>,
4 | "textures": {
5 | "particle": "${modid}:block/${data.particleTexture}"
6 | }
7 | #if>
8 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/stop_item_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcitems.ftl">
2 | if (${mappedMCItemToItem(input$item)} instanceof ${(field$name)?replace("CUSTOM:", "")}Item)
3 | ${mappedMCItemToItemStackCode(input$item, 1)}.getOrCreateTag().putString("geckoAnim", "empty");
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/animation_name.md:
--------------------------------------------------------------------------------
1 | Este debe ser el nombre de la animación que quieres que reproduzca este campo específico.
2 | Por ejemplo, una entrada válida puede ser animation.example.idle o si no usaste eso, simplemente escribir idle funcionaría de la misma manera.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/walk_animation.md:
--------------------------------------------------------------------------------
1 | Esta es la animación que se reproducirá mientras la entidad esté caminando, y ninguna otra animación esté activa.
2 | Si la entidad tiene una animación de vuelo, ésta sólo se reproducirá mientras la entidad esté caminando por el suelo.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/animation_name.md:
--------------------------------------------------------------------------------
1 | Este debe ser el nombre de la animación que quieres que reproduzca este campo específico.
2 | Por ejemplo, una entrada válida puede ser animation.example.idle o si no usaste eso, simplemente escribir idle funcionaría de la misma manera.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/walk_animation.md:
--------------------------------------------------------------------------------
1 | Esta es la animación que se reproducirá mientras la entidad esté caminando, y ninguna otra animación esté activa.
2 | Si la entidad tiene una animación de vuelo, ésta sólo se reproducirá mientras la entidad esté caminando por el suelo.
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/item_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcitems.ftl">
2 | if (${mappedMCItemToItem(input$item)} instanceof ${(field$name)?replace("CUSTOM:", "")}Item)
3 | ${mappedMCItemToItemStackCode(input$item, 1)}.getOrCreateTag().putString("geckoAnim", ${input$animation});
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/flight_animation.md:
--------------------------------------------------------------------------------
1 | This animation will play while the entity is flying, and will stop once the entity is back on the ground.
2 | You should not use this if your entity only flies, as this will prevent the walking animation from playing while in the air.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/model_arm.md:
--------------------------------------------------------------------------------
1 | This will be the name used when searching for a model group to disable and replace with a player arm.
2 | That arm will then have the animations that the model group has.
3 | If the model group specified does not exist, the arm will not render.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/flight_animation.md:
--------------------------------------------------------------------------------
1 | Ta animacja będzie odtwarzana, podczas lotu bytu, i zatrzyma się, gdy ten wróci na ziemię.
2 | Nie powinieneś tego używać, jeśli twój byt nie jest przeznaczony do latania, ponieważ uniemożliwi to odtwarzanie animacji chodzenia w powietrzu.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/model_arm.md:
--------------------------------------------------------------------------------
1 | To będzie nazwa używana podczas wyszukiwania grupy modeli do wyłączenia i zastąpienia ramieniem gracza.
2 | To ramię będzie miało wtedy animacje, które ma grupa modeli.
3 | Jeśli określona grupa modeli nie istnieje, ramię nie będzie wyświetlane.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/head_movement.md:
--------------------------------------------------------------------------------
1 | Checking this parameter enables the option to specify a model group that the default head movement animation will be applied to.
2 | Make sure you write the exact name of the group, otherwise this will crash your game when spawning the entity.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/head_movement.md:
--------------------------------------------------------------------------------
1 | En cochant ce paramètre, vous pouvez spécifier un groupe de modèles auquel l'animation par défaut du mouvement de la tête sera appliquée.
2 | Veillez à écrire le nom exact du groupe, sinon cela fera planter votre jeu lors du lancement de l'entité.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/model_arm.md:
--------------------------------------------------------------------------------
1 | Ce sera le nom utilisé lors de la recherche d'un groupe de modèles à désactiver et à remplacer par un bras de joueur.
2 | Ce bras aura alors les animations du groupe de modèles.
3 | Si le groupe de modèles spécifié n'existe pas, le bras ne sera pas rendu.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/head_movement.md:
--------------------------------------------------------------------------------
1 | Zaznaczenie tego parametru umożliwia określenie grupy modelu, do której zostanie zastosowana domyślna animacja ruchu głowy.
2 | Upewnij się, że wpisałeś dokładną nazwę grupy, w przeciwnym razie spowoduje to crashem gry podczas spawnowania jednostki.
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/ajson/block_particle.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "${modid}:displaysettings/${data.displaySettings?replace(".json", "")}",
3 | "textures": {
4 | "particle": "${modid}:block/${data.particleTexture?has_content?then(data.particleTexture, data.texture)}"
5 | }
6 | }
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/animation_name.md:
--------------------------------------------------------------------------------
1 | Il doit s'agir du nom de l'animation que vous souhaitez faire jouer à ce champ spécifique.
2 | Par exemple, une entrée valide peut être animation.exemple.idle ou si vous n'avez pas utilisé ce nom, taper simplement idle fonctionnerait de la même manière.
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/ajson/block_particle.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "${modid}:displaysettings/${data.displaySettings?replace(".json", "")}",
3 | "textures": {
4 | "particle": "${modid}:block/${data.particleTexture?has_content?then(data.particleTexture, data.texture)}"
5 | }
6 | }
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/flight_animation.md:
--------------------------------------------------------------------------------
1 | Cette animation sera jouée pendant que l'entité vole, et s'arrêtera une fois que l'entité sera de retour au sol.
2 | Vous ne devez pas utiliser cette option si votre entité ne fait que voler, car elle empêchera l'animation de marche de se dérouler en l'air.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/flight_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación se reproducirá mientras la entidad está volando, y se detendrá una vez que la entidad esté de vuelta en el suelo.
2 | No debes usar esto si tu entidad sólo vuela, ya que esto evitará que la animación de caminar se reproduzca mientras está en el aire.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/head_movement.md:
--------------------------------------------------------------------------------
1 | Marcando este parámetro se habilita la opción de especificar un grupo de modelos al que se aplicará la animación de movimiento de cabeza por defecto.
2 | Asegúrate de escribir el nombre exacto del grupo, de lo contrario se bloqueará el juego al generar la entidad.
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/model_arm.md:
--------------------------------------------------------------------------------
1 | Este será el nombre utilizado cuando se busque un grupo de modelos para desactivarlo y sustituirlo por un brazo de jugador.
2 | Ese brazo tendrá las animaciones que tenga el grupo de modelos.
3 | Si el grupo de modelos especificado no existe, el brazo no se renderizará.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/flight_animation.md:
--------------------------------------------------------------------------------
1 | Esta animación se reproducirá mientras la entidad está volando, y se detendrá una vez que la entidad esté de vuelta en el suelo.
2 | No debes usar esto si tu entidad sólo vuela, ya que esto evitará que la animación de caminar se reproduzca mientras está en el aire.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/head_movement.md:
--------------------------------------------------------------------------------
1 | Marcando este parámetro se habilita la opción de especificar un grupo de modelos al que se aplicará la animación de movimiento de cabeza por defecto.
2 | Asegúrate de escribir el nombre exacto del grupo, de lo contrario se bloqueará el juego al generar la entidad.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/model_arm.md:
--------------------------------------------------------------------------------
1 | Este será el nombre utilizado cuando se busque un grupo de modelos para desactivarlo y sustituirlo por un brazo de jugador.
2 | Ese brazo tendrá las animaciones que tenga el grupo de modelos.
3 | Si el grupo de modelos especificado no existe, el brazo no se renderizará.
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/lerp.md:
--------------------------------------------------------------------------------
1 | Ten parametr określa liczbę ticków potrzebnych bytowi do przejścia z jednej animacji do drugiej.
2 | Ustawienie wyższej wartości sprawi, że przejście będzie płynniejsze, a ustawienie niższej spowoduje zmniejszenie płynności.
3 | Aby całkowicie wyłączyć przejścia, ustaw tę wartość na zero.
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/stop_item_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcitems.ftl">
2 | if (${mappedMCItemToItem(input$item)} instanceof ${(field$name)?replace("CUSTOM:", "")}Item)
3 | CustomData.update(DataComponents.CUSTOM_DATA, ${mappedMCItemToItemStackCode(input$item, 1)}, tag -> tag.putString("geckoAnim", "empty"));
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/item_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcitems.ftl">
2 | if (${mappedMCItemToItem(input$item)} instanceof ${(field$name)?replace("CUSTOM:", "")}Item)
3 | CustomData.update(DataComponents.CUSTOM_DATA, ${mappedMCItemToItemStackCode(input$item, 1)}, tag -> tag.putString("geckoAnim", ${input$animation}));
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/stop_armor_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcitems.ftl">
2 | if (${mappedMCItemToItem(input$item)} instanceof ${((field$name)?replace("CUSTOM:", ""))?replace("_", "")}Item armor && armor instanceof GeoItem)
3 | ${mappedMCItemToItemStackCode(input$item, 1)}.getOrCreateTag().putString("geckoAnim", "empty");
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/animation_perspective.md:
--------------------------------------------------------------------------------
1 | This parameter determined in which perspectives item animations will play.
2 | "All Perspectives" will always allow animations to play,
3 | "First Person" will only play animations when in first person and
4 | "Third/Second Person" will play animations only when not in first person.
--------------------------------------------------------------------------------
/src/main/resources/help/default/geckolib/lerp.md:
--------------------------------------------------------------------------------
1 | This parameter determines the amount of ticks that it will take for the entity to transition from one animation to another.
2 | Setting this value higher will make the transition smoother, while setting it lower will lower the smoothness.
3 | To completely disable transitions, set this value to zero.
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/set_armor_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcitems.ftl">
2 | if (${mappedMCItemToItem(input$item)} instanceof ${((field$name)?replace("CUSTOM:", ""))?replace("_", "")}Item armor && armor instanceof GeoItem)
3 | ${mappedMCItemToItemStackCode(input$item, 1)}.getOrCreateTag().putString("geckoAnim", ${input$animation});
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/lerp.md:
--------------------------------------------------------------------------------
1 | Este parámetro determina la cantidad de ticks que tardará la entidad en pasar de una animación a otra.
2 | Establecer este valor más alto hará que la transición sea más suave, mientras que establecerlo más bajo reducirá la suavidad.
3 | Para desactivar completamente las transiciones, establece este valor a cero.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/lerp.md:
--------------------------------------------------------------------------------
1 | Este parámetro determina la cantidad de ticks que tardará la entidad en pasar de una animación a otra.
2 | Establecer este valor más alto hará que la transición sea más suave, mientras que establecerlo más bajo reducirá la suavidad.
3 | Para desactivar completamente las transiciones, establece este valor a cero.
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/lerp.md:
--------------------------------------------------------------------------------
1 | Ce paramètre détermine le nombre de ticks que prendra l'entité pour passer d'une animation à une autre.
2 | Si vous augmentez cette valeur, la transition sera plus douce, tandis que si vous la diminuez, la transition sera moins douce.
3 | Pour désactiver complètement les transitions, réglez cette valeur sur zéro.
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/stop_armor_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcitems.ftl">
2 | if (${mappedMCItemToItem(input$item)} instanceof ${((field$name)?replace("CUSTOM:", ""))?replace("_", "")}Item armor && armor instanceof GeoItem)
3 | CustomData.update(DataComponents.CUSTOM_DATA, ${mappedMCItemToItemStackCode(input$item, 1)}, tag -> tag.putString("geckoAnim", "empty"));
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/stop_block_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcelements.ftl">
2 | {
3 | BlockPos _pos = ${toBlockPos(input$x,input$y,input$z)};
4 | BlockState _bs = world.getBlockState(_pos);
5 | if (_bs.getBlock().getStateDefinition().getProperty("animation") instanceof IntegerProperty _integerProp)
6 | world.setBlock(_pos, _bs.setValue(_integerProp, 0), 3);
7 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/stop_block_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcelements.ftl">
2 | {
3 | BlockPos _pos = ${toBlockPos(input$x,input$y,input$z)};
4 | BlockState _bs = world.getBlockState(_pos);
5 | if (_bs.getBlock().getStateDefinition().getProperty("animation") instanceof IntegerProperty _integerProp)
6 | world.setBlock(_pos, _bs.setValue(_integerProp, 0), 3);
7 | }
--------------------------------------------------------------------------------
/src/main/resources/help/pl_PL/geckolib/animation_perspective.md:
--------------------------------------------------------------------------------
1 | Ten parametr określa, w jakich perspektywach będą odtwarzane animacje przedmiotów.
2 | "All Perspectives" odtworzy animacje we wszystkich perspektywach
3 | "First Person" będzie odtwarzać animacje tylko w pierwszej osobie
4 | "Third/Second Person" będzie odtwarzać animacje tylko wtedy, gdy nie są w pierwszej osobie.
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/set_armor_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcitems.ftl">
2 | if (${mappedMCItemToItem(input$item)} instanceof ${((field$name)?replace("CUSTOM:", ""))?replace("_", "")}Item armor && armor instanceof GeoItem)
3 | CustomData.update(DataComponents.CUSTOM_DATA, ${mappedMCItemToItemStackCode(input$item, 1)}, tag -> tag.putString("geckoAnim", ${input$animation}));
--------------------------------------------------------------------------------
/src/main/resources/help/es_AR/geckolib/animation_perspective.md:
--------------------------------------------------------------------------------
1 | Este parámetro determina en qué perspectivas se reproducirán las animaciones de los elementos.
2 | "Todas las perspectivas" siempre permitirá que se reproduzcan las animaciones,
3 | "Primera Persona" sólo reproducirá animaciones cuando esté en primera persona y
4 | "Tercera/Segunda Persona" sólo reproducirá animaciones cuando no esté en primera persona.
--------------------------------------------------------------------------------
/src/main/resources/help/es_CL/geckolib/animation_perspective.md:
--------------------------------------------------------------------------------
1 | Este parámetro determina en qué perspectivas se reproducirán las animaciones de los elementos.
2 | "Todas las perspectivas" siempre permitirá que se reproduzcan las animaciones,
3 | "Primera Persona" sólo reproducirá animaciones cuando esté en primera persona y
4 | "Tercera/Segunda Persona" sólo reproducirá animaciones cuando no esté en primera persona.
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/ajson/block_item.json.ftl:
--------------------------------------------------------------------------------
1 | <#-- @formatter:off -->
2 | <#if data.itemTexture?has_content>
3 | {
4 | "parent": "item/generated",
5 | "textures": {
6 | "layer0": "${modid}:item/${data.itemTexture}"
7 | }
8 | }
9 | <#else>
10 | {
11 | "parent": "${modid}:displaysettings/${data.displaySettings?replace(".json", "")}"
12 | }
13 | #if>
14 | <#-- @formatter:on -->
--------------------------------------------------------------------------------
/src/main/resources/help/fr_FR/geckolib/animation_perspective.md:
--------------------------------------------------------------------------------
1 | Ce paramètre détermine dans quelles perspectives les animations des éléments seront jouées.
2 | "Toutes les perspectives" permettra toujours aux animations de jouer,
3 | "Première personne" ne jouera les animations qu'à la première personne et
4 | "Troisième/Seconde personne" jouera les animations uniquement lorsqu'il ne s'agit pas de la première personne.
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/ajson/block_item.json.ftl:
--------------------------------------------------------------------------------
1 | <#-- @formatter:off -->
2 | <#if data.itemTexture?has_content>
3 | {
4 | "parent": "item/generated",
5 | "textures": {
6 | "layer0": "${modid}:item/${data.itemTexture}"
7 | }
8 | }
9 | <#else>
10 | {
11 | "parent": "${modid}:displaysettings/${data.displaySettings?replace(".json", "")}"
12 | }
13 | #if>
14 | <#-- @formatter:on -->
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/procedures/block_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcelements.ftl">
2 | {
3 | int _value = ${opt.toInt(input$value)};
4 | BlockPos _pos = ${toBlockPos(input$x,input$y,input$z)};
5 | BlockState _bs = world.getBlockState(_pos);
6 | if (_bs.getBlock().getStateDefinition().getProperty("animation") instanceof IntegerProperty _integerProp && _integerProp.getPossibleValues().contains(_value))
7 | world.setBlock(_pos, _bs.setValue(_integerProp, _value), 3);
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/procedures/block_animation.java.ftl:
--------------------------------------------------------------------------------
1 | <#include "mcelements.ftl">
2 | {
3 | int _value = ${opt.toInt(input$value)};
4 | BlockPos _pos = ${toBlockPos(input$x,input$y,input$z)};
5 | BlockState _bs = world.getBlockState(_pos);
6 | if (_bs.getBlock().getStateDefinition().getProperty("animation") instanceof IntegerProperty _integerProp && _integerProp.getPossibleValues().contains(_value))
7 | world.setBlock(_pos, _bs.setValue(_integerProp, _value), 3);
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/resources/procedures/is_geckolib_entity.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "input_value",
5 | "name": "entity",
6 | "check": "Entity"
7 | }
8 | ],
9 | "inputsInline": true,
10 | "output": "Boolean",
11 | "colour": 364,
12 | "mcreator": {
13 | "toolbox_id": "geckolib",
14 | "toolbox_init": [
15 | ""
16 | ],
17 | "inputs": [
18 | "entity"
19 | ]
20 | }
21 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/animatedblockutil/blockentityrenderer.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.block.renderer;
2 |
3 | public class ${name}TileRenderer extends GeoBlockRenderer<${name}TileEntity> {
4 | public ${name}TileRenderer() {
5 | super(new ${name}BlockModel());
6 | }
7 |
8 | @Override
9 | public RenderType getRenderType(${name}TileEntity animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
10 | return RenderType.entityTranslucent(getTextureLocation(animatable));
11 | }
12 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/animatedblockutil/blockentityrenderer.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.block.renderer;
2 |
3 | public class ${name}TileRenderer extends GeoBlockRenderer<${name}TileEntity> {
4 | public ${name}TileRenderer() {
5 | super(new ${name}BlockModel());
6 | }
7 |
8 | @Override
9 | public RenderType getRenderType(${name}TileEntity animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
10 | return RenderType.entityTranslucent(getTextureLocation(animatable));
11 | }
12 | }
--------------------------------------------------------------------------------
/src/main/resources/plugin.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "geckolib_plugin",
3 | "weight": 3001,
4 | "javaplugin": "net.nerdypuzzle.geckolib.Launcher",
5 | "supportedversions": [
6 | 2024004
7 | ],
8 | "info": {
9 | "name": "GeckoLib Plugin",
10 | "version": "6.0.2",
11 | "description": "Adds GeckoLib support for 1.20.1 and 1.21.1",
12 | "author": "NerdyPuzzle",
13 | "pluginPageID": 91484,
14 | "updateJSONURL": "https://raw.githubusercontent.com/NerdyPuzzle/MCreator-Nerdys_Geckolib_Plugin/main/update.json"
15 | }
16 | }
--------------------------------------------------------------------------------
/update.json:
--------------------------------------------------------------------------------
1 | {
2 | "geckolib_plugin": {
3 | "latest": "6.0.2",
4 | "changes": [
5 | "(6.0.2) Fixed inventories of animated items in 1.21.1 not holding items",
6 | "(6.0.2) Fixed animated armor in 1.21.1 build error",
7 | "(6.0.2) Fixed animated block item descriptions",
8 | "(6.0.1) Fixed the plugin's menus missing",
9 | "Ported the plugin to 2024.4",
10 | "Fixed some missing translation keys in animated blocks",
11 | "Fixed animated armor not using durability in 1.21.1"
12 | ]
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/ajson/armor/item_cmodel_obj.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "forge_marker": 1,
3 | "parent": "forge:item/default",
4 | "loader": "forge:obj",
5 | "model": "${modid}:models/item/${data.customModelName.split(":")[0]}.obj",
6 | "textures": {
7 | <#if data.getTextureMap()?has_content>
8 | <#list data.getTextureMap().entrySet() as texture>
9 | "${texture.getKey()}": "${modid}:block/${texture.getValue()}",
10 | #list>
11 | #if>
12 | "particle": "${modid}:item/${data.texture}"
13 | }
14 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/ajson/armor/item_cmodel.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "${modid}:custom/${data.getItemCustomModelNameFor(var_item)}",
3 | "textures": {
4 | <@textures data.getItemModelTextureMap(var_item)/>
5 | "particle": "${modid}:item/${data.getItemTextureFor(var_item)}"
6 | }
7 | }
8 |
9 | <#macro textures textureMap>
10 | <#if textureMap??>
11 | <#list textureMap.entrySet() as texture>
12 | "${texture.getKey()}": "${modid}:block/${texture.getValue()}",
13 | #list>
14 | #if>
15 | #macro>
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/ajson/armor/item_cmodel.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "${modid}:custom/${data.getItemCustomModelNameFor(var_item)}",
3 | "textures": {
4 | <@textures data.getItemModelTextureMap(var_item)/>
5 | "particle": "${modid}:item/${data.getItemTextureFor(var_item)}"
6 | }
7 | }
8 |
9 | <#macro textures textureMap>
10 | <#if textureMap??>
11 | <#list textureMap.entrySet() as texture>
12 | "${texture.getKey()}": "${modid}:block/${texture.getValue()}",
13 | #list>
14 | #if>
15 | #macro>
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/ajson/armor/item_cmodel_obj.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "forge_marker": 1,
3 | "parent": "neoforge:item/default",
4 | "loader": "neoforge:obj",
5 | "model": "${modid}:models/item/${data.customModelName.split(":")[0]}.obj",
6 | "textures": {
7 | <#if data.getTextureMap()?has_content>
8 | <#list data.getTextureMap().entrySet() as texture>
9 | "${texture.getKey()}": "${modid}:block/${texture.getValue()}",
10 | #list>
11 | #if>
12 | "particle": "${modid}:item/${data.texture}"
13 | }
14 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/animatedblockutil/displayitem/displayrenderer.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.block.renderer;
2 |
3 | public class ${name}DisplayItemRenderer extends GeoItemRenderer<${name}DisplayItem> {
4 | public ${name}DisplayItemRenderer() {
5 | super(new ${name}DisplayModel());
6 | }
7 |
8 | @Override
9 | public RenderType getRenderType(${name}DisplayItem animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
10 | return RenderType.entityTranslucent(getTextureLocation(animatable));
11 | }
12 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/animatedblockutil/displayitem/displayrenderer.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.block.renderer;
2 |
3 | public class ${name}DisplayItemRenderer extends GeoItemRenderer<${name}DisplayItem> {
4 | public ${name}DisplayItemRenderer() {
5 | super(new ${name}DisplayModel());
6 | }
7 |
8 | @Override
9 | public RenderType getRenderType(${name}DisplayItem animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
10 | return RenderType.entityTranslucent(getTextureLocation(animatable));
11 | }
12 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/animatedblockutil/listeners/blocklistener.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.block.listener;
2 |
3 | @Mod.EventBusSubscriber(modid = ${JavaModName}.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
4 | public class ClientListener {
5 |
6 | @OnlyIn(Dist.CLIENT)
7 | @SubscribeEvent
8 | public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) {
9 | <#list animatedblocks as ablock>
10 | event.registerBlockEntityRenderer(${JavaModName}BlockEntities.${ablock.getModElement().getRegistryNameUpper()}.get(), context -> new ${ablock.getModElement().getName()}TileRenderer());
11 | #list>
12 | }
13 |
14 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aitem/firstperson/anim_utils.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.utils;
2 |
3 | public class AnimUtils {
4 |
5 | public static void renderPartOverBone(ModelPart model, GeoBone bone, PoseStack stack, VertexConsumer buffer, int packedLightIn,
6 | int packedOverlayIn) {
7 | setupModelFromBone(model, bone);
8 | model.render(stack, buffer, packedLightIn, packedOverlayIn);
9 | }
10 |
11 | public static void setupModelFromBone(ModelPart model, GeoBone bone) {
12 | model.setPos(bone.getPivotX(), bone.getPivotY(), bone.getPivotZ());
13 | model.xRot = 0.0f;
14 | model.yRot = 0.0f;
15 | model.zRot = 0.0f;
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/ajson/armor/item.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/generated",
3 | "textures": {
4 | <#if var_item?? && var_item=="helmet">
5 | "layer0": "${modid}:item/${data.textureHelmet}"
6 | <#elseif var_item?? && var_item=="body">
7 | "layer0": "${modid}:item/${data.textureBody}"
8 | <#elseif var_item?? && var_item=="leggings">
9 | "layer0": "${modid}:item/${data.textureLeggings}"
10 | <#elseif var_item?? && var_item=="boots">
11 | "layer0": "${modid}:item/${data.textureBoots}"
12 | <#else>
13 | "layer0": "${modid}:item/${data.texture}"
14 | #if>
15 | }
16 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/ajson/armor/item.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/generated",
3 | "textures": {
4 | <#if var_item?? && var_item=="helmet">
5 | "layer0": "${modid}:item/${data.textureHelmet}"
6 | <#elseif var_item?? && var_item=="body">
7 | "layer0": "${modid}:item/${data.textureBody}"
8 | <#elseif var_item?? && var_item=="leggings">
9 | "layer0": "${modid}:item/${data.textureLeggings}"
10 | <#elseif var_item?? && var_item=="boots">
11 | "layer0": "${modid}:item/${data.textureBoots}"
12 | <#else>
13 | "layer0": "${modid}:item/${data.texture}"
14 | #if>
15 | }
16 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aentity/animation_sync_factory.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.init;
2 |
3 | @EventBusSubscriber
4 | public class EntityAnimationFactory {
5 |
6 | @SubscribeEvent
7 | public static void onEntityTick(EntityTickEvent.Pre event) {
8 | if (event != null && event.getEntity() != null) {
9 | <#list animatedentitys as syncable>
10 | if (event.getEntity() instanceof ${syncable.getModElement().getName()}Entity syncable) {
11 | String animation = syncable.getSyncedAnimation();
12 | if (!animation.equals("undefined")) {
13 | syncable.setAnimation("undefined");
14 | syncable.animationprocedure = animation;
15 | }
16 | }
17 | #list>
18 | }
19 | }
20 |
21 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/aentity/animation_sync_factory.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.init;
2 |
3 | @Mod.EventBusSubscriber
4 | public class EntityAnimationFactory {
5 |
6 | @SubscribeEvent
7 | public static void onEntityTick(LivingEvent.LivingTickEvent event) {
8 | if (event != null && event.getEntity() != null) {
9 | <#list animatedentitys as syncable>
10 | if (event.getEntity() instanceof ${syncable.getModElement().getName()}Entity syncable) {
11 | String animation = syncable.getSyncedAnimation();
12 | if (!animation.equals("undefined")) {
13 | syncable.setAnimation("undefined");
14 | syncable.animationprocedure = animation;
15 | }
16 | }
17 | #list>
18 | }
19 | }
20 |
21 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/ajson/entity_spawn_biome_modifier.json.ftl:
--------------------------------------------------------------------------------
1 | <#assign spawnBiomes = w.filterBrokenReferences(data.restrictionBiomes)>
2 | {
3 | "type": "forge:add_spawns",
4 | <#if spawnBiomes?size == 1>
5 | "biomes": "${spawnBiomes?first}",
6 | <#elseif spawnBiomes?size gt 1>
7 | "biomes": [
8 | <#list spawnBiomes as spawnBiome>"${spawnBiome}"<#sep>,#list>
9 | ],
10 | <#else>
11 | "biomes": {
12 | "type": "forge:any"
13 | },
14 | #if>
15 | "spawners": {
16 | "type": "${modid}:${registryname}",
17 | "weight": ${data.spawningProbability},
18 | "minCount": ${data.minNumberOfMobsPerGroup},
19 | "maxCount": ${data.maxNumberOfMobsPerGroup}
20 | }
21 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/ajson/entity_spawn_biome_modifier.json.ftl:
--------------------------------------------------------------------------------
1 | <#assign spawnBiomes = w.filterBrokenReferences(data.restrictionBiomes)>
2 | {
3 | "type": "neoforge:add_spawns",
4 | <#if spawnBiomes?size == 1>
5 | "biomes": "${spawnBiomes?first}",
6 | <#elseif spawnBiomes?size gt 1>
7 | "biomes": [
8 | <#list spawnBiomes as spawnBiome>"${spawnBiome}"<#sep>,#list>
9 | ],
10 | <#else>
11 | "biomes": {
12 | "type": "neoforge:any"
13 | },
14 | #if>
15 | "spawners": {
16 | "type": "${modid}:${registryname}",
17 | "weight": ${data.spawningProbability},
18 | "minCount": ${data.minNumberOfMobsPerGroup},
19 | "maxCount": ${data.maxNumberOfMobsPerGroup}
20 | }
21 | }
--------------------------------------------------------------------------------
/src/main/resources/procedures/get_entity_texture.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "field_data_list_selector",
5 | "name": "element",
6 | "datalist": "animatedentity",
7 | "customEntryProviders": "animatedentity"
8 | },
9 | {
10 | "type": "input_value",
11 | "name": "entity",
12 | "check": "Entity"
13 | }
14 | ],
15 | "inputsInline": true,
16 | "output": "String",
17 | "colour": 364,
18 | "mcreator": {
19 | "toolbox_id": "geckolib",
20 | "toolbox_init": [
21 | ""
22 | ],
23 | "inputs": [
24 | "entity"
25 | ],
26 | "fields": [
27 | "element"
28 | ]
29 | }
30 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/animatedblockutil/listeners/blocklistener.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.block.listener;
2 |
3 | @EventBusSubscriber(modid = ${JavaModName}.MODID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
4 | public class ClientListener {
5 |
6 | @OnlyIn(Dist.CLIENT)
7 | @SubscribeEvent
8 | public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) {
9 | <#list animatedblocks as ablock>
10 | event.registerBlockEntityRenderer((BlockEntityType<${ablock.getModElement().getName()}TileEntity>)${JavaModName}BlockEntities.${ablock.getModElement().getRegistryNameUpper()}.get(), context -> new ${ablock.getModElement().getName()}TileRenderer());
11 | #list>
12 | }
13 |
14 | }
--------------------------------------------------------------------------------
/src/main/resources/procedures/get_entity_animation.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "field_data_list_selector",
5 | "name": "entityname",
6 | "datalist": "animatedentity",
7 | "customEntryProviders": "animatedentity"
8 | },
9 | {
10 | "type": "input_value",
11 | "name": "entity",
12 | "check": "Entity"
13 | }
14 | ],
15 | "inputsInline": true,
16 | "output": "String",
17 | "colour": 364,
18 | "mcreator": {
19 | "toolbox_id": "geckolib",
20 | "toolbox_init": [
21 | ""
22 | ],
23 | "inputs": [
24 | "entity"
25 | ],
26 | "fields": [
27 | "entityname"
28 | ]
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/resources/procedures/get_item_animation.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "field_data_list_selector",
5 | "name": "itemname",
6 | "datalist": "animateditem",
7 | "customEntryProviders": "animateditem"
8 | },
9 | {
10 | "type": "input_value",
11 | "name": "item",
12 | "check": "MCItem"
13 | }
14 | ],
15 | "inputsInline": true,
16 | "output": "String",
17 | "colour": 364,
18 | "mcreator": {
19 | "toolbox_id": "geckolib",
20 | "toolbox_init": [
21 | ""
22 | ],
23 | "inputs": [
24 | "item"
25 | ],
26 | "fields": [
27 | "itemname"
28 | ]
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/resources/procedures/stop_procedure.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "field_data_list_selector",
5 | "name": "name",
6 | "datalist": "animatedentity",
7 | "customEntryProviders": "animatedentity"
8 | },
9 | {
10 | "type": "input_value",
11 | "name": "entity",
12 | "check": "Entity"
13 | }
14 | ],
15 | "inputsInline": true,
16 | "previousStatement": null,
17 | "nextStatement": null,
18 | "colour": "364",
19 | "mcreator": {
20 | "toolbox_id": "geckolib",
21 | "toolbox_init": [
22 | ""
23 | ],
24 | "fields": [
25 | "name"
26 | ],
27 | "inputs": [
28 | "entity"
29 | ]
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/aarmor/armor_model.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.item.model;
2 |
3 | public class ${name}Model extends GeoModel<${name}Item> {
4 | @Override
5 | public ResourceLocation getAnimationResource(${name}Item object) {
6 | return new ResourceLocation("${modid}", "animations/${data.model?replace(".geo.json", "")}.animation.json");
7 | }
8 |
9 | @Override
10 | public ResourceLocation getModelResource(${name}Item object) {
11 | return new ResourceLocation("${modid}", "geo/${data.model}");
12 | }
13 |
14 | @Override
15 | public ResourceLocation getTextureResource(${name}Item object) {
16 | return new ResourceLocation("${modid}", "textures/item/${data.armorTextureFile}");
17 | }
18 |
19 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aarmor/armor_model.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.item.model;
2 |
3 | public class ${name}Model extends GeoModel<${name}Item> {
4 | @Override
5 | public ResourceLocation getAnimationResource(${name}Item object) {
6 | return ResourceLocation.parse("${modid}:animations/${data.model?replace(".geo.json", "")}.animation.json");
7 | }
8 |
9 | @Override
10 | public ResourceLocation getModelResource(${name}Item object) {
11 | return ResourceLocation.parse("${modid}:geo/${data.model}");
12 | }
13 |
14 | @Override
15 | public ResourceLocation getTextureResource(${name}Item object) {
16 | return ResourceLocation.parse("${modid}:textures/item/${data.armorTextureFile}");
17 | }
18 |
19 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/json/monster_room_mobs.json.ftl:
--------------------------------------------------------------------------------
1 | <#assign hasLiving = false>
2 | {
3 | "values": {
4 | <#if w.hasElementsOfType("livingentity")>
5 | <#list w.getGElementsOfType("livingentity")?filter(e -> e.spawnInDungeons) as livingentity>
6 | "${modid}:${livingentity.getModElement().getRegistryName()}": {
7 | "weight": 100
8 | }
9 | <#sep>,<#assign hasLiving = true>#list>
10 | #if>
11 | <#if w.hasElementsOfType("animatedentity")><#if hasLiving>,#if>
12 | <#list w.getGElementsOfType("animatedentity")?filter(e -> e.spawnInDungeons) as aentity>
13 | "${modid}:${aentity.getModElement().getRegistryName()}": {
14 | "weight": 100
15 | }
16 | <#sep>,#list>
17 | #if>
18 | }
19 | }
--------------------------------------------------------------------------------
/src/main/resources/procedures/stop_item_animation.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "field_data_list_selector",
5 | "name": "name",
6 | "datalist": "animateditem",
7 | "customEntryProviders": "animateditem"
8 | },
9 | {
10 | "type": "input_value",
11 | "name": "item",
12 | "check": "MCItem"
13 | }
14 | ],
15 | "inputsInline": true,
16 | "previousStatement": null,
17 | "nextStatement": null,
18 | "colour": "364",
19 | "mcreator": {
20 | "toolbox_id": "geckolib",
21 | "toolbox_init": [
22 | ""
23 | ],
24 | "fields": [
25 | "name"
26 | ],
27 | "inputs": [
28 | "item"
29 | ]
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/resources/procedures/stop_armor_animation.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "field_data_list_selector",
5 | "name": "name",
6 | "datalist": "animatedarmor",
7 | "customEntryProviders": "animatedarmor"
8 | },
9 | {
10 | "type": "input_value",
11 | "name": "item",
12 | "check": "MCItem"
13 | }
14 | ],
15 | "inputsInline": true,
16 | "previousStatement": null,
17 | "nextStatement": null,
18 | "colour": "364",
19 | "mcreator": {
20 | "toolbox_id": "geckolib",
21 | "toolbox_init": [
22 | ""
23 | ],
24 | "fields": [
25 | "name"
26 | ],
27 | "inputs": [
28 | "item"
29 | ]
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/aitem/item_model.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.item.model;
2 |
3 | <#assign geomodel = data.normal>
4 | <#assign texture = data.texture>
5 |
6 | public class ${name}ItemModel extends GeoModel<${name}Item> {
7 | @Override
8 | public ResourceLocation getAnimationResource(${name}Item animatable) {
9 | return new ResourceLocation("${modid}", "animations/${geomodel?replace(".geo.json", "")}.animation.json");
10 | }
11 |
12 | @Override
13 | public ResourceLocation getModelResource(${name}Item animatable) {
14 | return new ResourceLocation("${modid}", "geo/${geomodel}");
15 | }
16 |
17 | @Override
18 | public ResourceLocation getTextureResource(${name}Item animatable) {
19 | return new ResourceLocation("${modid}", "textures/item/${texture}.png");
20 | }
21 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aitem/item_model.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.item.model;
2 |
3 | <#assign geomodel = data.normal>
4 | <#assign texture = data.texture>
5 |
6 | public class ${name}ItemModel extends GeoModel<${name}Item> {
7 | @Override
8 | public ResourceLocation getAnimationResource(${name}Item animatable) {
9 | return ResourceLocation.parse("${modid}:animations/${geomodel?replace(".geo.json", "")}.animation.json");
10 | }
11 |
12 | @Override
13 | public ResourceLocation getModelResource(${name}Item animatable) {
14 | return ResourceLocation.parse("${modid}:geo/${geomodel}");
15 | }
16 |
17 | @Override
18 | public ResourceLocation getTextureResource(${name}Item animatable) {
19 | return ResourceLocation.parse("${modid}:textures/item/${texture}.png");
20 | }
21 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/animatedblockutil/displayitem/displaymodel.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.block.model;
2 |
3 | <#assign geomodel = data.normal>
4 | <#assign texture = data.texture>
5 |
6 | public class ${name}DisplayModel extends GeoModel<${name}DisplayItem> {
7 | @Override
8 | public ResourceLocation getAnimationResource(${name}DisplayItem animatable) {
9 | return new ResourceLocation("${modid}", "animations/${geomodel?replace(".geo.json", "")}.animation.json");
10 | }
11 |
12 | @Override
13 | public ResourceLocation getModelResource(${name}DisplayItem animatable) {
14 | return new ResourceLocation("${modid}", "geo/${geomodel}");
15 | }
16 |
17 | @Override
18 | public ResourceLocation getTextureResource(${name}DisplayItem entity) {
19 | return new ResourceLocation("${modid}", "textures/block/${texture}.png");
20 | }
21 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/animatedblockutil/displayitem/displaymodel.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.block.model;
2 |
3 | <#assign geomodel = data.normal>
4 | <#assign texture = data.texture>
5 |
6 | public class ${name}DisplayModel extends GeoModel<${name}DisplayItem> {
7 | @Override
8 | public ResourceLocation getAnimationResource(${name}DisplayItem animatable) {
9 | return ResourceLocation.parse("${modid}:animations/${geomodel?replace(".geo.json", "")}.animation.json");
10 | }
11 |
12 | @Override
13 | public ResourceLocation getModelResource(${name}DisplayItem animatable) {
14 | return ResourceLocation.parse("${modid}:geo/${geomodel}");
15 | }
16 |
17 | @Override
18 | public ResourceLocation getTextureResource(${name}DisplayItem entity) {
19 | return ResourceLocation.parse("${modid}:textures/block/${texture}.png");
20 | }
21 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/ablock/placed_oregen.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "feature": "${modid}:${registryname}",
3 | "placement": [
4 | {
5 | "type": "minecraft:count",
6 | "count": ${data.frequencyPerChunks}
7 | },
8 | {
9 | "type": "minecraft:in_square"
10 | },
11 | {
12 | "type": "minecraft:height_range",
13 | "height": {
14 | "type": "minecraft:${data.generationShape?lower_case?replace("triangle", "trapezoid")}",
15 | "min_inclusive": {
16 | "absolute": ${data.minGenerateHeight}
17 | },
18 | "max_inclusive": {
19 | "absolute": ${data.maxGenerateHeight}
20 | }
21 | }
22 | },
23 | {
24 | "type": "minecraft:biome"
25 | }
26 | ]
27 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/ablock/placed_oregen.json.ftl:
--------------------------------------------------------------------------------
1 | {
2 | "feature": "${modid}:${registryname}",
3 | "placement": [
4 | {
5 | "type": "minecraft:count",
6 | "count": ${data.frequencyPerChunks}
7 | },
8 | {
9 | "type": "minecraft:in_square"
10 | },
11 | {
12 | "type": "minecraft:height_range",
13 | "height": {
14 | "type": "minecraft:${data.generationShape?lower_case?replace("triangle", "trapezoid")}",
15 | "min_inclusive": {
16 | "absolute": ${data.minGenerateHeight}
17 | },
18 | "max_inclusive": {
19 | "absolute": ${data.maxGenerateHeight}
20 | }
21 | }
22 | },
23 | {
24 | "type": "minecraft:biome"
25 | }
26 | ]
27 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aentity/livingentity_layer.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.entity.layer;
2 |
3 | public class ${name}Layer extends GeoRenderLayer<${name}Entity> {
4 | private static final ResourceLocation LAYER = ResourceLocation.parse("${modid}:textures/entities/${data.mobModelGlowTexture}");
5 |
6 | public ${name}Layer(GeoRenderer<${name}Entity> entityRenderer) {
7 | super(entityRenderer);
8 | }
9 | @Override
10 | public void render(PoseStack poseStack,${name}Entity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
11 | RenderType glowRenderType = RenderType.eyes(LAYER);
12 | getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType,
13 | bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, -1);
14 | }
15 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/aitem/firstperson/anim_utils.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.utils;
2 |
3 | public class AnimUtils {
4 | public static void renderPartOverBone(ModelPart model, GeoBone bone, PoseStack stack, VertexConsumer buffer, int packedLightIn,
5 | int packedOverlayIn, float alpha) {
6 | renderPartOverBone(model, bone, stack, buffer, packedLightIn, packedOverlayIn, 1.0f, 1.0f, 1.0f, alpha);
7 | }
8 |
9 | public static void renderPartOverBone(ModelPart model, GeoBone bone, PoseStack stack, VertexConsumer buffer, int packedLightIn,
10 | int packedOverlayIn, float r, float g, float b, float a) {
11 | setupModelFromBone(model, bone);
12 | model.render(stack, buffer, packedLightIn, packedOverlayIn, r, g, b, a);
13 | }
14 |
15 | public static void setupModelFromBone(ModelPart model, GeoBone bone) {
16 | model.setPos(bone.getPivotX(), bone.getPivotY(), bone.getPivotZ());
17 | model.xRot = 0.0f;
18 | model.yRot = 0.0f;
19 | model.zRot = 0.0f;
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/resources/procedures/set_entity_texture.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "field_data_list_selector",
5 | "name": "element",
6 | "datalist": "animatedentity",
7 | "customEntryProviders": "animatedentity"
8 | },
9 | {
10 | "type": "input_value",
11 | "name": "entity",
12 | "check": "Entity"
13 | },
14 | {
15 | "type": "input_value",
16 | "name": "texture",
17 | "check": "String"
18 | }
19 | ],
20 | "inputsInline": true,
21 | "previousStatement": null,
22 | "nextStatement": null,
23 | "colour": 364,
24 | "mcreator": {
25 | "toolbox_id": "geckolib",
26 | "toolbox_init": [
27 | "",
28 | "texture"
29 | ],
30 | "inputs": [
31 | "entity",
32 | "texture"
33 | ],
34 | "fields": [
35 | "element"
36 | ]
37 | }
38 | }
--------------------------------------------------------------------------------
/src/main/resources/procedures/play_newgeckoanim.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "field_data_list_selector",
5 | "name": "name",
6 | "datalist": "animatedentity",
7 | "customEntryProviders": "animatedentity"
8 | },
9 | {
10 | "type": "input_value",
11 | "name": "animation",
12 | "check": "String"
13 | },
14 | {
15 | "type": "input_value",
16 | "name": "entity",
17 | "check": "Entity"
18 | }
19 | ],
20 | "inputsInline": true,
21 | "previousStatement": null,
22 | "nextStatement": null,
23 | "colour": "364",
24 | "mcreator": {
25 | "toolbox_id": "geckolib",
26 | "toolbox_init": [
27 | "animation",
28 | ""
29 | ],
30 | "fields": [
31 | "name"
32 | ],
33 | "inputs": [
34 | "animation",
35 | "entity"
36 | ]
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/aentity/livingentity_layer.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.entity.layer;
2 |
3 | public class ${name}Layer extends GeoRenderLayer<${name}Entity> {
4 | private static final ResourceLocation LAYER = new ResourceLocation("${modid}", "textures/entities/${data.mobModelGlowTexture}");
5 |
6 | public ${name}Layer(GeoRenderer<${name}Entity> entityRenderer) {
7 | super(entityRenderer);
8 | }
9 | @Override
10 | public void render(PoseStack poseStack,${name}Entity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
11 | RenderType glowRenderType = RenderType.eyes(LAYER);
12 | getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType,
13 | bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY,
14 | 1, 1, 1, 1);
15 | }
16 | }
--------------------------------------------------------------------------------
/src/main/resources/procedures/item_animation.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "field_data_list_selector",
5 | "name": "name",
6 | "datalist": "animateditem",
7 | "customEntryProviders": "animateditem"
8 | },
9 | {
10 | "type": "input_value",
11 | "name": "animation",
12 | "check": "String"
13 | },
14 | {
15 | "type": "input_value",
16 | "name": "item",
17 | "check": "MCItem"
18 | }
19 | ],
20 | "inputsInline": true,
21 | "previousStatement": null,
22 | "nextStatement": null,
23 | "colour": "364",
24 | "mcreator": {
25 | "toolbox_id": "geckolib",
26 | "toolbox_init": [
27 | "animation",
28 | ""
29 | ],
30 | "fields": [
31 | "name"
32 | ],
33 | "inputs": [
34 | "animation",
35 | "item"
36 | ]
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/resources/procedures/set_armor_animation.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "field_data_list_selector",
5 | "name": "name",
6 | "datalist": "animatedarmor",
7 | "customEntryProviders": "animatedarmor"
8 | },
9 | {
10 | "type": "input_value",
11 | "name": "animation",
12 | "check": "String"
13 | },
14 | {
15 | "type": "input_value",
16 | "name": "item",
17 | "check": "MCItem"
18 | }
19 | ],
20 | "inputsInline": true,
21 | "previousStatement": null,
22 | "nextStatement": null,
23 | "colour": "364",
24 | "mcreator": {
25 | "toolbox_id": "geckolib",
26 | "toolbox_init": [
27 | "animation",
28 | ""
29 | ],
30 | "fields": [
31 | "name"
32 | ],
33 | "inputs": [
34 | "animation",
35 | "item"
36 | ]
37 | }
38 | }
--------------------------------------------------------------------------------
/src/main/resources/procedures/stop_block_animation.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "input_value",
5 | "name": "x",
6 | "check": "Number"
7 | },
8 | {
9 | "type": "input_value",
10 | "name": "y",
11 | "check": "Number"
12 | },
13 | {
14 | "type": "input_value",
15 | "name": "z",
16 | "check": "Number"
17 | }
18 | ],
19 | "inputsInline": true,
20 | "previousStatement": null,
21 | "nextStatement": null,
22 | "colour": 364,
23 | "mcreator": {
24 | "toolbox_id": "geckolib",
25 | "toolbox_init": [
26 | "",
27 | "",
28 | ""
29 | ],
30 | "inputs": [
31 | "x",
32 | "y",
33 | "z"
34 | ],
35 | "dependencies": [
36 | {
37 | "name": "world",
38 | "type": "world"
39 | }
40 | ]
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/net/nerdypuzzle/geckolib/parts/RefactoredSystemsICopyPastedBecauseIWasTooBloodyLazyToActuallyProperlyReplace.java:
--------------------------------------------------------------------------------
1 | package net.nerdypuzzle.geckolib.parts;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 | import java.util.regex.Pattern;
6 |
7 | public class RefactoredSystemsICopyPastedBecauseIWasTooBloodyLazyToActuallyProperlyReplace {
8 |
9 | private static final Pattern nonescapedCommaSplitter = Pattern.compile("(? splitCommaSeparatedStringListWithEscapes(String specialInfoString) {
11 | List retval = new ArrayList<>();
12 | if (!specialInfoString.isEmpty()) {
13 | String[] info = nonescapedCommaSplitter.split(specialInfoString);
14 | for (String infoelement : info) {
15 | String data = infoelement.trim().replace("\\,", ",");
16 | if (!data.isBlank())
17 | retval.add(data);
18 | }
19 | }
20 | return retval;
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/animateditem.definition.yaml:
--------------------------------------------------------------------------------
1 | global_templates:
2 | - template: aitem/firstperson/anim_utils.java.ftl
3 | name: "@SRCROOT/@BASEPACKAGEPATH/utils/AnimUtils.java"
4 | - template: aitem/animation_sync_factory.java.ftl
5 | name: "@SRCROOT/@BASEPACKAGEPATH/init/ItemAnimationFactory.java"
6 |
7 | templates:
8 | - template: aitem/item.java.ftl
9 | name: "@SRCROOT/@BASEPACKAGEPATH/item/@NAMEItem.java"
10 | - template: aitem/item_container.java.ftl
11 | name: "@SRCROOT/@BASEPACKAGEPATH/item/inventory/@NAMEInventoryCapability.java"
12 | condition: hasInventory()
13 | - template: aitem/item_model.java.ftl
14 | name: "@SRCROOT/@BASEPACKAGEPATH/item/model/@NAMEItemModel.java"
15 | - template: aitem/item_renderer.java.ftl
16 | name: "@SRCROOT/@BASEPACKAGEPATH/item/renderer/@NAMEItemRenderer.java"
17 |
18 | - template: ajson/item.json.ftl
19 | writer: json
20 | name: "@MODASSETSROOT/models/item/@registryname.json"
21 |
22 | localizationkeys:
23 | - key: item.@modid.@registryname
24 | mapto: name
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 NerdyPuzzle
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/main/resources/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 NerdyPuzzle
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/animateditem.definition.yaml:
--------------------------------------------------------------------------------
1 | global_templates:
2 | - template: aitem/firstperson/anim_utils.java.ftl
3 | name: "@SRCROOT/@BASEPACKAGEPATH/utils/AnimUtils.java"
4 | - template: aitem/animation_sync_factory.java.ftl
5 | name: "@SRCROOT/@BASEPACKAGEPATH/init/ItemAnimationFactory.java"
6 |
7 | templates:
8 | - template: aitem/item.java.ftl
9 | name: "@SRCROOT/@BASEPACKAGEPATH/item/@NAMEItem.java"
10 | - template: aitem/item_container.java.ftl
11 | name: "@SRCROOT/@BASEPACKAGEPATH/item/inventory/@NAMEInventoryCapability.java"
12 | condition: hasInventory()
13 | - template: aitem/item_model.java.ftl
14 | name: "@SRCROOT/@BASEPACKAGEPATH/item/model/@NAMEItemModel.java"
15 | - template: aitem/item_renderer.java.ftl
16 | name: "@SRCROOT/@BASEPACKAGEPATH/item/renderer/@NAMEItemRenderer.java"
17 |
18 | - template: ajson/item.json.ftl
19 | writer: json
20 | name: "@MODASSETSROOT/models/item/@registryname.json"
21 |
22 | localizationkeys:
23 | - key: item.@modid.@registryname
24 | mapto: name
25 |
26 | tags:
27 | - tag: ITEMS:minecraft:wolf_food
28 | condition: "${data.isFood && data.isMeat}"
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/ablock/configured_oregen.json.ftl:
--------------------------------------------------------------------------------
1 | <#include "../mcitems.ftl">
2 | {
3 | "type": "minecraft:ore",
4 | "config": {
5 | "size": ${data.frequencyOnChunk},
6 | "discard_chance_on_air_exposure": 0,
7 | "targets": [
8 | <#list data.blocksToReplace as replacementBlock>
9 | {
10 | "target": {
11 | <#if replacementBlock.getUnmappedValue().startsWith("TAG:")>
12 | "predicate_type": "tag_match",
13 | "tag": "${replacementBlock.getUnmappedValue().replace("TAG:", "").replace("mod:", modid + ":")}"
14 | <#elseif replacementBlock.getMappedValue(1).startsWith("#")>
15 | "predicate_type": "tag_match",
16 | "tag": "${replacementBlock.getMappedValue(1).replace("#", "")}"
17 | <#else>
18 | "predicate_type": "blockstate_match",
19 | "block_state": ${mappedMCItemToBlockStateJSON(replacementBlock)}
20 | #if>
21 | },
22 | "state": {
23 | "Name": "${modid}:${registryname}"
24 | }
25 | }<#sep>,
26 | #list>
27 | ]
28 | }
29 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/ablock/configured_oregen.json.ftl:
--------------------------------------------------------------------------------
1 | <#include "../mcitems.ftl">
2 | {
3 | "type": "minecraft:ore",
4 | "config": {
5 | "size": ${data.frequencyOnChunk},
6 | "discard_chance_on_air_exposure": 0,
7 | "targets": [
8 | <#list data.blocksToReplace as replacementBlock>
9 | {
10 | "target": {
11 | <#if replacementBlock.getUnmappedValue().startsWith("TAG:")>
12 | "predicate_type": "tag_match",
13 | "tag": "${replacementBlock.getUnmappedValue().replace("TAG:", "").replace("mod:", modid + ":")}"
14 | <#elseif replacementBlock.getMappedValue(1).startsWith("#")>
15 | "predicate_type": "tag_match",
16 | "tag": "${replacementBlock.getMappedValue(1).replace("#", "")}"
17 | <#else>
18 | "predicate_type": "blockstate_match",
19 | "block_state": ${mappedMCItemToBlockStateJSON(replacementBlock)}
20 | #if>
21 | },
22 | "state": {
23 | "Name": "${modid}:${registryname}"
24 | }
25 | }<#sep>,
26 | #list>
27 | ]
28 | }
29 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/aarmor/armor_renderer.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.client.renderer;
2 |
3 | public class ${name}ArmorRenderer extends GeoArmorRenderer<${name}Item> {
4 | public ${name}ArmorRenderer() {
5 | super(new ${name}Model());
6 |
7 | this.head = new GeoBone(null, "${data.head}", false, (double) 0, false, false);
8 | this.body = new GeoBone(null, "${data.chest}", false, (double) 0, false, false);
9 | this.rightArm = new GeoBone(null, "${data.rightArm}", false, (double) 0, false, false);
10 | this.leftArm = new GeoBone(null, "${data.leftArm}", false, (double) 0, false, false);
11 | this.rightLeg = new GeoBone(null, "${data.rightLeg}", false, (double) 0, false, false);
12 | this.leftLeg = new GeoBone(null, "${data.leftLeg}", false, (double) 0, false, false);
13 | this.rightBoot = new GeoBone(null, "${data.rightBoot}", false, (double) 0, false, false);
14 | this.leftBoot = new GeoBone(null, "${data.leftBoot}", false, (double) 0, false, false);
15 | }
16 |
17 | @Override
18 | public RenderType getRenderType(${name}Item animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
19 | return RenderType.entityTranslucent(getTextureLocation(animatable));
20 | }
21 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aarmor/armor_renderer.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.client.renderer;
2 |
3 | public class ${name}ArmorRenderer extends GeoArmorRenderer<${name}Item> {
4 | public ${name}ArmorRenderer() {
5 | super(new ${name}Model());
6 |
7 | this.head = new GeoBone(null, "${data.head}", false, (double) 0, false, false);
8 | this.body = new GeoBone(null, "${data.chest}", false, (double) 0, false, false);
9 | this.rightArm = new GeoBone(null, "${data.rightArm}", false, (double) 0, false, false);
10 | this.leftArm = new GeoBone(null, "${data.leftArm}", false, (double) 0, false, false);
11 | this.rightLeg = new GeoBone(null, "${data.rightLeg}", false, (double) 0, false, false);
12 | this.leftLeg = new GeoBone(null, "${data.leftLeg}", false, (double) 0, false, false);
13 | this.rightBoot = new GeoBone(null, "${data.rightBoot}", false, (double) 0, false, false);
14 | this.leftBoot = new GeoBone(null, "${data.leftBoot}", false, (double) 0, false, false);
15 | }
16 |
17 | @Override
18 | public RenderType getRenderType(${name}Item animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
19 | return RenderType.entityTranslucent(getTextureLocation(animatable));
20 | }
21 | }
--------------------------------------------------------------------------------
/src/main/resources/procedures/block_animation.json:
--------------------------------------------------------------------------------
1 | {
2 | "args0": [
3 | {
4 | "type": "input_value",
5 | "name": "x",
6 | "check": "Number"
7 | },
8 | {
9 | "type": "input_value",
10 | "name": "y",
11 | "check": "Number"
12 | },
13 | {
14 | "type": "input_value",
15 | "name": "z",
16 | "check": "Number"
17 | },
18 | {
19 | "type": "input_value",
20 | "name": "value",
21 | "check": "Number"
22 | }
23 | ],
24 | "inputsInline": true,
25 | "previousStatement": null,
26 | "nextStatement": null,
27 | "colour": 364,
28 | "mcreator": {
29 | "toolbox_id": "geckolib",
30 | "toolbox_init": [
31 | "",
32 | "",
33 | "",
34 | "0"
35 | ],
36 | "inputs": [
37 | "x",
38 | "y",
39 | "z",
40 | "value"
41 | ],
42 | "dependencies": [
43 | {
44 | "name": "world",
45 | "type": "world"
46 | }
47 | ]
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/main/java/net/nerdypuzzle/geckolib/parts/arm_pose_list/JArmPoseList.java:
--------------------------------------------------------------------------------
1 | package net.nerdypuzzle.geckolib.parts.arm_pose_list;
2 |
3 | import net.mcreator.ui.MCreator;
4 | import net.mcreator.ui.component.entries.JSimpleEntriesList;
5 | import net.mcreator.ui.help.IHelpContext;
6 | import net.mcreator.ui.init.L10N;
7 | import net.mcreator.ui.laf.themes.Theme;
8 | import net.nerdypuzzle.geckolib.element.types.AnimatedItem;
9 |
10 | import javax.swing.*;
11 | import java.util.List;
12 |
13 | public class JArmPoseList extends JSimpleEntriesList {
14 | public JArmPoseList(MCreator mcreator, IHelpContext gui) {
15 | super(mcreator, gui);
16 | this.add.setText(L10N.t("elementgui.animateditem.add_arm_entry", new Object[0]));
17 | this.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Theme.current().getForegroundColor(), 1), L10N.t("elementgui.animateditem.armpose_values", new Object[0]), 0, 0, this.getFont().deriveFont(12.0F), Theme.current().getForegroundColor()));
18 | }
19 |
20 | protected JArmPoseEntry newEntry(JPanel parent, List entryList, boolean userAction) {
21 | return new JArmPoseEntry(this.mcreator, this.gui, parent, entryList);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/net/nerdypuzzle/geckolib/parts/GeomodelRenderer.java:
--------------------------------------------------------------------------------
1 | package net.nerdypuzzle.geckolib.parts;
2 |
3 | import net.mcreator.ui.init.UIRES;
4 | import net.mcreator.util.image.EmptyIcon;
5 |
6 | import javax.swing.*;
7 | import java.awt.*;
8 |
9 | public class GeomodelRenderer extends JLabel implements ListCellRenderer {
10 | public GeomodelRenderer() {
11 | }
12 |
13 | public Component getListCellRendererComponent(JList extends String> list, String value, int index, boolean isSelected, boolean cellHasFocus) {
14 | this.setOpaque(true);
15 | if (isSelected) {
16 | this.setBackground(list.getSelectionBackground());
17 | this.setForeground(list.getSelectionForeground());
18 | } else {
19 | this.setBackground(list.getBackground());
20 | this.setForeground(list.getForeground());
21 | }
22 |
23 | if (value == null)
24 | return this;
25 | else {
26 | this.setText(value);
27 | if (!value.isEmpty())
28 | this.setIcon(UIRES.get("model.small_geckolib"));
29 | else
30 | this.setIcon(new EmptyIcon(32, 32));
31 |
32 |
33 | this.setHorizontalTextPosition(4);
34 | this.setHorizontalAlignment(2);
35 | return this;
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/net/nerdypuzzle/geckolib/parts/blockstate_list/JBlockstateList.java:
--------------------------------------------------------------------------------
1 | package net.nerdypuzzle.geckolib.parts.blockstate_list;
2 |
3 | import net.mcreator.ui.MCreator;
4 | import net.mcreator.ui.component.entries.JSimpleEntriesList;
5 | import net.mcreator.ui.help.IHelpContext;
6 | import net.mcreator.ui.init.L10N;
7 | import net.mcreator.ui.validation.AggregatedValidationResult;
8 | import net.nerdypuzzle.geckolib.element.types.AnimatedBlock;
9 |
10 | import javax.swing.*;
11 | import java.util.List;
12 |
13 | public class JBlockstateList extends JSimpleEntriesList {
14 | public JBlockstateList(MCreator mcreator, IHelpContext gui) {
15 | super(mcreator, gui);
16 | this.add.setText(L10N.t("elementgui.animatedblock.add_blockstate", new Object[0]));
17 | }
18 |
19 | public AggregatedValidationResult getValidationResult() {
20 | AggregatedValidationResult validationResult = new AggregatedValidationResult();
21 | entryList.forEach(validationResult::addValidationElement);
22 | return validationResult;
23 | }
24 |
25 | protected JBlockstateListEntry newEntry(JPanel parent, List entryList, boolean userAction) {
26 | return new JBlockstateListEntry(this.mcreator, this.gui, parent, entryList, entryList.size() + 1);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/resources/apis/geckolib.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | forge-1.20.1:
3 | gradle: |
4 | repositories {
5 | maven {
6 | url = 'https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/'
7 | }
8 | }
9 |
10 | dependencies {
11 | implementation fg.deobf('software.bernie.geckolib:geckolib-forge-1.20.1:4.4.9')
12 | }
13 |
14 | minecraft {
15 | runs {
16 | client {
17 | property 'mixin.env.remapRefMap', 'true'
18 | property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
19 | }
20 | server {
21 | property 'mixin.env.remapRefMap', 'true'
22 | property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
23 | }
24 | data {
25 | property 'mixin.env.remapRefMap', 'true'
26 | property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
27 | }
28 | }
29 | }
30 | update_files:
31 | - ~
32 |
33 | neoforge-1.21.1:
34 | gradle: |
35 | repositories {
36 | maven {
37 | url = 'https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/'
38 | }
39 | }
40 |
41 | dependencies {
42 | implementation 'software.bernie.geckolib:geckolib-neoforge-1.21.1:4.7'
43 | }
44 | update_files:
45 | - ~
46 |
47 | name: "GeckoLib"
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aentity/livingentity_model.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.entity.model;
2 |
3 | import software.bernie.geckolib.animation.AnimationState;
4 |
5 | public class ${name}Model extends GeoModel<${name}Entity> {
6 | @Override
7 | public ResourceLocation getAnimationResource(${name}Entity entity) {
8 | return ResourceLocation.parse("${modid}:animations/${data.model?replace(".geo.json", "")}.animation.json");
9 | }
10 |
11 | @Override
12 | public ResourceLocation getModelResource(${name}Entity entity) {
13 | return ResourceLocation.parse("${modid}:geo/${data.model}");
14 | }
15 |
16 | @Override
17 | public ResourceLocation getTextureResource(${name}Entity entity) {
18 | return ResourceLocation.parse("${modid}:textures/entities/" + entity.getTexture() + ".png");
19 | }
20 |
21 | <#if data.headMovement>
22 | @Override
23 | public void setCustomAnimations(${name}Entity animatable, long instanceId, AnimationState animationState) {
24 | GeoBone head = getAnimationProcessor().getBone("${data.groupName}");
25 | if (head != null) {
26 | EntityModelData entityData = (EntityModelData) animationState.getData(DataTickets.ENTITY_MODEL_DATA);
27 | head.setRotX(entityData.headPitch() * Mth.DEG_TO_RAD);
28 | head.setRotY(entityData.netHeadYaw() * Mth.DEG_TO_RAD);
29 | }
30 |
31 | }
32 | #if>
33 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/aentity/livingentity_model.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.entity.model;
2 |
3 | import software.bernie.geckolib.core.animation.AnimationState;
4 |
5 | public class ${name}Model extends GeoModel<${name}Entity> {
6 | @Override
7 | public ResourceLocation getAnimationResource(${name}Entity entity) {
8 | return new ResourceLocation("${modid}", "animations/${data.model?replace(".geo.json", "")}.animation.json");
9 | }
10 |
11 | @Override
12 | public ResourceLocation getModelResource(${name}Entity entity) {
13 | return new ResourceLocation("${modid}", "geo/${data.model}");
14 | }
15 |
16 | @Override
17 | public ResourceLocation getTextureResource(${name}Entity entity) {
18 | return new ResourceLocation("${modid}", "textures/entities/" + entity.getTexture() + ".png");
19 | }
20 |
21 | <#if data.headMovement>
22 | @Override
23 | public void setCustomAnimations(${name}Entity animatable, long instanceId, AnimationState animationState) {
24 | CoreGeoBone head = getAnimationProcessor().getBone("${data.groupName}");
25 | if (head != null) {
26 | EntityModelData entityData = (EntityModelData) animationState.getData(DataTickets.ENTITY_MODEL_DATA);
27 | head.setRotX(entityData.headPitch() * Mth.DEG_TO_RAD);
28 | head.setRotY(entityData.netHeadYaw() * Mth.DEG_TO_RAD);
29 | }
30 |
31 | }
32 | #if>
33 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/animatedblockutil/displayitem/displayitem.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.block.display;
2 |
3 | import software.bernie.geckolib.animation.AnimatableManager;
4 | import software.bernie.geckolib.animation.AnimationState;
5 |
6 | public class ${name}DisplayItem extends BlockItem implements GeoItem {
7 | private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
8 |
9 | public ${name}DisplayItem(Block block, Properties settings) {
10 | super(block, settings);
11 | }
12 |
13 | private PlayState predicate(AnimationState event) {
14 | <#if data.animateBlockItem>
15 | event.getController().setAnimation(RawAnimation.begin().thenLoop("0"));
16 | #if>
17 | return PlayState.CONTINUE;
18 | }
19 |
20 | @Override
21 | public void createGeoRenderer(Consumer consumer) {
22 | consumer.accept(new GeoRenderProvider() {
23 | private ${name}DisplayItemRenderer renderer;
24 |
25 | @Override
26 | public BlockEntityWithoutLevelRenderer getGeoItemRenderer() {
27 | if (this.renderer == null)
28 | this.renderer = new ${name}DisplayItemRenderer();
29 | return this.renderer;
30 | }
31 | });
32 | }
33 |
34 | @Override
35 | public void registerControllers(AnimatableManager.ControllerRegistrar data) {
36 | data.add(new AnimationController(this, "controller", 0, this::predicate));
37 | }
38 |
39 | @Override
40 | public AnimatableInstanceCache getAnimatableInstanceCache() {
41 | return this.cache;
42 | }
43 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/animatedentity.definition.yaml:
--------------------------------------------------------------------------------
1 | global_templates:
2 | - template: aentity/animation_sync_factory.java.ftl
3 | name: "@SRCROOT/@BASEPACKAGEPATH/init/EntityAnimationFactory.java"
4 |
5 | templates:
6 | - template: aentity/livingentity.java.ftl
7 | name: "@SRCROOT/@BASEPACKAGEPATH/entity/@NAMEEntity.java"
8 | - template: aentity/livingentity_renderer.java.ftl
9 | name: "@SRCROOT/@BASEPACKAGEPATH/client/renderer/@NAMERenderer.java"
10 | - template: aentity/livingentity_projectile.java.ftl
11 | name: "@SRCROOT/@BASEPACKAGEPATH/entity/@NAMEEntityProjectile.java"
12 | condition: hasCustomProjectile()
13 | - template: aentity/livingentity_model.java.ftl
14 | name: "@SRCROOT/@BASEPACKAGEPATH/entity/model/@NAMEModel.java"
15 | - template: aentity/livingentity_layer.java.ftl
16 | name: "@SRCROOT/@BASEPACKAGEPATH/entity/layer/@NAMELayer.java"
17 | condition: hasGlowTexture()
18 | - template: ajson/spawn_egg.json.ftl
19 | writer: json
20 | name: "@MODASSETSROOT/models/item/@registryname_spawn_egg.json"
21 | condition: hasSpawnEgg
22 | - template: ajson/entity_spawn_biome_modifier.json.ftl
23 | writer: json
24 | condition: spawnThisMob
25 | name: "@MODDATAROOT/forge/biome_modifier/@registryname_biome_modifier.json"
26 |
27 | unmodifiable_ai_bases: [ Bat, MagmaCube, Slime ]
28 |
29 | localizationkeys:
30 | - key: item.@modid.@registryname_spawn_egg
31 | mapto: mobName
32 | suffix: " Spawn Egg"
33 | - key: entity.@modid.@registryname
34 | mapto: mobName
35 |
36 | tags:
37 | - tag: ENTITIES:minecraft:raiders
38 | condition: "${data.mobBehaviourType == 'Raider'}"
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/aitem/animation_sync_factory.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.init;
2 |
3 | @Mod.EventBusSubscriber
4 | public class ItemAnimationFactory {
5 |
6 | @SubscribeEvent
7 | public static void animatedItems(TickEvent.PlayerTickEvent event) {
8 | String animation = "";
9 | ItemStack mainhandItem = event.player.getMainHandItem().copy();
10 | ItemStack offhandItem = event.player.getOffhandItem().copy();
11 | if (event.phase == TickEvent.Phase.START && (mainhandItem.getItem() instanceof GeoItem || offhandItem.getItem() instanceof GeoItem)) {
12 | <#list animateditems as item>
13 | if (mainhandItem.getItem() instanceof ${item.getModElement().getName()}Item animatable) {
14 | animation = mainhandItem.getOrCreateTag().getString("geckoAnim");
15 | if (!animation.isEmpty()) {
16 | event.player.getMainHandItem().getOrCreateTag().putString("geckoAnim", "");
17 | if (event.player.level().isClientSide()) {
18 | ((${item.getModElement().getName()}Item)event.player.getMainHandItem().getItem()).animationprocedure = animation;
19 | }
20 | }
21 | }
22 | if (offhandItem.getItem() instanceof ${item.getModElement().getName()}Item animatable) {
23 | animation = offhandItem.getOrCreateTag().getString("geckoAnim");
24 | if (!animation.isEmpty()) {
25 | event.player.getOffhandItem().getOrCreateTag().putString("geckoAnim", "");
26 | if (event.player.level().isClientSide()) {
27 | ((${item.getModElement().getName()}Item)event.player.getOffhandItem().getItem()).animationprocedure = animation;
28 | }
29 | }
30 | }
31 | #list>
32 | }
33 | }
34 |
35 | }
--------------------------------------------------------------------------------
/src/main/java/net/nerdypuzzle/geckolib/registry/PluginActions.java:
--------------------------------------------------------------------------------
1 | package net.nerdypuzzle.geckolib.registry;
2 |
3 | import net.mcreator.ui.MCreator;
4 | import net.mcreator.ui.action.ActionRegistry;
5 | import net.mcreator.ui.action.BasicAction;
6 | import net.mcreator.ui.action.VisitURIAction;
7 | import net.mcreator.ui.init.L10N;
8 | import net.mcreator.ui.init.UIRES;
9 | import net.mcreator.util.image.ImageUtils;
10 | import net.nerdypuzzle.geckolib.parts.PluginDialogs;
11 | import net.nerdypuzzle.geckolib.parts.PluginModelActions;
12 |
13 | import javax.swing.*;
14 |
15 | public class PluginActions extends ActionRegistry {
16 | public final BasicAction importGeckoLibModel;
17 | public final BasicAction importDisplaySettings;
18 | public final BasicAction tutorial;
19 | public final BasicAction convertion_to_geckolib;
20 | public final BasicAction convertion_from_geckolib;
21 | public PluginActions(MCreator mcreator) {
22 | super(mcreator);
23 | this.importGeckoLibModel = new PluginModelActions.GECKOLIB(this).setIcon(UIRES.get("16px.importgeckolibmodel"));
24 | this.importDisplaySettings = new PluginModelActions.DISPLAYSETTINGS(this).setIcon(UIRES.get("16px.importgeckolibmodel"));
25 | this.tutorial = (new VisitURIAction(this, L10N.t("action.tutorial", new Object[0]), "https://mcreator.net/forum/93274/tutorial-how-use-nerdys-geckolib-plugin-40-20224")).setIcon(new ImageIcon(ImageUtils.resizeAA(UIRES.get("16px.questionmark").getImage(), 14, 14)));
26 | this.convertion_to_geckolib = PluginDialogs.Entity2GeckoLib.getAction(this);
27 | this.convertion_from_geckolib = PluginDialogs.GeckoLib2Entity.getAction(this);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/animatedblockutil/displayitem/displayitem.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.block.display;
2 |
3 | import net.minecraftforge.common.property.Properties;
4 |
5 | import software.bernie.geckolib.core.animation.AnimatableManager;
6 | import software.bernie.geckolib.core.animation.AnimationState;
7 |
8 | public class ${name}DisplayItem extends BlockItem implements GeoItem {
9 | private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
10 |
11 | public ${name}DisplayItem(Block block, Properties settings) {
12 | super(block, settings);
13 | }
14 |
15 | private PlayState predicate(AnimationState event) {
16 | <#if data.animateBlockItem>
17 | event.getController().setAnimation(RawAnimation.begin().thenLoop("0"));
18 | #if>
19 | return PlayState.CONTINUE;
20 | }
21 |
22 | @Override
23 | public void initializeClient(Consumer consumer) {
24 | super.initializeClient(consumer);
25 | consumer.accept(new IClientItemExtensions() {
26 | private final BlockEntityWithoutLevelRenderer renderer = new ${name}DisplayItemRenderer();
27 |
28 | @Override
29 | public BlockEntityWithoutLevelRenderer getCustomRenderer() {
30 | return renderer;
31 | }
32 | });
33 | }
34 |
35 | @Override
36 | public void registerControllers(AnimatableManager.ControllerRegistrar data) {
37 | data.add(new AnimationController(this, "controller", 0, this::predicate));
38 | }
39 |
40 | @Override
41 | public AnimatableInstanceCache getAnimatableInstanceCache() {
42 | return this.cache;
43 | }
44 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aitem/animation_sync_factory.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.init;
2 |
3 | @EventBusSubscriber
4 | public class ItemAnimationFactory {
5 |
6 | @SubscribeEvent
7 | public static void animatedItems(PlayerTickEvent.Post event) {
8 | String animation = "";
9 | ItemStack mainhandItem = event.getEntity().getMainHandItem().copy();
10 | ItemStack offhandItem = event.getEntity().getOffhandItem().copy();
11 | if (mainhandItem.getItem() instanceof GeoItem || offhandItem.getItem() instanceof GeoItem) {
12 | <#list animateditems as item>
13 | if (mainhandItem.getItem() instanceof ${item.getModElement().getName()}Item animatable) {
14 | animation = mainhandItem.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getString("geckoAnim");
15 | if (!animation.isEmpty()) {
16 | CustomData.update(DataComponents.CUSTOM_DATA, event.getEntity().getMainHandItem(), tag -> tag.putString("geckoAnim", ""));
17 | if (event.getEntity().level().isClientSide()) {
18 | ((${item.getModElement().getName()}Item)event.getEntity().getMainHandItem().getItem()).animationprocedure = animation;
19 | }
20 | }
21 | }
22 | if (offhandItem.getItem() instanceof ${item.getModElement().getName()}Item animatable) {
23 | animation = offhandItem.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getString("geckoAnim");
24 | if (!animation.isEmpty()) {
25 | CustomData.update(DataComponents.CUSTOM_DATA, event.getEntity().getOffhandItem(), tag -> tag.putString("geckoAnim", ""));
26 | if (event.getEntity().level().isClientSide()) {
27 | ((${item.getModElement().getName()}Item)event.getEntity().getOffhandItem().getItem()).animationprocedure = animation;
28 | }
29 | }
30 | }
31 | #list>
32 | }
33 | }
34 |
35 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/animatedblockutil/blockentitymodel.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.block.model;
2 |
3 | <#assign geomodel = data.normal>
4 | <#assign texture = data.texture>
5 |
6 | public class ${name}BlockModel extends GeoModel<${name}TileEntity> {
7 | @Override
8 | public ResourceLocation getAnimationResource(${name}TileEntity animatable) {
9 | <#if data.hasBlockstates()>
10 | final int blockstate = animatable.blockstateNew;
11 | <#list data.blockstateList as state>
12 | if (blockstate == ${state?index + 1})
13 | return ResourceLocation.parse("${modid}:animations/${state.customModelName?replace(".geo.json", "")}.animation.json");
14 | #list>
15 | #if>
16 | return ResourceLocation.parse("${modid}:animations/${geomodel?replace(".geo.json", "")}.animation.json");
17 | }
18 |
19 | @Override
20 | public ResourceLocation getModelResource(${name}TileEntity animatable) {
21 | <#if data.hasBlockstates()>
22 | final int blockstate = animatable.blockstateNew;
23 | <#list data.blockstateList as state>
24 | if (blockstate == ${state?index + 1})
25 | return ResourceLocation.parse("${modid}:geo/${state.customModelName}");
26 | #list>
27 | #if>
28 | return ResourceLocation.parse("${modid}:geo/${geomodel}");
29 | }
30 |
31 | @Override
32 | public ResourceLocation getTextureResource(${name}TileEntity animatable) {
33 | <#if data.hasBlockstates()>
34 | final int blockstate = animatable.blockstateNew;
35 | <#list data.blockstateList as state>
36 | if (blockstate == ${state?index + 1})
37 | return ResourceLocation.parse("${modid}:textures/block/${state.texture}.png");
38 | #list>
39 | #if>
40 | return ResourceLocation.parse("${modid}:textures/block/${texture}.png");
41 | }
42 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/animatedblockutil/blockentitymodel.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.block.model;
2 |
3 | <#assign geomodel = data.normal>
4 | <#assign texture = data.texture>
5 |
6 | public class ${name}BlockModel extends GeoModel<${name}TileEntity> {
7 | @Override
8 | public ResourceLocation getAnimationResource(${name}TileEntity animatable) {
9 | <#if data.hasBlockstates()>
10 | final int blockstate = animatable.blockstateNew;
11 | <#list data.blockstateList as state>
12 | if (blockstate == ${state?index + 1})
13 | return new ResourceLocation("${modid}", "animations/${state.customModelName?replace(".geo.json", "")}.animation.json");
14 | #list>
15 | #if>
16 | return new ResourceLocation("${modid}", "animations/${geomodel?replace(".geo.json", "")}.animation.json");
17 | }
18 |
19 | @Override
20 | public ResourceLocation getModelResource(${name}TileEntity animatable) {
21 | <#if data.hasBlockstates()>
22 | final int blockstate = animatable.blockstateNew;
23 | <#list data.blockstateList as state>
24 | if (blockstate == ${state?index + 1})
25 | return new ResourceLocation("${modid}", "geo/${state.customModelName}");
26 | #list>
27 | #if>
28 | return new ResourceLocation("${modid}", "geo/${geomodel}");
29 | }
30 |
31 | @Override
32 | public ResourceLocation getTextureResource(${name}TileEntity animatable) {
33 | <#if data.hasBlockstates()>
34 | final int blockstate = animatable.blockstateNew;
35 | <#list data.blockstateList as state>
36 | if (blockstate == ${state?index + 1})
37 | return new ResourceLocation("${modid}", "textures/block/${state.texture}.png");
38 | #list>
39 | #if>
40 | return new ResourceLocation("${modid}", "textures/block/${texture}.png");
41 | }
42 | }
--------------------------------------------------------------------------------
/src/main/java/net/nerdypuzzle/geckolib/Launcher.java:
--------------------------------------------------------------------------------
1 | package net.nerdypuzzle.geckolib;
2 |
3 | import net.mcreator.plugin.events.ui.ModElementGUIEvent;
4 | import net.mcreator.plugin.events.workspace.MCreatorLoadedEvent;
5 | import net.nerdypuzzle.geckolib.registry.PluginActions;
6 | import net.nerdypuzzle.geckolib.registry.PluginElementTypes;
7 | import net.mcreator.plugin.JavaPlugin;
8 | import net.mcreator.plugin.Plugin;
9 | import net.mcreator.plugin.events.PreGeneratorsLoadingEvent;
10 | import net.nerdypuzzle.geckolib.registry.PluginEventTriggers;
11 | import org.apache.logging.log4j.LogManager;
12 | import org.apache.logging.log4j.Logger;
13 |
14 | import javax.swing.*;
15 | import java.util.HashSet;
16 | import java.util.Set;
17 |
18 | public class Launcher extends JavaPlugin {
19 |
20 | public static final Logger LOG = LogManager.getLogger("GeckoLib Plugin");
21 | public static PluginActions ACTION_REGISTRY;
22 | public static Set PLUGIN_INSTANCE = new HashSet<>();
23 |
24 | public Launcher(Plugin plugin) {
25 | super(plugin);
26 | PLUGIN_INSTANCE.add(plugin);
27 | addListener(PreGeneratorsLoadingEvent.class, event -> PluginElementTypes.load());
28 | addListener(ModElementGUIEvent.BeforeLoading.class, event -> SwingUtilities.invokeLater(() -> {
29 | PluginEventTriggers.dependencyWarning(event.getMCreator(), event.getModElementGUI());
30 | PluginEventTriggers.interceptProcedurePanel(event.getMCreator(), event.getModElementGUI());
31 | }));
32 | //addListener(ModElementGUIEvent.AfterLoading.class, event -> PluginEventTriggers.interceptProcedurePanel(event.getMCreator(), event.getModElementGUI()));
33 | addListener(MCreatorLoadedEvent.class, event -> {
34 | ACTION_REGISTRY = new PluginActions(event.getMCreator());
35 | SwingUtilities.invokeLater(() -> PluginEventTriggers.modifyMenus(event.getMCreator()));
36 | });
37 |
38 | LOG.info("Plugin was loaded");
39 | }
40 |
41 |
42 |
43 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/modbase/enumextensions.json.ftl:
--------------------------------------------------------------------------------
1 | <#assign raiders = w.getGElementsOfType("livingentity")?filter(e -> e.mobBehaviourType == "Raider")>
2 | <#assign animatedraiders = w.getGElementsOfType("animatedentity")?filter(e -> e.mobBehaviourType == "Raider")>
3 | <#assign armposes = w.getGElementsOfType("animateditem")?filter(e -> e.enableArmPose)>
4 | {
5 | "entries": [
6 | <#list animatedraiders as raider>
7 | {
8 | "enum": "net/minecraft/world/entity/raid/Raid$RaiderType",
9 | "name": "${modid?upper_case}_${raider.getModElement().getRegistryNameUpper()}",
10 | "constructor": "(Ljava/util/function/Supplier;[I)V",
11 | "parameters": {
12 | "class": "${package?replace(".", "/")}/entity/${raider.getModElement().getName()}Entity",
13 | "field": "RAIDER_TYPE"
14 | }
15 | }<#sep>,
16 | #list><#if (raiders?has_content || armposes?has_content) && animatedraiders?has_content>,#if>
17 | <#list raiders as raider>
18 | {
19 | "enum": "net/minecraft/world/entity/raid/Raid$RaiderType",
20 | "name": "${modid?upper_case}_${raider.getModElement().getRegistryNameUpper()}",
21 | "constructor": "(Ljava/util/function/Supplier;[I)V",
22 | "parameters": {
23 | "class": "${package?replace(".", "/")}/entity/${raider.getModElement().getName()}Entity",
24 | "field": "RAIDER_TYPE"
25 | }
26 | }<#sep>,
27 | #list><#if armposes?has_content && raiders?has_content>,#if>
28 | <#list armposes as pose>
29 | {
30 | "enum": "net/minecraft/client/model/HumanoidModel$ArmPose",
31 | "name": "${modid?upper_case}_${pose.getModElement().getRegistryNameUpper()}",
32 | "constructor": "(ZLnet/neoforged/neoforge/client/IArmPoseTransformer;)V",
33 | "parameters": {
34 | "class": "${package?replace(".", "/")}/item/${pose.getModElement().getName()}Item",
35 | "field": "ARM_POSE"
36 | }
37 | }<#sep>,
38 | #list>
39 | ]
40 | }
--------------------------------------------------------------------------------
/src/main/java/net/nerdypuzzle/geckolib/registry/PluginElementTypes.java:
--------------------------------------------------------------------------------
1 | package net.nerdypuzzle.geckolib.registry;
2 |
3 | import net.mcreator.element.ModElementType;
4 | import net.mcreator.generator.GeneratorFlavor;
5 | import net.nerdypuzzle.geckolib.element.types.AnimatedArmor;
6 | import net.nerdypuzzle.geckolib.element.types.AnimatedBlock;
7 | import net.nerdypuzzle.geckolib.element.types.AnimatedEntity;
8 | import net.nerdypuzzle.geckolib.element.types.AnimatedItem;
9 | import net.nerdypuzzle.geckolib.ui.modgui.AnimatedArmorGUI;
10 | import net.nerdypuzzle.geckolib.ui.modgui.AnimatedBlockGUI;
11 | import net.nerdypuzzle.geckolib.ui.modgui.AnimatedEntityGUI;
12 | import net.nerdypuzzle.geckolib.ui.modgui.AnimatedItemGUI;
13 |
14 | import static net.mcreator.element.ModElementTypeLoader.register;
15 | import static net.mcreator.generator.GeneratorFlavor.BaseLanguage.JAVA;
16 |
17 | public class PluginElementTypes {
18 | public static ModElementType> ANIMATEDBLOCK;
19 | public static ModElementType> ANIMATEDITEM;
20 | public static ModElementType> ANIMATEDENTITY;
21 | public static ModElementType> ANIMATEDARMOR;
22 |
23 | public static void load() {
24 |
25 | ANIMATEDBLOCK = register(
26 | new ModElementType<>("animatedblock", (Character) 'D', AnimatedBlockGUI::new, AnimatedBlock.class)
27 | ).coveredOn(GeneratorFlavor.baseLanguage(JAVA));
28 |
29 | ANIMATEDITEM = register(
30 | new ModElementType<>("animateditem", (Character) 'I', AnimatedItemGUI::new, AnimatedItem.class)
31 | ).coveredOn(GeneratorFlavor.baseLanguage(JAVA));
32 |
33 | ANIMATEDENTITY = register(
34 | new ModElementType<>("animatedentity", (Character) 'E', AnimatedEntityGUI::new, AnimatedEntity.class)
35 | ).coveredOn(GeneratorFlavor.baseLanguage(JAVA));
36 |
37 | ANIMATEDARMOR = register(
38 | new ModElementType<>("animatedarmor", (Character) 'A', AnimatedArmorGUI::new, AnimatedArmor.class)
39 | ).coveredOn(GeneratorFlavor.baseLanguage(JAVA));
40 |
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/animatedentity.definition.yaml:
--------------------------------------------------------------------------------
1 | global_templates:
2 | - template: aentity/animation_sync_factory.java.ftl
3 | name: "@SRCROOT/@BASEPACKAGEPATH/init/EntityAnimationFactory.java"
4 | - template: json/monster_room_mobs.json.ftl
5 | writer: json
6 | condition: "${(!w.hasElementsOfType('livingentity') || w.getGElementsOfType('animatedentity')?filter(e -> e.spawnInDungeons)?size == 0) && w.getGElementsOfType('animatedentity')?filter(e -> e.spawnInDungeons)?size != 0}"
7 | name: "@RESROOT/data/neoforge/data_maps/entity_type/monster_room_mobs.json"
8 |
9 | templates:
10 | - template: aentity/livingentity.java.ftl
11 | name: "@SRCROOT/@BASEPACKAGEPATH/entity/@NAMEEntity.java"
12 | - template: aentity/livingentity_renderer.java.ftl
13 | name: "@SRCROOT/@BASEPACKAGEPATH/client/renderer/@NAMERenderer.java"
14 | - template: aentity/livingentity_projectile.java.ftl
15 | name: "@SRCROOT/@BASEPACKAGEPATH/entity/@NAMEEntityProjectile.java"
16 | condition: hasCustomProjectile()
17 | - template: aentity/livingentity_model.java.ftl
18 | name: "@SRCROOT/@BASEPACKAGEPATH/entity/model/@NAMEModel.java"
19 | - template: aentity/livingentity_layer.java.ftl
20 | name: "@SRCROOT/@BASEPACKAGEPATH/entity/layer/@NAMELayer.java"
21 | condition: hasGlowTexture()
22 | - template: ajson/spawn_egg.json.ftl
23 | writer: json
24 | name: "@MODASSETSROOT/models/item/@registryname_spawn_egg.json"
25 | condition: hasSpawnEgg
26 | - template: ajson/entity_spawn_biome_modifier.json.ftl
27 | writer: json
28 | condition: spawnThisMob
29 | name: "@MODDATAROOT/neoforge/biome_modifier/@registryname_biome_modifier.json"
30 |
31 | unmodifiable_ai_bases: [ Bat, MagmaCube, Slime ]
32 |
33 | localizationkeys:
34 | - key: item.@modid.@registryname_spawn_egg
35 | mapto: mobName
36 | suffix: " Spawn Egg"
37 | - key: entity.@modid.@registryname
38 | mapto: mobName
39 |
40 | tags:
41 | - tag: ENTITIES:minecraft:raiders
42 | condition: "${data.mobBehaviourType == 'Raider'}"
43 | - tag: ENTITIES:minecraft:undead
44 | condition: "${data.mobCreatureType == 'UNDEAD'}"
45 | - tag: ENTITIES:minecraft:arthropod
46 | condition: "${data.mobCreatureType == 'ARTHROPOD'}"
47 | - tag: ENTITIES:minecraft:illager
48 | condition: "${data.mobCreatureType == 'ILLAGER'}"
49 | - tag: ENTITIES:minecraft:aquatic
50 | condition: "${data.mobCreatureType == 'WATER'}"
--------------------------------------------------------------------------------
/src/main/java/net/nerdypuzzle/geckolib/parts/WTextureComboBoxRenderer.java:
--------------------------------------------------------------------------------
1 | package net.nerdypuzzle.geckolib.parts;
2 |
3 | import net.mcreator.ui.workspace.resources.TextureType;
4 | import net.mcreator.util.FilenameUtilsPatched;
5 | import net.mcreator.util.image.EmptyIcon;
6 | import net.mcreator.util.image.ImageUtils;
7 | import net.mcreator.workspace.Workspace;
8 |
9 | import javax.swing.*;
10 | import java.awt.*;
11 | import java.io.File;
12 | import java.util.function.Function;
13 |
14 | public class WTextureComboBoxRenderer extends JLabel implements ListCellRenderer {
15 |
16 | private final Function textureProvider;
17 |
18 | public WTextureComboBoxRenderer(Function textureProvider) {
19 | this.textureProvider = textureProvider;
20 |
21 | setOpaque(true);
22 | setHorizontalAlignment(CENTER);
23 | setVerticalAlignment(CENTER);
24 | }
25 |
26 | @Override
27 | public Component getListCellRendererComponent(JList extends String> list, String value, int index,
28 | boolean isSelected, boolean cellHasFocus) {
29 |
30 | if (isSelected) {
31 | setBackground(list.getSelectionBackground());
32 | setForeground(list.getSelectionForeground());
33 | } else {
34 | setBackground(list.getBackground());
35 | setForeground(list.getForeground());
36 | }
37 |
38 | setText(value);
39 |
40 | ImageIcon imageIcon = textureProvider.apply(value);
41 | if (imageIcon != null) {
42 | setIcon(new ImageIcon(ImageUtils.resize(imageIcon.getImage(), 30)));
43 | } else {
44 | setIcon(new EmptyIcon(30, 30));
45 | }
46 |
47 | setHorizontalTextPosition(SwingConstants.RIGHT);
48 | setHorizontalAlignment(SwingConstants.LEFT);
49 |
50 | return this;
51 | }
52 |
53 | public static class TypeTextures extends WTextureComboBoxRenderer {
54 |
55 | public TypeTextures(Workspace workspace, TextureType type) {
56 | super(element -> {
57 | File file = workspace.getFolderManager()
58 | .getTextureFile(FilenameUtilsPatched.removeExtension(element), type);
59 | if (file.isFile())
60 | return new ImageIcon(file.getAbsolutePath());
61 | return null;
62 | });
63 | }
64 | }
65 |
66 | }
67 |
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aitem/item_container.java.ftl:
--------------------------------------------------------------------------------
1 | <#--
2 | # MCreator (https://mcreator.net/)
3 | # Copyright (C) 2012-2020, Pylo
4 | # Copyright (C) 2020-2023, Pylo, opensource contributors
5 | #
6 | # This program is free software: you can redistribute it and/or modify
7 | # it under the terms of the GNU 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 General Public License
17 | # along with this program. If not, see .
18 | #
19 | # Additional permission for code generator templates (*.ftl files)
20 | #
21 | # As a special exception, you may create a larger work that contains part or
22 | # all of the MCreator code generator templates (*.ftl files) and distribute
23 | # that work under terms of your choice, so long as that work isn't itself a
24 | # template for code generation. Alternatively, if you modify or redistribute
25 | # the template itself, you may (at your option) remove this special exception,
26 | # which will cause the template and the resulting code generator output files
27 | # to be licensed under the GNU General Public License without this special
28 | # exception.
29 | -->
30 |
31 | <#-- @formatter:off -->
32 | package ${package}.item.inventory;
33 |
34 | <#compress>
35 | @EventBusSubscriber(Dist.CLIENT) public class ${name}InventoryCapability extends ComponentItemHandler {
36 |
37 | @SubscribeEvent @OnlyIn(Dist.CLIENT) public static void onItemDropped(ItemTossEvent event) {
38 | if (event.getEntity().getItem().getItem() == ${JavaModName}Items.${data.getModElement().getRegistryNameUpper()}.get()) {
39 | if (Minecraft.getInstance().screen instanceof ${data.guiBoundTo}Screen) {
40 | Minecraft.getInstance().player.closeContainer();
41 | }
42 | }
43 | }
44 |
45 | public ${name}InventoryCapability(MutableDataComponentHolder parent) {
46 | super(parent, DataComponents.CONTAINER, ${data.inventorySize});
47 | }
48 |
49 | @Override public int getSlotLimit(int slot) {
50 | return ${data.inventoryStackSize};
51 | }
52 |
53 | @Override public boolean isItemValid(int slot, @Nonnull ItemStack stack) {
54 | return stack.getItem() != ${JavaModName}Items.${data.getModElement().getRegistryNameUpper()}.get();
55 | }
56 |
57 | @Override public ItemStack getStackInSlot(int slot) {
58 | return super.getStackInSlot(slot).copy();
59 | }
60 |
61 | }
62 | #compress>
63 |
64 | <#-- @formatter:on -->
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/modbase/neoforge.mods.toml.ftl:
--------------------------------------------------------------------------------
1 | modLoader="javafml"
2 | loaderVersion="[4,)"
3 | license="${JavaConventions.escapeStringForJava(settings.getLicense())}"
4 |
5 | [[mods]]
6 | modId="${settings.getModID()}"
7 | version="${settings.getCleanVersion()}"
8 | displayName="${JavaConventions.escapeStringForJava(settings.getModName())}"
9 | <#if settings.getUpdateURL()?has_content>
10 | updateJSONURL="${JavaConventions.escapeStringForJava(settings.getUpdateURL())}"
11 | #if>
12 | <#if settings.getWebsiteURL()?has_content>
13 | displayURL="${JavaConventions.escapeStringForJava(settings.getWebsiteURL())}"
14 | #if>
15 | <#if settings.getModPicture()?has_content>
16 | logoFile="logo.png"
17 | #if>
18 | <#if settings.getCredits()?has_content>
19 | credits="${JavaConventions.escapeStringForJava(settings.getCredits())}"
20 | #if>
21 | <#if settings.getAuthor()?has_content>
22 | authors="${JavaConventions.escapeStringForJava(settings.getAuthor())}"
23 | #if>
24 | <#if settings.getDescription()?has_content>
25 | description="${JavaConventions.escapeStringForJava(settings.getDescription())}"
26 | #if>
27 | <#if settings.isServerSideOnly()>
28 | displayTest="IGNORE_SERVER_VERSION"
29 | #if>
30 | <#if w.getGElementsOfType('livingentity')?filter(e -> e.mobBehaviourType == "Raider")?size != 0 || w.getGElementsOfType('animatedentity')?filter(e -> e.mobBehaviourType == "Raider")?size != 0 || w.getGElementsOfType('animateditem')?filter(e -> e.enableArmPose)?size != 0>
31 | enumExtensions="META-INF/enumextensions.json"
32 | #if>
33 |
34 | # Start of user code block mod configuration
35 | # End of user code block mod configuration
36 |
37 | [[dependencies.${settings.getModID()}]]
38 | modId="neoforge"
39 | type="required"
40 | versionRange="[${generator.getGeneratorBuildFileVersion()},)"
41 | ordering="AFTER"
42 | side="BOTH"
43 |
44 | [[dependencies.${settings.getModID()}]]
45 | modId="minecraft"
46 | type="required"
47 | versionRange="[${generator.getGeneratorMinecraftVersion()}]"
48 | ordering="AFTER"
49 | side="BOTH"
50 |
51 | <#list settings.getRequiredMods() as e>
52 | [[dependencies.${settings.getModID()}]]
53 | modId="${e}"
54 | type="required"
55 | versionRange="[0,)"
56 | ordering="NONE"
57 | side="BOTH"
58 | #list>
59 |
60 | <#list settings.getDependencies() as e>
61 | [[dependencies.${settings.getModID()}]]
62 | modId="${e}"
63 | type="optional"
64 | versionRange="[0,)"
65 | ordering="NONE"
66 | side="BOTH"
67 | #list>
68 |
69 | <#list settings.getDependants() as e>
70 | [[dependencies.${settings.getModID()}]]
71 | modId="${e}"
72 | type="optional"
73 | versionRange="[0,)"
74 | ordering="NONE"
75 | side="BOTH"
76 | #list>
77 |
78 | # Start of user code block dependencies configuration
79 | # End of user code block dependencies configuration
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aentity/livingentity_projectile.java.ftl:
--------------------------------------------------------------------------------
1 | <#--
2 | # MCreator (https://mcreator.net/)
3 | # Copyright (C) 2012-2020, Pylo
4 | # Copyright (C) 2020-2022, Pylo, opensource contributors
5 | #
6 | # This program is free software: you can redistribute it and/or modify
7 | # it under the terms of the GNU 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 General Public License
17 | # along with this program. If not, see .
18 | #
19 | # Additional permission for code generator templates (*.ftl files)
20 | #
21 | # As a special exception, you may create a larger work that contains part or
22 | # all of the MCreator code generator templates (*.ftl files) and distribute
23 | # that work under terms of your choice, so long as that work isn't itself a
24 | # template for code generation. Alternatively, if you modify or redistribute
25 | # the template itself, you may (at your option) remove this special exception,
26 | # which will cause the template and the resulting code generator output files
27 | # to be licensed under the GNU General Public License without this special
28 | # exception.
29 | -->
30 |
31 | <#-- @formatter:off -->
32 | <#include "../mcitems.ftl">
33 |
34 | package ${package}.entity;
35 |
36 | @OnlyIn(value = Dist.CLIENT, _interface = ItemSupplier.class) public class ${name}EntityProjectile extends AbstractArrow implements ItemSupplier {
37 |
38 | public static final ItemStack PROJECTILE_ITEM = ${mappedMCItemToItemStackCode(data.rangedAttackItem)};
39 |
40 | public ${name}EntityProjectile(EntityType extends ${name}EntityProjectile> type, Level world) {
41 | super(type, world);
42 | }
43 |
44 | public ${name}EntityProjectile(EntityType extends ${name}EntityProjectile> type, double x, double y, double z, Level world) {
45 | super(type, x, y, z, world, PROJECTILE_ITEM, null);
46 | }
47 |
48 | public ${name}EntityProjectile(EntityType extends ${name}EntityProjectile> type, LivingEntity entity, Level world) {
49 | super(type, entity, world, PROJECTILE_ITEM, null);
50 | }
51 |
52 | @Override protected void doPostHurtEffects(LivingEntity livingEntity) {
53 | super.doPostHurtEffects(livingEntity);
54 | livingEntity.setArrowCount(livingEntity.getArrowCount() - 1);
55 | }
56 |
57 | @Override @OnlyIn(Dist.CLIENT) public ItemStack getItem() {
58 | return PROJECTILE_ITEM;
59 | }
60 |
61 | @Override protected ItemStack getDefaultPickupItem() {
62 | return ${mappedMCItemToItemStackCode(data.rangedAttackItem)};
63 | }
64 | }
65 | <#-- @formatter:on -->
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%" == "" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%" == "" set DIRNAME=.
29 | set APP_BASE_NAME=%~n0
30 | set APP_HOME=%DIRNAME%
31 |
32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34 |
35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
37 |
38 | @rem Find java.exe
39 | if defined JAVA_HOME goto findJavaFromJavaHome
40 |
41 | set JAVA_EXE=java.exe
42 | %JAVA_EXE% -version >NUL 2>&1
43 | if "%ERRORLEVEL%" == "0" goto execute
44 |
45 | echo.
46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47 | echo.
48 | echo Please set the JAVA_HOME variable in your environment to match the
49 | echo location of your Java installation.
50 |
51 | goto fail
52 |
53 | :findJavaFromJavaHome
54 | set JAVA_HOME=%JAVA_HOME:"=%
55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
56 |
57 | if exist "%JAVA_EXE%" goto execute
58 |
59 | echo.
60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61 | echo.
62 | echo Please set the JAVA_HOME variable in your environment to match the
63 | echo location of your Java installation.
64 |
65 | goto fail
66 |
67 | :execute
68 | @rem Setup the command line
69 |
70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
71 |
72 |
73 | @rem Execute Gradle
74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
75 |
76 | :end
77 | @rem End local scope for the variables with windows NT shell
78 | if "%ERRORLEVEL%"=="0" goto mainEnd
79 |
80 | :fail
81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
82 | rem the _cmd.exe /c_ return code!
83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
84 | exit /b 1
85 |
86 | :mainEnd
87 | if "%OS%"=="Windows_NT" endlocal
88 |
89 | :omega
90 |
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/aentity/livingentity_projectile.java.ftl:
--------------------------------------------------------------------------------
1 | <#--
2 | # MCreator (https://mcreator.net/)
3 | # Copyright (C) 2012-2020, Pylo
4 | # Copyright (C) 2020-2022, Pylo, opensource contributors
5 | #
6 | # This program is free software: you can redistribute it and/or modify
7 | # it under the terms of the GNU 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 General Public License
17 | # along with this program. If not, see .
18 | #
19 | # Additional permission for code generator templates (*.ftl files)
20 | #
21 | # As a special exception, you may create a larger work that contains part or
22 | # all of the MCreator code generator templates (*.ftl files) and distribute
23 | # that work under terms of your choice, so long as that work isn't itself a
24 | # template for code generation. Alternatively, if you modify or redistribute
25 | # the template itself, you may (at your option) remove this special exception,
26 | # which will cause the template and the resulting code generator output files
27 | # to be licensed under the GNU General Public License without this special
28 | # exception.
29 | -->
30 |
31 | <#-- @formatter:off -->
32 | <#include "../mcitems.ftl">
33 |
34 | package ${package}.entity;
35 |
36 | @OnlyIn(value = Dist.CLIENT, _interface = ItemSupplier.class) public class ${name}EntityProjectile extends AbstractArrow implements ItemSupplier {
37 |
38 | public ${name}EntityProjectile(PlayMessages.SpawnEntity packet, Level world) {
39 | super(${JavaModName}Entities.${data.getModElement().getRegistryNameUpper()}_PROJECTILE.get(), world);
40 | }
41 |
42 | public ${name}EntityProjectile(EntityType extends ${name}EntityProjectile> type, Level world) {
43 | super(type, world);
44 | }
45 |
46 | public ${name}EntityProjectile(EntityType extends ${name}EntityProjectile> type, double x, double y, double z, Level world) {
47 | super(type, x, y, z, world);
48 | }
49 |
50 | public ${name}EntityProjectile(EntityType extends ${name}EntityProjectile> type, LivingEntity entity, Level world) {
51 | super(type, entity, world);
52 | }
53 |
54 | @Override public Packet getAddEntityPacket() {
55 | return NetworkHooks.getEntitySpawningPacket(this);
56 | }
57 |
58 | @Override protected void doPostHurtEffects(LivingEntity livingEntity) {
59 | super.doPostHurtEffects(livingEntity);
60 | livingEntity.setArrowCount(livingEntity.getArrowCount() - 1);
61 | }
62 |
63 | @Override @OnlyIn(Dist.CLIENT) public ItemStack getItem() {
64 | return ${mappedMCItemToItemStackCode(data.rangedAttackItem, 1)};
65 | }
66 |
67 | @Override protected ItemStack getPickupItem() {
68 | return ${mappedMCItemToItemStackCode(data.rangedAttackItem, 1)};
69 | }
70 | }
71 | <#-- @formatter:on -->
--------------------------------------------------------------------------------
/src/main/java/net/nerdypuzzle/geckolib/parts/arm_pose_list/JArmPoseEntry.java:
--------------------------------------------------------------------------------
1 | package net.nerdypuzzle.geckolib.parts.arm_pose_list;
2 |
3 | import net.mcreator.ui.MCreator;
4 | import net.mcreator.ui.component.entries.JSimpleListEntry;
5 | import net.mcreator.ui.help.IHelpContext;
6 | import net.mcreator.ui.init.L10N;
7 | import net.mcreator.workspace.Workspace;
8 | import net.nerdypuzzle.geckolib.element.types.AnimatedItem;
9 |
10 | import javax.swing.*;
11 | import java.util.List;
12 |
13 | public class JArmPoseEntry extends JSimpleListEntry {
14 | private final Workspace workspace;
15 | private final JComboBox armHeld = new JComboBox<>(new String[]{"LEFT", "RIGHT"});
16 | private final JComboBox arm = new JComboBox<>(new String[]{"LEFT", "RIGHT"});
17 | private final JComboBox angle = new JComboBox<>(new String[]{"X", "Y", "Z"});
18 | private final JSpinner rotation = new JSpinner(new SpinnerNumberModel(1, -10000, 10000, 0.1));
19 | private final JCheckBox swings = L10N.checkbox("elementgui.animateditem.swings", new Object[0]);
20 | private final JCheckBox followsHead = L10N.checkbox("elementgui.animateditem.follows_head", new Object[0]);
21 |
22 | public JArmPoseEntry(MCreator mcreator, IHelpContext gui, JPanel parent, List entryList) {
23 | super(parent, entryList);
24 | this.workspace = mcreator.getWorkspace();
25 | swings.setOpaque(false);
26 | followsHead.setOpaque(false);
27 | this.line.add(L10N.label("elementgui.animateditem.arm_held", new Object[0]));
28 | this.line.add(armHeld);
29 | this.line.add(L10N.label("elementgui.animateditem.arm", new Object[0]));
30 | this.line.add(arm);
31 | this.line.add(L10N.label("elementgui.animateditem.rotation_angle", new Object[0]));
32 | this.line.add(angle);
33 | this.line.add(L10N.label("elementgui.animateditem.rotation", new Object[0]));
34 | this.line.add(rotation);
35 | this.line.add(swings);
36 | this.line.add(followsHead);
37 | }
38 |
39 | protected void setEntryEnabled(boolean enabled) {
40 | armHeld.setEnabled(enabled);
41 | arm.setEnabled(enabled);
42 | angle.setEnabled(enabled);
43 | rotation.setEnabled(enabled);
44 | swings.setEnabled(enabled);
45 | followsHead.setEnabled(enabled);
46 | }
47 |
48 | public AnimatedItem.ArmPoseEntry getEntry() {
49 | AnimatedItem.ArmPoseEntry entry = new AnimatedItem.ArmPoseEntry();
50 | entry.armHeld = (String) armHeld.getSelectedItem();
51 | entry.arm = (String) arm.getSelectedItem();
52 | entry.angle = (String) angle.getSelectedItem();
53 | entry.rotation = (Number) rotation.getValue();
54 | entry.swings = swings.isSelected();
55 | entry.followsHead = followsHead.isSelected();
56 | return entry;
57 | }
58 |
59 | public void setEntry(AnimatedItem.ArmPoseEntry e) {
60 | armHeld.setSelectedItem(e.armHeld);
61 | arm.setSelectedItem(e.arm);
62 | angle.setSelectedItem(e.angle);
63 | rotation.setValue(e.rotation);
64 | swings.setSelected(e.swings);
65 | followsHead.setSelected(e.followsHead);
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/elementinits/blockentities.java.ftl:
--------------------------------------------------------------------------------
1 | <#--
2 | # MCreator (https://mcreator.net/)
3 | # Copyright (C) 2012-2020, Pylo
4 | # Copyright (C) 2020-2022, Pylo, opensource contributors
5 | #
6 | # This program is free software: you can redistribute it and/or modify
7 | # it under the terms of the GNU 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 General Public License
17 | # along with this program. If not, see .
18 | #
19 | # Additional permission for code generator templates (*.ftl files)
20 | #
21 | # As a special exception, you may create a larger work that contains part or
22 | # all of the MCreator code generator templates (*.ftl files) and distribute
23 | # that work under terms of your choice, so long as that work isn't itself a
24 | # template for code generation. Alternatively, if you modify or redistribute
25 | # the template itself, you may (at your option) remove this special exception,
26 | # which will cause the template and the resulting code generator output files
27 | # to be licensed under the GNU General Public License without this special
28 | # exception.
29 | -->
30 |
31 | <#-- @formatter:off -->
32 |
33 | /*
34 | * MCreator note: This file will be REGENERATED on each build.
35 | */
36 |
37 | package ${package}.init;
38 |
39 | public class ${JavaModName}BlockEntities {
40 |
41 | public static final DeferredRegister> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, ${JavaModName}.MODID);
42 |
43 | <#list blockentities as blockentity>
44 | <#if blockentity.getModElement().getTypeString() != "animatedblock">
45 | public static final RegistryObject> ${blockentity.getModElement().getRegistryNameUpper()} =
46 | register("${blockentity.getModElement().getRegistryName()}", ${JavaModName}Blocks.${blockentity.getModElement().getRegistryNameUpper()},
47 | ${blockentity.getModElement().getName()}BlockEntity::new);
48 | <#else>
49 | public static final RegistryObject> ${blockentity.getModElement().getRegistryNameUpper()} = REGISTRY.register("${blockentity.getModElement().getRegistryName()}",
50 | () -> BlockEntityType.Builder.of(${blockentity.getModElement().getName()}TileEntity::new,
51 | ${JavaModName}Blocks.${blockentity.getModElement().getRegistryNameUpper()}.get()).build(null));
52 | #if>
53 | #list>
54 |
55 | // Start of user code block custom block entities
56 | // End of user code block custom block entities
57 |
58 | private static RegistryObject> register(String registryname, RegistryObject block, BlockEntityType.BlockEntitySupplier> supplier) {
59 | return REGISTRY.register(registryname, () -> BlockEntityType.Builder.of(supplier, block.get()).build(null));
60 | }
61 |
62 | }
63 | <#-- @formatter:on -->
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/aitem/item_container.java.ftl:
--------------------------------------------------------------------------------
1 | <#--
2 | # MCreator (https://mcreator.net/)
3 | # Copyright (C) 2012-2020, Pylo
4 | # Copyright (C) 2020-2022, Pylo, opensource contributors
5 | #
6 | # This program is free software: you can redistribute it and/or modify
7 | # it under the terms of the GNU 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 General Public License
17 | # along with this program. If not, see .
18 | #
19 | # Additional permission for code generator templates (*.ftl files)
20 | #
21 | # As a special exception, you may create a larger work that contains part or
22 | # all of the MCreator code generator templates (*.ftl files) and distribute
23 | # that work under terms of your choice, so long as that work isn't itself a
24 | # template for code generation. Alternatively, if you modify or redistribute
25 | # the template itself, you may (at your option) remove this special exception,
26 | # which will cause the template and the resulting code generator output files
27 | # to be licensed under the GNU General Public License without this special
28 | # exception.
29 | -->
30 |
31 | <#-- @formatter:off -->
32 |
33 | package ${package}.item.inventory;
34 |
35 | import javax.annotation.Nullable;
36 |
37 | @Mod.EventBusSubscriber(Dist.CLIENT) public class ${name}InventoryCapability implements ICapabilitySerializable {
38 |
39 | @SubscribeEvent @OnlyIn(Dist.CLIENT) public static void onItemDropped(ItemTossEvent event) {
40 | if(event.getEntity().getItem().getItem() == ${JavaModName}Items.${data.getModElement().getRegistryNameUpper()}.get()) {
41 | if (Minecraft.getInstance().screen instanceof ${data.guiBoundTo}Screen) {
42 | Minecraft.getInstance().player.closeContainer();
43 | }
44 | }
45 | }
46 |
47 | private final LazyOptional inventory = LazyOptional.of(this::createItemHandler);
48 |
49 | @Override public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction side) {
50 | return capability == ForgeCapabilities.ITEM_HANDLER ? this.inventory.cast() : LazyOptional.empty();
51 | }
52 |
53 | @Override public CompoundTag serializeNBT() {
54 | return getItemHandler().serializeNBT();
55 | }
56 |
57 | @Override public void deserializeNBT(CompoundTag nbt) {
58 | getItemHandler().deserializeNBT(nbt);
59 | }
60 |
61 | private ItemStackHandler createItemHandler() {
62 | return new ItemStackHandler(${data.inventorySize}) {
63 |
64 | @Override public int getSlotLimit(int slot) {
65 | return ${data.inventoryStackSize};
66 | }
67 |
68 | @Override public boolean isItemValid(int slot, @Nonnull ItemStack stack) {
69 | return stack.getItem() != ${JavaModName}Items.${data.getModElement().getRegistryNameUpper()}.get();
70 | }
71 |
72 | @Override public void setSize(int size) {
73 | }
74 |
75 | };
76 | }
77 |
78 | private ItemStackHandler getItemHandler() {
79 | return inventory.orElseThrow(RuntimeException::new);
80 | }
81 |
82 | }
83 |
84 | <#-- @formatter:on -->
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/animatedblock.definition.yaml:
--------------------------------------------------------------------------------
1 | templates:
2 | - template: ablock/block.java.ftl
3 | name: "@SRCROOT/@BASEPACKAGEPATH/block/@NAMEBlock.java"
4 | - template: animatedblockutil/blockentityrenderer.java.ftl
5 | name: "@SRCROOT/@BASEPACKAGEPATH/block/renderer/@NAMETileRenderer.java"
6 | - template: animatedblockutil/blockentitymodel.java.ftl
7 | name: "@SRCROOT/@BASEPACKAGEPATH/block/model/@NAMEBlockModel.java"
8 |
9 |
10 | - template: animatedblockutil/displayitem/displayrenderer.java.ftl
11 | name: "@SRCROOT/@BASEPACKAGEPATH/block/renderer/@NAMEDisplayItemRenderer.java"
12 | - template: animatedblockutil/displayitem/displaymodel.java.ftl
13 | name: "@SRCROOT/@BASEPACKAGEPATH/block/model/@NAMEDisplayModel.java"
14 | - template: animatedblockutil/displayitem/displayitem.java.ftl
15 | name: "@SRCROOT/@BASEPACKAGEPATH/block/display/@NAMEDisplayItem.java"
16 |
17 |
18 | # Worldgen
19 | - template: json/block_feature_biome_modifier.json.ftl
20 | writer: json
21 | condition: generateFeature
22 | name: "@MODDATAROOT/forge/biome_modifier/@registryname_biome_modifier.json"
23 | variables: "step=underground_ores"
24 | - template: ablock/configured_oregen.json.ftl
25 | writer: json
26 | condition: generateFeature
27 | name: "@MODDATAROOT/worldgen/configured_feature/@registryname.json"
28 | - template: ablock/placed_oregen.json.ftl
29 | writer: json
30 | condition: generateFeature
31 | name: "@MODDATAROOT/worldgen/placed_feature/@registryname.json"
32 |
33 |
34 | - template: ablock/blockentity.java.ftl
35 | name: "@SRCROOT/@BASEPACKAGEPATH/block/entity/@NAMETileEntity.java"
36 |
37 | # Normal block templates
38 | - template: ajson/block_states.json.ftl
39 | writer: json
40 | name: "@MODASSETSROOT/blockstates/@registryname.json"
41 |
42 | # Block item templates
43 | - template: ajson/block_item.json.ftl
44 | writer: json
45 | name: "@MODASSETSROOT/models/item/@registryname.json"
46 | - template: ajson/block_particle.json.ftl
47 | name: "@MODASSETSROOT/models/custom/@registryname_particle.json"
48 |
49 | global_templates:
50 | - template: animatedblockutil/listeners/blocklistener.java.ftl
51 | name: "@SRCROOT/@BASEPACKAGEPATH/block/listener/ClientListener.java"
52 |
53 | tags:
54 | - tag: BLOCKS:minecraft:mineable/pickaxe
55 | condition: "${data.destroyTool == 'pickaxe'}"
56 | - tag: BLOCKS:minecraft:mineable/axe
57 | condition: "${data.destroyTool == 'axe'}"
58 | - tag: BLOCKS:minecraft:mineable/shovel
59 | condition: "${data.destroyTool == 'shovel'}"
60 | - tag: BLOCKS:minecraft:mineable/hoe
61 | condition: "${data.destroyTool == 'hoe'}"
62 | - tag: BLOCKS:minecraft:replaceable
63 | condition: isReplaceable
64 | - tag: BLOCKS:minecraft:needs_stone_tool
65 | condition: "${data.requiresCorrectTool && data.vanillaToolTier == 'STONE'}"
66 | - tag: BLOCKS:minecraft:needs_iron_tool
67 | condition: "${data.requiresCorrectTool && data.vanillaToolTier == 'IRON'}"
68 | - tag: BLOCKS:minecraft:needs_diamond_tool
69 | condition: "${data.requiresCorrectTool && data.vanillaToolTier == 'DIAMOND'}"
70 |
71 | localizationkeys:
72 | - key: block.@modid.@registryname
73 | mapto: name
74 |
75 | list_templates:
76 | - name: "Blockstates"
77 | listData: data.getBlockstates()
78 | forEach:
79 | - template: ajson/blockstate.json.ftl
80 | writer: json
81 | name: "@MODASSETSROOT/models/block/@registryname_blockstate_@itemindex.json"
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/animatedblock.definition.yaml:
--------------------------------------------------------------------------------
1 | templates:
2 | - template: ablock/block.java.ftl
3 | name: "@SRCROOT/@BASEPACKAGEPATH/block/@NAMEBlock.java"
4 | - template: animatedblockutil/blockentityrenderer.java.ftl
5 | name: "@SRCROOT/@BASEPACKAGEPATH/block/renderer/@NAMETileRenderer.java"
6 | - template: animatedblockutil/blockentitymodel.java.ftl
7 | name: "@SRCROOT/@BASEPACKAGEPATH/block/model/@NAMEBlockModel.java"
8 |
9 |
10 | - template: animatedblockutil/displayitem/displayrenderer.java.ftl
11 | name: "@SRCROOT/@BASEPACKAGEPATH/block/renderer/@NAMEDisplayItemRenderer.java"
12 | - template: animatedblockutil/displayitem/displaymodel.java.ftl
13 | name: "@SRCROOT/@BASEPACKAGEPATH/block/model/@NAMEDisplayModel.java"
14 | - template: animatedblockutil/displayitem/displayitem.java.ftl
15 | name: "@SRCROOT/@BASEPACKAGEPATH/block/display/@NAMEDisplayItem.java"
16 |
17 |
18 | # Worldgen
19 | - template: json/block_feature_biome_modifier.json.ftl
20 | writer: json
21 | condition: generateFeature
22 | name: "@MODDATAROOT/neoforge/biome_modifier/@registryname_biome_modifier.json"
23 | variables: "step=underground_ores"
24 | - template: ablock/configured_oregen.json.ftl
25 | writer: json
26 | condition: generateFeature
27 | name: "@MODDATAROOT/worldgen/configured_feature/@registryname.json"
28 | - template: ablock/placed_oregen.json.ftl
29 | writer: json
30 | condition: generateFeature
31 | name: "@MODDATAROOT/worldgen/placed_feature/@registryname.json"
32 |
33 |
34 | - template: ablock/blockentity.java.ftl
35 | name: "@SRCROOT/@BASEPACKAGEPATH/block/entity/@NAMETileEntity.java"
36 |
37 | # Normal block templates
38 | - template: ajson/block_states.json.ftl
39 | writer: json
40 | name: "@MODASSETSROOT/blockstates/@registryname.json"
41 |
42 | # Block item templates
43 | - template: ajson/block_item.json.ftl
44 | writer: json
45 | name: "@MODASSETSROOT/models/item/@registryname.json"
46 | - template: ajson/block_particle.json.ftl
47 | name: "@MODASSETSROOT/models/custom/@registryname_particle.json"
48 |
49 | global_templates:
50 | - template: animatedblockutil/listeners/blocklistener.java.ftl
51 | name: "@SRCROOT/@BASEPACKAGEPATH/block/listener/ClientListener.java"
52 |
53 | tags:
54 | - tag: BLOCKS:minecraft:mineable/pickaxe
55 | condition: "${data.destroyTool == 'pickaxe'}"
56 | - tag: BLOCKS:minecraft:mineable/axe
57 | condition: "${data.destroyTool == 'axe'}"
58 | - tag: BLOCKS:minecraft:mineable/shovel
59 | condition: "${data.destroyTool == 'shovel'}"
60 | - tag: BLOCKS:minecraft:mineable/hoe
61 | condition: "${data.destroyTool == 'hoe'}"
62 | - tag: BLOCKS:minecraft:replaceable
63 | condition: isReplaceable
64 | - tag: BLOCKS:minecraft:needs_stone_tool
65 | condition: "${data.requiresCorrectTool && data.vanillaToolTier == 'STONE'}"
66 | - tag: BLOCKS:minecraft:needs_iron_tool
67 | condition: "${data.requiresCorrectTool && data.vanillaToolTier == 'IRON'}"
68 | - tag: BLOCKS:minecraft:needs_diamond_tool
69 | condition: "${data.requiresCorrectTool && data.vanillaToolTier == 'DIAMOND'}"
70 |
71 | localizationkeys:
72 | - key: block.@modid.@registryname
73 | mapto: name
74 |
75 | list_templates:
76 | - name: "Blockstates"
77 | listData: data.getBlockstates()
78 | forEach:
79 | - template: ajson/blockstate.json.ftl
80 | writer: json
81 | name: "@MODASSETSROOT/models/block/@registryname_blockstate_@itemindex.json"
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aentity/livingentity_renderer.java.ftl:
--------------------------------------------------------------------------------
1 | <#--
2 | # MCreator (https://mcreator.net/)
3 | # Copyright (C) 2012-2020, Pylo
4 | # Copyright (C) 2020-2022, Pylo, opensource contributors
5 | #
6 | # This program is free software: you can redistribute it and/or modify
7 | # it under the terms of the GNU 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 General Public License
17 | # along with this program. If not, see .
18 | #
19 | # Additional permission for code generator templates (*.ftl files)
20 | #
21 | # As a special exception, you may create a larger work that contains part or
22 | # all of the MCreator code generator templates (*.ftl files) and distribute
23 | # that work under terms of your choice, so long as that work isn't itself a
24 | # template for code generation. Alternatively, if you modify or redistribute
25 | # the template itself, you may (at your option) remove this special exception,
26 | # which will cause the template and the resulting code generator output files
27 | # to be licensed under the GNU General Public License without this special
28 | # exception.
29 | -->
30 |
31 | <#-- @formatter:off -->
32 |
33 | <#include "../procedures.java.ftl">
34 |
35 | package ${package}.client.renderer;
36 |
37 | <#assign shadowRadius = "this.shadowRadius = " + data.modelShadowSize + "f;">
38 |
39 | public class ${name}Renderer extends GeoEntityRenderer<${name}Entity> {
40 | public ${name}Renderer(EntityRendererProvider.Context renderManager) {
41 | super(renderManager, new ${name}Model());
42 | ${shadowRadius}
43 | <#if data.mobModelGlowTexture?has_content>
44 | this.addRenderLayer(new ${name}Layer(this));
45 | #if>
46 | }
47 |
48 | @Override
49 | public RenderType getRenderType(${name}Entity animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
50 | return RenderType.entityTranslucent(getTextureLocation(animatable));
51 | }
52 |
53 | @Override
54 | public void preRender(PoseStack poseStack, ${name}Entity entity, BakedGeoModel model, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int color) {
55 | <#if data.visualScale??>
56 | <#if hasProcedure(data.visualScale)>
57 | Level world = entity.level();
58 | double x = entity.getX();
59 | double y = entity.getY();
60 | double z = entity.getZ();
61 | float scale = (float) <@procedureOBJToNumberCode data.visualScale/>;
62 |
63 | <#else>
64 | float scale = ${data.visualScale.getFixedValue()}f;
65 | #if>
66 | this.scaleHeight = scale;
67 | this.scaleWidth = scale;
68 | #if>
69 | super.preRender(poseStack, entity, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, color);
70 | }
71 |
72 | <#if data.disableDeathRotation>
73 | @Override
74 | protected float getDeathMaxRotation(${name}Entity entityLivingBaseIn) {
75 | return 0.0F;
76 | }
77 | #if>
78 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/aarmor/animation_sync_factory.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.init;
2 |
3 | @Mod.EventBusSubscriber
4 | public class ArmorAnimationFactory {
5 |
6 | @SubscribeEvent
7 | public static void animatedArmors(TickEvent.PlayerTickEvent event) {
8 | String animation = "";
9 | if (event.phase == TickEvent.Phase.END) {
10 | if(event.player.getItemBySlot(EquipmentSlot.HEAD).getItem() != (ItemStack.EMPTY).getItem() && event.player.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof GeoItem) {
11 | if (!event.player.getItemBySlot(EquipmentSlot.HEAD).getOrCreateTag().getString("geckoAnim").equals("")) {
12 | animation = event.player.getItemBySlot(EquipmentSlot.HEAD).getOrCreateTag().getString("geckoAnim");
13 | event.player.getItemBySlot(EquipmentSlot.HEAD).getOrCreateTag().putString("geckoAnim", "");
14 | <#list animatedarmors as aarmor>
15 | if (event.player.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof ${aarmor.getModElement().getName()}Item animatable && event.player.level().isClientSide())
16 | animatable.animationprocedure = animation;
17 | #list>
18 | }
19 | }
20 | if(event.player.getItemBySlot(EquipmentSlot.CHEST).getItem() != (ItemStack.EMPTY).getItem() && event.player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof GeoItem) {
21 | if (!event.player.getItemBySlot(EquipmentSlot.CHEST).getOrCreateTag().getString("geckoAnim").equals("")) {
22 | animation = event.player.getItemBySlot(EquipmentSlot.CHEST).getOrCreateTag().getString("geckoAnim");
23 | event.player.getItemBySlot(EquipmentSlot.CHEST).getOrCreateTag().putString("geckoAnim", "");
24 | <#list animatedarmors as aarmor>
25 | if (event.player.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof ${aarmor.getModElement().getName()}Item animatable && event.player.level().isClientSide())
26 | animatable.animationprocedure = animation;
27 | #list>
28 | }
29 | }
30 | if(event.player.getItemBySlot(EquipmentSlot.LEGS).getItem() != (ItemStack.EMPTY).getItem() && event.player.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof GeoItem) {
31 | if (!event.player.getItemBySlot(EquipmentSlot.LEGS).getOrCreateTag().getString("geckoAnim").equals("")) {
32 | animation = event.player.getItemBySlot(EquipmentSlot.LEGS).getOrCreateTag().getString("geckoAnim");
33 | event.player.getItemBySlot(EquipmentSlot.LEGS).getOrCreateTag().putString("geckoAnim", "");
34 | <#list animatedarmors as aarmor>
35 | if (event.player.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof ${aarmor.getModElement().getName()}Item animatable && event.player.level().isClientSide())
36 | animatable.animationprocedure = animation;
37 | #list>
38 | }
39 | }
40 | if(event.player.getItemBySlot(EquipmentSlot.FEET).getItem() != (ItemStack.EMPTY).getItem() && event.player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof GeoItem) {
41 | if (!event.player.getItemBySlot(EquipmentSlot.FEET).getOrCreateTag().getString("geckoAnim").equals("")) {
42 | animation = event.player.getItemBySlot(EquipmentSlot.FEET).getOrCreateTag().getString("geckoAnim");
43 | event.player.getItemBySlot(EquipmentSlot.FEET).getOrCreateTag().putString("geckoAnim", "");
44 | <#list animatedarmors as aarmor>
45 | if (event.player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof ${aarmor.getModElement().getName()}Item animatable && event.player.level().isClientSide())
46 | animatable.animationprocedure = animation;
47 | #list>
48 | }
49 | }
50 | }
51 | }
52 | }
--------------------------------------------------------------------------------
/src/main/resources/forge-1.20.1/templates/aentity/livingentity_renderer.java.ftl:
--------------------------------------------------------------------------------
1 | <#--
2 | # MCreator (https://mcreator.net/)
3 | # Copyright (C) 2012-2020, Pylo
4 | # Copyright (C) 2020-2022, Pylo, opensource contributors
5 | #
6 | # This program is free software: you can redistribute it and/or modify
7 | # it under the terms of the GNU 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 General Public License
17 | # along with this program. If not, see .
18 | #
19 | # Additional permission for code generator templates (*.ftl files)
20 | #
21 | # As a special exception, you may create a larger work that contains part or
22 | # all of the MCreator code generator templates (*.ftl files) and distribute
23 | # that work under terms of your choice, so long as that work isn't itself a
24 | # template for code generation. Alternatively, if you modify or redistribute
25 | # the template itself, you may (at your option) remove this special exception,
26 | # which will cause the template and the resulting code generator output files
27 | # to be licensed under the GNU General Public License without this special
28 | # exception.
29 | -->
30 |
31 | <#-- @formatter:off -->
32 |
33 | <#include "../procedures.java.ftl">
34 |
35 | package ${package}.client.renderer;
36 |
37 | <#assign shadowRadius = "this.shadowRadius = " + data.modelShadowSize + "f;">
38 |
39 | public class ${name}Renderer extends GeoEntityRenderer<${name}Entity> {
40 | public ${name}Renderer(EntityRendererProvider.Context renderManager) {
41 | super(renderManager, new ${name}Model());
42 | ${shadowRadius}
43 | <#if data.mobModelGlowTexture?has_content>
44 | this.addRenderLayer(new ${name}Layer(this));
45 | #if>
46 | }
47 |
48 | @Override
49 | public RenderType getRenderType(${name}Entity animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
50 | return RenderType.entityTranslucent(getTextureLocation(animatable));
51 | }
52 |
53 | @Override
54 | public void preRender(PoseStack poseStack, ${name}Entity entity, BakedGeoModel model, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green,
55 | float blue, float alpha) {
56 | <#if data.visualScale??>
57 | <#if hasProcedure(data.visualScale)>
58 | Level world = entity.level();
59 | double x = entity.getX();
60 | double y = entity.getY();
61 | double z = entity.getZ();
62 | float scale = (float) <@procedureOBJToNumberCode data.visualScale/>;
63 |
64 | <#else>
65 | float scale = ${data.visualScale.getFixedValue()}f;
66 | #if>
67 | this.scaleHeight = scale;
68 | this.scaleWidth = scale;
69 | #if>
70 | super.preRender(poseStack, entity, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha);
71 | }
72 |
73 | <#if data.disableDeathRotation>
74 | @Override
75 | protected float getDeathMaxRotation(${name}Entity entityLivingBaseIn) {
76 | return 0.0F;
77 | }
78 | #if>
79 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aarmor/animation_sync_factory.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.init;
2 |
3 | @EventBusSubscriber
4 | public class ArmorAnimationFactory {
5 |
6 | @SubscribeEvent
7 | public static void animatedArmors(PlayerTickEvent.Post event) {
8 | String animation = "";
9 | if(event.getEntity().getItemBySlot(EquipmentSlot.HEAD).getItem() != (ItemStack.EMPTY).getItem() && event.getEntity().getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof GeoItem) {
10 | if (!event.getEntity().getItemBySlot(EquipmentSlot.HEAD).getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getString("geckoAnim").equals("")) {
11 | animation = event.getEntity().getItemBySlot(EquipmentSlot.HEAD).getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getString("geckoAnim");
12 | CustomData.update(DataComponents.CUSTOM_DATA, event.getEntity().getItemBySlot(EquipmentSlot.HEAD), tag -> tag.putString("geckoAnim", ""));
13 | <#list animatedarmors as aarmor>
14 | if (event.getEntity().getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof ${aarmor.getModElement().getName()}Item animatable && event.getEntity().level().isClientSide())
15 | animatable.animationprocedure = animation;
16 | #list>
17 | }
18 | }
19 | if(event.getEntity().getItemBySlot(EquipmentSlot.CHEST).getItem() != (ItemStack.EMPTY).getItem() && event.getEntity().getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof GeoItem) {
20 | if (!event.getEntity().getItemBySlot(EquipmentSlot.CHEST).getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getString("geckoAnim").equals("")) {
21 | animation = event.getEntity().getItemBySlot(EquipmentSlot.CHEST).getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getString("geckoAnim");
22 | CustomData.update(DataComponents.CUSTOM_DATA, event.getEntity().getItemBySlot(EquipmentSlot.CHEST), tag -> tag.putString("geckoAnim", ""));
23 | <#list animatedarmors as aarmor>
24 | if (event.getEntity().getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof ${aarmor.getModElement().getName()}Item animatable && event.getEntity().level().isClientSide())
25 | animatable.animationprocedure = animation;
26 | #list>
27 | }
28 | }
29 | if(event.getEntity().getItemBySlot(EquipmentSlot.LEGS).getItem() != (ItemStack.EMPTY).getItem() && event.getEntity().getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof GeoItem) {
30 | if (!event.getEntity().getItemBySlot(EquipmentSlot.LEGS).getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getString("geckoAnim").equals("")) {
31 | animation = event.getEntity().getItemBySlot(EquipmentSlot.LEGS).getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getString("geckoAnim");
32 | CustomData.update(DataComponents.CUSTOM_DATA, event.getEntity().getItemBySlot(EquipmentSlot.HEAD), tag -> tag.putString("geckoAnim", ""));
33 | <#list animatedarmors as aarmor>
34 | if (event.getEntity().getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof ${aarmor.getModElement().getName()}Item animatable && event.getEntity().level().isClientSide())
35 | animatable.animationprocedure = animation;
36 | #list>
37 | }
38 | }
39 | if(event.getEntity().getItemBySlot(EquipmentSlot.FEET).getItem() != (ItemStack.EMPTY).getItem() && event.getEntity().getItemBySlot(EquipmentSlot.FEET).getItem() instanceof GeoItem) {
40 | if (!event.getEntity().getItemBySlot(EquipmentSlot.FEET).getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getString("geckoAnim").equals("")) {
41 | animation = event.getEntity().getItemBySlot(EquipmentSlot.FEET).getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getString("geckoAnim");
42 | CustomData.update(DataComponents.CUSTOM_DATA, event.getEntity().getItemBySlot(EquipmentSlot.FEET), tag -> tag.putString("geckoAnim", ""));
43 | <#list animatedarmors as aarmor>
44 | if (event.getEntity().getItemBySlot(EquipmentSlot.FEET).getItem() instanceof ${aarmor.getModElement().getName()}Item animatable && event.getEntity().level().isClientSide())
45 | animatable.animationprocedure = animation;
46 | #list>
47 | }
48 | }
49 | }
50 | }
--------------------------------------------------------------------------------
/src/main/resources/neoforge-1.21.1/templates/aitem/item_renderer.java.ftl:
--------------------------------------------------------------------------------
1 | package ${package}.item.renderer;
2 |
3 | public class ${name}ItemRenderer extends GeoItemRenderer<${name}Item> {
4 | public ${name}ItemRenderer() {
5 | super(new ${name}ItemModel());
6 | }
7 |
8 | @Override
9 | public RenderType getRenderType(${name}Item animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
10 | return RenderType.entityTranslucent(getTextureLocation(animatable));
11 | }
12 |
13 | private static final float SCALE_RECIPROCAL = 1.0f / 16.0f;
14 | protected boolean renderArms = false;
15 | protected MultiBufferSource currentBuffer;
16 | protected RenderType renderType;
17 | public ItemDisplayContext transformType;
18 | protected ${name}Item animatable;
19 | private final Set hiddenBones = new HashSet<>();
20 | private final Set suppressedBones = new HashSet<>();
21 |
22 |
23 | @Override
24 | public void renderByItem(ItemStack stack, ItemDisplayContext transformType, PoseStack matrixStack, MultiBufferSource bufferIn, int combinedLightIn, int p_239207_6_) {
25 | this.transformType = transformType;
26 | super.renderByItem(stack, transformType, matrixStack, bufferIn, combinedLightIn, p_239207_6_);
27 | }
28 |
29 | @Override
30 | public void actuallyRender(PoseStack matrixStackIn, ${name}Item animatable, BakedGeoModel model, RenderType type, MultiBufferSource renderTypeBuffer, VertexConsumer vertexBuilder, boolean isRenderer, float partialTicks, int packedLightIn, int packedOverlayIn, int color) {
31 | this.currentBuffer = renderTypeBuffer;
32 | this.renderType = type;
33 | this.animatable = animatable;
34 | super.actuallyRender(matrixStackIn, animatable, model, type, renderTypeBuffer, vertexBuilder, isRenderer, partialTicks, packedLightIn, packedOverlayIn, color);
35 | if (this.renderArms) {
36 | this.renderArms = false;
37 | }
38 | }
39 |
40 | <#if data.firstPersonArms>
41 | @Override
42 | public void renderRecursively(PoseStack stack, ${name}Item animatable, GeoBone bone, RenderType type, MultiBufferSource buffer, VertexConsumer bufferIn, boolean isReRender, float partialTick, int packedLightIn, int packedOverlayIn, int color) {
43 | Minecraft mc = Minecraft.getInstance();
44 | String name = bone.getName();
45 | boolean renderingArms = false;
46 | if (name.equals("${data.leftArm}") || name.equals("${data.rightArm}")) {
47 | bone.setHidden(true);
48 | renderingArms = true;
49 | } else {
50 | bone.setHidden(this.hiddenBones.contains(name));
51 | }
52 | if (this.transformType.firstPerson() && renderingArms) {
53 | AbstractClientPlayer player = mc.player;
54 | PlayerRenderer playerRenderer = (PlayerRenderer) mc.getEntityRenderDispatcher().getRenderer(player);
55 | PlayerModel model = playerRenderer.getModel();
56 | stack.pushPose();
57 | RenderUtil.translateMatrixToBone(stack, bone);
58 | RenderUtil.translateToPivotPoint(stack, bone);
59 | RenderUtil.rotateMatrixAroundBone(stack, bone);
60 | RenderUtil.scaleMatrixForBone(stack, bone);
61 | RenderUtil.translateAwayFromPivotPoint(stack, bone);
62 | ResourceLocation loc = player.getSkin().texture();
63 | if (name.equals("${data.leftArm}")) {
64 | stack.translate(-1.0f * SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f);
65 | if (!player.isInvisible()) {
66 | AnimUtils.renderPartOverBone(model.leftArm, bone, stack, this.currentBuffer.getBuffer(RenderType.entitySolid(loc)), packedLightIn, OverlayTexture.NO_OVERLAY);
67 | AnimUtils.renderPartOverBone(model.leftSleeve, bone, stack, this.currentBuffer.getBuffer(RenderType.entityTranslucent(loc)), packedLightIn, OverlayTexture.NO_OVERLAY);
68 | }
69 | } else if (name.equals("${data.rightArm}")) {
70 | stack.translate(1.0f * SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f);
71 | if (!player.isInvisible()) {
72 | AnimUtils.renderPartOverBone(model.rightArm, bone, stack, this.currentBuffer.getBuffer(RenderType.entitySolid(loc)), packedLightIn, OverlayTexture.NO_OVERLAY);
73 | AnimUtils.renderPartOverBone(model.rightSleeve, bone, stack, this.currentBuffer.getBuffer(RenderType.entityTranslucent(loc)), packedLightIn, OverlayTexture.NO_OVERLAY);
74 | }
75 | }
76 | stack.popPose();
77 | }
78 | super.renderRecursively(stack, animatable, bone, type, buffer, bufferIn, isReRender, partialTick, packedLightIn, packedOverlayIn, color);
79 | }
80 | #if>
81 |
82 | @Override
83 | public ResourceLocation getTextureLocation(${name}Item instance) {
84 | return super.getTextureLocation(instance);
85 | }
86 |
87 |
88 | }
--------------------------------------------------------------------------------