├── .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 | 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 | 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 | 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 | 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 | 11 | 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 | 14 | 15 | -------------------------------------------------------------------------------- /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 | 14 | 15 | -------------------------------------------------------------------------------- /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 | 11 | 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 | 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 | 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 | 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 | 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 | 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>, 9 | ], 10 | <#else> 11 | "biomes": { 12 | "type": "forge:any" 13 | }, 14 | 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>, 9 | ], 10 | <#else> 11 | "biomes": { 12 | "type": "neoforge:any" 13 | }, 14 | 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 | 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> 10 | 11 | <#if w.hasElementsOfType("animatedentity")><#if hasLiving>, 12 | <#list w.getGElementsOfType("animatedentity")?filter(e -> e.spawnInDungeons) as aentity> 13 | "${modid}:${aentity.getModElement().getRegistryName()}": { 14 | "weight": 100 15 | } 16 | <#sep>, 17 | 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 | 21 | }, 22 | "state": { 23 | "Name": "${modid}:${registryname}" 24 | } 25 | }<#sep>, 26 | 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 | 21 | }, 22 | "state": { 23 | "Name": "${modid}:${registryname}" 24 | } 25 | }<#sep>, 26 | 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 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 | 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 | 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 | 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 | 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 | 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 | 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 | 15 | 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 | 27 | 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 | 39 | 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 | 15 | 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 | 27 | 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 | 39 | 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 | <#if (raiders?has_content || armposes?has_content) && animatedraiders?has_content>, 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 | <#if armposes?has_content && raiders?has_content>, 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 | 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 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 | 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 | 12 | <#if settings.getWebsiteURL()?has_content> 13 | displayURL="${JavaConventions.escapeStringForJava(settings.getWebsiteURL())}" 14 | 15 | <#if settings.getModPicture()?has_content> 16 | logoFile="logo.png" 17 | 18 | <#if settings.getCredits()?has_content> 19 | credits="${JavaConventions.escapeStringForJava(settings.getCredits())}" 20 | 21 | <#if settings.getAuthor()?has_content> 22 | authors="${JavaConventions.escapeStringForJava(settings.getAuthor())}" 23 | 24 | <#if settings.getDescription()?has_content> 25 | description="${JavaConventions.escapeStringForJava(settings.getDescription())}" 26 | 27 | <#if settings.isServerSideOnly()> 28 | displayTest="IGNORE_SERVER_VERSION" 29 | 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 | 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 | 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 | 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 | 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 type, Level world) { 41 | super(type, world); 42 | } 43 | 44 | public ${name}EntityProjectile(EntityType 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 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 type, Level world) { 43 | super(type, world); 44 | } 45 | 46 | public ${name}EntityProjectile(EntityType type, double x, double y, double z, Level world) { 47 | super(type, x, y, z, world); 48 | } 49 | 50 | public ${name}EntityProjectile(EntityType 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 | 53 | 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 | 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 | 66 | this.scaleHeight = scale; 67 | this.scaleWidth = scale; 68 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 67 | this.scaleHeight = scale; 68 | this.scaleWidth = scale; 69 | 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 | 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 | 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 | 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 | 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 | 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 | 81 | 82 | @Override 83 | public ResourceLocation getTextureLocation(${name}Item instance) { 84 | return super.getTextureLocation(instance); 85 | } 86 | 87 | 88 | } --------------------------------------------------------------------------------