├── .github
├── FUNDING.yml
└── ISSUE_TEMPLATE
│ ├── feature_request.yml
│ └── bug_report.yml
├── neoforge
├── gradle.properties
├── src
│ └── main
│ │ ├── resources
│ │ ├── icon.png
│ │ └── META-INF
│ │ │ └── neoforge.mods.toml
│ │ └── java
│ │ └── net
│ │ └── pixeldreamstudios
│ │ └── mobs_of_mythology
│ │ └── neoforge
│ │ └── MobsOfMythologyNeoForge.java
└── build.gradle
├── common
├── src
│ └── main
│ │ ├── resources
│ │ ├── data
│ │ │ ├── mobs_of_mythology
│ │ │ │ ├── weapon_attributes
│ │ │ │ │ └── spear.json
│ │ │ │ ├── tags
│ │ │ │ │ ├── worldgen
│ │ │ │ │ │ └── biome
│ │ │ │ │ │ │ ├── kobolds_spawn_in.json
│ │ │ │ │ │ │ ├── drakes_spawn_in.json
│ │ │ │ │ │ │ ├── pegasus_spawn_in.json
│ │ │ │ │ │ │ ├── chupacabras_spawn_in.json
│ │ │ │ │ │ │ └── sporelings_spawn_in.json
│ │ │ │ │ └── block
│ │ │ │ │ │ └── myth_mob_spawnable_on.json
│ │ │ │ ├── structure
│ │ │ │ │ └── automaton_structure.nbt
│ │ │ │ ├── loot_table
│ │ │ │ │ ├── entities
│ │ │ │ │ │ ├── sporeling.json
│ │ │ │ │ │ ├── kobold_warrior.json
│ │ │ │ │ │ ├── automaton.json
│ │ │ │ │ │ └── chupacabra.json
│ │ │ │ │ └── blocks
│ │ │ │ │ │ ├── bronze_block.json
│ │ │ │ │ │ └── cut_bronze_block.json
│ │ │ │ ├── neoforge
│ │ │ │ │ └── biome_modifier
│ │ │ │ │ │ ├── drakes_spawn.json
│ │ │ │ │ │ ├── pegasus_spawn.json
│ │ │ │ │ │ ├── sporelings_spawn.json
│ │ │ │ │ │ ├── chupacabras_spawn.json
│ │ │ │ │ │ └── kobolds_spawn.json
│ │ │ │ ├── recipe
│ │ │ │ │ ├── gear.json
│ │ │ │ │ ├── cooked_chupacabra_meat.json
│ │ │ │ │ ├── cut_bronze_block.json
│ │ │ │ │ ├── bronze_block.json
│ │ │ │ │ ├── cooked_chupacabra_meat_from_smoking.json
│ │ │ │ │ ├── cooked_chupacabra_meat_from_campfire_cooking.json
│ │ │ │ │ └── bronze_ingot.json
│ │ │ │ ├── worldgen
│ │ │ │ │ ├── structure_set
│ │ │ │ │ │ └── automaton_structure.json
│ │ │ │ │ ├── template_pool
│ │ │ │ │ │ └── automaton_structure.json
│ │ │ │ │ └── structure
│ │ │ │ │ │ └── automaton_structure.json
│ │ │ │ └── advancement
│ │ │ │ │ ├── mobs_of_mythology.json
│ │ │ │ │ └── tame_basilisk.json
│ │ │ ├── c
│ │ │ │ └── tags
│ │ │ │ │ ├── block
│ │ │ │ │ └── bronze_blocks.json
│ │ │ │ │ └── item
│ │ │ │ │ ├── bronze_blocks.json
│ │ │ │ │ └── bronze_ingots.json
│ │ │ └── minecraft
│ │ │ │ └── tags
│ │ │ │ ├── item
│ │ │ │ └── meat.json
│ │ │ │ └── block
│ │ │ │ ├── mineable
│ │ │ │ └── pickaxe.json
│ │ │ │ └── needs_iron_tool.json
│ │ ├── assets
│ │ │ └── mobs_of_mythology
│ │ │ │ ├── models
│ │ │ │ ├── item
│ │ │ │ │ ├── bronze_block.json
│ │ │ │ │ ├── drake_egg.json
│ │ │ │ │ ├── drake_spawn_egg.json
│ │ │ │ │ ├── kobold_spawn_egg.json
│ │ │ │ │ ├── automaton_spawn_egg.json
│ │ │ │ │ ├── basilisk_spawn_egg.json
│ │ │ │ │ ├── chupacabra_spawn_egg.json
│ │ │ │ │ ├── pegasus_spawn_egg.json
│ │ │ │ │ ├── sporeling_spawn_egg.json
│ │ │ │ │ ├── wendigo_spawn_egg.json
│ │ │ │ │ ├── bronze_block_cut.json
│ │ │ │ │ ├── cut_bronze_block.json
│ │ │ │ │ ├── kobold_warrior_spawn_egg.json
│ │ │ │ │ ├── gear.json
│ │ │ │ │ ├── basilisk_head.json
│ │ │ │ │ ├── bronze_ingot.json
│ │ │ │ │ ├── automaton_head.json
│ │ │ │ │ ├── chupacabra_meat.json
│ │ │ │ │ ├── mythical_guide_book.json
│ │ │ │ │ ├── cooked_chupacabra_meat.json
│ │ │ │ │ └── kobold_spear.json
│ │ │ │ └── block
│ │ │ │ │ ├── bronze_block.json
│ │ │ │ │ └── cut_bronze_block.json
│ │ │ │ ├── blockstates
│ │ │ │ ├── bronze_block.json
│ │ │ │ └── cut_bronze_block.json
│ │ │ │ ├── textures
│ │ │ │ ├── item
│ │ │ │ │ ├── gear.png
│ │ │ │ │ ├── basilisk_head.png
│ │ │ │ │ ├── bronze_ingot.png
│ │ │ │ │ ├── kobold_spear.png
│ │ │ │ │ ├── automaton_head.png
│ │ │ │ │ ├── chupacabra_meat.png
│ │ │ │ │ └── cooked_chupacabra_meat.png
│ │ │ │ ├── entity
│ │ │ │ │ ├── basilisk.png
│ │ │ │ │ ├── pegasus.png
│ │ │ │ │ ├── wendigo.png
│ │ │ │ │ ├── automaton.png
│ │ │ │ │ ├── chupacabra.png
│ │ │ │ │ ├── drake
│ │ │ │ │ │ ├── drake_1.png
│ │ │ │ │ │ ├── drake_2.png
│ │ │ │ │ │ ├── drake_3.png
│ │ │ │ │ │ ├── drake_4.png
│ │ │ │ │ │ ├── drake_5.png
│ │ │ │ │ │ ├── drake_6.png
│ │ │ │ │ │ ├── drake_7.png
│ │ │ │ │ │ ├── drake_1_glowmask.png
│ │ │ │ │ │ ├── drake_2_glowmask.png
│ │ │ │ │ │ ├── drake_3_glowmask.png
│ │ │ │ │ │ ├── drake_4_glowmask.png
│ │ │ │ │ │ ├── drake_5_glowmask.png
│ │ │ │ │ │ ├── drake_6_glowmask.png
│ │ │ │ │ │ └── drake_7_glowmask.png
│ │ │ │ │ ├── kobold
│ │ │ │ │ │ ├── kobold.png
│ │ │ │ │ │ ├── kobold_cloth.png
│ │ │ │ │ │ ├── kobold_glowmask.png
│ │ │ │ │ │ └── kobold_cloth_glowmask.png
│ │ │ │ │ ├── basilisk_glowmask.png
│ │ │ │ │ ├── chupacabra_glowmask.png
│ │ │ │ │ ├── sporeling
│ │ │ │ │ │ ├── sporeling_red.png
│ │ │ │ │ │ └── sporeling_brown.png
│ │ │ │ │ └── kobold_warrior
│ │ │ │ │ │ ├── kobold_warrior_1.png
│ │ │ │ │ │ ├── kobold_warrior_2.png
│ │ │ │ │ │ ├── kobold_warrior_3.png
│ │ │ │ │ │ ├── kobold_warrior_1_glowmask.png
│ │ │ │ │ │ ├── kobold_warrior_2_glowmask.png
│ │ │ │ │ │ └── kobold_warrior_3_glowmask.png
│ │ │ │ └── block
│ │ │ │ │ ├── bronze_block.png
│ │ │ │ │ ├── bronze_block_cut_side.png
│ │ │ │ │ └── bronze_block_cut_bottom_top.png
│ │ │ │ ├── sounds
│ │ │ │ └── entity
│ │ │ │ │ ├── drake
│ │ │ │ │ ├── blow.ogg
│ │ │ │ │ ├── exhale.ogg
│ │ │ │ │ ├── roar_1.ogg
│ │ │ │ │ ├── roar_2.ogg
│ │ │ │ │ ├── roar_3.ogg
│ │ │ │ │ ├── roar_big.ogg
│ │ │ │ │ ├── roar_cave.ogg
│ │ │ │ │ └── roar_small.ogg
│ │ │ │ │ └── automaton
│ │ │ │ │ └── robotic_voice.ogg
│ │ │ │ ├── sounds.json
│ │ │ │ ├── lang
│ │ │ │ ├── de_de.json
│ │ │ │ ├── uk_ua.json
│ │ │ │ ├── vi_vn.json
│ │ │ │ ├── el_gr.json
│ │ │ │ ├── ru_ru.json
│ │ │ │ ├── zh_cn.json
│ │ │ │ ├── en_us.json
│ │ │ │ └── pt_br.json
│ │ │ │ └── geo
│ │ │ │ └── entity
│ │ │ │ └── sporeling.geo.json
│ │ └── mobs_of_mythology.mixins.json
│ │ └── java
│ │ └── net
│ │ └── pixeldreamstudios
│ │ └── mobs_of_mythology
│ │ ├── entity
│ │ ├── variant
│ │ │ ├── KoboldVariant.java
│ │ │ ├── SporelingVariant.java
│ │ │ ├── DrakeVariant.java
│ │ │ └── KoboldWarriorVariant.java
│ │ ├── client
│ │ │ ├── renderer
│ │ │ │ ├── PegasusRenderer.java
│ │ │ │ ├── AutomatonRenderer.java
│ │ │ │ ├── ChupacabraRenderer.java
│ │ │ │ ├── SporelingRenderer.java
│ │ │ │ ├── DrakeRenderer.java
│ │ │ │ ├── BasiliskRenderer.java
│ │ │ │ ├── KoboldRenderer.java
│ │ │ │ └── KoboldWarriorRenderer.java
│ │ │ └── model
│ │ │ │ ├── DrakeModel.java
│ │ │ │ ├── ChupacabraModel.java
│ │ │ │ ├── SporelingModel.java
│ │ │ │ ├── PegasusModel.java
│ │ │ │ ├── BasiliskModel.java
│ │ │ │ ├── KoboldModel.java
│ │ │ │ ├── AutomatonModel.java
│ │ │ │ └── KoboldWarriorModel.java
│ │ ├── constant
│ │ │ └── DefaultMythAnimations.java
│ │ ├── mobs
│ │ │ ├── AbstractKoboldEntity.java
│ │ │ ├── KoboldWarriorEntity.java
│ │ │ ├── ChupacabraEntity.java
│ │ │ ├── PegasusEntity.java
│ │ │ └── KoboldEntity.java
│ │ ├── AbstractMythEntity.java
│ │ └── AbstractMythMonsterEntity.java
│ │ ├── registry
│ │ ├── TabRegistry.java
│ │ ├── SoundRegistry.java
│ │ ├── TagRegistry.java
│ │ ├── BlockRegistry.java
│ │ └── ItemRegistry.java
│ │ ├── MobsOfMythology.java
│ │ ├── mixin
│ │ └── CarvedPumpkinBlockMixin.java
│ │ └── MobsOfMythologyConfig.java
└── build.gradle
├── fabric
├── src
│ └── main
│ │ ├── resources
│ │ ├── icon.png
│ │ └── fabric.mod.json
│ │ └── java
│ │ └── net
│ │ └── pixeldreamstudios
│ │ └── mobs_of_mythology
│ │ └── fabric
│ │ ├── client
│ │ └── MobsOfMythologyFabricClient.java
│ │ └── MobsOfMythologyFabric.java
└── build.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── README.md
├── changelog.md
├── settings.gradle
├── .gitignore
├── gradle.properties
├── LICENSE
└── gradlew.bat
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | ko_fi: pixeldreamstudios
2 |
--------------------------------------------------------------------------------
/neoforge/gradle.properties:
--------------------------------------------------------------------------------
1 | loom.platform=neoforge
2 |
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/weapon_attributes/spear.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "bettercombat:spear"
3 | }
--------------------------------------------------------------------------------
/fabric/src/main/resources/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/fabric/src/main/resources/icon.png
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/bronze_block.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "mobs_of_mythology:block/bronze_block"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/drake_egg.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "mobs_of_mythology:geo/block/drake_egg"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/drake_spawn_egg.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "minecraft:item/template_spawn_egg"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/kobold_spawn_egg.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "minecraft:item/template_spawn_egg"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/tags/worldgen/biome/kobolds_spawn_in.json:
--------------------------------------------------------------------------------
1 | {
2 | "values": [
3 | "#c:is_wet"
4 | ]
5 | }
--------------------------------------------------------------------------------
/neoforge/src/main/resources/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/neoforge/src/main/resources/icon.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/automaton_spawn_egg.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "minecraft:item/template_spawn_egg"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/basilisk_spawn_egg.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "minecraft:item/template_spawn_egg"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/chupacabra_spawn_egg.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "minecraft:item/template_spawn_egg"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/pegasus_spawn_egg.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "minecraft:item/template_spawn_egg"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/sporeling_spawn_egg.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "minecraft:item/template_spawn_egg"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/wendigo_spawn_egg.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "minecraft:item/template_spawn_egg"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/tags/worldgen/biome/drakes_spawn_in.json:
--------------------------------------------------------------------------------
1 | {
2 | "values": [
3 | "#c:is_badlands"
4 | ]
5 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/tags/worldgen/biome/pegasus_spawn_in.json:
--------------------------------------------------------------------------------
1 | {
2 | "values": [
3 | "#c:is_mountain"
4 | ]
5 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/bronze_block_cut.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "mobs_of_mythology:block/bronze_block_cut"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/cut_bronze_block.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "mobs_of_mythology:block/cut_bronze_block"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/kobold_warrior_spawn_egg.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "minecraft:item/template_spawn_egg"
3 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/tags/worldgen/biome/chupacabras_spawn_in.json:
--------------------------------------------------------------------------------
1 | {
2 | "values": [
3 | "#c:is_temperate"
4 | ]
5 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/tags/worldgen/biome/sporelings_spawn_in.json:
--------------------------------------------------------------------------------
1 | {
2 | "values": [
3 | "#c:is_mushroom"
4 | ]
5 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
--------------------------------------------------------------------------------
/common/src/main/resources/data/c/tags/block/bronze_blocks.json:
--------------------------------------------------------------------------------
1 | {
2 | "replace": false,
3 | "values": [
4 | "mobs_of_mythology:bronze_block"
5 | ]
6 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/c/tags/item/bronze_blocks.json:
--------------------------------------------------------------------------------
1 | {
2 | "replace": false,
3 | "values": [
4 | "mobs_of_mythology:bronze_block"
5 | ]
6 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/c/tags/item/bronze_ingots.json:
--------------------------------------------------------------------------------
1 | {
2 | "replace": false,
3 | "values": [
4 | "mobs_of_mythology:bronze_ingot"
5 | ]
6 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/gear.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/generated",
3 | "textures": {
4 | "layer0": "mobs_of_mythology:item/gear"
5 | }
6 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/blockstates/bronze_block.json:
--------------------------------------------------------------------------------
1 | {
2 | "variants": {
3 | "": {
4 | "model": "mobs_of_mythology:block/bronze_block"
5 | }
6 | }
7 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/block/bronze_block.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "block/cube_all",
3 | "textures": {
4 | "all": "mobs_of_mythology:block/bronze_block"
5 | }
6 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/basilisk_head.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/generated",
3 | "textures": {
4 | "layer0": "mobs_of_mythology:item/basilisk_head"
5 | }
6 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/bronze_ingot.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/generated",
3 | "textures": {
4 | "layer0": "mobs_of_mythology:item/bronze_ingot"
5 | }
6 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/automaton_head.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/generated",
3 | "textures": {
4 | "layer0": "mobs_of_mythology:item/automaton_head"
5 | }
6 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/chupacabra_meat.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/generated",
3 | "textures": {
4 | "layer0": "mobs_of_mythology:item/chupacabra_meat"
5 | }
6 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/minecraft/tags/item/meat.json:
--------------------------------------------------------------------------------
1 | {
2 | "replace": false,
3 | "values": [
4 | "mobs_of_mythology:chupacabra_meat",
5 | "mobs_of_mythology:cooked_chupacabra_meat"
6 | ]
7 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/item/gear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/item/gear.png
--------------------------------------------------------------------------------
/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json:
--------------------------------------------------------------------------------
1 | {
2 | "replace": false,
3 | "values": [
4 | "mobs_of_mythology:bronze_block",
5 | "mobs_of_mythology:cut_bronze_block"
6 | ]
7 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/minecraft/tags/block/needs_iron_tool.json:
--------------------------------------------------------------------------------
1 | {
2 | "replace": false,
3 | "values": [
4 | "mobs_of_mythology:bronze_block",
5 | "mobs_of_mythology:cut_bronze_block"
6 | ]
7 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/mythical_guide_book.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/generated",
3 | "textures": {
4 | "layer0": "mobs_of_mythology:item/mythical_guide_book"
5 | }
6 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/cooked_chupacabra_meat.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "item/generated",
3 | "textures": {
4 | "layer0": "mobs_of_mythology:item/cooked_chupacabra_meat"
5 | }
6 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/blow.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/blow.ogg
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/basilisk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/basilisk.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/pegasus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/pegasus.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/wendigo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/wendigo.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/exhale.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/exhale.ogg
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/roar_1.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/roar_1.ogg
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/roar_2.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/roar_2.ogg
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/roar_3.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/roar_3.ogg
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/block/bronze_block.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/block/bronze_block.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/automaton.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/automaton.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/chupacabra.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/chupacabra.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/item/basilisk_head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/item/basilisk_head.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/item/bronze_ingot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/item/bronze_ingot.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/item/kobold_spear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/item/kobold_spear.png
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/structure/automaton_structure.nbt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/data/mobs_of_mythology/structure/automaton_structure.nbt
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/roar_big.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/roar_big.ogg
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/roar_cave.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/roar_cave.ogg
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_1.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_2.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_3.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_4.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_5.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_6.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_7.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold/kobold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold/kobold.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/item/automaton_head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/item/automaton_head.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/item/chupacabra_meat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/item/chupacabra_meat.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/roar_small.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/drake/roar_small.ogg
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/basilisk_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/basilisk_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/automaton/robotic_voice.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/sounds/entity/automaton/robotic_voice.ogg
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/block/bronze_block_cut_side.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/block/bronze_block_cut_side.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/chupacabra_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/chupacabra_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold/kobold_cloth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold/kobold_cloth.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/item/cooked_chupacabra_meat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/item/cooked_chupacabra_meat.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_1_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_1_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_2_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_2_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_3_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_3_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_4_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_4_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_5_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_5_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_6_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_6_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_7_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/drake/drake_7_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold/kobold_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold/kobold_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/sporeling/sporeling_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/sporeling/sporeling_red.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/block/bronze_block_cut_bottom_top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/block/bronze_block_cut_bottom_top.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/sporeling/sporeling_brown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/sporeling/sporeling_brown.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold/kobold_cloth_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold/kobold_cloth_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold_warrior/kobold_warrior_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold_warrior/kobold_warrior_1.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold_warrior/kobold_warrior_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold_warrior/kobold_warrior_2.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold_warrior/kobold_warrior_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold_warrior/kobold_warrior_3.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/block/cut_bronze_block.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "block/cube_column",
3 | "textures": {
4 | "end": "mobs_of_mythology:block/bronze_block_cut_bottom_top",
5 | "side": "mobs_of_mythology:block/bronze_block_cut_side"
6 | }
7 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold_warrior/kobold_warrior_1_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold_warrior/kobold_warrior_1_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold_warrior/kobold_warrior_2_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold_warrior/kobold_warrior_2_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold_warrior/kobold_warrior_3_glowmask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thrasos-dev/mobs-of-mythology-mod/HEAD/common/src/main/resources/assets/mobs_of_mythology/textures/entity/kobold_warrior/kobold_warrior_3_glowmask.png
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/tags/block/myth_mob_spawnable_on.json:
--------------------------------------------------------------------------------
1 | {
2 | "values": [
3 | "#minecraft:animals_spawnable_on",
4 | "#minecraft:badlands_terracotta",
5 | "minecraft:sand",
6 | "minecraft:red_sand",
7 | "minecraft:coarse_dirt"
8 | ]
9 | }
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/loot_table/entities/sporeling.json:
--------------------------------------------------------------------------------
1 | {
2 | "pools": [
3 | {
4 | "rolls": 1,
5 | "entries": [
6 | {
7 | "type": "minecraft:item",
8 | "name": "minecraft:mushroom_stew"
9 | }
10 | ]
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/changelog.md:
--------------------------------------------------------------------------------
1 | # Mobs of Mythology
2 |
3 | ## [2.2.2] - 09/04/2025
4 |
5 | - add Chinese (Simplified) translation (thanks to @pyreymo)
6 | - update Portuguese (Brazilian) translation (thanks to @Xlr11)
7 |
8 | [](https://bisecthosting.com/PixelDream)
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/neoforge/biome_modifier/drakes_spawn.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "neoforge:add_spawns",
3 | "biomes": "#mobs_of_mythology:drakes_spawn_in",
4 | "spawners": [
5 | {
6 | "type": "mobs_of_mythology:drake",
7 | "weight": 10,
8 | "minCount": 1,
9 | "maxCount": 3
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/neoforge/biome_modifier/pegasus_spawn.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "neoforge:add_spawns",
3 | "biomes": "#mobs_of_mythology:pegasus_spawn_in",
4 | "spawners": [
5 | {
6 | "type": "mobs_of_mythology:pegasus",
7 | "weight": 10,
8 | "minCount": 1,
9 | "maxCount": 2
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/recipe/gear.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:crafting_shaped",
3 | "key": {
4 | "#": {
5 | "tag": "c:bronze_ingots"
6 | }
7 | },
8 | "pattern": [
9 | " # ",
10 | "# #",
11 | " # "
12 | ],
13 | "result": {
14 | "count": 1,
15 | "id": "mobs_of_mythology:gear"
16 | }
17 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/neoforge/biome_modifier/sporelings_spawn.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "neoforge:add_spawns",
3 | "biomes": "#mobs_of_mythology:sporelings_spawn_in",
4 | "spawners": [
5 | {
6 | "type": "mobs_of_mythology:sporeling",
7 | "weight": 10,
8 | "minCount": 1,
9 | "maxCount": 3
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/neoforge/biome_modifier/chupacabras_spawn.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "neoforge:add_spawns",
3 | "biomes": "#mobs_of_mythology:chupacabras_spawn_in",
4 | "spawners": [
5 | {
6 | "type": "mobs_of_mythology:chupacabra",
7 | "weight": 10,
8 | "minCount": 1,
9 | "maxCount": 3
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/recipe/cooked_chupacabra_meat.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:smelting",
3 | "category": "food",
4 | "cookingtime": 200,
5 | "experience": 0.35,
6 | "ingredient": {
7 | "item": "mobs_of_mythology:chupacabra_meat"
8 | },
9 | "result": {
10 | "id": "mobs_of_mythology:cooked_chupacabra_meat"
11 | }
12 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/recipe/cut_bronze_block.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:crafting_shaped",
3 | "key": {
4 | "#": {
5 | "tag": "c:bronze_blocks"
6 | }
7 | },
8 | "pattern": [
9 | "##",
10 | "##"
11 | ],
12 | "result": {
13 | "count": 4,
14 | "id": "mobs_of_mythology:cut_bronze_block"
15 | }
16 | }
--------------------------------------------------------------------------------
/common/src/main/resources/mobs_of_mythology.mixins.json:
--------------------------------------------------------------------------------
1 | {
2 | "required": true,
3 | "package": "net.pixeldreamstudios.mobs_of_mythology.mixin",
4 | "compatibilityLevel": "JAVA_21",
5 | "minVersion": "0.8",
6 | "client": [
7 | ],
8 | "mixins": [
9 | "CarvedPumpkinBlockMixin"
10 | ],
11 | "injectors": {
12 | "defaultRequire": 1
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/recipe/bronze_block.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:crafting_shaped",
3 | "key": {
4 | "#": {
5 | "tag": "c:bronze_ingots"
6 | }
7 | },
8 | "pattern": [
9 | "###",
10 | "###",
11 | "###"
12 | ],
13 | "result": {
14 | "count": 1,
15 | "id": "mobs_of_mythology:bronze_block"
16 | }
17 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/recipe/cooked_chupacabra_meat_from_smoking.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:smoking",
3 | "category": "food",
4 | "cookingtime": 100,
5 | "experience": 0.35,
6 | "ingredient": {
7 | "item": "mobs_of_mythology:chupacabra_meat"
8 | },
9 | "result": {
10 | "id": "mobs_of_mythology:cooked_chupacabra_meat"
11 | }
12 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/recipe/cooked_chupacabra_meat_from_campfire_cooking.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:campfire_cooking",
3 | "category": "food",
4 | "cookingtime": 600,
5 | "experience": 0.35,
6 | "ingredient": {
7 | "item": "mobs_of_mythology:chupacabra_meat"
8 | },
9 | "result": {
10 | "id": "mobs_of_mythology:cooked_chupacabra_meat"
11 | }
12 | }
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | maven { url "https://maven.fabricmc.net/" }
4 | maven { url "https://maven.architectury.dev/" }
5 | maven { url "https://files.minecraftforge.net/maven/" }
6 | gradlePluginPortal()
7 | }
8 | }
9 |
10 | rootProject.name = 'Mobs of Mythology'
11 |
12 | include 'common'
13 | include 'fabric'
14 | include 'neoforge'
15 |
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/worldgen/structure_set/automaton_structure.json:
--------------------------------------------------------------------------------
1 | {
2 | "structures": [
3 | {
4 | "structure": "mobs_of_mythology:automaton_structure",
5 | "weight": 1
6 | }
7 | ],
8 | "placement": {
9 | "type": "minecraft:random_spread",
10 | "spacing": 50,
11 | "separation": 20,
12 | "frequency": 0.1,
13 | "salt": 1646207470
14 | }
15 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .env
2 |
3 | # gradle
4 |
5 | .gradle/
6 | build/
7 | out/
8 | classes/
9 |
10 | # eclipse
11 |
12 | *.launch
13 |
14 | # idea
15 |
16 | .idea/
17 | *.iml
18 | *.ipr
19 | *.iws
20 |
21 | # vscode
22 |
23 | .settings/
24 | .vscode/
25 | bin/
26 | .classpath
27 | .project
28 |
29 | # macos
30 |
31 | *.DS_Store
32 |
33 | # fabric
34 |
35 | run/
36 |
37 | # java
38 |
39 | hs_err_*.log
40 | replay_*.log
41 | *.hprof
42 | *.jfr
43 |
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/blockstates/cut_bronze_block.json:
--------------------------------------------------------------------------------
1 | {
2 | "variants": {
3 | "axis=x": {
4 | "model": "mobs_of_mythology:block/cut_bronze_block",
5 | "x": 90,
6 | "y": 90
7 | },
8 | "axis=y": {
9 | "model": "mobs_of_mythology:block/cut_bronze_block"
10 | },
11 | "axis=z": {
12 | "model": "mobs_of_mythology:block/cut_bronze_block",
13 | "x": 90
14 | }
15 | }
16 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/worldgen/template_pool/automaton_structure.json:
--------------------------------------------------------------------------------
1 | {
2 | "fallback": "minecraft:empty",
3 | "elements": [
4 | {
5 | "weight": 1,
6 | "element": {
7 | "element_type": "minecraft:legacy_single_pool_element",
8 | "location": "mobs_of_mythology:automaton_structure",
9 | "projection": "rigid",
10 | "processors": "minecraft:empty"
11 | }
12 | }
13 | ]
14 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/worldgen/structure/automaton_structure.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:jigsaw",
3 | "biomes": "#c:is_mountain",
4 | "step": "surface_structures",
5 | "spawn_overrides": {},
6 | "start_pool": "mobs_of_mythology:automaton_structure",
7 | "size": 7,
8 | "start_height": {
9 | "absolute": 1
10 | },
11 | "project_start_to_heightmap": "WORLD_SURFACE_WG",
12 | "max_distance_from_center": 80,
13 | "use_expansion_hack": false
14 | }
--------------------------------------------------------------------------------
/fabric/src/main/java/net/pixeldreamstudios/mobs_of_mythology/fabric/client/MobsOfMythologyFabricClient.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.fabric.client;
2 |
3 | import net.fabricmc.api.ClientModInitializer;
4 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
5 |
6 | public final class MobsOfMythologyFabricClient implements ClientModInitializer {
7 | @Override
8 | public void onInitializeClient() {
9 | MobsOfMythology.initClient();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/neoforge/biome_modifier/kobolds_spawn.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "neoforge:add_spawns",
3 | "biomes": "#mobs_of_mythology:kobolds_spawn_in",
4 | "spawners": [
5 | {
6 | "type": "mobs_of_mythology:kobold_warrior",
7 | "weight": 10,
8 | "minCount": 1,
9 | "maxCount": 4
10 | },
11 | {
12 | "type": "mobs_of_mythology:kobold",
13 | "weight": 10,
14 | "minCount": 1,
15 | "maxCount": 3
16 | }
17 | ]
18 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/loot_table/blocks/bronze_block.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:block",
3 | "pools": [
4 | {
5 | "bonus_rolls": 0.0,
6 | "conditions": [
7 | {
8 | "condition": "minecraft:survives_explosion"
9 | }
10 | ],
11 | "entries": [
12 | {
13 | "type": "minecraft:item",
14 | "name": "mobs_of_mythology:bronze_block"
15 | }
16 | ],
17 | "rolls": 1.0
18 | }
19 | ],
20 | "random_sequence": "mobs_of_mythology:blocks/bronze_block"
21 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/loot_table/blocks/cut_bronze_block.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:block",
3 | "pools": [
4 | {
5 | "bonus_rolls": 0.0,
6 | "conditions": [
7 | {
8 | "condition": "minecraft:survives_explosion"
9 | }
10 | ],
11 | "entries": [
12 | {
13 | "type": "minecraft:item",
14 | "name": "mobs_of_mythology:cut_bronze_block"
15 | }
16 | ],
17 | "rolls": 1.0
18 | }
19 | ],
20 | "random_sequence": "mobs_of_mythology:blocks/cut_bronze_block"
21 | }
--------------------------------------------------------------------------------
/neoforge/src/main/java/net/pixeldreamstudios/mobs_of_mythology/neoforge/MobsOfMythologyNeoForge.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.neoforge;
2 |
3 | import dev.architectury.utils.EnvExecutor;
4 | import net.neoforged.api.distmarker.Dist;
5 | import net.neoforged.fml.common.Mod;
6 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
7 |
8 | @Mod(MobsOfMythology.MOD_ID)
9 | public final class MobsOfMythologyNeoForge {
10 | public MobsOfMythologyNeoForge() {
11 | MobsOfMythology.init();
12 | EnvExecutor.runInEnv(Dist.CLIENT, () -> MobsOfMythology::initClient);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/advancement/mobs_of_mythology.json:
--------------------------------------------------------------------------------
1 | {
2 | "display": {
3 | "icon": {
4 | "id": "mobs_of_mythology:automaton_head"
5 | },
6 | "title": {
7 | "translate": "advancements.mobs_of_mythology.title"
8 | },
9 | "description": {
10 | "translate": "advancements.mobs_of_mythology.description"
11 | },
12 | "frame": "task",
13 | "show_toast": true,
14 | "announce_to_chat": true,
15 | "background": "mobs_of_mythology:textures/block/bronze_block_cut_side.png"
16 | },
17 | "criteria": {
18 | "requirement": {
19 | "trigger": "minecraft:tick"
20 | }
21 | }
22 | }
--------------------------------------------------------------------------------
/fabric/src/main/java/net/pixeldreamstudios/mobs_of_mythology/fabric/MobsOfMythologyFabric.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.fabric;
2 |
3 | import net.fabricmc.api.ModInitializer;
4 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
5 |
6 | public final class MobsOfMythologyFabric implements ModInitializer {
7 | @Override
8 | public void onInitialize() {
9 | // This code runs as soon as Minecraft is in a mod-load-ready state.
10 | // However, some things (like resources) may still be uninitialized.
11 | // Proceed with mild caution.
12 |
13 | // Run our common setup.
14 | MobsOfMythology.init();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/advancement/tame_basilisk.json:
--------------------------------------------------------------------------------
1 | {
2 | "parent": "mobs_of_mythology:mobs_of_mythology",
3 | "criteria": {
4 | "tamed_animal": {
5 | "trigger": "minecraft:tame_animal"
6 | }
7 | },
8 | "display": {
9 | "description": {
10 | "translate": "advancements.mobs_of_mythology.tame_basilisk.description"
11 | },
12 | "icon": {
13 | "count": 1,
14 | "id": "mobs_of_mythology:basilisk_head"
15 | },
16 | "title": {
17 | "translate": "advancements.mobs_of_mythology.tame_basilisk.title"
18 | }
19 | },
20 | "requirements": [
21 | [
22 | "tamed_animal"
23 | ]
24 | ],
25 | "sends_telemetry_event": true
26 | }
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/recipe/bronze_ingot.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:crafting_shapeless",
3 | "ingredients": [
4 | {
5 | "item": "minecraft:copper_ingot"
6 | },
7 | {
8 | "item": "minecraft:copper_ingot"
9 | },
10 | {
11 | "item": "minecraft:copper_ingot"
12 | },
13 | {
14 | "item": "minecraft:copper_ingot"
15 | },
16 | {
17 | "item": "minecraft:iron_ingot"
18 | },
19 | {
20 | "item": "minecraft:iron_ingot"
21 | },
22 | {
23 | "item": "minecraft:iron_ingot"
24 | },
25 | {
26 | "item": "minecraft:iron_ingot"
27 | }
28 | ],
29 | "result": {
30 | "count": 1,
31 | "id": "mobs_of_mythology:bronze_ingot"
32 | }
33 | }
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/variant/KoboldVariant.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.variant;
2 |
3 | import java.util.Arrays;
4 | import java.util.Comparator;
5 |
6 | public enum KoboldVariant {
7 | KOBOLD(0),
8 | KOBOLD_CLOTHED(1);
9 |
10 | private static final KoboldVariant[] BY_ID =
11 | Arrays.stream(values())
12 | .sorted(Comparator.comparingInt(KoboldVariant::getId))
13 | .toArray(KoboldVariant[]::new);
14 | private final int id;
15 |
16 | KoboldVariant(int id) {
17 | this.id = id;
18 | }
19 |
20 | public static KoboldVariant byId(int id) {
21 | return BY_ID[id % BY_ID.length];
22 | }
23 |
24 | public int getId() {
25 | return this.id;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/variant/SporelingVariant.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.variant;
2 |
3 | import java.util.Arrays;
4 | import java.util.Comparator;
5 |
6 | public enum SporelingVariant {
7 | RED(0),
8 |
9 | BROWN(1);
10 |
11 | private static final SporelingVariant[] BY_ID =
12 | Arrays.stream(values())
13 | .sorted(Comparator.comparingInt(SporelingVariant::getId))
14 | .toArray(SporelingVariant[]::new);
15 | private final int id;
16 |
17 | SporelingVariant(int id) {
18 | this.id = id;
19 | }
20 |
21 | public static SporelingVariant byId(int id) {
22 | return BY_ID[id % BY_ID.length];
23 | }
24 |
25 | public int getId() {
26 | return this.id;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/common/build.gradle:
--------------------------------------------------------------------------------
1 | architectury {
2 | common rootProject.enabled_platforms.split(',')
3 | }
4 |
5 | dependencies {
6 | // We depend on Fabric Loader here to use the Fabric @Environment annotations,
7 | // which get remapped to the correct annotations on each platform.
8 | // Do NOT use other classes from Fabric Loader.
9 | modImplementation "net.fabricmc:fabric-loader:${fabric_loader_version}"
10 |
11 | // Architectury API. This is optional, and you can comment it out if you don't need it.
12 | modImplementation "dev.architectury:architectury:${architectury_api_version}"
13 |
14 | modImplementation "mod.azure.azurelib:azurelib-common-${minecraft_version}:${azurelib_version}"
15 | modImplementation "net.tslat.smartbrainlib:SmartBrainLib-common-${minecraft_version}:${sbl_version}"
16 | }
17 |
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/sounds.json:
--------------------------------------------------------------------------------
1 | {
2 | "drake_roar": {
3 | "subtitle": "sound.mobs_of_mythology.drake_roar",
4 | "sounds": [
5 | "mobs_of_mythology:entity/drake/roar_1",
6 | "mobs_of_mythology:entity/drake/roar_2",
7 | "mobs_of_mythology:entity/drake/roar_3",
8 | "mobs_of_mythology:entity/drake/roar_small",
9 | "mobs_of_mythology:entity/drake/roar_cave",
10 | "mobs_of_mythology:entity/drake/exhale"
11 | ]
12 | },
13 | "drake_death": {
14 | "subtitle": "sound.mobs_of_mythology.drake_death",
15 | "sounds": [
16 | "mobs_of_mythology:entity/drake/roar_big"
17 | ]
18 | },
19 | "robotic_voice": {
20 | "subtitle": "sound.mobs_of_mythology.robotic_voice",
21 | "sounds": [
22 | "mobs_of_mythology:entity/automaton/robotic_voice"
23 | ]
24 | }
25 | }
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/variant/DrakeVariant.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.variant;
2 |
3 | import java.util.Arrays;
4 | import java.util.Comparator;
5 |
6 | public enum DrakeVariant {
7 | DRAKE_1(0),
8 | DRAKE_2(1),
9 | DRAKE_3(2),
10 | DRAKE_4(3),
11 | DRAKE_5(4),
12 | DRAKE_6(5),
13 | DRAKE_7(6);
14 |
15 | private static final DrakeVariant[] BY_ID =
16 | Arrays.stream(values())
17 | .sorted(Comparator.comparingInt(DrakeVariant::getId))
18 | .toArray(DrakeVariant[]::new);
19 | private final int id;
20 |
21 | DrakeVariant(int id) {
22 | this.id = id;
23 | }
24 |
25 | public static DrakeVariant byId(int id) {
26 | return BY_ID[id % BY_ID.length];
27 | }
28 |
29 | public int getId() {
30 | return this.id;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/variant/KoboldWarriorVariant.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.variant;
2 |
3 | import java.util.Arrays;
4 | import java.util.Comparator;
5 |
6 | public enum KoboldWarriorVariant {
7 | KOBOLD_WARRIOR_1(0),
8 | KOBOLD_WARRIOR_2(1),
9 | KOBOLD_WARRIOR_3(2);
10 |
11 | private static final KoboldWarriorVariant[] BY_ID =
12 | Arrays.stream(values())
13 | .sorted(Comparator.comparingInt(KoboldWarriorVariant::getId))
14 | .toArray(KoboldWarriorVariant[]::new);
15 | private final int id;
16 |
17 | KoboldWarriorVariant(int id) {
18 | this.id = id;
19 | }
20 |
21 | public static KoboldWarriorVariant byId(int id) {
22 | return BY_ID[id % BY_ID.length];
23 | }
24 |
25 | public int getId() {
26 | return this.id;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
1 | name: "Feature request"
2 | description: "Suggest a new feature or improvement."
3 | labels: ["enhancement"]
4 | body:
5 | - type: textarea
6 | attributes:
7 | label: "Describe your suggestion"
8 | description: "Provide a clear and concise description of your suggestion, along with the reasons for it."
9 | validations:
10 | required: true
11 | - type: textarea
12 | attributes:
13 | label: "Benefits of the feature"
14 | description: "Explain how this feature will benefit users and improve the mod."
15 | validations:
16 | required: true
17 | - type: textarea
18 | attributes:
19 | label: "Additional context"
20 | description: "Add any other context or screenshots about the feature request (if applicable)."
21 | validations:
22 | required: false
23 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Done to increase the memory available to Gradle.
2 | org.gradle.jvmargs=-Xmx2G
3 | org.gradle.parallel=true
4 | # Mod properties
5 | mod_version=2.2.2
6 | maven_group=net.pixeldreamstudios.mobs_of_mythology
7 | archives_name=mobs_of_mythology
8 | enabled_platforms=fabric,neoforge
9 | # Minecraft properties
10 | minecraft_version=1.21.1
11 | # Dependencies
12 | # https://modrinth.com/mod/architectury-api/versions?l=fabric&l=neoforge&g=1.21.1
13 | architectury_api_version=13.0.8
14 | # https://fabricmc.net/develop/
15 | fabric_loader_version=0.16.13
16 | fabric_api_version=0.115.4+1.21.1
17 | # https://projects.neoforged.net/neoforged/neoforge
18 | neoforge_version=21.1.145
19 | # Libraries
20 | # https://modrinth.com/mod/azurelib/versions?l=neoforge&l=fabric&g=1.21.1
21 | azurelib_version=2.3.28
22 | # https://modrinth.com/mod/smartbrainlib/versions?l=neoforge&l=fabric&g=1.21.1
23 | sbl_version=1.16.7
24 | # https://modrinth.com/mod/modmenu/versions?l=fabric&g=1.21.1
25 | modmenu_version=11.0.3
26 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/renderer/PegasusRenderer.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer;
2 |
3 | import mod.azure.azurelib.common.api.client.renderer.GeoEntityRenderer;
4 | import net.minecraft.client.renderer.entity.EntityRendererProvider;
5 | import net.minecraft.resources.ResourceLocation;
6 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
7 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.model.PegasusModel;
8 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.PegasusEntity;
9 |
10 | public class PegasusRenderer extends GeoEntityRenderer {
11 | public PegasusRenderer(EntityRendererProvider.Context ctx) {
12 | super(ctx, new PegasusModel());
13 | this.shadowRadius = 0.75f;
14 | }
15 |
16 | @Override
17 | public ResourceLocation getTextureLocation(PegasusEntity animatable) {
18 | return ResourceLocation.fromNamespaceAndPath(
19 | MobsOfMythology.MOD_ID, "textures/entity/pegasus.png");
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/renderer/AutomatonRenderer.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer;
2 |
3 | import mod.azure.azurelib.common.api.client.renderer.GeoEntityRenderer;
4 | import net.minecraft.client.renderer.entity.EntityRendererProvider;
5 | import net.minecraft.resources.ResourceLocation;
6 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
7 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.model.AutomatonModel;
8 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.AutomatonEntity;
9 |
10 | public class AutomatonRenderer extends GeoEntityRenderer {
11 | public AutomatonRenderer(EntityRendererProvider.Context ctx) {
12 | super(ctx, new AutomatonModel());
13 | this.shadowRadius = 0.85f;
14 | }
15 |
16 | @Override
17 | public ResourceLocation getTextureLocation(AutomatonEntity animatable) {
18 | return ResourceLocation.fromNamespaceAndPath(
19 | MobsOfMythology.MOD_ID, "textures/entity/automaton.png");
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/loot_table/entities/kobold_warrior.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:entity",
3 | "random_sequence": "mobs_of_mythology:entities/kobold_warrior",
4 | "pools": [
5 | {
6 | "rolls": 1.0,
7 | "entries": [
8 | {
9 | "name": "mobs_of_mythology:kobold_spear",
10 | "type": "minecraft:item",
11 | "conditions": [
12 | {
13 | "condition": "random_chance",
14 | "chance": 0.2
15 | }
16 | ]
17 | }
18 | ]
19 | },
20 | {
21 | "rolls": 1.0,
22 | "entries": [
23 | {
24 | "name": "minecraft:emerald",
25 | "type": "minecraft:item",
26 | "functions": [
27 | {
28 | "function": "minecraft:set_count",
29 | "count": {
30 | "max": 5.0,
31 | "min": 3.0
32 | }
33 | }
34 | ],
35 | "conditions": [
36 | {
37 | "condition": "random_chance",
38 | "chance": 0.3
39 | }
40 | ]
41 | }
42 | ]
43 | }
44 | ]
45 | }
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/model/DrakeModel.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.model;
2 |
3 | import mod.azure.azurelib.common.api.client.model.GeoModel;
4 | import net.minecraft.resources.ResourceLocation;
5 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
6 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer.DrakeRenderer;
7 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.DrakeEntity;
8 |
9 | public class DrakeModel extends GeoModel {
10 |
11 | @Override
12 | public ResourceLocation getModelResource(DrakeEntity object) {
13 | return ResourceLocation.fromNamespaceAndPath(
14 | MobsOfMythology.MOD_ID, "geo/entity/drake.geo.json");
15 | }
16 |
17 | @Override
18 | public ResourceLocation getTextureResource(DrakeEntity object) {
19 | return DrakeRenderer.LOCATION_BY_VARIANT.get(object.getVariant());
20 | }
21 |
22 | @Override
23 | public ResourceLocation getAnimationResource(DrakeEntity animatable) {
24 | return ResourceLocation.fromNamespaceAndPath(
25 | MobsOfMythology.MOD_ID, "animations/entity/drake.animation.json");
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/model/ChupacabraModel.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.model;
2 |
3 | import mod.azure.azurelib.common.api.client.model.GeoModel;
4 | import net.minecraft.resources.ResourceLocation;
5 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
6 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.ChupacabraEntity;
7 |
8 | public class ChupacabraModel extends GeoModel {
9 |
10 | @Override
11 | public ResourceLocation getModelResource(ChupacabraEntity object) {
12 | return ResourceLocation.fromNamespaceAndPath(
13 | MobsOfMythology.MOD_ID, "geo/entity/chupacabra.geo.json");
14 | }
15 |
16 | @Override
17 | public ResourceLocation getTextureResource(ChupacabraEntity object) {
18 | return ResourceLocation.fromNamespaceAndPath(
19 | MobsOfMythology.MOD_ID, "textures/entity/chupacabra.png");
20 | }
21 |
22 | @Override
23 | public ResourceLocation getAnimationResource(ChupacabraEntity animatable) {
24 | return ResourceLocation.fromNamespaceAndPath(
25 | MobsOfMythology.MOD_ID, "animations/entity/chupacabra.animation.json");
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/renderer/ChupacabraRenderer.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer;
2 |
3 | import mod.azure.azurelib.common.api.client.renderer.GeoEntityRenderer;
4 | import mod.azure.azurelib.common.api.client.renderer.layer.AutoGlowingGeoLayer;
5 | import net.minecraft.client.renderer.entity.EntityRendererProvider;
6 | import net.minecraft.resources.ResourceLocation;
7 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
8 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.model.ChupacabraModel;
9 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.ChupacabraEntity;
10 |
11 | public class ChupacabraRenderer extends GeoEntityRenderer {
12 | public ChupacabraRenderer(EntityRendererProvider.Context ctx) {
13 | super(ctx, new ChupacabraModel());
14 | this.shadowRadius = 0.65f;
15 | addRenderLayer(new AutoGlowingGeoLayer<>(this));
16 | }
17 |
18 | @Override
19 | public ResourceLocation getTextureLocation(ChupacabraEntity animatable) {
20 | return ResourceLocation.fromNamespaceAndPath(
21 | MobsOfMythology.MOD_ID, "textures/entity/chupacabra.png");
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/model/SporelingModel.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.model;
2 |
3 | import mod.azure.azurelib.common.api.client.model.GeoModel;
4 | import net.minecraft.resources.ResourceLocation;
5 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
6 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer.SporelingRenderer;
7 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.SporelingEntity;
8 |
9 | public class SporelingModel extends GeoModel {
10 |
11 | @Override
12 | public ResourceLocation getModelResource(SporelingEntity object) {
13 | return ResourceLocation.fromNamespaceAndPath(
14 | MobsOfMythology.MOD_ID, "geo/entity/sporeling.geo.json");
15 | }
16 |
17 | @Override
18 | public ResourceLocation getTextureResource(SporelingEntity object) {
19 | return SporelingRenderer.LOCATION_BY_VARIANT.get(object.getVariant());
20 | }
21 |
22 | @Override
23 | public ResourceLocation getAnimationResource(SporelingEntity animatable) {
24 | return ResourceLocation.fromNamespaceAndPath(
25 | MobsOfMythology.MOD_ID, "animations/entity/sporeling.animation.json");
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/registry/TabRegistry.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.registry;
2 |
3 | import dev.architectury.registry.CreativeTabRegistry;
4 | import dev.architectury.registry.registries.DeferredRegister;
5 | import dev.architectury.registry.registries.RegistrySupplier;
6 | import net.minecraft.core.registries.Registries;
7 | import net.minecraft.network.chat.Component;
8 | import net.minecraft.world.item.CreativeModeTab;
9 | import net.minecraft.world.item.ItemStack;
10 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
11 |
12 | public class TabRegistry {
13 | public static final DeferredRegister TABS =
14 | DeferredRegister.create(MobsOfMythology.MOD_ID, Registries.CREATIVE_MODE_TAB);
15 | public static final RegistrySupplier MOBS_OF_MYTHOLOGY_TAB =
16 | TABS.register(
17 | "mobs_of_mythology_tab", // Tab ID
18 | () ->
19 | CreativeTabRegistry.create(
20 | Component.translatable("category.mobs_of_mythology"), // Tab Name
21 | () -> new ItemStack(ItemRegistry.AUTOMATON_HEAD.get()) // Icon
22 | ));
23 |
24 | public static void init() {
25 | TABS.register();
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/loot_table/entities/automaton.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:entity",
3 | "pools": [
4 | {
5 | "bonus_rolls": 0.0,
6 | "entries": [
7 | {
8 | "type": "minecraft:item",
9 | "functions": [
10 | {
11 | "add": false,
12 | "count": {
13 | "type": "minecraft:uniform",
14 | "max": 2.0,
15 | "min": 0.0
16 | },
17 | "function": "minecraft:set_count"
18 | }
19 | ],
20 | "name": "mobs_of_mythology:gear"
21 | }
22 | ],
23 | "rolls": 1.0
24 | },
25 | {
26 | "bonus_rolls": 0.0,
27 | "entries": [
28 | {
29 | "type": "minecraft:item",
30 | "functions": [
31 | {
32 | "add": false,
33 | "count": {
34 | "type": "minecraft:uniform",
35 | "max": 5.0,
36 | "min": 3.0
37 | },
38 | "function": "minecraft:set_count"
39 | }
40 | ],
41 | "name": "mobs_of_mythology:bronze_ingot"
42 | }
43 | ],
44 | "rolls": 1.0
45 | }
46 | ],
47 | "random_sequence": "mobs_of_mythology:entities/automaton"
48 | }
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/constant/DefaultMythAnimations.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.constant;
2 |
3 | import mod.azure.azurelib.core.animation.Animation;
4 | import mod.azure.azurelib.core.animation.RawAnimation;
5 |
6 | public final class DefaultMythAnimations {
7 | public static final RawAnimation IDLE = RawAnimation.begin().thenLoop("idle");
8 | public static final RawAnimation WALK = RawAnimation.begin().thenLoop("walk");
9 | public static final RawAnimation RUN = RawAnimation.begin().thenLoop("run");
10 | public static final RawAnimation FLY = RawAnimation.begin().thenLoop("fly");
11 | public static final RawAnimation DEATH = RawAnimation.begin().thenPlayAndHold("death");
12 | public static final RawAnimation ATTACK =
13 | RawAnimation.begin().then("attack", Animation.LoopType.PLAY_ONCE);
14 | public static final RawAnimation ATTACK2 =
15 | RawAnimation.begin().then("attack2", Animation.LoopType.PLAY_ONCE);
16 | public static final RawAnimation SIT = RawAnimation.begin().thenLoop("sit");
17 | public static final RawAnimation IDLE_RIDING = RawAnimation.begin().thenLoop("idle_riding");
18 | public static final RawAnimation WALK_RIDING = RawAnimation.begin().thenLoop("walk_riding");
19 | public static final RawAnimation RUN_RIDING = RawAnimation.begin().thenLoop("run_riding");
20 | }
21 |
--------------------------------------------------------------------------------
/neoforge/src/main/resources/META-INF/neoforge.mods.toml:
--------------------------------------------------------------------------------
1 | modLoader = "javafml"
2 | loaderVersion = "[4,)"
3 | issueTrackerURL = "https://github.com/kyber-6/mobs-of-mythology-mod/issues"
4 | license = "GNU GPL 3.0"
5 |
6 | [[mods]]
7 | modId = "mobs_of_mythology"
8 | version = "${version}"
9 | displayName = "Mobs of Mythology"
10 | authors = "kyber-6"
11 | credits = "Pixel Dream Studios, steficy, AzureDoom, karelien"
12 | displayURL = "https://www.curseforge.com/minecraft/mc-mods/mobs-of-mythology"
13 | description = '''
14 | Discover a World of Mythological Creatures in Minecraft!
15 | '''
16 | logoFile = "icon.png"
17 |
18 | [[dependencies.mobs_of_mythology]]
19 | modId = "neoforge"
20 | type = "required"
21 | versionRange = "[21.0,)"
22 | ordering = "NONE"
23 | side = "BOTH"
24 |
25 | [[dependencies.mobs_of_mythology]]
26 | modId = "minecraft"
27 | type = "required"
28 | versionRange = "[1.21,)"
29 | ordering = "NONE"
30 | side = "BOTH"
31 |
32 | [[dependencies.mobs_of_mythology]]
33 | modId = "architectury"
34 | type = "required"
35 | versionRange = "[13.0.2,)"
36 | ordering = "AFTER"
37 | side = "BOTH"
38 |
39 | [[dependencies.mobs_of_mythology]]
40 | modId = "azurelib"
41 | type = "required"
42 | versionRange = "[2.3.4,)"
43 | ordering = "NONE"
44 | side = "BOTH"
45 |
46 | [[dependencies.mobs_of_mythology]]
47 | modId = "smartbrainlib"
48 | type = "required"
49 | versionRange = "[1.14.2,)"
50 | ordering = "NONE"
51 | side = "BOTH"
52 |
53 | [[mixins]]
54 | config = "mobs_of_mythology.mixins.json"
55 |
--------------------------------------------------------------------------------
/fabric/src/main/resources/fabric.mod.json:
--------------------------------------------------------------------------------
1 | {
2 | "schemaVersion": 1,
3 | "id": "mobs_of_mythology",
4 | "version": "${version}",
5 | "name": "Mobs of Mythology",
6 | "description": "Discover a World of Mythological Creatures in Minecraft!",
7 | "authors": [
8 | "kyber-6"
9 | ],
10 | "contributors": [
11 | "Pixel Dream Studios",
12 | "steficy",
13 | "AzureDoom",
14 | "karelien"
15 | ],
16 | "contact": {
17 | "homepage": "https://www.curseforge.com/minecraft/mc-mods/mobs-of-mythology",
18 | "sources": "https://github.com/kyber-6/mobs-of-mythology-mod",
19 | "issues": "https://github.com/kyber-6/mobs-of-mythology-mod/issues"
20 | },
21 | "license": "GPL-3.0",
22 | "icon": "icon.png",
23 | "environment": "*",
24 | "entrypoints": {
25 | "main": [
26 | "net.pixeldreamstudios.mobs_of_mythology.fabric.MobsOfMythologyFabric"
27 | ],
28 | "client": [
29 | "net.pixeldreamstudios.mobs_of_mythology.fabric.client.MobsOfMythologyFabricClient"
30 | ]
31 | },
32 | "mixins": [
33 | "mobs_of_mythology.mixins.json"
34 | ],
35 | "depends": {
36 | "fabricloader": ">=0.15.11",
37 | "minecraft": "~1.21",
38 | "java": ">=21",
39 | "architectury": ">=13.0.2",
40 | "fabric-api": "*",
41 | "azurelib": ">=2.3.4",
42 | "smartbrainlib": ">=1.14.2"
43 | },
44 | "custom": {
45 | "modmenu": {
46 | "links": {
47 | "modmenu.discord": "https://discord.com/invite/pixel-dream-studios-872788557553610802"
48 | }
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.yml:
--------------------------------------------------------------------------------
1 | name: "Bug report"
2 | description: "The game crashed or something is not working as intended."
3 | labels: ["bug"]
4 | body:
5 | - type: dropdown
6 | attributes:
7 | label: "Confirm mod version"
8 | description: "Please confirm that you are using the active in-development version of the mod, which is 1.21."
9 | options:
10 | - "Yes, I am using version 1.21"
11 | - "No, I am not using version 1.21"
12 | validations:
13 | required: true
14 | - type: textarea
15 | attributes:
16 | label: "Describe the bug"
17 | description: "Provide a clear and concise description of what the bug is."
18 | validations:
19 | required: true
20 | - type: textarea
21 | attributes:
22 | label: "Reproduction steps"
23 | description: "Detail the steps to reproduce the behavior."
24 | validations:
25 | required: true
26 | - type: textarea
27 | attributes:
28 | label: "Screenshots"
29 | description: "Attach screenshots or videos to help explain your problem (if applicable)."
30 | validations:
31 | required: false
32 | - type: textarea
33 | attributes:
34 | label: "Logs & crash-reports"
35 | description: "Provide a crash report or the latest log (if applicable)."
36 | validations:
37 | required: false
38 | - type: input
39 | attributes:
40 | label: "Mod version"
41 | description: "Specify the mod version you were using (e.g., 2.0)."
42 | validations:
43 | required: true
44 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/registry/SoundRegistry.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.registry;
2 |
3 | import dev.architectury.registry.registries.DeferredRegister;
4 | import dev.architectury.registry.registries.RegistrySupplier;
5 | import net.minecraft.core.registries.Registries;
6 | import net.minecraft.resources.ResourceLocation;
7 | import net.minecraft.sounds.SoundEvent;
8 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
9 |
10 | public class SoundRegistry {
11 | public static final DeferredRegister SOUND_EVENTS =
12 | DeferredRegister.create(MobsOfMythology.MOD_ID, Registries.SOUND_EVENT);
13 | public static final RegistrySupplier DRAKE_ROAR =
14 | SOUND_EVENTS.register(
15 | "drake_roar",
16 | () ->
17 | SoundEvent.createVariableRangeEvent(
18 | ResourceLocation.fromNamespaceAndPath(MobsOfMythology.MOD_ID, "drake_roar")));
19 | public static final RegistrySupplier DRAKE_DEATH =
20 | SOUND_EVENTS.register(
21 | "drake_death",
22 | () ->
23 | SoundEvent.createVariableRangeEvent(
24 | ResourceLocation.fromNamespaceAndPath(MobsOfMythology.MOD_ID, "drake_death")));
25 | public static final RegistrySupplier ROBOTIC_VOICE =
26 | SOUND_EVENTS.register(
27 | "robotic_voice",
28 | () ->
29 | SoundEvent.createVariableRangeEvent(
30 | ResourceLocation.fromNamespaceAndPath(MobsOfMythology.MOD_ID, "robotic_voice")));
31 |
32 | public static void init() {
33 | SOUND_EVENTS.register();
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/renderer/SporelingRenderer.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer;
2 |
3 | import com.google.common.collect.Maps;
4 | import java.util.Map;
5 | import mod.azure.azurelib.common.api.client.renderer.GeoEntityRenderer;
6 | import net.minecraft.Util;
7 | import net.minecraft.client.renderer.entity.EntityRendererProvider;
8 | import net.minecraft.resources.ResourceLocation;
9 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
10 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.model.SporelingModel;
11 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.SporelingEntity;
12 | import net.pixeldreamstudios.mobs_of_mythology.entity.variant.SporelingVariant;
13 |
14 | public class SporelingRenderer extends GeoEntityRenderer {
15 | public static final Map LOCATION_BY_VARIANT =
16 | Util.make(
17 | Maps.newEnumMap(SporelingVariant.class),
18 | (map) -> {
19 | map.put(
20 | SporelingVariant.RED,
21 | ResourceLocation.fromNamespaceAndPath(
22 | MobsOfMythology.MOD_ID, "textures/entity/sporeling/sporeling_red.png"));
23 | map.put(
24 | SporelingVariant.BROWN,
25 | ResourceLocation.fromNamespaceAndPath(
26 | MobsOfMythology.MOD_ID, "textures/entity/sporeling/sporeling_brown.png"));
27 | });
28 |
29 | public SporelingRenderer(EntityRendererProvider.Context ctx) {
30 | super(ctx, new SporelingModel());
31 | this.shadowRadius = 0.32f;
32 | }
33 |
34 | @Override
35 | public ResourceLocation getTextureLocation(SporelingEntity animatable) {
36 | return LOCATION_BY_VARIANT.get(animatable.getVariant());
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE v3.0
2 |
3 | Copyright (c) 2025 Pixel Dream Studios
4 |
5 | This program is free software: you can redistribute it and/or modify
6 | it under the terms of the GNU General Public License as published by
7 | the Free Software Foundation, either version 3 of the License, or
8 | (at your option) any later version.
9 |
10 | This program is distributed in the hope that it will be useful,
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | GNU General Public License for more details.
14 |
15 | You should have received a copy of the GNU General Public License
16 | along with this program. If not, see .
17 |
18 | The following files and directories are licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (CC BY-NC-SA 4.0):
19 |
20 | * common/src/main/resources
21 | * fabric/src/main/resources
22 | * neoforge/src/main/resources
23 |
24 | You are free to:
25 |
26 | * **Share** — copy and redistribute the material in any medium or format
27 | * **Adapt** — remix, transform, and build upon the material
28 |
29 | Under the following terms:
30 |
31 | * **Attribution** — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
32 | * **NonCommercial** — You may not use the material for commercial purposes.
33 | * **ShareAlike** — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
34 |
35 | You can find a copy of this license at .
36 |
37 | All other files and directories within this project are covered by the GNU General Public License v3.0 as described above.
38 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/MobsOfMythology.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology;
2 |
3 | import dev.architectury.registry.client.level.entity.EntityRendererRegistry;
4 | import mod.azure.azurelib.common.internal.common.AzureLib;
5 | import mod.azure.azurelib.common.internal.common.AzureLibMod;
6 | import mod.azure.azurelib.common.internal.common.config.format.ConfigFormats;
7 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer.*;
8 | import net.pixeldreamstudios.mobs_of_mythology.registry.*;
9 | import org.slf4j.Logger;
10 | import org.slf4j.LoggerFactory;
11 |
12 | public final class MobsOfMythology {
13 | public static final String MOD_ID = "mobs_of_mythology";
14 | public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
15 | public static MobsOfMythologyConfig config;
16 |
17 | public static void init() {
18 | AzureLib.initialize();
19 | config =
20 | AzureLibMod.registerConfig(MobsOfMythologyConfig.class, ConfigFormats.properties())
21 | .getConfigInstance();
22 | SoundRegistry.init();
23 | EntityRegistry.init();
24 | ItemRegistry.init();
25 | BlockRegistry.init();
26 | TabRegistry.init();
27 | }
28 |
29 | public static void initClient() {
30 | EntityRendererRegistry.register(EntityRegistry.AUTOMATON, AutomatonRenderer::new);
31 | EntityRendererRegistry.register(EntityRegistry.CHUPACABRA, ChupacabraRenderer::new);
32 | EntityRendererRegistry.register(EntityRegistry.KOBOLD, KoboldRenderer::new);
33 | EntityRendererRegistry.register(EntityRegistry.KOBOLD_WARRIOR, KoboldWarriorRenderer::new);
34 | EntityRendererRegistry.register(EntityRegistry.DRAKE, DrakeRenderer::new);
35 | EntityRendererRegistry.register(EntityRegistry.SPORELING, SporelingRenderer::new);
36 | EntityRendererRegistry.register(EntityRegistry.BASILISK, BasiliskRenderer::new);
37 | EntityRendererRegistry.register(EntityRegistry.PEGASUS, PegasusRenderer::new);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/model/PegasusModel.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.model;
2 |
3 | import mod.azure.azurelib.common.api.client.model.GeoModel;
4 | import mod.azure.azurelib.common.internal.client.model.data.EntityModelData;
5 | import mod.azure.azurelib.common.internal.common.constant.DataTickets;
6 | import mod.azure.azurelib.core.animatable.model.CoreGeoBone;
7 | import mod.azure.azurelib.core.animation.AnimationState;
8 | import net.minecraft.resources.ResourceLocation;
9 | import net.minecraft.util.Mth;
10 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
11 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.PegasusEntity;
12 |
13 | public class PegasusModel extends GeoModel {
14 |
15 | @Override
16 | public ResourceLocation getModelResource(PegasusEntity object) {
17 | return ResourceLocation.fromNamespaceAndPath(
18 | MobsOfMythology.MOD_ID, "geo/entity/pegasus.geo.json");
19 | }
20 |
21 | @Override
22 | public ResourceLocation getTextureResource(PegasusEntity object) {
23 | return ResourceLocation.fromNamespaceAndPath(
24 | MobsOfMythology.MOD_ID, "textures/entity/pegasus.png");
25 | }
26 |
27 | @Override
28 | public ResourceLocation getAnimationResource(PegasusEntity animatable) {
29 | return ResourceLocation.fromNamespaceAndPath(
30 | MobsOfMythology.MOD_ID, "animations/entity/pegasus.animation.json");
31 | }
32 |
33 | @Override
34 | public void setCustomAnimations(
35 | PegasusEntity animatable, long instanceId, AnimationState animationState) {
36 | CoreGeoBone head = getAnimationProcessor().getBone("head");
37 |
38 | if (head != null) {
39 | EntityModelData entityData = animationState.getData(DataTickets.ENTITY_MODEL_DATA);
40 | head.setRotX(entityData.headPitch() * Mth.DEG_TO_RAD);
41 | head.setRotY(entityData.netHeadYaw() * Mth.DEG_TO_RAD);
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/model/BasiliskModel.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.model;
2 |
3 | import mod.azure.azurelib.common.api.client.model.GeoModel;
4 | import mod.azure.azurelib.common.internal.client.model.data.EntityModelData;
5 | import mod.azure.azurelib.common.internal.common.constant.DataTickets;
6 | import mod.azure.azurelib.core.animatable.model.CoreGeoBone;
7 | import mod.azure.azurelib.core.animation.AnimationState;
8 | import net.minecraft.resources.ResourceLocation;
9 | import net.minecraft.util.Mth;
10 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
11 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.BasiliskEntity;
12 |
13 | public class BasiliskModel extends GeoModel {
14 |
15 | @Override
16 | public ResourceLocation getModelResource(BasiliskEntity object) {
17 | return ResourceLocation.fromNamespaceAndPath(
18 | MobsOfMythology.MOD_ID, "geo/entity/basilisk.geo.json");
19 | }
20 |
21 | @Override
22 | public ResourceLocation getTextureResource(BasiliskEntity object) {
23 | return ResourceLocation.fromNamespaceAndPath(
24 | MobsOfMythology.MOD_ID, "textures/entity/basilisk.png");
25 | }
26 |
27 | @Override
28 | public ResourceLocation getAnimationResource(BasiliskEntity animatable) {
29 | return ResourceLocation.fromNamespaceAndPath(
30 | MobsOfMythology.MOD_ID, "animations/entity/basilisk.animation.json");
31 | }
32 |
33 | @Override
34 | public void setCustomAnimations(
35 | BasiliskEntity animatable, long instanceId, AnimationState animationState) {
36 | CoreGeoBone head = getAnimationProcessor().getBone("head");
37 |
38 | if (head != null) {
39 | EntityModelData entityData = animationState.getData(DataTickets.ENTITY_MODEL_DATA);
40 | head.setRotX(entityData.headPitch() * Mth.DEG_TO_RAD);
41 | head.setRotY(entityData.netHeadYaw() * Mth.DEG_TO_RAD);
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/model/KoboldModel.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.model;
2 |
3 | import mod.azure.azurelib.common.api.client.model.GeoModel;
4 | import mod.azure.azurelib.common.internal.client.model.data.EntityModelData;
5 | import mod.azure.azurelib.common.internal.common.constant.DataTickets;
6 | import mod.azure.azurelib.core.animatable.model.CoreGeoBone;
7 | import mod.azure.azurelib.core.animation.AnimationState;
8 | import net.minecraft.resources.ResourceLocation;
9 | import net.minecraft.util.Mth;
10 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
11 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer.KoboldRenderer;
12 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.KoboldEntity;
13 |
14 | public class KoboldModel extends GeoModel {
15 | @Override
16 | public ResourceLocation getModelResource(KoboldEntity object) {
17 | return ResourceLocation.fromNamespaceAndPath(
18 | MobsOfMythology.MOD_ID, "geo/entity/kobold.geo.json");
19 | }
20 |
21 | @Override
22 | public ResourceLocation getTextureResource(KoboldEntity object) {
23 | return KoboldRenderer.LOCATION_BY_VARIANT.get(object.getVariant());
24 | }
25 |
26 | @Override
27 | public ResourceLocation getAnimationResource(KoboldEntity animatable) {
28 | return ResourceLocation.fromNamespaceAndPath(
29 | MobsOfMythology.MOD_ID, "animations/entity/kobold.animation.json");
30 | }
31 |
32 | @Override
33 | public void setCustomAnimations(
34 | KoboldEntity animatable, long instanceId, AnimationState animationState) {
35 | CoreGeoBone head = getAnimationProcessor().getBone("head");
36 | if (head != null) {
37 | EntityModelData entityData = animationState.getData(DataTickets.ENTITY_MODEL_DATA);
38 | head.setRotX(entityData.headPitch() * Mth.DEG_TO_RAD);
39 | head.setRotY(entityData.netHeadYaw() * Mth.DEG_TO_RAD);
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/model/AutomatonModel.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.model;
2 |
3 | import mod.azure.azurelib.common.api.client.model.GeoModel;
4 | import mod.azure.azurelib.common.internal.client.model.data.EntityModelData;
5 | import mod.azure.azurelib.common.internal.common.constant.DataTickets;
6 | import mod.azure.azurelib.core.animatable.model.CoreGeoBone;
7 | import mod.azure.azurelib.core.animation.AnimationState;
8 | import net.minecraft.resources.ResourceLocation;
9 | import net.minecraft.util.Mth;
10 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
11 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.AutomatonEntity;
12 |
13 | public class AutomatonModel extends GeoModel {
14 |
15 | @Override
16 | public ResourceLocation getModelResource(AutomatonEntity object) {
17 | return ResourceLocation.fromNamespaceAndPath(
18 | MobsOfMythology.MOD_ID, "geo/entity/automaton.geo.json");
19 | }
20 |
21 | @Override
22 | public ResourceLocation getTextureResource(AutomatonEntity object) {
23 | return ResourceLocation.fromNamespaceAndPath(
24 | MobsOfMythology.MOD_ID, "textures/entity/automaton.png");
25 | }
26 |
27 | @Override
28 | public ResourceLocation getAnimationResource(AutomatonEntity animatable) {
29 | return ResourceLocation.fromNamespaceAndPath(
30 | MobsOfMythology.MOD_ID, "animations/entity/automaton.animation.json");
31 | }
32 |
33 | @Override
34 | public void setCustomAnimations(
35 | AutomatonEntity animatable, long instanceId, AnimationState animationState) {
36 | CoreGeoBone head = getAnimationProcessor().getBone("head");
37 |
38 | if (head != null) {
39 | EntityModelData entityData = animationState.getData(DataTickets.ENTITY_MODEL_DATA);
40 | head.setRotX(entityData.headPitch() * Mth.DEG_TO_RAD);
41 | head.setRotY(entityData.netHeadYaw() * Mth.DEG_TO_RAD);
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/model/KoboldWarriorModel.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.model;
2 |
3 | import mod.azure.azurelib.common.api.client.model.GeoModel;
4 | import mod.azure.azurelib.common.internal.client.model.data.EntityModelData;
5 | import mod.azure.azurelib.common.internal.common.constant.DataTickets;
6 | import mod.azure.azurelib.core.animatable.model.CoreGeoBone;
7 | import mod.azure.azurelib.core.animation.AnimationState;
8 | import net.minecraft.resources.ResourceLocation;
9 | import net.minecraft.util.Mth;
10 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
11 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer.KoboldWarriorRenderer;
12 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.KoboldWarriorEntity;
13 |
14 | public class KoboldWarriorModel extends GeoModel {
15 | @Override
16 | public ResourceLocation getModelResource(KoboldWarriorEntity object) {
17 | return ResourceLocation.fromNamespaceAndPath(
18 | MobsOfMythology.MOD_ID, "geo/entity/kobold_warrior.geo.json");
19 | }
20 |
21 | @Override
22 | public ResourceLocation getTextureResource(KoboldWarriorEntity object) {
23 | return KoboldWarriorRenderer.LOCATION_BY_VARIANT.get(object.getVariant());
24 | }
25 |
26 | @Override
27 | public ResourceLocation getAnimationResource(KoboldWarriorEntity animatable) {
28 | return ResourceLocation.fromNamespaceAndPath(
29 | MobsOfMythology.MOD_ID, "animations/entity/kobold_warrior.animation.json");
30 | }
31 |
32 | @Override
33 | public void setCustomAnimations(
34 | KoboldWarriorEntity animatable,
35 | long instanceId,
36 | AnimationState animationState) {
37 | CoreGeoBone head = getAnimationProcessor().getBone("head");
38 |
39 | if (head != null) {
40 | EntityModelData entityData = animationState.getData(DataTickets.ENTITY_MODEL_DATA);
41 | head.setRotX(entityData.headPitch() * Mth.DEG_TO_RAD);
42 | head.setRotY(entityData.netHeadYaw() * Mth.DEG_TO_RAD);
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/registry/TagRegistry.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.registry;
2 |
3 | import net.minecraft.core.registries.Registries;
4 | import net.minecraft.resources.ResourceLocation;
5 | import net.minecraft.tags.TagKey;
6 | import net.minecraft.world.item.Item;
7 | import net.minecraft.world.level.biome.Biome;
8 | import net.minecraft.world.level.block.Block;
9 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
10 |
11 | public record TagRegistry() {
12 | // BLOCK TAGS
13 | public static final TagKey BRONZE_BLOCKS =
14 | TagKey.create(Registries.BLOCK, ResourceLocation.fromNamespaceAndPath("c", "bronze_blocks"));
15 | public static final TagKey MYTH_ENTITIES_SPAWNABLE_ON =
16 | TagKey.create(
17 | Registries.BLOCK,
18 | ResourceLocation.fromNamespaceAndPath(MobsOfMythology.MOD_ID, "myth_mob_spawnable_on"));
19 |
20 | // ITEM TAGS
21 | public static final TagKey- PICKAXES =
22 | TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath("c", "pickaxes"));
23 | public static final TagKey
- BRONZE_INGOTS =
24 | TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath("c", "bronze_ingots"));
25 |
26 | // MOB BIOME SPAWN TAGS
27 | public static TagKey KOBOLD_BIOMES =
28 | TagKey.create(
29 | Registries.BIOME,
30 | ResourceLocation.fromNamespaceAndPath(MobsOfMythology.MOD_ID, "kobolds_spawn_in"));
31 | public static TagKey PEGASUS_BIOMES =
32 | TagKey.create(
33 | Registries.BIOME,
34 | ResourceLocation.fromNamespaceAndPath(MobsOfMythology.MOD_ID, "pegasus_spawn_in"));
35 | public static TagKey DRAKE_BIOMES =
36 | TagKey.create(
37 | Registries.BIOME,
38 | ResourceLocation.fromNamespaceAndPath(MobsOfMythology.MOD_ID, "drakes_spawn_in"));
39 | public static TagKey CHUPACABRA_BIOMES =
40 | TagKey.create(
41 | Registries.BIOME,
42 | ResourceLocation.fromNamespaceAndPath(MobsOfMythology.MOD_ID, "chupacabras_spawn_in"));
43 | public static TagKey SPORELING_BIOMES =
44 | TagKey.create(
45 | Registries.BIOME,
46 | ResourceLocation.fromNamespaceAndPath(MobsOfMythology.MOD_ID, "sporelings_spawn_in"));
47 | }
48 |
--------------------------------------------------------------------------------
/common/src/main/resources/data/mobs_of_mythology/loot_table/entities/chupacabra.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "minecraft:entity",
3 | "pools": [
4 | {
5 | "bonus_rolls": 0.0,
6 | "entries": [
7 | {
8 | "type": "minecraft:item",
9 | "functions": [
10 | {
11 | "add": false,
12 | "count": {
13 | "type": "minecraft:uniform",
14 | "max": 3.0,
15 | "min": 1.0
16 | },
17 | "function": "minecraft:set_count"
18 | },
19 | {
20 | "conditions": [
21 | {
22 | "condition": "minecraft:any_of",
23 | "terms": [
24 | {
25 | "condition": "minecraft:entity_properties",
26 | "entity": "this",
27 | "predicate": {
28 | "flags": {
29 | "is_on_fire": true
30 | }
31 | }
32 | },
33 | {
34 | "condition": "minecraft:entity_properties",
35 | "entity": "direct_attacker",
36 | "predicate": {
37 | "equipment": {
38 | "mainhand": {
39 | "predicates": {
40 | "minecraft:enchantments": [
41 | {
42 | "enchantments": "#minecraft:smelts_loot"
43 | }
44 | ]
45 | }
46 | }
47 | }
48 | }
49 | }
50 | ]
51 | }
52 | ],
53 | "function": "minecraft:furnace_smelt"
54 | },
55 | {
56 | "count": {
57 | "type": "minecraft:uniform",
58 | "max": 1.0,
59 | "min": 0.0
60 | },
61 | "enchantment": "minecraft:looting",
62 | "function": "minecraft:enchanted_count_increase"
63 | }
64 | ],
65 | "name": "mobs_of_mythology:chupacabra_meat"
66 | }
67 | ],
68 | "rolls": 1.0
69 | }
70 | ],
71 | "random_sequence": "mobs_of_mythology:entities/chupacabra"
72 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/models/item/kobold_spear.json:
--------------------------------------------------------------------------------
1 | {
2 | "credit": "Made with Blockbench",
3 | "parent": "minecraft:item/handheld",
4 | "textures": {
5 | "layer0": "mobs_of_mythology:item/kobold_spear",
6 | "particle": "mobs_of_mythology:item/kobold_spear"
7 | },
8 | "display": {
9 | "thirdperson_righthand": {
10 | "rotation": [
11 | 0,
12 | -90,
13 | 55
14 | ],
15 | "translation": [
16 | 0,
17 | 9.75,
18 | -0.5
19 | ],
20 | "scale": [
21 | 1.6,
22 | 1.6,
23 | 0.8
24 | ]
25 | },
26 | "thirdperson_lefthand": {
27 | "rotation": [
28 | 0,
29 | -90,
30 | -45
31 | ],
32 | "translation": [
33 | 0,
34 | 9.75,
35 | 0.5
36 | ],
37 | "scale": [
38 | 1.6,
39 | 1.6,
40 | 0.8
41 | ]
42 | },
43 | "firstperson_righthand": {
44 | "rotation": [
45 | 0,
46 | -90,
47 | 25
48 | ],
49 | "translation": [
50 | 1.13,
51 | 9.2,
52 | 1.13
53 | ],
54 | "scale": [
55 | 1.5,
56 | 1.5,
57 | 0.75
58 | ]
59 | },
60 | "firstperson_lefthand": {
61 | "rotation": [
62 | 0,
63 | -90,
64 | -65
65 | ],
66 | "translation": [
67 | 1.13,
68 | 9.2,
69 | 1.13
70 | ],
71 | "scale": [
72 | 1.5,
73 | 1.5,
74 | 0.75
75 | ]
76 | },
77 | "ground": {
78 | "translation": [
79 | 0,
80 | 4.75,
81 | 0
82 | ],
83 | "scale": [
84 | 1,
85 | 1,
86 | 0.5
87 | ]
88 | },
89 | "head": {
90 | "rotation": [
91 | 0,
92 | 0,
93 | -88.75
94 | ],
95 | "translation": [
96 | -1.25,
97 | -12.25,
98 | 3.75
99 | ]
100 | },
101 | "fixed": {
102 | "rotation": [
103 | 0,
104 | 180,
105 | 0
106 | ],
107 | "translation": [
108 | -5.25,
109 | 5,
110 | -1
111 | ],
112 | "scale": [
113 | 4,
114 | 4,
115 | 2
116 | ]
117 | },
118 | "gui": {
119 | "translation": [
120 | 2.75,
121 | 2.75,
122 | 2
123 | ],
124 | "scale": [
125 | 1.33,
126 | 1.33,
127 | 1.34
128 | ]
129 | }
130 | }
131 | }
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/mobs/AbstractKoboldEntity.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.mobs;
2 |
3 | import net.minecraft.core.BlockPos;
4 | import net.minecraft.nbt.CompoundTag;
5 | import net.minecraft.network.syncher.EntityDataAccessor;
6 | import net.minecraft.network.syncher.EntityDataSerializers;
7 | import net.minecraft.network.syncher.SynchedEntityData;
8 | import net.minecraft.sounds.SoundEvent;
9 | import net.minecraft.sounds.SoundEvents;
10 | import net.minecraft.world.damagesource.DamageSource;
11 | import net.minecraft.world.entity.EntityType;
12 | import net.minecraft.world.entity.monster.Enemy;
13 | import net.minecraft.world.entity.monster.Monster;
14 | import net.minecraft.world.level.Level;
15 | import net.minecraft.world.level.block.state.BlockState;
16 | import net.pixeldreamstudios.mobs_of_mythology.entity.AbstractMythMonsterEntity;
17 |
18 | public abstract class AbstractKoboldEntity extends AbstractMythMonsterEntity implements Enemy {
19 | protected static final EntityDataAccessor DATA_ID_TYPE_VARIANT =
20 | SynchedEntityData.defineId(AbstractKoboldEntity.class, EntityDataSerializers.INT);
21 |
22 | protected AbstractKoboldEntity(EntityType extends Monster> entityType, Level level, int XP) {
23 | super(entityType, level);
24 | this.xpReward = XP;
25 | }
26 |
27 | @Override
28 | protected void defineSynchedData(SynchedEntityData.Builder builder) {
29 | super.defineSynchedData(builder);
30 | builder.define(DATA_ID_TYPE_VARIANT, 0);
31 | }
32 |
33 | protected int getTypeVariant() {
34 | return this.entityData.get(DATA_ID_TYPE_VARIANT);
35 | }
36 |
37 | protected abstract T getVariant();
38 |
39 | @Override
40 | public void addAdditionalSaveData(CompoundTag nbt) {
41 | super.addAdditionalSaveData(nbt);
42 | nbt.putInt("Variant", this.getTypeVariant());
43 | }
44 |
45 | @Override
46 | public void readAdditionalSaveData(CompoundTag nbt) {
47 | super.readAdditionalSaveData(nbt);
48 | this.entityData.set(DATA_ID_TYPE_VARIANT, nbt.getInt("Variant"));
49 | }
50 |
51 | @Override
52 | protected SoundEvent getAmbientSound() {
53 | this.playSound(SoundEvents.VINDICATOR_AMBIENT, 1.0f, 1.75f);
54 | return null;
55 | }
56 |
57 | @Override
58 | protected SoundEvent getHurtSound(DamageSource source) {
59 | this.playSound(SoundEvents.VINDICATOR_HURT, 1.0f, 1.75f);
60 | return null;
61 | }
62 |
63 | @Override
64 | protected SoundEvent getDeathSound() {
65 | this.playSound(SoundEvents.VINDICATOR_DEATH, 1.0f, 1.75f);
66 | return null;
67 | }
68 |
69 | @Override
70 | protected void playStepSound(BlockPos pos, BlockState state) {
71 | this.playSound(SoundEvents.WOLF_STEP, 1.0f, 1.75f);
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/registry/BlockRegistry.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.registry;
2 |
3 | import dev.architectury.registry.registries.DeferredRegister;
4 | import dev.architectury.registry.registries.RegistrySupplier;
5 | import net.minecraft.core.registries.Registries;
6 | import net.minecraft.world.item.BlockItem;
7 | import net.minecraft.world.item.Item;
8 | import net.minecraft.world.level.block.Block;
9 | import net.minecraft.world.level.block.RotatedPillarBlock;
10 | import net.minecraft.world.level.block.SoundType;
11 | import net.minecraft.world.level.block.state.BlockBehaviour;
12 | import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
13 | import net.minecraft.world.level.material.MapColor;
14 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
15 |
16 | public class BlockRegistry {
17 | public static final DeferredRegister BLOCKS =
18 | DeferredRegister.create(MobsOfMythology.MOD_ID, Registries.BLOCK);
19 | public static final DeferredRegister
- BLOCK_ITEMS =
20 | DeferredRegister.create(MobsOfMythology.MOD_ID, Registries.ITEM);
21 |
22 | public static final RegistrySupplier BRONZE_BLOCK =
23 | BLOCKS.register(
24 | "bronze_block",
25 | () ->
26 | new Block(
27 | BlockBehaviour.Properties.of()
28 | .mapColor(MapColor.METAL)
29 | .instrument(NoteBlockInstrument.BASS)
30 | .requiresCorrectToolForDrops()
31 | .strength(6.0F, 6.0F)
32 | .sound(SoundType.METAL)));
33 | public static final RegistrySupplier
- BRONZE_BLOCK_ITEM =
34 | BLOCK_ITEMS.register(
35 | BRONZE_BLOCK.getId(),
36 | () ->
37 | new BlockItem(
38 | BRONZE_BLOCK.get(),
39 | new Item.Properties().arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
40 |
41 | public static final RegistrySupplier CUT_BRONZE_BLOCK =
42 | BLOCKS.register(
43 | "cut_bronze_block",
44 | () ->
45 | new RotatedPillarBlock(
46 | BlockBehaviour.Properties.of()
47 | .mapColor(MapColor.METAL)
48 | .instrument(NoteBlockInstrument.BASS)
49 | .requiresCorrectToolForDrops()
50 | .strength(6.0F, 6.0F)
51 | .sound(SoundType.METAL)));
52 | public static final RegistrySupplier
- CUT_BRONZE_BLOCK_ITEM =
53 | BLOCK_ITEMS.register(
54 | CUT_BRONZE_BLOCK.getId(),
55 | () ->
56 | new BlockItem(
57 | CUT_BRONZE_BLOCK.get(),
58 | new Item.Properties().arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
59 |
60 | public static void init() {
61 | BLOCKS.register();
62 | BLOCK_ITEMS.register();
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/mixin/CarvedPumpkinBlockMixin.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.mixin;
2 |
3 | import java.util.function.Predicate;
4 | import net.minecraft.core.BlockPos;
5 | import net.minecraft.world.entity.Entity;
6 | import net.minecraft.world.level.Level;
7 | import net.minecraft.world.level.block.CarvedPumpkinBlock;
8 | import net.minecraft.world.level.block.state.BlockState;
9 | import net.minecraft.world.level.block.state.pattern.BlockInWorld;
10 | import net.minecraft.world.level.block.state.pattern.BlockPattern;
11 | import net.minecraft.world.level.block.state.pattern.BlockPatternBuilder;
12 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.AutomatonEntity;
13 | import net.pixeldreamstudios.mobs_of_mythology.registry.EntityRegistry;
14 | import net.pixeldreamstudios.mobs_of_mythology.registry.TagRegistry;
15 | import org.spongepowered.asm.mixin.Final;
16 | import org.spongepowered.asm.mixin.Mixin;
17 | import org.spongepowered.asm.mixin.Shadow;
18 | import org.spongepowered.asm.mixin.injection.At;
19 | import org.spongepowered.asm.mixin.injection.Inject;
20 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
21 |
22 | @Mixin(CarvedPumpkinBlock.class)
23 | public class CarvedPumpkinBlockMixin {
24 | @Shadow @Final private static Predicate PUMPKINS_PREDICATE;
25 | private BlockPattern automatonFull;
26 |
27 | @Shadow
28 | private static void spawnGolemInWorld(
29 | Level level,
30 | BlockPattern.BlockPatternMatch blockPatternMatch,
31 | Entity entity,
32 | BlockPos blockPos) {}
33 |
34 | private BlockPattern getOrCreateAutomatonFull() {
35 | if (this.automatonFull == null) {
36 | this.automatonFull =
37 | BlockPatternBuilder.start()
38 | .aisle("~^~", "###", "~#~")
39 | .where('^', BlockInWorld.hasState(PUMPKINS_PREDICATE))
40 | .where(
41 | '#',
42 | BlockInWorld.hasState(blockState -> blockState.is(TagRegistry.BRONZE_BLOCKS)))
43 | .where('~', (blockInWorld) -> blockInWorld.getState().isAir())
44 | .build();
45 | }
46 | return this.automatonFull;
47 | }
48 |
49 | @Inject(
50 | at = @At("TAIL"),
51 | method =
52 | "Lnet/minecraft/world/level/block/CarvedPumpkinBlock;trySpawnGolem(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)V")
53 | private void checkAutomatonSpawn(Level level, BlockPos blockPos, CallbackInfo ci) {
54 | AutomatonEntity automatonEntity = EntityRegistry.AUTOMATON.get().create(level);
55 | BlockPattern.BlockPatternMatch blockPatternMatch3 =
56 | this.getOrCreateAutomatonFull().find(level, blockPos);
57 | if (blockPatternMatch3 != null) {
58 | spawnGolemInWorld(
59 | level,
60 | blockPatternMatch3,
61 | automatonEntity,
62 | blockPatternMatch3.getBlock(1, 2, 0).getPos());
63 | }
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/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 | @rem This is normally unused
30 | set APP_BASE_NAME=%~n0
31 | set APP_HOME=%DIRNAME%
32 |
33 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
34 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
35 |
36 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
37 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
38 |
39 | @rem Find java.exe
40 | if defined JAVA_HOME goto findJavaFromJavaHome
41 |
42 | set JAVA_EXE=java.exe
43 | %JAVA_EXE% -version >NUL 2>&1
44 | if %ERRORLEVEL% equ 0 goto execute
45 |
46 | echo. 1>&2
47 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
48 | echo. 1>&2
49 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
50 | echo location of your Java installation. 1>&2
51 |
52 | goto fail
53 |
54 | :findJavaFromJavaHome
55 | set JAVA_HOME=%JAVA_HOME:"=%
56 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
57 |
58 | if exist "%JAVA_EXE%" goto execute
59 |
60 | echo. 1>&2
61 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
62 | echo. 1>&2
63 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
64 | echo location of your Java installation. 1>&2
65 |
66 | goto fail
67 |
68 | :execute
69 | @rem Setup the command line
70 |
71 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
72 |
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if %ERRORLEVEL% equ 0 goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | set EXIT_CODE=%ERRORLEVEL%
85 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
86 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
87 | exit /b %EXIT_CODE%
88 |
89 | :mainEnd
90 | if "%OS%"=="Windows_NT" endlocal
91 |
92 | :omega
93 |
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/lang/de_de.json:
--------------------------------------------------------------------------------
1 | {
2 | "category.mobs_of_mythology": "Mythische Mobs",
3 | "advancements.mobs_of_mythology.title": "Mythische Mobs",
4 | "advancements.mobs_of_mythology.description": "Eine mythische Welt!",
5 | "entity.mobs_of_mythology.automaton": "Automat",
6 | "entity.mobs_of_mythology.kobold": "Kobold",
7 | "entity.mobs_of_mythology.kobold_warrior": "Kobold Krieger",
8 | "entity.mobs_of_mythology.chupacabra": "Chupacabra",
9 | "entity.mobs_of_mythology.drake": "Drake",
10 | "entity.mobs_of_mythology.sporeling": "Sporenling",
11 | "item.mobs_of_mythology.automaton_spawn_egg": "Automat Spawn Ei",
12 | "item.mobs_of_mythology.kobold_spawn_egg": "Kobold Spawn Ei",
13 | "item.mobs_of_mythology.kobold_warrior_spawn_egg": "Kobold Krieger Spawn Ei",
14 | "item.mobs_of_mythology.chupacabra_spawn_egg": "Chupacabra Spawn Ei",
15 | "item.mobs_of_mythology.wendigo_spawn_egg": "Wendigo Spawn Ei",
16 | "item.mobs_of_mythology.drake_spawn_egg": "Drake Spawn Ei",
17 | "item.mobs_of_mythology.sporeling_spawn_egg": "Sporenling Spawn Ei",
18 | "item.mobs_of_mythology.automaton_head": "Automat Kopf",
19 | "item.mobs_of_mythology.kobold_spear": "Kobold Speer",
20 | "item.mobs_of_mythology.bronze_ingot": "Bronze Barren",
21 | "item.mobs_of_mythology.chupacabra_meat": "Rohes Chupacabra Fleisch",
22 | "item.mobs_of_mythology.cooked_chupacabra_meat": "Chupacabra Spies",
23 | "item.mobs_of_mythology.gear": "Automaton Ausrüstung",
24 | "block.mobs_of_mythology.bronze_block": "Bronze Block",
25 | "block.mobs_of_mythology.cut_bronze_block": "Geschnittener Bronze Block",
26 | "config.screen.mobs_of_mythology": "Mythische Mobs Optionen",
27 | "config.mobs_of_mythology.option.automatonHealth": "Automat Leben",
28 | "config.mobs_of_mythology.option.automatonAttackDamage": "Automat Angriffsschaden",
29 | "config.mobs_of_mythology.option.chupacabraHealth": "Chupacabra Leben",
30 | "config.mobs_of_mythology.option.chupacabraAttackDamage": "Chupacabra Angriffsschaden",
31 | "config.mobs_of_mythology.option.chupacabraSpawnWeight": "Chupacabra Spawn Gewicht",
32 | "config.mobs_of_mythology.option.koboldHealth": "Kobold Leben",
33 | "config.mobs_of_mythology.option.koboldAttackDamage": "Kobold Angriffsschaden",
34 | "config.mobs_of_mythology.option.koboldFleeSpeedMod": "Kobold Fluchtgeschwindigkeit Modifikator",
35 | "config.mobs_of_mythology.option.koboldSpawnWeight": "Kobold Spawn Gewicht",
36 | "config.mobs_of_mythology.option.koboldWarriorHealth": "Kobold Krieger Leben",
37 | "config.mobs_of_mythology.option.koboldWarriorAttackDamage": "Kobold Krieger Angriffsschaden",
38 | "config.mobs_of_mythology.option.koboldWarriorArmor": "Kobold Krieger Rüstung",
39 | "config.mobs_of_mythology.option.koboldWarriorSpawnWeight": "Kobold Krieger Spawn Gewicht",
40 | "config.mobs_of_mythology.option.drakeHealth": "Drake Leben",
41 | "config.mobs_of_mythology.option.drakeAttackDamage": "Drake Angriffsschaden",
42 | "config.mobs_of_mythology.option.drakeSpawnWeight": "Drake Spawn Gewicht",
43 | "config.mobs_of_mythology.option.sporelingHealth": "Sporenling Leben",
44 | "config.mobs_of_mythology.option.redSporelingLines": "Roter Sporenling Linien",
45 | "config.mobs_of_mythology.option.brownSporelingLines": "Brauner Sporenling Linien",
46 | "config.mobs_of_mythology.option.sporelingSpawnWeight": "Sporenling Spawn Gewicht"
47 | }
48 |
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/lang/uk_ua.json:
--------------------------------------------------------------------------------
1 | {
2 | "category.mobs_of_mythology": "Мітичні моби",
3 | "advancements.mobs_of_mythology.title": "Мітичні моби",
4 | "advancements.mobs_of_mythology.description": "Мітичний світ!",
5 | "entity.mobs_of_mythology.automaton": "Автоматон",
6 | "entity.mobs_of_mythology.kobold": "Кобольд",
7 | "entity.mobs_of_mythology.kobold_warrior": "Воїн-кобольд",
8 | "entity.mobs_of_mythology.chupacabra": "Чупакабра",
9 | "entity.mobs_of_mythology.drake": "Дракончик",
10 | "entity.mobs_of_mythology.sporeling": "Споровичок",
11 | "item.mobs_of_mythology.automaton_spawn_egg": "Яйце виклику автоматона",
12 | "item.mobs_of_mythology.kobold_spawn_egg": "Яйце виклику кобольда",
13 | "item.mobs_of_mythology.kobold_warrior_spawn_egg": "Яйце виклику воїна-кобольда",
14 | "item.mobs_of_mythology.chupacabra_spawn_egg": "Яйце виклику чупакабри",
15 | "item.mobs_of_mythology.wendigo_spawn_egg": "Яйце виклику вендиго",
16 | "item.mobs_of_mythology.drake_spawn_egg": "Яйце виклику дракончика",
17 | "item.mobs_of_mythology.sporeling_spawn_egg": "Яйце виклику споровичка",
18 | "item.mobs_of_mythology.automaton_head": "Голова автоматона",
19 | "item.mobs_of_mythology.kobold_spear": "Спис кобольда",
20 | "item.mobs_of_mythology.bronze_ingot": "Бронзовий злиток",
21 | "item.mobs_of_mythology.chupacabra_meat": "Сире м'ясо чупакабри",
22 | "item.mobs_of_mythology.cooked_chupacabra_meat": "М'ясо на шампурі з чупакабри",
23 | "item.mobs_of_mythology.gear": "Шестерня автоматона",
24 | "block.mobs_of_mythology.bronze_block": "Бронзовий блок",
25 | "block.mobs_of_mythology.cut_bronze_block": "Тесаний бронзовий блок",
26 | "config.screen.mobs_of_mythology": "Параметри мітичних моб",
27 | "config.mobs_of_mythology.option.automatonHealth": "Здоров'я автоматона",
28 | "config.mobs_of_mythology.option.automatonAttackDamage": "Шкода від атаки автоматона",
29 | "config.mobs_of_mythology.option.chupacabraHealth": "Здоров'я чупакабри",
30 | "config.mobs_of_mythology.option.chupacabraAttackDamage": "Шкода від атаки чупакабри",
31 | "config.mobs_of_mythology.option.chupacabraSpawnWeight": "Вага появи чупакабри",
32 | "config.mobs_of_mythology.option.koboldHealth": "Здоров'я кобольда",
33 | "config.mobs_of_mythology.option.koboldAttackDamage": "Шкода від атаки кобольда",
34 | "config.mobs_of_mythology.option.koboldFleeSpeedMod": "Модифікатор швидкості втечі кобольда",
35 | "config.mobs_of_mythology.option.koboldSpawnWeight": "Вага появи кобольда",
36 | "config.mobs_of_mythology.option.koboldWarriorHealth": "Здоров'я воїна-кобольда",
37 | "config.mobs_of_mythology.option.koboldWarriorAttackDamage": "Шкода від атаки воїна-кобольда",
38 | "config.mobs_of_mythology.option.koboldWarriorArmor": "Броня воїна-кобольда",
39 | "config.mobs_of_mythology.option.koboldWarriorSpawnWeight": "Вага появи воїна-кобольда",
40 | "config.mobs_of_mythology.option.drakeHealth": "Здоров'я дракончика",
41 | "config.mobs_of_mythology.option.drakeAttackDamage": "Шкода від атаки дракончика",
42 | "config.mobs_of_mythology.option.drakeSpawnWeight": "Вага появи дракончика",
43 | "config.mobs_of_mythology.option.sporelingHealth": "Здоров'я споровичка",
44 | "config.mobs_of_mythology.option.redSporelingLines": "Червоні лінії від споровичка",
45 | "config.mobs_of_mythology.option.brownSporelingLines": "Коричневі лінії від споровичка",
46 | "config.mobs_of_mythology.option.sporelingSpawnWeight": "Вага появи споровичка"
47 | }
48 |
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/lang/vi_vn.json:
--------------------------------------------------------------------------------
1 | {
2 | "category.mobs_of_mythology": "Mobs of Mythology",
3 | "advancements.mobs_of_mythology.title": "Mobs of Mythology",
4 | "advancements.mobs_of_mythology.description": "Một thế giới thần thoại!",
5 | "entity.mobs_of_mythology.automaton": "Máy tự động",
6 | "entity.mobs_of_mythology.kobold": "Kobold",
7 | "entity.mobs_of_mythology.kobold_warrior": "Chiến binh Kobold",
8 | "entity.mobs_of_mythology.chupacabra": "Quỷ hút máu dê",
9 | "entity.mobs_of_mythology.drake": "Drake",
10 | "entity.mobs_of_mythology.sporeling": "Bào tử con",
11 | "item.mobs_of_mythology.automaton_spawn_egg": "Trứng máy tự động",
12 | "item.mobs_of_mythology.kobold_spawn_egg": "Trứng Kobold",
13 | "item.mobs_of_mythology.kobold_warrior_spawn_egg": "Trứng chiến binh Kobold",
14 | "item.mobs_of_mythology.chupacabra_spawn_egg": "Trứng Quỷ hút máu dê",
15 | "item.mobs_of_mythology.wendigo_spawn_egg": "Trứng Wendigo",
16 | "item.mobs_of_mythology.drake_spawn_egg": "Trứng Drake",
17 | "item.mobs_of_mythology.sporeling_spawn_egg": "Trứng Bào tử con",
18 | "item.mobs_of_mythology.automaton_head": "Đầu máy tự động",
19 | "item.mobs_of_mythology.kobold_spear": "Giáo Kobold",
20 | "item.mobs_of_mythology.bronze_ingot": "Thỏi đồng",
21 | "item.mobs_of_mythology.chupacabra_meat": "Thịt Quỷ hút máu dê sống",
22 | "item.mobs_of_mythology.cooked_chupacabra_meat": "Thịt Quỷ hút máu dê nướng xiên",
23 | "item.mobs_of_mythology.gear": "Bánh răng máy tự động",
24 | "block.mobs_of_mythology.bronze_block": "Khối Đồng",
25 | "block.mobs_of_mythology.cut_bronze_block": "Khối Đồng cắt",
26 | "config.screen.mobs_of_mythology": "Tùy chọn Mobs of Mythology",
27 | "config.mobs_of_mythology.option.automatonHealth": "Máu của máy tự động",
28 | "config.mobs_of_mythology.option.automatonAttackDamage": "Sát thương của máy tự động",
29 | "config.mobs_of_mythology.option.chupacabraHealth": "Máu của Quỷ hút máu dê",
30 | "config.mobs_of_mythology.option.chupacabraAttackDamage": "Sát thương của Quỷ hút máu dê",
31 | "config.mobs_of_mythology.option.chupacabraSpawnWeight": "Tần suất xuất hiện của Quỷ hút máu dê",
32 | "config.mobs_of_mythology.option.koboldHealth": "Máu của Kobold",
33 | "config.mobs_of_mythology.option.koboldAttackDamage": "Sát thương của Kobold",
34 | "config.mobs_of_mythology.option.koboldFleeSpeedMod": "Tốc độ chạy trốn của Kobold",
35 | "config.mobs_of_mythology.option.koboldSpawnWeight": "Tần suất xuất hiện của Kobold",
36 | "config.mobs_of_mythology.option.koboldWarriorHealth": "Máu của chiến binh Kobold",
37 | "config.mobs_of_mythology.option.koboldWarriorAttackDamage": "Sát thương của chiến binh Kobold",
38 | "config.mobs_of_mythology.option.koboldWarriorArmor": "Giáp của chiến binh Kobold",
39 | "config.mobs_of_mythology.option.koboldWarriorSpawnWeight": "Tần suất xuất hiện của chiến binh Kobold",
40 | "config.mobs_of_mythology.option.drakeHealth": "Máu của Drake",
41 | "config.mobs_of_mythology.option.drakeAttackDamage": "Sát thương của Drake",
42 | "config.mobs_of_mythology.option.drakeSpawnWeight": "Tần suất xuất hiện của Drake",
43 | "config.mobs_of_mythology.option.sporelingHealth": "Máu của Bào tử con",
44 | "config.mobs_of_mythology.option.redSporelingLines": "Vân đỏ từ Bào tử con",
45 | "config.mobs_of_mythology.option.brownSporelingLines": "Vân nâu từ Bào tử con",
46 | "config.mobs_of_mythology.option.sporelingSpawnWeight": "Tần suất xuất hiện của Bào tử con"
47 | }
48 |
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/lang/el_gr.json:
--------------------------------------------------------------------------------
1 | {
2 | "category.mobs_of_mythology": "Mobs of Mythology",
3 | "advancements.mobs_of_mythology.title": "Mobs of Mythology",
4 | "advancements.mobs_of_mythology.description": "Ένας μυθικός κόσμος!",
5 | "entity.mobs_of_mythology.automaton": "Ρομπότ",
6 | "entity.mobs_of_mythology.kobold": "Καλικάντζαρος",
7 | "entity.mobs_of_mythology.kobold_warrior": "Καλικάντζαρος Πολεμιστής",
8 | "entity.mobs_of_mythology.chupacabra": "Τσουπακαμπρά",
9 | "entity.mobs_of_mythology.drake": "Δράκος",
10 | "entity.mobs_of_mythology.sporeling": "Σπορίδιο",
11 | "item.mobs_of_mythology.automaton_spawn_egg": "Αυγό Γέννησης Ρομπότ",
12 | "item.mobs_of_mythology.kobold_spawn_egg": "Αυγό Γέννησης Καλικάντζαρου",
13 | "item.mobs_of_mythology.kobold_warrior_spawn_egg": "Αυγό Γέννησης Καλικάντζαρου Πολεμιστή",
14 | "item.mobs_of_mythology.chupacabra_spawn_egg": "Αυγό Γέννησης Τσουπακάμπρα",
15 | "item.mobs_of_mythology.wendigo_spawn_egg": "Αυγό Γέννησης Γουέντιγκο",
16 | "item.mobs_of_mythology.drake_spawn_egg": "Αυγό Γέννησης Δράκου",
17 | "item.mobs_of_mythology.sporeling_spawn_egg": "Αυγό Γέννησης Σπορίδιου",
18 | "item.mobs_of_mythology.automaton_head": "Κεφάλι Ρομπότ",
19 | "item.mobs_of_mythology.kobold_spear": "Ακόντιο Καλικάντζαρου",
20 | "item.mobs_of_mythology.bronze_ingot": "Ράβδος Ορείχαλκου",
21 | "item.mobs_of_mythology.chupacabra_meat": "Ωμό Κρέας Τσουπακάμπρα",
22 | "item.mobs_of_mythology.cooked_chupacabra_meat": "Σουβλάκι Τσουπακάμπρα",
23 | "item.mobs_of_mythology.gear": "Γρανάζι Ρομπότ",
24 | "block.mobs_of_mythology.bronze_block": "Κύβος Ορείχαλκου",
25 | "block.mobs_of_mythology.cut_bronze_block": "Κομμένος Ορείχαλκος",
26 | "config.screen.mobs_of_mythology": "Ρυθμίσεις Mobs of Mythology",
27 | "config.mobs_of_mythology.option.automatonHealth": "Ζωή Αυτόματου",
28 | "config.mobs_of_mythology.option.automatonAttackDamage": "Δύναμη Αυτόματου",
29 | "config.mobs_of_mythology.option.chupacabraHealth": "Ζωή Τσουπακάμπρα",
30 | "config.mobs_of_mythology.option.chupacabraAttackDamage": "Δύναμη Τσουπακάμπρα",
31 | "config.mobs_of_mythology.option.chupacabraSpawnWeight": "Ρυθμός Γέννησης Τσουπακάμπρα",
32 | "config.mobs_of_mythology.option.koboldHealth": "Ζωή Καλικάντζαρου",
33 | "config.mobs_of_mythology.option.koboldAttackDamage": "Δύναμη Καλικάντζαρου",
34 | "config.mobs_of_mythology.option.koboldFleeSpeedMod": "Τροποποιητής Ταχύτητας Διαφυγής Καλικάντζαρου",
35 | "config.mobs_of_mythology.option.koboldSpawnWeight": "Ρυθμός Γέννησης Καλικάντζαρου",
36 | "config.mobs_of_mythology.option.koboldWarriorHealth": "Ζωή Καλικάντζαρου Πολεμιστή",
37 | "config.mobs_of_mythology.option.koboldWarriorAttackDamage": "Δύναμη Καλικάντζαρου Πολεμιστή",
38 | "config.mobs_of_mythology.option.koboldWarriorArmor": "Αντίσταση Καλικάντζαρου Πολεμιστή",
39 | "config.mobs_of_mythology.option.koboldWarriorSpawnWeight": "Ρυθμός Γέννησης Καλικάντζαρου Πολεμιστή",
40 | "config.mobs_of_mythology.option.drakeHealth": "Ζωή Δράκου",
41 | "config.mobs_of_mythology.option.drakeAttackDamage": "Δύναμη Δράκου",
42 | "config.mobs_of_mythology.option.drakeSpawnWeight": "Ρυθμός Γέννησης Δράκου",
43 | "config.mobs_of_mythology.option.sporelingHealth": "Ζωή Σπορίδιου",
44 | "config.mobs_of_mythology.option.redSporelingLines": "Λόγια Κόκκινου Σπορίδιου",
45 | "config.mobs_of_mythology.option.brownSporelingLines": "Λόγια Καφέ Σπορίδιου",
46 | "config.mobs_of_mythology.option.sporelingSpawnWeight": "Ρυθμός Γέννησης Σπορίδιου"
47 | }
48 |
--------------------------------------------------------------------------------
/neoforge/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'com.github.johnrengelman.shadow'
3 | id "me.shedaniel.unified-publishing"
4 | }
5 |
6 | architectury {
7 | platformSetupLoomIde()
8 | neoForge()
9 | }
10 |
11 | configurations {
12 | common {
13 | canBeResolved = true
14 | canBeConsumed = false
15 | }
16 | compileClasspath.extendsFrom common
17 | runtimeClasspath.extendsFrom common
18 | developmentNeoForge.extendsFrom common
19 |
20 | // Files in this configuration will be bundled into your mod using the Shadow plugin.
21 | // Don't use the `shadow` configuration from the plugin itself as it's meant for excluding files.
22 | shadowBundle {
23 | canBeResolved = true
24 | canBeConsumed = false
25 | }
26 | }
27 |
28 | repositories {
29 | maven { url 'https://maven.neoforged.net/releases' }
30 | }
31 |
32 | dependencies {
33 | neoForge "net.neoforged:neoforge:${neoforge_version}"
34 |
35 | // Architectury API. This is optional, and you can comment it out if you don't need it.
36 | modImplementation "dev.architectury:architectury-neoforge:${architectury_api_version}"
37 |
38 | common(project(path: ':common', configuration: 'namedElements')) { transitive false }
39 | shadowBundle project(path: ':common', configuration: 'transformProductionNeoForge')
40 |
41 | implementation "mod.azure.azurelib:azurelib-neo-${minecraft_version}:${azurelib_version}"
42 | implementation "net.tslat.smartbrainlib:SmartBrainLib-neoforge-${minecraft_version}:${sbl_version}"
43 | }
44 |
45 | processResources {
46 | inputs.property 'version', project.version
47 |
48 | filesMatching('META-INF/neoforge.mods.toml') {
49 | expand version: project.version
50 | }
51 | }
52 |
53 | shadowJar {
54 | configurations = [project.configurations.shadowBundle]
55 | archiveClassifier = 'dev-shadow'
56 | }
57 |
58 | remapJar {
59 | input.set shadowJar.archiveFile
60 | }
61 |
62 | unifiedPublishing {
63 | project {
64 | displayName = "Mobs of Mythology $project.version"
65 | gameVersions = ["${minecraft_version}"]
66 | gameLoaders = ["neoforge"]
67 | releaseType = "release" // Optional, use "release", "beta" or "alpha"
68 | changelog = rootProject.file("changelog.md").text
69 |
70 | mainPublication tasks.remapJar // Declares the publicated jar
71 |
72 | relations {
73 | depends {
74 | curseforge = "architectury-api"
75 | modrinth = "architectury-api"
76 | }
77 | depends {
78 | curseforge = "azurelib"
79 | modrinth = "azurelib"
80 | }
81 | depends {
82 | curseforge = "smartbrainlib"
83 | modrinth = "smartbrainlib"
84 | }
85 | }
86 |
87 | var cfToken = System.getenv("CURSEFORGE_TOKEN")
88 | if (cfToken != null) {
89 | curseforge {
90 | token = cfToken
91 | id = "699989" // Required, must be a string, ID of CurseForge project
92 | }
93 | }
94 |
95 | var mrToken = System.getenv("MODRINTH_TOKEN")
96 | if (mrToken != null) {
97 | modrinth {
98 | token = mrToken
99 | id = "avrKhvsK" // Required, must be a string, ID of Modrinth project
100 | }
101 | }
102 | }
103 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/lang/ru_ru.json:
--------------------------------------------------------------------------------
1 | {
2 | "category.mobs_of_mythology": "Мистические существа",
3 | "advancements.mobs_of_mythology.title": "Мистические существа",
4 | "advancements.mobs_of_mythology.description": "Мистический мир!",
5 | "entity.mobs_of_mythology.automaton": "Автомат",
6 | "entity.mobs_of_mythology.kobold": "Кобольд",
7 | "entity.mobs_of_mythology.kobold_warrior": "Кобольд воин",
8 | "entity.mobs_of_mythology.chupacabra": "Чупакабра",
9 | "entity.mobs_of_mythology.drake": "Дракон",
10 | "entity.mobs_of_mythology.sporeling": "Молодой спорофит",
11 | "item.mobs_of_mythology.automaton_spawn_egg": "Яйцо призыва автомата",
12 | "item.mobs_of_mythology.kobold_spawn_egg": "Яйцо призыва кобольда",
13 | "item.mobs_of_mythology.kobold_warrior_spawn_egg": "Яйцо призыва кобольда воина",
14 | "item.mobs_of_mythology.chupacabra_spawn_egg": "Яйцо призыва чупакабры",
15 | "item.mobs_of_mythology.wendigo_spawn_egg": "Яйцо призыва вендиго",
16 | "item.mobs_of_mythology.drake_spawn_egg": "Яйцо призыва дракона",
17 | "item.mobs_of_mythology.sporeling_spawn_egg": "Яйцо призыва молодого спорофита",
18 | "item.mobs_of_mythology.automaton_head": "Голова автомата",
19 | "item.mobs_of_mythology.kobold_spear": "Копьё кобольда",
20 | "item.mobs_of_mythology.bronze_ingot": "Бронзовый слиток",
21 | "item.mobs_of_mythology.chupacabra_meat": "Сырое мясо чупакабры",
22 | "item.mobs_of_mythology.cooked_chupacabra_meat": "Мясо на шампуре из чупакабры",
23 | "item.mobs_of_mythology.gear": "Шестерёнка автомата",
24 | "block.mobs_of_mythology.bronze_block": "Бронзовый блок",
25 | "block.mobs_of_mythology.cut_bronze_block": "Резной бронзовый блок",
26 | "config.screen.mobs_of_mythology": "Настройки Mobs of Mythology",
27 | "config.mobs_of_mythology.option.automatonHealth": "Здоровье автомата",
28 | "config.mobs_of_mythology.option.automatonAttackDamage": "Урон от атаки автомата",
29 | "config.mobs_of_mythology.option.chupacabraHealth": "Здоровье чупакабры",
30 | "config.mobs_of_mythology.option.chupacabraAttackDamage": "Урон от атаки чупакабры",
31 | "config.mobs_of_mythology.option.chupacabraSpawnWeight": "Весовое значение появления чупакабры",
32 | "config.mobs_of_mythology.option.koboldHealth": "Здоровье кобольда",
33 | "config.mobs_of_mythology.option.koboldAttackDamage": "Урон от атаки кобольда",
34 | "config.mobs_of_mythology.option.koboldFleeSpeedMod": "Модификатор скорости бегства кобольда",
35 | "config.mobs_of_mythology.option.koboldSpawnWeight": "Весовое значение появления кобольда",
36 | "config.mobs_of_mythology.option.koboldWarriorHealth": "Здоровье кобольда воина",
37 | "config.mobs_of_mythology.option.koboldWarriorAttackDamage": "Урон от атаки кобольда воина",
38 | "config.mobs_of_mythology.option.koboldWarriorArmor": "Броня кобольда воина",
39 | "config.mobs_of_mythology.option.koboldWarriorSpawnWeight": "Весовое значение появления кобольда воина",
40 | "config.mobs_of_mythology.option.drakeHealth": "Здоровье дракона",
41 | "config.mobs_of_mythology.option.drakeAttackDamage": "Урон от атаки дракона",
42 | "config.mobs_of_mythology.option.drakeSpawnWeight": "Весовое значение появления дракона",
43 | "config.mobs_of_mythology.option.sporelingHealth": "Здоровье молодого спорофита",
44 | "config.mobs_of_mythology.option.redSporelingLines": "Красные линии от молодого спорофита",
45 | "config.mobs_of_mythology.option.brownSporelingLines": "Коричневые линии от молодого спорофита",
46 | "config.mobs_of_mythology.option.sporelingSpawnWeight": "Весовое значение появления молодого спорофита"
47 | }
48 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/renderer/DrakeRenderer.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer;
2 |
3 | import com.google.common.collect.Maps;
4 | import com.mojang.blaze3d.vertex.PoseStack;
5 | import java.util.Map;
6 | import mod.azure.azurelib.common.api.client.renderer.GeoEntityRenderer;
7 | import mod.azure.azurelib.common.api.client.renderer.layer.AutoGlowingGeoLayer;
8 | import net.minecraft.Util;
9 | import net.minecraft.client.renderer.MultiBufferSource;
10 | import net.minecraft.client.renderer.entity.EntityRendererProvider;
11 | import net.minecraft.resources.ResourceLocation;
12 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
13 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.model.DrakeModel;
14 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.DrakeEntity;
15 | import net.pixeldreamstudios.mobs_of_mythology.entity.variant.DrakeVariant;
16 |
17 | public class DrakeRenderer extends GeoEntityRenderer {
18 | public static final Map LOCATION_BY_VARIANT =
19 | Util.make(
20 | Maps.newEnumMap(DrakeVariant.class),
21 | (map) -> {
22 | map.put(
23 | DrakeVariant.DRAKE_1,
24 | ResourceLocation.fromNamespaceAndPath(
25 | MobsOfMythology.MOD_ID, "textures/entity/drake/drake_1.png"));
26 | map.put(
27 | DrakeVariant.DRAKE_2,
28 | ResourceLocation.fromNamespaceAndPath(
29 | MobsOfMythology.MOD_ID, "textures/entity/drake/drake_2.png"));
30 | map.put(
31 | DrakeVariant.DRAKE_3,
32 | ResourceLocation.fromNamespaceAndPath(
33 | MobsOfMythology.MOD_ID, "textures/entity/drake/drake_3.png"));
34 | map.put(
35 | DrakeVariant.DRAKE_4,
36 | ResourceLocation.fromNamespaceAndPath(
37 | MobsOfMythology.MOD_ID, "textures/entity/drake/drake_4.png"));
38 | map.put(
39 | DrakeVariant.DRAKE_5,
40 | ResourceLocation.fromNamespaceAndPath(
41 | MobsOfMythology.MOD_ID, "textures/entity/drake/drake_5.png"));
42 | map.put(
43 | DrakeVariant.DRAKE_6,
44 | ResourceLocation.fromNamespaceAndPath(
45 | MobsOfMythology.MOD_ID, "textures/entity/drake/drake_6.png"));
46 | map.put(
47 | DrakeVariant.DRAKE_7,
48 | ResourceLocation.fromNamespaceAndPath(
49 | MobsOfMythology.MOD_ID, "textures/entity/drake/drake_7.png"));
50 | });
51 |
52 | public DrakeRenderer(EntityRendererProvider.Context ctx) {
53 | super(ctx, new DrakeModel());
54 | this.shadowRadius = 0.75f;
55 | addRenderLayer(new AutoGlowingGeoLayer<>(this));
56 | }
57 |
58 | @Override
59 | public ResourceLocation getTextureLocation(DrakeEntity animatable) {
60 | return LOCATION_BY_VARIANT.get(animatable.getVariant());
61 | }
62 |
63 | @Override
64 | public void render(
65 | DrakeEntity entity,
66 | float entityYaw,
67 | float partialTick,
68 | PoseStack poseStack,
69 | MultiBufferSource bufferSource,
70 | int packedLight) {
71 | if (entity.isBaby()) {
72 | poseStack.scale(0.5f, 0.5f, 0.5f);
73 | } else {
74 | poseStack.scale(1f, 1f, 1f);
75 | }
76 | super.render(entity, entityYaw, partialTick, poseStack, bufferSource, packedLight);
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/lang/zh_cn.json:
--------------------------------------------------------------------------------
1 | {
2 | "category.mobs_of_mythology": "神话生物",
3 | "advancements.mobs_of_mythology.title": "神话生物",
4 | "advancements.mobs_of_mythology.description": "在Minecraft中发现一个充满神话生物的世界!",
5 | "advancements.mobs_of_mythology.tame_basilisk.title": "温柔的巨人",
6 | "advancements.mobs_of_mythology.tame_basilisk.description": "驯服一只致命的蛇怪",
7 | "sound.mobs_of_mythology.drake_roar": "龙兽吼叫",
8 | "sound.mobs_of_mythology.drake_death": "龙兽死亡",
9 | "sound.mobs_of_mythology.robotic_voice": "机械音",
10 | "entity.mobs_of_mythology.automaton": "自动机",
11 | "entity.mobs_of_mythology.kobold": "狗头人",
12 | "entity.mobs_of_mythology.kobold_warrior": "狗头人战士",
13 | "entity.mobs_of_mythology.chupacabra": "卓柏卡布拉",
14 | "entity.mobs_of_mythology.drake": "龙兽",
15 | "entity.mobs_of_mythology.sporeling": "孢子生物",
16 | "entity.mobs_of_mythology.basilisk": "蛇怪",
17 | "entity.mobs_of_mythology.pegasus": "天马",
18 | "item.mobs_of_mythology.automaton_spawn_egg": "自动机刷怪蛋",
19 | "item.mobs_of_mythology.kobold_spawn_egg": "狗头人刷怪蛋",
20 | "item.mobs_of_mythology.kobold_warrior_spawn_egg": "狗头人战士刷怪蛋",
21 | "item.mobs_of_mythology.chupacabra_spawn_egg": "卓柏卡布拉刷怪蛋",
22 | "item.mobs_of_mythology.wendigo_spawn_egg": "温迪戈刷怪蛋",
23 | "item.mobs_of_mythology.drake_spawn_egg": "龙兽刷怪蛋",
24 | "item.mobs_of_mythology.sporeling_spawn_egg": "孢子生物刷怪蛋",
25 | "item.mobs_of_mythology.basilisk_spawn_egg": "蛇怪刷怪蛋",
26 | "item.mobs_of_mythology.pegasus_spawn_egg": "天马刷怪蛋",
27 | "item.mobs_of_mythology.automaton_head": "自动机头颅",
28 | "item.mobs_of_mythology.basilisk_head": "蛇怪头颅",
29 | "item.mobs_of_mythology.kobold_spear": "狗头人矛",
30 | "item.mobs_of_mythology.bronze_ingot": "青铜锭",
31 | "item.mobs_of_mythology.chupacabra_meat": "卓柏卡布拉肉",
32 | "item.mobs_of_mythology.cooked_chupacabra_meat": "熟卓柏卡布拉肉",
33 | "item.mobs_of_mythology.gear": "自动机齿轮",
34 | "block.mobs_of_mythology.bronze_block": "青铜块",
35 | "block.mobs_of_mythology.cut_bronze_block": "切割青铜块",
36 | "config.screen.mobs_of_mythology": "神话生物配置",
37 | "config.mobs_of_mythology.option.automatonHealth": "自动机生命值",
38 | "config.mobs_of_mythology.option.automatonAttackDamage": "自动机攻击伤害",
39 | "config.mobs_of_mythology.option.chupacabraHealth": "卓柏卡布拉生命值",
40 | "config.mobs_of_mythology.option.chupacabraAttackDamage": "卓柏卡布拉攻击伤害",
41 | "config.mobs_of_mythology.option.chupacabraSpawnWeight": "卓柏卡布拉生成权重",
42 | "config.mobs_of_mythology.option.koboldHealth": "狗头人生命值",
43 | "config.mobs_of_mythology.option.koboldAttackDamage": "狗头人攻击伤害",
44 | "config.mobs_of_mythology.option.koboldFleeSpeedMod": "狗头人逃跑速度修正",
45 | "config.mobs_of_mythology.option.koboldSpawnWeight": "狗头人生成权重",
46 | "config.mobs_of_mythology.option.koboldWarriorHealth": "狗头人战士生命值",
47 | "config.mobs_of_mythology.option.koboldWarriorAttackDamage": "狗头人战士攻击伤害",
48 | "config.mobs_of_mythology.option.koboldWarriorArmor": "狗头人战士护甲值",
49 | "config.mobs_of_mythology.option.koboldWarriorSpawnWeight": "狗头人战士生成权重",
50 | "config.mobs_of_mythology.option.drakeHealth": "龙兽生命值",
51 | "config.mobs_of_mythology.option.drakeAttackDamage": "龙兽攻击伤害",
52 | "config.mobs_of_mythology.option.drakeSpawnWeight": "龙兽生成权重",
53 | "config.mobs_of_mythology.option.sporelingHealth": "孢子生物生命值",
54 | "config.mobs_of_mythology.option.redSporelingLines": "红色孢子生物数量",
55 | "config.mobs_of_mythology.option.brownSporelingLines": "棕色孢子生物数量",
56 | "config.mobs_of_mythology.option.sporelingSpawnWeight": "孢子生物生成权重",
57 | "config.mobs_of_mythology.option.basiliskHealth": "蛇怪生命值",
58 | "config.mobs_of_mythology.option.basiliskAttackDamage": "蛇怪攻击伤害",
59 | "config.mobs_of_mythology.option.pegasusHealth": "天马生命值"
60 | }
--------------------------------------------------------------------------------
/fabric/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'com.github.johnrengelman.shadow'
3 | id "me.shedaniel.unified-publishing"
4 | }
5 |
6 | architectury {
7 | platformSetupLoomIde()
8 | fabric()
9 | }
10 |
11 | configurations {
12 | common {
13 | canBeResolved = true
14 | canBeConsumed = false
15 | }
16 | compileClasspath.extendsFrom common
17 | runtimeClasspath.extendsFrom common
18 | developmentFabric.extendsFrom common
19 |
20 | // Files in this configuration will be bundled into your mod using the Shadow plugin.
21 | // Don't use the `shadow` configuration from the plugin itself as it's meant for excluding files.
22 | shadowBundle {
23 | canBeResolved = true
24 | canBeConsumed = false
25 | }
26 | }
27 |
28 | repositories {
29 | maven { url 'https://maven.terraformersmc.com/releases' } // Needed for Fabric only at the moment (for AzureLib)
30 | }
31 |
32 | dependencies {
33 | modImplementation "net.fabricmc:fabric-loader:${fabric_loader_version}"
34 |
35 | // Fabric API. This is technically optional, but you probably want it anyway.
36 | modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_api_version}"
37 |
38 | // Architectury API. This is optional, and you can comment it out if you don't need it.
39 | modImplementation "dev.architectury:architectury-fabric:${architectury_api_version}"
40 |
41 | common(project(path: ':common', configuration: 'namedElements')) { transitive false }
42 | shadowBundle project(path: ':common', configuration: 'transformProductionFabric')
43 |
44 | modImplementation "mod.azure.azurelib:azurelib-fabric-${minecraft_version}:${azurelib_version}"
45 | modApi "com.terraformersmc:modmenu:${modmenu_version}" // Fabric bug is requiring this
46 | modImplementation "net.tslat.smartbrainlib:SmartBrainLib-fabric-${minecraft_version}:${sbl_version}"
47 | }
48 |
49 | processResources {
50 | inputs.property 'version', project.version
51 |
52 | filesMatching('fabric.mod.json') {
53 | expand version: project.version
54 | }
55 | }
56 |
57 | shadowJar {
58 | configurations = [project.configurations.shadowBundle]
59 | archiveClassifier = 'dev-shadow'
60 | }
61 |
62 | remapJar {
63 | input.set shadowJar.archiveFile
64 | }
65 |
66 | unifiedPublishing {
67 | project {
68 | displayName = "Mobs of Mythology $project.version"
69 | gameVersions = ["${minecraft_version}"]
70 | gameLoaders = ["fabric"]
71 | releaseType = "release" // Optional, use "release", "beta" or "alpha"
72 | changelog = rootProject.file("changelog.md").text
73 |
74 | mainPublication tasks.remapJar // Declares the publicated jar
75 |
76 | relations {
77 | depends {
78 | curseforge = "architectury-api"
79 | modrinth = "architectury-api"
80 | }
81 | depends {
82 | curseforge = "azurelib"
83 | modrinth = "azurelib"
84 | }
85 | depends {
86 | curseforge = "smartbrainlib"
87 | modrinth = "smartbrainlib"
88 | }
89 | }
90 |
91 | var cfToken = System.getenv("CURSEFORGE_TOKEN")
92 | if (cfToken != null) {
93 | curseforge {
94 | token = cfToken
95 | id = "699989" // Required, must be a string, ID of CurseForge project
96 | }
97 | }
98 |
99 | var mrToken = System.getenv("MODRINTH_TOKEN")
100 | if (mrToken != null) {
101 | modrinth {
102 | token = mrToken
103 | id = "avrKhvsK" // Required, must be a string, ID of Modrinth project
104 | }
105 | }
106 | }
107 | }
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/lang/en_us.json:
--------------------------------------------------------------------------------
1 | {
2 | "category.mobs_of_mythology": "Mobs of Mythology",
3 | "advancements.mobs_of_mythology.title": "Mobs of Mythology",
4 | "advancements.mobs_of_mythology.description": "Discover a World of Mythological Creatures in Minecraft!",
5 | "advancements.mobs_of_mythology.tame_basilisk.title": "Gentle Giant",
6 | "advancements.mobs_of_mythology.tame_basilisk.description": "Tame a deadly Basilisk",
7 | "sound.mobs_of_mythology.drake_roar": "Drake roar",
8 | "sound.mobs_of_mythology.drake_death": "Drake death",
9 | "sound.mobs_of_mythology.robotic_voice": "Robotic voice",
10 | "entity.mobs_of_mythology.automaton": "Automaton",
11 | "entity.mobs_of_mythology.kobold": "Kobold",
12 | "entity.mobs_of_mythology.kobold_warrior": "Kobold Warrior",
13 | "entity.mobs_of_mythology.chupacabra": "Chupacabra",
14 | "entity.mobs_of_mythology.drake": "Drake",
15 | "entity.mobs_of_mythology.sporeling": "Sporeling",
16 | "entity.mobs_of_mythology.basilisk": "Basilisk",
17 | "entity.mobs_of_mythology.pegasus": "Pegasus",
18 | "item.mobs_of_mythology.automaton_spawn_egg": "Automaton Spawn Egg",
19 | "item.mobs_of_mythology.kobold_spawn_egg": "Kobold Spawn Egg",
20 | "item.mobs_of_mythology.kobold_warrior_spawn_egg": "Kobold Warrior Spawn Egg",
21 | "item.mobs_of_mythology.chupacabra_spawn_egg": "Chupacabra Spawn Egg",
22 | "item.mobs_of_mythology.wendigo_spawn_egg": "Wendigo Spawn Egg",
23 | "item.mobs_of_mythology.drake_spawn_egg": "Drake Spawn Egg",
24 | "item.mobs_of_mythology.sporeling_spawn_egg": "Sporeling Spawn Egg",
25 | "item.mobs_of_mythology.basilisk_spawn_egg": "Basilisk Spawn Egg",
26 | "item.mobs_of_mythology.pegasus_spawn_egg": "Pegasus Spawn Egg",
27 | "item.mobs_of_mythology.automaton_head": "Automaton Head",
28 | "item.mobs_of_mythology.basilisk_head": "Automaton Head",
29 | "item.mobs_of_mythology.kobold_spear": "Kobold Spear",
30 | "item.mobs_of_mythology.bronze_ingot": "Bronze Ingot",
31 | "item.mobs_of_mythology.chupacabra_meat": "Chupacabra Meat",
32 | "item.mobs_of_mythology.cooked_chupacabra_meat": "Cooked Chupacabra Meat",
33 | "item.mobs_of_mythology.gear": "Automaton Gear",
34 | "block.mobs_of_mythology.bronze_block": "Bronze Block",
35 | "block.mobs_of_mythology.cut_bronze_block": "Cut Bronze Block",
36 | "config.screen.mobs_of_mythology": "Mobs of Mythology Config",
37 | "config.mobs_of_mythology.option.automatonHealth": "Automaton Health",
38 | "config.mobs_of_mythology.option.automatonAttackDamage": "Automaton Attack Damage",
39 | "config.mobs_of_mythology.option.chupacabraHealth": "Chupacabra Health",
40 | "config.mobs_of_mythology.option.chupacabraAttackDamage": "Chupacabra Attack Damage",
41 | "config.mobs_of_mythology.option.chupacabraSpawnWeight": "Chupacabra Spawn Weight",
42 | "config.mobs_of_mythology.option.koboldHealth": "Kobold Health",
43 | "config.mobs_of_mythology.option.koboldAttackDamage": "Kobold Attack Damage",
44 | "config.mobs_of_mythology.option.koboldFleeSpeedMod": "Kobold Flee Speed Modifier",
45 | "config.mobs_of_mythology.option.koboldSpawnWeight": "Kobold Spawn Weight",
46 | "config.mobs_of_mythology.option.shouldKoboldsSteal": "Should Kobolds Steal",
47 | "config.mobs_of_mythology.option.koboldWarriorHealth": "Kobold Warrior Health",
48 | "config.mobs_of_mythology.option.koboldWarriorAttackDamage": "Kobold Warrior Attack Damage",
49 | "config.mobs_of_mythology.option.koboldWarriorArmor": "Kobold Warrior Armor",
50 | "config.mobs_of_mythology.option.koboldWarriorSpawnWeight": "Kobold Warrior Spawn Weight",
51 | "config.mobs_of_mythology.option.drakeHealth": "Drake Health",
52 | "config.mobs_of_mythology.option.drakeAttackDamage": "Drake Attack Damage",
53 | "config.mobs_of_mythology.option.drakeSpawnWeight": "Drake Spawn Weight",
54 | "config.mobs_of_mythology.option.sporelingHealth": "Sporeling Health",
55 | "config.mobs_of_mythology.option.redSporelingLines": "Red Sporeling Lines",
56 | "config.mobs_of_mythology.option.brownSporelingLines": "Brown Sporeling Lines",
57 | "config.mobs_of_mythology.option.sporelingSpawnWeight": "Sporeling Spawn Weight",
58 | "config.mobs_of_mythology.option.basiliskHealth": "Basilisk Health",
59 | "config.mobs_of_mythology.option.basiliskAttackDamage": "Basilisk Attack Damage",
60 | "config.mobs_of_mythology.option.pegasusHealth": "Pegasus Health",
61 | "config.mobs_of_mythology.option.pegasusSpawnWeight": "Pegasus Spawn Weight"
62 | }
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/renderer/BasiliskRenderer.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer;
2 |
3 | import com.mojang.blaze3d.vertex.PoseStack;
4 | import com.mojang.blaze3d.vertex.VertexConsumer;
5 | import com.mojang.math.Axis;
6 | import mod.azure.azurelib.common.api.client.renderer.GeoEntityRenderer;
7 | import mod.azure.azurelib.common.api.client.renderer.layer.AutoGlowingGeoLayer;
8 | import mod.azure.azurelib.common.api.client.renderer.layer.BlockAndItemGeoLayer;
9 | import mod.azure.azurelib.common.internal.common.cache.object.BakedGeoModel;
10 | import mod.azure.azurelib.common.internal.common.cache.object.GeoBone;
11 | import net.minecraft.client.renderer.MultiBufferSource;
12 | import net.minecraft.client.renderer.entity.EntityRendererProvider;
13 | import net.minecraft.resources.ResourceLocation;
14 | import net.minecraft.world.item.ItemDisplayContext;
15 | import net.minecraft.world.item.ItemStack;
16 | import net.minecraft.world.item.Items;
17 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
18 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.model.BasiliskModel;
19 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.BasiliskEntity;
20 | import org.jetbrains.annotations.Nullable;
21 |
22 | public class BasiliskRenderer extends GeoEntityRenderer {
23 | public BasiliskRenderer(EntityRendererProvider.Context ctx) {
24 | super(ctx, new BasiliskModel());
25 | this.shadowRadius = 0.75f;
26 | addRenderLayer(new AutoGlowingGeoLayer<>(this));
27 | addRenderLayer(
28 | new BlockAndItemGeoLayer<>(this) {
29 | @Nullable
30 | @Override
31 | protected ItemStack getStackForBone(GeoBone bone, BasiliskEntity animatable) {
32 | if (animatable.hasChest()
33 | && (bone.getName().equals("chest_left") || bone.getName().equals("chest_right"))) {
34 | return new ItemStack(Items.CHEST);
35 | }
36 | return null;
37 | }
38 |
39 | @Override
40 | protected ItemDisplayContext getTransformTypeForStack(
41 | GeoBone bone, ItemStack stack, BasiliskEntity animatable) {
42 | if (animatable.hasChest()) {
43 | return ItemDisplayContext.FIXED;
44 | }
45 | return ItemDisplayContext.NONE;
46 | }
47 |
48 | @Override
49 | protected void renderStackForBone(
50 | PoseStack poseStack,
51 | GeoBone bone,
52 | ItemStack stack,
53 | BasiliskEntity animatable,
54 | MultiBufferSource bufferSource,
55 | float partialTick,
56 | int packedLight,
57 | int packedOverlay) {
58 | if (bone.getName().equals("chest_left")) {
59 | poseStack.mulPose(Axis.YP.rotationDegrees(90));
60 | } else if (bone.getName().equals("chest_right")) {
61 | poseStack.mulPose(Axis.YP.rotationDegrees(-90));
62 | }
63 | super.renderStackForBone(
64 | poseStack,
65 | bone,
66 | stack,
67 | animatable,
68 | bufferSource,
69 | partialTick,
70 | packedLight,
71 | packedOverlay);
72 | }
73 | });
74 | }
75 |
76 | @Override
77 | public void preRender(
78 | PoseStack poseStack,
79 | BasiliskEntity animatable,
80 | BakedGeoModel model,
81 | MultiBufferSource bufferSource,
82 | VertexConsumer buffer,
83 | boolean isReRender,
84 | float partialTick,
85 | int packedLight,
86 | int packedOverlay,
87 | int colour) {
88 | super.preRender(
89 | poseStack,
90 | animatable,
91 | model,
92 | bufferSource,
93 | buffer,
94 | isReRender,
95 | partialTick,
96 | packedLight,
97 | packedOverlay,
98 | colour);
99 | model.getBone("saddle").get().setHidden(!animatable.isSaddled());
100 | }
101 |
102 | @Override
103 | public ResourceLocation getTextureLocation(BasiliskEntity animatable) {
104 | return ResourceLocation.fromNamespaceAndPath(
105 | MobsOfMythology.MOD_ID, "textures/entity/basilisk.png");
106 | }
107 | }
108 |
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/lang/pt_br.json:
--------------------------------------------------------------------------------
1 | {
2 | "category.mobs_of_mythology": "Mobs of Mythology",
3 | "advancements.mobs_of_mythology.title": "Mobs of Mythology",
4 | "advancements.mobs_of_mythology.description": "Descubra um Mundo de Criaturas Mitológicas no Minecraft!",
5 | "advancements.mobs_of_mythology.tame_basilisk.title": "Gigante Gentil",
6 | "advancements.mobs_of_mythology.tame_basilisk.description": "Dome um Basilisco mortal",
7 | "sound.mobs_of_mythology.drake_roar": "Rugido do Draco",
8 | "sound.mobs_of_mythology.drake_death": "Morte do Draco",
9 | "sound.mobs_of_mythology.robotic_voice": "Voz robótica",
10 | "entity.mobs_of_mythology.automaton": "Autômato",
11 | "entity.mobs_of_mythology.kobold": "Kobold",
12 | "entity.mobs_of_mythology.kobold_warrior": "Guerreiro Kobold",
13 | "entity.mobs_of_mythology.chupacabra": "Chupa-cabra",
14 | "entity.mobs_of_mythology.drake": "Draco",
15 | "entity.mobs_of_mythology.sporeling": "Esporos",
16 | "entity.mobs_of_mythology.basilisk": "Basilisco",
17 | "entity.mobs_of_mythology.pegasus": "Pegasus",
18 | "item.mobs_of_mythology.automaton_spawn_egg": "Ovo Geração de Autômato",
19 | "item.mobs_of_mythology.kobold_spawn_egg": "Ovo Gerador de Kobold",
20 | "item.mobs_of_mythology.kobold_warrior_spawn_egg": "Ovo Gerador de Guerreiro Kobold",
21 | "item.mobs_of_mythology.chupacabra_spawn_egg": "Ovo Gerador de Chupacabra",
22 | "item.mobs_of_mythology.wendigo_spawn_egg": "Ovo Gerador de Wendigo",
23 | "item.mobs_of_mythology.drake_spawn_egg": "Ovo Gerador de Draco",
24 | "item.mobs_of_mythology.sporeling_spawn_egg": "Ovo Gerador de Esporos",
25 | "item.mobs_of_mythology.basilisk_spawn_egg": "Ovo Gerador de Basilisco",
26 | "item.mobs_of_mythology.pegasus_spawn_egg": "Ovo Gerador de Pegasus",
27 | "item.mobs_of_mythology.automaton_head": "Cabeça de Autômato",
28 | "item.mobs_of_mythology.basilisk_head": "Cabeça de Basilisco",
29 | "item.mobs_of_mythology.kobold_spear": "Lança Kobold",
30 | "item.mobs_of_mythology.bronze_ingot": "Barra de Bronze",
31 | "item.mobs_of_mythology.chupacabra_meat": "Carne Crua de Chupa-cabra",
32 | "item.mobs_of_mythology.cooked_chupacabra_meat": "Carne Cozida de Chupa-cabra",
33 | "item.mobs_of_mythology.gear": "Engrenagem de Autômato",
34 | "block.mobs_of_mythology.bronze_block": "Bloco de Bronze",
35 | "block.mobs_of_mythology.cut_bronze_block": "Bloco de Bronze Talhado",
36 | "config.screen.mobs_of_mythology": "Opções do Mobs of Mythology",
37 | "config.mobs_of_mythology.option.automatonHealth": "Vida do Autômato",
38 | "config.mobs_of_mythology.option.automatonAttackDamage": "Dano de Ataque do Autômato",
39 | "config.mobs_of_mythology.option.chupacabraHealth": "Vida do Chupa-cabra",
40 | "config.mobs_of_mythology.option.chupacabraAttackDamage": "Dano de Ataque do Chupa-cabra",
41 | "config.mobs_of_mythology.option.chupacabraSpawnWeight": "Taxa de Geração do Chupa-cabra",
42 | "config.mobs_of_mythology.option.koboldHealth": "Vida do Kobold",
43 | "config.mobs_of_mythology.option.koboldAttackDamage": "Dano de Ataque do Kobold",
44 | "config.mobs_of_mythology.option.koboldFleeSpeedMod": "Modificador de Velocidade de Fuga do Kobold",
45 | "config.mobs_of_mythology.option.koboldSpawnWeight": "Taxa de Geração do Kobold",
46 | "config.mobs_of_mythology.option.shouldKoboldsSteal": "Kobolds Devem Roubar",
47 | "config.mobs_of_mythology.option.koboldWarriorHealth": "Vida do Guerreiro Kobold",
48 | "config.mobs_of_mythology.option.koboldWarriorAttackDamage": "Dano de Ataque do Guerreiro Kobold",
49 | "config.mobs_of_mythology.option.koboldWarriorArmor": "Armadura do Guerreiro Kobold",
50 | "config.mobs_of_mythology.option.koboldWarriorSpawnWeight": "Taxa de Geração do Guerreiro Kobold",
51 | "config.mobs_of_mythology.option.drakeHealth": "Vida do Draco",
52 | "config.mobs_of_mythology.option.drakeAttackDamage": "Dano de Ataque do Draco",
53 | "config.mobs_of_mythology.option.drakeSpawnWeight": "Taxa de Geração do Draco",
54 | "config.mobs_of_mythology.option.sporelingHealth": "Vida do Esporos",
55 | "config.mobs_of_mythology.option.redSporelingLines": "Falas do Esporos Vermelho",
56 | "config.mobs_of_mythology.option.brownSporelingLines": "Falas do Esporos Marrom",
57 | "config.mobs_of_mythology.option.sporelingSpawnWeight": "Taxa de Geração do Esporos",
58 | "config.mobs_of_mythology.option.basiliskHealth": "Vida do Basilisco",
59 | "config.mobs_of_mythology.option.basiliskAttackDamage": "Dano de Ataque do Basilisco",
60 | "config.mobs_of_mythology.option.pegasusHealth": "Vida do Pegasus",
61 | "config.mobs_of_mythology.option.pegasusSpawnWeight": "Taxa de Geração do Pegasus"
62 | }
63 |
--------------------------------------------------------------------------------
/common/src/main/resources/assets/mobs_of_mythology/geo/entity/sporeling.geo.json:
--------------------------------------------------------------------------------
1 | {
2 | "format_version": "1.12.0",
3 | "minecraft:geometry": [
4 | {
5 | "description": {
6 | "identifier": "geometry.sporeling",
7 | "texture_width": 64,
8 | "texture_height": 32,
9 | "visible_bounds_width": 2,
10 | "visible_bounds_height": 2.5,
11 | "visible_bounds_offset": [
12 | 0,
13 | 0.75,
14 | 0
15 | ]
16 | },
17 | "bones": [
18 | {
19 | "name": "sporeling",
20 | "pivot": [
21 | 0,
22 | 4,
23 | 0
24 | ]
25 | },
26 | {
27 | "name": "body",
28 | "parent": "sporeling",
29 | "pivot": [
30 | 0,
31 | 3,
32 | 0
33 | ],
34 | "cubes": [
35 | {
36 | "origin": [
37 | -4,
38 | 3,
39 | -4
40 | ],
41 | "size": [
42 | 8,
43 | 6,
44 | 8
45 | ],
46 | "uv": [
47 | 0,
48 | 0
49 | ]
50 | }
51 | ]
52 | },
53 | {
54 | "name": "head",
55 | "parent": "body",
56 | "pivot": [
57 | 0,
58 | 11,
59 | 0
60 | ],
61 | "cubes": [
62 | {
63 | "origin": [
64 | -7,
65 | 9,
66 | -7
67 | ],
68 | "size": [
69 | 14,
70 | 4,
71 | 14
72 | ],
73 | "uv": [
74 | 0,
75 | 14
76 | ]
77 | }
78 | ]
79 | },
80 | {
81 | "name": "right_arm",
82 | "parent": "body",
83 | "pivot": [
84 | -3,
85 | 7,
86 | 0
87 | ],
88 | "cubes": [
89 | {
90 | "origin": [
91 | -6,
92 | 3,
93 | -1.5
94 | ],
95 | "size": [
96 | 2,
97 | 5,
98 | 3
99 | ],
100 | "uv": [
101 | 2,
102 | 14
103 | ],
104 | "mirror": true
105 | }
106 | ]
107 | },
108 | {
109 | "name": "left_arm",
110 | "parent": "body",
111 | "pivot": [
112 | 4,
113 | 7,
114 | 0
115 | ],
116 | "cubes": [
117 | {
118 | "origin": [
119 | 4,
120 | 3,
121 | -1.5
122 | ],
123 | "size": [
124 | 2,
125 | 5,
126 | 3
127 | ],
128 | "uv": [
129 | 2,
130 | 14
131 | ]
132 | }
133 | ]
134 | },
135 | {
136 | "name": "right_leg",
137 | "parent": "sporeling",
138 | "pivot": [
139 | -1.5,
140 | 3,
141 | 0
142 | ],
143 | "cubes": [
144 | {
145 | "origin": [
146 | -3.5,
147 | 0,
148 | -1.5
149 | ],
150 | "size": [
151 | 3,
152 | 3,
153 | 3
154 | ],
155 | "uv": [
156 | 2,
157 | 22
158 | ],
159 | "mirror": true
160 | }
161 | ]
162 | },
163 | {
164 | "name": "left_leg",
165 | "parent": "sporeling",
166 | "pivot": [
167 | 2.5,
168 | 3,
169 | 0
170 | ],
171 | "cubes": [
172 | {
173 | "origin": [
174 | 0.5,
175 | 0,
176 | -1.5
177 | ],
178 | "size": [
179 | 3,
180 | 3,
181 | 3
182 | ],
183 | "uv": [
184 | 2,
185 | 22
186 | ]
187 | }
188 | ]
189 | }
190 | ]
191 | }
192 | ]
193 | }
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/mobs/KoboldWarriorEntity.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.mobs;
2 |
3 | import it.unimi.dsi.fastutil.objects.ObjectArrayList;
4 | import java.util.List;
5 | import net.minecraft.Util;
6 | import net.minecraft.world.DifficultyInstance;
7 | import net.minecraft.world.InteractionHand;
8 | import net.minecraft.world.entity.EntityType;
9 | import net.minecraft.world.entity.MobSpawnType;
10 | import net.minecraft.world.entity.SpawnGroupData;
11 | import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
12 | import net.minecraft.world.entity.ai.attributes.Attributes;
13 | import net.minecraft.world.entity.animal.IronGolem;
14 | import net.minecraft.world.entity.monster.Monster;
15 | import net.minecraft.world.entity.npc.Villager;
16 | import net.minecraft.world.entity.player.Player;
17 | import net.minecraft.world.item.ItemStack;
18 | import net.minecraft.world.level.Level;
19 | import net.minecraft.world.level.ServerLevelAccessor;
20 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
21 | import net.pixeldreamstudios.mobs_of_mythology.entity.AbstractMythMonsterEntity;
22 | import net.pixeldreamstudios.mobs_of_mythology.entity.variant.KoboldWarriorVariant;
23 | import net.pixeldreamstudios.mobs_of_mythology.registry.ItemRegistry;
24 | import net.tslat.smartbrainlib.api.core.BrainActivityGroup;
25 | import net.tslat.smartbrainlib.api.core.behaviour.custom.attack.AnimatableMeleeAttack;
26 | import net.tslat.smartbrainlib.api.core.behaviour.custom.path.SetWalkTargetToAttackTarget;
27 | import net.tslat.smartbrainlib.api.core.behaviour.custom.target.InvalidateAttackTarget;
28 | import net.tslat.smartbrainlib.api.core.sensor.ExtendedSensor;
29 | import net.tslat.smartbrainlib.api.core.sensor.vanilla.HurtBySensor;
30 | import net.tslat.smartbrainlib.api.core.sensor.vanilla.NearbyLivingEntitySensor;
31 | import org.jetbrains.annotations.Nullable;
32 |
33 | public class KoboldWarriorEntity extends AbstractKoboldEntity {
34 | public KoboldWarriorEntity(EntityType extends AbstractKoboldEntity> entityType, Level world) {
35 | super(entityType, world, Monster.XP_REWARD_MEDIUM);
36 | this.setItemInHand(InteractionHand.MAIN_HAND, new ItemStack(ItemRegistry.KOBOLD_SPEAR, 1));
37 | }
38 |
39 | public static AttributeSupplier.Builder createAttributes() {
40 | return Monster.createMobAttributes()
41 | .add(Attributes.MAX_HEALTH, MobsOfMythology.config.koboldWarriorHealth)
42 | .add(Attributes.ARMOR, MobsOfMythology.config.koboldWarriorArmor)
43 | .add(Attributes.ATTACK_DAMAGE, MobsOfMythology.config.koboldWarriorAttackDamage)
44 | .add(Attributes.ATTACK_SPEED, 2)
45 | .add(Attributes.ATTACK_KNOCKBACK, 1)
46 | .add(Attributes.MOVEMENT_SPEED, 0.3);
47 | }
48 |
49 | @Override
50 | public SpawnGroupData finalizeSpawn(
51 | ServerLevelAccessor world,
52 | DifficultyInstance difficulty,
53 | MobSpawnType spawnReason,
54 | @Nullable SpawnGroupData entityData) {
55 | KoboldWarriorVariant variant = Util.getRandom(KoboldWarriorVariant.values(), this.random);
56 | setVariant(variant);
57 | return super.finalizeSpawn(world, difficulty, spawnReason, entityData);
58 | }
59 |
60 | @Override
61 | public List> getSensors() {
62 | return ObjectArrayList.of(
63 | new NearbyLivingEntitySensor()
64 | .setPredicate(
65 | (target, entity) -> {
66 | return target instanceof Player
67 | || target instanceof Villager
68 | || target instanceof IronGolem
69 | || target instanceof AutomatonEntity;
70 | }),
71 | new HurtBySensor<>());
72 | }
73 |
74 | @Override
75 | public BrainActivityGroup getFightTasks() {
76 | return BrainActivityGroup.fightTasks(
77 | new InvalidateAttackTarget<>()
78 | .invalidateIf((target, entity) -> !target.isAlive() || !entity.hasLineOfSight(target)),
79 | new SetWalkTargetToAttackTarget<>().speedMod((mob, livingEntity) -> 1.25f),
80 | new AnimatableMeleeAttack<>(6)
81 | .whenStarting(
82 | mob -> {
83 | this.triggerAnim("attackController", "attack");
84 | }));
85 | }
86 |
87 | @Override
88 | public T getVariant() {
89 | return (T) KoboldWarriorVariant.byId(this.getTypeVariant() & 255);
90 | }
91 |
92 | private void setVariant(KoboldWarriorVariant variant) {
93 | this.entityData.set(DATA_ID_TYPE_VARIANT, variant.getId() & 255);
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/MobsOfMythologyConfig.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology;
2 |
3 | import mod.azure.azurelib.common.api.common.config.Config;
4 | import mod.azure.azurelib.common.internal.common.config.Configurable;
5 |
6 | @Config(id = MobsOfMythology.MOD_ID)
7 | public class MobsOfMythologyConfig {
8 | @Configurable
9 | @Configurable.Synchronized
10 | @Configurable.DecimalRange(min = 1)
11 | public double automatonHealth = 100.0;
12 |
13 | @Configurable
14 | @Configurable.Synchronized
15 | @Configurable.DecimalRange(min = 1)
16 | public double automatonAttackDamage = 16.0;
17 |
18 | @Configurable
19 | @Configurable.Synchronized
20 | @Configurable.DecimalRange(min = 1)
21 | public double chupacabraHealth = 16.0;
22 |
23 | @Configurable
24 | @Configurable.Synchronized
25 | @Configurable.DecimalRange(min = 1)
26 | public double chupacabraAttackDamage = 6.0;
27 |
28 | @Configurable @Configurable.Synchronized public int chupacabraSpawnWeight = 15;
29 |
30 | @Configurable
31 | @Configurable.Synchronized
32 | @Configurable.DecimalRange(min = 1)
33 | public double koboldHealth = 10.0;
34 |
35 | @Configurable
36 | @Configurable.Synchronized
37 | @Configurable.DecimalRange(min = 1)
38 | public double koboldAttackDamage = 1.5;
39 |
40 | @Configurable
41 | @Configurable.Synchronized
42 | @Configurable.DecimalRange(min = 1.0f)
43 | public float koboldFleeSpeedMod = 2.0f;
44 |
45 | @Configurable @Configurable.Synchronized public int koboldSpawnWeight = 10;
46 | @Configurable @Configurable.Synchronized public boolean shouldKoboldsSteal = true;
47 |
48 | @Configurable
49 | @Configurable.Synchronized
50 | @Configurable.DecimalRange(min = 1)
51 | public double koboldWarriorHealth = 20.0;
52 |
53 | @Configurable
54 | @Configurable.Synchronized
55 | @Configurable.DecimalRange(min = 1)
56 | public double koboldWarriorArmor = 6.0;
57 |
58 | @Configurable
59 | @Configurable.Synchronized
60 | @Configurable.DecimalRange(min = 1)
61 | public double koboldWarriorAttackDamage = 5.5;
62 |
63 | @Configurable @Configurable.Synchronized public int koboldWarriorSpawnWeight = 10;
64 |
65 | @Configurable
66 | @Configurable.Synchronized
67 | @Configurable.DecimalRange(min = 1)
68 | public double drakeHealth = 30.0;
69 |
70 | @Configurable
71 | @Configurable.Synchronized
72 | @Configurable.DecimalRange(min = 1)
73 | public double drakeAttackDamage = 5.0;
74 |
75 | @Configurable
76 | @Configurable.Synchronized
77 | @Configurable.DecimalRange(min = 1)
78 | public double basiliskHealth = 100.0;
79 |
80 | @Configurable
81 | @Configurable.Synchronized
82 | @Configurable.DecimalRange(min = 1)
83 | public double basiliskAttackDamage = 8.0;
84 |
85 | @Configurable
86 | @Configurable.Synchronized
87 | @Configurable.DecimalRange(min = 1)
88 | public double pegasusHealth = 50.0;
89 |
90 | @Configurable @Configurable.Synchronized public int pegasusSpawnWeight = 10;
91 | @Configurable @Configurable.Synchronized public int drakeSpawnWeight = 10;
92 |
93 | @Configurable
94 | @Configurable.Synchronized
95 | @Configurable.DecimalRange(min = 1)
96 | public double sporelingHealth = 6.0;
97 |
98 | @Configurable @Configurable.Synchronized
99 | public String[] redSporelingLines = {
100 | "playerGreeting",
101 | "Seen any smurfs lately?",
102 | "I hate Gargamel...",
103 | "Mondays, huh?",
104 | "You're a big fellow!",
105 | "Please don't eat me!",
106 | "Why did the Creeper hang out with me? Because I'm such a fun-gi to be around!",
107 | "They say I'm a fun-gi, but I think I'm just a cap-tivating conversationalist!",
108 | "Looking for a spore-tacular time? You've found the right mushroom!",
109 | "Did you hear about the fungi who threw a party? It was a real spore-gy!",
110 | "I'm not edibles!",
111 | "My cousin Brownie is an alchemist.",
112 | "Do you know of a bard named Smash Mouth? I hear he's an All Star.",
113 | "I'm not a regular mushroom; I'm a spore-tacular mushroom!",
114 | "Some people blame me for the apocalypse...",
115 | "Γειά σου Ελλάδα!"
116 | };
117 |
118 | @Configurable @Configurable.Synchronized
119 | public String[] brownSporelingLines = {
120 | "Why do I feel like a fun-guy in a no-fun zone?",
121 | "You want a piece of my spore attitude? Take a hike!",
122 | "Life's a spore-t, and then you decompose.",
123 | "Step back, or I'll give you a spore-tacular scowl!",
124 | "Why do players always pick on mushrooms? Can't we just have a cap-py existence?",
125 | "I'd rather be left alone in my dark corner. No mushroom for company!",
126 | "I don't have mushroom for joy, just a whole lot of fung-titude!",
127 | "Have a fung-tastic day...",
128 | "I am responsible for the apocalypse.",
129 | "I'm not grumpy, I'm just a fungi with a perpetual frown.",
130 | "Why are you bothering me? Can't you see I'm having a spore day?",
131 | "Why do players keep trying to cheer me up? Do I look like a sunflower to you?",
132 | "I'm like a mushroom, growing in the darkness of my grumpy thoughts.",
133 | "Step lightly, or you might awaken the wrath of the grumpy mushroom!",
134 | "Why be a fun-guy when you can be a grump-guy?",
135 | "I've mastered the art of being perpetually annoyed. It's my spore-cialty!",
136 | "Let's get blazed! Go bring the blaze rod.",
137 | "Is it 4:20 already?"
138 | };
139 |
140 | @Configurable @Configurable.Synchronized public int sporelingSpawnWeight = 16;
141 | }
142 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/mobs/ChupacabraEntity.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.mobs;
2 |
3 | import it.unimi.dsi.fastutil.objects.ObjectArrayList;
4 | import java.util.List;
5 | import mod.azure.azurelib.common.api.common.animatable.GeoEntity;
6 | import net.minecraft.core.BlockPos;
7 | import net.minecraft.sounds.SoundEvent;
8 | import net.minecraft.sounds.SoundEvents;
9 | import net.minecraft.world.Difficulty;
10 | import net.minecraft.world.damagesource.DamageSource;
11 | import net.minecraft.world.entity.EntityType;
12 | import net.minecraft.world.entity.MobSpawnType;
13 | import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
14 | import net.minecraft.world.entity.ai.attributes.Attributes;
15 | import net.minecraft.world.entity.ai.navigation.GroundPathNavigation;
16 | import net.minecraft.world.entity.animal.Animal;
17 | import net.minecraft.world.entity.monster.Enemy;
18 | import net.minecraft.world.entity.monster.Monster;
19 | import net.minecraft.world.entity.player.Player;
20 | import net.minecraft.world.level.Level;
21 | import net.minecraft.world.level.LevelAccessor;
22 | import net.minecraft.world.level.LightLayer;
23 | import net.minecraft.world.level.block.state.BlockState;
24 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
25 | import net.pixeldreamstudios.mobs_of_mythology.entity.AbstractMythMonsterEntity;
26 | import net.tslat.smartbrainlib.api.core.BrainActivityGroup;
27 | import net.tslat.smartbrainlib.api.core.behaviour.custom.attack.AnimatableMeleeAttack;
28 | import net.tslat.smartbrainlib.api.core.behaviour.custom.misc.ReactToUnreachableTarget;
29 | import net.tslat.smartbrainlib.api.core.behaviour.custom.move.FleeTarget;
30 | import net.tslat.smartbrainlib.api.core.behaviour.custom.path.SetWalkTargetToAttackTarget;
31 | import net.tslat.smartbrainlib.api.core.behaviour.custom.target.InvalidateAttackTarget;
32 | import net.tslat.smartbrainlib.api.core.navigation.SmoothGroundNavigation;
33 | import net.tslat.smartbrainlib.api.core.sensor.ExtendedSensor;
34 | import net.tslat.smartbrainlib.api.core.sensor.custom.UnreachableTargetSensor;
35 | import net.tslat.smartbrainlib.api.core.sensor.vanilla.HurtBySensor;
36 | import net.tslat.smartbrainlib.api.core.sensor.vanilla.NearbyLivingEntitySensor;
37 | import net.tslat.smartbrainlib.util.BrainUtils;
38 |
39 | public class ChupacabraEntity extends AbstractMythMonsterEntity implements GeoEntity {
40 | private boolean unreachableTarget = false;
41 |
42 | public ChupacabraEntity(EntityType extends Monster> entityType, Level level) {
43 | super(entityType, level);
44 | navigation = new SmoothGroundNavigation(this, level());
45 | GroundPathNavigation mobNavigation = (GroundPathNavigation) this.getNavigation();
46 | mobNavigation.setCanWalkOverFences(true);
47 | this.xpReward = Enemy.XP_REWARD_MEDIUM;
48 | }
49 |
50 | public static AttributeSupplier.Builder createAttributes() {
51 | return Monster.createMobAttributes()
52 | .add(Attributes.MAX_HEALTH, MobsOfMythology.config.chupacabraHealth)
53 | .add(Attributes.ATTACK_DAMAGE, MobsOfMythology.config.chupacabraAttackDamage)
54 | .add(Attributes.ATTACK_SPEED, 1.25f)
55 | .add(Attributes.ATTACK_KNOCKBACK, 1)
56 | .add(Attributes.MOVEMENT_SPEED, 0.3);
57 | }
58 |
59 | @Override
60 | public List> getSensors() {
61 | return ObjectArrayList.of(
62 | new NearbyLivingEntitySensor()
63 | .setPredicate((target, entity) -> target instanceof Animal || target instanceof Player),
64 | new HurtBySensor<>(),
65 | new UnreachableTargetSensor<>());
66 | }
67 |
68 | @Override
69 | public BrainActivityGroup getFightTasks() {
70 | return BrainActivityGroup.fightTasks(
71 | new InvalidateAttackTarget<>()
72 | .invalidateIf((target, entity) -> !target.isAlive() || !entity.hasLineOfSight(target)),
73 | new SetWalkTargetToAttackTarget<>()
74 | .speedMod((mob, livingEntity) -> 1.25f)
75 | .startCondition(mob -> BrainUtils.getTargetOfEntity(this) instanceof Animal),
76 | new FleeTarget<>()
77 | .speedModifier(1.75f)
78 | .startCondition(
79 | pathfinderMob ->
80 | BrainUtils.getTargetOfEntity(this) instanceof Player
81 | || BrainUtils.getLastAttacker(this) instanceof Player
82 | || unreachableTarget)
83 | .whenStopping(pathfinderMob -> unreachableTarget = false),
84 | new AnimatableMeleeAttack<>(8)
85 | .whenStarting(
86 | mob -> {
87 | this.triggerAnim("attackController", "attack");
88 | if (getHealth() < getMaxHealth()) {
89 | this.heal(1.5f);
90 | }
91 | }),
92 | new ReactToUnreachableTarget<>()
93 | .reaction((livingEntity, aBoolean) -> unreachableTarget = true));
94 | }
95 |
96 | @Override
97 | public boolean checkSpawnRules(LevelAccessor level, MobSpawnType spawnType) {
98 | if (level.getDifficulty() == Difficulty.PEACEFUL) {
99 | return false;
100 | }
101 | BlockPos pos = this.blockPosition();
102 | int skyLight = level.getBrightness(LightLayer.SKY, pos);
103 | int blockLight = level.getBrightness(LightLayer.BLOCK, pos);
104 |
105 | if (skyLight > 7 || blockLight > 7) {
106 | return false;
107 | }
108 | return super.checkSpawnRules(level, spawnType);
109 | }
110 |
111 | @Override
112 | protected SoundEvent getAmbientSound() {
113 | this.playSound(SoundEvents.WOLF_AMBIENT, 1.0f, 0.25f);
114 | return null;
115 | }
116 |
117 | @Override
118 | protected SoundEvent getHurtSound(DamageSource source) {
119 | this.playSound(SoundEvents.WOLF_HURT, 1.0f, 0.25f);
120 | return null;
121 | }
122 |
123 | @Override
124 | protected SoundEvent getDeathSound() {
125 | this.playSound(SoundEvents.WOLF_DEATH, 1.0f, 0.25f);
126 | return null;
127 | }
128 |
129 | @Override
130 | protected void playStepSound(BlockPos pos, BlockState state) {
131 | this.playSound(SoundEvents.WOLF_STEP, 0.5f, 1.0f);
132 | }
133 | }
134 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/renderer/KoboldRenderer.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer;
2 |
3 | import com.google.common.collect.Maps;
4 | import com.mojang.blaze3d.vertex.PoseStack;
5 | import com.mojang.blaze3d.vertex.VertexConsumer;
6 | import com.mojang.math.Axis;
7 | import java.util.Map;
8 | import mod.azure.azurelib.common.api.client.renderer.DynamicGeoEntityRenderer;
9 | import mod.azure.azurelib.common.api.client.renderer.layer.BlockAndItemGeoLayer;
10 | import mod.azure.azurelib.common.internal.common.cache.object.BakedGeoModel;
11 | import mod.azure.azurelib.common.internal.common.cache.object.GeoBone;
12 | import net.minecraft.Util;
13 | import net.minecraft.client.renderer.MultiBufferSource;
14 | import net.minecraft.client.renderer.entity.EntityRendererProvider;
15 | import net.minecraft.resources.ResourceLocation;
16 | import net.minecraft.world.item.ItemDisplayContext;
17 | import net.minecraft.world.item.ItemStack;
18 | import net.minecraft.world.item.ShieldItem;
19 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
20 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.model.KoboldModel;
21 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.KoboldEntity;
22 | import net.pixeldreamstudios.mobs_of_mythology.entity.variant.KoboldVariant;
23 | import org.jetbrains.annotations.Nullable;
24 |
25 | public class KoboldRenderer extends DynamicGeoEntityRenderer {
26 | public static final Map LOCATION_BY_VARIANT =
27 | Util.make(
28 | Maps.newEnumMap(KoboldVariant.class),
29 | (map) -> {
30 | map.put(
31 | KoboldVariant.KOBOLD,
32 | ResourceLocation.fromNamespaceAndPath(
33 | MobsOfMythology.MOD_ID, "textures/entity/kobold/kobold.png"));
34 | map.put(
35 | KoboldVariant.KOBOLD_CLOTHED,
36 | ResourceLocation.fromNamespaceAndPath(
37 | MobsOfMythology.MOD_ID, "textures/entity/kobold/kobold_cloth.png"));
38 | });
39 | private static final String RIGHT_HAND = "hand";
40 | private static final String LEFT_HAND = "hand2";
41 | protected ItemStack mainHandItem;
42 | protected ItemStack offHandItem;
43 |
44 | public KoboldRenderer(EntityRendererProvider.Context ctx) {
45 | super(ctx, new KoboldModel());
46 | this.shadowRadius = 0.4f;
47 |
48 | // TODO Add glow
49 | // addRenderLayer(new AutoGlowingGeoLayer<>(this));
50 |
51 | // Add some held item rendering
52 | addRenderLayer(
53 | new BlockAndItemGeoLayer<>(this) {
54 | @Nullable
55 | @Override
56 | protected ItemStack getStackForBone(GeoBone bone, KoboldEntity animatable) {
57 | // Retrieve the items in the entity's hands for the relevant bone
58 | return switch (bone.getName()) {
59 | case LEFT_HAND ->
60 | animatable.isLeftHanded()
61 | ? KoboldRenderer.this.mainHandItem
62 | : KoboldRenderer.this.offHandItem;
63 | case RIGHT_HAND ->
64 | animatable.isLeftHanded()
65 | ? KoboldRenderer.this.offHandItem
66 | : KoboldRenderer.this.mainHandItem;
67 | default -> null;
68 | };
69 | }
70 |
71 | @Override
72 | protected ItemDisplayContext getTransformTypeForStack(
73 | GeoBone bone, ItemStack stack, KoboldEntity animatable) {
74 | // Apply the camera transform for the given hand
75 | return switch (bone.getName()) {
76 | case LEFT_HAND, RIGHT_HAND -> ItemDisplayContext.THIRD_PERSON_RIGHT_HAND;
77 | default -> ItemDisplayContext.NONE;
78 | };
79 | }
80 |
81 | // Do some quick render modifications depending on what the item is
82 | @Override
83 | protected void renderStackForBone(
84 | PoseStack poseStack,
85 | GeoBone bone,
86 | ItemStack stack,
87 | KoboldEntity animatable,
88 | MultiBufferSource bufferSource,
89 | float partialTick,
90 | int packedLight,
91 | int packedOverlay) {
92 | if (stack == KoboldRenderer.this.mainHandItem) {
93 | poseStack.mulPose(Axis.XP.rotationDegrees(-90f));
94 |
95 | if (stack.getItem() instanceof ShieldItem) poseStack.translate(0, 0.125, -0.25);
96 | } else if (stack == KoboldRenderer.this.offHandItem) {
97 | poseStack.mulPose(Axis.XP.rotationDegrees(-90f));
98 |
99 | if (stack.getItem() instanceof ShieldItem) {
100 | poseStack.translate(0, 0.125, 0.25);
101 | poseStack.mulPose(Axis.YP.rotationDegrees(180));
102 | }
103 | }
104 |
105 | super.renderStackForBone(
106 | poseStack,
107 | bone,
108 | stack,
109 | animatable,
110 | bufferSource,
111 | partialTick,
112 | packedLight,
113 | packedOverlay);
114 | }
115 | });
116 | }
117 |
118 | @Override
119 | public ResourceLocation getTextureLocation(KoboldEntity animatable) {
120 | return LOCATION_BY_VARIANT.get(animatable.getVariant());
121 | }
122 |
123 | @Override
124 | public void preRender(
125 | PoseStack poseStack,
126 | KoboldEntity animatable,
127 | BakedGeoModel model,
128 | MultiBufferSource bufferSource,
129 | VertexConsumer buffer,
130 | boolean isReRender,
131 | float partialTick,
132 | int packedLight,
133 | int packedOverlay,
134 | int colour) {
135 | super.preRender(
136 | poseStack,
137 | animatable,
138 | model,
139 | bufferSource,
140 | buffer,
141 | isReRender,
142 | partialTick,
143 | packedLight,
144 | packedOverlay,
145 | colour);
146 |
147 | this.mainHandItem = animatable.getMainHandItem();
148 | this.offHandItem = animatable.getOffhandItem();
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/mobs/PegasusEntity.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.mobs;
2 |
3 | import mod.azure.azurelib.common.api.common.animatable.GeoEntity;
4 | import mod.azure.azurelib.core.animatable.instance.AnimatableInstanceCache;
5 | import mod.azure.azurelib.core.animatable.instance.SingletonAnimatableInstanceCache;
6 | import mod.azure.azurelib.core.animation.AnimatableManager;
7 | import mod.azure.azurelib.core.animation.AnimationController;
8 | import net.minecraft.sounds.SoundEvents;
9 | import net.minecraft.world.InteractionHand;
10 | import net.minecraft.world.InteractionResult;
11 | import net.minecraft.world.damagesource.DamageSource;
12 | import net.minecraft.world.entity.Entity;
13 | import net.minecraft.world.entity.EntityType;
14 | import net.minecraft.world.entity.LivingEntity;
15 | import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
16 | import net.minecraft.world.entity.ai.attributes.Attributes;
17 | import net.minecraft.world.entity.animal.horse.AbstractChestedHorse;
18 | import net.minecraft.world.entity.player.Player;
19 | import net.minecraft.world.level.Level;
20 | import net.minecraft.world.phys.Vec3;
21 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
22 | import net.pixeldreamstudios.mobs_of_mythology.entity.constant.DefaultMythAnimations;
23 | import org.jetbrains.annotations.Nullable;
24 |
25 | public class PegasusEntity extends AbstractChestedHorse implements GeoEntity {
26 |
27 | private static final int FLYING_INTERVAL = 8;
28 | private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this);
29 | protected int flyingTime;
30 | private boolean isFlying = false;
31 |
32 | public PegasusEntity(EntityType extends AbstractChestedHorse> entityType, Level level) {
33 | super(entityType, level);
34 | }
35 |
36 | public static AttributeSupplier.Builder createAttributes() {
37 | return AbstractChestedHorse.createBaseChestedHorseAttributes()
38 | .add(Attributes.MAX_HEALTH, MobsOfMythology.config.pegasusHealth)
39 | .add(Attributes.MOVEMENT_SPEED, 0.25)
40 | .add(Attributes.FLYING_SPEED, 0.8)
41 | .add(Attributes.JUMP_STRENGTH, 1.0);
42 | }
43 |
44 | @Override
45 | public void aiStep() {
46 | super.aiStep();
47 | if (flyingTime > 0) {
48 | flyingTime--;
49 | }
50 | // if (!isVehicle()) {
51 | // isFlying = false;
52 | // }
53 | if (this.onGround()) {
54 | isFlying = false;
55 | }
56 | }
57 |
58 | @Override
59 | public void travel(Vec3 movementInput) {
60 | if (this.isAlive()) {
61 | if (this.isVehicle() && this.getControllingPassenger() instanceof LivingEntity rider) {
62 | this.setYRot(rider.getYRot());
63 | this.yRotO = this.getYRot();
64 | this.setXRot(rider.getXRot() * 0.5F);
65 | this.setRot(this.getYRot(), this.getXRot());
66 | if (isFlying) {
67 | this.setSpeed((float) this.getAttributeValue(Attributes.FLYING_SPEED));
68 | Vec3 currentMotion = this.getDeltaMovement();
69 | this.setDeltaMovement(currentMotion.add(0.0, 0.05, 0.0));
70 | super.travel(new Vec3(rider.xxa, currentMotion.y, rider.zza));
71 | this.setDeltaMovement(this.getDeltaMovement().multiply(0.91D, 0.98D, 0.91D));
72 | } else {
73 | this.setSpeed((float) this.getAttributeValue(Attributes.MOVEMENT_SPEED));
74 | super.travel(new Vec3(rider.xxa, 0, rider.zza));
75 | }
76 | } else {
77 | super.travel(movementInput);
78 | }
79 | }
80 | }
81 |
82 | @Override
83 | public void handleStartJump(int jumpPower) {
84 | if (!this.onGround()) {
85 | this.setStanding(false);
86 | }
87 | }
88 |
89 | @Override
90 | public boolean canJump() {
91 | return super.canJump() && flyingTime <= 0;
92 | }
93 |
94 | @Override
95 | public void onPlayerJump(int jumpPower) {
96 | // if (this.canJump()) {
97 | // this.setJumping(true);
98 | this.flyingJump();
99 | }
100 |
101 | public void flyingJump() {
102 | if (flyingTime <= 0 && this.canJump()) {
103 | float jumpMotion = 1.6F;
104 | this.setDeltaMovement(this.getDeltaMovement().add(0, jumpMotion, 0));
105 | this.flyingTime = FLYING_INTERVAL;
106 | this.isFlying = true;
107 | }
108 | }
109 |
110 | @Override
111 | public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource source) {
112 | // Pegasus does not take fall damage
113 | return false;
114 | }
115 |
116 | @Override
117 | protected void playJumpSound() {
118 | this.playSound(SoundEvents.HORSE_JUMP, 0.4F, 1.0F);
119 | }
120 |
121 | @Override
122 | public boolean isJumping() {
123 | return false;
124 | }
125 |
126 | @Override
127 | public void setJumping(boolean jumping) {
128 | this.jumping = jumping;
129 | }
130 |
131 | @Override
132 | public InteractionResult mobInteract(Player player, InteractionHand hand) {
133 | if (!this.level().isClientSide && !this.isVehicle()) {
134 | player.startRiding(this);
135 | return InteractionResult.SUCCESS;
136 | }
137 | return super.mobInteract(player, hand);
138 | }
139 |
140 | @Override
141 | @Nullable
142 | public LivingEntity getControllingPassenger() {
143 | Entity passenger = this.getFirstPassenger();
144 | return passenger instanceof Player ? (Player) passenger : null;
145 | }
146 |
147 | @Override
148 | public void registerControllers(AnimatableManager.ControllerRegistrar controllerRegistrar) {
149 | controllerRegistrar.add(
150 | new AnimationController<>(
151 | this,
152 | "controller",
153 | 3,
154 | state -> {
155 | if (isFlying) {
156 | return state.setAndContinue(DefaultMythAnimations.FLY);
157 | }
158 | if (this.onGround() && state.isMoving()) {
159 | return state.setAndContinue(DefaultMythAnimations.WALK);
160 | }
161 | return state.setAndContinue(DefaultMythAnimations.IDLE);
162 | }));
163 | }
164 |
165 | @Override
166 | public AnimatableInstanceCache getAnimatableInstanceCache() {
167 | return cache;
168 | }
169 | }
170 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/client/renderer/KoboldWarriorRenderer.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.client.renderer;
2 |
3 | import com.google.common.collect.Maps;
4 | import com.mojang.blaze3d.vertex.PoseStack;
5 | import com.mojang.blaze3d.vertex.VertexConsumer;
6 | import com.mojang.math.Axis;
7 | import java.util.Map;
8 | import mod.azure.azurelib.common.api.client.renderer.DynamicGeoEntityRenderer;
9 | import mod.azure.azurelib.common.api.client.renderer.layer.BlockAndItemGeoLayer;
10 | import mod.azure.azurelib.common.internal.common.cache.object.BakedGeoModel;
11 | import mod.azure.azurelib.common.internal.common.cache.object.GeoBone;
12 | import net.minecraft.Util;
13 | import net.minecraft.client.renderer.MultiBufferSource;
14 | import net.minecraft.client.renderer.entity.EntityRendererProvider;
15 | import net.minecraft.resources.ResourceLocation;
16 | import net.minecraft.world.item.ItemDisplayContext;
17 | import net.minecraft.world.item.ItemStack;
18 | import net.minecraft.world.item.ShieldItem;
19 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
20 | import net.pixeldreamstudios.mobs_of_mythology.entity.client.model.KoboldWarriorModel;
21 | import net.pixeldreamstudios.mobs_of_mythology.entity.mobs.KoboldWarriorEntity;
22 | import net.pixeldreamstudios.mobs_of_mythology.entity.variant.KoboldWarriorVariant;
23 | import org.jetbrains.annotations.Nullable;
24 |
25 | public class KoboldWarriorRenderer extends DynamicGeoEntityRenderer {
26 | public static final Map LOCATION_BY_VARIANT =
27 | Util.make(
28 | Maps.newEnumMap(KoboldWarriorVariant.class),
29 | (map) -> {
30 | map.put(
31 | KoboldWarriorVariant.KOBOLD_WARRIOR_1,
32 | ResourceLocation.fromNamespaceAndPath(
33 | MobsOfMythology.MOD_ID, "textures/entity/kobold_warrior/kobold_warrior_1.png"));
34 | map.put(
35 | KoboldWarriorVariant.KOBOLD_WARRIOR_2,
36 | ResourceLocation.fromNamespaceAndPath(
37 | MobsOfMythology.MOD_ID, "textures/entity/kobold_warrior/kobold_warrior_2.png"));
38 | map.put(
39 | KoboldWarriorVariant.KOBOLD_WARRIOR_3,
40 | ResourceLocation.fromNamespaceAndPath(
41 | MobsOfMythology.MOD_ID, "textures/entity/kobold_warrior/kobold_warrior_3.png"));
42 | });
43 | private static final String RIGHT_HAND = "item";
44 | private static final String LEFT_HAND = "item2";
45 | protected ItemStack mainHandItem;
46 | protected ItemStack offHandItem;
47 |
48 | public KoboldWarriorRenderer(EntityRendererProvider.Context ctx) {
49 | super(ctx, new KoboldWarriorModel());
50 | this.shadowRadius = 0.4f;
51 |
52 | // TODO Add glow
53 | // addRenderLayer(new AutoGlowingGeoLayer<>(this));
54 |
55 | // Add some held item rendering
56 | addRenderLayer(
57 | new BlockAndItemGeoLayer<>(this) {
58 | @Nullable
59 | @Override
60 | protected ItemStack getStackForBone(GeoBone bone, KoboldWarriorEntity animatable) {
61 | // Retrieve the items in the entity's hands for the relevant bone
62 | return switch (bone.getName()) {
63 | case LEFT_HAND ->
64 | animatable.isLeftHanded()
65 | ? KoboldWarriorRenderer.this.mainHandItem
66 | : KoboldWarriorRenderer.this.offHandItem;
67 | case RIGHT_HAND ->
68 | animatable.isLeftHanded()
69 | ? KoboldWarriorRenderer.this.offHandItem
70 | : KoboldWarriorRenderer.this.mainHandItem;
71 | default -> null;
72 | };
73 | }
74 |
75 | @Override
76 | protected ItemDisplayContext getTransformTypeForStack(
77 | GeoBone bone, ItemStack stack, KoboldWarriorEntity animatable) {
78 | // Apply the camera transform for the given hand
79 | return switch (bone.getName()) {
80 | case LEFT_HAND, RIGHT_HAND -> ItemDisplayContext.THIRD_PERSON_RIGHT_HAND;
81 | default -> ItemDisplayContext.NONE;
82 | };
83 | }
84 |
85 | // Do some quick render modifications depending on what the item is
86 | @Override
87 | protected void renderStackForBone(
88 | PoseStack poseStack,
89 | GeoBone bone,
90 | ItemStack stack,
91 | KoboldWarriorEntity animatable,
92 | MultiBufferSource bufferSource,
93 | float partialTick,
94 | int packedLight,
95 | int packedOverlay) {
96 | if (stack == KoboldWarriorRenderer.this.mainHandItem) {
97 | poseStack.mulPose(Axis.XP.rotationDegrees(-90f));
98 |
99 | if (stack.getItem() instanceof ShieldItem) poseStack.translate(0, 0.125, -0.25);
100 | } else if (stack == KoboldWarriorRenderer.this.offHandItem) {
101 | poseStack.mulPose(Axis.XP.rotationDegrees(-90f));
102 |
103 | if (stack.getItem() instanceof ShieldItem) {
104 | poseStack.translate(0, 0.125, 0.25);
105 | poseStack.mulPose(Axis.YP.rotationDegrees(180));
106 | }
107 | }
108 |
109 | super.renderStackForBone(
110 | poseStack,
111 | bone,
112 | stack,
113 | animatable,
114 | bufferSource,
115 | partialTick,
116 | packedLight,
117 | packedOverlay);
118 | }
119 | });
120 | }
121 |
122 | @Override
123 | public ResourceLocation getTextureLocation(KoboldWarriorEntity animatable) {
124 | return LOCATION_BY_VARIANT.get(animatable.getVariant());
125 | }
126 |
127 | @Override
128 | public void preRender(
129 | PoseStack poseStack,
130 | KoboldWarriorEntity animatable,
131 | BakedGeoModel model,
132 | MultiBufferSource bufferSource,
133 | VertexConsumer buffer,
134 | boolean isReRender,
135 | float partialTick,
136 | int packedLight,
137 | int packedOverlay,
138 | int colour) {
139 | super.preRender(
140 | poseStack,
141 | animatable,
142 | model,
143 | bufferSource,
144 | buffer,
145 | isReRender,
146 | partialTick,
147 | packedLight,
148 | packedOverlay,
149 | colour);
150 |
151 | this.mainHandItem = animatable.getMainHandItem();
152 | this.offHandItem = animatable.getOffhandItem();
153 | }
154 | }
155 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/registry/ItemRegistry.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.registry;
2 |
3 | import dev.architectury.core.item.ArchitecturySpawnEggItem;
4 | import dev.architectury.registry.registries.DeferredRegister;
5 | import dev.architectury.registry.registries.RegistrySupplier;
6 | import net.minecraft.core.registries.Registries;
7 | import net.minecraft.world.effect.MobEffectInstance;
8 | import net.minecraft.world.effect.MobEffects;
9 | import net.minecraft.world.food.FoodProperties;
10 | import net.minecraft.world.item.Item;
11 | import net.minecraft.world.item.Rarity;
12 | import net.minecraft.world.item.SwordItem;
13 | import net.minecraft.world.item.Tiers;
14 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
15 |
16 | public class ItemRegistry {
17 | public static final DeferredRegister
- ITEMS =
18 | DeferredRegister.create(MobsOfMythology.MOD_ID, Registries.ITEM);
19 |
20 | // SPAWN EGGS
21 | public static final RegistrySupplier
- AUTOMATON_SPAWN_EGG =
22 | ITEMS.register(
23 | "automaton_spawn_egg",
24 | () ->
25 | new ArchitecturySpawnEggItem(
26 | EntityRegistry.AUTOMATON,
27 | 0xcf9611,
28 | 0xa87807,
29 | new Item.Properties().arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
30 | public static final RegistrySupplier
- CHUPACABRA_SPAWN_EGG =
31 | ITEMS.register(
32 | "chupacabra_spawn_egg",
33 | () ->
34 | new ArchitecturySpawnEggItem(
35 | EntityRegistry.CHUPACABRA,
36 | 0x8E7870,
37 | 0xDA5126,
38 | new Item.Properties().arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
39 | public static final RegistrySupplier
- KOBOLD_SPAWN_EGG =
40 | ITEMS.register(
41 | "kobold_spawn_egg",
42 | () ->
43 | new ArchitecturySpawnEggItem(
44 | EntityRegistry.KOBOLD,
45 | 0xd5f07d,
46 | 0x637036,
47 | new Item.Properties().arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
48 | public static final RegistrySupplier
- KOBOLD_WARRIOR_SPAWN_EGG =
49 | ITEMS.register(
50 | "kobold_warrior_spawn_egg",
51 | () ->
52 | new ArchitecturySpawnEggItem(
53 | EntityRegistry.KOBOLD_WARRIOR,
54 | 0xd5f07d,
55 | 0xe6b800,
56 | new Item.Properties().arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
57 | public static final RegistrySupplier
- DRAKE_SPAWN_EGG =
58 | ITEMS.register(
59 | "drake_spawn_egg",
60 | () ->
61 | new ArchitecturySpawnEggItem(
62 | EntityRegistry.DRAKE,
63 | 0xFE6F42,
64 | 0xE54B1A,
65 | new Item.Properties().arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
66 | public static final RegistrySupplier
- SPORELING_SPAWN_EGG =
67 | ITEMS.register(
68 | "sporeling_spawn_egg",
69 | () ->
70 | new ArchitecturySpawnEggItem(
71 | EntityRegistry.SPORELING,
72 | 0xE53935,
73 | 0xFEFEFE,
74 | new Item.Properties().arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
75 | public static final RegistrySupplier
- BASILISK_SPAWN_EGG =
76 | ITEMS.register(
77 | "basilisk_spawn_egg",
78 | () ->
79 | new ArchitecturySpawnEggItem(
80 | EntityRegistry.BASILISK,
81 | 0x586e7a,
82 | 0x323847,
83 | new Item.Properties().arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
84 | public static final RegistrySupplier
- PEGASUS_SPAWN_EGG =
85 | ITEMS.register(
86 | "pegasus_spawn_egg",
87 | () ->
88 | new ArchitecturySpawnEggItem(
89 | EntityRegistry.PEGASUS,
90 | 0xf3f2ec,
91 | 0xd4a650,
92 | new Item.Properties().arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
93 |
94 | // FOODS
95 | public static final RegistrySupplier
- CHUPACABRA_MEAT =
96 | ITEMS.register(
97 | "chupacabra_meat",
98 | () ->
99 | new Item(
100 | new Item.Properties()
101 | .food(
102 | new FoodProperties.Builder()
103 | .nutrition(4)
104 | .saturationModifier(0.1F)
105 | .effect(new MobEffectInstance(MobEffects.HUNGER, 600, 0), 0.8F)
106 | .build())
107 | .arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
108 | public static final RegistrySupplier
- COOKED_CHUPACABRA_MEAT =
109 | ITEMS.register(
110 | "cooked_chupacabra_meat",
111 | () ->
112 | new Item(
113 | new Item.Properties()
114 | .food(
115 | new FoodProperties.Builder()
116 | .nutrition(6)
117 | .saturationModifier(0.8F)
118 | .build())
119 | .arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
120 |
121 | // WEAPONS
122 | public static final RegistrySupplier
- KOBOLD_SPEAR =
123 | ITEMS.register(
124 | "kobold_spear",
125 | () ->
126 | new SwordItem(
127 | Tiers.IRON,
128 | new Item.Properties()
129 | .attributes(SwordItem.createAttributes(Tiers.IRON, 3, -2.0F))
130 | .rarity(Rarity.UNCOMMON)
131 | .arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
132 |
133 | // MISCELLANEOUS
134 | public static final RegistrySupplier
- AUTOMATON_HEAD =
135 | ITEMS.register("automaton_head", () -> new Item(new Item.Properties().stacksTo(1)));
136 | public static final RegistrySupplier
- BASILISK_HEAD =
137 | ITEMS.register("basilisk_head", () -> new Item(new Item.Properties().stacksTo(1)));
138 | public static final RegistrySupplier
- BRONZE_INGOT =
139 | ITEMS.register(
140 | "bronze_ingot",
141 | () ->
142 | new Item(
143 | new Item.Properties().stacksTo(64).arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
144 | public static final RegistrySupplier
- GEAR =
145 | ITEMS.register(
146 | "gear",
147 | () ->
148 | new Item(
149 | new Item.Properties().stacksTo(64).arch$tab(TabRegistry.MOBS_OF_MYTHOLOGY_TAB)));
150 |
151 | public static void init() {
152 | ITEMS.register();
153 | }
154 | }
155 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/AbstractMythEntity.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity;
2 |
3 | import it.unimi.dsi.fastutil.objects.ObjectArrayList;
4 | import java.util.List;
5 | import mod.azure.azurelib.common.api.common.animatable.GeoEntity;
6 | import mod.azure.azurelib.core.animatable.instance.AnimatableInstanceCache;
7 | import mod.azure.azurelib.core.animatable.instance.SingletonAnimatableInstanceCache;
8 | import mod.azure.azurelib.core.animation.AnimatableManager;
9 | import mod.azure.azurelib.core.animation.AnimationController;
10 | import mod.azure.azurelib.core.object.PlayState;
11 | import net.minecraft.core.BlockPos;
12 | import net.minecraft.util.RandomSource;
13 | import net.minecraft.world.entity.EntityType;
14 | import net.minecraft.world.entity.MobSpawnType;
15 | import net.minecraft.world.entity.PathfinderMob;
16 | import net.minecraft.world.entity.ai.Brain;
17 | import net.minecraft.world.level.BlockAndTintGetter;
18 | import net.minecraft.world.level.Level;
19 | import net.minecraft.world.level.LevelAccessor;
20 | import net.pixeldreamstudios.mobs_of_mythology.entity.constant.DefaultMythAnimations;
21 | import net.pixeldreamstudios.mobs_of_mythology.registry.TagRegistry;
22 | import net.tslat.smartbrainlib.api.SmartBrainOwner;
23 | import net.tslat.smartbrainlib.api.core.BrainActivityGroup;
24 | import net.tslat.smartbrainlib.api.core.SmartBrainProvider;
25 | import net.tslat.smartbrainlib.api.core.behaviour.FirstApplicableBehaviour;
26 | import net.tslat.smartbrainlib.api.core.behaviour.OneRandomBehaviour;
27 | import net.tslat.smartbrainlib.api.core.behaviour.custom.attack.AnimatableMeleeAttack;
28 | import net.tslat.smartbrainlib.api.core.behaviour.custom.look.LookAtTarget;
29 | import net.tslat.smartbrainlib.api.core.behaviour.custom.misc.Idle;
30 | import net.tslat.smartbrainlib.api.core.behaviour.custom.move.MoveToWalkTarget;
31 | import net.tslat.smartbrainlib.api.core.behaviour.custom.path.SetRandomWalkTarget;
32 | import net.tslat.smartbrainlib.api.core.behaviour.custom.path.SetWalkTargetToAttackTarget;
33 | import net.tslat.smartbrainlib.api.core.behaviour.custom.target.InvalidateAttackTarget;
34 | import net.tslat.smartbrainlib.api.core.behaviour.custom.target.SetPlayerLookTarget;
35 | import net.tslat.smartbrainlib.api.core.behaviour.custom.target.SetRandomLookTarget;
36 | import net.tslat.smartbrainlib.api.core.behaviour.custom.target.TargetOrRetaliate;
37 | import net.tslat.smartbrainlib.api.core.sensor.ExtendedSensor;
38 | import net.tslat.smartbrainlib.api.core.sensor.vanilla.HurtBySensor;
39 | import net.tslat.smartbrainlib.api.core.sensor.vanilla.NearbyLivingEntitySensor;
40 |
41 | public abstract class AbstractMythEntity extends PathfinderMob
42 | implements GeoEntity, SmartBrainOwner {
43 | private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this);
44 |
45 | protected AbstractMythEntity(EntityType extends PathfinderMob> entityType, Level level) {
46 | super(entityType, level);
47 | }
48 |
49 | /*
50 | * Prevent myth mobs from spawning wherever they want to.
51 | * Adapted from net.minecraft.world.entity.animal.Animal.checkAnimalSpawnRules.
52 | */
53 | public static boolean checkMythEntitySpawnRules(
54 | EntityType extends PathfinderMob> entityType,
55 | LevelAccessor levelAccessor,
56 | MobSpawnType mobSpawnType,
57 | BlockPos blockPos,
58 | RandomSource randomSource) {
59 | boolean bl =
60 | MobSpawnType.ignoresLightRequirements(mobSpawnType)
61 | || isBrightEnoughToSpawn(levelAccessor, blockPos);
62 | return levelAccessor.getBlockState(blockPos.below()).is(TagRegistry.MYTH_ENTITIES_SPAWNABLE_ON)
63 | && bl;
64 | }
65 |
66 | protected static boolean isBrightEnoughToSpawn(
67 | BlockAndTintGetter blockAndTintGetter, BlockPos blockPos) {
68 | return blockAndTintGetter.getRawBrightness(blockPos, 0) > 8;
69 | }
70 |
71 | @Override
72 | public AnimatableInstanceCache getAnimatableInstanceCache() {
73 | return cache;
74 | }
75 |
76 | @Override
77 | public void registerControllers(AnimatableManager.ControllerRegistrar controllerRegistrar) {
78 | controllerRegistrar
79 | .add(
80 | new AnimationController<>(
81 | this,
82 | "livingController",
83 | 3,
84 | state -> {
85 | if (state.isMoving() && !swinging) {
86 | if (isAggressive() && !swinging) {
87 | state.getController().setAnimation(DefaultMythAnimations.RUN);
88 | return PlayState.CONTINUE;
89 | }
90 | state.getController().setAnimation(DefaultMythAnimations.WALK);
91 | return PlayState.CONTINUE;
92 | }
93 | state.getController().setAnimation(DefaultMythAnimations.IDLE);
94 | return PlayState.CONTINUE;
95 | }))
96 | .add(
97 | new AnimationController<>(
98 | this,
99 | "attackController",
100 | 3,
101 | event -> {
102 | swinging = false;
103 | return PlayState.STOP;
104 | })
105 | .triggerableAnim("attack", DefaultMythAnimations.ATTACK));
106 | }
107 |
108 | @Override
109 | public List> getSensors() {
110 | return ObjectArrayList.of(new NearbyLivingEntitySensor<>(), new HurtBySensor<>());
111 | }
112 |
113 | @Override
114 | public BrainActivityGroup getCoreTasks() {
115 | return BrainActivityGroup.coreTasks(new LookAtTarget<>(), new MoveToWalkTarget<>());
116 | }
117 |
118 | @Override
119 | public BrainActivityGroup getIdleTasks() {
120 | return BrainActivityGroup.idleTasks(
121 | new FirstApplicableBehaviour(
122 | new TargetOrRetaliate<>(), new SetPlayerLookTarget<>(), new SetRandomLookTarget<>()),
123 | new OneRandomBehaviour<>(
124 | new SetRandomWalkTarget<>(),
125 | new Idle<>().runFor(entity -> entity.getRandom().nextInt(30, 60))));
126 | }
127 |
128 | @Override
129 | public BrainActivityGroup getFightTasks() {
130 | return BrainActivityGroup.fightTasks(
131 | new InvalidateAttackTarget<>()
132 | .invalidateIf((target, entity) -> !target.isAlive() || !entity.hasLineOfSight(target)),
133 | new SetWalkTargetToAttackTarget<>().speedMod((mob, livingEntity) -> 1.25f),
134 | new AnimatableMeleeAttack<>(20)
135 | .whenStarting(
136 | mob -> {
137 | this.triggerAnim("attackController", "attack");
138 | }));
139 | }
140 |
141 | @Override
142 | protected Brain.Provider> brainProvider() {
143 | return new SmartBrainProvider<>(this);
144 | }
145 |
146 | @Override
147 | protected void customServerAiStep() {
148 | tickBrain(this);
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/AbstractMythMonsterEntity.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity;
2 |
3 | import it.unimi.dsi.fastutil.objects.ObjectArrayList;
4 | import java.util.List;
5 | import mod.azure.azurelib.common.api.common.animatable.GeoEntity;
6 | import mod.azure.azurelib.core.animatable.instance.AnimatableInstanceCache;
7 | import mod.azure.azurelib.core.animatable.instance.SingletonAnimatableInstanceCache;
8 | import mod.azure.azurelib.core.animation.AnimatableManager;
9 | import mod.azure.azurelib.core.animation.AnimationController;
10 | import mod.azure.azurelib.core.object.PlayState;
11 | import net.minecraft.core.BlockPos;
12 | import net.minecraft.util.RandomSource;
13 | import net.minecraft.world.Difficulty;
14 | import net.minecraft.world.entity.EntityType;
15 | import net.minecraft.world.entity.MobSpawnType;
16 | import net.minecraft.world.entity.ai.Brain;
17 | import net.minecraft.world.entity.monster.Monster;
18 | import net.minecraft.world.entity.player.Player;
19 | import net.minecraft.world.level.Level;
20 | import net.minecraft.world.level.LevelAccessor;
21 | import net.pixeldreamstudios.mobs_of_mythology.entity.constant.DefaultMythAnimations;
22 | import net.pixeldreamstudios.mobs_of_mythology.registry.TagRegistry;
23 | import net.tslat.smartbrainlib.api.SmartBrainOwner;
24 | import net.tslat.smartbrainlib.api.core.BrainActivityGroup;
25 | import net.tslat.smartbrainlib.api.core.SmartBrainProvider;
26 | import net.tslat.smartbrainlib.api.core.behaviour.FirstApplicableBehaviour;
27 | import net.tslat.smartbrainlib.api.core.behaviour.OneRandomBehaviour;
28 | import net.tslat.smartbrainlib.api.core.behaviour.custom.attack.AnimatableMeleeAttack;
29 | import net.tslat.smartbrainlib.api.core.behaviour.custom.look.LookAtTarget;
30 | import net.tslat.smartbrainlib.api.core.behaviour.custom.misc.Idle;
31 | import net.tslat.smartbrainlib.api.core.behaviour.custom.move.FloatToSurfaceOfFluid;
32 | import net.tslat.smartbrainlib.api.core.behaviour.custom.move.MoveToWalkTarget;
33 | import net.tslat.smartbrainlib.api.core.behaviour.custom.path.SetRandomWalkTarget;
34 | import net.tslat.smartbrainlib.api.core.behaviour.custom.path.SetWalkTargetToAttackTarget;
35 | import net.tslat.smartbrainlib.api.core.behaviour.custom.target.InvalidateAttackTarget;
36 | import net.tslat.smartbrainlib.api.core.behaviour.custom.target.SetPlayerLookTarget;
37 | import net.tslat.smartbrainlib.api.core.behaviour.custom.target.SetRandomLookTarget;
38 | import net.tslat.smartbrainlib.api.core.behaviour.custom.target.TargetOrRetaliate;
39 | import net.tslat.smartbrainlib.api.core.sensor.ExtendedSensor;
40 | import net.tslat.smartbrainlib.api.core.sensor.vanilla.HurtBySensor;
41 | import net.tslat.smartbrainlib.api.core.sensor.vanilla.NearbyLivingEntitySensor;
42 |
43 | public abstract class AbstractMythMonsterEntity extends Monster
44 | implements GeoEntity, SmartBrainOwner {
45 | private final AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this);
46 |
47 | protected AbstractMythMonsterEntity(EntityType extends Monster> entityType, Level level) {
48 | super(entityType, level);
49 | }
50 |
51 | /*
52 | * Prevent myth monsters from spawning wherever they want to.
53 | * Adapted from net.minecraft.world.entity.monster.Monster.checkAnyLightMonsterSpawnRules.
54 | */
55 | public static boolean checkMythMonsterSpawnRules(
56 | EntityType extends Monster> entityType,
57 | LevelAccessor levelAccessor,
58 | MobSpawnType mobSpawnType,
59 | BlockPos blockPos,
60 | RandomSource randomSource) {
61 | boolean bl =
62 | levelAccessor.getDifficulty() != Difficulty.PEACEFUL
63 | && checkMobSpawnRules(entityType, levelAccessor, mobSpawnType, blockPos, randomSource);
64 | return levelAccessor.getBlockState(blockPos.below()).is(TagRegistry.MYTH_ENTITIES_SPAWNABLE_ON)
65 | && bl;
66 | }
67 |
68 | @Override
69 | public AnimatableInstanceCache getAnimatableInstanceCache() {
70 | return cache;
71 | }
72 |
73 | @Override
74 | public void registerControllers(AnimatableManager.ControllerRegistrar controllerRegistrar) {
75 | controllerRegistrar
76 | .add(
77 | new AnimationController<>(
78 | this,
79 | "livingController",
80 | 3,
81 | state -> {
82 | if (state.isMoving() && !swinging) {
83 | if (isAggressive() && !swinging) {
84 | state.getController().setAnimation(DefaultMythAnimations.RUN);
85 | return PlayState.CONTINUE;
86 | }
87 | state.getController().setAnimation(DefaultMythAnimations.WALK);
88 | return PlayState.CONTINUE;
89 | }
90 | state.getController().setAnimation(DefaultMythAnimations.IDLE);
91 | return PlayState.CONTINUE;
92 | }))
93 | .add(
94 | new AnimationController<>(
95 | this,
96 | "attackController",
97 | 3,
98 | event -> {
99 | swinging = false;
100 | return PlayState.STOP;
101 | })
102 | .triggerableAnim("attack", DefaultMythAnimations.ATTACK));
103 | }
104 |
105 | @Override
106 | public List> getSensors() {
107 | return ObjectArrayList.of(
108 | new NearbyLivingEntitySensor()
109 | .setPredicate((target, entity) -> target instanceof Player),
110 | new HurtBySensor<>());
111 | }
112 |
113 | @Override
114 | public BrainActivityGroup getCoreTasks() {
115 | return BrainActivityGroup.coreTasks(
116 | new FloatToSurfaceOfFluid<>(), new LookAtTarget<>(), new MoveToWalkTarget<>());
117 | }
118 |
119 | @Override
120 | public BrainActivityGroup getIdleTasks() {
121 | return BrainActivityGroup.idleTasks(
122 | new FirstApplicableBehaviour(
123 | new TargetOrRetaliate<>(), new SetPlayerLookTarget<>(), new SetRandomLookTarget<>()),
124 | new OneRandomBehaviour<>(
125 | new SetRandomWalkTarget<>(),
126 | new Idle<>().runFor(entity -> entity.getRandom().nextInt(30, 60))));
127 | }
128 |
129 | @Override
130 | public BrainActivityGroup getFightTasks() {
131 | return BrainActivityGroup.fightTasks(
132 | new InvalidateAttackTarget<>()
133 | .invalidateIf((target, entity) -> !target.isAlive() || !entity.hasLineOfSight(target)),
134 | new SetWalkTargetToAttackTarget<>().speedMod((mob, livingEntity) -> 1.25f),
135 | new AnimatableMeleeAttack<>(20)
136 | .whenStarting(
137 | mob -> {
138 | this.triggerAnim("attackController", "attack");
139 | }));
140 | }
141 |
142 | @Override
143 | protected Brain.Provider> brainProvider() {
144 | return new SmartBrainProvider<>(this);
145 | }
146 |
147 | @Override
148 | protected void customServerAiStep() {
149 | tickBrain(this);
150 | }
151 | }
152 |
--------------------------------------------------------------------------------
/common/src/main/java/net/pixeldreamstudios/mobs_of_mythology/entity/mobs/KoboldEntity.java:
--------------------------------------------------------------------------------
1 | package net.pixeldreamstudios.mobs_of_mythology.entity.mobs;
2 |
3 | import net.minecraft.Util;
4 | import net.minecraft.nbt.CompoundTag;
5 | import net.minecraft.network.syncher.EntityDataAccessor;
6 | import net.minecraft.network.syncher.EntityDataSerializers;
7 | import net.minecraft.network.syncher.SynchedEntityData;
8 | import net.minecraft.sounds.SoundEvents;
9 | import net.minecraft.world.DifficultyInstance;
10 | import net.minecraft.world.InteractionHand;
11 | import net.minecraft.world.damagesource.DamageSource;
12 | import net.minecraft.world.effect.MobEffectInstance;
13 | import net.minecraft.world.effect.MobEffects;
14 | import net.minecraft.world.entity.EntityType;
15 | import net.minecraft.world.entity.LivingEntity;
16 | import net.minecraft.world.entity.MobSpawnType;
17 | import net.minecraft.world.entity.SpawnGroupData;
18 | import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
19 | import net.minecraft.world.entity.ai.attributes.Attributes;
20 | import net.minecraft.world.entity.monster.Monster;
21 | import net.minecraft.world.item.ItemStack;
22 | import net.minecraft.world.level.Level;
23 | import net.minecraft.world.level.ServerLevelAccessor;
24 | import net.pixeldreamstudios.mobs_of_mythology.MobsOfMythology;
25 | import net.pixeldreamstudios.mobs_of_mythology.entity.AbstractMythMonsterEntity;
26 | import net.pixeldreamstudios.mobs_of_mythology.entity.variant.KoboldVariant;
27 | import net.tslat.smartbrainlib.api.core.BrainActivityGroup;
28 | import net.tslat.smartbrainlib.api.core.behaviour.custom.attack.AnimatableMeleeAttack;
29 | import net.tslat.smartbrainlib.api.core.behaviour.custom.move.FleeTarget;
30 | import net.tslat.smartbrainlib.api.core.behaviour.custom.path.SetWalkTargetToAttackTarget;
31 | import net.tslat.smartbrainlib.api.core.behaviour.custom.target.InvalidateAttackTarget;
32 | import net.tslat.smartbrainlib.api.core.navigation.SmoothGroundNavigation;
33 | import net.tslat.smartbrainlib.util.BrainUtils;
34 | import org.jetbrains.annotations.Nullable;
35 |
36 | public class KoboldEntity extends AbstractKoboldEntity {
37 | private static final EntityDataAccessor DATA_ITEM_STACK =
38 | SynchedEntityData.defineId(KoboldEntity.class, EntityDataSerializers.ITEM_STACK);
39 |
40 | public KoboldEntity(EntityType extends AbstractKoboldEntity> entityType, Level world) {
41 | super(entityType, world, Monster.XP_REWARD_SMALL);
42 | navigation = new SmoothGroundNavigation(this, level());
43 | }
44 |
45 | public static AttributeSupplier.Builder createAttributes() {
46 | return Monster.createMobAttributes()
47 | .add(Attributes.MAX_HEALTH, MobsOfMythology.config.koboldHealth)
48 | .add(Attributes.ATTACK_DAMAGE, MobsOfMythology.config.koboldAttackDamage)
49 | .add(Attributes.ATTACK_SPEED, 2)
50 | .add(Attributes.ATTACK_KNOCKBACK, 1)
51 | .add(Attributes.MOVEMENT_SPEED, 0.3);
52 | }
53 |
54 | @Override
55 | protected void defineSynchedData(SynchedEntityData.Builder builder) {
56 | super.defineSynchedData(builder);
57 | builder.define(DATA_ITEM_STACK, ItemStack.EMPTY);
58 | }
59 |
60 | @Override
61 | public void addAdditionalSaveData(CompoundTag nbt) {
62 | super.addAdditionalSaveData(nbt);
63 | if (!getItemStack().isEmpty()) {
64 | nbt.put("ItemStack", this.getItemStack().save(this.registryAccess()));
65 | }
66 | }
67 |
68 | @Override
69 | public void readAdditionalSaveData(CompoundTag nbt) {
70 | super.readAdditionalSaveData(nbt);
71 | this.setItemStack(
72 | ItemStack.parse(this.registryAccess(), nbt.getCompound("ItemStack"))
73 | .orElse(ItemStack.EMPTY));
74 | }
75 |
76 | public ItemStack getItemStack() {
77 | return this.getEntityData().get(DATA_ITEM_STACK);
78 | }
79 |
80 | public void setItemStack(ItemStack itemStack) {
81 | this.getEntityData().set(DATA_ITEM_STACK, itemStack);
82 | this.playSound(SoundEvents.VINDICATOR_CELEBRATE, 1.0f, 2.0f);
83 | this.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
84 | }
85 |
86 | @Override
87 | public SpawnGroupData finalizeSpawn(
88 | ServerLevelAccessor world,
89 | DifficultyInstance difficulty,
90 | MobSpawnType spawnReason,
91 | @Nullable SpawnGroupData entityData) {
92 | KoboldVariant variant = Util.getRandom(KoboldVariant.values(), this.random);
93 | setVariant(variant);
94 | return super.finalizeSpawn(world, difficulty, spawnReason, entityData);
95 | }
96 |
97 | @Override
98 | protected boolean shouldDropLoot() {
99 | return false;
100 | }
101 |
102 | @Override
103 | public void die(DamageSource arg) {
104 | super.die(arg);
105 | this.spawnAtLocation(getItemStack());
106 | setItemStack(ItemStack.EMPTY);
107 | }
108 |
109 | @Override
110 | public BrainActivityGroup getFightTasks() {
111 | return BrainActivityGroup.fightTasks(
112 | new InvalidateAttackTarget<>()
113 | .invalidateIf((target, entity) -> !target.isAlive() || !entity.hasLineOfSight(target)),
114 | new SetWalkTargetToAttackTarget<>()
115 | .startCondition(
116 | mob ->
117 | getItemStack().isEmpty()
118 | && getTarget() != null
119 | && !getTarget().getItemInHand(InteractionHand.MAIN_HAND).isEmpty()),
120 | new AnimatableMeleeAttack<>(6)
121 | .whenStarting(
122 | mob -> {
123 | this.triggerAnim("attackController", "attack");
124 | })
125 | .startCondition(
126 | mob ->
127 | MobsOfMythology.config.shouldKoboldsSteal
128 | && getItemStack().isEmpty()
129 | && getTarget() != null
130 | && !getTarget().getItemInHand(InteractionHand.MAIN_HAND).isEmpty())
131 | .stopIf(mob -> !getItemStack().isEmpty())
132 | .whenStopping(
133 | mob -> {
134 | if (!MobsOfMythology.config.shouldKoboldsSteal) return;
135 | LivingEntity target = getTarget();
136 | if (target != null) {
137 | setItemStack(target.getItemInHand(InteractionHand.MAIN_HAND).copy());
138 | target
139 | .getItemInHand(InteractionHand.MAIN_HAND)
140 | .shrink(getItemStack().getCount());
141 | }
142 | }),
143 | new FleeTarget<>()
144 | .fleeDistance(10)
145 | .speedModifier(MobsOfMythology.config.koboldFleeSpeedMod)
146 | .startCondition(
147 | mob ->
148 | !getItemStack().isEmpty()
149 | || BrainUtils.getTargetOfEntity(this).is(BrainUtils.getLastAttacker(this)))
150 | .whenStarting(
151 | pathfinderMob -> {
152 | if (!getItemStack().isEmpty())
153 | this.addEffect(
154 | new MobEffectInstance(MobEffects.GLOWING, 200, 255, false, false, false));
155 | }));
156 | }
157 |
158 | // TODO implement eating (see gigeresque)
159 | // public void tick() {
160 | // super.tick();
161 | // super.tick();
162 | // ItemStack itemStack = getItemStack();
163 | // if (!itemStack.isEmpty()) {
164 | // if (itemStack.is(ItemTags.WOLF_FOOD)) {
165 | // eat(level(), itemStack);
166 | // }
167 | // }
168 | // }
169 |
170 | @Override
171 | public T getVariant() {
172 | return (T) KoboldVariant.byId(this.getTypeVariant() & 255);
173 | }
174 |
175 | private void setVariant(KoboldVariant variant) {
176 | this.entityData.set(DATA_ID_TYPE_VARIANT, variant.getId() & 255);
177 | }
178 | }
179 |
--------------------------------------------------------------------------------