From 904e7266535d241916ca645082a7bf3a57f6fdcb Mon Sep 17 00:00:00 2001 From: Aolkzyeoer Date: Wed, 30 Sep 2026 20:45:11 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=A7=BB=E6=A4=8D=E5=9F=BA=E5=B2=A9?= =?UTF-8?q?=E7=89=88=E5=AE=9E=E4=BD=93=E5=88=B0Java=E7=89=88=EF=BC=9A?= =?UTF-8?q?=E7=BB=BF=E5=8F=B6=E7=B2=BE=E5=8D=8EBoss=E3=80=81=E7=BB=BF?= =?UTF-8?q?=E5=8F=B6=E7=B2=BE=E7=81=B5=E3=80=81=E5=83=B5=E5=B0=B8=E6=88=98?= =?UTF-8?q?=E5=A3=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 绿叶精华 Boss:三阶段战斗循环(破土无敌/近战/咆哮召唤),Boss血条,难度梯度伤害 - 绿叶精灵:范围喷吐攻击,含拖尾粒子 - 僵尸战士:难度感知伤害、随机武器与跳跃扑击AI - 新增 Bedrock 动画模型框架修复(Y轴翻转、动画剪辑切换) - 修复基岩粒子发射器(改用粒子图集获取sprite,修复1.21.1 NPE) - 补充方块datagen产物、战利品表与粒子清单 --- .gitignore | 7 +- build.gradle | 23 +- gradle.properties | 3 +- list/blocks.txt | 57 + list/creative_tabs.txt | 1 + list/entities.txt | 3 + list/items.txt | 57 + settings.gradle | 5 + .../blockstates/abyssal_summoner.json | 7 + .../decisland/blockstates/ash_cage.json | 7 + .../decisland/blockstates/ash_summoner.json | 7 + .../decisland/blockstates/bat_summoner.json | 7 + .../decisland/blockstates/broken_dirt.json | 7 + .../decisland/blockstates/cave_crate.json | 7 + .../blockstates/christmas_gift_block.json | 7 + .../assets/decisland/blockstates/crate.json | 7 + .../decisland/blockstates/deep_summoner.json | 7 + .../blockstates/dirt_ghost_block.json | 7 + .../blockstates/enchanted_summoner.json | 7 + .../decisland/blockstates/end_altar.json | 7 + .../everlasting_winter_summoner.json | 7 + .../blockstates/eye_of_nature_log.json | 7 + .../decisland/blockstates/flesh_block.json | 7 + .../decisland/blockstates/flowing_block.json | 7 + .../blockstates/forest_summoner.json | 7 + .../decisland/blockstates/frozen_cage.json | 7 + .../decisland/blockstates/frozen_crate.json | 7 + .../assets/decisland/blockstates/fuse.json | 7 + .../decisland/blockstates/ghost_ice.json | 7 + .../decisland/blockstates/golden_chain.json | 7 + .../blockstates/golden_fence_block.json | 7 + .../decisland/blockstates/ice_bookshelf.json | 7 + .../decisland/blockstates/ice_rope_block.json | 7 + .../decisland/blockstates/item_picker.json | 7 + .../blockstates/lace_block_black.json | 7 + .../blockstates/lace_block_light_red.json | 7 + .../decisland/blockstates/lampshade.json | 7 + .../blockstates/lightning_summoner.json | 7 + .../decisland/blockstates/lurk_block.json | 7 + .../decisland/blockstates/lurk_end_stone.json | 7 + .../assets/decisland/blockstates/mine.json | 7 + .../decisland/blockstates/mining_machine.json | 7 + .../assets/decisland/blockstates/monitor.json | 7 + .../blockstates/monitor_activated.json | 7 + .../decisland/blockstates/nuke_block.json | 7 + .../blockstates/plain_tower_summoner.json | 7 + .../blockstates/purpur_summoner.json | 7 + .../decisland/blockstates/radiate_dirt.json | 7 + .../decisland/blockstates/radiate_stone.json | 7 + .../blockstates/radiate_stonebrick.json | 7 + .../blockstates/raining_summoner.json | 7 + .../blockstates/red_patterned_stonebrick.json | 7 + .../decisland/blockstates/scale_block.json | 7 + .../blockstates/small_stone_block_entity.json | 7 + .../blockstates/snow_brick_block.json | 7 + .../decisland/blockstates/soul_summoner.json | 7 + .../decisland/blockstates/stone_heap.json | 7 + .../decisland/blockstates/stone_road.json | 7 + .../decisland/blockstates/sunny_summoner.json | 7 + .../blockstates/sweet_berries_block.json | 7 + .../blockstates/thin_rope_block.json | 7 + .../assets/decisland/lang/en_us.json | 1 + .../assets/decisland/lang/zh_cn.json | 1 + .../models/block/abyssal_summoner.json | 6 + .../decisland/models/block/ash_cage.json | 6 + .../decisland/models/block/ash_summoner.json | 6 + .../decisland/models/block/bat_summoner.json | 6 + .../decisland/models/block/broken_dirt.json | 6 + .../decisland/models/block/cave_crate.json | 6 + .../models/block/christmas_gift_block.json | 6 + .../assets/decisland/models/block/crate.json | 6 + .../decisland/models/block/deep_summoner.json | 6 + .../models/block/dirt_ghost_block.json | 6 + .../models/block/enchanted_summoner.json | 8 + .../decisland/models/block/end_altar.json | 8 + .../block/everlasting_winter_summoner.json | 6 + .../models/block/eye_of_nature_log.json | 6 + .../decisland/models/block/flesh_block.json | 6 + .../decisland/models/block/flowing_block.json | 8 + .../models/block/forest_summoner.json | 6 + .../decisland/models/block/frozen_cage.json | 6 + .../decisland/models/block/frozen_crate.json | 8 + .../assets/decisland/models/block/fuse.json | 6 + .../decisland/models/block/ghost_ice.json | 6 + .../decisland/models/block/golden_chain.json | 6 + .../models/block/golden_fence_block.json | 6 + .../decisland/models/block/ice_bookshelf.json | 8 + .../models/block/ice_rope_block.json | 6 + .../decisland/models/block/item_picker.json | 8 + .../models/block/lace_block_black.json | 6 + .../models/block/lace_block_light_red.json | 6 + .../decisland/models/block/lampshade.json | 6 + .../models/block/lightning_summoner.json | 8 + .../decisland/models/block/lurk_block.json | 6 + .../models/block/lurk_end_stone.json | 8 + .../assets/decisland/models/block/mine.json | 8 + .../models/block/mining_machine.json | 8 + .../decisland/models/block/monitor.json | 8 + .../models/block/monitor_activated.json | 8 + .../decisland/models/block/nuke_block.json | 8 + .../models/block/plain_tower_summoner.json | 8 + .../models/block/purpur_summoner.json | 8 + .../decisland/models/block/radiate_dirt.json | 6 + .../decisland/models/block/radiate_stone.json | 6 + .../models/block/radiate_stonebrick.json | 6 + .../models/block/raining_summoner.json | 8 + .../block/red_patterned_stonebrick.json | 6 + .../decisland/models/block/scale_block.json | 6 + .../block/small_stone_block_entity.json | 6 + .../models/block/snow_brick_block.json | 6 + .../decisland/models/block/soul_summoner.json | 6 + .../decisland/models/block/stone_heap.json | 6 + .../decisland/models/block/stone_road.json | 6 + .../models/block/sunny_summoner.json | 8 + .../models/block/sweet_berries_block.json | 6 + .../models/block/thin_rope_block.json | 6 + .../models/item/abyssal_summoner.json | 3 + .../decisland/models/item/ash_cage.json | 3 + .../decisland/models/item/ash_summoner.json | 3 + .../decisland/models/item/bat_summoner.json | 3 + .../decisland/models/item/broken_dirt.json | 3 + .../decisland/models/item/cave_crate.json | 3 + .../models/item/christmas_gift_block.json | 3 + .../assets/decisland/models/item/crate.json | 3 + .../decisland/models/item/deep_summoner.json | 3 + .../models/item/dirt_ghost_block.json | 3 + .../models/item/enchanted_summoner.json | 3 + .../decisland/models/item/end_altar.json | 3 + .../item/everlasting_winter_summoner.json | 3 + .../models/item/eye_of_nature_log.json | 3 + .../decisland/models/item/flesh_block.json | 3 + .../decisland/models/item/flowing_block.json | 3 + .../models/item/forest_summoner.json | 3 + .../decisland/models/item/frozen_cage.json | 3 + .../decisland/models/item/frozen_crate.json | 3 + .../assets/decisland/models/item/fuse.json | 3 + .../decisland/models/item/ghost_ice.json | 3 + .../models/item/golden_bookshelf.json | 3 + .../models/item/golden_bookshelf_frame.json | 3 + .../decisland/models/item/golden_chain.json | 3 + .../models/item/golden_fence_block.json | 3 + .../decisland/models/item/ice_bookshelf.json | 3 + .../decisland/models/item/ice_rope_block.json | 3 + .../decisland/models/item/item_picker.json | 3 + .../models/item/lace_block_black.json | 3 + .../models/item/lace_block_light_red.json | 3 + .../decisland/models/item/lampshade.json | 3 + .../models/item/lightning_summoner.json | 3 + .../decisland/models/item/lurk_block.json | 3 + .../decisland/models/item/lurk_end_stone.json | 3 + .../models/item/magic_letter_box.json | 3 + .../assets/decisland/models/item/mine.json | 3 + .../decisland/models/item/mining_machine.json | 3 + .../assets/decisland/models/item/monitor.json | 3 + .../models/item/monitor_activated.json | 3 + .../decisland/models/item/nuke_block.json | 3 + .../models/item/plain_tower_summoner.json | 3 + .../models/item/purpur_summoner.json | 3 + .../decisland/models/item/radiate_dirt.json | 3 + .../decisland/models/item/radiate_stone.json | 3 + .../models/item/radiate_stonebrick.json | 3 + .../models/item/raining_summoner.json | 3 + .../decisland/models/item/red_lantern.json | 3 + .../models/item/red_patterned_stonebrick.json | 3 + .../decisland/models/item/scale_block.json | 3 + .../models/item/small_stone_block_entity.json | 3 + .../models/item/snow_brick_block.json | 3 + .../decisland/models/item/soul_summoner.json | 3 + .../decisland/models/item/stone_heap.json | 3 + .../decisland/models/item/stone_road.json | 3 + .../decisland/models/item/sunny_summoner.json | 3 + .../models/item/sweet_berries_block.json | 3 + .../models/item/thin_rope_block.json | 3 + .../loot_table/blocks/abyssal_summoner.json | 4 + .../decisland/loot_table/blocks/ash_cage.json | 21 + .../loot_table/blocks/ash_summoner.json | 4 + .../loot_table/blocks/bat_summoner.json | 4 + .../loot_table/blocks/broken_dirt.json | 21 + .../loot_table/blocks/cave_crate.json | 21 + .../blocks/christmas_gift_block.json | 32 + .../decisland/loot_table/blocks/crate.json | 21 + .../loot_table/blocks/deep_summoner.json | 4 + .../loot_table/blocks/dirt_ghost_block.json | 4 + .../loot_table/blocks/enchanted_summoner.json | 4 + .../loot_table/blocks/end_altar.json | 21 + .../blocks/everlasting_winter_summoner.json | 21 + .../loot_table/blocks/eye_of_nature_log.json | 20 + .../loot_table/blocks/flesh_block.json | 4 + .../loot_table/blocks/flowing_block.json | 21 + .../loot_table/blocks/forest_summoner.json | 4 + .../loot_table/blocks/frozen_cage.json | 21 + .../loot_table/blocks/frozen_crate.json | 21 + .../decisland/loot_table/blocks/fuse.json | 21 + .../loot_table/blocks/ghost_ice.json | 4 + .../loot_table/blocks/golden_bookshelf.json | 21 + .../blocks/golden_bookshelf_frame.json | 21 + .../loot_table/blocks/golden_chain.json | 21 + .../loot_table/blocks/golden_fence_block.json | 21 + .../loot_table/blocks/ice_bookshelf.json | 49 + .../loot_table/blocks/ice_rope_block.json | 4 + .../loot_table/blocks/item_picker.json | 21 + .../loot_table/blocks/lace_block_black.json | 21 + .../blocks/lace_block_light_red.json | 21 + .../loot_table/blocks/lampshade.json | 21 + .../loot_table/blocks/lightning_summoner.json | 21 + .../loot_table/blocks/lurk_block.json | 22 + .../loot_table/blocks/lurk_end_stone.json | 21 + .../loot_table/blocks/magic_letter_box.json | 21 + .../decisland/loot_table/blocks/mine.json | 21 + .../loot_table/blocks/mining_machine.json | 21 + .../decisland/loot_table/blocks/monitor.json | 21 + .../loot_table/blocks/monitor_activated.json | 21 + .../loot_table/blocks/nuke_block.json | 21 + .../blocks/plain_tower_summoner.json | 4 + .../loot_table/blocks/purpur_summoner.json | 21 + .../loot_table/blocks/radiate_dirt.json | 20 + .../loot_table/blocks/radiate_stone.json | 24 + .../loot_table/blocks/radiate_stonebrick.json | 24 + .../loot_table/blocks/raining_summoner.json | 21 + .../loot_table/blocks/red_lantern.json | 21 + .../blocks/red_patterned_stonebrick.json | 21 + .../loot_table/blocks/scale_block.json | 21 + .../blocks/small_stone_block_entity.json | 21 + .../loot_table/blocks/snow_brick_block.json | 21 + .../loot_table/blocks/soul_summoner.json | 4 + .../loot_table/blocks/stone_heap.json | 30 + .../loot_table/blocks/stone_road.json | 30 + .../loot_table/blocks/sunny_summoner.json | 21 + .../blocks/sweet_berries_block.json | 21 + .../loot_table/blocks/thin_rope_block.json | 4 + .../minecraft/tags/block/mineable/axe.json | 9 +- .../tags/block/mineable/pickaxe.json | 29 +- .../java/com/dec/decisland/DecIslandClient.kt | 61 + .../java/com/dec/decisland/block/ModBlocks.kt | 783 ++++++++++- .../dec/decisland/block/custom/ShapedBlock.kt | 19 + .../client/bedrock/BedrockEmitterManager.kt | 5 +- .../model/BedrockAnimatedEntityModel.kt | 26 +- .../renderer/BedrockProjectileRenderer.kt | 4 +- .../client/renderer/ElfOfLeavesRenderer.kt | 20 + .../client/renderer/LeavesGolemModel.kt | 81 ++ .../client/renderer/LeavesGolemRenderer.kt | 24 + .../client/renderer/PumpkinBombRenderer.kt | 4 +- .../client/renderer/ZombieWarriorRenderer.kt | 17 + .../datagen/ModBlockLootTablesProvider.kt | 36 + .../com/dec/decisland/entity/ModEntities.kt | 21 + .../decisland/entity/custom/ElfOfLeaves.kt | 100 ++ .../decisland/entity/custom/LeavesGolem.kt | 298 ++++ .../decisland/entity/custom/ZombieWarrior.kt | 127 ++ .../dec/decisland/events/ModClientEvents.kt | 8 +- .../dec/decisland/events/ModEventBusEvents.kt | 23 + .../dec/decisland/item/ModCreativeModeTabs.kt | 10 +- .../dec/decisland/particles/ModParticles.kt | 1 + .../entity/leaves_golem.animation.json | 1214 +++++++++++++++++ .../models/entity/leaves_golem.geometry.json | 162 +++ .../blockstates/golden_bookshelf.json | 7 + .../blockstates/golden_bookshelf_frame.json | 7 + .../blockstates/magic_letter_box.json | 7 + .../decisland/blockstates/red_lantern.json | 7 + .../models/block/golden_bookshelf.json | 24 + .../models/block/golden_bookshelf_frame.json | 24 + .../models/block/magic_letter_box.json | 23 + .../decisland/models/block/red_lantern.json | 75 + .../decisland/particles/bedrock_manifest.txt | 2 + .../particles/leaves_essence.particle.json | 46 + .../textures/block/abyssal_summoner.png | Bin 0 -> 318 bytes .../block/abyssal_summoner_activated.png | Bin 0 -> 323 bytes .../block/abyssal_summoner_locked.png | Bin 0 -> 412 bytes .../textures/block/amethyst_block_unused.png | Bin 0 -> 692 bytes .../decisland/textures/block/ash_cage.png | Bin 0 -> 302 bytes .../decisland/textures/block/ash_summoner.png | Bin 0 -> 277 bytes .../textures/block/ash_summoner_activated.png | Bin 0 -> 665 bytes .../textures/block/ash_summoner_locked.png | Bin 0 -> 331 bytes .../block/baby_blue_eyes_flower_crop.png | Bin 0 -> 1356 bytes .../textures/block/balloon_flower_crop.png | Bin 0 -> 1166 bytes .../decisland/textures/block/bat_summoner.png | Bin 0 -> 289 bytes .../textures/block/bat_summoner_activated.png | Bin 0 -> 289 bytes .../block/bizarre_chilli_crop_stage_0.png | Bin 0 -> 155 bytes .../block/bizarre_chilli_crop_stage_1.png | Bin 0 -> 232 bytes .../block/bizarre_chilli_crop_stage_2.png | Bin 0 -> 316 bytes .../block/bizarre_chilli_crop_stage_3.png | Bin 0 -> 385 bytes .../block/bizarre_chilli_crop_stage_4.png | Bin 0 -> 451 bytes .../block/bizarre_chilli_crop_stage_5.png | Bin 0 -> 549 bytes .../block/bizarre_chilli_crop_stage_6.png | Bin 0 -> 639 bytes .../decisland/textures/block/bracken_crop.png | Bin 0 -> 238 bytes .../textures/block/breeze_flower_crop.png | Bin 0 -> 1200 bytes .../decisland/textures/block/broken_dirt.png | Bin 0 -> 940 bytes .../textures/block/butter_flower_crop.png | Bin 0 -> 1240 bytes .../textures/block/butterfly_pea_crop.png | Bin 0 -> 318 bytes .../decisland/textures/block/cave_crate.png | Bin 0 -> 588 bytes .../textures/block/cave_crate_locked.png | Bin 0 -> 575 bytes .../textures/block/christmas_gift_block.png | Bin 0 -> 2031 bytes .../textures/block/cloud_flower_crop.png | Bin 0 -> 359 bytes .../textures/block/compressed_ice.png | Bin 509 -> 867 bytes .../textures/block/corn_crop_0_0.png | Bin 0 -> 186 bytes .../textures/block/corn_crop_0_1.png | Bin 0 -> 209 bytes .../textures/block/corn_crop_0_2.png | Bin 0 -> 242 bytes .../textures/block/corn_crop_0_3.png | Bin 0 -> 265 bytes .../textures/block/corn_crop_0_4.png | Bin 0 -> 297 bytes .../textures/block/corn_crop_1_0.png | Bin 0 -> 208 bytes .../textures/block/corn_crop_1_1.png | Bin 0 -> 242 bytes .../textures/block/corn_crop_1_2.png | Bin 0 -> 284 bytes .../textures/block/corn_crop_1_3.png | Bin 0 -> 346 bytes .../assets/decisland/textures/block/crate.png | Bin 0 -> 418 bytes .../decisland/textures/block/crate_locked.png | Bin 0 -> 612 bytes .../decisland/textures/block/crinum_crop.png | Bin 0 -> 1140 bytes .../textures/block/dandelion_crop.png | Bin 0 -> 1208 bytes .../textures/block/deep_dandelion_crop.png | Bin 0 -> 1279 bytes .../textures/block/deep_summoner.png | Bin 0 -> 661 bytes .../block/deep_summoner_activated.png | Bin 0 -> 658 bytes .../textures/block/depart_grass_crop.png | Bin 0 -> 290 bytes .../textures/block/desert_fan_flower_crop.png | Bin 0 -> 1244 bytes .../textures/block/dirt_ghost_block.png | Bin 0 -> 573 bytes .../assets/decisland/textures/block/empty.png | Bin 0 -> 146 bytes .../enchanted_summoner_activated_side.png | Bin 0 -> 409 bytes .../block/enchanted_summoner_side.png | Bin 0 -> 421 bytes .../textures/block/enchanted_summoner_up.png | Bin 0 -> 308 bytes .../textures/block/end_altar_down.png | Bin 0 -> 321 bytes .../textures/block/end_altar_side.png | Bin 0 -> 780 bytes .../decisland/textures/block/end_altar_up.png | Bin 0 -> 694 bytes .../block/everlasting_winter_summoner.png | Bin 0 -> 385 bytes .../everlasting_winter_summoner_activated.png | Bin 0 -> 351 bytes .../everlasting_winter_summoner_locked.png | Bin 0 -> 379 bytes .../block/experience_flower_stage_0.png | Bin 0 -> 173 bytes .../block/experience_flower_stage_1.png | Bin 0 -> 239 bytes .../block/experience_flower_stage_2.png | Bin 0 -> 402 bytes .../textures/block/eye_of_nature_log.png | Bin 0 -> 291 bytes .../textures/block/fan_flower_crop.png | Bin 0 -> 1274 bytes .../decisland/textures/block/flesh_block.png | Bin 0 -> 314 bytes .../textures/block/flowing_block_down.png | Bin 0 -> 561 bytes .../textures/block/flowing_block_side_0.png | Bin 0 -> 521 bytes .../textures/block/flowing_block_side_1.png | Bin 0 -> 528 bytes .../textures/block/flowing_block_side_2.png | Bin 0 -> 531 bytes .../textures/block/flowing_block_side_3.png | Bin 0 -> 538 bytes .../textures/block/flowing_block_side_4.png | Bin 0 -> 542 bytes .../textures/block/flowing_block_up.png | Bin 0 -> 422 bytes .../textures/block/forest_summoner.png | Bin 0 -> 254 bytes .../block/forest_summoner_activated.png | Bin 0 -> 306 bytes .../textures/block/fritillary_crop_0.png | Bin 0 -> 219 bytes .../textures/block/fritillary_crop_1.png | Bin 0 -> 252 bytes .../textures/block/fritillary_crop_2.png | Bin 0 -> 268 bytes .../textures/block/fritillary_crop_3.png | Bin 0 -> 279 bytes .../textures/block/fritillary_crop_4.png | Bin 0 -> 303 bytes .../decisland/textures/block/frozen_cage.png | Bin 0 -> 311 bytes .../decisland/textures/block/frozen_crate.png | Bin 0 -> 312 bytes .../textures/block/frozen_crate_locked.png | Bin 0 -> 313 bytes .../textures/block/frozen_crate_up.png | Bin 0 -> 254 bytes .../block/frozen_mirror_flower_crop.png | Bin 0 -> 1985 bytes .../assets/decisland/textures/block/fuse.png | Bin 0 -> 595 bytes .../decisland/textures/block/ghost_ice.png | Bin 0 -> 397 bytes .../textures/block/gold_flower_crop.png | Bin 0 -> 1212 bytes .../textures/block/golden_bookshelf_back.png | Bin 0 -> 467 bytes .../block/golden_bookshelf_frame_front.png | Bin 0 -> 327 bytes .../block/golden_bookshelf_frame_side.png | Bin 0 -> 329 bytes .../textures/block/golden_bookshelf_front.png | Bin 0 -> 794 bytes .../textures/block/golden_bookshelf_side.png | Bin 0 -> 383 bytes .../block/golden_bookshelf_up_down.png | Bin 0 -> 327 bytes .../decisland/textures/block/golden_chain.png | Bin 0 -> 1586 bytes .../textures/block/golden_fence_block.png | Bin 0 -> 2049 bytes .../decisland/textures/block/grape_crop_0.png | Bin 0 -> 375 bytes .../decisland/textures/block/grape_crop_1.png | Bin 0 -> 494 bytes .../textures/block/hammer_flower_crop.png | Bin 0 -> 314 bytes .../block/houttuynia_crop_stage_0.png | Bin 0 -> 144 bytes .../block/houttuynia_crop_stage_1.png | Bin 0 -> 189 bytes .../block/houttuynia_crop_stage_2.png | Bin 0 -> 249 bytes .../block/houttuynia_crop_stage_3.png | Bin 0 -> 297 bytes .../textures/block/ice_bookshelf_side.png | Bin 0 -> 372 bytes .../textures/block/ice_rope_block_0.png | Bin 0 -> 387 bytes .../textures/block/ice_rope_block_1.png | Bin 0 -> 379 bytes .../textures/block/ice_rope_block_2.png | Bin 0 -> 379 bytes .../textures/block/item_picker_down.png | Bin 0 -> 502 bytes .../textures/block/item_picker_side.png | Bin 0 -> 311 bytes .../textures/block/item_picker_up.png | Bin 0 -> 322 bytes .../textures/block/lace_block_black_side.png | Bin 0 -> 1235 bytes .../textures/block/lace_block_black_up.png | Bin 0 -> 1217 bytes .../block/lace_block_light_red_side.png | Bin 0 -> 1707 bytes .../block/lace_block_light_red_up.png | Bin 0 -> 1330 bytes .../textures/block/lamp_flower_crop.png | Bin 0 -> 1277 bytes .../decisland/textures/block/lampshade.png | Bin 0 -> 1806 bytes .../textures/block/lava_flower_crop_0.png | Bin 0 -> 170 bytes .../textures/block/lava_flower_crop_1.png | Bin 0 -> 197 bytes .../textures/block/lava_flower_crop_2.png | Bin 0 -> 217 bytes .../textures/block/lava_flower_crop_3.png | Bin 0 -> 255 bytes .../textures/block/lava_flower_crop_4.png | Bin 0 -> 267 bytes .../textures/block/leaves_flower_crop.png | Bin 0 -> 1247 bytes .../decisland/textures/block/leek_stage_0.png | Bin 0 -> 164 bytes .../decisland/textures/block/leek_stage_1.png | Bin 0 -> 227 bytes .../decisland/textures/block/leek_stage_2.png | Bin 0 -> 275 bytes .../textures/block/lightning_summoner.png | Bin 0 -> 468 bytes .../decisland/textures/block/lurk_block.png | Bin 0 -> 482 bytes .../textures/block/lurk_bud_crop.png | Bin 0 -> 1239 bytes .../textures/block/lurk_end_stone_side.png | Bin 0 -> 328 bytes .../textures/block/lurk_end_stone_up.png | Bin 0 -> 265 bytes .../textures/block/lurk_fruit_crop.png | Bin 0 -> 1229 bytes .../decisland/textures/block/lurk_log_up.png | Bin 0 -> 502 bytes .../textures/block/lurk_mushroom_lit.png | Bin 0 -> 282 bytes .../textures/block/lurk_orchid_crop.png | Bin 0 -> 1264 bytes .../textures/block/magic_letter_box_front.png | Bin 0 -> 258 bytes ...etter_box_front_with_magic_scroll_blue.png | Bin 0 -> 298 bytes .../textures/block/magic_letter_box_side.png | Bin 0 -> 260 bytes .../textures/block/magic_letter_box_top.png | Bin 0 -> 232 bytes .../textures/block/maple_flower_crop.png | Bin 0 -> 1297 bytes .../assets/decisland/textures/block/mine.png | Bin 0 -> 609 bytes .../decisland/textures/block/mine_top.png | Bin 0 -> 923 bytes .../textures/block/mining_machine_down.png | Bin 0 -> 303 bytes .../textures/block/mining_machine_side.png | Bin 0 -> 595 bytes .../textures/block/mining_machine_up.png | Bin 0 -> 621 bytes .../textures/block/mock_strawberry_crop.png | Bin 0 -> 1266 bytes .../decisland/textures/block/monitor.png | Bin 0 -> 599 bytes .../textures/block/monitor_activated.png | Bin 0 -> 603 bytes .../decisland/textures/block/mooli_crop_0.png | Bin 0 -> 169 bytes .../decisland/textures/block/mooli_crop_1.png | Bin 0 -> 203 bytes .../decisland/textures/block/mooli_crop_2.png | Bin 0 -> 244 bytes .../decisland/textures/block/mooli_crop_3.png | Bin 0 -> 262 bytes .../textures/block/mouth_flower_crop.png | Bin 0 -> 366 bytes .../textures/block/nether_dandelion_crop.png | Bin 0 -> 1202 bytes .../block/nether_stick_flower_crop.png | Bin 0 -> 1188 bytes .../decisland/textures/block/nuke_side.png | Bin 0 -> 508 bytes .../block/patterned_vase_red_block.png | Bin 0 -> 3927 bytes .../textures/block/pink_dandelion_crop.png | Bin 0 -> 1226 bytes .../textures/block/pink_fan_flower_crop.png | Bin 0 -> 1284 bytes .../plain_tower_summoner_activated_up.png | Bin 0 -> 297 bytes .../block/plain_tower_summoner_side.png | Bin 0 -> 236 bytes .../block/plain_tower_summoner_up.png | Bin 0 -> 297 bytes .../textures/block/purpur_summoner_side.png | Bin 0 -> 258 bytes .../textures/block/purpur_summoner_up.png | Bin 0 -> 306 bytes .../decisland/textures/block/radiate_dirt.png | Bin 0 -> 259 bytes .../textures/block/radiate_stone.png | Bin 0 -> 226 bytes .../textures/block/radiate_stonebrick.png | Bin 0 -> 259 bytes .../textures/block/raining_summoner.png | Bin 0 -> 543 bytes .../decisland/textures/block/red_lantern.png | Bin 0 -> 2388 bytes .../block/red_patterned_stonebrick_side.png | Bin 0 -> 1329 bytes .../block/red_patterned_stonebrick_up.png | Bin 0 -> 1347 bytes .../textures/block/red_spider_lily_crop.png | Bin 0 -> 437 bytes .../decisland/textures/block/rice_stage_0.png | Bin 0 -> 114 bytes .../decisland/textures/block/rice_stage_1.png | Bin 0 -> 157 bytes .../decisland/textures/block/rice_stage_2.png | Bin 0 -> 371 bytes .../decisland/textures/block/rice_stage_3.png | Bin 0 -> 430 bytes .../decisland/textures/block/rice_stage_4.png | Bin 0 -> 390 bytes .../decisland/textures/block/rice_stage_5.png | Bin 0 -> 286 bytes .../textures/block/rosemary_crop.png | Bin 0 -> 384 bytes .../textures/block/russet_grass_crop.png | Bin 0 -> 1212 bytes .../decisland/textures/block/scale_block.png | Bin 0 -> 613 bytes .../decisland/textures/block/small_stone.png | Bin 0 -> 891 bytes .../textures/block/snow_brick_block.png | Bin 0 -> 456 bytes .../textures/block/snow_flower_crop.png | Bin 0 -> 1325 bytes .../textures/block/snow_lotus_crop.png | Bin 0 -> 343 bytes .../textures/block/soul_summoner.png | Bin 0 -> 320 bytes .../block/soul_summoner_activated.png | Bin 0 -> 313 bytes .../textures/block/soybean_stage_0.png | Bin 0 -> 148 bytes .../textures/block/soybean_stage_1.png | Bin 0 -> 162 bytes .../textures/block/soybean_stage_2.png | Bin 0 -> 233 bytes .../textures/block/soybean_stage_3.png | Bin 0 -> 283 bytes .../textures/block/soybean_stage_4.png | Bin 0 -> 313 bytes .../textures/block/spark_flower_crop.png | Bin 0 -> 1155 bytes .../textures/block/spell_flower_crop.png | Bin 0 -> 1175 bytes .../textures/block/star_flower_crop.png | Bin 0 -> 1156 bytes .../textures/block/stick_flower_crop.png | Bin 0 -> 1168 bytes .../decisland/textures/block/summoner.png | Bin 0 -> 664 bytes .../textures/block/sunny_summoner.png | Bin 0 -> 437 bytes .../textures/block/sweet_berries_block.png | Bin 0 -> 759 bytes .../textures/block/thin_rope_block.png | Bin 0 -> 384 bytes .../decisland/textures/block/thyme_crop.png | Bin 0 -> 343 bytes .../decisland/textures/block/tnt_down.png | Bin 0 -> 158 bytes .../decisland/textures/block/tnt_up.png | Bin 0 -> 298 bytes .../decisland/textures/block/trellis.png | Bin 0 -> 387 bytes .../textures/block/trellis_cover.png | Bin 0 -> 210 bytes .../textures/block/trellis_crop_wither.png | Bin 0 -> 494 bytes .../textures/block/weather_console_down.png | Bin 0 -> 286 bytes .../textures/block/weather_console_up.png | Bin 0 -> 539 bytes .../textures/block/wither_cone_crop.png | Bin 0 -> 1200 bytes .../block/yellow_butterfly_flower_crop.png | Bin 0 -> 1302 bytes .../textures/entity/elf_of_leaves.png | Bin 0 -> 1408 bytes .../textures/entity/leaves_golem.png | Bin 0 -> 4017 bytes .../textures/entity/zombie_warrior.png | Bin 0 -> 1537 bytes .../entity/zombie_warrior_legacy64x32.png | Bin 0 -> 1618 bytes .../textures/particle/leaves_essence.png | Bin 0 -> 226 bytes .../loot_table/entities/leaves_golem.json | 134 ++ .../biome_modifier/zombie_warrior_spawns.json | 10 + .../worldgen/biome/spawns_zombie_warrior.json | 10 + 479 files changed, 5520 insertions(+), 28 deletions(-) create mode 100644 src/generated/resources/assets/decisland/blockstates/abyssal_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/ash_cage.json create mode 100644 src/generated/resources/assets/decisland/blockstates/ash_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/bat_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/broken_dirt.json create mode 100644 src/generated/resources/assets/decisland/blockstates/cave_crate.json create mode 100644 src/generated/resources/assets/decisland/blockstates/christmas_gift_block.json create mode 100644 src/generated/resources/assets/decisland/blockstates/crate.json create mode 100644 src/generated/resources/assets/decisland/blockstates/deep_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/dirt_ghost_block.json create mode 100644 src/generated/resources/assets/decisland/blockstates/enchanted_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/end_altar.json create mode 100644 src/generated/resources/assets/decisland/blockstates/everlasting_winter_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/eye_of_nature_log.json create mode 100644 src/generated/resources/assets/decisland/blockstates/flesh_block.json create mode 100644 src/generated/resources/assets/decisland/blockstates/flowing_block.json create mode 100644 src/generated/resources/assets/decisland/blockstates/forest_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/frozen_cage.json create mode 100644 src/generated/resources/assets/decisland/blockstates/frozen_crate.json create mode 100644 src/generated/resources/assets/decisland/blockstates/fuse.json create mode 100644 src/generated/resources/assets/decisland/blockstates/ghost_ice.json create mode 100644 src/generated/resources/assets/decisland/blockstates/golden_chain.json create mode 100644 src/generated/resources/assets/decisland/blockstates/golden_fence_block.json create mode 100644 src/generated/resources/assets/decisland/blockstates/ice_bookshelf.json create mode 100644 src/generated/resources/assets/decisland/blockstates/ice_rope_block.json create mode 100644 src/generated/resources/assets/decisland/blockstates/item_picker.json create mode 100644 src/generated/resources/assets/decisland/blockstates/lace_block_black.json create mode 100644 src/generated/resources/assets/decisland/blockstates/lace_block_light_red.json create mode 100644 src/generated/resources/assets/decisland/blockstates/lampshade.json create mode 100644 src/generated/resources/assets/decisland/blockstates/lightning_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/lurk_block.json create mode 100644 src/generated/resources/assets/decisland/blockstates/lurk_end_stone.json create mode 100644 src/generated/resources/assets/decisland/blockstates/mine.json create mode 100644 src/generated/resources/assets/decisland/blockstates/mining_machine.json create mode 100644 src/generated/resources/assets/decisland/blockstates/monitor.json create mode 100644 src/generated/resources/assets/decisland/blockstates/monitor_activated.json create mode 100644 src/generated/resources/assets/decisland/blockstates/nuke_block.json create mode 100644 src/generated/resources/assets/decisland/blockstates/plain_tower_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/purpur_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/radiate_dirt.json create mode 100644 src/generated/resources/assets/decisland/blockstates/radiate_stone.json create mode 100644 src/generated/resources/assets/decisland/blockstates/radiate_stonebrick.json create mode 100644 src/generated/resources/assets/decisland/blockstates/raining_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/red_patterned_stonebrick.json create mode 100644 src/generated/resources/assets/decisland/blockstates/scale_block.json create mode 100644 src/generated/resources/assets/decisland/blockstates/small_stone_block_entity.json create mode 100644 src/generated/resources/assets/decisland/blockstates/snow_brick_block.json create mode 100644 src/generated/resources/assets/decisland/blockstates/soul_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/stone_heap.json create mode 100644 src/generated/resources/assets/decisland/blockstates/stone_road.json create mode 100644 src/generated/resources/assets/decisland/blockstates/sunny_summoner.json create mode 100644 src/generated/resources/assets/decisland/blockstates/sweet_berries_block.json create mode 100644 src/generated/resources/assets/decisland/blockstates/thin_rope_block.json create mode 100644 src/generated/resources/assets/decisland/models/block/abyssal_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/ash_cage.json create mode 100644 src/generated/resources/assets/decisland/models/block/ash_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/bat_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/broken_dirt.json create mode 100644 src/generated/resources/assets/decisland/models/block/cave_crate.json create mode 100644 src/generated/resources/assets/decisland/models/block/christmas_gift_block.json create mode 100644 src/generated/resources/assets/decisland/models/block/crate.json create mode 100644 src/generated/resources/assets/decisland/models/block/deep_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/dirt_ghost_block.json create mode 100644 src/generated/resources/assets/decisland/models/block/enchanted_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/end_altar.json create mode 100644 src/generated/resources/assets/decisland/models/block/everlasting_winter_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/eye_of_nature_log.json create mode 100644 src/generated/resources/assets/decisland/models/block/flesh_block.json create mode 100644 src/generated/resources/assets/decisland/models/block/flowing_block.json create mode 100644 src/generated/resources/assets/decisland/models/block/forest_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/frozen_cage.json create mode 100644 src/generated/resources/assets/decisland/models/block/frozen_crate.json create mode 100644 src/generated/resources/assets/decisland/models/block/fuse.json create mode 100644 src/generated/resources/assets/decisland/models/block/ghost_ice.json create mode 100644 src/generated/resources/assets/decisland/models/block/golden_chain.json create mode 100644 src/generated/resources/assets/decisland/models/block/golden_fence_block.json create mode 100644 src/generated/resources/assets/decisland/models/block/ice_bookshelf.json create mode 100644 src/generated/resources/assets/decisland/models/block/ice_rope_block.json create mode 100644 src/generated/resources/assets/decisland/models/block/item_picker.json create mode 100644 src/generated/resources/assets/decisland/models/block/lace_block_black.json create mode 100644 src/generated/resources/assets/decisland/models/block/lace_block_light_red.json create mode 100644 src/generated/resources/assets/decisland/models/block/lampshade.json create mode 100644 src/generated/resources/assets/decisland/models/block/lightning_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/lurk_block.json create mode 100644 src/generated/resources/assets/decisland/models/block/lurk_end_stone.json create mode 100644 src/generated/resources/assets/decisland/models/block/mine.json create mode 100644 src/generated/resources/assets/decisland/models/block/mining_machine.json create mode 100644 src/generated/resources/assets/decisland/models/block/monitor.json create mode 100644 src/generated/resources/assets/decisland/models/block/monitor_activated.json create mode 100644 src/generated/resources/assets/decisland/models/block/nuke_block.json create mode 100644 src/generated/resources/assets/decisland/models/block/plain_tower_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/purpur_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/radiate_dirt.json create mode 100644 src/generated/resources/assets/decisland/models/block/radiate_stone.json create mode 100644 src/generated/resources/assets/decisland/models/block/radiate_stonebrick.json create mode 100644 src/generated/resources/assets/decisland/models/block/raining_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/red_patterned_stonebrick.json create mode 100644 src/generated/resources/assets/decisland/models/block/scale_block.json create mode 100644 src/generated/resources/assets/decisland/models/block/small_stone_block_entity.json create mode 100644 src/generated/resources/assets/decisland/models/block/snow_brick_block.json create mode 100644 src/generated/resources/assets/decisland/models/block/soul_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/stone_heap.json create mode 100644 src/generated/resources/assets/decisland/models/block/stone_road.json create mode 100644 src/generated/resources/assets/decisland/models/block/sunny_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/block/sweet_berries_block.json create mode 100644 src/generated/resources/assets/decisland/models/block/thin_rope_block.json create mode 100644 src/generated/resources/assets/decisland/models/item/abyssal_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/ash_cage.json create mode 100644 src/generated/resources/assets/decisland/models/item/ash_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/bat_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/broken_dirt.json create mode 100644 src/generated/resources/assets/decisland/models/item/cave_crate.json create mode 100644 src/generated/resources/assets/decisland/models/item/christmas_gift_block.json create mode 100644 src/generated/resources/assets/decisland/models/item/crate.json create mode 100644 src/generated/resources/assets/decisland/models/item/deep_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/dirt_ghost_block.json create mode 100644 src/generated/resources/assets/decisland/models/item/enchanted_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/end_altar.json create mode 100644 src/generated/resources/assets/decisland/models/item/everlasting_winter_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/eye_of_nature_log.json create mode 100644 src/generated/resources/assets/decisland/models/item/flesh_block.json create mode 100644 src/generated/resources/assets/decisland/models/item/flowing_block.json create mode 100644 src/generated/resources/assets/decisland/models/item/forest_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/frozen_cage.json create mode 100644 src/generated/resources/assets/decisland/models/item/frozen_crate.json create mode 100644 src/generated/resources/assets/decisland/models/item/fuse.json create mode 100644 src/generated/resources/assets/decisland/models/item/ghost_ice.json create mode 100644 src/generated/resources/assets/decisland/models/item/golden_bookshelf.json create mode 100644 src/generated/resources/assets/decisland/models/item/golden_bookshelf_frame.json create mode 100644 src/generated/resources/assets/decisland/models/item/golden_chain.json create mode 100644 src/generated/resources/assets/decisland/models/item/golden_fence_block.json create mode 100644 src/generated/resources/assets/decisland/models/item/ice_bookshelf.json create mode 100644 src/generated/resources/assets/decisland/models/item/ice_rope_block.json create mode 100644 src/generated/resources/assets/decisland/models/item/item_picker.json create mode 100644 src/generated/resources/assets/decisland/models/item/lace_block_black.json create mode 100644 src/generated/resources/assets/decisland/models/item/lace_block_light_red.json create mode 100644 src/generated/resources/assets/decisland/models/item/lampshade.json create mode 100644 src/generated/resources/assets/decisland/models/item/lightning_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/lurk_block.json create mode 100644 src/generated/resources/assets/decisland/models/item/lurk_end_stone.json create mode 100644 src/generated/resources/assets/decisland/models/item/magic_letter_box.json create mode 100644 src/generated/resources/assets/decisland/models/item/mine.json create mode 100644 src/generated/resources/assets/decisland/models/item/mining_machine.json create mode 100644 src/generated/resources/assets/decisland/models/item/monitor.json create mode 100644 src/generated/resources/assets/decisland/models/item/monitor_activated.json create mode 100644 src/generated/resources/assets/decisland/models/item/nuke_block.json create mode 100644 src/generated/resources/assets/decisland/models/item/plain_tower_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/purpur_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/radiate_dirt.json create mode 100644 src/generated/resources/assets/decisland/models/item/radiate_stone.json create mode 100644 src/generated/resources/assets/decisland/models/item/radiate_stonebrick.json create mode 100644 src/generated/resources/assets/decisland/models/item/raining_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/red_lantern.json create mode 100644 src/generated/resources/assets/decisland/models/item/red_patterned_stonebrick.json create mode 100644 src/generated/resources/assets/decisland/models/item/scale_block.json create mode 100644 src/generated/resources/assets/decisland/models/item/small_stone_block_entity.json create mode 100644 src/generated/resources/assets/decisland/models/item/snow_brick_block.json create mode 100644 src/generated/resources/assets/decisland/models/item/soul_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/stone_heap.json create mode 100644 src/generated/resources/assets/decisland/models/item/stone_road.json create mode 100644 src/generated/resources/assets/decisland/models/item/sunny_summoner.json create mode 100644 src/generated/resources/assets/decisland/models/item/sweet_berries_block.json create mode 100644 src/generated/resources/assets/decisland/models/item/thin_rope_block.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/abyssal_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/ash_cage.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/ash_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/bat_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/broken_dirt.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/cave_crate.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/christmas_gift_block.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/crate.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/deep_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/dirt_ghost_block.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/enchanted_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/end_altar.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/everlasting_winter_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/eye_of_nature_log.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/flesh_block.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/flowing_block.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/forest_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/frozen_cage.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/frozen_crate.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/fuse.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/ghost_ice.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/golden_bookshelf.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/golden_bookshelf_frame.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/golden_chain.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/golden_fence_block.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/ice_bookshelf.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/ice_rope_block.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/item_picker.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/lace_block_black.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/lace_block_light_red.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/lampshade.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/lightning_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/lurk_block.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/lurk_end_stone.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/magic_letter_box.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/mine.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/mining_machine.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/monitor.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/monitor_activated.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/nuke_block.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/plain_tower_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/purpur_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/radiate_dirt.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/radiate_stone.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/radiate_stonebrick.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/raining_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/red_lantern.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/red_patterned_stonebrick.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/scale_block.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/small_stone_block_entity.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/snow_brick_block.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/soul_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/stone_heap.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/stone_road.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/sunny_summoner.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/sweet_berries_block.json create mode 100644 src/generated/resources/data/decisland/loot_table/blocks/thin_rope_block.json create mode 100644 src/main/java/com/dec/decisland/block/custom/ShapedBlock.kt create mode 100644 src/main/java/com/dec/decisland/client/renderer/ElfOfLeavesRenderer.kt create mode 100644 src/main/java/com/dec/decisland/client/renderer/LeavesGolemModel.kt create mode 100644 src/main/java/com/dec/decisland/client/renderer/LeavesGolemRenderer.kt create mode 100644 src/main/java/com/dec/decisland/client/renderer/ZombieWarriorRenderer.kt create mode 100644 src/main/java/com/dec/decisland/entity/custom/ElfOfLeaves.kt create mode 100644 src/main/java/com/dec/decisland/entity/custom/LeavesGolem.kt create mode 100644 src/main/java/com/dec/decisland/entity/custom/ZombieWarrior.kt create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/leaves_golem.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/leaves_golem.geometry.json create mode 100644 src/main/resources/assets/decisland/blockstates/golden_bookshelf.json create mode 100644 src/main/resources/assets/decisland/blockstates/golden_bookshelf_frame.json create mode 100644 src/main/resources/assets/decisland/blockstates/magic_letter_box.json create mode 100644 src/main/resources/assets/decisland/blockstates/red_lantern.json create mode 100644 src/main/resources/assets/decisland/models/block/golden_bookshelf.json create mode 100644 src/main/resources/assets/decisland/models/block/golden_bookshelf_frame.json create mode 100644 src/main/resources/assets/decisland/models/block/magic_letter_box.json create mode 100644 src/main/resources/assets/decisland/models/block/red_lantern.json create mode 100644 src/main/resources/assets/decisland/particles/leaves_essence.particle.json create mode 100644 src/main/resources/assets/decisland/textures/block/abyssal_summoner.png create mode 100644 src/main/resources/assets/decisland/textures/block/abyssal_summoner_activated.png create mode 100644 src/main/resources/assets/decisland/textures/block/abyssal_summoner_locked.png create mode 100644 src/main/resources/assets/decisland/textures/block/amethyst_block_unused.png create mode 100644 src/main/resources/assets/decisland/textures/block/ash_cage.png create mode 100644 src/main/resources/assets/decisland/textures/block/ash_summoner.png create mode 100644 src/main/resources/assets/decisland/textures/block/ash_summoner_activated.png create mode 100644 src/main/resources/assets/decisland/textures/block/ash_summoner_locked.png create mode 100644 src/main/resources/assets/decisland/textures/block/baby_blue_eyes_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/balloon_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/bat_summoner.png create mode 100644 src/main/resources/assets/decisland/textures/block/bat_summoner_activated.png create mode 100644 src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_3.png create mode 100644 src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_4.png create mode 100644 src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_5.png create mode 100644 src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_6.png create mode 100644 src/main/resources/assets/decisland/textures/block/bracken_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/breeze_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/broken_dirt.png create mode 100644 src/main/resources/assets/decisland/textures/block/butter_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/butterfly_pea_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/cave_crate.png create mode 100644 src/main/resources/assets/decisland/textures/block/cave_crate_locked.png create mode 100644 src/main/resources/assets/decisland/textures/block/christmas_gift_block.png create mode 100644 src/main/resources/assets/decisland/textures/block/cloud_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/corn_crop_0_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/corn_crop_0_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/corn_crop_0_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/corn_crop_0_3.png create mode 100644 src/main/resources/assets/decisland/textures/block/corn_crop_0_4.png create mode 100644 src/main/resources/assets/decisland/textures/block/corn_crop_1_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/corn_crop_1_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/corn_crop_1_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/corn_crop_1_3.png create mode 100644 src/main/resources/assets/decisland/textures/block/crate.png create mode 100644 src/main/resources/assets/decisland/textures/block/crate_locked.png create mode 100644 src/main/resources/assets/decisland/textures/block/crinum_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/dandelion_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/deep_dandelion_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/deep_summoner.png create mode 100644 src/main/resources/assets/decisland/textures/block/deep_summoner_activated.png create mode 100644 src/main/resources/assets/decisland/textures/block/depart_grass_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/desert_fan_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/dirt_ghost_block.png create mode 100644 src/main/resources/assets/decisland/textures/block/empty.png create mode 100644 src/main/resources/assets/decisland/textures/block/enchanted_summoner_activated_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/enchanted_summoner_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/enchanted_summoner_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/end_altar_down.png create mode 100644 src/main/resources/assets/decisland/textures/block/end_altar_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/end_altar_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/everlasting_winter_summoner.png create mode 100644 src/main/resources/assets/decisland/textures/block/everlasting_winter_summoner_activated.png create mode 100644 src/main/resources/assets/decisland/textures/block/everlasting_winter_summoner_locked.png create mode 100644 src/main/resources/assets/decisland/textures/block/experience_flower_stage_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/experience_flower_stage_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/experience_flower_stage_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/eye_of_nature_log.png create mode 100644 src/main/resources/assets/decisland/textures/block/fan_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/flesh_block.png create mode 100644 src/main/resources/assets/decisland/textures/block/flowing_block_down.png create mode 100644 src/main/resources/assets/decisland/textures/block/flowing_block_side_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/flowing_block_side_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/flowing_block_side_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/flowing_block_side_3.png create mode 100644 src/main/resources/assets/decisland/textures/block/flowing_block_side_4.png create mode 100644 src/main/resources/assets/decisland/textures/block/flowing_block_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/forest_summoner.png create mode 100644 src/main/resources/assets/decisland/textures/block/forest_summoner_activated.png create mode 100644 src/main/resources/assets/decisland/textures/block/fritillary_crop_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/fritillary_crop_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/fritillary_crop_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/fritillary_crop_3.png create mode 100644 src/main/resources/assets/decisland/textures/block/fritillary_crop_4.png create mode 100644 src/main/resources/assets/decisland/textures/block/frozen_cage.png create mode 100644 src/main/resources/assets/decisland/textures/block/frozen_crate.png create mode 100644 src/main/resources/assets/decisland/textures/block/frozen_crate_locked.png create mode 100644 src/main/resources/assets/decisland/textures/block/frozen_crate_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/frozen_mirror_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/fuse.png create mode 100644 src/main/resources/assets/decisland/textures/block/ghost_ice.png create mode 100644 src/main/resources/assets/decisland/textures/block/gold_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/golden_bookshelf_back.png create mode 100644 src/main/resources/assets/decisland/textures/block/golden_bookshelf_frame_front.png create mode 100644 src/main/resources/assets/decisland/textures/block/golden_bookshelf_frame_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/golden_bookshelf_front.png create mode 100644 src/main/resources/assets/decisland/textures/block/golden_bookshelf_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/golden_bookshelf_up_down.png create mode 100644 src/main/resources/assets/decisland/textures/block/golden_chain.png create mode 100644 src/main/resources/assets/decisland/textures/block/golden_fence_block.png create mode 100644 src/main/resources/assets/decisland/textures/block/grape_crop_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/grape_crop_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/hammer_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/houttuynia_crop_stage_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/houttuynia_crop_stage_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/houttuynia_crop_stage_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/houttuynia_crop_stage_3.png create mode 100644 src/main/resources/assets/decisland/textures/block/ice_bookshelf_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/ice_rope_block_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/ice_rope_block_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/ice_rope_block_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/item_picker_down.png create mode 100644 src/main/resources/assets/decisland/textures/block/item_picker_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/item_picker_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/lace_block_black_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/lace_block_black_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/lace_block_light_red_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/lace_block_light_red_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/lamp_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/lampshade.png create mode 100644 src/main/resources/assets/decisland/textures/block/lava_flower_crop_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/lava_flower_crop_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/lava_flower_crop_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/lava_flower_crop_3.png create mode 100644 src/main/resources/assets/decisland/textures/block/lava_flower_crop_4.png create mode 100644 src/main/resources/assets/decisland/textures/block/leaves_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/leek_stage_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/leek_stage_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/leek_stage_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/lightning_summoner.png create mode 100644 src/main/resources/assets/decisland/textures/block/lurk_block.png create mode 100644 src/main/resources/assets/decisland/textures/block/lurk_bud_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/lurk_end_stone_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/lurk_end_stone_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/lurk_fruit_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/lurk_log_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/lurk_mushroom_lit.png create mode 100644 src/main/resources/assets/decisland/textures/block/lurk_orchid_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/magic_letter_box_front.png create mode 100644 src/main/resources/assets/decisland/textures/block/magic_letter_box_front_with_magic_scroll_blue.png create mode 100644 src/main/resources/assets/decisland/textures/block/magic_letter_box_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/magic_letter_box_top.png create mode 100644 src/main/resources/assets/decisland/textures/block/maple_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/mine.png create mode 100644 src/main/resources/assets/decisland/textures/block/mine_top.png create mode 100644 src/main/resources/assets/decisland/textures/block/mining_machine_down.png create mode 100644 src/main/resources/assets/decisland/textures/block/mining_machine_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/mining_machine_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/mock_strawberry_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/monitor.png create mode 100644 src/main/resources/assets/decisland/textures/block/monitor_activated.png create mode 100644 src/main/resources/assets/decisland/textures/block/mooli_crop_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/mooli_crop_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/mooli_crop_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/mooli_crop_3.png create mode 100644 src/main/resources/assets/decisland/textures/block/mouth_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/nether_dandelion_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/nether_stick_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/nuke_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/patterned_vase_red_block.png create mode 100644 src/main/resources/assets/decisland/textures/block/pink_dandelion_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/pink_fan_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/plain_tower_summoner_activated_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/plain_tower_summoner_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/plain_tower_summoner_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/purpur_summoner_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/purpur_summoner_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/radiate_dirt.png create mode 100644 src/main/resources/assets/decisland/textures/block/radiate_stone.png create mode 100644 src/main/resources/assets/decisland/textures/block/radiate_stonebrick.png create mode 100644 src/main/resources/assets/decisland/textures/block/raining_summoner.png create mode 100644 src/main/resources/assets/decisland/textures/block/red_lantern.png create mode 100644 src/main/resources/assets/decisland/textures/block/red_patterned_stonebrick_side.png create mode 100644 src/main/resources/assets/decisland/textures/block/red_patterned_stonebrick_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/red_spider_lily_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/rice_stage_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/rice_stage_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/rice_stage_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/rice_stage_3.png create mode 100644 src/main/resources/assets/decisland/textures/block/rice_stage_4.png create mode 100644 src/main/resources/assets/decisland/textures/block/rice_stage_5.png create mode 100644 src/main/resources/assets/decisland/textures/block/rosemary_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/russet_grass_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/scale_block.png create mode 100644 src/main/resources/assets/decisland/textures/block/small_stone.png create mode 100644 src/main/resources/assets/decisland/textures/block/snow_brick_block.png create mode 100644 src/main/resources/assets/decisland/textures/block/snow_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/snow_lotus_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/soul_summoner.png create mode 100644 src/main/resources/assets/decisland/textures/block/soul_summoner_activated.png create mode 100644 src/main/resources/assets/decisland/textures/block/soybean_stage_0.png create mode 100644 src/main/resources/assets/decisland/textures/block/soybean_stage_1.png create mode 100644 src/main/resources/assets/decisland/textures/block/soybean_stage_2.png create mode 100644 src/main/resources/assets/decisland/textures/block/soybean_stage_3.png create mode 100644 src/main/resources/assets/decisland/textures/block/soybean_stage_4.png create mode 100644 src/main/resources/assets/decisland/textures/block/spark_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/spell_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/star_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/stick_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/summoner.png create mode 100644 src/main/resources/assets/decisland/textures/block/sunny_summoner.png create mode 100644 src/main/resources/assets/decisland/textures/block/sweet_berries_block.png create mode 100644 src/main/resources/assets/decisland/textures/block/thin_rope_block.png create mode 100644 src/main/resources/assets/decisland/textures/block/thyme_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/tnt_down.png create mode 100644 src/main/resources/assets/decisland/textures/block/tnt_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/trellis.png create mode 100644 src/main/resources/assets/decisland/textures/block/trellis_cover.png create mode 100644 src/main/resources/assets/decisland/textures/block/trellis_crop_wither.png create mode 100644 src/main/resources/assets/decisland/textures/block/weather_console_down.png create mode 100644 src/main/resources/assets/decisland/textures/block/weather_console_up.png create mode 100644 src/main/resources/assets/decisland/textures/block/wither_cone_crop.png create mode 100644 src/main/resources/assets/decisland/textures/block/yellow_butterfly_flower_crop.png create mode 100644 src/main/resources/assets/decisland/textures/entity/elf_of_leaves.png create mode 100644 src/main/resources/assets/decisland/textures/entity/leaves_golem.png create mode 100644 src/main/resources/assets/decisland/textures/entity/zombie_warrior.png create mode 100644 src/main/resources/assets/decisland/textures/entity/zombie_warrior_legacy64x32.png create mode 100644 src/main/resources/assets/decisland/textures/particle/leaves_essence.png create mode 100644 src/main/resources/data/decisland/loot_table/entities/leaves_golem.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/zombie_warrior_spawns.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_zombie_warrior.json diff --git a/.gitignore b/.gitignore index e71539a..9ee6871 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,9 @@ _tmp_bedrock_source generated !src/generated/ -.* \ No newline at end of file +.* + +# build/debug artifacts +*.log +errfiles.txt +mc_sources/ \ No newline at end of file diff --git a/build.gradle b/build.gradle index 5df7074..4c33bde 100644 --- a/build.gradle +++ b/build.gradle @@ -20,6 +20,15 @@ group = mod_group_id // This is the repositories block in your build.gradle. NOT the one in publishing, or in buildscript. If it does not exist already, create it. repositories { + // 阿里云 Maven 镜像(国内加速),public 为 central 聚合镜像 + maven { + name = "AliyunPublic" + url = "https://maven.aliyun.com/repository/public" + } + maven { + name = "AliyunCentral" + url = "https://maven.aliyun.com/repository/central" + } maven { name = "Modrinth" url = "https://api.modrinth.com/maven" @@ -98,7 +107,7 @@ neoForge { } // applies to all the run configs above - configureEach { + configureEach { run -> // Recommended logging data for a userdev environment // The markers can be added/remove as needed separated by commas. // "SCAN": For mods scan. @@ -111,16 +120,17 @@ neoForge { // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels logLevel = org.slf4j.event.Level.INFO - // Keep dev runs conservative on memory so the client does not over-allocate - // heap/native space on machines with a small Windows page file. + // 客户端需要加载全部资源/模型,给 4G;数据生成与服务端 2G 即可, + // 统一 SerialGC + 小线程栈,降低小页面文件机器上的原生内存压力。 + def heapSize = run.name == 'client' ? '4G' : '2G' jvmArguments.addAll( '-Xms128m', - '-Xmx8G', + "-Xmx${heapSize}", '-Xss512k', '-XX:ReservedCodeCacheSize=128m', '-XX:CICompilerCount=2', '-XX:+UseSerialGC', - '-XX:HeapBaseMinAddress=6G' + '-XX:TieredStopAtLevel=1' ) } } @@ -169,6 +179,9 @@ dependencies { // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html // http://www.gradle.org/docs/current/userguide/dependency_management.html implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + // 将 Kotlin 标准库打进最终 jar,否则游戏环境缺少 kotlin.jvm.internal.* 导致 NoClassDefFoundError + jarJar("org.jetbrains.kotlin:kotlin-stdlib:2.2.0") + jarJar("org.jetbrains:annotations:24.1.0") } // This block of code expands all declared replace properties in the specified resource targets. diff --git a/gradle.properties b/gradle.properties index 1840137..7ce1862 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,10 @@ # Sets default memory used for gradle commands. Can be overridden by user or command line properties. -org.gradle.jvmargs=-Xmx1G +org.gradle.jvmargs=-Xmx896m -XX:+UseSerialGC -XX:TieredStopAtLevel=1 -XX:CICompilerCount=2 -Xss512k -XX:ReservedCodeCacheSize=96m org.gradle.daemon=false org.gradle.parallel=false org.gradle.caching=false org.gradle.configuration-cache=false +kotlin.compiler.execution.strategy=in-process #read more on this at https://github.com/neoforged/ModDevGradle?tab=readme-ov-file#better-minecraft-parameter-names--javadoc-parchment # you can also find the latest versions at: https://parchmentmc.org/docs/getting-started diff --git a/list/blocks.txt b/list/blocks.txt index f99eb6d..b21be29 100644 --- a/list/blocks.txt +++ b/list/blocks.txt @@ -1,28 +1,40 @@ +abyssal_summoner amethyst_lantern ancient_ice ash +ash_cage +ash_summoner baby_blue_eyes_flower balloon_flower +bat_summoner bizarre_chilli_crop black_flower_block blue_flower_block blue_gem_ore blue_ice_brick_block breeze_flower +broken_dirt butter_flower butterfly_pea candy_block +cave_crate chiseled_ice_brick +christmas_gift_block cloud_flower compress_flower_block compressed_ice corn_crop +crate crimson_lamp crinum dandelion deep_dandelion +deep_summoner depart_grass desert_fan_flower +dirt_ghost_block +enchanted_summoner +end_altar end_coal_ore end_diamond_ore end_emerald_ore @@ -31,33 +43,60 @@ end_iron_ore end_lapis_ore end_ore end_redstone_ore +everlasting_winter_summoner experience_flower_crop +eye_of_nature_log fan_flower +flesh_block flower_ghost_block +flowing_block +forest_summoner fritillary_crop +frozen_cage +frozen_crate frozen_mirror_flower +fuse +ghost_ice gold_flower +golden_bookshelf +golden_bookshelf_frame +golden_chain +golden_fence_block golden_lamp hammer_flower houttuynia_crop +ice_bookshelf ice_brick_block ice_lantern ice_mixed_brick +ice_rope_block +item_picker +lace_block_black +lace_block_light_red lamp_flower +lampshade lava_flower_crop lava_ore leaves_flower leek_crop light_obsidian +lightning_summoner +lurk_block lurk_bud +lurk_end_stone lurk_fruit lurk_grass lurk_log lurk_mushroom lurk_orchid lurk_spring +magic_letter_box maple_flower +mine +mining_machine mock_strawberry +monitor +monitor_activated mooli_crop mouth_flower nether_coal_ore @@ -69,29 +108,47 @@ nether_lapis_ore nether_redstone_ore nether_stick_flower nightmare_block +nuke_block pink_dandelion pink_fan_flower pink_flower_block +plain_tower_summoner +purpur_summoner +radiate_dirt +radiate_stone +radiate_stonebrick +raining_summoner red_flower_block red_gem_ore +red_lantern +red_patterned_stonebrick red_spider_lily red_stonebrick rice_crop rosemary rotten_flesh_block russet_grass +scale_block +small_stone_block_entity smooth_amethyst_block +snow_brick_block snow_flower snow_lotus solidified_lava_block soul_soil_diamond_ore +soul_summoner soybean_crop spark_flower spell_flower star_flower steel_block stick_flower +stone_heap +stone_road stream_ore +sunny_summoner +sweet_berries_block +thin_rope_block thyme uranium_block uranium_ore diff --git a/list/creative_tabs.txt b/list/creative_tabs.txt index 5c11bd2..501e35c 100644 --- a/list/creative_tabs.txt +++ b/list/creative_tabs.txt @@ -1,4 +1,5 @@ decisland_accessories_tab +decisland_blocks_tab decisland_crops_tab decisland_foods_tab decisland_masks_tab diff --git a/list/entities.txt b/list/entities.txt index edb0f14..536fe73 100644 --- a/list/entities.txt +++ b/list/entities.txt @@ -15,6 +15,7 @@ copper_dart coral_dart deep_energy diamond_dart +elf_of_leaves emerald_dart energy_ball energy_ray @@ -32,6 +33,7 @@ iron_dart jellyfish_by_jellyfish_staff lapis_bullet lava_dart +leaves_golem mind_controller muddy_ball netherite_dart @@ -59,3 +61,4 @@ wave_energy winter_energy wither_cloud wood_dart +zombie_warrior diff --git a/list/items.txt b/list/items.txt index 07c42dd..0d5b108 100644 --- a/list/items.txt +++ b/list/items.txt @@ -2,6 +2,7 @@ a_bowl_of_rice a_piece_of_salmon absolute_zero abyssal_controller_mask +abyssal_summoner agent_mask alchemic_stone alex_mask @@ -26,10 +27,12 @@ archer_stones_bag arctic_fox_mask ash ash_blaze_mask +ash_cage ash_key ash_knight_mask ash_pufferfish ash_pufferfish_mask +ash_summoner autumn_leaves axolotl_blue_mask axolotl_cyan_mask @@ -41,6 +44,7 @@ balloon_flower bamboo_katana bat_bait bat_mask +bat_summoner bat_wing bee_mask bizarre_chilli @@ -70,6 +74,7 @@ boomber_mask bracken brain_rice breeze_flower +broken_dirt brown_bear_mask brown_mooshroom_mask bullet_bag @@ -80,6 +85,7 @@ camouflage_pants candy candy_block candy_cane +cave_crate cave_spider_mask challenge_of_ash chicken_mask @@ -87,6 +93,7 @@ chiseled_ice_brick chocolate_cookie chocolates christmas_cap +christmas_gift_block cloud_flower coal_fish coal_nugget @@ -111,6 +118,7 @@ corrupted_sword cow_mask crab_leg crab_leg_cooked +crate creeper_mask crimson_lamp crimson_slime_mask @@ -134,6 +142,7 @@ dead_wood_rapier decrepit_atlantis deep_dandelion deep_staff +deep_summoner depart_grass desert_fan_flower diamond_apple @@ -148,6 +157,7 @@ diamond_sickle diamond_staff dirt_boots dirt_chestplate +dirt_ghost_block dirt_helmet dirt_leggings dolphin_mask @@ -174,6 +184,8 @@ emerald_ring emerald_staff emerald_sword empty_totem +enchanted_summoner +end_altar end_coal_ore end_diamond_ore end_emerald_ore @@ -214,6 +226,7 @@ everlasting_winter_leggings everlasting_winter_sickle everlasting_winter_staff everlasting_winter_stick +everlasting_winter_summoner everlasting_winter_sword evil_snow_man_mask experience_book @@ -221,6 +234,7 @@ experience_book_empty experience_book_pro_empty experience_flower_seeds eye_of_nature +eye_of_nature_log fan_flower fang_mace farmer_hat @@ -228,11 +242,14 @@ final_crystal_nucleus fire_ring firefly_bottle flare_magic_book +flesh_block flintlock flintlock_bullet flintlock_pro flower_essence +flowing_block following_particle +forest_summoner formal_style_clothes formal_style_pants fox_mask @@ -243,7 +260,9 @@ fritillary fritillary_seeds frozen_ball frozen_boots +frozen_cage frozen_chestplate +frozen_crate frozen_dart frozen_fish frozen_helmet @@ -254,12 +273,14 @@ frozen_power_debris frozen_ray_staff frozen_spider_mask frozen_staff +fuse gargoyle_mask gas_bomb ghast_mask ghost_dagger ghost_essence ghost_flintlock +ghost_ice ghost_ingot ghost_sickle ghost_sword @@ -282,7 +303,11 @@ gold_flower gold_ring gold_sickle gold_yuanbao +golden_bookshelf +golden_bookshelf_frame +golden_chain golden_dagger +golden_fence_block golden_lamp golden_staff gray_shoes @@ -312,6 +337,7 @@ hunter_book hunter_bullet_bag husk_mask ice_blaze_mask +ice_bookshelf ice_brick ice_brick_block ice_cream @@ -321,6 +347,7 @@ ice_lantern ice_mixed_brick ice_nugget ice_rod +ice_rope_block ice_sword ice_zombie_mask illager_mask @@ -339,6 +366,7 @@ iron_key iron_sickle iron_staff iron_stick +item_picker jacket jellyfish_staff jellyfish_staff_projectile_render @@ -346,8 +374,11 @@ jiuzhi_jacket jiuzhi_pants jiuzhi_shoes knight_helmet +lace_block_black +lace_block_light_red lamp_flower lamprey +lampshade lapis_apple lapis_bullet_render lapis_dagger @@ -379,9 +410,12 @@ lester_pants lester_shoes light_obsidian lightning_stone +lightning_summoner lollipop long_bread +lurk_block lurk_bud +lurk_end_stone lurk_fruit lurk_grass lurk_log @@ -392,13 +426,18 @@ magic_article magic_chest_debris magic_crystal magic_ice_cream +magic_letter_box magic_powder magic_surge_core magma_cube_mask maple_flower melon_piece mind_controller +mine +mining_machine mock_strawberry +monitor +monitor_activated mooli mooli_seeds moon_jellyfish @@ -433,6 +472,7 @@ netherite_dart netherite_sickle night_sword nightmare +nuke_block obsidian_golem_mask old_book old_monster_mask @@ -449,6 +489,7 @@ pink_fan_flower pink_flower_block pink_jellyfish pirate_bullet_bag +plain_tower_summoner player_ghost_mask poison_dart poison_fish @@ -463,15 +504,22 @@ pufferfish_mask pulse_stone pumpkin_candy pure_ingot +purpur_summoner radiate_creeper_mask radiate_crystal +radiate_dirt radiate_enderman_mask +radiate_stone +radiate_stonebrick +raining_summoner rapier red_flower_block red_gem red_gem_debris red_gem_hat red_gem_ore +red_lantern +red_patterned_stonebrick red_spider_lily red_stonebrick redstone_apple @@ -490,6 +538,7 @@ rupert_helmet rupert_leggings russet_grass sardine +scale_block scale_sword scimitar sea_turtle_mask @@ -515,9 +564,11 @@ slime_pickaxe sliver_yuanbao small_stone small_stone_block +small_stone_block_entity smoke_bomb smooth_amethyst_block snailfish +snow_brick_block snow_flower snow_lotus snowball_magic_book @@ -529,6 +580,7 @@ soul_key soul_skeleton_mask soul_soil_diamond_ore soul_staff +soul_summoner soul_wake_bullet_render soul_zombie_mask soybean @@ -560,8 +612,10 @@ stone_boots stone_chestplate stone_dagger stone_dart +stone_heap stone_helmet stone_leggings +stone_road stones_bag storm_battleaxe storm_flintlock @@ -577,14 +631,17 @@ stream_stone strider_mask striped_pants sun_stone +sunny_summoner swamp_drowned_mask swamp_golem_mask +sweet_berries_block sword_fish sword_of_deep sword_of_guard sword_of_halloween the_blade the_imperial_sword +thin_rope_block throwable_bomb thunder_rapier thunder_staff diff --git a/settings.gradle b/settings.gradle index 8feb3df..6fd4c2c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,11 @@ pluginManagement { repositories { + // 阿里云 Gradle 插件镜像(国内加速) + maven { url = 'https://maven.aliyun.com/repository/gradle-plugin' } + maven { url = 'https://maven.aliyun.com/repository/public' } + // 镜像缺失时回退官方源 gradlePluginPortal() + mavenCentral() } plugins { id 'org.jetbrains.kotlin.jvm' version '2.2.0' diff --git a/src/generated/resources/assets/decisland/blockstates/abyssal_summoner.json b/src/generated/resources/assets/decisland/blockstates/abyssal_summoner.json new file mode 100644 index 0000000..b71dcb8 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/abyssal_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/abyssal_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/ash_cage.json b/src/generated/resources/assets/decisland/blockstates/ash_cage.json new file mode 100644 index 0000000..1a3f883 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/ash_cage.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/ash_cage" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/ash_summoner.json b/src/generated/resources/assets/decisland/blockstates/ash_summoner.json new file mode 100644 index 0000000..ef8c6c1 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/ash_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/ash_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/bat_summoner.json b/src/generated/resources/assets/decisland/blockstates/bat_summoner.json new file mode 100644 index 0000000..80124fc --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/bat_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/bat_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/broken_dirt.json b/src/generated/resources/assets/decisland/blockstates/broken_dirt.json new file mode 100644 index 0000000..44f6763 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/broken_dirt.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/broken_dirt" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/cave_crate.json b/src/generated/resources/assets/decisland/blockstates/cave_crate.json new file mode 100644 index 0000000..c6e0ed6 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/cave_crate.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/cave_crate" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/christmas_gift_block.json b/src/generated/resources/assets/decisland/blockstates/christmas_gift_block.json new file mode 100644 index 0000000..c94fd99 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/christmas_gift_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/christmas_gift_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/crate.json b/src/generated/resources/assets/decisland/blockstates/crate.json new file mode 100644 index 0000000..8a4db2f --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/crate.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/crate" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/deep_summoner.json b/src/generated/resources/assets/decisland/blockstates/deep_summoner.json new file mode 100644 index 0000000..b91c674 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/deep_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/deep_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/dirt_ghost_block.json b/src/generated/resources/assets/decisland/blockstates/dirt_ghost_block.json new file mode 100644 index 0000000..b1caed2 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/dirt_ghost_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/dirt_ghost_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/enchanted_summoner.json b/src/generated/resources/assets/decisland/blockstates/enchanted_summoner.json new file mode 100644 index 0000000..be5451f --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/enchanted_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/enchanted_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/end_altar.json b/src/generated/resources/assets/decisland/blockstates/end_altar.json new file mode 100644 index 0000000..66b9e93 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/end_altar.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/end_altar" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/everlasting_winter_summoner.json b/src/generated/resources/assets/decisland/blockstates/everlasting_winter_summoner.json new file mode 100644 index 0000000..1ebd4b7 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/everlasting_winter_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/everlasting_winter_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/eye_of_nature_log.json b/src/generated/resources/assets/decisland/blockstates/eye_of_nature_log.json new file mode 100644 index 0000000..ae90bf5 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/eye_of_nature_log.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/eye_of_nature_log" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/flesh_block.json b/src/generated/resources/assets/decisland/blockstates/flesh_block.json new file mode 100644 index 0000000..83b79a0 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/flesh_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/flesh_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/flowing_block.json b/src/generated/resources/assets/decisland/blockstates/flowing_block.json new file mode 100644 index 0000000..66e5ff7 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/flowing_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/flowing_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/forest_summoner.json b/src/generated/resources/assets/decisland/blockstates/forest_summoner.json new file mode 100644 index 0000000..de6b2f9 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/forest_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/forest_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/frozen_cage.json b/src/generated/resources/assets/decisland/blockstates/frozen_cage.json new file mode 100644 index 0000000..6e29355 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/frozen_cage.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/frozen_cage" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/frozen_crate.json b/src/generated/resources/assets/decisland/blockstates/frozen_crate.json new file mode 100644 index 0000000..35814ae --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/frozen_crate.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/frozen_crate" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/fuse.json b/src/generated/resources/assets/decisland/blockstates/fuse.json new file mode 100644 index 0000000..e94bc6a --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/fuse.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/fuse" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/ghost_ice.json b/src/generated/resources/assets/decisland/blockstates/ghost_ice.json new file mode 100644 index 0000000..fcbb4d7 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/ghost_ice.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/ghost_ice" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/golden_chain.json b/src/generated/resources/assets/decisland/blockstates/golden_chain.json new file mode 100644 index 0000000..648c4e5 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/golden_chain.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/golden_chain" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/golden_fence_block.json b/src/generated/resources/assets/decisland/blockstates/golden_fence_block.json new file mode 100644 index 0000000..9773d87 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/golden_fence_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/golden_fence_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/ice_bookshelf.json b/src/generated/resources/assets/decisland/blockstates/ice_bookshelf.json new file mode 100644 index 0000000..90f726c --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/ice_bookshelf.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/ice_bookshelf" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/ice_rope_block.json b/src/generated/resources/assets/decisland/blockstates/ice_rope_block.json new file mode 100644 index 0000000..58b8c5b --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/ice_rope_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/ice_rope_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/item_picker.json b/src/generated/resources/assets/decisland/blockstates/item_picker.json new file mode 100644 index 0000000..c32d529 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/item_picker.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/item_picker" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/lace_block_black.json b/src/generated/resources/assets/decisland/blockstates/lace_block_black.json new file mode 100644 index 0000000..ed3c552 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/lace_block_black.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/lace_block_black" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/lace_block_light_red.json b/src/generated/resources/assets/decisland/blockstates/lace_block_light_red.json new file mode 100644 index 0000000..e861359 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/lace_block_light_red.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/lace_block_light_red" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/lampshade.json b/src/generated/resources/assets/decisland/blockstates/lampshade.json new file mode 100644 index 0000000..561cca4 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/lampshade.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/lampshade" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/lightning_summoner.json b/src/generated/resources/assets/decisland/blockstates/lightning_summoner.json new file mode 100644 index 0000000..0dc1a47 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/lightning_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/lightning_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/lurk_block.json b/src/generated/resources/assets/decisland/blockstates/lurk_block.json new file mode 100644 index 0000000..e6ed1b2 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/lurk_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/lurk_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/lurk_end_stone.json b/src/generated/resources/assets/decisland/blockstates/lurk_end_stone.json new file mode 100644 index 0000000..9f799c2 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/lurk_end_stone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/lurk_end_stone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/mine.json b/src/generated/resources/assets/decisland/blockstates/mine.json new file mode 100644 index 0000000..3ddc9c3 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/mine.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/mine" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/mining_machine.json b/src/generated/resources/assets/decisland/blockstates/mining_machine.json new file mode 100644 index 0000000..1472317 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/mining_machine.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/mining_machine" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/monitor.json b/src/generated/resources/assets/decisland/blockstates/monitor.json new file mode 100644 index 0000000..d33c9f3 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/monitor.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/monitor" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/monitor_activated.json b/src/generated/resources/assets/decisland/blockstates/monitor_activated.json new file mode 100644 index 0000000..51798dd --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/monitor_activated.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/monitor_activated" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/nuke_block.json b/src/generated/resources/assets/decisland/blockstates/nuke_block.json new file mode 100644 index 0000000..e990aec --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/nuke_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/nuke_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/plain_tower_summoner.json b/src/generated/resources/assets/decisland/blockstates/plain_tower_summoner.json new file mode 100644 index 0000000..b2f83f8 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/plain_tower_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/plain_tower_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/purpur_summoner.json b/src/generated/resources/assets/decisland/blockstates/purpur_summoner.json new file mode 100644 index 0000000..dae376f --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/purpur_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/purpur_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/radiate_dirt.json b/src/generated/resources/assets/decisland/blockstates/radiate_dirt.json new file mode 100644 index 0000000..73de43b --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/radiate_dirt.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/radiate_dirt" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/radiate_stone.json b/src/generated/resources/assets/decisland/blockstates/radiate_stone.json new file mode 100644 index 0000000..785e4f6 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/radiate_stone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/radiate_stone" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/radiate_stonebrick.json b/src/generated/resources/assets/decisland/blockstates/radiate_stonebrick.json new file mode 100644 index 0000000..118db20 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/radiate_stonebrick.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/radiate_stonebrick" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/raining_summoner.json b/src/generated/resources/assets/decisland/blockstates/raining_summoner.json new file mode 100644 index 0000000..67f6f97 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/raining_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/raining_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/red_patterned_stonebrick.json b/src/generated/resources/assets/decisland/blockstates/red_patterned_stonebrick.json new file mode 100644 index 0000000..e90cd63 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/red_patterned_stonebrick.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/red_patterned_stonebrick" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/scale_block.json b/src/generated/resources/assets/decisland/blockstates/scale_block.json new file mode 100644 index 0000000..0123c29 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/scale_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/scale_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/small_stone_block_entity.json b/src/generated/resources/assets/decisland/blockstates/small_stone_block_entity.json new file mode 100644 index 0000000..1bdb794 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/small_stone_block_entity.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/small_stone_block_entity" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/snow_brick_block.json b/src/generated/resources/assets/decisland/blockstates/snow_brick_block.json new file mode 100644 index 0000000..4751e13 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/snow_brick_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/snow_brick_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/soul_summoner.json b/src/generated/resources/assets/decisland/blockstates/soul_summoner.json new file mode 100644 index 0000000..c21cfb4 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/soul_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/soul_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/stone_heap.json b/src/generated/resources/assets/decisland/blockstates/stone_heap.json new file mode 100644 index 0000000..89b2e71 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/stone_heap.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/stone_heap" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/stone_road.json b/src/generated/resources/assets/decisland/blockstates/stone_road.json new file mode 100644 index 0000000..d2ea2cf --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/stone_road.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/stone_road" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/sunny_summoner.json b/src/generated/resources/assets/decisland/blockstates/sunny_summoner.json new file mode 100644 index 0000000..1ea1338 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/sunny_summoner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/sunny_summoner" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/sweet_berries_block.json b/src/generated/resources/assets/decisland/blockstates/sweet_berries_block.json new file mode 100644 index 0000000..b6cc802 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/sweet_berries_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/sweet_berries_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/blockstates/thin_rope_block.json b/src/generated/resources/assets/decisland/blockstates/thin_rope_block.json new file mode 100644 index 0000000..da9b1f5 --- /dev/null +++ b/src/generated/resources/assets/decisland/blockstates/thin_rope_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/thin_rope_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/lang/en_us.json b/src/generated/resources/assets/decisland/lang/en_us.json index 8f5f823..8277c9f 100644 --- a/src/generated/resources/assets/decisland/lang/en_us.json +++ b/src/generated/resources/assets/decisland/lang/en_us.json @@ -1317,6 +1317,7 @@ "item.spawn_egg.entity.dec:zombie_summoner.name": "Spawn Zombie Summoner", "item.spawn_egg.entity.dec:zombie_warrior.name": "Spawn Zombie Warrior", "itemGroup.decisland_accessories_tab": "DecIsland Accessories", + "itemGroup.decisland_blocks_tab": "DecIsland Blocks", "itemGroup.decisland_crops_tab": "DecIsland Crops", "itemGroup.decisland_foods_tab": "DecIsland Foods", "itemGroup.decisland_masks_tab": "DecIsland Masks", diff --git a/src/generated/resources/assets/decisland/lang/zh_cn.json b/src/generated/resources/assets/decisland/lang/zh_cn.json index a1ceb38..d790020 100644 --- a/src/generated/resources/assets/decisland/lang/zh_cn.json +++ b/src/generated/resources/assets/decisland/lang/zh_cn.json @@ -1317,6 +1317,7 @@ "item.spawn_egg.entity.dec:zombie_summoner.name": "生成 僵尸召唤师", "item.spawn_egg.entity.dec:zombie_warrior.name": "生成 僵尸战士", "itemGroup.decisland_accessories_tab": "DecIsland 饰品", + "itemGroup.decisland_blocks_tab": "DecIsland 方块", "itemGroup.decisland_crops_tab": "DecIsland 作物", "itemGroup.decisland_foods_tab": "DecIsland 食物", "itemGroup.decisland_masks_tab": "DecIsland 面具", diff --git a/src/generated/resources/assets/decisland/models/block/abyssal_summoner.json b/src/generated/resources/assets/decisland/models/block/abyssal_summoner.json new file mode 100644 index 0000000..5f58089 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/abyssal_summoner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/abyssal_summoner" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/ash_cage.json b/src/generated/resources/assets/decisland/models/block/ash_cage.json new file mode 100644 index 0000000..51758ea --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/ash_cage.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/ash_cage" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/ash_summoner.json b/src/generated/resources/assets/decisland/models/block/ash_summoner.json new file mode 100644 index 0000000..fd9c064 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/ash_summoner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/ash_summoner" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/bat_summoner.json b/src/generated/resources/assets/decisland/models/block/bat_summoner.json new file mode 100644 index 0000000..e573d1a --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/bat_summoner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/bat_summoner" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/broken_dirt.json b/src/generated/resources/assets/decisland/models/block/broken_dirt.json new file mode 100644 index 0000000..493a264 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/broken_dirt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/broken_dirt" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/cave_crate.json b/src/generated/resources/assets/decisland/models/block/cave_crate.json new file mode 100644 index 0000000..2bbbe87 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/cave_crate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/cave_crate_locked" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/christmas_gift_block.json b/src/generated/resources/assets/decisland/models/block/christmas_gift_block.json new file mode 100644 index 0000000..8681c8b --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/christmas_gift_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/christmas_gift_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/crate.json b/src/generated/resources/assets/decisland/models/block/crate.json new file mode 100644 index 0000000..84dda4f --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/crate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/crate_locked" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/deep_summoner.json b/src/generated/resources/assets/decisland/models/block/deep_summoner.json new file mode 100644 index 0000000..041d591 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/deep_summoner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/deep_summoner" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/dirt_ghost_block.json b/src/generated/resources/assets/decisland/models/block/dirt_ghost_block.json new file mode 100644 index 0000000..282621e --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/dirt_ghost_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/dirt_ghost_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/enchanted_summoner.json b/src/generated/resources/assets/decisland/models/block/enchanted_summoner.json new file mode 100644 index 0000000..469a6ed --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/enchanted_summoner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/enchanted_summoner_up", + "side": "decisland:block/enchanted_summoner_side", + "top": "decisland:block/enchanted_summoner_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/end_altar.json b/src/generated/resources/assets/decisland/models/block/end_altar.json new file mode 100644 index 0000000..a10e0eb --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/end_altar.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/end_altar_down", + "side": "decisland:block/end_altar_side", + "top": "decisland:block/end_altar_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/everlasting_winter_summoner.json b/src/generated/resources/assets/decisland/models/block/everlasting_winter_summoner.json new file mode 100644 index 0000000..85e0682 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/everlasting_winter_summoner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/everlasting_winter_summoner" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/eye_of_nature_log.json b/src/generated/resources/assets/decisland/models/block/eye_of_nature_log.json new file mode 100644 index 0000000..dba476a --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/eye_of_nature_log.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/eye_of_nature_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/flesh_block.json b/src/generated/resources/assets/decisland/models/block/flesh_block.json new file mode 100644 index 0000000..a786330 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/flesh_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/flesh_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/flowing_block.json b/src/generated/resources/assets/decisland/models/block/flowing_block.json new file mode 100644 index 0000000..4c99be2 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/flowing_block.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/flowing_block_down", + "side": "decisland:block/flowing_block_side_0", + "top": "decisland:block/flowing_block_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/forest_summoner.json b/src/generated/resources/assets/decisland/models/block/forest_summoner.json new file mode 100644 index 0000000..b5c22c7 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/forest_summoner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/forest_summoner" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/frozen_cage.json b/src/generated/resources/assets/decisland/models/block/frozen_cage.json new file mode 100644 index 0000000..ed81446 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/frozen_cage.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/frozen_cage" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/frozen_crate.json b/src/generated/resources/assets/decisland/models/block/frozen_crate.json new file mode 100644 index 0000000..26677fc --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/frozen_crate.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/crate_locked", + "side": "decisland:block/frozen_crate_locked", + "top": "decisland:block/frozen_crate_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/fuse.json b/src/generated/resources/assets/decisland/models/block/fuse.json new file mode 100644 index 0000000..9321ecb --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/fuse.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/fuse" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/ghost_ice.json b/src/generated/resources/assets/decisland/models/block/ghost_ice.json new file mode 100644 index 0000000..e3466b6 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/ghost_ice.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/ghost_ice" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/golden_chain.json b/src/generated/resources/assets/decisland/models/block/golden_chain.json new file mode 100644 index 0000000..7cfa139 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/golden_chain.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/golden_chain" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/golden_fence_block.json b/src/generated/resources/assets/decisland/models/block/golden_fence_block.json new file mode 100644 index 0000000..720741e --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/golden_fence_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/golden_fence_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/ice_bookshelf.json b/src/generated/resources/assets/decisland/models/block/ice_bookshelf.json new file mode 100644 index 0000000..8080563 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/ice_bookshelf.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/ice_brick_block", + "side": "decisland:block/ice_bookshelf_side", + "top": "decisland:block/ice_brick_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/ice_rope_block.json b/src/generated/resources/assets/decisland/models/block/ice_rope_block.json new file mode 100644 index 0000000..7c34ce4 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/ice_rope_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/ice_rope_block_0" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/item_picker.json b/src/generated/resources/assets/decisland/models/block/item_picker.json new file mode 100644 index 0000000..8a24362 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/item_picker.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/item_picker_down", + "side": "decisland:block/item_picker_side", + "top": "decisland:block/item_picker_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/lace_block_black.json b/src/generated/resources/assets/decisland/models/block/lace_block_black.json new file mode 100644 index 0000000..cb35262 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/lace_block_black.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/lace_block_black_side" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/lace_block_light_red.json b/src/generated/resources/assets/decisland/models/block/lace_block_light_red.json new file mode 100644 index 0000000..cb90cb5 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/lace_block_light_red.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/lace_block_light_red_side" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/lampshade.json b/src/generated/resources/assets/decisland/models/block/lampshade.json new file mode 100644 index 0000000..43c3057 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/lampshade.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/lampshade" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/lightning_summoner.json b/src/generated/resources/assets/decisland/models/block/lightning_summoner.json new file mode 100644 index 0000000..a936673 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/lightning_summoner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/weather_console_down", + "side": "decisland:block/lightning_summoner", + "top": "decisland:block/weather_console_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/lurk_block.json b/src/generated/resources/assets/decisland/models/block/lurk_block.json new file mode 100644 index 0000000..de09f1e --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/lurk_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/lurk_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/lurk_end_stone.json b/src/generated/resources/assets/decisland/models/block/lurk_end_stone.json new file mode 100644 index 0000000..271895e --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/lurk_end_stone.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "minecraft:block/end_stone", + "side": "decisland:block/lurk_end_stone_side", + "top": "decisland:block/lurk_end_stone_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/mine.json b/src/generated/resources/assets/decisland/models/block/mine.json new file mode 100644 index 0000000..80c948d --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/mine.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/mine", + "side": "decisland:block/mine", + "top": "decisland:block/mine_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/mining_machine.json b/src/generated/resources/assets/decisland/models/block/mining_machine.json new file mode 100644 index 0000000..3e9924f --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/mining_machine.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/mining_machine_down", + "side": "decisland:block/mining_machine_side", + "top": "decisland:block/mining_machine_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/monitor.json b/src/generated/resources/assets/decisland/models/block/monitor.json new file mode 100644 index 0000000..9e457f8 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/monitor.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/lurk_log_up", + "side": "decisland:block/monitor", + "top": "decisland:block/lurk_log_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/monitor_activated.json b/src/generated/resources/assets/decisland/models/block/monitor_activated.json new file mode 100644 index 0000000..41da0d7 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/monitor_activated.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/lurk_log_up", + "side": "decisland:block/monitor_activated", + "top": "decisland:block/lurk_log_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/nuke_block.json b/src/generated/resources/assets/decisland/models/block/nuke_block.json new file mode 100644 index 0000000..17813d2 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/nuke_block.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "minecraft:block/tnt_bottom", + "side": "decisland:block/nuke_side", + "top": "minecraft:block/tnt_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/plain_tower_summoner.json b/src/generated/resources/assets/decisland/models/block/plain_tower_summoner.json new file mode 100644 index 0000000..4a37185 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/plain_tower_summoner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/plain_tower_summoner_up", + "side": "decisland:block/plain_tower_summoner_side", + "top": "decisland:block/plain_tower_summoner_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/purpur_summoner.json b/src/generated/resources/assets/decisland/models/block/purpur_summoner.json new file mode 100644 index 0000000..6a4f83c --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/purpur_summoner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/purpur_summoner_up", + "side": "decisland:block/purpur_summoner_side", + "top": "decisland:block/purpur_summoner_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/radiate_dirt.json b/src/generated/resources/assets/decisland/models/block/radiate_dirt.json new file mode 100644 index 0000000..42fb623 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/radiate_dirt.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/radiate_dirt" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/radiate_stone.json b/src/generated/resources/assets/decisland/models/block/radiate_stone.json new file mode 100644 index 0000000..cdbb278 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/radiate_stone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/radiate_stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/radiate_stonebrick.json b/src/generated/resources/assets/decisland/models/block/radiate_stonebrick.json new file mode 100644 index 0000000..d97be17 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/radiate_stonebrick.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/radiate_stonebrick" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/raining_summoner.json b/src/generated/resources/assets/decisland/models/block/raining_summoner.json new file mode 100644 index 0000000..d86377f --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/raining_summoner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/weather_console_down", + "side": "decisland:block/raining_summoner", + "top": "decisland:block/weather_console_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/red_patterned_stonebrick.json b/src/generated/resources/assets/decisland/models/block/red_patterned_stonebrick.json new file mode 100644 index 0000000..2c28629 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/red_patterned_stonebrick.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/red_patterned_stonebrick_side" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/scale_block.json b/src/generated/resources/assets/decisland/models/block/scale_block.json new file mode 100644 index 0000000..be65aa6 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/scale_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/scale_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/small_stone_block_entity.json b/src/generated/resources/assets/decisland/models/block/small_stone_block_entity.json new file mode 100644 index 0000000..ca345ba --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/small_stone_block_entity.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/small_stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/snow_brick_block.json b/src/generated/resources/assets/decisland/models/block/snow_brick_block.json new file mode 100644 index 0000000..1383040 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/snow_brick_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/snow_brick_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/soul_summoner.json b/src/generated/resources/assets/decisland/models/block/soul_summoner.json new file mode 100644 index 0000000..fa6e5e5 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/soul_summoner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/soul_summoner" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/stone_heap.json b/src/generated/resources/assets/decisland/models/block/stone_heap.json new file mode 100644 index 0000000..ca345ba --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/stone_heap.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/small_stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/stone_road.json b/src/generated/resources/assets/decisland/models/block/stone_road.json new file mode 100644 index 0000000..ca345ba --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/stone_road.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/small_stone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/sunny_summoner.json b/src/generated/resources/assets/decisland/models/block/sunny_summoner.json new file mode 100644 index 0000000..9be1379 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/sunny_summoner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "decisland:block/weather_console_down", + "side": "decisland:block/sunny_summoner", + "top": "decisland:block/weather_console_up" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/sweet_berries_block.json b/src/generated/resources/assets/decisland/models/block/sweet_berries_block.json new file mode 100644 index 0000000..4d49a16 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/sweet_berries_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/sweet_berries_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/block/thin_rope_block.json b/src/generated/resources/assets/decisland/models/block/thin_rope_block.json new file mode 100644 index 0000000..0b9df65 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/block/thin_rope_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "decisland:block/thin_rope_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/abyssal_summoner.json b/src/generated/resources/assets/decisland/models/item/abyssal_summoner.json new file mode 100644 index 0000000..758c83f --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/abyssal_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/abyssal_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/ash_cage.json b/src/generated/resources/assets/decisland/models/item/ash_cage.json new file mode 100644 index 0000000..c472734 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/ash_cage.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/ash_cage" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/ash_summoner.json b/src/generated/resources/assets/decisland/models/item/ash_summoner.json new file mode 100644 index 0000000..e0da62c --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/ash_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/ash_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/bat_summoner.json b/src/generated/resources/assets/decisland/models/item/bat_summoner.json new file mode 100644 index 0000000..f2560f1 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/bat_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/bat_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/broken_dirt.json b/src/generated/resources/assets/decisland/models/item/broken_dirt.json new file mode 100644 index 0000000..c5d29a7 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/broken_dirt.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/broken_dirt" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/cave_crate.json b/src/generated/resources/assets/decisland/models/item/cave_crate.json new file mode 100644 index 0000000..9b3f507 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/cave_crate.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/cave_crate" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/christmas_gift_block.json b/src/generated/resources/assets/decisland/models/item/christmas_gift_block.json new file mode 100644 index 0000000..1256811 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/christmas_gift_block.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/christmas_gift_block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/crate.json b/src/generated/resources/assets/decisland/models/item/crate.json new file mode 100644 index 0000000..b8d5a25 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/crate.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/crate" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/deep_summoner.json b/src/generated/resources/assets/decisland/models/item/deep_summoner.json new file mode 100644 index 0000000..4cd6218 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/deep_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/deep_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/dirt_ghost_block.json b/src/generated/resources/assets/decisland/models/item/dirt_ghost_block.json new file mode 100644 index 0000000..797d11d --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/dirt_ghost_block.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/dirt_ghost_block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/enchanted_summoner.json b/src/generated/resources/assets/decisland/models/item/enchanted_summoner.json new file mode 100644 index 0000000..bad319e --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/enchanted_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/enchanted_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/end_altar.json b/src/generated/resources/assets/decisland/models/item/end_altar.json new file mode 100644 index 0000000..f834f8b --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/end_altar.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/end_altar" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/everlasting_winter_summoner.json b/src/generated/resources/assets/decisland/models/item/everlasting_winter_summoner.json new file mode 100644 index 0000000..c1c4206 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/everlasting_winter_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/everlasting_winter_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/eye_of_nature_log.json b/src/generated/resources/assets/decisland/models/item/eye_of_nature_log.json new file mode 100644 index 0000000..f1b2d1d --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/eye_of_nature_log.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/eye_of_nature_log" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/flesh_block.json b/src/generated/resources/assets/decisland/models/item/flesh_block.json new file mode 100644 index 0000000..5a8bc40 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/flesh_block.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/flesh_block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/flowing_block.json b/src/generated/resources/assets/decisland/models/item/flowing_block.json new file mode 100644 index 0000000..ae13271 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/flowing_block.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/flowing_block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/forest_summoner.json b/src/generated/resources/assets/decisland/models/item/forest_summoner.json new file mode 100644 index 0000000..3250111 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/forest_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/forest_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/frozen_cage.json b/src/generated/resources/assets/decisland/models/item/frozen_cage.json new file mode 100644 index 0000000..4778ffb --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/frozen_cage.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/frozen_cage" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/frozen_crate.json b/src/generated/resources/assets/decisland/models/item/frozen_crate.json new file mode 100644 index 0000000..5e0eace --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/frozen_crate.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/frozen_crate" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/fuse.json b/src/generated/resources/assets/decisland/models/item/fuse.json new file mode 100644 index 0000000..8e89394 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/fuse.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/fuse" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/ghost_ice.json b/src/generated/resources/assets/decisland/models/item/ghost_ice.json new file mode 100644 index 0000000..4a779c6 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/ghost_ice.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/ghost_ice" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/golden_bookshelf.json b/src/generated/resources/assets/decisland/models/item/golden_bookshelf.json new file mode 100644 index 0000000..78b78e6 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/golden_bookshelf.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/golden_bookshelf" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/golden_bookshelf_frame.json b/src/generated/resources/assets/decisland/models/item/golden_bookshelf_frame.json new file mode 100644 index 0000000..2b3adff --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/golden_bookshelf_frame.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/golden_bookshelf_frame" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/golden_chain.json b/src/generated/resources/assets/decisland/models/item/golden_chain.json new file mode 100644 index 0000000..c5f57fc --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/golden_chain.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/golden_chain" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/golden_fence_block.json b/src/generated/resources/assets/decisland/models/item/golden_fence_block.json new file mode 100644 index 0000000..b395c3c --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/golden_fence_block.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/golden_fence_block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/ice_bookshelf.json b/src/generated/resources/assets/decisland/models/item/ice_bookshelf.json new file mode 100644 index 0000000..f07d115 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/ice_bookshelf.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/ice_bookshelf" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/ice_rope_block.json b/src/generated/resources/assets/decisland/models/item/ice_rope_block.json new file mode 100644 index 0000000..29c16ba --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/ice_rope_block.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/ice_rope_block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/item_picker.json b/src/generated/resources/assets/decisland/models/item/item_picker.json new file mode 100644 index 0000000..8466204 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/item_picker.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/item_picker" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/lace_block_black.json b/src/generated/resources/assets/decisland/models/item/lace_block_black.json new file mode 100644 index 0000000..e2de493 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/lace_block_black.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/lace_block_black" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/lace_block_light_red.json b/src/generated/resources/assets/decisland/models/item/lace_block_light_red.json new file mode 100644 index 0000000..c9f4281 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/lace_block_light_red.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/lace_block_light_red" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/lampshade.json b/src/generated/resources/assets/decisland/models/item/lampshade.json new file mode 100644 index 0000000..6b75cac --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/lampshade.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/lampshade" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/lightning_summoner.json b/src/generated/resources/assets/decisland/models/item/lightning_summoner.json new file mode 100644 index 0000000..e3d32cf --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/lightning_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/lightning_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/lurk_block.json b/src/generated/resources/assets/decisland/models/item/lurk_block.json new file mode 100644 index 0000000..5cd48d1 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/lurk_block.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/lurk_block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/lurk_end_stone.json b/src/generated/resources/assets/decisland/models/item/lurk_end_stone.json new file mode 100644 index 0000000..0d5e340 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/lurk_end_stone.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/lurk_end_stone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/magic_letter_box.json b/src/generated/resources/assets/decisland/models/item/magic_letter_box.json new file mode 100644 index 0000000..07baf2e --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/magic_letter_box.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/magic_letter_box" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/mine.json b/src/generated/resources/assets/decisland/models/item/mine.json new file mode 100644 index 0000000..b14fc58 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/mine.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/mine" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/mining_machine.json b/src/generated/resources/assets/decisland/models/item/mining_machine.json new file mode 100644 index 0000000..3232436 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/mining_machine.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/mining_machine" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/monitor.json b/src/generated/resources/assets/decisland/models/item/monitor.json new file mode 100644 index 0000000..a348b09 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/monitor.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/monitor" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/monitor_activated.json b/src/generated/resources/assets/decisland/models/item/monitor_activated.json new file mode 100644 index 0000000..0777653 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/monitor_activated.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/monitor_activated" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/nuke_block.json b/src/generated/resources/assets/decisland/models/item/nuke_block.json new file mode 100644 index 0000000..000da55 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/nuke_block.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/nuke_block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/plain_tower_summoner.json b/src/generated/resources/assets/decisland/models/item/plain_tower_summoner.json new file mode 100644 index 0000000..4178562 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/plain_tower_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/plain_tower_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/purpur_summoner.json b/src/generated/resources/assets/decisland/models/item/purpur_summoner.json new file mode 100644 index 0000000..78c2350 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/purpur_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/purpur_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/radiate_dirt.json b/src/generated/resources/assets/decisland/models/item/radiate_dirt.json new file mode 100644 index 0000000..c3f2087 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/radiate_dirt.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/radiate_dirt" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/radiate_stone.json b/src/generated/resources/assets/decisland/models/item/radiate_stone.json new file mode 100644 index 0000000..ee58696 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/radiate_stone.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/radiate_stone" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/radiate_stonebrick.json b/src/generated/resources/assets/decisland/models/item/radiate_stonebrick.json new file mode 100644 index 0000000..cda3e0f --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/radiate_stonebrick.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/radiate_stonebrick" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/raining_summoner.json b/src/generated/resources/assets/decisland/models/item/raining_summoner.json new file mode 100644 index 0000000..c401e3a --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/raining_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/raining_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/red_lantern.json b/src/generated/resources/assets/decisland/models/item/red_lantern.json new file mode 100644 index 0000000..4f2eeae --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/red_lantern.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/red_lantern" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/red_patterned_stonebrick.json b/src/generated/resources/assets/decisland/models/item/red_patterned_stonebrick.json new file mode 100644 index 0000000..c3082b6 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/red_patterned_stonebrick.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/red_patterned_stonebrick" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/scale_block.json b/src/generated/resources/assets/decisland/models/item/scale_block.json new file mode 100644 index 0000000..24d9fc8 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/scale_block.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/scale_block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/small_stone_block_entity.json b/src/generated/resources/assets/decisland/models/item/small_stone_block_entity.json new file mode 100644 index 0000000..9025de1 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/small_stone_block_entity.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/small_stone_block_entity" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/snow_brick_block.json b/src/generated/resources/assets/decisland/models/item/snow_brick_block.json new file mode 100644 index 0000000..06f17eb --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/snow_brick_block.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/snow_brick_block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/soul_summoner.json b/src/generated/resources/assets/decisland/models/item/soul_summoner.json new file mode 100644 index 0000000..631d662 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/soul_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/soul_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/stone_heap.json b/src/generated/resources/assets/decisland/models/item/stone_heap.json new file mode 100644 index 0000000..1ca4c0f --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/stone_heap.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/stone_heap" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/stone_road.json b/src/generated/resources/assets/decisland/models/item/stone_road.json new file mode 100644 index 0000000..30117b6 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/stone_road.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/stone_road" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/sunny_summoner.json b/src/generated/resources/assets/decisland/models/item/sunny_summoner.json new file mode 100644 index 0000000..35617e4 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/sunny_summoner.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/sunny_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/sweet_berries_block.json b/src/generated/resources/assets/decisland/models/item/sweet_berries_block.json new file mode 100644 index 0000000..da54d65 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/sweet_berries_block.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/sweet_berries_block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/decisland/models/item/thin_rope_block.json b/src/generated/resources/assets/decisland/models/item/thin_rope_block.json new file mode 100644 index 0000000..f315ba9 --- /dev/null +++ b/src/generated/resources/assets/decisland/models/item/thin_rope_block.json @@ -0,0 +1,3 @@ +{ + "parent": "decisland:block/thin_rope_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/abyssal_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/abyssal_summoner.json new file mode 100644 index 0000000..25046f9 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/abyssal_summoner.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/abyssal_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/ash_cage.json b/src/generated/resources/data/decisland/loot_table/blocks/ash_cage.json new file mode 100644 index 0000000..707c638 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/ash_cage.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:ash_cage" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/ash_cage" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/ash_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/ash_summoner.json new file mode 100644 index 0000000..ecc7170 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/ash_summoner.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/ash_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/bat_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/bat_summoner.json new file mode 100644 index 0000000..d7dd822 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/bat_summoner.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/bat_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/broken_dirt.json b/src/generated/resources/data/decisland/loot_table/blocks/broken_dirt.json new file mode 100644 index 0000000..c8ac05e --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/broken_dirt.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:broken_dirt" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/broken_dirt" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/cave_crate.json b/src/generated/resources/data/decisland/loot_table/blocks/cave_crate.json new file mode 100644 index 0000000..94c68df --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/cave_crate.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:cave_crate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/cave_crate" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/christmas_gift_block.json b/src/generated/resources/data/decisland/loot_table/blocks/christmas_gift_block.json new file mode 100644 index 0000000..4ec2862 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/christmas_gift_block.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:christmas_cap", + "weight": 3 + }, + { + "type": "minecraft:item", + "name": "decisland:gingerbread_man", + "weight": 5 + }, + { + "type": "minecraft:item", + "name": "decisland:gingerbread_sword", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "decisland:candy_cane", + "weight": 3 + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/christmas_gift_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/crate.json b/src/generated/resources/data/decisland/loot_table/blocks/crate.json new file mode 100644 index 0000000..9f760cf --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/crate.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:crate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/crate" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/deep_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/deep_summoner.json new file mode 100644 index 0000000..a81e128 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/deep_summoner.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/deep_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/dirt_ghost_block.json b/src/generated/resources/data/decisland/loot_table/blocks/dirt_ghost_block.json new file mode 100644 index 0000000..2cb47fc --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/dirt_ghost_block.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/dirt_ghost_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/enchanted_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/enchanted_summoner.json new file mode 100644 index 0000000..6cd8176 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/enchanted_summoner.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/enchanted_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/end_altar.json b/src/generated/resources/data/decisland/loot_table/blocks/end_altar.json new file mode 100644 index 0000000..c8201b6 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/end_altar.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:end_altar" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/end_altar" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/everlasting_winter_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/everlasting_winter_summoner.json new file mode 100644 index 0000000..4f9d82c --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/everlasting_winter_summoner.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:everlasting_winter_summoner" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/everlasting_winter_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/eye_of_nature_log.json b/src/generated/resources/data/decisland/loot_table/blocks/eye_of_nature_log.json new file mode 100644 index 0000000..190657e --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/eye_of_nature_log.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:eye_of_nature" + }, + { + "type": "minecraft:item", + "name": "minecraft:oak_log" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/eye_of_nature_log" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/flesh_block.json b/src/generated/resources/data/decisland/loot_table/blocks/flesh_block.json new file mode 100644 index 0000000..3288e04 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/flesh_block.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/flesh_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/flowing_block.json b/src/generated/resources/data/decisland/loot_table/blocks/flowing_block.json new file mode 100644 index 0000000..febc230 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/flowing_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:flowing_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/flowing_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/forest_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/forest_summoner.json new file mode 100644 index 0000000..13dd8c2 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/forest_summoner.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/forest_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/frozen_cage.json b/src/generated/resources/data/decisland/loot_table/blocks/frozen_cage.json new file mode 100644 index 0000000..a64556a --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/frozen_cage.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:frozen_cage" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/frozen_cage" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/frozen_crate.json b/src/generated/resources/data/decisland/loot_table/blocks/frozen_crate.json new file mode 100644 index 0000000..f4bfb03 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/frozen_crate.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:frozen_crate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/frozen_crate" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/fuse.json b/src/generated/resources/data/decisland/loot_table/blocks/fuse.json new file mode 100644 index 0000000..413d710 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/fuse.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:fuse" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/fuse" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/ghost_ice.json b/src/generated/resources/data/decisland/loot_table/blocks/ghost_ice.json new file mode 100644 index 0000000..eadab1b --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/ghost_ice.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/ghost_ice" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/golden_bookshelf.json b/src/generated/resources/data/decisland/loot_table/blocks/golden_bookshelf.json new file mode 100644 index 0000000..a0e2f58 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/golden_bookshelf.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:golden_bookshelf" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/golden_bookshelf" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/golden_bookshelf_frame.json b/src/generated/resources/data/decisland/loot_table/blocks/golden_bookshelf_frame.json new file mode 100644 index 0000000..df0a3d0 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/golden_bookshelf_frame.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:golden_bookshelf_frame" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/golden_bookshelf_frame" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/golden_chain.json b/src/generated/resources/data/decisland/loot_table/blocks/golden_chain.json new file mode 100644 index 0000000..2c86a33 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/golden_chain.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:golden_chain" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/golden_chain" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/golden_fence_block.json b/src/generated/resources/data/decisland/loot_table/blocks/golden_fence_block.json new file mode 100644 index 0000000..cb89a2d --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/golden_fence_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:golden_fence_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/golden_fence_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/ice_bookshelf.json b/src/generated/resources/data/decisland/loot_table/blocks/ice_bookshelf.json new file mode 100644 index 0000000..29de65d --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/ice_bookshelf.json @@ -0,0 +1,49 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 3.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:book", + "weight": 40 + }, + { + "type": "minecraft:item", + "name": "decisland:snowball_magic_book" + }, + { + "type": "minecraft:item", + "name": "decisland:old_book", + "weight": 3 + }, + { + "type": "minecraft:item", + "name": "decisland:lapis_magic_book" + }, + { + "type": "minecraft:item", + "name": "decisland:experience_book_empty" + }, + { + "type": "minecraft:item", + "name": "decisland:experience_book" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/ice_bookshelf" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/ice_rope_block.json b/src/generated/resources/data/decisland/loot_table/blocks/ice_rope_block.json new file mode 100644 index 0000000..3b062f3 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/ice_rope_block.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/ice_rope_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/item_picker.json b/src/generated/resources/data/decisland/loot_table/blocks/item_picker.json new file mode 100644 index 0000000..2ba2228 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/item_picker.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:item_picker" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/item_picker" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/lace_block_black.json b/src/generated/resources/data/decisland/loot_table/blocks/lace_block_black.json new file mode 100644 index 0000000..d555e41 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/lace_block_black.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:lace_block_black" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/lace_block_black" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/lace_block_light_red.json b/src/generated/resources/data/decisland/loot_table/blocks/lace_block_light_red.json new file mode 100644 index 0000000..c43c539 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/lace_block_light_red.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:lace_block_light_red" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/lace_block_light_red" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/lampshade.json b/src/generated/resources/data/decisland/loot_table/blocks/lampshade.json new file mode 100644 index 0000000..a8c8cd7 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/lampshade.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:lampshade" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/lampshade" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/lightning_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/lightning_summoner.json new file mode 100644 index 0000000..c3c4182 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/lightning_summoner.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:lightning_summoner" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/lightning_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/lurk_block.json b/src/generated/resources/data/decisland/loot_table/blocks/lurk_block.json new file mode 100644 index 0000000..f0af470 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/lurk_block.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "chance": 0.1, + "condition": "minecraft:random_chance" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:lurk_spring" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/lurk_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/lurk_end_stone.json b/src/generated/resources/data/decisland/loot_table/blocks/lurk_end_stone.json new file mode 100644 index 0000000..5f09316 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/lurk_end_stone.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:lurk_end_stone" + }, + { + "type": "minecraft:item", + "name": "minecraft:end_stone", + "weight": 4 + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/lurk_end_stone" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/magic_letter_box.json b/src/generated/resources/data/decisland/loot_table/blocks/magic_letter_box.json new file mode 100644 index 0000000..0f77f33 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/magic_letter_box.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:magic_letter_box" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/magic_letter_box" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/mine.json b/src/generated/resources/data/decisland/loot_table/blocks/mine.json new file mode 100644 index 0000000..af5af32 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/mine.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:mine" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/mine" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/mining_machine.json b/src/generated/resources/data/decisland/loot_table/blocks/mining_machine.json new file mode 100644 index 0000000..e260045 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/mining_machine.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:mining_machine" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/mining_machine" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/monitor.json b/src/generated/resources/data/decisland/loot_table/blocks/monitor.json new file mode 100644 index 0000000..2cea38f --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/monitor.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:monitor" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/monitor" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/monitor_activated.json b/src/generated/resources/data/decisland/loot_table/blocks/monitor_activated.json new file mode 100644 index 0000000..d08ad32 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/monitor_activated.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:monitor" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/monitor_activated" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/nuke_block.json b/src/generated/resources/data/decisland/loot_table/blocks/nuke_block.json new file mode 100644 index 0000000..3984e5b --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/nuke_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:nuke_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/nuke_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/plain_tower_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/plain_tower_summoner.json new file mode 100644 index 0000000..218858f --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/plain_tower_summoner.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/plain_tower_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/purpur_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/purpur_summoner.json new file mode 100644 index 0000000..8b2058a --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/purpur_summoner.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:purpur_summoner" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/purpur_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/radiate_dirt.json b/src/generated/resources/data/decisland/loot_table/blocks/radiate_dirt.json new file mode 100644 index 0000000..d14c4f6 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/radiate_dirt.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:radiate_dirt" + }, + { + "type": "minecraft:item", + "name": "minecraft:dirt" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/radiate_dirt" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/radiate_stone.json b/src/generated/resources/data/decisland/loot_table/blocks/radiate_stone.json new file mode 100644 index 0000000..aad8688 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/radiate_stone.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:radiate_stone" + }, + { + "type": "minecraft:item", + "name": "decisland:small_stone" + }, + { + "type": "minecraft:item", + "name": "minecraft:cobblestone" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/radiate_stone" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/radiate_stonebrick.json b/src/generated/resources/data/decisland/loot_table/blocks/radiate_stonebrick.json new file mode 100644 index 0000000..be0220b --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/radiate_stonebrick.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:radiate_stone" + }, + { + "type": "minecraft:item", + "name": "decisland:small_stone" + }, + { + "type": "minecraft:item", + "name": "minecraft:cobblestone" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/radiate_stonebrick" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/raining_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/raining_summoner.json new file mode 100644 index 0000000..82c6b60 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/raining_summoner.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:raining_summoner" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/raining_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/red_lantern.json b/src/generated/resources/data/decisland/loot_table/blocks/red_lantern.json new file mode 100644 index 0000000..4b0239d --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/red_lantern.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:red_lantern" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/red_lantern" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/red_patterned_stonebrick.json b/src/generated/resources/data/decisland/loot_table/blocks/red_patterned_stonebrick.json new file mode 100644 index 0000000..7112143 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/red_patterned_stonebrick.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:red_patterned_stonebrick" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/red_patterned_stonebrick" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/scale_block.json b/src/generated/resources/data/decisland/loot_table/blocks/scale_block.json new file mode 100644 index 0000000..b52c1fd --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/scale_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:scale_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/scale_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/small_stone_block_entity.json b/src/generated/resources/data/decisland/loot_table/blocks/small_stone_block_entity.json new file mode 100644 index 0000000..bfae0fe --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/small_stone_block_entity.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:small_stone" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/small_stone_block_entity" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/snow_brick_block.json b/src/generated/resources/data/decisland/loot_table/blocks/snow_brick_block.json new file mode 100644 index 0000000..f4420db --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/snow_brick_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:snow_brick_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/snow_brick_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/soul_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/soul_summoner.json new file mode 100644 index 0000000..7071f07 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/soul_summoner.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/soul_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/stone_heap.json b/src/generated/resources/data/decisland/loot_table/blocks/stone_heap.json new file mode 100644 index 0000000..3953785 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/stone_heap.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 5.0, + "min": 2.0 + }, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "decisland:small_stone" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/stone_heap" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/stone_road.json b/src/generated/resources/data/decisland/loot_table/blocks/stone_road.json new file mode 100644 index 0000000..b53bf65 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/stone_road.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 5.0, + "min": 2.0 + }, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "decisland:small_stone" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/stone_road" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/sunny_summoner.json b/src/generated/resources/data/decisland/loot_table/blocks/sunny_summoner.json new file mode 100644 index 0000000..3d843a4 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/sunny_summoner.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:sunny_summoner" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/sunny_summoner" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/sweet_berries_block.json b/src/generated/resources/data/decisland/loot_table/blocks/sweet_berries_block.json new file mode 100644 index 0000000..71609c2 --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/sweet_berries_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:sweet_berries_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "decisland:blocks/sweet_berries_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/decisland/loot_table/blocks/thin_rope_block.json b/src/generated/resources/data/decisland/loot_table/blocks/thin_rope_block.json new file mode 100644 index 0000000..e16dd8a --- /dev/null +++ b/src/generated/resources/data/decisland/loot_table/blocks/thin_rope_block.json @@ -0,0 +1,4 @@ +{ + "type": "minecraft:block", + "random_sequence": "decisland:blocks/thin_rope_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/axe.json b/src/generated/resources/data/minecraft/tags/block/mineable/axe.json index 3a9796f..5d8d2fb 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/axe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/axe.json @@ -1,5 +1,12 @@ { "values": [ - "decisland:lurk_log" + "decisland:lurk_log", + "decisland:eye_of_nature_log", + "decisland:crate", + "decisland:frozen_crate", + "decisland:cave_crate", + "decisland:golden_bookshelf", + "decisland:golden_bookshelf_frame", + "decisland:magic_letter_box" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 5456b8d..3c8d872 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -34,6 +34,33 @@ "decisland:smooth_amethyst_block", "decisland:solidified_lava_block", "decisland:steel_block", - "decisland:uranium_block" + "decisland:uranium_block", + "decisland:ash_cage", + "decisland:frozen_cage", + "decisland:lurk_end_stone", + "decisland:radiate_stone", + "decisland:radiate_stonebrick", + "decisland:red_patterned_stonebrick", + "decisland:scale_block", + "decisland:snow_brick_block", + "decisland:golden_fence_block", + "decisland:end_altar", + "decisland:purpur_summoner", + "decisland:enchanted_summoner", + "decisland:plain_tower_summoner", + "decisland:ash_summoner", + "decisland:abyssal_summoner", + "decisland:bat_summoner", + "decisland:deep_summoner", + "decisland:forest_summoner", + "decisland:soul_summoner", + "decisland:everlasting_winter_summoner", + "decisland:monitor", + "decisland:monitor_activated", + "decisland:item_picker", + "decisland:mining_machine", + "decisland:mine", + "decisland:flowing_block", + "decisland:golden_chain" ] } \ No newline at end of file diff --git a/src/main/java/com/dec/decisland/DecIslandClient.kt b/src/main/java/com/dec/decisland/DecIslandClient.kt index b760278..a6852a1 100644 --- a/src/main/java/com/dec/decisland/DecIslandClient.kt +++ b/src/main/java/com/dec/decisland/DecIslandClient.kt @@ -48,6 +48,67 @@ object DecIslandClientEvents { ItemBlockRenderTypes.setRenderLayer(block, RenderType.cutout()) } ItemBlockRenderTypes.setRenderLayer(Crop.CORN_CROP.get(), RenderType.cutout()) + + // 基岩版移植方块渲染层(alpha_test → cutout,blend → translucent) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.ASH_CAGE.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.FROZEN_CAGE.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.RED_LANTERN.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.ICE_BOOKSHELF.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.LURK_BLOCK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.LURK_END_STONE.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.RADIATE_STONE.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.RADIATE_DIRT.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.RADIATE_STONEBRICK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.RED_PATTERNED_STONEBRICK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.BROKEN_DIRT.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.FLESH_BLOCK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.SCALE_BLOCK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.SWEET_BERRIES_BLOCK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.SNOW_BRICK_BLOCK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.FUSE.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.EYE_OF_NATURE_LOG.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.LACE_BLOCK_BLACK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.LACE_BLOCK_LIGHT_RED.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.THIN_ROPE_BLOCK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.CRATE.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.FROZEN_CRATE.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.CAVE_CRATE.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.GOLDEN_FENCE_BLOCK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.GOLDEN_BOOKSHELF.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.GOLDEN_BOOKSHELF_FRAME.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.NUKE_BLOCK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.END_ALTAR.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.LIGHTNING_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.RAINING_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.SUNNY_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.PURPUR_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.ENCHANTED_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.PLAIN_TOWER_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.ASH_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.ABYSSAL_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.BAT_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.DEEP_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.FOREST_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.SOUL_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.EVERLASTING_WINTER_SUMMONER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.MONITOR.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.MONITOR_ACTIVATED.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.ITEM_PICKER.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.MINING_MACHINE.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.MINE.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.MAGIC_LETTER_BOX.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.FLOWING_BLOCK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.CHRISTMAS_GIFT_BLOCK.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.GOLDEN_CHAIN.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.LAMPSHADE.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.STONE_HEAP.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.STONE_ROAD.get(), RenderType.cutout()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.SMALL_STONE_BLOCK_ENTITY.get(), RenderType.cutout()) + + // blend → translucent + ItemBlockRenderTypes.setRenderLayer(ModBlocks.GHOST_ICE.get(), RenderType.translucent()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.DIRT_GHOST_BLOCK.get(), RenderType.translucent()) + ItemBlockRenderTypes.setRenderLayer(ModBlocks.ICE_ROPE_BLOCK.get(), RenderType.translucent()) } } } diff --git a/src/main/java/com/dec/decisland/block/ModBlocks.kt b/src/main/java/com/dec/decisland/block/ModBlocks.kt index fc4e193..36d2633 100644 --- a/src/main/java/com/dec/decisland/block/ModBlocks.kt +++ b/src/main/java/com/dec/decisland/block/ModBlocks.kt @@ -6,6 +6,7 @@ import com.dec.decisland.block.custom.FlowerGhostBlock import com.dec.decisland.block.custom.NightmareBlock import com.dec.decisland.block.custom.SimpleCropBlock import com.dec.decisland.block.custom.SimplePlantBlock +import com.dec.decisland.block.custom.ShapedBlock import com.dec.decisland.block.custom.SnowPortalBlock import com.dec.decisland.block.custom.CornCropBlock import com.dec.decisland.datagen.ModBlockLootTablesProvider @@ -14,6 +15,8 @@ import com.dec.decisland.item.ModItems import com.dec.decisland.item.category.Material import com.dec.decisland.item.category.Food import com.dec.decisland.item.category.Crop +import com.dec.decisland.item.category.Weapon +import com.dec.decisland.item.category.Fashion import net.minecraft.core.Direction import net.minecraft.data.models.BlockModelGenerators import net.minecraft.data.models.model.DelegatedModel @@ -49,6 +52,8 @@ import net.minecraft.world.level.block.state.properties.Property import net.minecraft.world.level.material.PushReaction import net.minecraft.world.level.material.MapColor import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition +import net.minecraft.world.phys.shapes.Shapes +import net.minecraft.world.phys.shapes.VoxelShape import net.minecraft.advancements.critereon.StatePropertiesPredicate import net.neoforged.bus.api.IEventBus import net.neoforged.neoforge.registries.DeferredBlock @@ -68,16 +73,21 @@ object ModBlocks { val sideTexture: String? = null, val topTexture: String? = null, val bottomTexture: String? = null, + val texture: String? = null, + val customPath: String? = null, ) { enum class Kind { CUBE_ALL, CUBE_BOTTOM_TOP, COLUMN, + CUSTOM, } companion object { fun cubeAll(): BlockModelSpec = BlockModelSpec(Kind.CUBE_ALL) + fun cubeAll(texture: String): BlockModelSpec = BlockModelSpec(Kind.CUBE_ALL, texture = texture) + fun cubeBottomTop( sideTexture: String, topTexture: String, @@ -88,6 +98,8 @@ object ModBlocks { sideTexture: String, topTexture: String, ): BlockModelSpec = BlockModelSpec(Kind.COLUMN, sideTexture, topTexture) + + fun custom(path: String): BlockModelSpec = BlockModelSpec(Kind.CUSTOM, customPath = path) } } @@ -99,9 +111,10 @@ object ModBlocks { val lightLevel: Int = 0, val friction: Float? = null, val requiresCorrectTool: Boolean = false, + val noOcclusion: Boolean = false, val tags: List> = emptyList(), val model: BlockModelSpec = BlockModelSpec.cubeAll(), - val creativeTab: Supplier = ModCreativeModeTabs.DECISLAND_MATERIALS_TAB, + val creativeTab: Supplier = ModCreativeModeTabs.DECISLAND_BLOCKS_TAB, val factory: Function = Function(::Block), val loot: LootSpec = LootSpec.self(), ) @@ -126,21 +139,39 @@ object ModBlocks { val crossModel: Boolean, ) + private data class WeightedDrop( + val item: Supplier, + val weight: Int, + val maxCount: Int = 1, + ) + private data class LootSpec( val dropItem: Supplier? = null, val minCount: Float = 1.0f, val maxCount: Float = 1.0f, val silkTouch: Boolean = false, + val chance: Float? = null, + val weighted: List? = null, + val noDrop: Boolean = false, ) { companion object { fun self(): LootSpec = LootSpec() + fun none(): LootSpec = LootSpec(noDrop = true) + fun drop( item: Supplier, minCount: Float = 1.0f, maxCount: Float = 1.0f, silkTouch: Boolean = false, ): LootSpec = LootSpec(item, minCount, maxCount, silkTouch) + + fun chance( + item: Supplier, + chance: Float, + ): LootSpec = LootSpec(item, chance = chance) + + fun weighted(entries: List): LootSpec = LootSpec(weighted = entries) } } @@ -742,6 +773,710 @@ object ModBlocks { .build(), ) + // ==================== 基岩版移植方块(第二波:笼子/灯笼/书架/特殊掉落) ==================== + + // 红灯笼碰撞箱:基岩版 origin [-5,1,-5] size [10,12,10] + private val RED_LANTERN_SHAPE: VoxelShape = Shapes.box(3.0 / 16, 1.0 / 16, 3.0 / 16, 13.0 / 16, 13.0 / 16, 13.0 / 16) + // 圣诞礼物碰撞箱:origin [-4,0,-4] size [8,8,8] + private val CHRISTMAS_GIFT_SHAPE: VoxelShape = Shapes.box(4.0 / 16, 0.0, 4.0 / 16, 12.0 / 16, 8.0 / 16, 12.0 / 16) + // 金链碰撞箱:origin [-2.5,0,-2.5] size [5,16,5] + private val GOLDEN_CHAIN_SHAPE: VoxelShape = Shapes.box(5.5 / 16, 0.0, 5.5 / 16, 10.5 / 16, 1.0, 10.5 / 16) + // 灯罩碰撞箱:origin [-8,0,5] size [16,16,3](贴背板的竖直板) + private val LAMPSHADE_SHAPE: VoxelShape = Shapes.box(0.0, 0.0, 13.0 / 16, 1.0, 1.0, 1.0) + // 石堆碰撞箱:origin [-6,0,-6] size [13,2,13] + private val STONE_HEAP_SHAPE: VoxelShape = Shapes.box(2.0 / 16, 0.0, 2.0 / 16, 15.0 / 16, 2.0 / 16, 15.0 / 16) + // 石板路碰撞箱:origin [-8,0,-8] size [16,2,16] + private val STONE_ROAD_SHAPE: VoxelShape = Shapes.box(0.0, 0.0, 0.0, 1.0, 2.0 / 16, 1.0) + // 小石子碰撞箱:origin [-2,0,-2] size [3,2,3] + private val SMALL_STONE_SHAPE: VoxelShape = Shapes.box(6.0 / 16, 0.0, 6.0 / 16, 9.0 / 16, 2.0 / 16, 9.0 / 16) + + @JvmField + val ASH_CAGE: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "ash_cage", + destroyTime = 3.2f, explosionResistance = 500.0f, + sound = SoundType.METAL, + requiresCorrectTool = true, noOcclusion = true, + tags = pickaxeTags(), + ), + ) + + @JvmField + val FROZEN_CAGE: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "frozen_cage", + destroyTime = 3.2f, explosionResistance = 500.0f, + sound = SoundType.GLASS, friction = 0.55f, + requiresCorrectTool = true, noOcclusion = true, + tags = pickaxeTags(), + ), + ) + + @JvmField + val RED_LANTERN: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "red_lantern", + destroyTime = 0.01f, explosionResistance = 0.0f, + sound = SoundType.GLASS, + lightLevel = 15, noOcclusion = true, + factory = Function { properties -> ShapedBlock(properties, RED_LANTERN_SHAPE) }, + model = BlockModelSpec.custom("red_lantern"), + ), + ) + + @JvmField + val ICE_BOOKSHELF: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "ice_bookshelf", + destroyTime = 1.5f, explosionResistance = 10.0f, + sound = SoundType.GLASS, friction = 0.55f, + model = BlockModelSpec.cubeBottomTop("ice_bookshelf_side", "ice_brick_block", "ice_brick_block"), + loot = LootSpec.weighted( + listOf( + WeightedDrop(Supplier { Items.BOOK }, 40, 3), + WeightedDrop(Supplier { Weapon.SNOWBALL_MAGIC_BOOK.get() }, 1), + WeightedDrop(Supplier { Material.OLD_BOOK.get() }, 3), + WeightedDrop(Supplier { Weapon.LAPIS_MAGIC_BOOK.get() }, 1), + WeightedDrop(Supplier { ModItems.EXPERIENCE_BOOK_EMPTY.get() }, 1), + WeightedDrop(Supplier { ModItems.EXPERIENCE_BOOK.get() }, 1), + ), + ), + ), + ) + + @JvmField + val LURK_BLOCK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "lurk_block", + destroyTime = 0.5f, explosionResistance = 20.0f, + sound = SoundType.GRASS, noOcclusion = true, + loot = LootSpec.chance(Supplier { SimplePlant.LURK_SPRING.get() }, 0.1f), + ), + ) + + @JvmField + val LURK_END_STONE: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "lurk_end_stone", + destroyTime = 3.0f, explosionResistance = 30.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + model = BlockModelSpec.cubeBottomTop("lurk_end_stone_side", "lurk_end_stone_up", "minecraft:end_stone"), + loot = LootSpec.weighted( + listOf( + WeightedDrop(Supplier { ModBlocks.LURK_END_STONE.get() }, 1), + WeightedDrop(Supplier { Items.END_STONE }, 4), + ), + ), + ), + ) + + @JvmField + val RADIATE_STONE: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "radiate_stone", + destroyTime = 1.5f, explosionResistance = 15.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, noOcclusion = true, + tags = pickaxeTags(), + loot = LootSpec.weighted( + listOf( + WeightedDrop(Supplier { ModBlocks.RADIATE_STONE.get() }, 1), + WeightedDrop(Supplier { Material.SMALL_STONE.get() }, 1), + WeightedDrop(Supplier { Items.COBBLESTONE }, 1), + ), + ), + ), + ) + + @JvmField + val RADIATE_DIRT: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "radiate_dirt", + destroyTime = 1.0f, explosionResistance = 5.0f, + sound = SoundType.GRAVEL, noOcclusion = true, + loot = LootSpec.weighted( + listOf( + WeightedDrop(Supplier { ModBlocks.RADIATE_DIRT.get() }, 1), + WeightedDrop(Supplier { Items.DIRT }, 1), + ), + ), + ), + ) + + @JvmField + val RADIATE_STONEBRICK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "radiate_stonebrick", + destroyTime = 1.5f, explosionResistance = 15.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, noOcclusion = true, + tags = pickaxeTags(), + // 基岩版 radiate_stonebrick 的战利品表就是 radiate_stone.json(权重三选一) + loot = LootSpec.weighted( + listOf( + WeightedDrop(Supplier { ModBlocks.RADIATE_STONE.get() }, 1), + WeightedDrop(Supplier { Material.SMALL_STONE.get() }, 1), + WeightedDrop(Supplier { Items.COBBLESTONE }, 1), + ), + ), + ), + ) + + @JvmField + val RED_PATTERNED_STONEBRICK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "red_patterned_stonebrick", + destroyTime = 2.1f, explosionResistance = 10.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, noOcclusion = true, + tags = pickaxeTags(), + model = BlockModelSpec.cubeAll("red_patterned_stonebrick_side"), + ), + ) + + // ==================== 基岩版移植方块(第三波:建筑/装饰/储物) ==================== + + @JvmField + val BROKEN_DIRT: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec("broken_dirt", 0.7f, 0.0f, SoundType.GRAVEL, noOcclusion = true), + ) + + @JvmField + val FLESH_BLOCK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "flesh_block", + destroyTime = 1.0f, explosionResistance = 0.0f, + sound = SoundType.HONEY_BLOCK, noOcclusion = true, + loot = LootSpec.none(), + ), + ) + + @JvmField + val SCALE_BLOCK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "scale_block", + destroyTime = 4.0f, explosionResistance = 0.0f, + sound = SoundType.METAL, + lightLevel = 3, noOcclusion = true, + requiresCorrectTool = true, + tags = pickaxeTags(), + ), + ) + + @JvmField + val SWEET_BERRIES_BLOCK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec("sweet_berries_block", 0.3f, 0.0f, SoundType.GRASS, noOcclusion = true), + ) + + @JvmField + val SNOW_BRICK_BLOCK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "snow_brick_block", + destroyTime = 1.5f, explosionResistance = 10.0f, + sound = SoundType.SNOW, + requiresCorrectTool = true, noOcclusion = true, + tags = pickaxeTags(), + ), + ) + + @JvmField + val GHOST_ICE: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "ghost_ice", + destroyTime = 1.0f, explosionResistance = 10.0f, + sound = SoundType.GLASS, friction = 0.98f, + noOcclusion = true, + loot = LootSpec.none(), + ), + ) + + @JvmField + val DIRT_GHOST_BLOCK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "dirt_ghost_block", + destroyTime = 0.01f, explosionResistance = 0.0f, + sound = SoundType.GRAVEL, noOcclusion = true, + loot = LootSpec.none(), + ), + ) + + @JvmField + val FUSE: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "fuse", + destroyTime = 0.3f, explosionResistance = 0.0f, + sound = SoundType.WOOL, noOcclusion = true, + ), + ) + + @JvmField + val EYE_OF_NATURE_LOG: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "eye_of_nature_log", + destroyTime = 3.0f, explosionResistance = 0.0f, + sound = SoundType.WOOD, noOcclusion = true, + tags = axeTags(), + loot = LootSpec.weighted( + listOf( + WeightedDrop(Supplier { Material.EYE_OF_NATURE.get() }, 1, 1), + WeightedDrop(Supplier { Items.OAK_LOG }, 1, 1), + ), + ), + ), + ) + + @JvmField + val LACE_BLOCK_BLACK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "lace_block_black", + destroyTime = 1.0f, explosionResistance = 0.0f, + sound = SoundType.WOOL, noOcclusion = true, + model = BlockModelSpec.cubeAll("lace_block_black_side"), + ), + ) + + @JvmField + val LACE_BLOCK_LIGHT_RED: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "lace_block_light_red", + destroyTime = 1.0f, explosionResistance = 0.0f, + sound = SoundType.WOOL, noOcclusion = true, + model = BlockModelSpec.cubeAll("lace_block_light_red_side"), + ), + ) + + @JvmField + val THIN_ROPE_BLOCK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "thin_rope_block", + destroyTime = 0.01f, explosionResistance = 0.0f, + sound = SoundType.WOOL, noOcclusion = true, + loot = LootSpec.none(), + ), + ) + + @JvmField + val ICE_ROPE_BLOCK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "ice_rope_block", + destroyTime = 0.01f, explosionResistance = 0.0f, + sound = SoundType.GLASS, noOcclusion = true, + model = BlockModelSpec.cubeAll("ice_rope_block_0"), + loot = LootSpec.none(), + ), + ) + + @JvmField + val CRATE: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "crate", + destroyTime = 2.0f, explosionResistance = 10.0f, + sound = SoundType.WOOD, + tags = axeTags(), + model = BlockModelSpec.cubeAll("crate_locked"), + ), + ) + + @JvmField + val FROZEN_CRATE: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "frozen_crate", + destroyTime = 2.0f, explosionResistance = 10.0f, + sound = SoundType.WOOD, + tags = axeTags(), + model = BlockModelSpec.cubeBottomTop("frozen_crate_locked", "frozen_crate_up", "crate_locked"), + ), + ) + + @JvmField + val CAVE_CRATE: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "cave_crate", + destroyTime = 2.2f, explosionResistance = 10.0f, + sound = SoundType.WOOD, + tags = axeTags(), + model = BlockModelSpec.cubeAll("cave_crate_locked"), + ), + ) + + @JvmField + val GOLDEN_FENCE_BLOCK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "golden_fence_block", + destroyTime = 2.0f, explosionResistance = 30.0f, + sound = SoundType.METAL, + requiresCorrectTool = true, + tags = pickaxeTags(), + ), + ) + + @JvmField + val GOLDEN_BOOKSHELF: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "golden_bookshelf", + destroyTime = 1.5f, explosionResistance = 30.0f, + sound = SoundType.WOOD, + lightLevel = 3, + tags = axeTags(), + // 前/后/侧面各不相同,使用手写六面模型 + model = BlockModelSpec.custom("golden_bookshelf"), + ), + ) + + @JvmField + val GOLDEN_BOOKSHELF_FRAME: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "golden_bookshelf_frame", + destroyTime = 1.5f, explosionResistance = 30.0f, + sound = SoundType.WOOD, + tags = axeTags(), + model = BlockModelSpec.custom("golden_bookshelf_frame"), + ), + ) + + @JvmField + val NUKE_BLOCK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "nuke_block", + destroyTime = 1.0f, explosionResistance = 10.0f, + sound = SoundType.METAL, + model = BlockModelSpec.cubeBottomTop("nuke_side", "minecraft:tnt_top", "minecraft:tnt_bottom"), + ), + ) + + @JvmField + val END_ALTAR: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "end_altar", + destroyTime = 3.0f, explosionResistance = 100.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + model = BlockModelSpec.cubeBottomTop("end_altar_side", "end_altar_up", "end_altar_down"), + ), + ) + + // ==================== 基岩版移植方块(第四波:召唤器/机器) ==================== + + @JvmField + val LIGHTNING_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "lightning_summoner", + destroyTime = 3.0f, explosionResistance = 10.0f, + sound = SoundType.METAL, + model = BlockModelSpec.cubeBottomTop("lightning_summoner", "weather_console_up", "weather_console_down"), + ), + ) + + @JvmField + val RAINING_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "raining_summoner", + destroyTime = 3.0f, explosionResistance = 10.0f, + sound = SoundType.METAL, + model = BlockModelSpec.cubeBottomTop("raining_summoner", "weather_console_up", "weather_console_down"), + ), + ) + + @JvmField + val SUNNY_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "sunny_summoner", + destroyTime = 3.0f, explosionResistance = 10.0f, + sound = SoundType.METAL, + model = BlockModelSpec.cubeBottomTop("sunny_summoner", "weather_console_up", "weather_console_down"), + ), + ) + + @JvmField + val PURPUR_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "purpur_summoner", + destroyTime = 5.0f, explosionResistance = 100.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + model = BlockModelSpec.cubeBottomTop("purpur_summoner_side", "purpur_summoner_up", "purpur_summoner_up"), + ), + ) + + @JvmField + val ENCHANTED_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "enchanted_summoner", + destroyTime = 3.0f, explosionResistance = 100.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + model = BlockModelSpec.cubeBottomTop("enchanted_summoner_side", "enchanted_summoner_up", "enchanted_summoner_up"), + loot = LootSpec.none(), + ), + ) + + @JvmField + val PLAIN_TOWER_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "plain_tower_summoner", + destroyTime = 3.0f, explosionResistance = 100.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + model = BlockModelSpec.cubeBottomTop("plain_tower_summoner_side", "plain_tower_summoner_up", "plain_tower_summoner_up"), + loot = LootSpec.none(), + ), + ) + + @JvmField + val ASH_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "ash_summoner", + destroyTime = 3.0f, explosionResistance = 100.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + loot = LootSpec.none(), + ), + ) + + @JvmField + val ABYSSAL_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "abyssal_summoner", + destroyTime = 3.0f, explosionResistance = 100.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + loot = LootSpec.none(), + ), + ) + + @JvmField + val BAT_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "bat_summoner", + destroyTime = 3.0f, explosionResistance = 100.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + loot = LootSpec.none(), + ), + ) + + @JvmField + val DEEP_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "deep_summoner", + destroyTime = 3.0f, explosionResistance = 100.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + loot = LootSpec.none(), + ), + ) + + @JvmField + val FOREST_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "forest_summoner", + destroyTime = 3.0f, explosionResistance = 100.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + loot = LootSpec.none(), + ), + ) + + @JvmField + val SOUL_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "soul_summoner", + destroyTime = 3.0f, explosionResistance = 100.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + loot = LootSpec.none(), + ), + ) + + @JvmField + val EVERLASTING_WINTER_SUMMONER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "everlasting_winter_summoner", + destroyTime = 3.0f, explosionResistance = 100.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + ), + ) + + @JvmField + val MONITOR: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "monitor", + destroyTime = 3.0f, explosionResistance = 50.0f, + sound = SoundType.METAL, + requiresCorrectTool = true, + tags = pickaxeTags(), + model = BlockModelSpec.cubeBottomTop("monitor", "lurk_log_up", "lurk_log_up"), + ), + ) + + @JvmField + val MONITOR_ACTIVATED: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "monitor_activated", + destroyTime = 3.0f, explosionResistance = 50.0f, + sound = SoundType.METAL, + lightLevel = 1, + requiresCorrectTool = true, + tags = pickaxeTags(), + model = BlockModelSpec.cubeBottomTop("monitor_activated", "lurk_log_up", "lurk_log_up"), + // 激活态掉落普通监视器 + loot = LootSpec.drop(Supplier { MONITOR.get() }), + ), + ) + + @JvmField + val ITEM_PICKER: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "item_picker", + destroyTime = 3.0f, explosionResistance = 10.0f, + sound = SoundType.METAL, + requiresCorrectTool = true, + tags = pickaxeTags(), + model = BlockModelSpec.cubeBottomTop("item_picker_side", "item_picker_up", "item_picker_down"), + ), + ) + + @JvmField + val MINING_MACHINE: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "mining_machine", + destroyTime = 3.0f, explosionResistance = 10.0f, + sound = SoundType.METAL, + requiresCorrectTool = true, + tags = pickaxeTags(), + model = BlockModelSpec.cubeBottomTop("mining_machine_side", "mining_machine_up", "mining_machine_down"), + ), + ) + + @JvmField + val MINE: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "mine", + destroyTime = 1.2f, explosionResistance = 7.0f, + sound = SoundType.METAL, + requiresCorrectTool = true, + tags = pickaxeTags(), + model = BlockModelSpec.cubeBottomTop("mine", "mine_top", "mine"), + ), + ) + + @JvmField + val MAGIC_LETTER_BOX: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "magic_letter_box", + destroyTime = 1.0f, explosionResistance = 30.0f, + sound = SoundType.WOOD, + tags = axeTags(), + // 正面投信口与侧面不同,使用手写六面模型 + model = BlockModelSpec.custom("magic_letter_box"), + ), + ) + + @JvmField + val FLOWING_BLOCK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "flowing_block", + destroyTime = 3.0f, explosionResistance = 100.0f, + sound = SoundType.STONE, + requiresCorrectTool = true, + tags = pickaxeTags(), + model = BlockModelSpec.cubeBottomTop("flowing_block_side_0", "flowing_block_up", "flowing_block_down"), + ), + ) + + // ==================== 基岩版移植方块(第五波:自定义碰撞箱) ==================== + + @JvmField + val CHRISTMAS_GIFT_BLOCK: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "christmas_gift_block", + destroyTime = 0.3f, explosionResistance = 0.0f, + sound = SoundType.WOOL, noOcclusion = true, + factory = Function { properties -> ShapedBlock(properties, CHRISTMAS_GIFT_SHAPE) }, + model = BlockModelSpec.cubeAll("christmas_gift_block"), + loot = LootSpec.weighted( + listOf( + WeightedDrop(Supplier { Fashion.CHRISTMAS_CAP.get() }, 3), + WeightedDrop(Supplier { Food.GINGERBREAD_MAN.get() }, 5), + WeightedDrop(Supplier { Weapon.GINGERBREAD_SWORD.get() }, 2), + WeightedDrop(Supplier { Weapon.CANDY_CANE.get() }, 3), + ), + ), + ), + ) + + @JvmField + val GOLDEN_CHAIN: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "golden_chain", + destroyTime = 1.7f, explosionResistance = 40.0f, + sound = SoundType.CHAIN, noOcclusion = true, + requiresCorrectTool = true, + tags = pickaxeTags(), + factory = Function { properties -> ShapedBlock(properties, GOLDEN_CHAIN_SHAPE) }, + ), + ) + + @JvmField + val LAMPSHADE: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "lampshade", + destroyTime = 1.0f, explosionResistance = 20.0f, + sound = SoundType.WOOL, noOcclusion = true, + factory = Function { properties -> ShapedBlock(properties, LAMPSHADE_SHAPE) }, + ), + ) + + @JvmField + val STONE_HEAP: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "stone_heap", + destroyTime = 0.2f, explosionResistance = 0.0f, + sound = SoundType.STONE, noOcclusion = true, + factory = Function { properties -> ShapedBlock(properties, STONE_HEAP_SHAPE) }, + model = BlockModelSpec.cubeAll("small_stone"), + loot = LootSpec.drop(Supplier { Material.SMALL_STONE.get() }, 2.0f, 5.0f), + ), + ) + + @JvmField + val STONE_ROAD: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "stone_road", + destroyTime = 0.2f, explosionResistance = 0.0f, + sound = SoundType.STONE, noOcclusion = true, + factory = Function { properties -> ShapedBlock(properties, STONE_ROAD_SHAPE) }, + model = BlockModelSpec.cubeAll("small_stone"), + loot = LootSpec.drop(Supplier { Material.SMALL_STONE.get() }, 2.0f, 5.0f), + ), + ) + + @JvmField + val SMALL_STONE_BLOCK_ENTITY: DeferredBlock = registerSimpleBedrockBlock( + SimpleBlockSpec( + name = "small_stone_block_entity", + destroyTime = 0.01f, explosionResistance = 0.0f, + sound = SoundType.STONE, noOcclusion = true, + factory = Function { properties -> ShapedBlock(properties, SMALL_STONE_SHAPE) }, + model = BlockModelSpec.cubeAll("small_stone"), + loot = LootSpec.drop(Supplier { Material.SMALL_STONE.get() }), + ), + ) + private fun registerBlock( name: String, func: Function, @@ -880,6 +1615,9 @@ object ModBlocks { if (spec.requiresCorrectTool) { properties.requiresCorrectToolForDrops() } + if (spec.noOcclusion) { + properties.noOcclusion() + } return properties } @@ -907,13 +1645,33 @@ object ModBlocks { val block = getBlockByName("block.${DecIsland.MOD_ID}.${spec.name}").value() when (spec.model.kind) { BlockModelSpec.Kind.CUBE_ALL -> { - blockModels.createTrivialCube(block) - // createTrivialCube 只生成方块模型与 blockstate,需要为 BlockItem 补一个委托物品模型 - if (block.asItem() != Items.AIR) { - delegateItemModel(blockModels, block, ModelLocationUtils.getModelLocation(block)) + val texture = spec.model.texture + if (texture != null) { + val model = ModelTemplates.CUBE_ALL.create( + block, + TextureMapping.cube(blockTexture(texture)), + blockModels.modelOutput, + ) + blockModels.blockStateOutput.accept(simpleBlock(block, model)) + delegateItemModel(blockModels, block, model) + } else { + blockModels.createTrivialCube(block) + // createTrivialCube 只生成方块模型与 blockstate,需要为 BlockItem 补一个委托物品模型 + if (block.asItem() != Items.AIR) { + delegateItemModel(blockModels, block, ModelLocationUtils.getModelLocation(block)) + } } } + BlockModelSpec.Kind.CUSTOM -> { + // 手写模型放在 assets/decisland/models/block/ 与 blockstates/ 下,这里仅委托物品模型 + delegateItemModel( + blockModels, + block, + ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "block/" + spec.model.customPath), + ) + } + BlockModelSpec.Kind.CUBE_BOTTOM_TOP -> { val model = ModelTemplates.CUBE_BOTTOM_TOP.create( block, @@ -992,7 +1750,13 @@ object ModBlocks { } } - private fun blockTexture(name: String): ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "block/$name") + private fun blockTexture(name: String): ResourceLocation = + if (':' in name) { + val (namespace, path) = name.split(':', limit = 2) + ResourceLocation.fromNamespaceAndPath(namespace, "block/$path") + } else { + ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "block/$name") + } private fun generateSimpleBlockLoot( spec: SimpleBlockSpec, @@ -1001,6 +1765,13 @@ object ModBlocks { val block = getBlockByName("block.${DecIsland.MOD_ID}.${spec.name}").value() val dropItem = spec.loot.dropItem?.get() when { + spec.loot.noDrop -> lootTables.addNoDrop(block) + spec.loot.weighted != null -> + lootTables.addWeightedDrop( + block, + spec.loot.weighted.map { Triple(it.item.get(), it.weight, it.maxCount) }, + ) + spec.loot.chance != null && dropItem != null -> lootTables.addChanceDrop(block, dropItem, spec.loot.chance) dropItem == null -> lootTables.addDropSelf(block) spec.loot.silkTouch -> lootTables.addSilkTouchRangeDrop(block, dropItem, spec.loot.minCount, spec.loot.maxCount) spec.loot.minCount == 1.0f && spec.loot.maxCount == 1.0f -> lootTables.addSingleItemDrop(block, dropItem) diff --git a/src/main/java/com/dec/decisland/block/custom/ShapedBlock.kt b/src/main/java/com/dec/decisland/block/custom/ShapedBlock.kt new file mode 100644 index 0000000..523a06a --- /dev/null +++ b/src/main/java/com/dec/decisland/block/custom/ShapedBlock.kt @@ -0,0 +1,19 @@ +package com.dec.decisland.block.custom + +import net.minecraft.core.BlockPos +import net.minecraft.world.level.BlockGetter +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.state.BlockBehaviour +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.phys.shapes.CollisionContext +import net.minecraft.world.phys.shapes.VoxelShape + +// 自定义碰撞箱/外形方块(基岩版 minecraft:collision_box 的 Java 等价物) +class ShapedBlock( + properties: BlockBehaviour.Properties, + private val shape: VoxelShape, +) : Block(properties) { + override fun getShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape = shape + + override fun getCollisionShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape = shape +} diff --git a/src/main/java/com/dec/decisland/client/bedrock/BedrockEmitterManager.kt b/src/main/java/com/dec/decisland/client/bedrock/BedrockEmitterManager.kt index 8876810..3c9a4f7 100644 --- a/src/main/java/com/dec/decisland/client/bedrock/BedrockEmitterManager.kt +++ b/src/main/java/com/dec/decisland/client/bedrock/BedrockEmitterManager.kt @@ -94,7 +94,10 @@ object BedrockEmitterManager { val velocity = computeVelocity(spawn.direction) val minecraft = Minecraft.getInstance() val engine = minecraft.particleEngine - val atlas = minecraft.modelManager.getAtlas(TextureAtlas.LOCATION_PARTICLES) + // NeoForge 21.1 的粒子图集由 ParticleEngine 私有持有并注册进 TextureManager + // (ModelManager 的 AtlasSet 不含 particles,getTextureAtlas 会 NPE) + val atlas = minecraft.textureManager.getTexture(TextureAtlas.LOCATION_PARTICLES) as? TextureAtlas + if (atlas == null) return val spriteId = spriteIds[(Math.random() * spriteIds.size).toInt().coerceIn(0, spriteIds.lastIndex)] val sprite = atlas.getSprite(spriteId) val particle = BedrockBillboardParticle( diff --git a/src/main/java/com/dec/decisland/client/bedrock/model/BedrockAnimatedEntityModel.kt b/src/main/java/com/dec/decisland/client/bedrock/model/BedrockAnimatedEntityModel.kt index fc76b25..d8fb71a 100644 --- a/src/main/java/com/dec/decisland/client/bedrock/model/BedrockAnimatedEntityModel.kt +++ b/src/main/java/com/dec/decisland/client/bedrock/model/BedrockAnimatedEntityModel.kt @@ -13,17 +13,17 @@ import net.minecraft.client.model.geom.builders.PartDefinition import net.minecraft.world.entity.Entity import kotlin.math.PI -class BedrockAnimatedEntityModel private constructor( +open class BedrockAnimatedEntityModel private constructor( private val bakedModel: BakedBedrockModel, - private val animation: BedrockAnimationClip, -) : EntityModel() { + var animation: BedrockAnimationClip, +) : EntityModel() { constructor(geometry: BedrockGeometry, animation: BedrockAnimationClip) : this( bakeModel(geometry), animation, ) override fun setupAnim( - entity: Entity, + entity: T, limbSwing: Float, limbSwingAmount: Float, ageInTicks: Float, @@ -33,6 +33,11 @@ class BedrockAnimatedEntityModel private constructor( applyAnimation(ageInTicks / 20.0f) } + fun applyClip(clip: BedrockAnimationClip, timeSeconds: Float) { + animation = clip + applyAnimation(timeSeconds) + } + override fun renderToBuffer( poseStack: PoseStack, buffer: VertexConsumer, @@ -116,6 +121,7 @@ class BedrockAnimatedEntityModel private constructor( geometry, bone, parentPivot = BedrockVec3.ZERO, + isRootBone = true, ) } @@ -142,10 +148,14 @@ class BedrockAnimatedEntityModel private constructor( geometry: BedrockGeometry, bone: BedrockBone, parentPivot: BedrockVec3, + isRootBone: Boolean = false, ) { + // 基岩几何 Y 轴向上、原点在脚底;Java 模型 Y 轴向下、脚底在 y=24: + // 根骨骼锚定 24 − pivot.y,子骨骼用 父pivot − 子pivot;X 镜像、Z 不镜像 + val boneYOffset = if (isRootBone) 24f - bone.pivot.y else parentPivot.y - bone.pivot.y val bonePose = PartPoseSnapshot( x = parentPivot.x - bone.pivot.x, - y = bone.pivot.y - parentPivot.y, + y = boneYOffset, z = bone.pivot.z - parentPivot.z, xRot = bone.rotation.x.toModelRadX(), yRot = bone.rotation.y.toModelRadY(), @@ -177,8 +187,8 @@ class BedrockAnimatedEntityModel private constructor( bone.cubes.forEachIndexed { index, cube -> val cubeName = "${bone.name}__cube_$index" val cubePose = PartPoseSnapshot( - x = cube.pivot.x - bone.pivot.x, - y = cube.pivot.y - bone.pivot.y, + x = bone.pivot.x - cube.pivot.x, + y = bone.pivot.y - cube.pivot.y, z = cube.pivot.z - bone.pivot.z, xRot = cube.rotation.x.toModelRadX(), yRot = cube.rotation.y.toModelRadY(), @@ -195,7 +205,7 @@ class BedrockAnimatedEntityModel private constructor( mirror(cube.mirror) addBox( cube.pivot.x - cube.origin.x - cube.size.x, - cube.origin.y - cube.pivot.y, + cube.pivot.y - cube.origin.y - cube.size.y, cube.origin.z - cube.pivot.z, cube.size.x, cube.size.y, diff --git a/src/main/java/com/dec/decisland/client/renderer/BedrockProjectileRenderer.kt b/src/main/java/com/dec/decisland/client/renderer/BedrockProjectileRenderer.kt index 9d283af..317494b 100644 --- a/src/main/java/com/dec/decisland/client/renderer/BedrockProjectileRenderer.kt +++ b/src/main/java/com/dec/decisland/client/renderer/BedrockProjectileRenderer.kt @@ -20,7 +20,7 @@ open class BedrockProjectileRenderer( private val textureLocation: ResourceLocation, private val scale: Float, ) : EntityRenderer(context) { - private val model = BedrockAnimatedEntityModel( + private val model = BedrockAnimatedEntityModel( BedrockEntityAssets.geometry(geometryLocation), BedrockEntityAssets.animation(animationLocation, animationName), ) @@ -41,6 +41,8 @@ open class BedrockProjectileRenderer( packedLight: Int, ) { poseStack.pushPose() + // 模型烘焙锚点为脚底(y=24),直接渲染的实体按缩放比例补偿对齐 + poseStack.translate(0.0, -1.5 * scale, 0.0) poseStack.scale(scale, scale, scale) model.applyAnimation((entity.tickCount + partialTick) / 20.0f) val swirlOffset = ((entity.tickCount + partialTick) * 0.01f) % 1.0f diff --git a/src/main/java/com/dec/decisland/client/renderer/ElfOfLeavesRenderer.kt b/src/main/java/com/dec/decisland/client/renderer/ElfOfLeavesRenderer.kt new file mode 100644 index 0000000..0f651bf --- /dev/null +++ b/src/main/java/com/dec/decisland/client/renderer/ElfOfLeavesRenderer.kt @@ -0,0 +1,20 @@ +package com.dec.decisland.client.renderer + +import com.dec.decisland.DecIsland +import net.minecraft.client.renderer.entity.EntityRendererProvider +import net.minecraft.client.renderer.entity.VexRenderer +import net.minecraft.resources.ResourceLocation +import net.minecraft.world.entity.monster.Vex + +/** + * 绿叶精灵渲染器:复用原版 VexRenderer(飞行 + 俯冲姿态),仅替换贴图。 + * VexRenderer 默认 scale 0.4,与基岩版 geometry.vex + scale 0.4 一致。 + */ +class ElfOfLeavesRenderer(context: EntityRendererProvider.Context) : VexRenderer(context) { + override fun getTextureLocation(entity: Vex): ResourceLocation = TEXTURE_LOCATION + + companion object { + private val TEXTURE_LOCATION: ResourceLocation = + ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/elf_of_leaves.png") + } +} diff --git a/src/main/java/com/dec/decisland/client/renderer/LeavesGolemModel.kt b/src/main/java/com/dec/decisland/client/renderer/LeavesGolemModel.kt new file mode 100644 index 0000000..bb68d61 --- /dev/null +++ b/src/main/java/com/dec/decisland/client/renderer/LeavesGolemModel.kt @@ -0,0 +1,81 @@ +package com.dec.decisland.client.renderer + +import com.dec.decisland.client.bedrock.model.BedrockAnimationClip +import com.dec.decisland.client.bedrock.model.BedrockAnimatedEntityModel +import com.dec.decisland.client.bedrock.model.BedrockEntityAssets +import com.dec.decisland.entity.custom.LeavesGolem +import net.minecraft.resources.ResourceLocation + +/** + * 绿叶精华 Boss 模型:基岩版几何体 + 4 个动画剪辑(move/attack/roar/spawn)。 + * + * setupAnim 按战斗阶段切换剪辑: + * - SPAWN → spawn(破土动画,从阶段开始计时) + * - ROAR → roar(咆哮动画,从阶段开始计时) + * - MELEE → 命中后 0.6 秒内播放 attack,移动时播放 move(按 limbSwing 驱动), + * 静止时保持绑定姿态(不甩胳膊) + */ +class LeavesGolemModel : BedrockAnimatedEntityModel( + BedrockEntityAssets.geometry(GEOMETRY_LOCATION), + BedrockEntityAssets.animation(ANIMATION_LOCATION, MOVE_CLIP), +) { + private val moveClip = BedrockEntityAssets.animation(ANIMATION_LOCATION, MOVE_CLIP) + private val attackClip = BedrockEntityAssets.animation(ANIMATION_LOCATION, ATTACK_CLIP) + private val roarClip = BedrockEntityAssets.animation(ANIMATION_LOCATION, ROAR_CLIP) + private val spawnClip = BedrockEntityAssets.animation(ANIMATION_LOCATION, SPAWN_CLIP) + + override fun setupAnim( + entity: LeavesGolem, + limbSwing: Float, + limbSwingAmount: Float, + ageInTicks: Float, + netHeadYaw: Float, + headPitch: Float, + ) { + when (entity.phase) { + LeavesGolem.Phase.SPAWN -> + applyClip(spawnClip, (ageInTicks - entity.stateStartTick) / 20.0f) + LeavesGolem.Phase.ROAR -> + applyClip(roarClip, (ageInTicks - entity.stateStartTick) / 20.0f) + LeavesGolem.Phase.MELEE -> { + val sinceAttack = ageInTicks - entity.attackStartTick + if (entity.attackStartTick > 0 && sinceAttack < ATTACK_WINDOW_TICKS) { + applyClip(attackClip, sinceAttack / 20.0f) + } else if (limbSwingAmount > 0.01f) { + applyClip(moveClip, limbSwing * LIMB_SWING_SCALE) + } else { + applyClip(idleClip, 0.0f) + } + } + } + } + + companion object { + private const val MOVE_CLIP = "animation.leaves_golem.move" + private const val ATTACK_CLIP = "animation.leaves_golem.attack" + private const val ROAR_CLIP = "animation.leaves_golem.roar" + private const val SPAWN_CLIP = "animation.leaves_golem.spawn" + + private const val ATTACK_WINDOW_TICKS = 12.0f // 0.6 秒 + private const val LIMB_SWING_SCALE = 0.6662f // 与原版四肢摆动频率一致 + + /** 空剪辑 = 绑定姿态(站立不动) */ + private val idleClip = BedrockAnimationClip( + name = "idle", + loop = false, + lengthSeconds = 0.0f, + boneAnimations = emptyMap(), + ) + + private val GEOMETRY_LOCATION: ResourceLocation = + ResourceLocation.fromNamespaceAndPath( + com.dec.decisland.DecIsland.MOD_ID, + "bedrock/models/entity/leaves_golem.geometry.json", + ) + private val ANIMATION_LOCATION: ResourceLocation = + ResourceLocation.fromNamespaceAndPath( + com.dec.decisland.DecIsland.MOD_ID, + "bedrock/animations/entity/leaves_golem.animation.json", + ) + } +} diff --git a/src/main/java/com/dec/decisland/client/renderer/LeavesGolemRenderer.kt b/src/main/java/com/dec/decisland/client/renderer/LeavesGolemRenderer.kt new file mode 100644 index 0000000..fd7f331 --- /dev/null +++ b/src/main/java/com/dec/decisland/client/renderer/LeavesGolemRenderer.kt @@ -0,0 +1,24 @@ +package com.dec.decisland.client.renderer + +import com.dec.decisland.DecIsland +import com.dec.decisland.entity.custom.LeavesGolem +import net.minecraft.client.renderer.entity.EntityRendererProvider +import net.minecraft.client.renderer.entity.MobRenderer +import net.minecraft.resources.ResourceLocation + +/** + * 绿叶精华 Boss 渲染器:MobRenderer + 基岩版几何体模型。 + * 动画切换逻辑在 [LeavesGolemModel.setupAnim] 中按阶段处理。 + */ +class LeavesGolemRenderer(context: EntityRendererProvider.Context) : MobRenderer( + context, + LeavesGolemModel(), + 0.9f, +) { + override fun getTextureLocation(entity: LeavesGolem): ResourceLocation = TEXTURE_LOCATION + + companion object { + private val TEXTURE_LOCATION: ResourceLocation = + ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/leaves_golem.png") + } +} diff --git a/src/main/java/com/dec/decisland/client/renderer/PumpkinBombRenderer.kt b/src/main/java/com/dec/decisland/client/renderer/PumpkinBombRenderer.kt index 0d8b62f..b839675 100644 --- a/src/main/java/com/dec/decisland/client/renderer/PumpkinBombRenderer.kt +++ b/src/main/java/com/dec/decisland/client/renderer/PumpkinBombRenderer.kt @@ -14,7 +14,7 @@ import net.minecraft.core.BlockPos import net.minecraft.resources.ResourceLocation class PumpkinBombRenderer(context: EntityRendererProvider.Context) : EntityRenderer(context) { - private val model = BedrockAnimatedEntityModel( + private val model = BedrockAnimatedEntityModel( BedrockEntityAssets.geometry(GEOMETRY_LOCATION), BedrockEntityAssets.animation(ANIMATION_LOCATION, EXPLODE_ANIMATION), ) @@ -34,6 +34,8 @@ class PumpkinBombRenderer(context: EntityRendererProvider.Context) : EntityRende packedLight: Int, ) { poseStack.pushPose() + // 模型烘焙锚点为脚底(y=24),直接渲染的实体按缩放比例补偿对齐 + poseStack.translate(0.0, -1.5 * SCALE, 0.0) poseStack.scale(SCALE, SCALE, SCALE) model.applyAnimation((entity.tickCount + partialTick) / 20.0f) val vertexConsumer = bufferSource.getBuffer(RenderType.entityCutout(TEXTURE_LOCATION)) diff --git a/src/main/java/com/dec/decisland/client/renderer/ZombieWarriorRenderer.kt b/src/main/java/com/dec/decisland/client/renderer/ZombieWarriorRenderer.kt new file mode 100644 index 0000000..4d1648a --- /dev/null +++ b/src/main/java/com/dec/decisland/client/renderer/ZombieWarriorRenderer.kt @@ -0,0 +1,17 @@ +package com.dec.decisland.client.renderer + +import com.dec.decisland.DecIsland +import net.minecraft.client.renderer.entity.EntityRendererProvider +import net.minecraft.client.renderer.entity.ZombieRenderer +import net.minecraft.world.entity.monster.Zombie +import net.minecraft.resources.ResourceLocation + +// 复用原版 ZombieRenderer(人形模型 + 行走/挥击动画),仅替换为僵尸战士贴图 +class ZombieWarriorRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE_LOCATION + + companion object { + val TEXTURE_LOCATION: ResourceLocation = + ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/zombie_warrior.png") + } +} diff --git a/src/main/java/com/dec/decisland/datagen/ModBlockLootTablesProvider.kt b/src/main/java/com/dec/decisland/datagen/ModBlockLootTablesProvider.kt index 3fefc81..47bde8f 100644 --- a/src/main/java/com/dec/decisland/datagen/ModBlockLootTablesProvider.kt +++ b/src/main/java/com/dec/decisland/datagen/ModBlockLootTablesProvider.kt @@ -21,6 +21,7 @@ import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePrope import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator import net.minecraft.world.level.storage.loot.LootPool import net.minecraft.world.level.storage.loot.providers.number.ConstantValue +import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition import net.minecraft.advancements.critereon.StatePropertiesPredicate import java.util.function.Function @@ -69,6 +70,41 @@ class ModBlockLootTablesProvider(registries: HolderLookup.Provider) : super.add(block, createSingleItemTableWithSilkTouch(block, item, UniformGenerator.between(min, max))) } + fun addNoDrop(block: Block) { + super.add(block, LootTable.lootTable()) + } + + fun addChanceDrop( + block: Block, + item: ItemLike, + chance: Float, + ) { + super.add( + block, + LootTable.lootTable().withPool( + LootPool.lootPool() + .setRolls(ConstantValue.exactly(1.0f)) + .add(LootItem.lootTableItem(item)) + .`when`(LootItemRandomChanceCondition.randomChance(chance)), + ), + ) + } + + fun addWeightedDrop( + block: Block, + entries: List>, + ) { + val pool = LootPool.lootPool().setRolls(ConstantValue.exactly(1.0f)) + entries.forEach { (item, weight, maxCount) -> + val entry = LootItem.lootTableItem(item).setWeight(weight) + if (maxCount > 1) { + entry.apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0f, maxCount.toFloat()))) + } + pool.add(entry) + } + super.add(block, LootTable.lootTable().withPool(pool)) + } + override fun add(block: Block, factory: Function) { super.add(block, factory) } diff --git a/src/main/java/com/dec/decisland/entity/ModEntities.kt b/src/main/java/com/dec/decisland/entity/ModEntities.kt index a31921a..421db46 100644 --- a/src/main/java/com/dec/decisland/entity/ModEntities.kt +++ b/src/main/java/com/dec/decisland/entity/ModEntities.kt @@ -1,8 +1,11 @@ package com.dec.decisland.entity import com.dec.decisland.DecIsland +import com.dec.decisland.entity.custom.ElfOfLeaves +import com.dec.decisland.entity.custom.LeavesGolem import com.dec.decisland.entity.custom.PumpkinBombEntity import com.dec.decisland.entity.custom.WitherCloudEntity +import com.dec.decisland.entity.custom.ZombieWarrior import com.dec.decisland.entity.projectile.AmethystEnergyBall import com.dec.decisland.entity.projectile.AmethystEnergyRay import com.dec.decisland.entity.projectile.BlizzardEnergy @@ -429,6 +432,24 @@ object ModEntities { sized(0.5f, 0.5f).clientTrackingRange(8).updateInterval(10) } + @JvmField + val ZOMBIE_WARRIOR: Supplier> = + registerEntity("zombie_warrior", { type, level -> ZombieWarrior(type, level) }, MobCategory.MONSTER) { + sized(0.6f, 1.95f).clientTrackingRange(10).updateInterval(2) + } + + @JvmField + val LEAVES_GOLEM: Supplier> = + registerEntity("leaves_golem", { type, level -> LeavesGolem(type, level) }, MobCategory.MONSTER) { + sized(1.4f, 2.9f).fireImmune().clientTrackingRange(10).updateInterval(2) + } + + @JvmField + val ELF_OF_LEAVES: Supplier> = + registerEntity("elf_of_leaves", { type, level -> ElfOfLeaves(type, level) }, MobCategory.MONSTER) { + sized(0.4f, 0.8f).clientTrackingRange(10).updateInterval(2) + } + @JvmStatic fun registry(eventBus: IEventBus) { ENTITY_TYPES.register(eventBus) diff --git a/src/main/java/com/dec/decisland/entity/custom/ElfOfLeaves.kt b/src/main/java/com/dec/decisland/entity/custom/ElfOfLeaves.kt new file mode 100644 index 0000000..9f4a54b --- /dev/null +++ b/src/main/java/com/dec/decisland/entity/custom/ElfOfLeaves.kt @@ -0,0 +1,100 @@ +package com.dec.decisland.entity.custom + +import com.dec.decisland.DecIsland +import com.dec.decisland.network.Networking +import net.minecraft.resources.ResourceLocation +import net.minecraft.server.level.ServerLevel +import net.minecraft.world.Difficulty +import net.minecraft.world.DifficultyInstance +import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.MobSpawnType +import net.minecraft.world.entity.SpawnGroupData +import net.minecraft.world.entity.ai.attributes.AttributeSupplier +import net.minecraft.world.entity.ai.attributes.Attributes +import net.minecraft.world.entity.monster.Vex +import net.minecraft.world.level.Level +import net.minecraft.world.level.ServerLevelAccessor + +/** + * 绿叶精灵(移植自基岩版 dec:elf_of_leaves)。 + * + * 绿叶精华 Boss 咆哮阶段结束时召唤的辅助单位: + * - 无重力漂浮,俯冲攻击(复用 Vex 的 swoop_attack AI) + * - 仅攻击玩家,跟随范围 64 格 + * - 存在 20 秒后自爆消失(无伤害,仅粒子效果) + * - 难度伤害:简单 2 / 普通 4 / 困难 6(基岩版固定 4) + */ +class ElfOfLeaves(entityType: EntityType, level: Level) : Vex(entityType, level) { + + override fun tick() { + super.tick() + if (level().isClientSide) return + + // 拖尾粒子(对应基岩版 client 实体的 leaves_essence 发射器) + if (tickCount % TRAIL_PARTICLE_INTERVAL == 0) { + Networking.sendBedrockEmitterToTracking( + this, + LEAVES_ESSENCE_PARTICLE, + position().add(0.0, 0.4, 0.0), + 2, + ) + } + + // 20 秒后自爆消失(对应基岩版 minecraft:explode power=0 + 事件移除) + if (tickCount >= SELF_DESTRUCT_TICKS) { + val serverLevel = level() as? ServerLevel ?: return + Networking.sendBedrockEmitterToNearby( + serverLevel, + LEAVES_ESSENCE_PARTICLE, + position().add(0.0, 0.4, 0.0), + 32.0, + 6, + ) + discard() + } + } + + override fun doHurtTarget(target: Entity): Boolean { + // 攻击前按当前世界难度动态刷新攻击伤害 + getAttribute(Attributes.ATTACK_DAMAGE)?.baseValue = when (level().difficulty) { + Difficulty.HARD -> HARD_DAMAGE + Difficulty.NORMAL -> NORMAL_DAMAGE + else -> EASY_DAMAGE + } + return super.doHurtTarget(target) + } + + override fun finalizeSpawn( + level: ServerLevelAccessor, + difficulty: DifficultyInstance, + spawnType: MobSpawnType, + spawnData: SpawnGroupData?, + ): SpawnGroupData? { + val data = super.finalizeSpawn(level, difficulty, spawnType, spawnData) + health = maxHealth + return data + } + + override fun removeWhenFarAway(distanceToClosestPlayer: Double): Boolean = false + + companion object { + private const val SELF_DESTRUCT_TICKS = 400 // 20 秒 + private const val TRAIL_PARTICLE_INTERVAL = 4 + + private const val EASY_DAMAGE = 2.0 + private const val NORMAL_DAMAGE = 4.0 + private const val HARD_DAMAGE = 6.0 + + @JvmField + val LEAVES_ESSENCE_PARTICLE: ResourceLocation = + ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "leaves_essence_particle") + + @JvmStatic + fun createElfAttributes(): AttributeSupplier.Builder = Vex.createAttributes() + .add(Attributes.MAX_HEALTH, 5.0) + .add(Attributes.MOVEMENT_SPEED, 0.7) + .add(Attributes.ATTACK_DAMAGE, NORMAL_DAMAGE) + .add(Attributes.FOLLOW_RANGE, 64.0) + } +} diff --git a/src/main/java/com/dec/decisland/entity/custom/LeavesGolem.kt b/src/main/java/com/dec/decisland/entity/custom/LeavesGolem.kt new file mode 100644 index 0000000..d686703 --- /dev/null +++ b/src/main/java/com/dec/decisland/entity/custom/LeavesGolem.kt @@ -0,0 +1,298 @@ +package com.dec.decisland.entity.custom + +import com.dec.decisland.DecIsland +import com.dec.decisland.entity.ModEntities +import com.dec.decisland.network.Networking +import net.minecraft.core.BlockPos +import net.minecraft.network.chat.Component +import net.minecraft.network.syncher.EntityDataAccessor +import net.minecraft.network.syncher.EntityDataSerializers +import net.minecraft.network.syncher.SynchedEntityData +import net.minecraft.resources.ResourceLocation +import net.minecraft.server.level.ServerBossEvent +import net.minecraft.server.level.ServerLevel +import net.minecraft.server.level.ServerPlayer +import net.minecraft.sounds.SoundEvent +import net.minecraft.sounds.SoundEvents +import net.minecraft.util.Mth +import net.minecraft.world.BossEvent +import net.minecraft.world.Difficulty +import net.minecraft.world.DifficultyInstance +import net.minecraft.world.damagesource.DamageSource +import net.minecraft.world.damagesource.DamageTypes +import net.minecraft.world.effect.MobEffectInstance +import net.minecraft.world.effect.MobEffects +import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.LivingEntity +import net.minecraft.world.entity.MobSpawnType +import net.minecraft.world.entity.SpawnGroupData +import net.minecraft.world.entity.ai.attributes.AttributeSupplier +import net.minecraft.world.entity.ai.attributes.Attributes +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal +import net.minecraft.world.entity.ai.goal.MoveTowardsTargetGoal +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal +import net.minecraft.world.entity.animal.IronGolem +import net.minecraft.world.entity.monster.Monster +import net.minecraft.world.entity.npc.AbstractVillager +import net.minecraft.world.entity.player.Player +import net.minecraft.world.level.Level +import net.minecraft.world.level.ServerLevelAccessor +import kotlin.math.min + +/** + * 绿叶精华 Boss(移植自基岩版 dec:leaves_golem)。 + * + * 战斗循环(对应基岩版 component_groups 事件链): + * 1. spawn 阶段 5 秒:无敌 + 极度缓慢(播放 spawn 破土动画) + * 2. melee 阶段 10 秒:近战追击玩家/村民/铁傀儡 + * 3. roar 阶段 1.2 秒:0.5 秒时咆哮击退周围 4 格内非怪物生物并召唤 1 只绿叶精灵 + * 然后回到 melee 阶段循环 + * + * - 难度伤害:简单 5 / 普通 7 / 困难 9(基岩版 attack range 5~9) + * - 咆哮击退伤害:简单 4 / 普通 6 / 困难 8(基岩版固定 6) + * - 难度血量:简单 150 / 普通 200 / 困难 300 + * - 免疫火焰与摔落伤害,完全抗击退,Boss 血条,玩家击杀经验 100 + */ +class LeavesGolem(entityType: EntityType, level: Level) : IronGolem(entityType, level) { + + enum class Phase { SPAWN, MELEE, ROAR } + + private val bossEvent = ServerBossEvent( + Component.translatable("entity.decisland.leaves_golem"), + BossEvent.BossBarColor.GREEN, + BossEvent.BossBarOverlay.PROGRESS, + ).apply { + setDarkenScreen(false) + setPlayBossMusic(false) + } + + var phase: Phase + get() = Phase.entries[entityData.get(DATA_PHASE).coerceIn(0, Phase.entries.lastIndex)] + private set(value) { + entityData.set(DATA_PHASE, value.ordinal) + entityData.set(DATA_STATE_TICK, tickCount) + } + + /** 当前阶段开始的 tick(双端同步,用于客户端动画计时) */ + val stateStartTick: Int get() = entityData.get(DATA_STATE_TICK) + + /** 最近一次近战命中 tick(用于客户端攻击动画) */ + val attackStartTick: Int get() = entityData.get(DATA_ATTACK_TICK) + + override fun defineSynchedData(builder: SynchedEntityData.Builder) { + super.defineSynchedData(builder) + builder.define(DATA_PHASE, Phase.SPAWN.ordinal) + builder.define(DATA_STATE_TICK, 0) + builder.define(DATA_ATTACK_TICK, -1000) + } + + override fun registerGoals() { + // 完全重写目标:不沿用铁傀儡的「攻击怪物」逻辑(精灵是己方召唤物) + goalSelector.addGoal(1, GolemMeleeGoal(this, 1.0, true)) + goalSelector.addGoal(2, MoveTowardsTargetGoal(this, 0.9, 32.0f)) + goalSelector.addGoal(6, WaterAvoidingRandomStrollGoal(this, 1.0)) + goalSelector.addGoal(7, LookAtPlayerGoal(this, Player::class.java, 6.0f)) + goalSelector.addGoal(8, RandomLookAroundGoal(this)) + targetSelector.addGoal(1, HurtByTargetGoal(this)) + targetSelector.addGoal( + 2, + NearestAttackableTargetGoal( + this, LivingEntity::class.java, 16, true, false, + ) { entity: LivingEntity -> + entity is Player || entity is AbstractVillager || + (entity is IronGolem && entity !is LeavesGolem) + }, + ) + } + + /** 近战仅允许在 MELEE 阶段出手(spawn/roar 阶段站桩) */ + private class GolemMeleeGoal(mob: LeavesGolem, speedModifier: Double, followingTargetEvenIfNotSeen: Boolean) : + MeleeAttackGoal(mob, speedModifier, followingTargetEvenIfNotSeen) { + private val golem: LeavesGolem = mob + override fun canUse(): Boolean = golem.phase == Phase.MELEE && super.canUse() + override fun canContinueToUse(): Boolean = golem.phase == Phase.MELEE && super.canContinueToUse() + } + + override fun tick() { + super.tick() + if (level().isClientSide) return + + // 基岩版 experience_reward 条件式:仅玩家击杀时掉落经验 + xpReward = if (lastHurtByPlayerTime > 0) 100 else 0 + + bossEvent.progress = Mth.clamp(health / maxHealth, 0.0f, 1.0f) + + val elapsed = tickCount - entityData.get(DATA_STATE_TICK) + when (phase) { + Phase.SPAWN -> if (elapsed >= SPAWN_TICKS) phase = Phase.MELEE + Phase.MELEE -> { + // 有目标时每 10 秒进入咆哮阶段 + if (elapsed >= MELEE_TICKS && target != null) { + phase = Phase.ROAR + navigation.stop() + playSound(SoundEvents.RAVAGER_ROAR, 1.0f, 1.0f) + } + } + Phase.ROAR -> { + navigation.stop() + if (elapsed == ROAR_HIT_TICKS) performRoarAttack() + if (elapsed >= ROAR_TICKS) { + summonElf() + phase = Phase.MELEE + } + } + } + } + + /** 咆哮:4 格内所有非怪物生物受到伤害并击退(对应基岩版 knockback_roar) */ + private fun performRoarAttack() { + val level = level() as? ServerLevel ?: return + val damage = when (level.difficulty) { + Difficulty.HARD -> ROAR_DAMAGE_HARD + Difficulty.NORMAL -> ROAR_DAMAGE_NORMAL + else -> ROAR_DAMAGE_EASY + } + level.getEntities(this, boundingBox.inflate(ROAR_RANGE)) { it is LivingEntity && it !is Monster } + .forEach { entity -> + val living = entity as LivingEntity + living.hurt(damageSources().mobAttack(this), damage) + val dx = living.x - x + val dz = living.z - z + val dist = kotlin.math.sqrt(dx * dx + dz * dz).coerceAtLeast(0.01) + living.push( + dx / dist * ROAR_KNOCKBACK, + ROAR_KNOCKBACK_UP, + dz / dist * ROAR_KNOCKBACK, + ) + living.hurtMarked = true + } + Networking.sendBedrockEmitterToNearby( + level, + LEAVES_ESSENCE_PARTICLE, + position().add(0.0, 1.5, 0.0), + 64.0, + 10, + ) + } + + /** 召唤 1 只绿叶精灵(对应基岩版 minecraft:spawn_entity dec:elf_of_leaves) */ + private fun summonElf() { + val level = level() as? ServerLevel ?: return + val elf = ModEntities.ELF_OF_LEAVES.get().create(level) ?: return + val offsetX = (random.nextDouble() - 0.5) * 4.0 + val offsetZ = (random.nextDouble() - 0.5) * 4.0 + elf.moveTo(x + offsetX, y + 1.0, z + offsetZ, random.nextFloat() * 360.0f, 0.0f) + elf.finalizeSpawn(level, level.getCurrentDifficultyAt(BlockPos.containing(elf.position())), MobSpawnType.MOB_SUMMONED, null) + level.addFreshEntity(elf) + Networking.sendBedrockEmitterToNearby(level, LEAVES_ESSENCE_PARTICLE, elf.position(), 64.0, 6) + } + + override fun doHurtTarget(target: Entity): Boolean { + // 攻击前按当前世界难度动态刷新攻击伤害 + getAttribute(Attributes.ATTACK_DAMAGE)?.baseValue = when (level().difficulty) { + Difficulty.HARD -> HARD_DAMAGE + Difficulty.NORMAL -> NORMAL_DAMAGE + else -> EASY_DAMAGE + } + val result = super.doHurtTarget(target) + if (result) entityData.set(DATA_ATTACK_TICK, tickCount) + return result + } + + override fun hurt(source: DamageSource, amount: Float): Boolean { + // spawn 阶段无敌(对应基岩版 damage_sensor deals_damage=false) + if (phase == Phase.SPAWN && !source.`is`(DamageTypes.GENERIC_KILL) && !source.`is`(DamageTypes.FELL_OUT_OF_WORLD)) { + return false + } + return super.hurt(source, amount) + } + + override fun finalizeSpawn( + level: ServerLevelAccessor, + difficulty: DifficultyInstance, + spawnType: MobSpawnType, + spawnData: SpawnGroupData?, + ): SpawnGroupData? { + val data = super.finalizeSpawn(level, difficulty, spawnType, spawnData) + + // 难度血量差异 + getAttribute(Attributes.MAX_HEALTH)?.baseValue = when (level.difficulty) { + Difficulty.HARD -> HARD_HEALTH + Difficulty.NORMAL -> NORMAL_HEALTH + else -> EASY_HEALTH + } + health = maxHealth + + // spawn 阶段:5 秒极度缓慢(播放破土动画期间站桩) + addEffect(MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, SPAWN_TICKS, 50, false, false)) + phase = Phase.SPAWN + return data + } + + override fun removeWhenFarAway(distanceToClosestPlayer: Double): Boolean = false + + // ---- Boss 血条 ---- + override fun startSeenByPlayer(player: ServerPlayer) { + super.startSeenByPlayer(player) + bossEvent.addPlayer(player) + } + + override fun stopSeenByPlayer(player: ServerPlayer) { + super.stopSeenByPlayer(player) + bossEvent.removePlayer(player) + } + + override fun remove(reason: RemovalReason) { + super.remove(reason) + bossEvent.removeAllPlayers() + } + + // ---- 音效:沿用铁傀儡 ---- + override fun getHurtSound(source: DamageSource): SoundEvent = SoundEvents.IRON_GOLEM_HURT + override fun getDeathSound(): SoundEvent = SoundEvents.IRON_GOLEM_DEATH + + companion object { + private val DATA_PHASE: EntityDataAccessor = + SynchedEntityData.defineId(LeavesGolem::class.java, EntityDataSerializers.INT) + private val DATA_STATE_TICK: EntityDataAccessor = + SynchedEntityData.defineId(LeavesGolem::class.java, EntityDataSerializers.INT) + private val DATA_ATTACK_TICK: EntityDataAccessor = + SynchedEntityData.defineId(LeavesGolem::class.java, EntityDataSerializers.INT) + + private const val SPAWN_TICKS = 100 // 5 秒 + private const val MELEE_TICKS = 200 // 10 秒 + private const val ROAR_TICKS = 24 // 1.2 秒 + private const val ROAR_HIT_TICKS = 10 // 0.5 秒 + private const val ROAR_RANGE = 4.0 + private const val ROAR_KNOCKBACK = 3.0 + private const val ROAR_KNOCKBACK_UP = 0.6 + + private const val EASY_DAMAGE = 5.0 + private const val NORMAL_DAMAGE = 7.0 + private const val HARD_DAMAGE = 9.0 + private const val ROAR_DAMAGE_EASY = 4.0f + private const val ROAR_DAMAGE_NORMAL = 6.0f + private const val ROAR_DAMAGE_HARD = 8.0f + + private const val EASY_HEALTH = 150.0 + private const val NORMAL_HEALTH = 200.0 + private const val HARD_HEALTH = 300.0 + + @JvmField + val LEAVES_ESSENCE_PARTICLE: ResourceLocation = + ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "leaves_essence_particle") + + @JvmStatic + fun createGolemAttributes(): AttributeSupplier.Builder = IronGolem.createAttributes() + .add(Attributes.MAX_HEALTH, NORMAL_HEALTH) + .add(Attributes.MOVEMENT_SPEED, 0.30) + .add(Attributes.ATTACK_DAMAGE, NORMAL_DAMAGE) + .add(Attributes.KNOCKBACK_RESISTANCE, 1.0) + .add(Attributes.FOLLOW_RANGE, 64.0) + } +} diff --git a/src/main/java/com/dec/decisland/entity/custom/ZombieWarrior.kt b/src/main/java/com/dec/decisland/entity/custom/ZombieWarrior.kt new file mode 100644 index 0000000..5a7611e --- /dev/null +++ b/src/main/java/com/dec/decisland/entity/custom/ZombieWarrior.kt @@ -0,0 +1,127 @@ +package com.dec.decisland.entity.custom + +import net.minecraft.core.Holder +import net.minecraft.util.RandomSource +import net.minecraft.world.Difficulty +import net.minecraft.world.DifficultyInstance +import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.EquipmentSlot +import net.minecraft.world.entity.MobSpawnType +import net.minecraft.world.entity.SpawnGroupData +import net.minecraft.world.entity.ai.attributes.AttributeSupplier +import net.minecraft.world.entity.ai.attributes.Attributes +import net.minecraft.world.entity.ai.goal.LeapAtTargetGoal +import net.minecraft.world.entity.monster.Zombie +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.Items +import net.minecraft.world.item.enchantment.Enchantment +import net.minecraft.world.level.Level +import net.minecraft.world.level.ServerLevelAccessor + +/** + * 僵尸战士(移植自基岩版 dec:zombie_warrior)。 + * + * 与原版僵尸的差异: + * - 难度感知攻击伤害:简单 3 / 普通 4 / 困难 6(基岩版固定 3,这里按难度梯度增强) + * - 随机最大生命值 18~30(基岩版 range_min/max) + * - 生成时随机获得「跳跃扑击」或「冲刺扑击」AI + * - 手持斧头(石/木/铁/金/钻,权重递减),10% 附魔 + * - 手持武器掉率 2%,盔甲掉率 0.05% + */ +class ZombieWarrior(entityType: EntityType, level: Level) : Zombie(entityType, level) { + + override fun doHurtTarget(target: Entity): Boolean { + // 攻击前按当前世界难度动态刷新攻击伤害 + getAttribute(Attributes.ATTACK_DAMAGE)?.baseValue = currentDifficultyDamage() + return super.doHurtTarget(target) + } + + private fun currentDifficultyDamage(): Double = when (level().difficulty) { + Difficulty.HARD -> HARD_DAMAGE + Difficulty.NORMAL -> NORMAL_DAMAGE + else -> EASY_DAMAGE + } + + override fun finalizeSpawn( + level: ServerLevelAccessor, + difficulty: DifficultyInstance, + spawnType: MobSpawnType, + spawnData: SpawnGroupData?, + ): SpawnGroupData? { + val data = super.finalizeSpawn(level, difficulty, spawnType, spawnData) + val random = level.random + + // 随机最大生命值(18~30),基岩版 range_min/range_max + getAttribute(Attributes.MAX_HEALTH)?.baseValue = random.nextInt(MIN_HEALTH, MAX_HEALTH + 1).toDouble() + health = maxHealth + + // 随机「冲刺扑击」或「跳跃扑击」AI(基岩版 randomize 组件组) + val leapHeight = if (random.nextBoolean()) SPRINT_LEAP_HEIGHT else JUMP_LEAP_HEIGHT + goalSelector.addGoal(LEAP_PRIORITY, LeapAtTargetGoal(this, leapHeight)) + + // 10% 概率给手持武器附魔(5~20 级,基岩版 enchant_with_level) + val weapon = mainHandItem + if (!weapon.isEmpty && random.nextFloat() < WEAPON_ENCHANT_CHANCE) { + enchantWeapon(random, weapon) + } + return data + } + + private fun enchantWeapon(random: RandomSource, weapon: ItemStack) { + val registryAccess = level().registryAccess() + val enchantments = registryAccess.lookupOrThrow(net.minecraft.core.registries.Registries.ENCHANTMENT) + val candidates = enchantments.listElements().toList() + if (candidates.isEmpty()) return + val enchantment: Holder = candidates[random.nextInt(candidates.size)] + val enchantmentLevel = random.nextInt(1, 4) + weapon.enchant(enchantment, enchantmentLevel) + } + + override fun populateDefaultEquipmentSlots(random: RandomSource, difficulty: DifficultyInstance) { + super.populateDefaultEquipmentSlots(random, difficulty) + setItemSlot(EquipmentSlot.MAINHAND, pickWeapon(random)) + } + + override fun getEquipmentDropChance(slot: EquipmentSlot): Float = + if (slot == EquipmentSlot.MAINHAND) WEAPON_DROP_CHANCE else ARMOR_DROP_CHANCE + + override fun removeWhenFarAway(distanceToClosestPlayer: Double): Boolean = true + + companion object { + private const val MIN_HEALTH = 18 + private const val MAX_HEALTH = 30 + private const val EASY_DAMAGE = 3.0 + private const val NORMAL_DAMAGE = 4.0 + private const val HARD_DAMAGE = 6.0 + private const val LEAP_PRIORITY = 4 + private const val SPRINT_LEAP_HEIGHT = 0.5f + private const val JUMP_LEAP_HEIGHT = 0.0f + private const val WEAPON_ENCHANT_CHANCE = 0.10f + private const val WEAPON_DROP_CHANCE = 0.02f + private const val ARMOR_DROP_CHANCE = 0.0005f + + // 基岩版 zombie_warrior_gear.json 的权重表 + private val WEAPONS: List> = listOf( + Items.STONE_AXE to 15, + Items.WOODEN_AXE to 10, + Items.IRON_AXE to 8, + Items.GOLDEN_AXE to 2, + Items.DIAMOND_AXE to 2, + ) + + private fun pickWeapon(random: RandomSource): ItemStack { + val total = WEAPONS.sumOf { it.second } + var roll = random.nextInt(total) + for ((item, weight) in WEAPONS) { + roll -= weight + if (roll < 0) return ItemStack(item) + } + return ItemStack(Items.STONE_AXE) + } + + @JvmStatic + fun createWarriorAttributes(): AttributeSupplier.Builder = Zombie.createAttributes() + } +} diff --git a/src/main/java/com/dec/decisland/events/ModClientEvents.kt b/src/main/java/com/dec/decisland/events/ModClientEvents.kt index e061527..6a6fc25 100644 --- a/src/main/java/com/dec/decisland/events/ModClientEvents.kt +++ b/src/main/java/com/dec/decisland/events/ModClientEvents.kt @@ -6,11 +6,14 @@ import com.dec.decisland.client.RecoilClient import com.dec.decisland.client.bedrock.BedrockEmitterManager import com.dec.decisland.client.renderer.BedrockProjectileRenderer import com.dec.decisland.client.renderer.DartRenderer -import com.dec.decisland.client.renderer.EnergyBallBedrockRenderer +import com.dec.decisland.client.renderer.ElfOfLeavesRenderer import com.dec.decisland.client.renderer.EmptyRenderer +import com.dec.decisland.client.renderer.EnergyBallBedrockRenderer import com.dec.decisland.client.renderer.FashionArmorClientItemExtensions +import com.dec.decisland.client.renderer.LeavesGolemRenderer import com.dec.decisland.client.renderer.MaskClientItemExtensions import com.dec.decisland.client.renderer.PumpkinBombRenderer +import com.dec.decisland.client.renderer.ZombieWarriorRenderer import com.dec.decisland.client.gui.ClientManaOverlay import com.dec.decisland.entity.ModEntities import com.dec.decisland.entity.projectile.AmethystEnergyBall @@ -133,6 +136,9 @@ object ModClientEvents { EntityRenderers.register(ModEntities.GROWING_ENERGY_RAY.get(), ::EmptyRenderer) EntityRenderers.register(ModEntities.PUMPKIN_BOMB.get(), ::PumpkinBombRenderer) EntityRenderers.register(ModEntities.WITHER_CLOUD.get(), ::EmptyRenderer) + EntityRenderers.register(ModEntities.ZOMBIE_WARRIOR.get(), ::ZombieWarriorRenderer) + EntityRenderers.register(ModEntities.LEAVES_GOLEM.get(), ::LeavesGolemRenderer) + EntityRenderers.register(ModEntities.ELF_OF_LEAVES.get(), ::ElfOfLeavesRenderer) EntityRenderers.register(ModEntities.NIGHTMARE_SPORE.get(), ::EmptyRenderer) EntityRenderers.register(ModEntities.NIGHTMARE_RAY.get(), ::EmptyRenderer) EntityRenderers.register(ModEntities.WAVE_ENERGY.get(), ::EmptyRenderer) diff --git a/src/main/java/com/dec/decisland/events/ModEventBusEvents.kt b/src/main/java/com/dec/decisland/events/ModEventBusEvents.kt index 0f1f076..4d4ddec 100644 --- a/src/main/java/com/dec/decisland/events/ModEventBusEvents.kt +++ b/src/main/java/com/dec/decisland/events/ModEventBusEvents.kt @@ -4,13 +4,21 @@ import com.dec.decisland.DecIsland import com.dec.decisland.client.model.ClothesModel import com.dec.decisland.client.model.EmptyModel import com.dec.decisland.client.model.FashionArmorModel +import com.dec.decisland.entity.ModEntities +import com.dec.decisland.entity.custom.ElfOfLeaves +import com.dec.decisland.entity.custom.LeavesGolem +import com.dec.decisland.entity.custom.ZombieWarrior import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.SpawnPlacementTypes import net.minecraft.world.entity.ai.attributes.Attributes +import net.minecraft.world.entity.monster.Monster +import net.minecraft.world.level.levelgen.Heightmap import net.neoforged.bus.api.SubscribeEvent import net.neoforged.fml.common.EventBusSubscriber import net.neoforged.neoforge.client.event.EntityRenderersEvent import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent import net.neoforged.neoforge.event.entity.EntityAttributeModificationEvent +import net.neoforged.neoforge.event.entity.RegisterSpawnPlacementsEvent @EventBusSubscriber(modid = DecIsland.MOD_ID) object ModEventBusEvents { @@ -32,6 +40,21 @@ object ModEventBusEvents { @SubscribeEvent @JvmStatic fun registerAttributes(event: EntityAttributeCreationEvent) { + event.put(ModEntities.ZOMBIE_WARRIOR.get(), ZombieWarrior.createWarriorAttributes().build()) + event.put(ModEntities.LEAVES_GOLEM.get(), LeavesGolem.createGolemAttributes().build()) + event.put(ModEntities.ELF_OF_LEAVES.get(), ElfOfLeaves.createElfAttributes().build()) + } + + @SubscribeEvent + @JvmStatic + fun registerSpawnPlacements(event: RegisterSpawnPlacementsEvent) { + event.register( + ModEntities.ZOMBIE_WARRIOR.get(), + SpawnPlacementTypes.ON_GROUND, + Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, + Monster::checkMonsterSpawnRules, + RegisterSpawnPlacementsEvent.Operation.REPLACE, + ) } @SubscribeEvent diff --git a/src/main/java/com/dec/decisland/item/ModCreativeModeTabs.kt b/src/main/java/com/dec/decisland/item/ModCreativeModeTabs.kt index c61a351..c51c4f0 100644 --- a/src/main/java/com/dec/decisland/item/ModCreativeModeTabs.kt +++ b/src/main/java/com/dec/decisland/item/ModCreativeModeTabs.kt @@ -81,10 +81,18 @@ object ModCreativeModeTabs { val DECISLAND_MASKS_TAB: Supplier = registerTab( CreativeTabConfig.Builder( "decisland_masks_tab", - mapOf("en_us" to "DecIsland Masks", "zh_cn" to "DecIsland \u9762\u5177"), + mapOf("en_us" to "DecIsland Masks", "zh_cn" to "DecIsland 面具"), ).iconItem { Mask.FRANK_MASK.get() }.build(), ) + @JvmField + val DECISLAND_BLOCKS_TAB: Supplier = registerTab( + CreativeTabConfig.Builder( + "decisland_blocks_tab", + mapOf("en_us" to "DecIsland Blocks", "zh_cn" to "DecIsland 方块"), + ).iconItem { ModBlocks.RED_LANTERN.get().asItem() }.build(), + ) + private fun addItemsToTab(tabConfig: CreativeTabConfig, output: CreativeModeTab.Output) { val currentTab = CREATIVE_MOD_TABS.getEntries() .firstOrNull { it.id.path == tabConfig.name } diff --git a/src/main/java/com/dec/decisland/particles/ModParticles.kt b/src/main/java/com/dec/decisland/particles/ModParticles.kt index f71128f..402fda6 100644 --- a/src/main/java/com/dec/decisland/particles/ModParticles.kt +++ b/src/main/java/com/dec/decisland/particles/ModParticles.kt @@ -368,6 +368,7 @@ object ModParticles { path == "textures/particle/sga_*" && namespace == "minecraft" -> ('a'..'z').map { char -> ResourceLocation.fromNamespaceAndPath(namespace, "sga_$char") } path.startsWith("textures/particle/") -> + // 项目图集配置 atlases/particles.json 以无前缀收录 textures/particle 目录 listOf(ResourceLocation.fromNamespaceAndPath(namespace, path.removePrefix("textures/particle/"))) path.startsWith("textures/wb_par/") -> listOf(ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "wb_par/${path.removePrefix("textures/wb_par/")}")) diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/leaves_golem.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/leaves_golem.animation.json new file mode 100644 index 0000000..5a61a5a --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/leaves_golem.animation.json @@ -0,0 +1,1214 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation.leaves_golem.move": { + "loop": true, + "animation_length": 1.84, + "bones": { + "global": { + "rotation": { + "0.0": [0, 0, 0], + "0.36": [0, 0, -2.5], + "0.88": [0, 0, 2.5], + "1.2": [0, 0, 0] + } + }, + "arm0": { + "rotation": { + "0.0": [-35, 0, 0], + "0.4": [-37.5, 0, 0], + "0.76": [-2.5, 0, 0], + "1.12": [20, 0, 0], + "1.48": [32.5, 0, 0], + "1.84": [-35, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + } + }, + "arm1": { + "rotation": { + "0.0": [14.97354, 0.85443, -2.34963], + "0.4": [14.97354, 0.85443, -2.34963], + "0.76": [-12.52646, 0.85443, -2.34963], + "1.12": [-22.52646, 0.85443, -2.34963], + "1.48": [-27.52646, 0.85443, -2.34963], + "1.84": [14.97354, 0.85443, -2.34963] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + } + }, + "leg0": { + "rotation": { + "0.0": [52.5, 0, 0], + "0.4": [55, 0, 0], + "0.76": [17.5, 0, 0], + "1.12": [-32.5, 0, 0], + "1.48": [-32.5, 0, 0], + "1.84": [52.5, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.76": [1, 1, 1], + "1.12": [1, 1, 1], + "1.48": [1, 1, 1], + "1.84": [1, 1, 1] + } + }, + "leg1": { + "rotation": { + "0.0": [-22.5, 0, 0], + "0.4": [-22.5, 0, 0], + "0.76": [17.5, 0, 0], + "1.12": [55, 0, 0], + "1.48": [55, 0, 0], + "1.84": [-22.5, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + } + }, + "body": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "1.84": [0, 0, 0] + }, + "position": { + "0.0": [0, 1, 0], + "0.4": [0, -2, 0], + "0.76": [0, 1.4, 0], + "1.12": [0, 0.4, 0], + "1.48": [0, -3.6, 0], + "1.68": [0, 0.37, 0], + "1.84": [0, 1, 0] + } + }, + "head": { + "rotation": { + "0.0": [5, 0, 0], + "0.4": [7.82902, 7.49282, 2.52154], + "0.76": [6.47186, 1.56187, 8.81469], + "1.12": [2.51893, -0.43523, -4.98107], + "1.48": [5.05919, -0.54094, -12.48848], + "1.84": [5, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + } + }, + "zhe": { + "rotation": { + "0.0": [0, -7.5, 0], + "0.4": [0, -10, 0], + "0.76": [0, -2.5, 0], + "1.12": [0, 2.5, 0], + "1.48": [0, 0, 0], + "1.84": [0, -7.5, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.76": [1, 1, 1], + "1.12": [1, 1, 1], + "1.48": [1, 1, 1], + "1.84": [1, 1, 1] + } + }, + "zhe2": { + "rotation": { + "0.0": [-5, -2.5, 0], + "0.4": [-4.9429, -7.45695, -0.65738], + "0.76": [-5.00718, -0.02136, 0.32621], + "1.12": [-4.97913, 4.93584, 0.97983], + "1.48": [-4.97913, 4.93584, 0.97983], + "1.84": [-5, -2.5, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + } + }, + "zhe3": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 2.5], + "0.76": [2.5, 0, -15], + "1.12": [5, 0, -12.5], + "1.48": [0, 0, 20], + "1.84": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + } + }, + "zhe4": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.84": [1.05, 1.05, 1], + "1.84": [1, 1, 1] + } + }, + "arm2": { + "rotation": { + "0.0": [-22.5, 0, 0], + "0.4": [-25, 0, 0], + "0.76": [-12.5, 0, 0], + "1.12": [15, 0, 0], + "1.48": [12.5, 0, 0], + "1.84": [-22.5, 0, 0] + } + }, + "arm3": { + "rotation": { + "0.0": [10, 0, 0], + "0.4": [10, 0, 0], + "0.76": [-15, 0, 0], + "1.12": [-22.5, 0, 0], + "1.48": [-40, 0, 0], + "1.84": [10, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + } + }, + "leg2": { + "rotation": { + "0.0": [47.5, 0, 0], + "0.4": [-15, 0, 0], + "0.76": [-20, 0, 0], + "1.12": [-22.5, 0, 0], + "1.48": [20, 0, 0], + "1.84": [47.5, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + } + }, + "leg3": { + "rotation": { + "0.0": [-17.5, 0, 0], + "0.4": [7.5, 0, 0], + "0.76": [30, 0, 0], + "1.12": [65, 0, 0], + "1.48": [-15, 0, 0], + "1.84": [-17.5, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.76": [0, 0, 0], + "1.12": [0, 0, 0], + "1.48": [0, 0, 0], + "1.84": [0, 0, 0] + } + } + } + }, + "animation.leaves_golem.attack": { + "loop": true, + "animation_length": 0.6, + "bones": { + "arm0": { + "rotation": { + "0.0": [0, 0, 0], + "0.1275": [35, 0, 0], + "0.3275": [-127.5, 0, 0], + "0.425": [-127.5, 0, 0], + "0.6": [0, 0, 0] + } + }, + "arm1": { + "rotation": { + "0.0": [0, 0, 0], + "0.1275": [32.5, 0, 0], + "0.3275": [-110, 0, 0], + "0.425": [-110, 0, 0], + "0.6": [0, 0, 0] + } + }, + "body": { + "rotation": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.1275": [0, -2, 0], + "0.3275": [0, 1, 0], + "0.425": [0, 1, 0], + "0.6": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.0875": [1, 1, 1], + "0.175": [1, 1, 1], + "0.2875": [1, 1, 1], + "0.1275": [1, 1, 1], + "0.3275": [1, 1, 1], + "0.425": [1, 1, 1], + "0.6": [1, 1, 1] + } + }, + "head": { + "rotation": { + "0.0": [0, 0, 0], + "0.1275": [17.5, 0, 0], + "0.3275": [-7.5, 0, 0], + "0.425": [-7.5, 0, 0], + "0.6": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.0875": [1, 1, 1], + "0.175": [1, 1, 1], + "0.2875": [1, 1, 1], + "0.1275": [1, 1, 1], + "0.3275": [1, 1, 1], + "0.425": [1, 1, 1], + "0.6": [1, 1, 1] + } + }, + "leg0": { + "rotation": { + "0.0": [0, 0, 0], + "0.1275": [-10, 0, 0], + "0.3275": [12.5, 0, 0], + "0.425": [12.5, 0, 0], + "0.6": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.0875": [1, 1, 1], + "0.175": [1, 1, 1], + "0.2875": [1, 1, 1], + "0.1275": [1, 1, 1], + "0.3275": [1, 1, 1], + "0.425": [1, 1, 1], + "0.6": [1, 1, 1] + } + }, + "leg1": { + "rotation": { + "0.0": [0, 0, 0], + "0.1275": [5, 0, 0], + "0.3275": [25, 0, 0], + "0.425": [25, 0, 0], + "0.6": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.0875": [1, 1, 1], + "0.175": [1, 1, 1], + "0.2875": [1, 1, 1], + "0.1275": [1, 1, 1], + "0.3275": [1, 1, 1], + "0.425": [1, 1, 1], + "0.6": [1, 1, 1] + } + }, + "zhe": { + "rotation": { + "0.0": [0, 0, 0], + "0.1275": [-2.5, 0, 0], + "0.3275": [-7.5, 0, 0], + "0.425": [-7.5, 0, 0], + "0.6": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.0875": [1, 1, 1], + "0.175": [1, 1, 1], + "0.2875": [1, 1, 1], + "0.1275": [1, 1, 1], + "0.3275": [1, 1, 1], + "0.425": [1, 1, 1], + "0.6": [1, 1, 1] + } + }, + "zhe2": { + "rotation": { + "0.0": [0, 0, 0], + "0.1275": [7.5, 0, 0], + "0.3275": [-22.5, 0, 0], + "0.425": [-22.5, 0, 0], + "0.6": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.0875": [1, 1, 1], + "0.175": [1, 1, 1], + "0.2875": [1, 1, 1], + "0.1275": [1, 1, 1], + "0.3275": [1, 1, 1], + "0.425": [1, 1, 1], + "0.6": [1, 1, 1] + } + }, + "zhe3": { + "rotation": { + "0.0": [0, 0, 0], + "0.1275": [-10, 0, 0], + "0.3275": [-2.5, 0, 0], + "0.425": [-2.5, 0, 0], + "0.6": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.0875": [1, 1, 1], + "0.175": [1, 1, 1], + "0.2875": [1, 1, 1], + "0.1275": [1, 1, 1], + "0.3275": [1, 1, 1], + "0.425": [1, 1, 1], + "0.6": [1, 1, 1] + } + }, + "zhe4": { + "rotation": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.0875": [1, 1, 1], + "0.175": [1, 1, 1], + "0.2875": [1, 1, 1], + "0.1275": [1, 1, 1], + "0.3275": [1, 1, 1], + "0.425": [1, 1, 1], + "0.6": [1, 1, 1] + } + }, + "arm2": { + "rotation": { + "0.0": [0, 0, 0], + "0.1275": [15, 0, 0], + "0.3275": [-35, 0, 0], + "0.425": [-35, 0, 0], + "0.6": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.0875": [1, 1, 1], + "0.175": [1, 1, 1], + "0.2875": [1, 1, 1], + "0.1275": [1, 1, 1], + "0.3275": [1, 1.4, 1], + "0.425": [1, 1.4, 1], + "0.6": [1, 1, 1] + } + }, + "arm3": { + "rotation": { + "0.0": [0, 0, 0], + "0.1275": [10, 0, 0], + "0.3275": [-22.5, 0, 0], + "0.425": [-22.5, 0, 0], + "0.6": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.1275": [1, 1, 1], + "0.3275": [1, 1.4, 1], + "0.425": [1, 1.4, 1], + "0.6": [1, 1, 1] + } + }, + "leg2": { + "rotation": { + "0.0": [0, 0, 0], + "0.1275": [27.5, 0, 0], + "0.3275": [-17.5, 0, 0], + "0.425": [-17.5, 0, 0], + "0.6": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.0875": [1, 1, 1], + "0.175": [1, 1, 1], + "0.2875": [1, 1, 1], + "0.1275": [1, 1, 1], + "0.3275": [1, 1, 1], + "0.425": [1, 1, 1], + "0.6": [1, 1, 1] + } + }, + "leg3": { + "rotation": { + "0.0": [0, 0, 0], + "0.1275": [12.5, 0, 0], + "0.3275": [-20, 0, 0], + "0.425": [-20, 0, 0], + "0.6": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0875": [0, 0, 0], + "0.175": [0, 0, 0], + "0.2875": [0, 0, 0], + "0.1275": [0, 0, 0], + "0.3275": [0, 0, 0], + "0.425": [0, 0, 0], + "0.6": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.0875": [1, 1, 1], + "0.175": [1, 1, 1], + "0.2875": [1, 1, 1], + "0.1275": [1, 1, 1], + "0.3275": [1, 1, 1], + "0.425": [1, 1, 1], + "0.6": [1, 1, 1] + } + } + } + }, + "animation.leaves_golem.roar": { + "loop": true, + "animation_length": 1.36, + "bones": { + "head": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [32.5, 0, 0], + "0.56": [35, 0, 0], + "0.72": [-38.33, 0, 0], + "0.88": [-38.576, 5.21822, -5.39451], + "1.04": [-38.66912, -5.55865, 5.75957], + "1.16": [-38.96082, 7.62816, -7.94696], + "1.28": [-38.33, 0, 0], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "arm0": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [15, 0, 0], + "0.56": [22.5, 0, 0], + "0.72": [-148.00846, 13.03284, -15.30417], + "1.0": [-143.00846, 13.03284, -15.30417], + "1.28": [-148.00846, 13.03284, -15.30417], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "arm1": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [7.5, 0, 0], + "0.56": [15, 0, 0], + "0.72": [-130.90488, -12.2421, 8.73129], + "1.0": [-125.90488, -12.2421, 8.73129], + "1.28": [-130.90488, -12.2421, 8.73129], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "body": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, -2, 0], + "0.56": [0, -2, 0], + "0.72": [0, 0.33, 0], + "1.28": [0, 0.33, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "leg0": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [-16.11629, 2.81878, 3.8854], + "0.56": [-16.11629, 2.81878, 3.8854], + "0.72": [6.43491, 1.98033, 0.76149], + "1.28": [6.43491, 1.98033, 0.76149], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "leg1": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [-15, 0, 0], + "0.56": [-15, 0, 0], + "0.72": [25, 0, 0], + "1.28": [25, 0, 0], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "zhe": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [7.5, 0, 0], + "0.56": [7.5, 0, 0], + "0.72": [-6.25, 0, 0], + "1.28": [-6.25, 0, 0], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "zhe2": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [12.5, 0, 0], + "0.56": [17.5, 0, 0], + "0.72": [-15.42, 0, 0], + "1.0": [-17.92, 0, 0], + "1.28": [-15.42, 0, 0], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "zhe3": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [-10, 0, 0], + "0.56": [-40, 0, 0], + "0.68": [10.28, 0, 0], + "0.72": [-73.33, 0, 0], + "0.88": [-58.33, 0, 0], + "1.04": [-74.33, 0, 0], + "1.16": [-66.33, 0, 0], + "1.28": [-73.33, 0, 0], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "zhe4": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "0.72": [5, 0, 0], + "0.88": [0.53, 0, 0], + "1.04": [2.07, 0, 0], + "1.16": [2.6, 0, 0], + "1.28": [-1.88, 0, 0], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "arm2": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [-57.5, 0, 0], + "0.56": [-67.5, 0, 0], + "0.72": [3.75, 0, 0], + "1.0": [1.25, 0, 0], + "1.28": [3.75, 0, 0], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "arm3": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [-57.5, 0, 0], + "0.56": [-67.5, 0, 0], + "0.72": [6.25, 0, 0], + "1.0": [1.25, 0, 0], + "1.28": [6.25, 0, 0], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "leg2": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [15, 0, 0], + "0.56": [15, 0, 0], + "0.72": [-10, 0, 0], + "1.28": [-10, 0, 0], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + }, + "leg3": { + "rotation": { + "0.0": [0, 0, 0], + "0.4": [15, 0, 0], + "0.56": [15, 0, 0], + "0.72": [-15, 0, 0], + "1.28": [-15, 0, 0], + "1.36": [0, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.4": [0, 0, 0], + "0.56": [0, 0, 0], + "1.36": [0, 0, 0] + }, + "scale": { + "0.0": [1, 1, 1], + "0.4": [1, 1, 1], + "0.56": [1, 1, 1], + "1.36": [1, 1, 1] + } + } + } + }, + "animation.leaves_golem.spawn": { + "animation_length": 5, + "bones": { + "head": { + "rotation": { + "4.48": [0, 0, 0], + "4.68": [0, 0, -12.5], + "4.88": [0, 0, 12.5], + "5.0": [0, 0, 0] + }, + "position": { + "0.0": { + "post": [0, -50, 0], + "lerp_mode": "catmullrom" + }, + "2.8": { + "post": [0, -50, 0], + "lerp_mode": "catmullrom" + }, + "3.96": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "2.8": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "3.96": { + "post": [1, 1, 1], + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": [1, 1, 1], + "lerp_mode": "catmullrom" + } + } + }, + "arm0": { + "position": { + "0.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "2.2": { + "post": [0, -50, 0], + "lerp_mode": "catmullrom" + }, + "3.04": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "2.2": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "3.04": { + "post": [1, 1, 1], + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": [1, 1, 1], + "lerp_mode": "catmullrom" + } + } + }, + "arm1": { + "position": { + "0.0": { + "post": [0, -50, 0], + "lerp_mode": "catmullrom" + }, + "1.68": { + "post": [0, -50, 0], + "lerp_mode": "catmullrom" + }, + "2.44": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "1.68": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "2.44": { + "post": [1, 1, 1], + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": [1, 1, 1], + "lerp_mode": "catmullrom" + } + } + }, + "leg0": { + "position": { + "0.0": { + "post": [0, -50, 0], + "lerp_mode": "catmullrom" + }, + "0.44": { + "post": [0, -50, 0], + "lerp_mode": "catmullrom" + }, + "1.24": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "0.44": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "1.24": { + "post": [1, 1, 1], + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": [1, 1, 1], + "lerp_mode": "catmullrom" + } + } + }, + "leg1": { + "position": { + "0.0": { + "post": [0, -50, 0], + "lerp_mode": "catmullrom" + }, + "0.76": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "0.76": { + "post": [1, 1, 1], + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": [1, 1, 1], + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": [0, -50, 0], + "lerp_mode": "catmullrom" + }, + "0.96": { + "post": [0, -50, 0], + "lerp_mode": "catmullrom" + }, + "1.8": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "0.96": { + "post": [0, 0, 0], + "lerp_mode": "catmullrom" + }, + "1.8": { + "post": [1, 1, 1], + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": [1, 1, 1], + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/leaves_golem.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/leaves_golem.geometry.json new file mode 100644 index 0000000..faa575d --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/leaves_golem.geometry.json @@ -0,0 +1,162 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.leaves_golem", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 4, + "visible_bounds_offset": [0, 2, 0] + }, + "bones": [ + { + "name": "body", + "pivot": [0, 29, 0] + }, + { + "name": "leg0", + "parent": "body", + "pivot": [-4, 14, 0], + "rotation": [-22.48072, 0.95645, 2.30991], + "cubes": [ + {"origin": [-7.5, 6, -3], "size": [6, 8, 5], "uv": [37, 0]} + ] + }, + { + "name": "leg3", + "parent": "leg0", + "pivot": [-4, 6, -3], + "rotation": [22.48072, 0.95645, -2.30991], + "cubes": [ + {"origin": [-7.5, -2, -3], "size": [6, 8, 5], "uv": [37, 8]} + ] + }, + { + "name": "leg1", + "parent": "body", + "pivot": [5, 14, 0], + "rotation": [-22.48072, -0.95645, -2.30991], + "mirror": true, + "cubes": [ + {"origin": [1.5, 6, -3], "size": [6, 8, 5], "uv": [60, 0]} + ] + }, + { + "name": "leg2", + "parent": "leg1", + "pivot": [5, 6, -3], + "rotation": [22.48072, -0.95645, 2.30991], + "mirror": true, + "cubes": [ + {"origin": [1.5, -2, -3], "size": [6, 8, 5], "uv": [60, 8]} + ] + }, + { + "name": "zhe", + "parent": "body", + "pivot": [0, 14, 0], + "rotation": [-5, 0, 0], + "cubes": [ + {"origin": [-4.5, 14, -3], "size": [9, 5, 6], "inflate": 0.5, "uv": [0, 70]}, + {"origin": [2, 14, 0], "size": [4, 4, 4], "uv": [0, 113]}, + {"origin": [1, 16, 1], "size": [4, 4, 4], "uv": [0, 113]} + ] + }, + { + "name": "zhe2", + "parent": "zhe", + "pivot": [0, 19, 0], + "rotation": [12.5, 0, 0], + "cubes": [ + {"origin": [-9, 19, -6], "size": [18, 12, 11], "uv": [0, 40]}, + {"origin": [-8, 22, 3], "size": [6, 7, 4], "uv": [0, 113]}, + {"origin": [0, 23, 3], "size": [4, 5, 4], "uv": [0, 113]}, + {"origin": [3, 20, 4], "size": [4, 7, 4], "uv": [0, 113]} + ] + }, + { + "name": "arm1", + "parent": "zhe2", + "pivot": [9, 29, 0], + "rotation": [4.99527, 0.21782, -2.4905], + "cubes": [ + {"origin": [9, 17.5, -3], "size": [4, 14, 6], "uv": [60, 58]}, + {"origin": [10, 22, -1], "size": [4, 7, 5], "uv": [0, 113]} + ] + }, + { + "name": "arm3", + "parent": "arm1", + "pivot": [13, 17, 3], + "rotation": [-12.5, 0, 0], + "cubes": [ + {"origin": [9, 1.5, -3], "size": [4, 16, 6], "uv": [60, 72]}, + {"origin": [8, 8, -5], "size": [4, 7, 5], "uv": [0, 113]}, + {"origin": [11, 13, -4], "size": [4, 7, 5], "uv": [0, 113]}, + {"origin": [10, 2, 0], "size": [4, 7, 5], "uv": [0, 113]} + ] + }, + { + "name": "arm0", + "parent": "zhe2", + "pivot": [-9, 29, 0], + "rotation": [7.5, 0, 2.5], + "cubes": [ + {"origin": [-13, 17.5, -3], "size": [4, 14, 6], "uv": [60, 21]}, + {"origin": [-15, 18, -6], "size": [4, 7, 5], "uv": [0, 113]}, + {"origin": [-14, 21, 0], "size": [4, 7, 5], "uv": [0, 113]}, + {"origin": [-16, 28, -5], "size": [6, 5, 7], "uv": [0, 113]} + ] + }, + { + "name": "arm2", + "parent": "arm0", + "pivot": [-13, 17, 3], + "rotation": [-15, 0, 0], + "cubes": [ + {"origin": [-13, 1.5, -3], "size": [4, 16, 6], "uv": [60, 35]}, + {"origin": [-15, 12, 0], "size": [4, 7, 5], "uv": [0, 113]}, + {"origin": [-15, 3, -5], "size": [4, 7, 5], "uv": [0, 113]}, + {"origin": [-11, 5, -1], "size": [4, 7, 5], "uv": [0, 113]} + ] + }, + { + "name": "head", + "parent": "zhe2", + "pivot": [0, 31, -2], + "rotation": [-7.5, 0, 0], + "cubes": [ + {"origin": [-4, 31, -7.5], "size": [8, 10, 8], "uv": [0, 0]} + ], + "locators": { + "lead": [0, 29, -2] + } + }, + { + "name": "zhe3", + "parent": "head", + "pivot": [0, 34, -7], + "cubes": [ + {"origin": [-1, 30, -9.5], "size": [2, 4, 2], "uv": [24, 0]} + ] + }, + { + "name": "zhe4", + "parent": "head", + "pivot": [0, 31, -2], + "cubes": [ + {"origin": [-5, 30, 0], "size": [4, 7, 5], "uv": [0, 113]}, + {"origin": [-6, 38, -4], "size": [15, 7, 4], "uv": [0, 116]}, + {"origin": [-9, 35, -10], "size": [4, 7, 7], "uv": [0, 113]}, + {"origin": [-3, 35, 0], "size": [12, 7, 4], "uv": [0, 114]}, + {"origin": [3, 36, -8], "size": [4, 7, 7], "uv": [0, 113]}, + {"origin": [3, 32, -1], "size": [4, 7, 7], "uv": [0, 113]}, + {"origin": [-7, 36, -3], "size": [4, 7, 7], "uv": [0, 113]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/blockstates/golden_bookshelf.json b/src/main/resources/assets/decisland/blockstates/golden_bookshelf.json new file mode 100644 index 0000000..ad108b8 --- /dev/null +++ b/src/main/resources/assets/decisland/blockstates/golden_bookshelf.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/golden_bookshelf" + } + } +} diff --git a/src/main/resources/assets/decisland/blockstates/golden_bookshelf_frame.json b/src/main/resources/assets/decisland/blockstates/golden_bookshelf_frame.json new file mode 100644 index 0000000..0a4a6b9 --- /dev/null +++ b/src/main/resources/assets/decisland/blockstates/golden_bookshelf_frame.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/golden_bookshelf_frame" + } + } +} diff --git a/src/main/resources/assets/decisland/blockstates/magic_letter_box.json b/src/main/resources/assets/decisland/blockstates/magic_letter_box.json new file mode 100644 index 0000000..b80eea1 --- /dev/null +++ b/src/main/resources/assets/decisland/blockstates/magic_letter_box.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/magic_letter_box" + } + } +} diff --git a/src/main/resources/assets/decisland/blockstates/red_lantern.json b/src/main/resources/assets/decisland/blockstates/red_lantern.json new file mode 100644 index 0000000..0713106 --- /dev/null +++ b/src/main/resources/assets/decisland/blockstates/red_lantern.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "decisland:block/red_lantern" + } + } +} diff --git a/src/main/resources/assets/decisland/models/block/golden_bookshelf.json b/src/main/resources/assets/decisland/models/block/golden_bookshelf.json new file mode 100644 index 0000000..62d6495 --- /dev/null +++ b/src/main/resources/assets/decisland/models/block/golden_bookshelf.json @@ -0,0 +1,24 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "decisland:block/golden_bookshelf_front", + "front": "decisland:block/golden_bookshelf_front", + "back": "decisland:block/golden_bookshelf_back", + "side": "decisland:block/golden_bookshelf_side", + "top": "decisland:block/golden_bookshelf_up_down" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up"}, + "north": {"uv": [0, 0, 16, 16], "texture": "#front", "cullface": "north"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#back", "cullface": "south"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "west"} + } + } + ] +} diff --git a/src/main/resources/assets/decisland/models/block/golden_bookshelf_frame.json b/src/main/resources/assets/decisland/models/block/golden_bookshelf_frame.json new file mode 100644 index 0000000..fb618b4 --- /dev/null +++ b/src/main/resources/assets/decisland/models/block/golden_bookshelf_frame.json @@ -0,0 +1,24 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "decisland:block/golden_bookshelf_frame_front", + "front": "decisland:block/golden_bookshelf_frame_front", + "back": "decisland:block/golden_bookshelf_back", + "side": "decisland:block/golden_bookshelf_frame_side", + "top": "decisland:block/golden_bookshelf_up_down" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up"}, + "north": {"uv": [0, 0, 16, 16], "texture": "#front", "cullface": "north"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#back", "cullface": "south"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "west"} + } + } + ] +} diff --git a/src/main/resources/assets/decisland/models/block/magic_letter_box.json b/src/main/resources/assets/decisland/models/block/magic_letter_box.json new file mode 100644 index 0000000..93aaef7 --- /dev/null +++ b/src/main/resources/assets/decisland/models/block/magic_letter_box.json @@ -0,0 +1,23 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "decisland:block/magic_letter_box_front", + "front": "decisland:block/magic_letter_box_front", + "side": "decisland:block/magic_letter_box_side", + "top": "decisland:block/magic_letter_box_top" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up"}, + "north": {"uv": [0, 0, 16, 16], "texture": "#front", "cullface": "north"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "south"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "west"} + } + } + ] +} diff --git a/src/main/resources/assets/decisland/models/block/red_lantern.json b/src/main/resources/assets/decisland/models/block/red_lantern.json new file mode 100644 index 0000000..236037d --- /dev/null +++ b/src/main/resources/assets/decisland/models/block/red_lantern.json @@ -0,0 +1,75 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "decisland:block/red_lantern", + "texture": "decisland:block/red_lantern" + }, + "elements": [ + { + "name": "bottom_plate", + "from": [5, 0, 5], + "to": [11, 1, 11], + "faces": { + "north": {"uv": [5, 15, 11, 16], "texture": "#texture"}, + "east": {"uv": [5, 15, 11, 16], "texture": "#texture"}, + "south": {"uv": [5, 15, 11, 16], "texture": "#texture"}, + "west": {"uv": [5, 15, 11, 16], "texture": "#texture"}, + "up": {"uv": [5, 15, 11, 16], "texture": "#texture"}, + "down": {"uv": [5, 15, 11, 16], "texture": "#texture"} + } + }, + { + "name": "body", + "from": [4, 1, 4], + "to": [12, 9, 12], + "faces": { + "north": {"uv": [4, 7, 12, 15], "texture": "#texture"}, + "east": {"uv": [4, 7, 12, 15], "texture": "#texture"}, + "south": {"uv": [4, 7, 12, 15], "texture": "#texture"}, + "west": {"uv": [4, 7, 12, 15], "texture": "#texture"}, + "up": {"uv": [4, 7, 12, 15], "texture": "#texture"}, + "down": {"uv": [4, 7, 12, 15], "texture": "#texture"} + } + }, + { + "name": "top_plate", + "from": [5, 9, 5], + "to": [11, 10, 11], + "faces": { + "north": {"uv": [5, 6, 11, 7], "texture": "#texture"}, + "east": {"uv": [5, 6, 11, 7], "texture": "#texture"}, + "south": {"uv": [5, 6, 11, 7], "texture": "#texture"}, + "west": {"uv": [5, 6, 11, 7], "texture": "#texture"}, + "up": {"uv": [5, 6, 11, 7], "texture": "#texture"}, + "down": {"uv": [5, 6, 11, 7], "texture": "#texture"} + } + }, + { + "name": "chain_a", + "from": [7.5, 10, 7.5], + "to": [8.5, 16, 8.5], + "faces": { + "north": {"uv": [7, 0, 9, 6], "texture": "#texture"}, + "east": {"uv": [7, 0, 9, 6], "texture": "#texture"}, + "south": {"uv": [7, 0, 9, 6], "texture": "#texture"}, + "west": {"uv": [7, 0, 9, 6], "texture": "#texture"}, + "up": {"uv": [7, 0, 9, 6], "texture": "#texture"}, + "down": {"uv": [7, 0, 9, 6], "texture": "#texture"} + } + }, + { + "name": "chain_b", + "from": [7.5, 10, 7.5], + "to": [8.5, 16, 8.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [7, 0, 9, 6], "texture": "#texture"}, + "east": {"uv": [7, 0, 9, 6], "texture": "#texture"}, + "south": {"uv": [7, 0, 9, 6], "texture": "#texture"}, + "west": {"uv": [7, 0, 9, 6], "texture": "#texture"}, + "up": {"uv": [7, 0, 9, 6], "texture": "#texture"}, + "down": {"uv": [7, 0, 9, 6], "texture": "#texture"} + } + } + ] +} diff --git a/src/main/resources/assets/decisland/particles/bedrock_manifest.txt b/src/main/resources/assets/decisland/particles/bedrock_manifest.txt index 8e1fefd..1480ab2 100644 --- a/src/main/resources/assets/decisland/particles/bedrock_manifest.txt +++ b/src/main/resources/assets/decisland/particles/bedrock_manifest.txt @@ -83,3 +83,5 @@ ender_spurt.particle.json ender_bomb.particle.json bubble_spurt_middle.particle.json wither_cloud_wake.particle.json + +leaves_essence.particle.json diff --git a/src/main/resources/assets/decisland/particles/leaves_essence.particle.json b/src/main/resources/assets/decisland/particles/leaves_essence.particle.json new file mode 100644 index 0000000..04ebc09 --- /dev/null +++ b/src/main/resources/assets/decisland/particles/leaves_essence.particle.json @@ -0,0 +1,46 @@ +{ + "format_version": "1.10.0", + "particle_effect": { + "description": { + "identifier": "dec:leaves_essence_particle", + "basic_render_parameters": { + "material": "particles_alpha", + "texture": "textures/particle/leaves_essence" + } + }, + "components": { + "minecraft:emitter_rate_instant": { + "num_particles": 1 + }, + "minecraft:emitter_lifetime_expression": { + "activation_expression": 1 + }, + "minecraft:emitter_shape_sphere": { + "radius": 0.01, + "direction": "outwards" + }, + "minecraft:particle_lifetime_expression": { + "max_lifetime": 3 + }, + "minecraft:particle_initial_speed": 0, + "minecraft:particle_motion_dynamic": {}, + "minecraft:particle_appearance_billboard": { + "size": ["0.14 - variable.particle_age*0.04", "0.14 - variable.particle_age*0.04"], + "facing_camera_mode": "lookat_xyz", + "uv": { + "texture_width": 8, + "texture_height": 16, + "flipbook": { + "base_UV": [0, 0], + "size_UV": [8, 8], + "step_UV": [0, 8], + "frames_per_second": 3, + "max_frame": 2, + "loop": true + } + } + }, + "minecraft:particle_appearance_lighting": {} + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/textures/block/abyssal_summoner.png b/src/main/resources/assets/decisland/textures/block/abyssal_summoner.png new file mode 100644 index 0000000000000000000000000000000000000000..d40dcb3227a8c3a71abcfe8bf652c63643f5baa6 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}B0G|-o?8);JC(O@ZFf)GEq>$dW=xKf4P1TY83j*64QYOp|?Vab-SlO~< ze(Zz=)zjvsO`1P--olt^y=4&>UI9(uEbxddW?8eR=R!HJ$Ojv*Ssv3;IG z%!VAyy2=tCj86Zzm!2_4sBi7Gu5aZTYq>)gv^AeocH~**XV9|O@LAO1kQ4+ z86oZ}0kfqJyy8ut!njYmiue4Qp54|PlO>F`1de^$IQw*&*Jmw$ z{rly*I~zK0o!A(C#BigZr$hKWPv?dGd#5s6eab%_#`H(#17oZy%fgoplUD#8$KdJe K=d#Wzp$Pzbd3SFB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/abyssal_summoner_activated.png b/src/main/resources/assets/decisland/textures/block/abyssal_summoner_activated.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7d0806a43e6e01965079672fca94837e946d1b GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}Z0G|-ong9QHK7Bg#-J`}AH;b>GtbTN5`Tzf^M|aNs|3B~Sf%X6YXCB?L z_5c4}pI$Bc|Nrd&{~P}QfA{}?&7;dM7e$`|4dE>Ch%9Dc;5!V$jK}j=qyPmcd%8G= zXavXhd5ax3;9&kc@kv9n`pduk(I?iWT1veP{I_n}C94}p7c#dgH;7LN{?J#ZbfD#M zl+`nz4OV3qvlg6WF7Vm4<<`p6mj&+e-aD$~{Wy~?SD#r>^+V&At>N=IYo^?MCwx)q z9`EEi^Y>~Pn18xF_veMSBIRTA?)e74e#Mw@MD&Vg-LYuPBSQ848LTVp!(WRZ4rWae TmQXtZbRL7JtDnm{r-UW|UyqOP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/abyssal_summoner_locked.png b/src/main/resources/assets/decisland/textures/block/abyssal_summoner_locked.png new file mode 100644 index 0000000000000000000000000000000000000000..0dd4d06810cfb909b138e0805a94124a259c379d GIT binary patch literal 412 zcmV;N0b~A&P)Px#1ZP1_K>z@;j|==^1poj5Z%|BBMTFJqng9QN%HMXm+j`8}bJodw;?#lY*{A>i zWyQIj|Nm~yz;wjZjn(OC#kjBk|AfxniRI;)?&5O6&v?n$y7KCY)#*p<|3l2%&Hw-I z|NlaYkufik7&A3AZE~Xj|9s-pk#MBL83 zZIDzm$8|}x-R@f?l?>EK>v-J8a}C8njjl}NF-B*m|BNIZ+w1wpPHY*AuKiFE-nEHk z?3k}1Bq<$#gMzI0T{u!@X}Hh!+(FpIRHIFK@P7U(@BaW}5({D@b8%My0000Px#1am@3R0s$N2z&@+hyVZrUP(kjR5*=wld(%1aTLctCJxu!ak)jk&=$RvCU*PPJE`g$p6e<~7Ds75cf)FX0B8rW@Q(7c3OO!Jn)YA^( zF522RJ^1nczVG*a->+{uR=VSnvK)+f0y_0Z6)m7M91Sx0>IJdn z5V7PCW3i_Uj{2!Lsw8G7&;mMxqke41!sjyIjvNwE;{eF2@L-Cp3W&cZiKuZx;UEA{ z`XvOv)KzeOV*#KAbc#j}tD>POBCS1{)}D-2(J(s|(%A&nyo02h9;W}kH%T{{W|5+i zWBT(VWh3Xkt*kD2;999ky;0@)z!-hYvC`deG>EJUD2hnCeT6Izu%6!_H8%r*RnaIK zIZ|^o)JjbfvlE2ELAKU*yB6GPx35qXk@frr3z>OprKYDWH8(?HbDMNF!P$;PHScs& z5d4xiT~S2J1%s8UX1Saa>018C`mUTkW8h*6pb8$*vDnV z?h*hLHn%-*t~9rvy*~Fy?B5+CYMjmdCwwR4*pAg(qVHrJvr}Oz6{g+3!m4OUx{0EQ z)W7&C|9I!60kE~U3(zBQ52jXXdL;M33z>P&c6yQDjvR7&aM9br>A?lHQj>Hx!P__Q zY3<1mz`Gy!iD&#?DzYkcEi6Sp-2H4Fv5=W36b@3&JD8mc^+wf`d{jI3uF<`j%ZAPA z!9~|XI-B6z*L_b(Vs-+6P&mj@?HGW|hK=uJoT8EAWirY2jm7zQr>g*X^y|9)|Gu{E aSo{H$PBK|~DRNr?00007J>_j#!qTWh9d^JY3t%+OeJc2{3V4$Hi)oNYme7ENCLL1e+D seJiI%E-Kml>h($ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/ash_summoner.png b/src/main/resources/assets/decisland/textures/block/ash_summoner.png new file mode 100644 index 0000000000000000000000000000000000000000..3cce5ff0703a0b935280261eb7944688a0b541e4 GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFQpVR$(x#Sj=Im_oe8XI^IxM>TBmeK`QtCmq SXS;zeV(@hJb6Mw<&;$TGxn#!x literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/ash_summoner_activated.png b/src/main/resources/assets/decisland/textures/block/ash_summoner_activated.png new file mode 100644 index 0000000000000000000000000000000000000000..6ecf4b53643d7102018c90cac64693722e011094 GIT binary patch literal 665 zcmV;K0%rY*P)Px#1ZP1_K>z@;j|==^1poj6I8aPfMK(4zU0q!#A{^|wL;K`s77q|VKR+N79Q^!$ z>#RF5EH+6=N&ESI?!QSqIY;1#C)8LG^V47Y^mx=%3(Qdp>Z3N%vRiejv?54Caz3-D3~th9k>B3CcYO*Ju~}>~jD7eCM1m+G-ojMF-762+&Om z)MFCSP7l;w66vft&QA@_LkP({2hUFp&Pol@Pz=#i58QSe?7BzRYa-TW9MfA7+;<++ zU=q+v3gC@4)?^srjW6DQBGzdY--IL6UlZk!D%y4$)L<0pmM_+26zs7-!Yc&OO%L(Q zS?;|@=bbe1(O1w)3-#P!`tx_~!Aip}1Dr3$XaE2J32;bRa{vGizyJUazyWI3i3tDz z0P0CZK~yMH4UN@W!%z?gH$UvzvImwxaRLN_6{iGu*HT;82gkV>(gQQ;yGYZWpDJUJ_hj<@AcLZ<6FzaYs(=zMO?0L?55Tf$X_bQFeF{ z(W*#9uWt#-JIlwX;Hz3Q0=#@P|Kxt*f!g0c59k}~;K2@q00000NkvXXu0mjfHH{x1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/ash_summoner_locked.png b/src/main/resources/assets/decisland/textures/block/ash_summoner_locked.png new file mode 100644 index 0000000000000000000000000000000000000000..9145f418094435b1de0161932fc8b5debf6bc86e GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}B0G|-oKvB_FCnrx&&ssZ^NlvEr_V%%{u?u31%*@Pmb#()zrBgLDu3x&e zZQC{@L&F3?CJQq&CrfjdEuS_3P2eo>h%9Dc;5z`qj9J$@Ie~)nJY5_^G=gRO1E;Yl zaxg0^HdxudzVm-m_uJ{AcFqiK7kv*-ncADyGb_!pe+DzR%#F}znW56%AF}_5o>kRY z?Q8LP-}yspUaa_AIcst#hihidjPpu+c|Z%i9y7{6Ku70STCM)_yXBT-Q3-L(|jlMdQmfr@3Mt65DJ?X`E%1MUxZ2Q7SX zg(W(cjcp%reAt3+Y9b~}qk$N=2n~c_WLcuik`1>xgF0k$CNqwI=Dae>{2*R(x%YYV z`~9BZ^SsY{gDuSsndt@T003mV8gY;E%}%_UQ~*$g{=E8F3GyYUPddQ0N?}5v02|2# zDA2_aZIp*1$lk7Rs2TuJm(X6Hy>j+v%sCFM%6TuV#hLQ*{!gR7C7O_H`x|p&~ zY{L+^36VOi&=XTWcMIs?1PV0it15zMr5UWY=+UZ5#8_1h8W7Y1BW4&iRv;*bRAHuS zaO;7TYy#PedGPwJTuNkxLXyN|FdPnt^lT8_!L^noQt_BWpa_W*yd2k=>|#rZlQ=QN@t{Gm1ePA8S&|Ej zWt#-I8*{OuM6f~1gi{%*Ei_ZKI$6`7_X6_k#G}J>(=8b+0HZqF0JsNSTMKj`qr{ET1$ocKVmZrmrSuKz z@#ymG+p(Dk;|;p_Yxv%K{o|L1Cg(KSbz0<1bY4ZPiBr!Z8S#`k-Ki6Z6D%Op52>`# z+<~)ck5Z03lY7{{3RX53T%(SETdYHX^85bT zBgoM#QC)JhC38YmDF40sQfjknUu^c(<)ML}NBn2Gf_ZIEagnYnHnkx)Jy1_C4PN%g zv)&oa_v)r@znfwbbegi#jfUN6Q9%7l-R=xuWa@nGxfAy-Ulw-tueT3t^KMPYJBKDF zwXv8Z^*FMS-(R+CG4JaJMq4{J5)Ux#kpHXSt{28sql;rx8*R*c*=v67Qv166*Y9`o zd+x~3{&MN%&y7W6EAgq%YR<)x@ocuF@hyK2Z0v_(i*a;2%bj;ynNW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/balloon_flower_crop.png b/src/main/resources/assets/decisland/textures/block/balloon_flower_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..89ba274be88e8102b88aa72fd73d19297633518b GIT binary patch literal 1166 zcmaJ>TWl0n7(P&4wP}?E;-V3HIvbEC?%cM!-5t8!ba!^!HQlvYHc}Epc6R1WJ1H|~ zoH=Eug+!=Is)VFyV#ZC}?naqt!8lK`If3Q*emWuLnlA#i; zVQ5l+OqSE49ErzsF+s>?`xEh8Hj(Q|XCg5s)PXFXEP7IBJITJNv&*H?QdU_}k67rH9SQM;0A- zhtBo&dHfK7ZQJs4f7$!9y4q-@TCzX`ZSyVX=0c4Z{`m!g!R7B#KQ_+JU0S_13U>DW zerK^hQ-yB_zgz%EI%kT>6MvJ<&j7aN3yNy>zfXwfp>kH|q5| zDD8@WKdm(O?GFt6{9a|{+U2WlsbYujx%!KtCGgX?Kzv4z)Uzp}C2+cX z=bixnA$)&!{*wd2Q@c9HuYC6My#ONtBk=6SH)o^o+`jX}z^&E`Gx@vlw~p1m$jO@( z-K*X0`uMe@!Bd}KbX%A7g?(4A#otP&_F(bMTa}gPuD5 bf$eReD^lKb_N$fC{vRTrEy`b~E7OkvV?>1| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/bat_summoner.png b/src/main/resources/assets/decisland/textures/block/bat_summoner.png new file mode 100644 index 0000000000000000000000000000000000000000..9c44cb485386d7e8f9e5ea7b773b83df4952304b GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFn1Phu3yP5-4au#?* z7BevL9R^{>dvo_@0WtGzozm6- zK8FtsJaGpOem=#xujYn_TF~Uy*S;M)tDW}#yl^|d-CN-L&N8NziT+w#E$>3NnlPO{ zl{JZT`^1yaG97-JK6kq%S+#mkEbEF&(Kj;>SjG4zxlMf3ck28eu{fLM?0(+9oo@Y$ dS4J2;vd>kOYBgl$@&&q!!PC{xWt~$(696U{WDEcR literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/bat_summoner_activated.png b/src/main/resources/assets/decisland/textures/block/bat_summoner_activated.png new file mode 100644 index 0000000000000000000000000000000000000000..4d9bf4b693aad8aee18d9a0111670827c2ac8707 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFh5w-{Mi`gsqqh#KCYj5t}EFfl{ty9_> zz~}IRfhX?3!Oy1{_to6+Pz##e`r5Z+XSLJbpBHY&w|fg*-&w}AGSOd)tL0tjRuiVv zr?Mt-Zl8GaS*F8J)8}rtB&$~MiDg|;Df(vS0jn6_B)5r=`c9qSBNk_~oZZjcx6`eE e@yZCJNA|g@Qmux}T)seeF?hQAxvXQL70(Y)*K0-pn<20V~B-+vIOhm1d$687GkgevnLANUg`1Q vo}*dSgLNIJR)wjNW2Vgm`6SgeB^>bP0l+XkKJuxO? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_1.png b/src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_1.png new file mode 100644 index 0000000000000000000000000000000000000000..829468e5fb442337ebbb35f80bb31dad994e9fc1 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QL70(Y)*K0-V6CT%V~B-+vIOhmga8INjb70kS2O=SfAk>b z$M=b?iQ&&P*JRCHV8XUx{ncORPo6yZ;rDxaHn&E5o_VTf{}%>nFf3=BWB*g)U){gM z2Tq+icHm3%%*NS`@>{`iOy< anPG#CQL70(Y)*K0-;6+at#}EtuWC_;A4H6G7E%|?c^|eR#Q@R-? z7MidXgaN=o_h`@24~u{JmJ>2STawYu(xSBxDqc^Iy+UpsT?(4h~HZ~M3D_vA}5 zy?SF1({z>Ldl~bBL-h`4&+zR3|1a^ugCyo8zXgpm><(rfSiinr;>N#C27ms1Yj2!7 zv$ye~x-#?Uay7PV_wNLVax`3JnD@ShXTMxsYQoRcM?Sp&THf}b-_BrzeOh|N^{vdx zJOyk@96OF@{{4Uc%iPA6@PgE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_3.png b/src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_3.png new file mode 100644 index 0000000000000000000000000000000000000000..0632c066b2c8aef7bf1572c9b56840e1dd27751c GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QL70(Y)*K0-1~E?;#}EtuWC>OimU*Gm{yT2TS8gfOHfO&4 zqCwDWF~jnxyZ?cJb@R-d5sgpm+0xR&+WyavkSHsi=XCKf%hHDoDazK?#>~>{+5(#y zUH=(w*s#Ii&)?tEAM&5(XZz0-E;2o#w9$LAUVz|@Y^D`g*{hsGe&m^AL&*cvX z^j~F=DCocZ>;HVt?P-e|(%0}^`_azWW8lEv^Z&nNPx#1ZP1_K>z@;j|==^1poj532;bRa{vGf6951U69E94oEQKA0a!^yK~y+T&5|)o z12G)MU+$8-S}7Eqba9u0qfjTYqP3&03Vw$!f)=T63a)+#H)%V$_7gZcI=EEPBG)sQ z%f;j<#dz)M=nq12xxDv(`QPFH(l}XHX5MU7)Xwo*x}F9Z&lVeJtBPm|p#XKv4uSJt zMDMbnIiJ4%POYuQGKP`@2^WwOdPuOMJ3e7!IqsfT)hC8v1zkFYq+&`b;y3||=h181 zDXawD^FCn(rbWr5vJrIaoH@?LXm=FgPN_TfsdFmr{U_`W}0 tP3Knw&UG(x$Tg@PEi35;lRjhtz5s$Vfq!wWuUG&8002ovPDHLkV1m7TxJCc~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_5.png b/src/main/resources/assets/decisland/textures/block/bizarre_chilli_crop_stage_5.png new file mode 100644 index 0000000000000000000000000000000000000000..a7996c80de7c09fc6ae084630df16f96a52347a9 GIT binary patch literal 549 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lh$0X`wF?(GJCjW+J>hQ3W!E=~Ggt%mlsS{`kNZjJhG4aOm*ZcYul-Zj?F z&ALu4x`Flfeoa)q4JoHX+4cfo0C#t%goXitce5 zE{Te6Sy~>gra|S-L1iAkl{O(I-tMtF5tUwksfO-xTHcw;E{XD$eeST38d^x zg8YL2Qv?|L)M~_mMsXH+L>4nJa0`PlBg3pY5S!#+~?q`+%$>YEBzroQ! zrdR#)&6Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf6951U69E94oEQKA0u)I^K~y+Tjgrkv zR8bhlpL6fIUo$$$s0k5K7HJWgyEGw!V3>xQ2%|R9qE*{y{6E z<$enR+kmrJBw-xAA97$OgAv$?I3_7hjP=RZib3^vtx|UmpqmyXi@>>#kN4kW_oY4> zXM!xAmZll)8y+1>#5=wnhm$g3rnw3Sx(t<=gGq+&^9R5xK5Ujkb(z!t0L<=Tw&eX0jaebCqavRvfG35Zvtc9rR5gy6~n7Rq>0#P8aYiR(! z@5B4)ky%Xg7b1TdX3s0IH4C8-NHO*LfrfC!h4*CzZn=#4?a$H1vv8a=47Y`JiNVyZ zIi~+;#j`te%XqYZc+T3(d~J?CL;U(5X)QhS}@wcyf0tdB49Xj2xA53|}kM zy7A&c%4e_UDPI^lN%_C|ZP1A13XQPrT7NWRO9M|ePBXSNfNI-jG&Lw(*&{<;Am8vE ZfM38;x(IJCBWwTw002ovPDHLkV1lAQ9ZCQI literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/bracken_crop.png b/src/main/resources/assets/decisland/textures/block/bracken_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..9b3928068384219f9b467efef84f61296cbf7120 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!Ddev#}EtuWQn!~rDc!mH73_E7#&dyoNv=S z!E~4C48eSl=T+PPml`t%noM{jnc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxOgGuk#6rQ`QqR!L z#K720N5ROz&{E&PLf_C>*TB%qz|6|jTmcG{fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8fo2%#8yV>WRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdm`z^NOLt1Pn0!io^naLp=kKmtYEgeeo;J&4sHjE(uCSxEHIz#UYgi zsro^w#rdU0$-sz9QwCX8VC7ttnpl!w6q28x0}I7~jQo=P;*9(P1tXx76g0v!^HTE5 zi#5R-e0{Av^NLFn^O93NU2K(rM(AZ`rdTQUUIa|nkv9|1FfcGGd%8G= zRNPAX@&CU)v*L!z=STm$-I9{vI#~5lvSAJ9Y()t+jguaK+Y?g^Q=BLKRM@L?Vw>r= zwJp-q=D+#*|K8;E9+toCMyyLDQ>=X6Tx$;he=+y48ryfKO=&5-*5CjC<7c{I@|c%- zh02YFX*c~3m~2XmNLVD%Aah9JsKHsmy}u8vbJ)(1Zqg*uFo(Oy?2M>_*|sf>SGf(& zYB^r}-zp;VPq};Ha?U9kE^K_8og{WNY&kGLp2sJxYk@}U42yDWn+>nK4@sVj-OJdQ zw1&+l+xiGc@kMjqv;~O*&It^vwF}xAt7bK@t_ztedn5YA#S<-g)+aI*)DQ7ge)!5B zG3WKM_%)mp1yi_`m9x59Z+>}qCwRw=-R%4lp67ZM7`ixXZZaqwV90qdsqnUBq6?@D N@pScbS?83{1OT+)n*#s< literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/broken_dirt.png b/src/main/resources/assets/decisland/textures/block/broken_dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..f1bb0f8736d1cc8417fa96f2ef7bb80ebb947499 GIT binary patch literal 940 zcmV;d15^BoP)Px#1am@3R0s$N2z&@+hyVZsR!KxbR5*=2lgm%q2LOOSeozGwfWktcX>_P7ws;Aqofz z_}-yQzdzy2_eq|9{qQOfPqV)6N2RR=z-cw{-S5wN&t~FpUl^lK%}T6*rLF>hJkRHD z3qMaS^6;)5;ScXN0RBXYJGY$xc(!6(?;haUN)V$?jnisEDLn(Ar94L8(r;qU+xgz^3&a{CzUVp=X#7UKDv)uE@eX8KY)pEigc2D-i44s;H8QDyB27Txl`kQX4b#_NMe%RqAy5wrJNC$jkT>P>WVTXpWd@xU7Z}GlNDHu zU1I5MLa$MhJjfF~D00_oWX`+Ie)s<`*Ig&)SJahO}!iAMSIV;AlL2gA-j0EC5?y8w9oTL6@C!W9xm2YWFZG(7rk z{&k(v!*d=_FS6j zTloIhDXP>;hHiDBQ7I4rzWMeMg^O$K=L#6=>Nz<%BM?t>qh5-i!n2`Z1|EvXY z4>$iW=KRygs+cPa(=E}B1ny1MQ#C5Hv@x>eMLcHa&~Ho zLQ-maW}dCm``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQY3>#8=6=sm|N-@ znwc0Fo9QSR85mmX8(8QY8tWPuS{ayGnVKs=ffCTRqLehNAQv~NT|l0#QbtKhft9{~ zd3m{Bxv^e;QM$gNr6te|BYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcpATTyDr4yE(w^myggkU zLn>}1{rUgjo>`(nA~Q_pKO<9zpdOPjD~E!Cp>g;tdyd1b4h|lUj5-Vg4lAk}8aQ44 z++F>>K5X8XdXdM8Ibs6Iyt7T3ConU6Ob}FPIIzf|_<&h#Y0K)i+g!m6llItn|Fu8i z!NaP={pG~lIG{m1V= zyobM5?>BH}V@W%^gEQm<-(|iWK9@2T?mN-^{|pRlesF(Rvk;l+D^L{huis~J3$qzR zFoQsX#zTfrdPWZ4t#-{0tm$0CDU!ay!}ptbnumciulpXhh6C%1w;wR^czmZfUox-u zd7?%2H(BPm{R-B+Q=9GWGR;|e4XH0f|&*15Cb>;M0a z^EEymdvW00hx~)#Y!!bVer7UqC}-WpJwrl+h2eX!#t+tckEVml8c$b0mvv4FO#mUb Bp&$SN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/butterfly_pea_crop.png b/src/main/resources/assets/decisland/textures/block/butterfly_pea_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..80e9f8ca82bcc3961316d1b1e124b55e7d56d544 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85qP=L734qNaX`iP@=>&q9iy!t)x7$D3zfgF*C13FE6!3!9>qc z&osq70%Xm4PZ!4!3;(122YC+}@VHvLus^uK%xu7SXO{@K0cQvAjuO!&6ViVwPrfF~ zp|UUKWar=bx?Mr1!naoZ^t8SD{+QFxkFI|gp3AzZ&t#DIJ$<#XRu;0Kp zW2Wo@OI8K3pKdG(7a}K!G%S*2{P4~8z^s4V6D0pi1ngp8TCncm2BxVXKQnl``njxg HN@xNARLgHN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/cave_crate.png b/src/main/resources/assets/decisland/textures/block/cave_crate.png new file mode 100644 index 0000000000000000000000000000000000000000..89c965a35bfc51ceb31e0052ac4a2a680589c088 GIT binary patch literal 588 zcmV-S0<-;zP)Px#1am@3R0s$N2z&@+hyVZq_DMuRR5*>LlTT|CQ5400#mSJoA(LorQezfU5TcYq zzd&6o8W4hA_zm2+aOFa&AHjtiw<3~7g1BfQ(n`%xrI2Eqg=vb?x=5`5otZE%WkQLI zVP2eer+4?xxtzJ@+&g14(-(*QM`-{H_wFj-$D!{E}~901K`699kUbM4Ay)mM4` zg6-{{Kw$aRsv>^bF1cKe#zq4v`;o6L)m{Ri$8^%E)M$cMyA43vGzs61?E;WW2bg2K zq|)XwTmzUdl>kT@aeCfCK*VCyEsJbs0)Rr{0tx*D0Db?Ex@F?1@1 zDf@J~`v3@$ps~?FkLk)z#DeWO2$5j-Q%5ySoy%j0k=OQz-AEpjnQ;Kd!Zn7T(x!>+ zy2@)qUCr0cZ1hhKB<_?|&s}#3@&*+?>CGdGa*fPKTrs z=i#HrfxzO@B6>{6lRoQ>cK~cQw<2rwq)%;SRpk?w7Vgy__!vURb{xKZ`x(gszz})_ zFPxt`o7aH+YPY4ISt^>?OPJ%=P)Px#1am@3R0s$N2z&@+hyVZq=}AOER5*>Llh11tK@`V76|>SUWHUq>R!Bp4FZC!y zi@g-3c*~E2AVRUVf_e~2=|O~&L+GVYE%u}cRs0M5aS>6(izVnyTI^wiHl?v(nM}cm zn?pT>on|zG;5!X7@9q13KkseNU?#oKf5hSFAcVur>@+J69x{4%v}^L($2IcB980(F zBBcVLXE2lA7s5eGg%A$D?_tF(!d6JL`NQ~tZTAucRh=uPG8IUv2!bkr?jVE%z~rSV z9z9;s#fF7^F^BJaTAC0J6PL$%U-`hv;Vghr9Oakh%54iHr-uOuTcIJ*iN~?~`l#3I z`tJD9kna9&wZb8QhEjyB5G!Wk`<}M5c>M+wr$!7uVJoDe6b;n@G4fiieqq2(v02~Y z^}YL?zjYIUg~=(dF5LlOz)g`%^`rLo4j`82OB!Aj!NvwxVn=why$!&Hiv?Uat=|m> z+3X3dn57?+{m1ycyv%po2H;FQPOUJ;*5(ej-K)pDzW%ALAeuYShPYbc+_iDiPhSC0 zD~$2-#ao1Ma9tOGgya0l05CYT?-NMbFzgADF!!K5U(!3^c^UG>9NpsCljnLOGqckN z3_4dilGy1rlKcCfNU2NOrs5GrSG0)o06((JS#RR3M+Ka&r~yTZ zW)fAIVL>g>YxIRhk}N0*?L|XTdIRusI&fhY62_WjaLO5=Xx8RnZS+ji$&zFW>W6h8 za5^_Wup&re!+4;6KkJh@R?f?#kblOPH zO7R)Cg{lNk4i~+b)lelsMn_1X9fHM%hk)q7NsGb5SV)|93LNbeX`ZnO7%K3rsHiax z)`=A3!hnd&VGR98jYo+ps$UUc%&qs%`#hdXRS~5qT+piKyHQ`6ho%^s#w}*bD0?Ua zx?3)3Fvkt)gH#RPN{^xvI#!)5#~X*jh4Dr;04OLmE!`)~<8vsrKM?_t^dVJ}f@zAV zCpZ<9hG9znvkHj^iPyOLhf5z{h5V1w(_!T!oE!$Q!xEU`3}N)5R8ok4=WA^3p1zfV z!)9m|cwpHRoaxvqYv<;{Sy*A;dDDsw zCR4F{+RCPYG<7t8V@=C9GfbaFM{{$Y?fdb)UenT<)AQCG`Ke>`ZL#?9U{`-<(XNr7 zhkAxOx`#`wGiNN_QnB+&SMEE1eR~MMyusWO^H# zck$ebLv3j9lx?>x#m-4YgII!<=0$ayYu-KU6bZEf7$>3*Nrz9)FNj``{%XyDjf%xQ?b`e4p4CNP-Lc8NCvIF=xV~?wX5G#|T5EC-+ywi>&FtK}XKruG>lq-? z*V@`!m*!1<`);eg_E;@)Y9(uH*Q_n*K)9A;LgfZcilO6a;_8YTR+%d QC>g(GUs;8Bzq_XSZwrjZ-v9sr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/cloud_flower_crop.png b/src/main/resources/assets/decisland/textures/block/cloud_flower_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..78c25277d93c9031c122614162d05011e0441642 GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85qP=L734qNaX`iP@=>&q9iy!t)x7$D3zfgF*C13FE6!3!9>qc z&osq70%Xk%PZ!4!3;(SX_VO_X3bcN=-J;d$=F#D`cF`vWlU21MYh4~TcDPG@m#)6{ zW~=?w$#c%ky=i&BW0CLey9W*4-z-YLVb3yi=59r&<;9uTZ`;-yx4)R{d}#$|$LWwr z+pY;$>KI!tKK}Wsi(}<-E)5SUbH-gtt`c2|Q{3bm*1cY|YR$gy_6&!Fx=I86vOJ#a zPx!H7!!*MQHa&F=9ZPE@8-9JP%PrDocsiXSfKyh#_XMGEZE_5qkU!-V_-d7#7DN6DNRhmj@=i4eq``;^>bP0l+XkKg&T-h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/compressed_ice.png b/src/main/resources/assets/decisland/textures/block/compressed_ice.png index c5132a1264ef3ebb0eb82f7713549fc5decd97b8..644242361a62ca7918ffaad3cc8a4af72efdb67d 100644 GIT binary patch literal 867 zcmex=LK$;OGwtxvPE3kkW!3HV(|CYfbAS1sdzc?emK*3ngfWgAa)0YKg8W4cl zs$izT71^Gf{S2E}UN&&fc=N-l?*9P>K@J811_5S9B?cxzMrJ|A|3?_)fp)Sof&o|? zkYHqDW?^Mx=iubx1}fMpz`(@F%*@2X%*qO~hOrhX&%h$cDx_%W$R-?^$gWfnAuRebI{N?Mn?>~P20{IIVo)B*V zNr=zT{3QtV7ZVE$GYdP&UyMxUAdd^Ouqqm|2{{I`Cl(4T88vc8f2KE_o9%~}YXK;@p{B@hb8JMs@fC-40nV5i4#S8>2Kra9RD;p~q zut5Pk7;u09Cmj3-8Ui+fiHQY>IN4a);BrJW{@(>AOUD1V7S7!vS92y}P4#~*eCr|QI?fBju`jx~+$4t0|R7>4cS zkTjC&A}Q^(@%_E~Q9&NZ(GlmV^ZZ_8*}m&%j=XUF{G7I*U!JnfjvO3doYl4gGS>Mp zfVHmIV?7>^y-mW3WG?hWMl_nV5fK&w9AoUWU`Ps#Hqe;>Z2%wx9Rargcf2KSM%d;^ z5+qaFF)-(HKvI=R0zFgM%40Cs?CwOkA!$2c14Ku=#lhpqsyg?6eSNk4*gun# zhU}8Jv<;1nb>vz}THbTT>+AFL^OJkqA|uHl*{!)QMnr_9^E^p(>*eK->-F+^`@Q!b zV@M(+GBa~U47h7s)c|b2zrVk|z1?oN`~5EI^YfNDv$n>VXf}rmu5B9;$8p(PA0Hn? z4CdF@*IJkEU}nydBq7`G4l>s~e*Jp+zCSV-fGQu?Ckqy`yMd5YWgFcM0Kn~^-*XO0 z=9MB*zF203L&gmMfEU zPIo2XIY%BVI4w9B(RMNVI2KxQSpeKYqPzbE0Rv()pD2dJ00000NkvXXu0mjf@qg++ diff --git a/src/main/resources/assets/decisland/textures/block/corn_crop_0_0.png b/src/main/resources/assets/decisland/textures/block/corn_crop_0_0.png new file mode 100644 index 0000000000000000000000000000000000000000..da8af61784758e7db356efef323e3d8c4ccca562 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1en(BIR=F~q_@S%P(O!V89{UX%Zy`<(mFdFK-5 z35*J}GMpW_61x&-IWo-b6;{Y**~poh)O1PWLEdl4W1DB+bFSRM*v42b+;7m7v1rce c0|yuwYy#!)y*(Da3urWhr>mdKI;Vst0N8Un(EtDd literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/corn_crop_0_1.png b/src/main/resources/assets/decisland/textures/block/corn_crop_0_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5422992ef0714831ce742a84c3e797187b9da5 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|>0G|+71n( vOFX3&58H8`GIrQ}D!KX9>-J>5`3*L;Yne6~*=_6vn#ADg>gTe~DWM4ff3!br literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/corn_crop_0_2.png b/src/main/resources/assets/decisland/textures/block/corn_crop_0_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b010ec632f04f692907178f01b5cc482084b77da GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|^0G|+7=lM3ul_mm#+D6G@$__$6;Wy9cP6ASFB|(0{|3QFZ^Zq6Kfg+p* z9+AZi419+`m{C;2s{tq&?&;zfq7mHM%guE_fya4v#=H8bOAC7xn+~>p`D+1E>!pdJ*CEiSLWGgtXu$pn^oI-8$HM}AR?r+!Hr4s&*VdYDeXvV(V7nwiI boc4vm@->UGWDxUepcM?Bu6{1-oD!M<`#()i literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/corn_crop_0_3.png b/src/main/resources/assets/decisland/textures/block/corn_crop_0_3.png new file mode 100644 index 0000000000000000000000000000000000000000..09d25ded694dd332a01ccb8905c1c4faa045a5c5 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}f0G|+7fk18LN)w}GG3WU<$__%+JCcAh`=cZ5ffRd5kYDhBFkq1KW_AM# zaTa()7BevL9ROj*tZSW|K*20e7sn8dVBbDQK4t?Brh``h|38^~E6v#Ofn;WA^e5vj zZ-b_sXBGR+lX7rH>GS(10v*L@FpI>N56&MxPIN$17+$1q` y`4zULJhhF-%NkBrEtqreR*&w1S?p7kL*uoiS*)2BUXB3T%HZkh=d#Wzp$PyaM_79R literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/corn_crop_0_4.png b/src/main/resources/assets/decisland/textures/block/corn_crop_0_4.png new file mode 100644 index 0000000000000000000000000000000000000000..79a2dee75bdc3402eef82ded6999edc54582958b GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}T0G|+7fk18LN)w}GG3WU<$__&Bk2C)IAMyXK^@q(2)jN`as?_tBfehp> z3Gxg64+jih{*0f1!kh&jk;M!Qd+iI3Ut|vLNL}*wi{buZ{~LS_^IkG2OfW)6q!6QgSnkTTH`? bNk18NU$eQ)pY^~W=n4i;S3j3^P6NS%G|>0G|+7fk18LN)zY#Hb4R95Gj3-x{@Hj;Q#;sGdO6i`~u{27I;J!GcfQS z1YyP<6SLm}1#LZD978mMkM=NfF&J<#ZTK+ uM70B_xNS%G|>0G|+7=lM3ul_mm#+CYK)w>}?1>PmwAg8%>j&)}f7@(Ym9S>O>_%)r2R z0E8K{u61$(1>-$k978mMbNd{H4j6DSG5-Jmyy@DO%bM(y*9f}Qe&J`>HEAW|gd;+; z*q11-h(7LI9Qk18+b<^NS%G}50G|-ore?22E6Yntb!W`W@$isHtt?VEK zR6gI*UJ6L@l?3?(|3?N4t_SX%0LpL{ctjQh6&wU%#vK#0-vR{_JzX3_G=h7(PYWF| zU~%1ADY*0h|J|-hR+mH9w?1z8a5DenFO}EfO;5LJIVy5#y)%B#?R56%9)Vd`4|?R+ zI&<-~bu@QpT11GS*H!y0^mXej#WPPO4)JzcDV}3A6r8|R!4Oi#ec)u}i48!@7(8A5 KT-G@yGywpxlVxlG literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/corn_crop_1_3.png b/src/main/resources/assets/decisland/textures/block/corn_crop_1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..325bf47ad9244cc67e6f92f8204eb40b2c7bc50e GIT binary patch literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}}0G|-or7QJQt8|*0y%w!3FDccXF)zo%L!zL zqhv9&AOV3u?O*>R-XCZDu$kfiTWg>he3K(Zfs|-TkYDhBEPz4#X6-AW0?q=D$YP-K zgCNYfV`BDOpkTA7i(`mJuxk&aShE3#bMEqW91-Eg|2OLed>8wrP{YOTWW0QtZvCen zQl@|PLm!Bm+1x*MW7Bzg>9RHc_TgG(-`;A|J!dSTWB4fc>ICd2Z^m9sV`Wj<>- z{qopGwigG!ew=KvRUqlkV(k|0$|-qwVk@;d8Z*obQ?EbPP}%leMD_>MG8_K?Dcf&? PoWtPh>gTe~DWM4f3NeSA literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/crate.png b/src/main/resources/assets/decisland/textures/block/crate.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec06f69967fa3eb9b1fbcf382e28515fcba6f9a GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|WHMd+Lx40B z5Q6{*5Nkkb5c}j7-fTA@J=N32F~mY}$pme_76$^Jg+<0y`|8+poucnHt88dj91vyT3 zcF1h?l+amuy5Vg@%y}XA*zboQ)Gyi8`66NW^<6&KTN~$}pTP1@{>zeJ9%kO3Y-|P- zZdm^HmYDEj?N|8&mi^~U`GM~G|NpDBgEEjY8RWpZ{fd0e4k8fe&AJj|ez2f1E2P#p z`1%))2ov$>PiB?&`&A^4d?)0Vy7kUQm+tKkn>m%3-+kZ1 zvd8+StHZxyv%+H&9{zjJs^aS$Zr8uB$#_n|@jLIcSc5#btPg$gbjH1_ZmjcW_;M77 tm%myg!YE;)c+F>NPT2DvhTZdKNq=f(g literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/crate_locked.png b/src/main/resources/assets/decisland/textures/block/crate_locked.png new file mode 100644 index 0000000000000000000000000000000000000000..11f3a8f0cb654d615660fd8eee499f749ccf2165 GIT binary patch literal 612 zcmV-q0-ODbP)Px#1am@3R0s$N2z&@+hyVZr4oO5oR5*>LlfQ2gVI0Ok2-m=!CC8;ga5x1ANy?ef zkcPA-E?wJnU@;vWyZRrfF%JF#PR^!_Ne5TfHbku*NE1z@Cr$MNRJZ{5BVHRE@LozC z`%dqV?~mtszRw%k-Ykx}#)^fTjHXaBbgZ9eB-ERzN}Plwi$E`M0Z2$P`(M7&?m5!} z8BL+xb2x0AP%?B9l8hI)Saxrwo2tY`a+ouNAS?oi4jD}m=P)L`6A0E;7in5upd$jd z)|Y8oUG8OX0Z`jJ5^p6#$98<$J(C*%u6IFJ)hHRd=u+D|qO$RdQMNjhys}gvA<1M_ zZHmCMdqT95p>xF0qTh=*K0&B*tNMaTHTIsK7KJQgQ7AG5F^GaP!fdk&p58^;SK y2rfG;)WddsJbOg`t_~pXCK_~v)g#ya&VKU1-x>7|xuO;igWn>_j|f3ZKsAr*UZ;SGTTdZNZLFs}@mdmYl6&CMPCmHk%g? zm7y?DzfV6uy!k}D6hTmtsZ9LCffphu>OlMfe{K{MFBEm2%yoKU4J7A>=Xu`eeb0Mx zptED`>{$)7D2ke$PRUs^)_ZS_k9-$@m{7>z$B8^%kGgS5u^|=HP!|MgL+OE8sA&B= z#$XFYRX6InJkDpEzhRaxS zSkzMkHe5f@ky8hH)rdy7t^qBsL<9_o72q1%O-FL0^rWst=H50-gGmVPjnY3%u>}6wq?;NlIm;&rnT(V+9jurtOv_Q4NHDstNik85 z#l%P=98QWnpGd?a;bbC`47JAvQEqOJm$@=h`wVE}GFSV_O;+T3y zDlNxy?&Gd66BDh~H?KA=ebZW_{v%w#U*=wu{rk?;-x&S)^#1PpwtwSi>uyyo5AS@* zY+15SsCjX(uBWkSNN>Ba=+XTDlm**->8sT3W!&|G@5H5=w=1;tp(KvCy$9m(L80^T zR%!+}UhoxaYcGZlecf+TBgeQcgQxv+(^%^3|IWDo=HTlMbHeIgef)U;Fc`Xcj?O=? zu3dQj+lSr$Czn6nx$CZ|Tlunh`%d9mVd(FTh0omcjj7nPQSIoWhmSymwmLQZ@JMZF t=BaraHPU^uDsep4F!rEM7|fris(jQgUT}^aoqxsq52OU2NM_6m}OfbzLhJb^N3VdgTbwLF=DnaT2dylg9B9MoP(on#Vf!ZDY0m!M;u0 zAVfAmYK4HJA<>Q(p4c8>n|J^r9++U0ia-eVu+a$+Lle?8u}&Kre-+`nYdRhXmh5}) z(fPjfoqIlcVQh4NS4VFLK@eTpjF`u3xA(Sh$KSr24H+*1lrEx!<|L}hHYAd&S%M&| z%Tq89Wp(bE&*2b3_<~xYh>E!K*owMtdPlxa`VY&?!RLUbrJh%*MAIRnY=py33Y3?g(CTeFa68o*1P(r!Z$hIu9Ll z)>iP~CWBrni%;25My6db&6(ycj+IShI%U%WAuI{>k86f%R-N4&fLxBx8V-^T1!hHo z#1xdKseF=4v+1Z5jm0F6Wz*?oJSL^%QgkF0=ETTIs)-d%Wmbm!uIjDTfW7IE$2f6+ug># zuAkiZ8bP!@mKBo)_hM zyU}$rPs_)t4{`E#`|sT-ePd&;SuRvXZ8Gp{;TO7;?gUi_xsB7<2_8@ z>OK93+IKRGIC8o7!&^Hi#@}6AKhqrm9Y4P?v!A=`nqN&N5)(bN@5=*#xbf*b{-d2- z?b-W(5Zu%AKW$q&lKlJ63)dGejV%U>J(+MOxKin^Yui5}?!Dem)!P=goygpMN?N@6 z{PBkR`v>b?-%Y+D&ObEIG!B)Qa=7)UUX=+xaUsF%KH}@=>TloIe#PI;5YJs(b$7i~ QRJ?ylHa#ky7@0Wy4~0>f1poj5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/deep_dandelion_crop.png b/src/main/resources/assets/decisland/textures/block/deep_dandelion_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..a809156e7a73677ceb6bb62dba5901fbb33d6b04 GIT binary patch literal 1279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!6#=yXs@#Xw?AV;#qHKHUqKdq!Zu_%?nF(p4K zRlzeiF+DXXH8G{K@MNkD0|T>iW=KRygs+cPa(=E}B1ny1MQ#C5Hv@x>eMLcHa&~Ho zLQ-maW}dCm``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQY3>#8=6=sm|N-@ znwc0Fo9QSR85mmX8(8QY8tWPuS{ayGnVKs=ffCTRqLehNAQv~NT|l0#QbtKhft9{~ zd3m{Bxv^e;QM$gNr6te|BYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcpATTyB;|s#=d>6{}Z(sm^ecD1q>QH z)=z)_FFhs2#Z>NCT2o<vvoKcJd4if(kFc`2-4deZPUi#U;as$49{W+$>K1OeTN3&gR{l)W6-_GcONaBx2 zKOS9`Fl)HWP^54|WM8|xM48tIV;PIx(*%!BG>~`sx${rD*j3ie;%8qbw^$2_uq{}? zs_DQlKjp-MWef@j0uC`+Zg9wBvi|ctb;Iln&8(~SCz>`jv9>rKWMVqu*eu9p5RiJ8 zgU?@pq4niw@8gnkF*Sz@(r(6YkkDxPHb3%khpC~$afyz+>199p51-I;2mdKI;Vst0CtDCr2qf` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/deep_summoner.png b/src/main/resources/assets/decisland/textures/block/deep_summoner.png new file mode 100644 index 0000000000000000000000000000000000000000..dd644f46ebebe3422c3de8f8d0ec61782f98c464 GIT binary patch literal 661 zcmV;G0&4wPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0xC&FK~y+TC6dig z6Hye!e>1P49YrW#wjf_(iW1TYiBW?lx-rIRjBees@xSq3@K12(4mJj(F$TXP0ThCY zqev-rIt-=E^UU*R7H{6W_ndRjz1|}z=GbVn0~PSxZ%>>5apU65ll3*4%^r7OZ)5I5 zkg^1maJ^KzU6~BG!wpczUXGQWaP{!$FI;wM-8v#Bs%sowgp&+$Cb)Zt)|KjC&3sv<+Ew=m1o$ojHv;S6^}!BC^tJgwhp3w%LH_* z;2wOlNZ406w#-O|D_FCfgnn3yq6NzrScOg%^ukZ*g1QQvC(B-@ezZ`SY`5ig&0`oe ziYmx7BcfTuCCjWcA@-T_IZo*gg0ZyKlV%e*4{zZbG=0pRzyt`J>Pdq<#_CoYTCIY| zfFVgUVQO*Fa;vXDTMa4MEf$xOWW%yA7|WiV&>mRQlwP+AdQyzWvAGJ*JvNg>LaT;Z zi+n4>C(s7|l3)#4<98iTtB1r{anlWd#Ae(216JS;T!0U7PQc}IDF_zhcuLabl1RS8 v{EXVpLId*idEFG;c^RID;fpBJb0_=*&}Y|vm%(V300000NkvXXu0mjf+$AFt literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/deep_summoner_activated.png b/src/main/resources/assets/decisland/textures/block/deep_summoner_activated.png new file mode 100644 index 0000000000000000000000000000000000000000..b887df75bd83d6be1fc5b9edab5a7c6211a86754 GIT binary patch literal 658 zcmV;D0&V??P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0w+mCK~y+TC6Y-` zR6!JlKdK9D6=l%CW6(4*NK6RbXowgGoQNy;>e8+8Pq=ksjQ_zYapy*iBo1sOV2m0S zhbZ84YF^Vt3;I%cUU~BtRrj4b_uP|HcMh5?<0)-$jjVKSPQwXK6iW?1zAh}pw?jWk z$(?~so+I!YTBB&Zw=Z6dKSDDsSzdjQYZX_8`T)a{8?@Q!mu1+{RCBY7aV?-#vFEsF z7$zVO?NO92JEJLLT1$yjdQb>8H1v2HlB6g}S2Q}Ge^_<%Fia4mk!>Fg-^PUW(1U&a_3sKN|8Zx<*&q9iy!t)x7$D3zfgF*C13FE6!3!9>qc z&osq70%Xl(PZ!4!3;(PA)_lzd0<4zIxm+5To-uTMDG`xTazD9MocB}lhhNIBnI}B7 zuie|Oe0k1=1I@(f(iz@oq@`RljYb0+x}oLkQ9)c9~(fpNl0t_OeqHyCVTk7`?V;4y3ZKZgrZ eZQ2}bZZk6Mw>xvWK4TToc?_PeelF{r5}E-1pl37y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/desert_fan_flower_crop.png b/src/main/resources/assets/decisland/textures/block/desert_fan_flower_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..ec0a113a9dddbe5d0ea5492f5b896c45ff71ecd5 GIT binary patch literal 1244 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!6#=yXs@#Xw?AV;#qHKHUqKdq!Zu_%?nF(p4K zRlzeiF+DXXH8G{K@MNkD0|T>iW=KRygs+cPa(=E}B1ny1MQ#C5Hv@x>eMLcHa&~Ho zLQ-maW}dCm``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQY3>#8=6=sm|N-@ znwc0Fo9QSR85mmX8(8QY8tWPuS{ayGnVKs=ffCTRqLehNAQv~NT|l0#QbtKhft9{~ zd3m{Bxv^e;QM$gNr6te|BYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcpATTyAL;sH8)_^^7nLc z45_%4^ymM7duE9SiIo$z{xdRl29* zaOlF}BPUL9Tw^*^aPgbb;r|A!0~kCQ6dDesiCErT;PLgn{V9%3DX*tW_av|?6gx5% ztGhVNVPaWjSggqBU>5G-_|Tq1Il3{^aF#R!(6aeVJ66SCFFOz_Y8Cary_LzMkM)Sg z`Mk7>eY^kJpJ=psWF*kO&A36t@X%cbBi1D^zD-II5q`ksu#UYoV%2hqym$p~p|`$j zC5}%Tm>3%vm{&K=WcsAUJdt4?|1pM4wx1#`i8&IypKN=0xmjn}Rrn~lTW}mul9gK* zFyVe(OXBUTvpH%{uqpiBY~nLP(d9hHnfJGTO%E?+h?myd>|5gA4lx33V-jLdKp9<*N)aZ3n(EGT5o>J9qt2&<2$^p00i_>zopr E0I$fPj{pDw literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/dirt_ghost_block.png b/src/main/resources/assets/decisland/textures/block/dirt_ghost_block.png new file mode 100644 index 0000000000000000000000000000000000000000..6a6b8ea8090f89e630e573902385e2e81bdbec94 GIT binary patch literal 573 zcmV-D0>b@?P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0n$lCK~y+TU6S1^ zgK-qc&-PH3&1+&~&D&DsCCbIJNRKEfH*Rp@-*Dkl?O$?7+$pgOr3?{|MK)|mt=Z?) zS+j3FJ*V^gp7T9#zJvYkRK|M~@Q}^xe_?7+>V0?5IqC0dSDW|4^Bes;(axaT8f=o| zi(6?629!`Lm*u@TDW@k#>Vp_+Zjz7UPc?Zu&+f3L36`Bx9fU~(c?$(modu;+*8XpQP*=_=mlsBCL z+00>&v}L`UDzHj8>Ha@NmpWS`^g#u@FHm+;5`?i5{P=U|;>RfCS2*N=io$=%k7t~-agrPPF00000 LNkvXXu0mjf@Bj8$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/empty.png b/src/main/resources/assets/decisland/textures/block/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..be6bd7855c95da1c668449dcedf42dd0895d77a1 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL3K|T$B>G+w+9({fxJTtzWe9$nJWO9$lyT? XuY&^vBX_Z%EJ)bX)z4*}Q$iB}0~{am literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/enchanted_summoner_activated_side.png b/src/main/resources/assets/decisland/textures/block/enchanted_summoner_activated_side.png new file mode 100644 index 0000000000000000000000000000000000000000..97b2b36c644948a2883456f7f65f74b696e42763 GIT binary patch literal 409 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lh_0G|-oNH?hrKZV*@wE%lD9VKBiEm3tjLBr@iEx#%UGa*MqsfmJuD`s(*&V+}qV9U%`hQB`?P6=|-} z49>DNHBV1ZdwcuL5aX>^MPh)Kau#?*7BevL9R^{>7@()V+YL?p;Z2Qms>+!Xy-;C?TxF4=N;(r6^2?kGBKbLh*2~7a@+mW;Y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/enchanted_summoner_side.png b/src/main/resources/assets/decisland/textures/block/enchanted_summoner_side.png new file mode 100644 index 0000000000000000000000000000000000000000..652857287c82bc5c8c82a8c2efc1ae5ce9d34e73 GIT binary patch literal 421 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lhb0G|-oNH?hrKZV*@wE%lD9VKBiEm3tj!H|#;4-XFqGa*MqDRXo4zP`Sa zl9K4?Xa@%ecX#)Sii)jUw{~`RrlzJUD=V9tnkFP9*ck{L8yjnDYkPZp8*A{{=m>e3 ziK@zTsz`H%hliJ?sd;*O+S}WQg@v67eqI5zowL9rvY3H^?+^$xifVW@00sAWx;Tbt z1nc%kiyboHaOw1%#h&YNOY34-cI}(`ZlS6C5AHAfA8gV9{0rH5)4K6$34z1(=x^V0z*cDp*R zSQz&3l4*Wql*)et*%9;aKL+rWzd^^NT%9 z^Yks3eXw8+m^tmqy!G7A?z1TD-J4t|{Apjs#=r3w^Naq2OR9WM?3}qdld-&$uegVpU~GQ?&K;ESLF(UiwoJf z0M&CActjR6Fz_7)VaDV6D^h@hGd*1#LnJOICxnO?g$X5zBqVTZm*;E0EJz8MDYjFo z)b*Jf+eAst+?RP1&+)u6whB6Zdry~y&$N(~wK>JvDF*Z7ZqA!E?bV3|)1oF`+;(Sm zL*rIm-8G93Z*FL;jZBHW-F421?W5+@+~DcU#SCZYuk_IMF85~3dhhY^#5bL^fXJI> x#csEK)Y(L*hkSn(BJR${nCi;NrkKjgP_Cl?@@UiBHlQOJJYD@<);T3K0RVUbZ9)J5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/end_altar_down.png b/src/main/resources/assets/decisland/textures/block/end_altar_down.png new file mode 100644 index 0000000000000000000000000000000000000000..1e40ac452c437d2469c3add01234390d05159dd8 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1quc!E2r_jv*GOYbP%hI^@9P^7(&+U8DbjCg%1d z3KKk1SeN~KIhU&T@qPZgQGWUR_b)B_-kz>BzrSub>vg*~rxN5m zu9(?%HNMSH4Gn*MmebhN@@oN< zFXv74TBEDJrmW{mBRI|HnUj_KO8F%L{MBF9{C+w(f<> RT%ZpbJYD@<);T3K0RY?uhq?d& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/end_altar_side.png b/src/main/resources/assets/decisland/textures/block/end_altar_side.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0d742c70993ced20022ae8761c065c953906cb GIT binary patch literal 780 zcmV+n1M~ceP)Px#1am@3R0s$N2z&@+hyVZrwn;=mR5*=Yl3!?3cNE7z?XLK{TOLkr)y2e`fXE`X zR`g-WQgqTHD77NFU|xhV_E4e1@VOg(8H3?NkUaPxd)PX-K^!7F4OKK!6}7~FyK|Ez zvuUr`X8mbHZ&n8JA>M2Cy!?LWe9!ls?>U^7zh{1Gcr^_`dgL-z%EHdsjE(kVh6EA8 zx#ci)st{mTPk%+J=%6}GT79w^5&*_03IN=gYak+&iVlyIdI!^56Yoi2hJ@Di$YsLO z7$U;hXg}3y7b|6v&E$i`Y$lJDvZzkGoIPRT)ihdb4t{N8SSgF$Uz`G9Xt z$4j(4{_|wx;+Z?t7G}Br-+K1!Ofo)EpgQfc+}b1I0P9^jg|w}u@4$8pfTn^p)tnu4 z8XE3n^>3R2nBDt3*-SpbR;1FLn6H}Z8VptD;`QgyeEOy8n33g|KJ4|zR^5;^^`Ba-^6FTb^x&a@I(Yd zS3D%ztmszC!BNFy36_>F0bT4L?8Uj|pcJ&l!T^W}Zl#Rjlf%&%TI--tea>TGuooa8 z`_h-IX!&>Xe8VS-2+A;V?oI+wuY*KQ%#h&Kbnu3wF#wcdVw8#w@t#BwD3u-R_2!Cv zb<1b=&)chMbj8C^9VVrsLt8A2$Xnw3U3JA{Ub%1b1osaYrQkK0W;ZeLQ17n*0000< KMNUMnLSTaAQFf~U literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/end_altar_up.png b/src/main/resources/assets/decisland/textures/block/end_altar_up.png new file mode 100644 index 0000000000000000000000000000000000000000..c7b4d06e6fc9c8f7409290792ecaec36aff33d2b GIT binary patch literal 694 zcmV;n0!jUeP)Px#1am@3R0s$N2z&@+hyVZrU`a$lR5*=wlTBz7K^TUggdjVxm64>BB{^(w7XMNx z^wfeN4JJ_VQlub4(TF`%@lfzmN@PN@l$;-%*DnA>;}-3w z{r;fp@@jSjDJ7wEmxr4GsZ5%}a-OA`A(Z1WKED}gkee6)VC>Js|$<55$XlDW4v3d?zN69X7A!L{B`tP~ain7zHh$kKO&DYj^NG|O9#+Dp_~bPJMocjI{ur~v8+6$%bg`b(T)4ZB>jp#&t*|c>FK|?ahy)uPx#1ZP1_K>z@;j|==^1poj5R8UM*Mfd;z|NsB{|Nq(M^zixr^ZEanug$8u*TmH1 zc#OW<>F`-;l#`;q#?j{D>-fUh<+aJ-_Wb|g?eydB`Rnxk#@Oo9;qd11`kJfJxYFN^ zoVQV7iX>I*oB#j-32;bRa{vGi!vFvd!vV){sAK>D0Jcd)K~yMH6^>hO!!Qg4DQ)<& zXIL{uv9s`XV$t%a$usEMkxihJFt=pNy59PS!8uLRK?z}*0a zbt)E``Px#1ZP1_K>z@;j|==^1poj5KTu3mMgRZ*?DqfX^ZmTs|K98Ul;!`0t@x$Q_rT`( zbDH9(#QE6&|H1$N;P3y(=lRLw|I_II-2eac|NofL|H=RV&pFsYygZR47vwk6RAIFbD*f$3jRP+i83MvzG9I&`2x;08uljLPS*@ z;*4YjJxJ;S30ASrlZ-N44QkNL?qL>|6Ot7@uWh6E8f1ozwbouEX)FxVp67%6c}7_h zmM7Ng>)0NqouQ1qZ(xo46famuaqa!FmdR+)p?!7_Yp*v{lFUqJMjOQiMMZCY*}@Gb x9IZ){x250(?#a~t(Yw%K`uy?WF%O@9{Q+Xs293=MwwM3_002ovPDHLkV1f*{qnrQ$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/everlasting_winter_summoner_locked.png b/src/main/resources/assets/decisland/textures/block/everlasting_winter_summoner_locked.png new file mode 100644 index 0000000000000000000000000000000000000000..b4c199029cee560170bc3b6a749eeb6a5ab1a020 GIT binary patch literal 379 zcmV->0fhdEP)Px#1ZP1_K>z@;j|==^1poj5QBX`&MW){W|NsB&_W$Se{k+`&l;!`0t@x$Q_ulLM zz~=aKn&PL#`Pl#e;P3yz|NqD5`N`w|)9C+rtn}Rf|6X&VGd006T|L_t(2Qx%U{asx34L|YOK4CB!< zi|yq82Mzh5sIKbA11PnLl-5eEtyQ3cYE-2wNo=T!2*$pX8Yr&}0u+&>i$H9kS|~*3 zk`84CW}53f&k3V2&`G(jvmE!;LyTG5%bfS~+{;y3G8%QQ=l%ZlW3L{NRN(w%kTRAh zC81edU68bdR!cuKr=?-n7g`Bq>q|zS)B!K4MXCS8P%?nK(VA1;9VOo%K7M{TZe#P| Z_yf_Q2buE%&JX|q002ovPDHLkV1ixwvH1W1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/experience_flower_stage_0.png b/src/main/resources/assets/decisland/textures/block/experience_flower_stage_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1422fceb64c33f05105033ec53f27553e24c9a63 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1en(8<%qF~q_@S%P(OLQBJv)Uf{xebzK^dL^^! zx-b40Uw!0cK)ng)dc_LH6Rc8+JWnJSh@AQmf41A_tigg8UFR9t*cc*B1w*nL4K4sp OWAJqKb6Mw<&;$UDXEIv= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/experience_flower_stage_1.png b/src/main/resources/assets/decisland/textures/block/experience_flower_stage_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9d52c9a78d9d44742912cba56c41cfbb93475f2a GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enu*K8GF~q_@S%P(OgFwd3_rL6`d!PP4`~KB` z=T-v-;VH)$w(h?BfBufM2MWIFi68C@?w8oMSMzWdhaa;J?^nquPf{c#8g9L_sXDsh z@gLz8Je&!4Z>Mb#pVbi8$Tg8KMMmOZc1zPx#1am@3R0s$N2z&@+hyVZqJV``BR5*>*kiSbpVHkyCiQD38Ww3 zAP5Z-6+s~(k^0oOs>q4OSK-ylQC*wE|YXMbm1Nd3ZtS381dG_tJ_O6XE4R{3~_dL2qn8Z(Q+sG)PYU$w8Em866cy7*#i_@%07*qoM6N<$g7@*T8~^|S literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/eye_of_nature_log.png b/src/main/resources/assets/decisland/textures/block/eye_of_nature_log.png new file mode 100644 index 0000000000000000000000000000000000000000..ac837c561f7e64acc4f769a4e4dd371ac1870a17 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF#Dr>mdKI;Vst0LJHLc>n+a literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/fan_flower_crop.png b/src/main/resources/assets/decisland/textures/block/fan_flower_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..08267ee9ab174fb775f086f13b651eaffc8a05ce GIT binary patch literal 1274 zcmaJ>TWs4@7#E+UKufzJ4$g#_NbERS(!?}t-8fk?nyMs0%hOaRK25CF7i@QN z3sR$YV@05e7HwRL*oKBQN`(e{VhD}GOSiQf+5_SywhB!e5{!#Bjmy+<(ls3qE0!#u z|LFU^|NH;*AHUe!v#Y+gwHCv$`dE}ppl?(8t*OQ^OaA7i+bC!;!f7L^^cw|UgBU9) z83(U2!!8^I~*FgUOMeRCZ(_8xV+&ouJ)hkbndY9+=XgtTSeiSkYzBy1Y#h zUq|ce9clbeDfTVppTpphTxLtIBa``FR<8;xC%g1=z!0JPw zY?{!|B)G_GE))fcykV#eMHLDKvfv>VEl1IT0Mc+%ZnqO5ocgeA@TODN?G*(M>RC-x z4N;LnS&`2uLq?E5PVbf=scW*bzS<_#Fv{driY8s{Qsenw1(D=1ia_>zQTHH zScOyq>dKIoMF-b!FQ-zOkOp}}(Nc;sSm|PKUNICsuc*L{EP==Oh_av*^zAEzc$|sJ zy1~m?7~_Hjk|0G-p%uwZ%{m)5Pw$S*L zmuqv2g0;zqG8%Uc&Go_EH*cYaas^WoRF1#1mB zHF2%^)ly-3IdZbfau^J_a8PU-IaWL{IXTIGw0OOwyw_2uzB{=w{`BET@gioOwp^}G zI-CC-Ut0RHRQG+(-*RL2$@B9YlAGMO$FJn7!-2($KU@@XVb)bMMfh$>dby`~4>OxpmjyAKw_=cQUTn nCN==->Pt_}if=uL*R)tMU*UY3aV~5w|BYhd9`1v#zOjD+5N@to literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/flesh_block.png b/src/main/resources/assets/decisland/textures/block/flesh_block.png new file mode 100644 index 0000000000000000000000000000000000000000..3b8df91ea2e365ae366522af5b1f5bf406a515fa GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!SkLjjv*HQODApQWisS(H9jR8uH?m~wjixZ zduGEdO^Fu62(1^cRTrl(WC;B6>B;}M7T31sM*jX=@uL6p%KP7T7pmE>pT1IkwYlBQ zA1O*FuG-uSW0g?sHeR(o(a-Us=cb8s?tNtWwqQa|vGl1|AL6}RjJ)v<90=r z>fNm;tEAg&Adem=k=6FU;D>oc11IJ-BtY$K(8@)y85}S Ib4q9e0MW*NF#rGn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/flowing_block_down.png b/src/main/resources/assets/decisland/textures/block/flowing_block_down.png new file mode 100644 index 0000000000000000000000000000000000000000..a671adf9aba0ca52b85c15f91470b7cc81b855e6 GIT binary patch literal 561 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K$eWHMd+Lx40B zNDK%#fLH@cgV-;Aq*O})=`Efvjv*F;F%x(59&!+Hx$dOa*l>Wcv6W*2#~dZgB1RKO zC*gIiWg0mjtt+l|CTuA$wwAxS@$MU=MUjRk#fN0S)z0frez^O$HlxjsdCT_L-b-a; z>FzQ(%u?XiA^E;*Mp5D}%^imoCnQU1r0f!oY4FsEx+tRdzU$U$Fw>aB8TI7Qc#wT_)(t^@$rWBXWR9FG9wyeCq%U8Mm%~DS-D(f zn*ROyZ(WY8i|PArbmsk<+n-L}D_?#oPCl|IYI28y?B+kTykyN;ltIe98NFT9*9)T z-NolPUA7v2tsxsf>PX4jPPp9DjfQx+dS<>HFdef2vDEq>o)%Fwpr7p00i_ I>zopr08J6Wl>h($ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/flowing_block_side_0.png b/src/main/resources/assets/decisland/textures/block/flowing_block_side_0.png new file mode 100644 index 0000000000000000000000000000000000000000..8c7abe3c2a83d7d4199d0fc7e9db787026a74cb5 GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K$eWHMd+Lx40B zNDK%#fLH@cgV<*`C#;VL(lb3>978MwTP7ItH9PRI$SPi3vQ+u()WAzFkJwlKaJhFd z`UfBX?hLpQ`pC*f7zF&h zbn{K|wHMq8aS2L3j|*~-_8b$rd0C9ZMEP3I_eD~dx3D_2bbTrnpK<8vGEUaA77_83 zGewfJ_v{aP>~XMJTm66I83SLN*$=oG82 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/flowing_block_side_1.png b/src/main/resources/assets/decisland/textures/block/flowing_block_side_1.png new file mode 100644 index 0000000000000000000000000000000000000000..164d28f618b0e0a3efb8ef426ecf2481d8d145c6 GIT binary patch literal 528 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K$eWHMd+Lx40B zNDK%#fLH@cgVyKU|z%7&d^I{okN+lBSrnbmz+ZEuggT%ORf@-TC@ zNyyzLk=M=_)Sh+RsGpR#yd!b%$pZ6L#hGjpmu5eItq`V3zsxD zDai^3siBYUL%?*2ttM^^6-L`$6 zf3Wby`*xNA*$sQA22`JU;drG{m*+@8W1sKU%lFr>m;bKbez?$F_)yP`S7$>k4ipzP zYdvUi;1kVAGn;bnLx94<3ukMD_7v1IedcW0(dk(9;ogg~kO_=Z3I>%7=Y78V8#Gwu XN98Y{6}V(3$i)nvu6{1-oD!MrOojq1yc|N8&MW*BXl#j7Qc+e~!1`)| z*sX;erxvt0CugoX%z5xu`RDD`|B80)cY2%NA9niR-KQINAK5WeX?Ei6#6N;P2G2hn z;9@;B+vM~wxpnJrSiI?eaoR9xU(NLbbF1f}D%Sku-{#-y1Bvp!1%14ba2?|8IH3X$W-gGLUn9Cm8Y_ za^PW+UAUyNNl8{PNJS+}B}#6B|Ai0Q`zE)?N_2O|tjT%*_T5iCrCn^#PA~2~ZEo0G zT)ppl?Y8an{DXxr-nX+1$Zps>HK6*;3&$&sx;#e$8vA^&UcSG6z5I9e_QQqd!iRch zygD0VaiF-US?fWA1D|L{n%R_l9|9B>UN~DLw5On!=`&}`j!ws-5BFY_g-l?SQZT4w hIPde--=M)NU%z|RB#GPZNCh2i|yIz z#l5G^4SS2L_g$~uwtb#|u<*tEc9sFz4SS~sRG)d_c%@O7=SVKGHckS$Wu2#sV~B-dOTQuCAqO57*?^3U%Z|dGY>h1wG+wUI_~A6G zrfK^JSv!a6=^t3!lQaFFNp&VINp_CK@5 zp(Tfz(?t~gCq>5GJ$yPnOXZr|m$IVxEx|3>i%O)V7`axS?SFmUQC6v#=iz}JQR_}e z6}-*k`TXVM3R4#2C>ueC$rJy3b2w<&Wh*x*Gc!JV_fN~lR3<;;<<^5d3=IGOPdV+W z3Uv80kjs51K;6A?Nn?|etYDCeN|s8L+yws%AGG&PZjY7d?u=QJ^ZxC-pL$BW*q)tU z+gTe~DWM4fAcMcg literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/flowing_block_up.png b/src/main/resources/assets/decisland/textures/block/flowing_block_up.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c5c1eae854c902f3757fff34442ff9aa157211 GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K$eWHMd+Lx40B zNDK%#fLH@cgV=L#aQ|Bkq%%ET978MwlMFho|H!v^FWb*_dB=|zj|{%@D6}owqA2q^ z!|H!~V$LIl=7dKIdwC2PB?XWEUy?9E@m7!Mf60i@NeBJdGt-ivsc|)5X^P?8By*IN zIi2Bz<&rAKCp8nkABeoZ++O`)A6X@EG=)5 zfrqXKzlT2aYOhcAvcBn`conX*DtI5%V-S3@qalgeL9BTXKOb|1LK9Pa1P{MUgv0?B z2a^+(3Oq@Ne;7zb?n(Kz`ah2Xb3(+CVzD{A!ps+eZq#_BVCP}%!N<_n(wHh4IOOJt@!N9Eak7aoM(SBiCUA9+&tDm)5;|U^`zR+JDw@%%VW zuPt}1U-BKXy?iL@UMKm7ZuT&iObF`eAsz`f1P!p#G0sR zoyqeOT;1O19r|H(i?uaG?!D0x{}(wtA-5KNnRIB<3Fgg54O&0ly0$`hqoNS%G|^0G|-o%n3>XrD6^V+)i;~-r15s;XSWsTm({VB|(0{|3QFZ^Zq6Kfg+p* z9+AZi415Pbm@(^GCnr$Q!PCVtL?d`_*KIxq1r8_H&;RQ!PtJ{#5!kGbFnm)ub9ORG>gI0)z4*}Q$iB} D&~ijW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/fritillary_crop_1.png b/src/main/resources/assets/decisland/textures/block/fritillary_crop_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9ffff8bf61d435e360224ba422a93249ac135963 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|s0G|-o%n3>XrD7Ee3>*@;o#Mp2vn5@V#etH%&sW?7QXC~ge!>4CfZ<;A z-bkPrXMsm#F#`kNK@eu#F){lsP%zTd#W6%9xV9&d?|=b^Q)=$x k@E!RLULp~n-%j9vGnsW$_CKT7KuZ`rUHx3vIVCg!0BE;WumAu6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/fritillary_crop_2.png b/src/main/resources/assets/decisland/textures/block/fritillary_crop_2.png new file mode 100644 index 0000000000000000000000000000000000000000..451c8205f02768e20b6835f8fd2d11458320944f GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}%0G|-o%n3?UcKZjEid8Hya7f^GiWBqBmUK-P2g+~sJLC?eI7@>3g8xGS zL$H5^5J<4VBeIx*f$tCqGm2_>H2?)uJzX3_G=f`u9fb}ka4=t9VDi7dkU2}=_KKup zB(u|d#&xH+9{J{SfFVWE{G|9I>AP>NZ(Qx;VhB9YtRx}#O809*YIvaZ7KP(dadD5| yl$3OfTI{zl+HRpxfABBkOz)ft#_6d`*mpl>y}9u1hr>V%89ZJ6T-G@yGywn|H&}fD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/fritillary_crop_3.png b/src/main/resources/assets/decisland/textures/block/fritillary_crop_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8597d6d23204d6e9ad8b005b941d402f19b88a54 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}T0G|-o%n3?UcKZjEid8Hyc>g~0|Nj<;1a7A|G4E_i*JN>^DjQBF9w5bC z666>B9}XD2{24z1g*gj6B8wRq_zrP~wpfD#N3@66@BjRH z3STcd&r{yLL-B{)0}GSMTg-S)G(<)*1&Nz9axT%12tHNAAd$J^1)H?i)oC>XlZ#wc z7kqlDx;bW+-Tb*-W;3OKix;g^>lfUA?5m-YS*CK>nlls3JrA?1x$Thg2HMHs>FVdQ I&MBb@0ITI(qyPW_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/fritillary_crop_4.png b/src/main/resources/assets/decisland/textures/block/fritillary_crop_4.png new file mode 100644 index 0000000000000000000000000000000000000000..0b398b8b940ce3a24e3f0eabc4c43aac221e1a01 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}50G|-o%n3?UcKZjEid8Hyc>iAa|NmWIzUck`Z~Nkfjza>sQ=FK0wxnya zI8b@@Ir)h|imxQdFZe$)U~oNf=LArOv%n*=7^vV72s4Umcr^e8OFUg1Lo|YOdoPL| zR^V{HyrAsr)BpA5joYd-ExmRGGW=rSkb5pN#)l=R!RNHnPp2&xlGgQ4_03^axWw_r z(cn%<@TY@QGvz;7Og8y;#J{|FW0mskjkh(vot}7e`L>Au$fEUAugwlDl)m4-@mgfe fv02&AX^#8#X8b8Phyn977~7CnqF?n3#-u%)faO05!3Y=_PS9+atTi7_0CuyPAYO!v%LL&*kD^Yt-XG~&g zmYjX{h~xmfJ4;COpKRh6{k>$84t@ULmnPc51zRq2PasWnlu%w zO?a5FWJQjO%9(=?&P|wgOn_m_m7}Fy-QLw5+zbo2lmiZQs{-2;?_;mRvzBI>FU+%@85s; z`}h05fB*mg2WomJ-trYlaTa()7BevL9R^{>qk z0|#WLNzIuyXBI<9@|zqfp+^S}FVdQ&MBb@ E0G&>RUH||9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/frozen_crate_locked.png b/src/main/resources/assets/decisland/textures/block/frozen_crate_locked.png new file mode 100644 index 0000000000000000000000000000000000000000..065d7281c9db3a5bae5517583b1f99f84d3d90b7 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFg6o(h%9Dc;5!V$jK}j=qyPmcdAc};NL)_dQT_ei|Nrm* z{ZHNT|NY(H-~Ye+m%8KkyZgJ#^WWb~wI~)pQBnSl=kPq+@^|-l7XLC~{yxii`T3kP zw+Ok2t1pm;H4@s!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1quc!O5O3jv*GOdnX0*H5hO>SO35K>-lxF!$M*; zhn8^~YUZwOcz2Io{;NO+OHxsN2GIVg_On2 zB_7}GHl`kUdF;nkvpWGQX@$lcr*Gn&v*@^DcS6sZgK3;ckL8u#`yZ23y6)nFS-q>Q ypZk6=vuiIAGJbi>i7o9>mf5L&pTcv#GN|)^S-RlOkw~EP7(8A5T-G@yGywpjoMm+Y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/frozen_mirror_flower_crop.png b/src/main/resources/assets/decisland/textures/block/frozen_mirror_flower_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..0c309aca5342b155018316a183fc76763bbc469e GIT binary patch literal 1985 zcmbVN4Q$k8814{pOoA|L(fGvSZxthdbSk+jemiG1#@=ZDn_DX}jHR zii8p6FAD+*apOdz#>6Nh8Xyb5$;6o~aq}mGfNp450-BsKG)g4Fue%>0*$nZLUfb_` z-sgLt=X<}mJ3=+9=MDBDKcs@@=Z#c z;lyC3X$dhkM=R?Yo1kGtf>#O3LYk7Yz+mvdp|MyFts8aVZoX3z>){R+5OqLT+B5+` z_@eAmy5VhyDQ3hzK(MzR$VM()6mqd@n--n4NfZbW1u+QIp(-kur`n^PPls8FE)7G7=!u(1-DDU&c;P+Av}_W!Qr z$+>&lRTd6=p!t|HQ1bcQbi32lD9eFafR*O-TNy2Rkg+EHvctVwnx~v z{oCOSMXu0g%vJb!a&2``?Syk}JKhfi}kWZe9Z*1a64vi>> z&JOR|Fzx}z+mXcQqi}HIz&oka;WFmnjN;N^uuePx#1ZP1_K>z@;j|==^1poj5>QGEnMUPuSa!4|iU`BUMH;Ps~Z9^@GQ#oipD2rD; zbxSpqUqyCIHj!OJcuqK#UP5|MI*eF8lUzWMTtah6Gm>6Jm|;bZT0n6}F@{n&mSRYJ zQao@*Fo0G-iB&t0Sv`MCF={|6nqx<7LM)wTN^eCkh*UahKPjALNpwmyjafgGT|tFW zH-u0&mtaJGN-&I7IhJ2Tmt#qQOfqXhD}qiml3PD!JSLA=Jegufh*UXwPdSlYLXccR zZbUAOSUreZI+bBYhf_Gs zi|a`M000SaNLh0L01m?d01m?e$8V@)0002;Nkl}V6j$;4r6 z8HWd`U3RDtpp{+r{;yNt1AG9;!2}b^&ba8fUKf1Qll?#i{=ntoP!ovg=$v70A`>8~ z*#%I0IldyXli1W|gU|vPtA;&Bt(r`&U;<`QGMF*L!^u1^0COPPQjVowWJ}~3=7M4? z>vI3vcsBta-QGb*%jrFGx(iKczJAc~$e*HuEBVY5*yLFNY`qoBMCyFU5uca;M-`T; zOt&v}(TFCkpcQ-fuzStkvUhbv9|nq=w((w6t4bXG&z%PiI+$kurJJn8?KdQV+PI$9 hKPUIp|5dQb{{W@+9Aaowx?lhR002ovPDHLkV1m1X>rMaw literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/ghost_ice.png b/src/main/resources/assets/decisland/textures/block/ghost_ice.png new file mode 100644 index 0000000000000000000000000000000000000000..21ab471f78ee3b89c4cb33f564efbf5938b6da85 GIT binary patch literal 397 zcmV;80doF{P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0U}96K~y+Tb(679 z0#Oh}$7ygIBe5VP79o*(@b-f?e7074zeiGl^ToyM?UCFIKBDTA3gX=+w z7f4K#ODr%h9sDO&yExG*tJldm6_h{_SDSzvHF_9_C%p*z z8zPh#B-B}z5!7B^tebK1!??Z!^=G$0p^AaofkKJ>iZM=~&5@WQemqZ;bFuR2LR>&e z&=`x=Uoqxo1V0#^10Yu1@sU%mK9^v#zE}q8ESXKXyI-A9-s8D!e_MBV6{*8M#GfC3 rHbBgwNK9)y{H1+iW=KRygs+cPa(=E}B1ny1MQ#C5Hv@x>eMLcHa&~Ho zLQ-maW}dCm``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQY3>#8=6=sm|N-@ znwc0Fo9QSR85mmX8(8QY8tWPuS{ayGnVKs=ffCTRqLehNAQv~NT|l0#QbtKhft9{~ zd3m{Bxv^e;QM$gNr6te|BYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcp z>}qOi=;{X3>yn>bnwy$e0@Is<(Cda%FDNbK765H_NiE7OOHFYr%Fk5*``IcJw_BWX zng`XJg4-=FIQ8lS9itD5S)`bT2?3K2hzU=(Kn^_Rr{)2Zdl4{QAL0Ah49r^ko-U3d z6}OW9{Qqyy%wf=YGP>_SBU6W<8WTGM;}Hg-pY@j?)^FVLu3q45!#Wm)h7B(mGnutm zwcDlFZg zF|ntohv&q-*`;sTmAj-1Dg~Vx&E%O_BpwzhFwA(M$W`*ZEkkiarof(~FY9-iKCiEN zq;Q}~W(TA9eM1IOhRggOy2{PVnbbL)=X9vpZN4NS%LgH0X`wFrb?2AGJ*!u0tV88CW;ciCh8G(`r&r^5mp+N5f;u`vJ0HFZ)Z70 z*y{V4s_*sEtBtn0ztrQ`xrATOmOk6yg>Kt^B<-3_FOa8jsJKs^;Oi41_MnBwE-(5$} zOJB}dR>(zLF3?2YTt!M`V)#R#J2?wHB8wRq_zr_G`uOe9Z`$U}*-&!tcdccJ#iV6ZCVzkF6Sm{U#W@j4lRvR8unLu~)F?c0uC|6L z{+#KdHFxGRg_qV|R;-I|l8=3O)}T}5=hi(9NB7q=d|+=j;?uT_&0Gca3xlVtpUXO@ GgeCxP#j3sl literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/golden_bookshelf_frame_front.png b/src/main/resources/assets/decisland/textures/block/golden_bookshelf_frame_front.png new file mode 100644 index 0000000000000000000000000000000000000000..377e19ea534cdfd0343bccfa5f8657b19e8e0832 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|;0G|+7Ula9YXFX#%;o4{`XKmRuHv?l?A!jYwRb}?+?gow;GJC!Bsv|9H zqpU8K8`efy)^ER!LMMp;NbBz?gj5#+!_@N-U~!q8$7Ju;^uf( z-$4D*f6MqoPi7PsIKAhdZt;O#;tJ=wF3y^Lq0Y-Y Qp!*m+UHx3vIVCg!01-KB(f|Me literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/golden_bookshelf_frame_side.png b/src/main/resources/assets/decisland/textures/block/golden_bookshelf_frame_side.png new file mode 100644 index 0000000000000000000000000000000000000000..ade76ecff1c0b76bac3aa124bdaee3a102e49829 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}}0G|+7Ula9YXFX#%;o4{`XKmRuHv?l?A!jYwRb}?+?gow;GJC!Bsv|9H zqpU8K8`efy)=Mdy&S1LEwQ&ls?7e7B zk&qguy~=Wv^cQaadhf=Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0$+)jB!CE#`pp$Fu@i&ea)kt&YhX-RM;5(EpE>J?ss439HO_S4*UZ_01AMR zV}H8GHyIchkp3FiW}T*OXGMq4H*I5)uAL&#a`G>+Z2ApBRuwt!aJg$)pkb?xASlDF(_;ben;IuE z9`F8?NLLR28ybQ(`+mH~&k_tb9UxgdJ$d!;!fM7=TYWteYNf2r40ZOjqyI#6SG1AY zQaq4yB7<%_7z_B=UkIzgk(N2=W@Kmhc+Z)j&rCWl&Yta{1W(!SJ zr?Yx7k%H!3jOXaYWB&Y|w@5Qo10-dPbsvHJ7PhzUX0-5RrE#b!y)CY13hBHIu~}_$ zUEdZJ0l^}|*enQ8s%(f=dpc~c0f&>S!u%Fr(E-@VDCWo|N?wb@ z%}_8cA}uSL58K0ICCp~kB~|3IrY<4F%T(43O|y|$QuY70w~5;V8m#-ViJ1&e!DWN^ Y4Y9OM;xOYG6#xJL07*qoM6N<$f_%|pvj6}9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/golden_bookshelf_side.png b/src/main/resources/assets/decisland/textures/block/golden_bookshelf_side.png new file mode 100644 index 0000000000000000000000000000000000000000..72caf2565419368c016576e6b9c3ad0d2dc93bbb GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lig0G|+7Qzc1589@VSAQCW9l<+lCHGO;inP`&bI^~l(x{BE zFjtn0HBxrgl8vy{_cK-B>!nv4ZDpw{<)S6)sv~c%B7M2i&{$U3P)5j9S+XO}GTc@_ zz+5ZYSiku09mR8WNqMtweo1Kv4Qy#O;rDL-<$=D Tt5ygB9m(M7>gTe~DWM4fW8-=% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/golden_bookshelf_up_down.png b/src/main/resources/assets/decisland/textures/block/golden_bookshelf_up_down.png new file mode 100644 index 0000000000000000000000000000000000000000..c0106c918e8e56205128611ab0d8b47abce596ea GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lh(0G|+7UlVmRB`I$sHB)6tQzgl8JN*bdeN!bVKU0k|2mM$hWoIqf2wQzW zQ*{?DSyvr-OBJaAbFFY&{c=YG18D&hMR8*}Q8Oh;0~x_^8+|8D+1HK-^?-(R7I;J! zGcfQS24TkI`72U@g7uy*jv*Ssp?%RpPKF%Li<7P_3SIwo=l@ozjOB}eHZZ(p^jOVt zsmiz~_vTjR?*Vox)lv&~?7s9dq>4BAaJFsu=~qehL8qJ3#U@^_c)Y-ZF@$Z}oCjhK zK_3_{-JK+JJL>x1i!L>4BJ2OC-mLyO75STeGsl~}fnFS@8`FRQ;a}$&DOG|8(lt3220mPjt z$#8oLN{e#9wxlHMr{<*QrskCt>l^AB>SNPal9`5ZVO}vbIDi4850U|DGr+3Nv!Eo| z1Q=4T6+rhu{RebtGT7eYk`#R;1^Pw?1{S&oM!H6p`f&dNoo|zpY*mt3l9LJ!IJken zA?TP>f+`A94+?^uOi;*LgmM2Pbc&~**oXyX8Fq7TRV@hL-01zrU|&hTyWkcU$Iqf2fa&I@Oe8abmlIod(OCoRXQ+Qd0j4 zKXWK*FVvNO#*nj*%~jAtW(k{1^N%Y9yj~m)HR~2N-F>h={+^*t{l~6_Z*Ir7trK4m zu&C`T4^M>f_0@YX{-0l;kQA^bMC|G0tP18$Tu+K8JT;e$H(K#uJpIL^ptJ>Uk5Zhz zAD^$@`+t4foMem8UDF$1%RkPZVWUyvFzt{|`%{q_HaktcME00o_*s9WkoEA~{qmAc zKUyRlawHg3-2yf^H^uifMs*6yu_~O_ul;*^!`J(|Z24-YY_@r6ZKdn#qr(j+SAxj^NRUaoZ8kCQPx`z-x8WU)u`oa$3x z(AviTF77Y~OT<+n?T$wb6BeGBrXbDa{q;rX`-9E5Pn_~dTWrCwL^|YDBbQ9chfi0t zH^}(NJW&YPqM@bP0 Hl+XkKDRu}4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/golden_fence_block.png b/src/main/resources/assets/decisland/textures/block/golden_fence_block.png new file mode 100644 index 0000000000000000000000000000000000000000..170b1dde134e0f39b7519ea8ac998b530d1d2f67 GIT binary patch literal 2049 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}EvXTnX}-P; zT0k}j11lpN12aeo0~3&tVqgWc85q16rQz%#Mh%3T_DlvAsG2As4FWAd%m}BM7cfFq z1H~3F!Bs0PU`DV(+Dz8>MFJ_#0*}aI1_lvd5N4cms#l+Zfw?9#B%&n3*T*V3KUXg? zB|j-uuOhbqq>I6(!V1XDO)W`OsL0L9E4HezRRXK90GK4GQ<#=IWDQi$wiq3C7Jno3LtY6lk!VTY?YKi7Qq3;ohiw1 zdkRX6a=^BvBKW=|(^rz2hHznCF*G=U0izF+0ctbAs?D>YB-sQQ zQmz$1_dxvzbZ9cz-r|xJeIy0?Mg|5Jx&}tNMwa?;{{fwElag#zl39|I3Jy59f50K= zm{Wo(3Q`XWf}BiH$Xewj=B3*zRp_RqrX`lOdAn*AbABUy=_@ zSVfu1o_QsyMFmB`LLa4Z0GgB_QRK0IgHaarW7XawfNK2I0NkOb-qTwgGf$T?=szkYeoI*^mgs*4AJX5_4tkbw?7+XyfiwMjUIipkj;+>^=RI` zS1o2&Ek}D<%)&np6N2m$R|wtRD%(KrUNtX@iWV+UG-I=!uTl|ySDa=2_Cza31I7uq7lM8_CT;#{ zBf`SCgxyTKj;&#%Is24(>}Ow0Yr2yE`?9)%!lCo6nI~P2@qT`j*uW+yA;((v%i#LV z?(N^-2gS|5Gx2Q7%x#jAH){UKUEf{st>bngGozzX;#TVm;c+ZV$yFztR=)o5=b=|> z=6(<3fT|MCqOf}xuAWue_wTR&93g>!uB>NfYOntmQGepug3GzBng6;>c*Ohf9=UdE zk%^pSh|HSvGhB|zd2F=`{BCquA@tpu=ZQKRZeP;vE2fK2>~jC67U=M{GN|G1W`(68&_Zico!OkUET`V1H)E0m`yi!HUC`S? zzCTFSKeLDN>1UQNJS-nK)^a>mouwlgwb;myF>&%0^S$y%zO8b~x%2$^)!l1f{W3Ku zx|>d&@^vl7kn+>qT-fll)2i(M#`}`o1r$Ta5MWw>W&z>&xm7L6((@K-~=5a09>f5I9=P!HmrX4e0TScnheDRt&;Dx)X^!@tO z({t~{&aB&WrFpdm*FL_Ef(YFWGb*=c-8XtP@kG$+nQfi=t3zVN&U!C?IXiem^wq_O zFFrV;Akuf~l+iq{xLfOISg7nzDSc-6H9Oa2Rl1E-x3bvvG~YbaO_u4WeAv>AKE$U! Z5Lex;WjgiWYhF-2=;`X`vd$@?2>^;&@eu$3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/grape_crop_0.png b/src/main/resources/assets/decisland/textures/block/grape_crop_0.png new file mode 100644 index 0000000000000000000000000000000000000000..7ff4b9f35f3140066a4e9f2f28016de45af85235 GIT binary patch literal 375 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1M1^9%xin&VxnM>zqzXnoFB|(0{{~4ZcH}C@TI14-?iy0XB_Jc5^1#7Sh zQ1FeXi(^QH``anee1{cySRVeHu4k6*CHncpr;DqSmP|NN!9GdNx6)9BH|=Hx!3t>?~12Qf}}mgB8e%gs6XvO@Y=;r`=U)|K%MO6nTlb+<;P%O!mftnhsu zS}k|>({1kEO6xtdszNTxEO&G+)A`6^Cd0`RCh$0)g#} zH#qP{bu`UbPx#1ZP1_K>z@;j|==^1poj522e~?MHWXI0001`pKI#?0007XQchF<0OhwZN&o-= z32;bRa{vGizyJUazyWI3i3tDz0b@x-K~z{r?ULIL!ypVp%m4rM@C8bxDka&Zz0_JE zMD_u?9<3cm|4D5TSC`JM5Qfd+6Qsr#fQXTw<5|VRb~En{bqb2>Q1F~aReUr&BLr{> zzeeA{M~Vao0gO=-FguapMPfBifR?eC#^^PK9y)sf4zN?qq4vwTfNw=}ALylD8TL^; z=}ZtYs}um!+*@&pjtA+=_Bufho*jtZ^^!!+rMs~VSfa|YI~I}76ZA)Jj#&ALMZmDa zEh4*~V;R7=#qF+ujT0y}LKsE}v&%qqIl}Q8*#vk~xz~)zk-CKpIG^1&GC&lya$2`9 z159C=mQo_Hk(FcEz6x-zdbF)YaIqr>gg}~hS2cmdE0_&=bv4?Ic^SHIgx4FCWD07*qoM6N<$f?)E&q9iy!t)x7$D3zfgF*C13FE6!3!9>qc z&osq70%XlerVq8n;uLbtbD`O5ql>_@Wz^ z;$Ftr*{45O=J}ud_PdQX&)2$}5>h@r=P>J>U$amCnK5fa*8fb_oeXELhy}4sSTif$ zUwV4=io;*`T+?evnc43=d(AKX2B$E7`BfD;OOw*Ls+t~nGJIq)N(fV8_|9c@Cbl^L zfU_8*N4un@pPOETr@`c&7=~MFi`O%#ZvJAhK~J*74>&fxyQI46;TNk0Bx f+ol3WHZ}%@3hB+E46_#iO=s|Q^>bP0l+XkKLKHY* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/houttuynia_crop_stage_2.png b/src/main/resources/assets/decisland/textures/block/houttuynia_crop_stage_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c1c44587878627621ed5aac4739e6af83b864b GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|&0G|+7ApPb0!&k3f{rvg!>C>lP8IrEa;`WiE)*&L^*^*{HLO=zj8&(|# zQamL=e!>3{fI;Z~xpP2q&H|6fVg?32pc=lzjK}j=qyPooJY5_^G=lf`I0`iwa4_qd zE}Z)Rf4J|#=6h#TC(E|!#{CT6lERr?J5^|Rse><5L*o~r1^j&1r|r<*y6#E;jFav) ddVQ@O!qerrg0`Of=mIp6!PC{xWt~$(697F_Sr-5R literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/houttuynia_crop_stage_3.png b/src/main/resources/assets/decisland/textures/block/houttuynia_crop_stage_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f93e953f5cf08f79218fa6df499a3c5cc04e5632 GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|;0G|+7ApQ2s!Pj3_|NQy${rmSXzbyRn<;$yAujWO2Obm7^bXLiUH7O1@ zD+@C(549+AGRZJg%(GWcHBta-e9|DX07!|H1o;L3#{>-i{?7%0@|*=8k;M!Qe1}1p z@p%4<6rf<3r;B5VM)1-z2l*Tvcvu47Bt<)4{Qp0ElXd9?iEH5#m zWy*1rt76?Y&%>ld3ctE~IWR8J-oWXYuxz(vPeQrnjE`HK_A;c_>7NsOCm#1)usc9q RBNJ!?gQu&X%Q~loCIETeb2I<| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/ice_bookshelf_side.png b/src/main/resources/assets/decisland/textures/block/ice_bookshelf_side.png new file mode 100644 index 0000000000000000000000000000000000000000..824d53c676f39a5cc30796b1d622e81ff5f7939a GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lh(0G|-o)Xrn2^PU#ZdXzu)wo7cgZBV(MeY9b8pO#;hrEkGRLBSQXxjO4O z43ig^8?f&Y6D#c#+`4sZXJ@BiUv{zvYg`d8Pj*0P2B)W|r@g&>W{7d*=I~cQ!#N8) zB8wRq_zr_Gl(5$Pcbe&S9!O{lchl?hWVOO=4$H zsfc2WpQ);u>l^fj@6AOW@7cL?&Q%smO1(H96(x3Q_MxQ9A6EFNnr=N?_59&R`PwF_ zS@Z7BW|yvro1D2z{_^7KKlU6cy|dx`rkbFTzZ|dcPHz2|slZUfsFTXEOU)(L2k34F MPgg&ebxsLQ0I{TpL;wH) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/ice_rope_block_0.png b/src/main/resources/assets/decisland/textures/block/ice_rope_block_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c2fc147f4a0d1ac82536742327de6411773f93af GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3( zJ<}BT2#_^jJY5_^Ec{C+D)KiQ2(+GGyew_@nV!@#PCl743#SP@IU`edP_Zrchwu)| zf6lzKmUz1UcZmJE>CPvYh07j&+V^_*caP}nU5~bUw>f{byt}M&;;EF%(tR;MMGK?M z|33ctt}QUyeXYj3-%EP>5^T1Hq|FjHxWbz(DZ91w@}7#Gj^KITsas0V2ozu5lks}f z9;W8Ix2$sKhAb0xz5AtQ|AQmD+Zip?zdirS)_ix(v{M(Xgx|}psPvmB^*!VDfe(4} zf;HX;*#DQm(HX+#vts^z{ts^rXaAir-Q1dS^SgGZ%JyFi&+d7cdzZiUQ=0ngI*!W4 fr+rP|{bVY+l)F@Wao$;={~0`8{an^LB{Ts5lZ&P= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/ice_rope_block_1.png b/src/main/resources/assets/decisland/textures/block/ice_rope_block_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c46e569fb083ed381c5ab4cb8bf7b043922c1f13 GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=Dh+L6~vJ#O${~L5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3(J<}BT2$0D?JzX3_ zEc{z1t>-$FAaXR{eC8VF?yk^?%g=Ju9DBrO$L6r*i^d;H`z))I=4kMP$!xRC!=A@G zZXeo~FLUm__4j_;`||hIX1<@jQvUYL`PIhz@4Tz4-BV*Sue#pgFe`=TPSC_L_bd9q8KWMa=2X9}r(<1$v%vY9uHjK&60Umef z{SnGIE4U=fUuTwavi6c3|228%N~@DXi?0!lvI6;>1s;*b z3=Dh+L6~vJ#O${~L5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3(J<}BT2$0D?JzX3_ zEc{z1t>-$FAaXR{eC8VF?yk^?%g=JmIg_^Bc#~wDF?Dat*=N=fXPOc|u;!#$9+Es> zc=yn@e3^6at-tr%#^v8vnfZR!%I9y-`0rggf4%wsJM-c*IwCs@n@q;nge5a$3s@*3;|`1GglZ7&JtTI0PV|)GGzN$rOuf%3<1Drzjr z^WVq0*_rwOe@2tfpWZ(K-0#i-=#3%IGQ9Q11V7KR@cr(U1z-xWy&E_^gEUQ< z7X?*S0Wb^$Y1?v=rT{3VxDsL0G;HrQ>xD4A-<@-M2A8W9A`%h-y0&Fm*8zdn8WG{@ z`kD=Jzk>u|UKAl2Kt$-;mZB_)t*R=t)(peIv77Nt}`*|jb1P-vQGSxE3ay)Pmm>HEzM9UQ#_NP1(AxO$$k z`J%C)N-26{_8PEF+1R#+!&>tqsXu`8d95n!N^b#kfP<)%#lO zFok(h@NK*0MV{whrb)uf*^Jq27L#HxU|H8e<&!jJbnYKi z&yo39l4lv4rU?p<&QX*lUE2ok{#a{6v7o{0nrPpF!}i5&C_}z|MfcqA?6$Z1@5`?4CFhT{K(%ln zJ+Lhr|Y(Lg`T$Zk(hIO^DXUZsT#%=+tx>I)ybYI z*c{}}Dp00j$S~7~$BQRe!X}buP9zUc!>yU3Ju^h7G^n}f-`-aJJ50PyGjR3g-QiPb q8O(55dt$|{saZ!B2yihipfllT-G@yGywp1sA8A^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/item_picker_up.png b/src/main/resources/assets/decisland/textures/block/item_picker_up.png new file mode 100644 index 0000000000000000000000000000000000000000..5fdc787d7ef0f46f7ed0eabb01160a1124d3e7f3 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFprG6X53;8y%gIkx^b={-1%NwY3$f z90GjZmbn30oCO|{#S9F5he4R}c>anMpx|sz7sn8Z%Zw8k^8YiWm7A9vn;WMwBv#Bh z9Xac`7(@BWSxY@Irng}SbpxtzhKW6DyW zT_=w-l%MEoiCQ_coFT1p%~H=9)5RFXK+Z5OPuso1yuI!3-(?_Qc)I$ztaD0e0ssem BWi$W) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lace_block_black_side.png b/src/main/resources/assets/decisland/textures/block/lace_block_black_side.png new file mode 100644 index 0000000000000000000000000000000000000000..d35ea34e8c8cf9645c67021e6f162ef8b25c41d8 GIT binary patch literal 1235 zcmZ`&U2F_d6uw3^qg5mXZMQWYL4)0yt`<9H%j#CUbXRQ`?E^ZUxosyqJ2PhPW=G>E zMB^uZLxdn6LD({l+T zQC_hUfa1Kog(NwTAQqEkF+p6~cJVW2o~k#tnE=dgvhPXjPiVscOg<*ZT2X7bi4(Pi zN077*=&=$yMgzdFv2;ODF*FRi_z{TH#?mERB~_6mLkK zTr{{ovm8f$x*H*#W0+JbAyU3_5jb=7ASHKK{}O7$}D(r|wmvKUekG;{;^ic@W@ z*8dUXnf?^sqROatZ24d5?3$dz-~t9pX+}KeSU$snB#5399 zu%qmNK^0GxfyZa4`nZHg&k6+tvC5Xjslw@l?6kV=eFtXcFYVoX|5tq|x`imZ{r)!n zGTFZ22LFaXIeN|m77j&@ygIw&%6)J3YwPNj3zfZt4dULO{EfrptF`jhjopW?eS@Rd z3-7A&mu)v|-tJ#^_}Qa-n?HPf{NmVy?>G7?&cFZibs%pKcs@%0-1p>3jXnRN`bhB3 Iy7q&=0sQEW5&!@I literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lace_block_black_up.png b/src/main/resources/assets/decisland/textures/block/lace_block_black_up.png new file mode 100644 index 0000000000000000000000000000000000000000..1daf2cc4b9fc73432954e46af754001673c0a226 GIT binary patch literal 1217 zcmZ`(TWHfz7|z<-#m%}QGDOAQ( z`ldL%4fJ8`Mf5?uJ_ufz7ZgQ=4G|oOzNk|~aR}m*s3&RHbU5N?FT*g*5$N*wqI;!r;#PFs?5yZRw-UX#(}!K1s{V`uThbf!V%Uun<-g)9P}~&m zj?`X^OZy!a zw!}mSVpyqm4d@uQw%a&MI!2Y}7-l^tMq)4)>}Gf+<%$c+AaG?;Dnerz+nQ11{4jvT zAV`WbN6y{7PZFZQk^NhObWm*rLtf?zcv!Swn&^2<@gkwXxw3`M2WX;-?z zrD#d2-sAC5w3~9foe1I7_sKAxamspajwDax2Rg5bDijr&Flgh0$_V60q`;IW@C9mh zM3YQnfv123Qb2|}Rqv`d)S6f*CKiOqdfqH#8)dvfP`UsOsE}_&CbVZzt-N$3f;ahf zC{RTJ%1zVFPTK8sd#HKoNW8!^P=pdN9U;ua^u;T|qEvpDl4xjTq_~{q$c$3}iTH>F z$(E1fmu62*&Ym3oFgZSZ<}gbc7D!?dK`vEH%2G>8v&IIQfnK01(uiSYOMQczHMhMe zYkWN8$l+uE#TRE6t+86k(K*GB}EhjkZ%d#;bc0nB&#Yx|0C_RBNp`!7uJ)0VL)ck|H9*pKnkx8JAE)!eP_|2?&P s^uU|fcg}{s?09u;`oL5D;>6(x71DRhLuxL%-}nmz+C%=UzCB0&0+NS_@c;k- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lace_block_light_red_side.png b/src/main/resources/assets/decisland/textures/block/lace_block_light_red_side.png new file mode 100644 index 0000000000000000000000000000000000000000..1229c6b9b7018f8b86d31964b9a0e2cf18da9b54 GIT binary patch literal 1707 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lampshade.png b/src/main/resources/assets/decisland/textures/block/lampshade.png new file mode 100644 index 0000000000000000000000000000000000000000..164b35ebc4f4c446d10cbbef626d74180a16d490 GIT binary patch literal 1806 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}EvXTnX}-P; zT0k}j11lpN12aeo0~3&tVqgWc85q16rQz%#Mh%3T_DlvAsG2As4FWAd%m}BM7cfFq z1H~3F!Bs0PU`DV(+Dz8>MFJ_#0*}aI1_lvd5N4cms#l+Zfw?9#B%&n3*T*V3KUXg? zB|j-uuOhbqq>I6(!V1XDO)W`OsL0L9E4HezRRXK90GK4GQ<#=IWDQi$wiq3C7Jno3LtY6lk!VTY?YKi7Qq3;ohiw1 zdkRX6a=^BvBKW=|(^rz2hHznCF*G=U0izF+0ctbAs?D>YB-sQQ zQmz$1_dxvzbZ9cz-r|xJeIy0?Mg|5Jx&}tNMwa?;{{fwElag#zl39|I3Jy59f50K= zm{Wo(3Q`XWf}BiH$Xewj=B3*zRp_RqrX`lOdAn*AbABUy=_@ zSVfu1o_QsyMFmB`LLa4Z0GgB_QRK0IgHaarW7Xk=hun(gW07!twxHf(?PWk-?v?@w>L z-r@3H)EwR3^r(O7><1~^{QP1?TJ^rlXDDcz{A1ka92m&19?Qj7sBPhCa7}|tH$`BL zC-c#Fp2hc`FMVIMcaHDALZN-@O)9_Ndw#F_`_Ag}z}Bm!e^*yJOyJ(hbG2+=fZptf zhIYH|>K!dS^EmBwLte~oCp$U6r6RHWt7aB<2u{i=TbBMtu%^9z|H{iR1>EcQ?OgUw zZ*7K!R}Vz%7R30!^knIRW1hkEWsr;e4-q4Mg7c40{~CnRj>jQjuV?1pll$)X~s>o%{s_1w<8Hjme3 zrhSLX{w;so;+}r4%Bz~S@Ba$HnN1Ivk0t0TOPoFx`z=AF3n3i*0fji(G;Oaf5Nbag|Mj$b|Bkml zt_QM8TBQHy?|q--WM$lN^8L1XD~nz(oaCT)cG2N*Jw10eX->YkYX1V70=F&HbF$G4TW~j zpRZnj%U^7MR>t@9*Y9t8qsvd+=Q=a>_=_h?xu05GKGxsYec)@=wcXZ#}EtuWC_;A2_hF5-&_p&$A2h5FYExv zQbPuh$J}zR2GNgB*RoB2UA}QuYSSf&gp0LmZL!nk58b@M$jr>}ra_=BcKy*npivB- Lu6{1-oD!MNS%G|>0G|-oC8jQWG?n8xRDlA^1K*qisVfQc3;zHAKZAqT$}d1ZXMsm#F#`kN zVGw3Kp1&dmC}`yA;uxY4eD%z2P6h)G=ZiMq?(e+*DBL_lK#@JL_LH?oT6APV&k0Q? jgA-p){_}WOdz*QpE7RFM>vYP1x*0rO{an^LB{Ts5&Qd#j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lava_flower_crop_2.png b/src/main/resources/assets/decisland/textures/block/lava_flower_crop_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b6c89ddc480fedc7ce99c00e34c564290304092a GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|^0G|-oI1becHKY5!vP(=|_Gl^tg}pDcO#)JEB|(0{|3QFZ^Zq6Kfg+p* z9+AZi419+{nDKc2iWH!rou`Xqh(_?)?t_913Ot7#Zv744cEVeI!~7|CSpVMfXNr;B zC%D6BQu4G2LD!WEf*Re5tmh}6FLOFvXmIBGUdCo^7PqT@_oIL&F?hQAxvXNS%G}H0G|-ok5wH1H@JSBXnNmQHjYEJLd|H48SfHPmpz)wKqZ$J`AY&Ru96_X z;Quhdu<4A>d7vm~fk$L90|Vb-5N14{zaj-F7~<*T7@`rpwI`78fC7heVE2K)`g_7+ zeZK9lyYR_lw$A4|Ifvss?gUSByT=?2{Ah<~0M&XYh3Ob6Mw<&;$U{##%Q3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lava_flower_crop_4.png b/src/main/resources/assets/decisland/textures/block/lava_flower_crop_4.png new file mode 100644 index 0000000000000000000000000000000000000000..3562e002b60ecbae2acebc45dc12e49fa44855c6 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}T0G|-oj|+l7PBi_$!S%kc?8hpOI1becHKQ$Nyh}`7_Gl^tRc)0Ne*&bq zOM?7@|HA=;mp|htpfG2FM`SSr1K(i~W;~w1A_XWIc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxOgGuk#6rQ`QqR!L z#K720N5ROz&{E&PLf_C>*TB%qz|6|jTmcG{fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8fo2%#8yV>WRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdm`z^NOLt1Pn0!io^naLp=kKmtYEgeeo;J&4sHjE(uCSxEHIz#UYgi zsro^w#rdU0$-sz9QwCX8VC7ttnpl!w6q28x0}I7~jQo=P;*9(P1tXx76g0v!^HTE5 zi#5R-e0{Av^NLFn^O93NU2K(rM(AZ`rdTPQCg-$LND%7AdA-Lcrt$V#3ockONQosd>QUUIa|n=9Ww6GB7X(dAc}; zRNPAX@&CU)Gsk15u4`5is)@g56l5}7RFH{VdrD!+f`-d%Y9(hCcok+v&Y916q;Ioe zT0;M%qM2eLSn&;0Z<+x0(DN=&wrTP)i6x#;0=-ZZwp=Jyg;l9x*QmEK9I`2K)V z`3$#&UPEJR0JDQbe4p@|pU)mGPnf=-n*AMcnRGJ^2_>J@BUYCRk+NO5W`_`l0xy@&*YH;}ZrG7Dn(M6lFV+ zBQR~vro&QfJT0G?e1vzMwfM}W*PzQ#Sj9LyyyIN&5~cIgAza;x@Z zsorKF$aYBNAkW7qO&1hxRHRroOS&EAaVis(Ffd?Xm|Y^&cDJC>184|?r>mdKI;Vst E07G6Y8vp=zU3tHI0qbbQEcg*7b8$6^S+*~+HZ}N zVeEweeS$vCIqf@JxHVKx@gz=WNzh|p)cMEG_$HBo*+9JE!1ek7Hlu_D28J^(nz?Pa SFa7|!fx*+&&t;ucLK6U@*hp>w literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/leek_stage_2.png b/src/main/resources/assets/decisland/textures/block/leek_stage_2.png new file mode 100644 index 0000000000000000000000000000000000000000..dbbf1aeea4b75e8bb4aa3488c5d1f1178582376d GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}@0G|+7Ak8pQh@nP+VYV!uwk@ZOb@A?rg%j2F zU-EofeXGu=EVq;`v%xCxG@ac)I$ztaD0e0ssjB BU7G*^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lightning_summoner.png b/src/main/resources/assets/decisland/textures/block/lightning_summoner.png new file mode 100644 index 0000000000000000000000000000000000000000..96a231f87ed1759b20425dcc993c001bc4564ff2 GIT binary patch literal 468 zcmV;_0W1EAP)Px#1am@3R0s$N2z&@+hyVZqen~_@R5*=|lg~@SU>L_g(i#qGys^?;Ho=PUXb{;U zx^xYqf3~4O*7x#056}1c@#T5mOym0c({Wt@gsL(R z6W#6S0CajDm2#eo`Xl=#55q7L1+t2glwjL7 z<;nq_o|hmV?QL>p-U9Yak%WZa^E2g26u2^PDH%ncUL1<+f(3aAvo%0fopcG}_!!O3 zaQALf+W~l_Py+BcJFQW_F%d$fODG7PuGYcOB0`}b`Gvkt*Xb}d{j7wxZ?QGhX)6{R z+BR*)0^jFh`JR%{dFb6IHu38gJX~_X2QFK>O5cA)>#ovYdPSB)WLZv^5XWSE2%|T4 znW+-uXe$=dRMNi=36lRH?#IXfQ^J2CLG-JBLl6W}r)>7yp2im>n8fiSy`iT70000< KMNUMnLSTZb3Db4} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lurk_block.png b/src/main/resources/assets/decisland/textures/block/lurk_block.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c9fa872260b480e2d2509d459e952b00358ed5 GIT binary patch literal 482 zcmV<80UiE{P){Zl@0pNUmwhl)4cdq=?coJvp7LhAg zQ7{-I!`2}8+g3poHG7|sE3^@9cWscN@1CpS`;Wf73`t}fXK0fi9SZs}u)TM;)#mJL zfVxROd?Hup<1+!MMX{XSw8m|Ka{b#Gz&yCWL1yDKjkDfC|6fYl^p4*&a9czxvdwMy Y3xa*NB?viUp8x;=07*qoM6N<$f{91n-~a#s literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lurk_bud_crop.png b/src/main/resources/assets/decisland/textures/block/lurk_bud_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..0e7edf36bcfe8388d815f6e8043ea41232be8565 GIT binary patch literal 1239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!6#=yXs@#Xw?AV;#qHKHUqKdq!Zu_%?nF(p4K zRlzeiF+DXXH8G{K@MNkD0|T>iW=KRygs+cPa(=E}B1ny1MQ#C5Hv@x>eMLcHa&~Ho zLQ-maW}dCm``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQY3>#8=6=sm|N-@ znwc0Fo9QSR85mmX8(8QY8tWPuS{ayGnVKs=ffCTRqLehNAQv~NT|l0#QbtKhft9{~ zd3m{Bxv^e;QM$gNr6te|BYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcpATTy016*tUoYod3m}x zhE&{2`tkq2Ju`=ap#!4>!$HQy2?+=4*Ll>lH83PGtehBUD!)d+=dej*NJB;g!y#Ug zb+YWM6B=Ls-NU=7Ye?fB4H4Jsy0YI-AG9F)Wss?cX#bgZZo~ zAAY~`6=DCgucrB7XfV5Sm*|c=yaEmpj6Q}w#;aCO{KFB%!0$H0T7hpLW4XbNi4Ou; zoAeVq6Mo(P)SD3Bu$MFFBx-4?von7ZnY)w**U^50CM zg(^NmIb1>v92eAQ-eKT4>~O&)fFbn5f{F!3Q3pP6c$DL$^HgyDr@q(gE@hfDeqAp7 zsIMrf`NUJswujnLJ()pACip*AE$dF2G$Ca61L>Qy>^~S(?^^PG*Yvw{He7D=S56U| z*tth1#V&8FpNm!g^Te6z!5{z5+nf~gZu92l-8x`A literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lurk_end_stone_side.png b/src/main/resources/assets/decisland/textures/block/lurk_end_stone_side.png new file mode 100644 index 0000000000000000000000000000000000000000..a8873e395f5eb961ea425edddd65533169b17b2e GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}x0G|+7vAQ&z77$)@|n>VPIo= z_12VczxKZSw&m!)?z!7pe*v{~7I;J!GcfQS24TkI`72U@g7Z9G978mMMf*7WjwyDiz~OIGZ&$}V`=v*|V4)0@*yGWxW}ISJ0ne||$~@r&yw%7=_kwpSc5 zd+xMCZe_~U0!Dk1zeIkppxHgQu&X%Q~lo FCIC=zVQByW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lurk_fruit_crop.png b/src/main/resources/assets/decisland/textures/block/lurk_fruit_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..c4025154c9e828e8c65fce57a7d4cb68c79b8a04 GIT binary patch literal 1229 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!6#=yXs@#Xw?AV;#qHKHUqKdq!Zu_%?nF(p4K zRlzeiF+DXXH8G{K@MNkD0|T>iW=KRygs+cPa(=E}B1ny1MQ#C5Hv@x>eMLcHa&~Ho zLQ-maW}dCm``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQY3>#8=6=sm|N-@ znwc0Fo9QSR85mmX8(8QY8tWPuS{ayGnVKs=ffCTRqLehNAQv~NT|l0#QbtKhft9{~ zd3m{Bxv^e;QM$gNr6te|BYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcpATTyALtl;P|PC5G)xGXd_YWix&?CJDL*w2nB0qi={lyJsUDcM96Vhd zLn>}1{rLaio|(g-kweb(?0*KvBMnR}%*_9oSp=9pcsmvrytRm!#p<#ret)B&M2@Of!@uq*eF?95lEd98;RjlYF3w`DUX=AItC3qi${Y z!}Ax-U5`;;$R%29&@OyLDT*<6ec$uF`H@nziQ#G~yH$ifvjL3#qC@|o_Qo}LdD z|BGH*#mFc)JWMHIQQ%;9+{$=rE0gt?ME$w~*%ZBp5`+|GTK-|+wa#^p@6g0-(S$;h4q6)>KzelF{r5}E+EYMy-i^1 zG=c|0eftT>=bO>zla=>xPv3p0Wh20B*0PbH|0aC(gt>|&6`orpX?{;uE)^g=*PISM zezk*s2RJzV0<^6hnE639j%MSayfvm8M}YHeBj|T*wY$gb7eK!9=oms*0^DB)2B|XX zNG629s86Sx5j1zNPU-oqew36?KDihKvj1!?NfBAt2rLFo8JusduCagCB zTdppd=7+BQ+pM{M%R8tm9m~}vJ322~j{zn}`@`$Xnw3u$mH^?o(RpF(dF*x9fu~8T s4|G#+&tEMYiT{nazuk^^hPTK257HILU2SF3)&Kwi07*qoM6N<$g5MnHtpET3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lurk_mushroom_lit.png b/src/main/resources/assets/decisland/textures/block/lurk_mushroom_lit.png new file mode 100644 index 0000000000000000000000000000000000000000..eb51a84138a035e0ea2179630625aa0ceeea964b GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfPPRAspTSp!!zG?H~(MfAAStQi#qBHeG ze%6+dja~V>pWmx~C#m=6C*zUD0XK7(+RLeJ$=ZDM=%x?HonL$rvff#-a7XUT@4Ht{ z|1_Id=9@-d^fL7o<|++Ax(osD_%GP>AHMnABwF>%y4MWTiWwKUEz;v*I8@5e@T`(S z#(nY)OVL<~6^9gj&PoPuR&CIj88pR5^7=lf?Q?e@tB&QK|gBd-{tll7jo4F eZDV|b)AQx!OrFLY%(4f1j=|H_&t;ucLK6Tt25}_- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/lurk_orchid_crop.png b/src/main/resources/assets/decisland/textures/block/lurk_orchid_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9c203c1f28ced5c984c50281d2b608951f230b GIT binary patch literal 1264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!6#=yXs@#Xw?AV;#qHKHUqKdq!Zu_%?nF(p4K zRlzeiF+DXXH8G{K@MNkD0|T>iW=KRygs+cPa(=E}B1ny1MQ#C5Hv@x>eMLcHa&~Ho zLQ-maW}dCm``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQY3>#8=6=sm|N-@ znwc0Fo9QSR85mmX8(8QY8tWPuS{ayGnVKs=ffCTRqLehNAQv~NT|l0#QbtKhft9{~ zd3m{Bxv^e;QM$gNr6te|BYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcpATTyf_h9$3W5y`Ox`Qc?Efx*rg0@JqZ}}kFe@|!d_53y z;_0-1;d-lo^CuZMvP4>128JHUVc5vX#G%7*nJt)Qljsrl&dmo{_SaUNXDB{3*G1J$ zVm9kd#y^vSc$ge?@>4$jf4I|_!`g68*Aux0hNL5^oe#5SC_8Q`{NMB6VDij_rbS+- z9z0V zz=ydvuivXPOwV;s=Aot#`fjK0kQcfF1F2cFq|Z` alYznf#=qu2m#2IJl|i1aelF{r5}E)+vZ~Mk literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/magic_letter_box_front.png b/src/main/resources/assets/decisland/textures/block/magic_letter_box_front.png new file mode 100644 index 0000000000000000000000000000000000000000..92df03fa35b2f0fb9ba46ca1cc7191f3c84085fb GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFlBSEK+1i#=T&LnJP{_8M|AISR0xj@^4h(8TVk+=d%3nEM1T3)}kYUlf1wU-sI8 zSqZb2Eu0aV>baUJveS&)h z-Kjr2x%;MCO!m1a$tUi`aR1hkJtVs5C=>gTe~DWM4flucoa literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/magic_letter_box_front_with_magic_scroll_blue.png b/src/main/resources/assets/decisland/textures/block/magic_letter_box_front_with_magic_scroll_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..11b0f711dacd0e2a14ce3d136f066c2814cb6317 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}x0G|-o9aG{D%}wgcv{>ICnjWB2mt@|O<&hm`x3tl3%gnfqlaos$3})21 zcXxNqxpAfT$N{&xGiHV>Tmfq5EbxddW?8eR=R!3Iwk#}JL+(0*>d!wNjk zye(U&80`3;`Q5`j(^N^`c};{DzenU!5!SMamiB5%(;`jv661{{>mGRTG3%SX;>^^| zTgys!X1tz||HwAHh?nD|!Skrq&KIJ}zJF$#t7LLxJ^Qys0w3xflyy}02RkJnx%T3% njRYsRstr@!gQsPVYtrPUWm$Spe*ISobPI#0tDnm{r-UW|Osr|2 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/magic_letter_box_side.png b/src/main/resources/assets/decisland/textures/block/magic_letter_box_side.png new file mode 100644 index 0000000000000000000000000000000000000000..91dd79e00f3650ccb5c3e79da8c09602a47e2da0 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFlBSEK+1OFdm2LnJP%_8RgvIS9DkH}W_u5)@p~(91065T0Y$wN2y|=aYXv)BbmR z#??I&G+DlED@PLRS_ui(mowG!9|<`NXT6lDvy?w}>dd1(k7IvEJU`kQUs`m}jNR?i z{Ylr|_T34UPOr{8aWb`DZsOt@U*8p7Eb-MA{VKloamK3+KnE~*y85}Sb4q9e08O7? A*Z=?k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/magic_letter_box_top.png b/src/main/resources/assets/decisland/textures/block/magic_letter_box_top.png new file mode 100644 index 0000000000000000000000000000000000000000..567d5eb071c0d70505b3035ea18bffe2a3d37ff8 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFB$Lub^vcV$|vidz*4l;SM#h%9Dc;5!V$jK}j=qyPnz zJY5_^Brfar-R3=@z;lF0nBgshqR)Y3<{S0P)K>hoe3>%e>BM&-*T*7BOFg6=6c#Gn zix5)%@NVmKtGQDOwF4GymU#T|*W#wE)okaBua(_+rq7exaj@TW+f7a1GnfADpLm)5 XK?PTRCc7IG&^887S3j3^P6iW=KRygs+cPa(=E}B1ny1MQ#C5Hv@x>eMLcHa&~Ho zLQ-maW}dCm``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQY3>#8=6=sm|N-@ znwc0Fo9QSR85mmX8(8QY8tWPuS{ayGnVKs=ffCTRqLehNAQv~NT|l0#QbtKhft9{~ zd3m{Bxv^e;QM$gNr6te|BYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcpATTyW0(H_O4<0Z80*^q3b{Q7k~1WM+8Pqsq!Jnp|HYU7 z`Ct9Yv+dN@QwjSvKeKMzd%abmtYPlrz4IsL-ZI}H+Bc_O(&T@kLBiHW7cNS?S5o+nZNCB4;N4E=^GL}=k6vY*!-K9$YtPp zC`tMqQx3y3trYPV&p#;)&&?GWBHaw!8z$*jNi6u#X~;0&hT*sSokWh>m3Kgel&7no J%Q~loCIFnK#LNHy literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/mine.png b/src/main/resources/assets/decisland/textures/block/mine.png new file mode 100644 index 0000000000000000000000000000000000000000..39211f1208d709dd3d255863226f4683eff5f6b4 GIT binary patch literal 609 zcmV-n0-pVeP)Px%3rR#lR5;6BQ%z4(Q4qbq!i2Dpj|en@QnBzTZTaX& zS`le!A5=?I0uLyGil9_sQDPJ+#Epq!+$tMZuru=OhIm z`RbV*l%n#cFe=)qg6i3P+sw+W?cmt9{dFTF^JBdXE?EG5H2tKD^y>9GeaMRi+HV2& z-H4Qn*Ohn0Q9eKnhVz%zwEX#0mhIy_YAE3EK|0joFA6H^4*Y8u`$hSCw8(CeM+(}ea=vUX$U-b2x}llJo#d}~Ji=08 z^qc~?{m<*yUS6P0H5nAo^XNM)kCPI2#QK#6DPYd3Eckz@Ot9ixJ3eRwKLAxk=mIKO zG^69l4s|i9oC@FT26K0M+T^NPVj-Ov-cSRrJQMC_02`=(9$Lg`e>d{HpL$7(r@C>B v3b37X=xEqBQMJ`-(XYR?>ZFwucY53ae)Px#1am@3R0s$N2z&@+hyVZsMM*?KR5*=Qky}q&1pt7*p3~Fzw1r-PmKJJDISgWO zD}yO9!it&q7_(`j$&B&c7vFp{jfoHQ#n<@289Qy}fZ#VbX_jqGUVPz-9 zXYbGO{n8fi&Wt1adaMzf)x<(HfoznJ^df4xM$2=V_|_(Vmz{7Z$bR;e-Y%I}r$)%0 zmWd}%*x1V;ghN3dti`!7*h}m%&!Edr>@ZLKx1R{~J2)=Yxpij=vq2BQ{Nosl8~c3x z`XqsV2l_-tr9bpC;b$tu(<(Y0w9nfN_IBg%cYsi!+w8$83i#Z10FFy_5*ZZ$q21|_ z*;wHBy)-X9=jWGbf|*N0=zyc_DZV}%+edk-jTV0q1YkVS$G49*0nn%NXVmH~>=qLM z%0LeQy2Zb#Xd2tVlxU?npn2i$MW&@%u2@$hVA{+{`7SG_)SE%izxqbaQ)%kf= zWtp4pHupMB(hds-Nl&p-$LF@=?2^%a@ljZ-R2sz7DgloJqbMNVjq#~gWmT4W%HZ@g zUu!vBb_)Q9*;8_7RfJltiQnU(RBK=q1y*)aSTv1Dr}IBqvDtWKQsL^QA;O^`xw9%E z#e-nRc}U~DgA};Jq?{qEmRa69qR(bVGDr+KtsG`g5nmh|h-~g> zxiU6LGFKp1s8Da7^V-x1*(XIZ2fIk3K)z5$@j7vI$yDo2-kKi8-X$XdjQL&su)NJl zu}Z$&rqO7T$fyht^k6ngENmX|=JTWcagYPxgSm@5j3(GkJwfof?HEM?y`ba0*>R*! zgZt}yBy$CpHV-fv4Se#>3#@J@xf&W`Whce0J4+~DCyLjJ{%PspKre}mipyzbT+`^j x{5FB;J$BM6Cc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/mining_machine_down.png b/src/main/resources/assets/decisland/textures/block/mining_machine_down.png new file mode 100644 index 0000000000000000000000000000000000000000..6db237b7bad1aa0ff40471bb7ac097b53dfe6d7f GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF||XUNxNz~EZH!@2z3g@Y|S9aD>6@cKCF zJ6L-w7|ia9_0;;ie9NxA5BENCoPBFWRA$UA)ti=FGbY5{$-FSJZ;oxAkJ$xYi<_RO zF2rB_6gY*w&!SknyUX9C-b1iF&o%O?O?c3|zYWO|o_cb=_N;1dGx|5bH?`iyea~-k d!;f5z#rx--x4M>d?7T9_;hwI3F6*2Ung9}SXAJ-V literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/mining_machine_side.png b/src/main/resources/assets/decisland/textures/block/mining_machine_side.png new file mode 100644 index 0000000000000000000000000000000000000000..57452b784b1f118726f938d4aad5f00d6f67e95c GIT binary patch literal 595 zcmV-Z0<8UsP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0q99YK~y+Tg;L8- z+fWd_aoi|4mg78#DG%jE5Q~H&5DHy%5s3=5tFkOzHA3P8UhH?Y;JMS~AowWifOR?p_f{6Z+;MrpOtgV&m!{AD9wGJyd= zk!2|c=#@Z@RK+XH07Fd_#amTP2qn}zHoqhlzvr~<+u7YkE}PAoCT;(0k|bp^wCSAq z1D4ILgB)BuQ}eJ~LGGxXYrY2?zMH{e+!o`_#xUc=L(Cj*5)KG=t+L!&NN zG(h~achXPPCTZ$_DNDh&z9#RQT@G`6OizJ-Ta7Iw+)#f?2Oz}*fNKD(EGZB`jcJ{; zVIR(^8ogr0ay$;C5t6?##%1Sy-+qo1wXP_<>2z$5z;l?GZE0okE&6Gu&A`8rR8#`R zK5-qoC4Bn7TqwgZLjk-ZQ3|nhG9-#4u9NdSy~~^TbljJqKXBhvjM#*T-;}NuhlaxQ hsQ$k>S{IsW{|4zL3+DR#GKT;F002ovPDHLkV1lvH1DF5+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/mining_machine_up.png b/src/main/resources/assets/decisland/textures/block/mining_machine_up.png new file mode 100644 index 0000000000000000000000000000000000000000..9d938534802db57d4a6aac718081dd469df79e45 GIT binary patch literal 621 zcmV-z0+RiSP)Px#1am@3R0s$N2z&@+hyVZr7fD1xR5*=|lTmBaP#A`v#9LB>S(2V~%t|G^vo+v+YR4BHLFsVUubN!!z;D-~_L$a<^}(H8>WNAkYs``)}K z^J4o!0`O&W7l0rPDcUwu1YxM_qHXJbZBYS`1voqzuyhA3%cA5sc%BEqU@*XHw=pdX z04XIKLa^UxaCqWVD+{i9_a416^Cea*6(&gnKqix6JRYNzVlJ1{6O6}Wq?FupT~z#o zVR9p#pyW6xm5$_j9uL>o>BTW|ug5G-yIp+WM@q?RrNVKml?q5HQA%m@>nBh76G_fs zQm?bTysWrHwU$FvM|PfGa!CLVX)ionO$sl#(C}F#v=ReDB5ns@!`^xG}2Pa zRNZwsZnbnq09~JTI(+@~mRebmdAxo*sg=clU1vbQn;!fVm~++mj@T3?00000NkvXX Hu0mjfxVadH literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/mock_strawberry_crop.png b/src/main/resources/assets/decisland/textures/block/mock_strawberry_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..cac1d2288b8dd4a3c2b87dd955f3309f7b263ffa GIT binary patch literal 1266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!6#=yXs@#Xw?AV;#qHKHUqKdq!Zu_%?nF(p4K zRlzeiF+DXXH8G{K@MNkD0|T>iW=KRygs+cPa(=E}B1ny1MQ#C5Hv@x>eMLcHa&~Ho zLQ-maW}dCm``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQY3>#8=6=sm|N-@ znwc0Fo9QSR85mmX8(8QY8tWPuS{ayGnVKs=ffCTRqLehNAQv~NT|l0#QbtKhft9{~ zd3m{Bxv^e;QM$gNr6te|BYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcpATTy`yfiRt0YlF* zq~cc6kN^MenK=v^Ii@PS{?EX8q=BhLMC2bcivY9FSus{!4rVomX{<~Q3{BhzZX{fe zt7!eNFLvE^1w&!Wo{)ddq0JmK>I9?}8V<0WnG?G-^8fjnR)3Bg2(!8H#UxuOXdhuP zm*f)9Q%mBb9)r7wy1EjM z?Plkfn3&ADu3_Rt!NXYs3>*eKL|-tneKOO?n{b%z?p=w()-^w;O=LT~{wlk~4JTO% z2f-e>x`@Mqk`^{~#}gJUoJo)eMryt2|*s%Ro{W1eRkA&F2XFt?`Ew8weaD-uB#DQrw doqeppvh05RpNZ>}9!i2rAx~F7mvv4FO#pb-v^xL* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/monitor.png b/src/main/resources/assets/decisland/textures/block/monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..f3f135d0aebd8d85a23c06021075b23a912a64ee GIT binary patch literal 599 zcmV-d0;v6oP)f#Qw_N^}Oy>rez=U#=^ z?*kB)jar(2_zGZc+YF?UuS|x$3_5K9T+uRjYhjc^r_JymM_9Hxji_eAvPG+*$^p7l zVc7rzY3SJ*yJXyTh(5W*R-I8NE2l$M4&vT`FiM5reu}FFw(0;%%m*L~GGCb}x4wJ^ z@TXesJ%0({=7T$bo6T#7hXANJ-TwhV&&~=D9|2H9nGg3qjouwpUcDF%j&eJ@y|=IR z^&)_?kNdfu-O=Ev^6Uw}*HnkYlQ-`bJbqeYe(>uG0LrE+2g{R-#BS+!Igkb^P)aL$ zb~gU*K{NQm7cj}C&GHz55$_lNP*JB{5)0=twtE700_-M-y0u$1WP7^P8;)cu4pV@nV>tx!5Md* zmsa#7fH#aF}?mAjA^INZS?<~q)M=iZ%>ljTinm}^Y((?;2N=6nWDUOdl liX}d^G|Fb2VRy=1=O2i1_=iMIau5Ij002ovPDHLkV1g!82ciG~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/monitor_activated.png b/src/main/resources/assets/decisland/textures/block/monitor_activated.png new file mode 100644 index 0000000000000000000000000000000000000000..b0e00ec9643d3d62e7c67e60515b0d1f621e06d9 GIT binary patch literal 603 zcmV-h0;K(kP)eH-+Tln7u+OsrYgN32NN`Q0BM*L*J_<^p2m*gKbG?RT)(ULLV3PgS;}Qc zH2cc)fh2QmD;38=h5_TV(lAGd%rB0ODxuCm%*;M~0Q_EF2JG!^ptZJH673{&vSKz> z>={=+ya#?&s|QbB)Nfq{_M-;hV}NP5UY!T_-+s2Ow0P$(Ft)d`#bFFoUOnGmeOAAI z4w< zn2tPeD_r2~?R&~}hW=%@B-%jIbu{83R(al5o-e~-AZ8{PT*|IIZv!00Izba-d{%V2 zd9|{nL-j?HIVI5^$#jAy&RJ`ipjMVT-8`U7hr{@EH`cPzWN7Sg){=%PrYb#}ecnYf z42CwKOh<+RpeJBksWeP!n9B2oI2Ib~WYnFfgYle%e(TN8O8;sTBs|5+^-QdSsGX;p`hilgWyi pPCVU>HJ0J36)3wyhRwbVgTJ16?M^!Lzh7wchG9LUyxd<_=_dXMrVK0&Z4cOZco@FT5;EK`YXou#gQu&X J%Q~loCIIsZFY*8Y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/mooli_crop_1.png b/src/main/resources/assets/decisland/textures/block/mooli_crop_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfb003637258906b86320c17f0a2d55a68bb6f5 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G~10G|+7*>Ypc`N6!A1`>%{K(QlAbK`*&Ye|q_@P8m+_`Qt}WDsY8M`SSr z1K(i~W;~w1A_XXD;_2cTq7j^&;K=Ok*uZ$Ejf+8(%}q^%+r`LegF)j@0mcO?Q@Dj0 mKFtuArD!5-+>w;X$RO;_y!XV#<-dXY89ZJ6T-G@yGywoy^E9Ra literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/mooli_crop_2.png b/src/main/resources/assets/decisland/textures/block/mooli_crop_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4bf8bb3c331c3a903eadeaa372f5d09c1f1c7635 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}%0G|+7*>dCTGbuhB<9H(tEawMHBx-HhwdTo_CqVfNo}DQ`inAohFZe$c zFa-No2!R9(JR*x382Ao>Fr%o3R|8Pc*VDx@L?d`_&qcul1{_YF8;<=|*SnNmbe-{3 z{|}b{`M;b6J7kaDInpLrG2fJ7g82MchswLsJ2;O@E}3jNYn5ZOm4{!%%;k%xW-s-< a%KP*u+e3~QyKR65GkCiCxvXNS%G}%0G|+7*>Yo_jd2F;ZoH8O5{X({cCER2^X8K$Pk{1bK@(O0DbA80zu^B+ zz!2lBSEK+1<2_v*Lo|Zt_ImOiP~c&9J~Qe6{vE>I&R3I_ z73XX;44nUy^O5gG!%wbKDW@)Z_AO~D+3@z;3{Qc>57hQENp`KX@xWGG@a$yW2}%F?NQqxn7&D544kk!PC{xWt~$(695+WUDf~q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/mouth_flower_crop.png b/src/main/resources/assets/decisland/textures/block/mouth_flower_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..451242dbf7a0850ded0030c02d642f64a1dbed8d GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85qP=L734qNaX`iP@=>&q9iy!t)x7$D3zfgF*C13FE6!3!9>qc z&osq70%Xm7PZ!4!3;(74hJ1$%cwCFwjxcInnaMgMA|bV<)7hYi&#fh*N= z8F&9okhk=`%U5%9)8rra)_yMky8a|&Y_{M~k}K|IO!#AVUEpg@q*)|`pX!6!eX0!a zos;Do)N*Uyyj%G!x`Br=!QsH4opW5`ZnH?SI8;1wnKkjN+QN%W4jGrEFUY6`i#61@ zHVRMN{NFkDz?PZqO$;p8ua@s+nDP4WukR09m*vE+f8@uUaIN8SvFhYiLQg6}y_gjk zG7h<|xV-(3^y?*h4T}UN55DE?nwh))0j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/nether_dandelion_crop.png b/src/main/resources/assets/decisland/textures/block/nether_dandelion_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..62b76aad8b9f39b66cd8cb92281a825d5958816d GIT binary patch literal 1202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xd_B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxOgGuk#6rQ`QqR!L z#K720N5ROz&{E&PLf_C>*TB%qz|6|jTmcG{fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8fo2%#8yV>WRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdm`z^NOLt1Pn0!io^naLp=kKmtYEgeeo;J&4sHjE(uCSxEHIz#UYgi zsro^w#rdU0$-sz9QwCX8VC7ttnpl!w6q28x0}I7~jQo=P;*9(P1tXx76g0v!^HTE5 zi#5R-e0{Av^NLFn^O93NU2K(rM(AZ`rdTQUUIa|n`Ll0yF)%Qydb&7< zRNPAX^Z&m+vuXqDv4oTqmdo$BekBN(+wC~fai*PdhQ*mAu@uhyAIiW!V&-H|MZs#%%p11`}m>c|Y+3F^t7Vo7SF?dZ;OJ zG OQpD5M&t;ucLK6U0vzZ_O literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/nether_stick_flower_crop.png b/src/main/resources/assets/decisland/textures/block/nether_stick_flower_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..f54ee5cf1b8d370eed56df1252f08a3ef8e4620a GIT binary patch literal 1188 zcmaJ>TWH%>7(S_2)7)4J-A2MjRE3po)VkQQVry|7+p=P_DFoMGvlVJZI!Q#VOQqx4 zNgrm?>_*sy!eB7i8SZTBX#)UsW-~$#uU+1|%a6akf4MSVx>34_4w~brD%%hwRC5dxSzVrh zIVh{sM^@n=0KPsgUqnUebzU)bO7<{RO}8)`fWdgpl9eflh%q>!88Pzi_e&(9sWGw; zmKe!O!AUJMW5a_pBY9@wQuYiw|3q z4-Gu-HlFL7_n*H5K+AJkA(5|L8GGQmabK{cs&l93f2^E8{sT=f@BDS`G;cU~RZ-vWPIx$WC`NG|<;bG7toPv`h+Cr*M>uN?8$ zcPvycx9vH$(X!7^CN{1}9m9vOt-RkV9=dfd^X84W>mNP4e7`_i#PTh$ z&~9lf{%=+;oLLwc>Unf^zBTk&`^N0-A8{&WeR=We-Z;BhdT`15b9rKsI(K{Li`^&O zuFqS2U-|3hr`9`m5XXl6$6xqxZm}K??LGR=Co^^61ISrDa1?#}llR}qrbmRYlcm{z E0F~yKxc~qF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/nuke_side.png b/src/main/resources/assets/decisland/textures/block/nuke_side.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e329fcbfb9b22ba7fccdce18ef4b7ba9459e17 GIT binary patch literal 508 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 F{tKN8tIPlZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/pink_dandelion_crop.png b/src/main/resources/assets/decisland/textures/block/pink_dandelion_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..014624c601a151d8cfbd86021278aa41d2527f02 GIT binary patch literal 1226 zcmaJ>ZD<>19KV_-thG}=D0WWt>BUI|b8mTR?&#UPT;ejC5YynQGTG(sX?wKy;@!1L z>j#rnvK5Q$!@x3xi69P?QR+ASuyx%BQ=LpQw9HvnCyb$UqV9_d@wu+){9rt|d)|J( z-~ac2{(o*hmwkSB_ha1{hV4%87xHL)$a!~p(D%vTn<5(a*vS!lSRb`Zq6x8>tQR3j ztKt~ULs6c2tqun;%;i-IBlbvUh?8`c5FHFrRt?0)uz|s{Axaa_21PigXgq%Vv$Hr* zWF9{l%1{|20mqg7vnCv#%@(BD35k{Q!RNq0nL`39v_()>CpC*J^Z1r7hvv>UiGwYO zJ;CF5O^sx7AfcNOgovr0*0bll8TUYz)#T}73MbBv@}7HKdf!}t-xZ_Q}7SoUj{x1}IJOEMM1R&)(G ziegcpvUwaiy_*e(gfwC)BD%_~o31x5z6N z3p|b_2t|>(SXdC^j1Z4RQem1-CSz@kAgjgyM-7SJ0&?6>4^iE8pWL+H##< zPz@AWfTl7H<&>$bU@K=%Y43$?tGCUS+k1(%<&ww@=~VV#m2PdJ_Hm{=eTx=5oewqC z?k4K%J96@E4C~<2Lab1}QvAEw9CYogxCM$~&buF9n0sMpz?k-Xmm>=g-Uq&T>G&ga z58rzE-L+q}HO-R^?5o}W@E2O3qQPvwUo78=y;)sZ+#Fo)TL8mRqN3EQ=={jd#z*Vd ziqrgZ&(Q-<1mvrWb>qgyo~2ixmLIK5da8T$Lvtw%kjf zh$q>LCst0zzVduct%|_|ARhEpL-oK_cLRVE*Vo>2UB;NspWpEPb?hiVckuyFZk=NK zdUCY}^-6RTYxJB4uFYEC>mA=WfqN->`80iDmrHi_9_~sf>pwQ%`uK)A0J+$}B+E2;sJm^|{YPs+8A{Bnob*bZ1j~%^)8ACqbwNPcgny-9&f9#uP g*Ub;s-B^bQ^Bt=HCaipS+WEVrlUdc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxOgGuk#6rQ`QqR!L z#K720N5ROz&{E&PLf_C>*TB%qz|6|jTmcG{fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8fo2%#8yV>WRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdm`z^NOLt1Pn0!io^naLp=kKmtYEgeeo;J&4sHjE(uCSxEHIz#UYgi zsro^w#rdU0$-sz9QwCX8VC7ttnpl!w6q28x0}I7~jQo=P;*9(P1tXx76g0v!^HTE5 zi#5R-e0{Av^NLFn^O93NU2K(rM(AZ`rdTD(=Ct#Px+~Nz~o*8OxFz6-}f*u zFqV6|IEGZ*O8WEvzdf@nLs~;~p}`%M6f--+4RHdDlm6^V_*E~^d&ccrj~<(G17~DH zV1u^v{*BUyZy)dB@xN!^lFimx?SJoZ!GkwZZY9?@9FW-F=XfTmtoqc4vgsy=H*y#9 zgt77bS7b9X@L6>w?L>AuL-w6nuMaJ_|3%Z&HT(fw}S1O#@)}8 z74r}Cwe7Y!fAG<7q2LGi7^E4D&Sw6T*}$k!^Wm8IlnZQ`^F$sTT=2(LXdN4ygrnlg z6C8p8fkr?1jbxupZFfwUoMWA5cqg#CWjCK&`@5OE+eDU3XSK~sVh)5S4F;xg}+;O+9SlcmGKClxyF%wyE5x;Jnma^HbWCx21Cu+Ls6Kn6vR^((;x!iLFI;7u9dL z%>M9<(^5P&p-Z4RtgWT$%}$Ow$*hQLPh3k6SpA*wNUN!CrsboXC9VOFtodipk6!q4 nWA6J;g)(^^dlVmUzAG=dOSba7n9N+D`xrc3{an^LB{Ts53=?qy literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/plain_tower_summoner_side.png b/src/main/resources/assets/decisland/textures/block/plain_tower_summoner_side.png new file mode 100644 index 0000000000000000000000000000000000000000..9c6f437a27aca72a8d518cb6fe6b41fd0c0ec7d6 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFUSED=KCe%v4AAq-!d#Rt&jQd)G72#JH~b^ ztuZ!2Y)3?N%=E?k)!MpV?^D~uTOCz$#8RaG>DpIcc0OIHYp8l_;)X>Nwtv^Led?84 bT+1-eO}KOWx(&a9b}@Lm`njxgN@xNA?X6P_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/plain_tower_summoner_up.png b/src/main/resources/assets/decisland/textures/block/plain_tower_summoner_up.png new file mode 100644 index 0000000000000000000000000000000000000000..5a39841ebd55e3fdf20a2ada0e686e6d39fcfa18 GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF`Qam-GOQ1Nct)=SCPL4XstcYt*TuTpF{hjbgtEq0L<)fP=t^tp%`Df3MUiflj m?)y)LGI!lvI6;x#X;^) z4C~IxyaaOAc)B=-Se)J(yqmAZfampjBjt^oj5psY^D!_mF#N<^6Xxe;#FZHpw`-wR zpNx8`Q^fJmWmS`Q&RnV+#TaLIx~y$gxnbUu26+L8O=1dcf}KZVe~LyM2qiFSXZSFl z<=@4`r0}ug#;5Om5r)qj-zj`zNQqW_>Zrnyz*;2tpjw>4k$qi-fbYW`eu?7c6Qmx` zWMBX7!G{+0>V|WZWMghJhacEh^E>{-y+7A&75=kJcU=GB=peoo=xzp2S3j3^P6!Gihx;JVPT=LNJ>JOppL$IVo;($kl_0l8qCI8Y3E*vaU}+n zuAX81dRrGa^JK51yUMpW1}#by{r|sN!YS+7-tz5?S2=breS2>%Tgc%9XB5sTaBMqm u;^QHjGd-XqbA^XO^MZs9?~d*T3Jj6w?&t;ucLK6T7NoR8a literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/radiate_dirt.png b/src/main/resources/assets/decisland/textures/block/radiate_dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..15f8b219a1bec9dffcfc571c69f838972f66db76 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF8skH}&M2EIce z%qXhi)c_PM@pN$vk+{s;vyu0(0}u1hCiV?a6tFVdQ&MBb@0KyGWE&u=k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/radiate_stonebrick.png b/src/main/resources/assets/decisland/textures/block/radiate_stonebrick.png new file mode 100644 index 0000000000000000000000000000000000000000..d459196c699b132e76dc1902831b5855bd0af1b7 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFiMeLpI^(FQOFK$je zc_7cc`FM6?({_eOixY0&Px#1am@3R0s$N2z&@+hyVZq$w@>(R5*=&lfi2mK@`S++C^5XG8$sKxvB@*K#@Io z>Mi%2`v>&gzoCbcQx84%n3JbMJoZrN66h^Wi%3bvUqZ2id_@n-4zb z&Aji;ypP8uew>`l{NWG)k<0NIB3%TL%VGG#A+=gwBCXcg5KrjylQ$&zuN_%w7tz>Fn~W$cAS`nWMm--0+dpG_!3gE zEDDxI)p4jg4xc(1%C=3}w%Ko-$1Eh8hlewJXNP6HZ{F~FZ|>JH41K;h3GeKTWMpBP zZ(lt}2to7sFPTh+cOS1wrBVnXG|hCHgzLJqN~NN2Z5)kw`69d0(K@tREt1g`BJMd) z2*Z&5#yLtUlu|T~Mtb#qUsI09^A48(!s0(zw~uwOIE9D@pMUGu-yHmW)JDQ}-P!+= hQc3_!)70@Y{sD+U@s6gmmQnx!002ovPDHLkV1n>E{Bi&Q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/red_lantern.png b/src/main/resources/assets/decisland/textures/block/red_lantern.png new file mode 100644 index 0000000000000000000000000000000000000000..784459fcf1627910cf08581c0421d074458d222c GIT binary patch literal 2388 zcmcImeNYo;9$vMGVEL$4N-b^I#i@YZ>~0d0Y&3`@e8gUm3s9_Db+fw(dnDOycJqZ* zC_*dR4`k?_^VcjCK@+@$`CiY7c7yAjy0U^M8DvQoyf~l-1TI#h;DF2N7WDxGGR~_9b9os<;Bkml zVL+D32H_Q!BG|}#SU6LmL1{v*gSDiB(5P{h=2=*Y6C{S~FhYgmgdW%EGqrH|hX89H z#;&)T^1`;jn*k}8Bteg1e!pMgS1EXp10zTha40dQ5(NlU47w#MfV#!hNd^-u(jHEb zINlA*jFgS{N(KZdop8Y=L}=Y&I7}d5Sb!2RLV?RJO#&^J`$Ju>2wIeKeZWds?=KRI zB|(A3tgOg;Jv5u^W8G5fq%nq$oE5wt=eVZ~jj>MF1z;i&Mnp^r<-Ej;<@~Ss5!sG- zBj}ADmXdf+3C}wx6IC?H0xN;na9SDXW_Z7tE-MNjU`>?78W1H8VvUn1p(`OYdX-k6 zi7&);dK{mCT0k8zlteukm}fY9@Ijy!i{9)OCCW{+W|IK{q7)p*=yeoMYgHN&RpV+K zs?w@yR7bL))F_G}?4(kuq{(qz;Jk^ay>j^E^Alyu@HF6vLC_mAy74G z*WfBUX(Q|e0yDJU&U;)Gs1wdbIao|^I}rGPYK**-_gHua#9Vdny4h$f^6+-f2{uG) zehzHTHEIY_qd}DlLN0qC1Grnji6FBBDV!tL{q~KTNf)kA!u5R*|fAo_r}hq z)9#eq#FJJ1{f5?aYh$hR8xp6~FZ{5fxOQl>XDI#DwB(bzZVzH z9$l8+lF?apGx@1+QrE7A^M4SOb?+E-6K;Z?yK-z{$x^GdlL(^aXx1?hW|>YxS1@1H3e1Tl&mNEWM<2e{b^SkMH%k{Ly~f(xf3W^zbY{t6-z%pod#Y=p{JS@jTeALp zpl3=b1F?P(XwNUGKhR+=pF6+z_PeI@=d;^1!=H9vX3IVvy*euG+#MUb-B`K#kGC#g zZi{&$ZnwF=@$2k?+KgH#`km4q?}hJ=UJK3HlYKUgT(t2({a=R@{0qOjmDGr&TncTC zZ#}rFb9&EKb4Ar0>#V-!#IC;efq8lJ+KK~NboV)ncK^{KJ%%ld=9W$Ey|oY!Yw8oHA5r@^(+6!fM_;}8RQIvBzeu`s zd+I+AsA}4L=hB|<`Dj~XqquvgBM0iwemyU-$5=H2)z+$C+J55m?6do8g8SY+bmQQw zQ^!VLb30}?47LV)@9v5_tHbb))zj|0C0y%@Yx(K=pGPj1R+zf<+t2XvijF#8R@$M5 z+4iOrA6(T&wUs$eeYX)Z4TUz11W#vnd6%wfzMIf95Y=ZtKJ2Bos~;(kdgl1y;Iy|? o(!fU-($GW3$BM3g82B+^WBjg`{IA&eNS%LiO0G|-o|L^K9t&5c4XVa7w&=ljjyCb1KROaQGYzYDO%j={5zpeZKzP>SB zPEvsV%e~U=lRPB^*mg|u(vcB3?W(icN?n|v?Zv6A6)pCw3{+>SOD=D+TiI%#Ccv`N zK=t0vgbA5CL0k;|89JIW{F*WXYb{hYC3rQ(c{Qc@H6?kKg61p-I)k&oBeIx*LBt1y z8QpsGPctwucV&h|ltlRYSS9D@>LsS+C#C9D^BXQ!4ZB&DWj=GiK} z-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakZdm&>NY3TQ%ZYDuC(MQ%=B zu~mhw64+oXAR8pCucQE0Qj%?}6yY17;GAESs$iyPpl6^2)UKdlQ109hJHov$eMIT9lzL9}}g|2~- zu92la%;`YKrzBgIWR~QlfMne{Faf2r97}KYcGGxYTGNPmpLCVdEwk+=X%IQjHAZ?+AmhQE{WhS+jbsqoA_^MXWkPj2(LY>INv3r?&q2N zLOEuV5^vgNVzn1oPFcccy7|He^@3>TyxG0Cz3xpr5ZxH|?`9D%b0mB1c~F7j>FVdQ I&MBb@0Ph>Wd;kCd literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/red_patterned_stonebrick_up.png b/src/main/resources/assets/decisland/textures/block/red_patterned_stonebrick_up.png new file mode 100644 index 0000000000000000000000000000000000000000..4b3f30a09de95075cb8fa08e8a171c02db8a154d GIT binary patch literal 1347 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%LiO0G|+7O<95e@9MtXD}8Y)>$Iy*ngGizb;-*s!!^Ztwome0*=oPM$*w;` zXF{gViWd9J>mxTcJ4x`fHHOPs$O%dauswT}ZDZsv^-R1K7C|fnr6E50Qilroh&fqNYh%9Dc5b*(F zMz`Ml(+mvEU6~;fB@w}FfdWk9dNvV1jxdlMg3=B5*6$OdO*{LN8NvY|XdA3UL zckfqH$V{%1*XSQL?w=<+7=;0-BJUT9T+xk(-lO zY*k^a1UA?T$OZ}PD=C1Llw{i~Mfe6NIOi9oDwydR=ou&hwJRvt6s4qD1-ZCEwF7y! zN*N_31y=g{<>lpi<;HsXMd|v6mX?p&UZnV({1wl?Gk^vAQWJ7KAF|4)$dC)2{D7830rxX;Fc811A zHehd~h=L*y1R&}ou&PHEMO7b=kzbMzOdmy=$)0&7sYL}vz_bFk4Q3Z^6{sd5EDp`f zEU|-WM-ztYL5d73$D)$*{G#j-aL{7}A5N7Jvmk+ql;j}E864`s^bF+L=)*GyhzHML zsd>O$RRqjFM@)KBfLU+1r;B5VMzCrB+p@z7JkFvUG+UOfzB$QEa`Eps-~RbqT%4Cw zckyf!3-n;bO6|dvp)jo907sBqAD?< zn8Y+>$s9PuT!R`01(=yOVFJ-*1VKWRnw!~OIF^M>EZJx7?!Di4@8vzxPXd5Jy3DKjVFY_=p_ZRu zc|M_*pTKfW=!(oab^?IJ+uH1e)|#pc05D>4G52+6J_(y0bVbInyMpDK0>t$3@CE>| z#{~?#E9i>M8HrT-#2V!U94`<)vPL%e0y-(#xIyTGeFn frdhfL{P_o;vHzr{DV_x}2R_KlOGoxJHa0Rc)K&=iI_>wr4b;To>FVdQ I&MBb@0DH1Yn(9(SD|Hh4mB8ih#qKvI(Pmtg-Ff=eQ(Ai*r`ow_)2L!f9|F`e?`~JH8 z4kZccNS>n%5aUBoVeC=D-Jed7vO0LxH5_>kmhguK>+w@O1TaS?83{1OQQY BGaCQ^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/rice_stage_2.png b/src/main/resources/assets/decisland/textures/block/rice_stage_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1d864645139245c6bba2527981704d018ed71be7 GIT binary patch literal 371 zcmV-(0gV2MP)p$3b6?I9KhuywsO(o=&&eYL5`y4&wjnQX^imM|aCfBgy#mKV=Lf>y084^Ao@qVed4_Pp=UXux)Jj*EkiB6EQA`4_HctVk<9U`iVg zgHBh(?UCufd%S+H0POB92mrS}2m_vOJOHE!AYI6Sl@e0y)(5qjg8jUa6eiG{NZ{Pr6vcm^RD**JL5O56QjicvHV63!C{E%WPEA1+{Q;2# z1>q#Pij(C2iU?X#QG^HaQlUN&rvj-4m#;y-$9p}py*pj*x#!$_4*c&b7t-pl9p5y< zYIu%DEi+Zb7AP0eswKNFf+feqlNF(7ma*p%vjwvIRk1KXi(x*yJ^+X(D*~YU*z$bo zvH);=(iA_hotCMi>W8wIuDKwaCu5okG6}s22-z`ZOv8a0P z4D>)(?s{82T$up$*L@UIbz#XdhesOF-yZh6#lNG4FMfQgifZ7&_SVg5=2aXK*>}(OQzxw9K;_W zopi|*x(OLev#Wz^8|dPo*eRuS6C7NhLw!f?V(adk?!J59_rCYu0skm6ll)dE=x_ap+O+rmSGLumG zROS*jUcs200bA?cSC>S#o!Uy}s5KIC;wmjmfusE`@D`MLq&A$ul7vooAb10-<7XpI zV3GVdD?VE3H@Z{NjQ0RX6NS%G}H0G|+7Al=bsd}d?BvME6fkNMIznBLlx;#{Pn?F2G-|BtC4W4KC!{DS|( z0K=v;I_H6+oCO|{#S9F5he4R}c>anMpkT45i(`mJaBg29pR*zdi+0D3@B0hVziyTH z$jrWlOpAtukidJ+MeQ(kL$cq|l0Miz_U=LW;fzp7_|g zzA0Jtbekiew%n(DhVBXKQrvgDmacorU+3WOF#lVF+l@E+7vA|^^vJ*Yj@|5(V$L3* O^$eb_elF{r5}E)4bY-dl literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/rosemary_crop.png b/src/main/resources/assets/decisland/textures/block/rosemary_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..078b45462df82e48f2be7d01c2905d71c5212249 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85qP=L734qNaX`iP@=>&q9iy!t)x7$D3zfgF*C13FE6!3!9>qc z&osq70%XlcPZ!4!3;(4P47meWwPGe}%Yz=L4VQ@J- zEB|E)*9^6;LmDg|5?i%a#8q^>yv@=gY00zM&C6FHZpFLSy?je}C8jN%S-S97I-?aA zV@vnpQ(gkC?z4A({a8`Gb|0q(Q^-92oY4EX?OyF>ZkbtNq_LENqoLkcn{~l|=?SU& Yo-+d_@}zk006ov(>FVdQ&MBb@0D_H=xBvhE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/russet_grass_crop.png b/src/main/resources/assets/decisland/textures/block/russet_grass_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..3e2141f2d3d258ccb7da8c2609549626bde004e9 GIT binary patch literal 1212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!6#=yXs@#Xw?AV;#qHKHUqKdq!Zu_%?nF(p4K zRlzeiF+DXXH8G{K@MNkD0|T>iW=KRygs+cPa(=E}B1ny1MQ#C5Hv@x>eMLcHa&~Ho zLQ-maW}dCm``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQY3>#8=6=sm|N-@ znwc0Fo9QSR85mmX8(8QY8tWPuS{ayGnVKs=ffCTRqLehNAQv~NT|l0#QbtKhft9{~ zd3m{Bxv^e;QM$gNr6te|BYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcpXJ2$+08OnABla^NXHH4m8Fi-76+yOs48 zVAj(2ba4!+xRvzp|9|_#YoAB|Gj5P@;^O+x$kf5er*ygJpiKiq5{svyk&)2~mdO9+ zqCXEZgmtfBQfLUUQ1Db^t6^|uJrN+lE8tMzoS61CH1ogvwZ=sZkwQn@0vRU%*%Y87+N%oqiI9RpzEP0qSrNDtR z!sPP7iwmW4n8O&l`hITHmngZWZEz>De2U;|^N(#RX4(u)J%Y;^L|&g@c%nCm)gt^za&s zEaQLIx}rpQ!~Dd5wdLeQv7C3)YhK<~clFQYnQZwLA7Sypzod^w`39 dqLSe*1A}Lo^aGc`1#zJA#M9N!Wt~$(698x8lg9u6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/scale_block.png b/src/main/resources/assets/decisland/textures/block/scale_block.png new file mode 100644 index 0000000000000000000000000000000000000000..00f962b9b5fd929180f8434dbaa83385fc7af343 GIT binary patch literal 613 zcmV-r0-F7aP)Px#1am@3R0s$N2z&@+hyVZr4@pEpR5*=glR-<|Kp2J}L*izV7&57rUAh*cRHz~p z|3Hsky!d-O%kWudU$CE2waZ8nV)6B1#2XlHQgT!vwo?|a_&{buJ&`gPN)n!ah+ zJJ_elmUvQ{^ZOv=``u66z^7I9f4kMHnv>y(H}6KYswO@h6UGsa5CGgvrvMb$5`d?N zM{{-qAG>cFQdN;>D?%9o&~-h}>oowOjBo>=Fpj8-lC$K9yRHGCRW-K84y80$ebeyi z<0*GtLsgUjEN2UZJ0MjRdWCWHSHkuA1z{YS$Bq!Bs-o+9gB!|-y@P$89v+PcRZ(IC zOv;=*TVb;yJ{%i7fXi{hd^j>RXUP$%s!S1EV{83-J+IezQZgxXcGz&A-5LqH8Gx-T zeU9ETe`)zP|A8ZfiP8;x?z39}93f0IH}Kirb+EMClQQRKI>ix!%W<+5Z73szJK%Dh z5XO;7XgOP8c~Sz9XDfp~e`(3o?=3lw5KPLPuIurnq*XP-9bjn>ggYRV5uTK!s$#=94cF%vCSomF7u}jf05|YWRKK#7>8uI+rlD0e-oLrAp4V$qRk55cOng@#P6^|P z;c;RfXxFbkoN_W8nYpot#|c$YBHV$&oWHbmU2n$Q4SaL=I#!zvR#lWng8nc%YmNNc zWWdDgNr|OD({i>jx?Y>wx9wK;`p#y98~FSIU}R$4#TW(z00000NkvXXu0mjfAYBp4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/small_stone.png b/src/main/resources/assets/decisland/textures/block/small_stone.png new file mode 100644 index 0000000000000000000000000000000000000000..ec607fd30b60145d04af7aa86aca440c3bdda6a2 GIT binary patch literal 891 zcmex=LK$;OGwtxvPE3kkW!3HV(|CYfbAS1sdzc?emK*3ngfWgAa)0YKg8W4cl zs$izT71^Gf{S2E}UN&&fc=N-l?*9P>K@J811_5S9B?cxzMrJ|A|3?_)fp)Sof&o|? zkYHqDW?^Mx=iubx1}fMpz`(@F%*@2X%*qO~hOrhX&%h$cDx_%W$R-?^$gWfnAuRebI{N?Mn?>~P20{IIVo)B*V zNr=zT{3QtV7ZVE$GYdP&UyMxUAdd^Ouqqm|2{{I`Cl(4T88vc8f2KE_o9%~}YXK;@p{B@hb8JMs@fC-40nV5i4#S8>2Kra9RD;p~q zut5Pk7;u09Cmj3-8Ui+fiHQY>IN4a);BrJW{@(>AOUD1V7vJpPv`JALr{?5@-jH{94xcK$ z-}bzq-@=mR+MQj?mP$@tr>|DF&GE@OuEZt5$KG4%l&f18PHu2Grk=USvCPGM!@}Qj chc5Z+7;fM_oLu9()2qqRZ(c*8gZ%%S0G4GG7ytkO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/snow_brick_block.png b/src/main/resources/assets/decisland/textures/block/snow_brick_block.png new file mode 100644 index 0000000000000000000000000000000000000000..d79be479451847c0af725f6976a48971965dcccd GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K$eWHMd+Lx40B zNDK%#fLH@cgVwo5m$Nrn-rG=iQ|=7^3HJ2K9V{B^ zhu(g<@$)Iuv_JN7ET=vm*fPQO_1Bcjz`x%aYda%0v3)kO6=!p<5)D89B}+->BhU^1 z|BDy+%mOlML5?W}J4L|x{r~@G?_S(#VNoLbRCHcT5O;df$*&n}Uhk8CWpRG_ce{$L z7h%7$R2d~t*!|r0-h01+j@XI4Is8Qqwi}|dlZ~faD%^^x|JRX__P_PSq%T)or}c6C zT=InHjQ=(F|6&)`ba`mU^6vj}rt+n+u}%7y9lx2{RCbowt^XiW=KRygs+cPa(=E}B1ny1MQ#C5Hv@x>eMLcHa&~Ho zLQ-maW}dCm``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQY3>#8=6=sm|N-@ znwc0Fo9QSR85mmX8(8QY8tWPuS{ayGnVKs=ffCTRqLehNAQv~NT|l0#QbtKhft9{~ zd3m{Bxv^e;QM$gNr6te|BYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcpATTy3Ro?#bIF9THxv8 z7*cU7>CgZF_RJCoBp4Wva3pV#xO(kR{htr2%nl5VOB;Ud5BCs?=;CzgIJVSCBdwxo zDie!93_p*7p^;G&@7+zWgx8v)B ztN+hh>;E&~R?;HPH7S|V(Baq$%?`sRk%KCZY7H`sWvnNXCT!fqCB&mp^X33+o3G~1 z9*wXA4HKG}xvvVSk~NQImyT( zp>yn_>H)sCi#tpfv#6NJHXP;_QBl}X^V6$h!;c*=8?P8FvX;#g(#dczYhscX`=HP; z$I0PUf+we{k^_TCP-%O(;fhn;P0DO(k8eKyE$Jxb_-VnEe`z0O+<5jM@L|_vy12oG zS(v%i$b@szi)1JMIrEOS@;u~}<1sTm`d|usl6~C=rk;(AJq|8jZ+QOmy-!ToRLa=B l&_X&|;Stk`m-5jjObl~-gZD^%so?NS%Lh(0G|+7ApP_I-%mfj{r&&{^~d+${``9T`QxAe|DU{i@$mW6yN@4!{`vjE zvnMa#zrFY5(W4j7Za=*L=F^9u`b3X{u&1wI-g)%EI@;~khj)fPR!XLtK+~e1i?stO z>5?G7;Qu%QgSrW~DNq?_fk$L90|Vb-5N14{zaj-FnBnQ-7@`rp_lzT7a{vd+g|3K) z;j4|hzTN-7pfw}r3&Y&2ADo^A)_-!(=!kmuj;%_lSbveY$&psqxaMUnJ?}kDQszy| zVq{yBHCrR+z)nVa#?mP}m>J4L@9(wvbl9oi_+pXr=aVTbzj7NZi=K~8zIYI5CxfS} KpUXO@geCyD9HV&v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/soul_summoner.png b/src/main/resources/assets/decisland/textures/block/soul_summoner.png new file mode 100644 index 0000000000000000000000000000000000000000..14a3061dfe98e79e75953b275c88946992e7b5a1 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF8@?*ZtoppsADFtW5&ZTpspmNWa1((BrT>SBcpC4CMzMv zFCZu+EyyFT;PCY$P%meJM`SSr1K(i~W;~w1A_XWo)6>NR8ptXKh+`d&cRt)9~)x^XO&A$qCB!j1`pUXO@ GgeCxfvtexj literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/soul_summoner_activated.png b/src/main/resources/assets/decisland/textures/block/soul_summoner_activated.png new file mode 100644 index 0000000000000000000000000000000000000000..c7f0f31c11f36e5a0d1d7274b1c289ea5deb4f67 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFAw2HJwqL{|Ns9N&se0cBqJ{*-Lm&|a{tWsy{F&5`7OpT z;E|Q$_fzm3P#0%`M`SSr1K(i~W;~w1A_XWo!_&nvMB;LCfVU?32) zL^o~Pxd)G~EZtH#YbH;?sf2Iae3B#C+?Ms7EM`srVq~DrDSeA;`D{Z2EotuZ8KSd| z4Ya4ZmavF*8FOeZZ(GVPJL%IEGmC zCMQU+E=~{$;9rts@@xL4i!bbZd_8pAb}fjk(wNnh_VTZLSVNx1rYbQuHnukT`1*x6 sK0SV|-)8x5x@~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/soybean_stage_1.png b/src/main/resources/assets/decisland/textures/block/soybean_stage_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6a1cd900434b3e5cd9f3f731484e97314abaf79a GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfh zI2LGscy;~2$@HXzgoFq6>pGGiOr3l`@JIQ&KSxipGrSVhtvKs;-3Vw2gQu&X%Q~lo FCIB!^J8J*{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/soybean_stage_2.png b/src/main/resources/assets/decisland/textures/block/soybean_stage_2.png new file mode 100644 index 0000000000000000000000000000000000000000..65585d746a670fe40fecc4511e11f3b012faf4fe GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfW(<%eURL#@VpxrdKM?VKyQ&tz5cYqLySl zSZBXthHc^VpOa3e8ZzkIjyZa%=lML#Vn6#O0cSRy71_L8r0b<@h0Oe2`HT;~*31vu z7!jX3Z}-)STN2OAlUN?mbELO%--)(a?^O@)*!8Sm=<{x$6^2z!@f%qi66b4KuIp>7 f&6=iq?RWg@wCrLviS@66Ze{Rv^>bP0l+XkKxd2_V literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/soybean_stage_3.png b/src/main/resources/assets/decisland/textures/block/soybean_stage_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e542bb112918d32906811bb4fc817be9886f79 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfB)Wh{N@$(JN0EDt^9tC6`IuVQwg@>blx-21ym8jqO^@1d zSe<<{`~2+f{6CHdyUcXA*Vj{f$a*eODMQe62FI+!yH-tKQupSP^&0(ET;caM_H6ym zdGkWANAsZ$qyDg6HGhj{a7gV6d}N}*^X~L^`Q1xS{raM6U-op($)lGa=B#iAnv**_ zKz~!$u2;)Te`omJ2{Zg2svN50n=-TX>iJ&_uS?F}{dd|021_pnhdSLvQ@*H}C#I_l e8+g@bJeL==YyMEJykZs5cMP7celF{r5}E+zQF3hn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/soybean_stage_4.png b/src/main/resources/assets/decisland/textures/block/soybean_stage_4.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba43e6ad353230ac0af14ca87e5c1f3361ef647 GIT binary patch literal 313 zcmV-90mlA`P)`QT6(|^i0Z5xB zqQn&vO&|(|DWd1tPceuNH-6`Pckhz`e|Of$xu%=qpM*S4wli(tU&YCGrYV`;Id%+f z0RZUJ)WMwRhVn3ZeeBA|1HgWn3CUeWoC^Th^`B0%ZwFGuxv0w8sZ^Df10AXe7_`+x6`A}u^@pKig46dK00000 LNkvXXu0mjf^VETW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/spark_flower_crop.png b/src/main/resources/assets/decisland/textures/block/spark_flower_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..f99ba757802cdcf72d9ca2768f04d6f61a164feb GIT binary patch literal 1155 zcmaJ>TWAwm7(QvV#!98Nicv(4QxFw1m!!E3jWuQx8#E=xh+S62$;@dp)|oTToSL*K zCMw<#ExuUrr7so)5fM>D#oNPnpLAJ}#bqBBWZ8#hRd!VnA)cvC^}#qW%>N($@B6?1 za^`flZ*yzQ@)iIzU$s2c!xrVTM&QZu=z z7h{Tqm?FoON+q@wV6ipG3DGF!@N<5@k4E_H5rfEOpJ8{_86;#YmSz$S8_;2t3wW5s z7^?Jh3A#B;YuGbwq7CE9vdIZ7@03&z%w)bFs_V1SHp!tcdcR3*=SNJ$<&cesErkwl zpwmfZiU|wJ1Y3EG_t(3aEnyI-IUq)Ea9EHsqVZs*SaT8e%yrhI1zS)uii3bbTCic5kUOyZOkV>u%A#uKW@{ zMDN7Av=q;mUlcypYCUdm#k(&4yyj{;)y_6G<#rsTrf2=zSO2+=^Jf-8;DIUPy52Ij zr>%L*+2tWUzKWWwR|To^S7BxN9DO8uxK8|?YiLI zaB|uCe>S!aROi3Adt@+j_{oP_c-QK^9h={*zOiH?`^59(*u>4t{~jS7*{csHE2paf zc=*SEZUhs*J)D}Fg1hxvt#e6;rN-3);_~`e}0BAAkV= z92HuH`151!y?>vP)7vKRpQ~0U>}U5XD}3rm)$1Pju9*Yee=U9#zIErN^IJ$K`=o1| H_8$EN6;^ki literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/spell_flower_crop.png b/src/main/resources/assets/decisland/textures/block/spell_flower_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..798241c59e6a24054eb60008431415316c1463cb GIT binary patch literal 1175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xd_B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxOgGuk#6rQ`QqR!L z#K720N5ROz&{E&PLf_C>*TB%qz|6|jTmcG{fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8fo2%#8yV>WRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdm`z^NOLt1Pn0!io^naLp=kKmtYEgeeo;J&4sHjE(uCSxEHIz#UYgi zsro^w#rdU0$-sz9QwCX8VC7ttnpl!w6q28x0}I7~jQo=P;*9(P1tXx76g0v!^HTE5 zi#5R-e0{Av^NLFn^O93NU2K(rM(AZ`rdTPQCg-$LND%7AdA-Lcrt$V#3ockONQosd>QUUIa|nmbEXoGcYi6dAc}; zRNPAX^Z&m+vuXqDv4oVA6oX6G8fKThd&TP(Gi!owt2D!MaI@(cfqODwrc-*hDy5|IPbDr+plA=7H4rVYc>)0+38{-c7ge{&EL!Q z+JfS3SG5I-jAFbTnix}TmA$4s@Z$C|3i@wewxfCDq8^nQY@G+cG#CgkY}r)RYB6Kl z)1bC?#yEWi=8i|U|K-mHA6m(#DptTaVY49HqGil`;uTWr%-7&a6_)Plqws&$NMN3MpL)cBG#PGU97nmB2*EhP$($ixG6?bF6I_A&M; zaVrqvrV25MKB7ttB+w=#?n1m&B2vZJDj1iCJ?z4UU=Q6>H|?Q30Oq(fg@~qog zegF6W=RZD{AL!fAx~Y|-s14bEsX)e!-s|^~?}z`oG8x{(=@Q$|u!5)fg>C}oPT*`eRDoAH!55qXRN!S$ClWq z-Vx4mIWq;zTK|Lvw@(Zdm5EU$rqYQ|K#wC50Ucr)IC{mfMJG-#>563TZL>63g5c3O z{n}J1mj@|iK@etyfWmi2K_tfTLN^x@xn=7)0y<8?zFxHVxmS;FGr3NsU`+umeub^#QfN%W%r?6cdHz8YqHX5@O za&W_)UMN#cSy0BvDk4;AR54#h7};fHf*`R3w(igj6;m^ExH8w$)yahgal znx=}qf|QhkDLxv_2t1!o_r{``bSx7|rb2=gPNo`M2`OVbG;o8fzTpO&a=l*AO%hpx zmbMqF84KxPDQ8h@>Lr=A^-lJ!lWuI0_VK1GeM=TAoevGt?iT6m z$@iJh$emcsO1(wrm!apbn`lYbN-e=ayQ}x*BxGk0vaFH&3k<-;Qv zcICf*;{NshLTL8Zw_WY@y*BV&;@!_(cmJm^5_iKu5PrQnvFg!O{ql{&T4j3ACTcO1 z5BY25lWl_?qa9$f`-l7Pu7$y8>k4bmx%HQ`SM<8C^yBHXY{&E69WNL5J!{{b*?Q35 zcHzK@o7CI~8+X=x+}uB$6Z^fk^ZNNTRq;>F`S<#|rXQSYeR6hk)wM`|mU?u6vQ$n}7VrQ})k~;MB!4^GAMW&Yk)D^n6(o*4*B5huSwS`#3)Dr&h10(%<|h&(8Gi P_Wldm^ni3JIe6$5P2Y(` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/stick_flower_crop.png b/src/main/resources/assets/decisland/textures/block/stick_flower_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..a9beb0aeb3b2042000c2fe143ab7ca8137dd09b0 GIT binary patch literal 1168 zcmaJ>PiPcZ9DeIoV?z>zTH-2_$AnOAyYp|8$?lkKvf0_yElvpQLe`7TWae#lNM_zR z^U~b}N)v+%IkYTzE2$I-lvYiPw<5GjZA-Kj4{fQMOVSp45cME>kYf5KW@8WC4$Qni zeBbx`et(#`!GWXAjr$t`0L__WN|vsB{CD>*`fYo(q0uEoQh9O$7f4BS5l9$#1i_4@ zjiM~ljLFm2Q4avYb~BeJdG)xgV~f>%3|qDw$_AjPx9n*87$R^4jhc3xd3g032AW2k z8R}Ab)k&hFd2Gr>C#D8+`qY>nGnn4DU{6`50u~|~EL-EYCzs>Qrmjr){x!$IO$Zr_ zGtW)s)j^oVE`nXG6xM~#DC~~0g4D@Jq&K0+3o(w5azZ4`3oov7eJ@g7y)CX$-%EF0E=SF9erNyH>Dm=C6O!N9r=4>qc_;Zi{iI;(s%bebKVeM>ZtyDZRha5laDSpeDUn!ODAW| zj?iZtw||*^ye9U2exv15sG?OqIk5EI^sc^-Zk_t7rEuh@#=y^~QZr4_z!ekTns+2Aq{W~}$_ zg%&Q}Umo9gU(=VIhu0(NGb{*HRets5vw=zge$R7D^DV!>a_|E<`s~O=+XIr{J1~Fs z;8>q{;Wbpf(02NDM_4@Y{&MHaV0B&TK*i$h#~+@bpL_epN@e%qL)G)G!(buw&ZYI^ c4GUlz1VP}OJrykQdH)}gNew8A{ljPe0kLF;ZU6uP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/summoner.png b/src/main/resources/assets/decisland/textures/block/summoner.png new file mode 100644 index 0000000000000000000000000000000000000000..05355312c5de49d8fb6fcafff8c67de55128b06e GIT binary patch literal 664 zcmV;J0%!e+P)Px#1am@3R0s$N2z&@+hyVZrLP5lFdpRQ5c4w{5bUJw8n@gX%xzcAR&Pv zQi_2}wq1yj_6|zB&Z0XvUO*RJ7jL26xNwn8T5PQl#-UMbTAW2vG+}HShqaiBG9C|2imRApoY89{sLOUf0;z+F?T61K`__20wpa;J6;jScovd zRV>R|q65HuEW-BQ35HpvSje%lwL@|?ieG7?)giBIy!-eSfWWh5Z2+*gvcy6nDgyv^ z`%;SgU7M>|misM(Ql-XBbP|Bj;=`#;fG^)qd6bxDTnY1dX%6Gp8B-4?xakjwjRyhv z{Hcs}_D70k1zA0VVOFu*mpp&{hOV&Z_nyFaGNqAJDaCmskas8GD(`rhHe2@Z9Q*#4=)sUIoKVT+0$?%38*ONwhUE}n;jqAF%Lu|APx#1am@3R0s$N2z&@+hyVZqUr9tkR5*>5lg(N6piq(`ibER4a1q;Vy!)C>b81JXA^(} zU$$DIbgf1hhP#(l<@32t3K*421rfpXJes;iY$5rpJ5wwXO&x5X`{rCn z5ytinrG)lV2SS+MO|aHr%qw6{BUF`(abf4w9|E`so}vBTA--`d08S&MxDQPoK$^I)wlBykiWPeJQ_?RoA8p63;OM-S3}rNG^)W6HA3 f%~UGw>Yw@s9oyJI%?X1&00000NkvXXu0mjf+|#_0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/sweet_berries_block.png b/src/main/resources/assets/decisland/textures/block/sweet_berries_block.png new file mode 100644 index 0000000000000000000000000000000000000000..526f3bb3d5fb4bb72722e10be210df89a5230942 GIT binary patch literal 759 zcmVPx#1am@3R0s$N2z&@+hyVZrp-DtRR5*=gliy2|Q5eTRX9^L%)7Q34rS8R5|~{If~67Z7Gs4(N-xb};`YvAMX75)h`Q)> zv344Ct`6t$@O_@|_wxu^&dKp13E(+?gqd8FOe(=lJcjw`JpjowT>xy%t&3)jt9kK7 zELq#F0HAfd$)pkh6n4G?5dEB|wp&5!I=+Y{n{@)J*1>8)nZIkXbS?FsB7-2tq zrF}N$)*S`BqMj|Xa^6rMd!>CAOC#KRy3Sr{A0zAsAl+-KE{u?YtDY^YnVM=lZ?*-Xd{Ex> zcVfp(?3jrWGN>I?5x$5eUv*wnj(>P=tM&ov*&+ZPr%sTYP6}VdlEJMiFTQ;hzKA7- zFJj55wQT?np^^b;>%Ta7w|IGw_t7Bk$M5KL zs(3aR0a$Ez(Gxhv$5)&5o8A1V{Gj|xaCN|1 zWBldd$|ni)c~;IF{~76WRtp?{VzYE_UbNjjs~7-qRttDF7tzo8Mn|O)ZqFvMVSR)v;*V?i$T zS+oO8{6qwAjLHrmx|Sr}Ybp+;uCrJgA(KjQpT?$2T_^ouSwPD+=BAUvtGSqo$5`kS p)U!o}Z<9!=>uB9>a??rW^dDtA9?TdSZ|ML4002ovPDHLkV1oI#TyOvY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/thin_rope_block.png b/src/main/resources/assets/decisland/textures/block/thin_rope_block.png new file mode 100644 index 0000000000000000000000000000000000000000..6a4286f9758cc446169bb927aa9d41f47e85e812 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3( zJ<}BT2#_@&JzX3_Ec{C+Dsmq-5NLg`f5mUhx~!?9%4saCj`<`8SO<4R`G$*z&xm9* zHa*F|Li@;@_q~OWJGU4L9{;WP{+{ytD_2e&|C;fB`uX2xvu|Y?hW#wK@$t5pr~2mb z&GBuM%e$7j*_}^~UzWhM^=gutsYFy;aQw1+D{o$5ye!6fey!L&&9si4H?Q1Vx$)G& zgze?0tW&qnkh*!Y=Y#khmhT1(&yW0Lx}UIN_SG=%sC1z_%%Jkwz%u5 z?Ca&q9iy!t)x7$D3zfgF*C13FE6!3!9>qc z&osq70%XkzPZ!4!3;($jPIEFj3b>fFt&jVr&~fPA7X`Vq4mWss4g{Dn7#q*nmc8-V zDmMEc2?bemuirI}b=mT@^KYqi#Esd>4|xUhzX!)Gi(PZ>xXrJn4Q0%;3-6|+6zizG zId=HO4P#~?t2AbA%Z%iQoYq;4e~R+^S`U3PFp&)YnDs2=v{;9ud*6Kf7h9j%3jx_04w3Q#Gm;lJC{6jVw?N78xKrc% efJ)1YwhXRi%VV1__MQX!iNVv=&t;ucLK6T`!hFa8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/tnt_down.png b/src/main/resources/assets/decisland/textures/block/tnt_down.png new file mode 100644 index 0000000000000000000000000000000000000000..1ad4632c5eeffba62f62f9db4694546a2c0a2f3c GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1qucL1RxB#}JFt$u~4s{rkUdpNK^BjU}HX9eVcd zvon~tLi@-35WA;r4IEwuhchI4+74z&G#E0xtCzjsaDV9$pmqjNS3j3^P6!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1quc!Tp{tjv*GOr%pb|>tx8|yxWQ2qk}ozuS4<1 z!sO5-k!Oj_(=>{fw)8R{y!XV9KSu z=Xd5juXz)&#`vjavwEqZOUQ}{)<;a0dR4Xg4`yl1$_&ff%)aN?54*cpm>rneXMIe2 z!8q%#gAdEa#UiFhPxC!p>>e*9k#BM^p8rPkjU%;%^V{SMSPQTGE#?p5DL?yS*~2T$ r_nDvf*gTT&eo~*PE&uKyS3RRJC)ZsAdWFH$)z4*}Q$iB}j_7vp literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/trellis.png b/src/main/resources/assets/decisland/textures/block/trellis.png new file mode 100644 index 0000000000000000000000000000000000000000..0697e977f2d5555a3bbcb2ed32fc97e45254edd7 GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufG}g$wN6f;1_@6W$B>G+w>LKO9dwX6{?TZ*j!=@xjWt5M zD;OrLe~^khw75fk!>zL_)BNV@Je_o3<;B*cvA_P;O?p=UWY&k%vA^@9JrlY;^{;Q3 zboXP_YkL>L10`3kE-&I+zNL)e;7$g!(}gcXADmmcyK2t1Rgo+Uvcwoy%yMN|l_uB# z=1%+BzEFed!iGt^7&ownG$(Si++zZ2t8w};H#|(_I>UV3fYR9_ozJ8$M80SL^=fI3 zwf+A`vI#!rjot?@`sA_x*dy}yn)iit8*UV1!+h3$IDY?AM(gKg+YkM1T0HX(SH#)2 zR^4^8FW(5WIGZQ6_qp+Mu6InUfZ_7P{QCXhUw-WSd}@&}3y{yia7^W-tbueo_o7CF Pd=TH$)z4*}Q$iB}FOs8% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/trellis_cover.png b/src/main/resources/assets/decisland/textures/block/trellis_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..eef03239039d8d17347850a7ead4000f3e446fcd GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikh0(?STtNb+=Jpcc{{y0#e&Ajv{NL@*gU-19`{}~*#R(=8UISV`@iy0XB z4ude`@%$AjKtX#?7sn6_|F>rh`G8hB2d@0Se{-M|XKcykM)Qf!+L!qh@LiiM`5{KD vV13gY8IE&|O~nlLmt7AeuRc&KsB(be?RU;xWsm*_pivB-u6{1-oD!MPx#1ZP1_K>z@;j|==^1poj522e~?MaH&0000305Sgw30007XQchF<0OhwZN&o-= z32;bRa{vGizW@LZzX3P}QzQTY0b@x-K~z{r?ULIL!ypVp%m4rM@C8bxDka&Zz0_JE zMD_u?9<3cm|4D5TSC`JM5Qfd+6Qsr#fQXTw<5|VRb~En{bqb2>Q1F~aReUr&BLr{> zzeeA{M~Vao0gO=-FguapMPfBifR?eC#^^PK9y)sf4zN?qq4vwTfNw=}ALylD8TL^; z=}ZtYs}um!+*@&pjtA+=_Bufho*jtZ^^!!+rMs~VSfa|YI~I}76ZA)Jj#&ALMZmDa zEh4*~V;R7=#qF+ujT0y}LKsE}v&%qqIl}Q8*#vk~xz~)zk-CKpIG^1&GC&lya$2`9 z159C=mQo_Hk(FcEz6x-zdbF)YaIqr>gg}~hS2cmdE0_&=bv4?Ic^SHIgx4FCWD07*qoM6N<$f?0FOU;qFB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/weather_console_down.png b/src/main/resources/assets/decisland/textures/block/weather_console_down.png new file mode 100644 index 0000000000000000000000000000000000000000..3c07d7188ce52fb193af935b7f611f2c04d0cd0a GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFa)(SnlcK7$R}mweKKrvjLCmSvHlK3;YCL8J3A@l&Lw0 za&K^4Y2%cha69VJfw!^ue#^Htbo3iICFLE8QFNWsbu_Vx`)!n>y}zP0$EO_ao7We9 zb>1Z?k{0^xX`4)7e8h`Qb$Lr~>fLSDetY+H?(YqGU*%+-zDOtjVLn+Qqhzopr0FR<;o&W#< literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/weather_console_up.png b/src/main/resources/assets/decisland/textures/block/weather_console_up.png new file mode 100644 index 0000000000000000000000000000000000000000..df8ef22f8b1fadb3178691f3df0b82cd871118fc GIT binary patch literal 539 zcmV+$0_6RPP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T!1eC(;^&gZ81;JH_x)(4C_#P_O(v7ftI{-0 zN@bMCslIM~1g%!fL>mkSMMLfN0uDL}VC<~5?J}W8Hz0I#QOzn|9LHwZ>!Fc0{6)+4 zI9S%7JH*NL^R|g49*s=Lbv2oHWEl*v=mcgb?LsMw`46ck`_`1m?zZp6A>4Em8E`SvrE$#SSmN{PiT;*U z?HF=GDPGW>GDIZ(%vVIF_FkOn3YaL@%oXXRX<8h(ab(R>R>F{3g}@WZT literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/wither_cone_crop.png b/src/main/resources/assets/decisland/textures/block/wither_cone_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..7f7001566d97b15e4516b0fbc732f8abcd8d962d GIT binary patch literal 1200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!6#=yXs@#Xw?AV;#qHKHUqKdq!Zu_%?nF(p4K zRlzeiF+DXXH8G{K@MNkD0|T>iW=KRygs+cPa(=E}B1ny1MQ#C5Hv@x>eMLcHa&~Ho zLQ-maW}dCm``!DM6f#q6mBLMZ4SWlnQ!_F>s)|yBtNcQetFn_VQY3>#8=6=sm|N-@ znwc0Fo9QSR85mmX8(8QY8tWPuS{ayGnVKs=ffCTRqLehNAQv~NT|l0#QbtKhft9{~ zd3m{Bxv^e;QM$gNr6te|BYh(yU7!lx;>x^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal z@=Hr>m4GgVcpATTy3Z|#Csn|#rR?eA z7*cU7>CgZF_RJCu5_ViM{~4J&1obXGddZo_$RfZT!@@N~;sS#MgW;mp4b1GmTmLI~ zPV>FV`CtET^~nXxRr*#jrEq(&IxsvmV`fX>a&S9%hV5mTkQmc!hH|kJasnDfo0u+p zraj|{ux0wBzv(3dqss+eAD$@;JCq&u*mp`jldkY+Uc=zo6vJ0!>JfN@B$hHeL6hrlnMw2i z!#s|L3?lIkJllAeF^K5K7fAFN^AxDYMg%$WGqX8e?8xCTV`ea2bbR6*v7?coGQ`u> K&t;ucLK6VyCWBW1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/block/yellow_butterfly_flower_crop.png b/src/main/resources/assets/decisland/textures/block/yellow_butterfly_flower_crop.png new file mode 100644 index 0000000000000000000000000000000000000000..5fa38edaa8c0e0505e50f9eef5a8d33924a2852f GIT binary patch literal 1302 zcmaJ>e@q)?7(OWLDg)Lf6Utb|mt!Vd()RB9i}s*G=@nZ;SyPB>=8tjQeWfSd5AF_I zaD;-o3^k5Kvk+a#Ow3F)S+=kkb(+D3u1hAy7)dt$&n0R!E&+*d;P5M>%s<3SF894( z-sgFr_x+yx#$)YIl$Y))#W1Wq5@zD)YtFwWBZd{F{`mS&6jbY>gx(=1^)#zOEWpd% z5JW__2gV`G5B6V&jTmOA6FL)mBHBiCvS?@XIrfaGAT)+GHf0o+>xDY#hCPDh$M0Oa zj01u9c*GO7e&N(c|Buw$sblN;*gd_3OtIB3k!h(Lro3o>G#q|q5azRpXdb$*+` z!Fr0`>&G96NXQw2 zU63V^XJotO0o{)yr4L#Vl}%bn+ZYoX7?EKWg0hqOmI{f{=>MmR;%2s{$KgZ0|4FQM z4l0m{Lroq~IdpKzx_l{x4yusVWwle5`wCNxrDR>!QnCUZND?@3Sde%*tsPtkM5A;> z(sWkhV1)7Gh{7%iJRR^lnHHbV%{T%KMTHojmvOf+0m>N+x!qK#wSZ-0Za{>RUcmAX zv7Rllc`t|xs?0!DcmeXQsw{%_o@rrgEzT|ZHn9BGT3lOV2_%NdpX|R*y0C@plV5K7 z76qHmhZ3^8ihO-?SMfLK*BXy7fzHgW?$x!mCWB?hf)&k~xbxPpb{VI!Vv}`QyWpCf z-v9K^P0uuk14UMoxmocmSo~D-i=rwRf0Jipr;?oaJN)~WIt{NeK7{0foul~u*tm~yKmdg3u+ku0n zA67Nbhbs2QN{u&3Uxy|4;!5pq;(YF{N^bP#8zv@UndvjUa&KYngR);gKRWiUH8&GE zbh~Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1ru3=XkFPwuaD3_dx#jri<-NuI=eHO7E-wDq&An?& zA0r%$c^uP>%CGV9VfunL9}rA16RB$x)hr0f@hpyMM&&Ekcy%4L`9Kgw=k99?Cm|Dd zewq$dzAPdxmXc~yQKyE+iq;Ld$NO+d@t@kYckqsV+>AU5+gVmUXy z4ba#V$F2^w>dr}mpso>4a{3(Om{G{Lz?Dxy+;dWV`El&(kgHBWt8Nz<-DCGP)^W@z zGT-iNUVY5?-nyaqr@8?g#zBxhNFVm(&4Xpt^)a%Cxk)h} zAd_fL0<+2#fqfd!49qBZjF0~$J|Zz+qsp&0tMWPDGeTB7Aaf9A7wsB$WAExN_VnH3 zWfCT*e~NFH@MS*6+74sP@gunMdDg-YS?w^0hmt6w?3zL`165z<%T+MX8FNu`oXST$ zreOKGDDE5Lhpcu$_FxahNKg@<58v;8J381U0Q;HaGx!uAzX`HG7bNp@H**n~SH1qsJOzjc#~6z#+oxS-#G4NE?)tf zVk=+2dxrQS>;HjY3lpoaO%|t5k^178QE;X=FY{l2dC|n59VTSgOx8ju)HS0;!Qz-v z)bkiAIt5^iZT}B;9kc8H4Z$-DpebBV95V_FpeeqUKRf7t?UFu{RWSZM_d3Thqu?CR z=R0C?Tlp&o!4=9#LVW1-u_j@XV~!uoLMq>V_z=n09zNp~ADOe6zYp5};fDn_#AojmpS8Y!b|Xl{WC%!btFJ%raZZBn!Ti~+{QPs7=atX1A%3Je zA9AOxzGhJ{6Lt@4g}CSY(bqHaDMIFR>mtqhKp+yy$?DV3sE?67%oW9)t3Sl|y`SRy zov8dsb3PCZk(k#|vrB##w47w-V?+Gf*~;fR1sIASY0d|Nl8A{CIDf6}65>o=W1aWf zMSn#ypJzjS&aM2MQ=~Z`Owy!Co{lS+=ZsmD`%EV zD~|w0*cr@@T9C}o-BidJ--2X*E)sk!(wq+jBO#L|A(OSs%q@<4oIA3&@-1Qu-(qJz zoJey%5R}U2WEcsauRVM4<$dz1-~E~YcK_7^%lkeZd|a-ppOI%+q&Xi5rT~pKW+&_z zf)t&_4e{Am`3O}sqkIdX@ywsqNVDV2pt5v=k?Q(a8@`{vek?TnL0K=5xFYJ+Q!I1F zy7r$KEsk72_)a0hxm~9)injn-&^HUU%iIWj6vr{PZXSFU6t7^vs@{&}=1qj%=lc6S zh(}B0??bpY2Z+m8pRrzdZ-C#2aIZfQZ}&CU@%S(Bi~_`R{Xs_&Td(`pfRCOZyKrq6 ze6M4R% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/leaves_golem.png b/src/main/resources/assets/decisland/textures/entity/leaves_golem.png new file mode 100644 index 0000000000000000000000000000000000000000..98b60d5a245c2c8c98b7c69f5f073a3d58281873 GIT binary patch literal 4017 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/zombie_warrior.png b/src/main/resources/assets/decisland/textures/entity/zombie_warrior.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab3c09f5228b5ae907b572c97dcadb8fd8ec863 GIT binary patch literal 1537 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 JF6*2UngES*M-Bi0 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/decisland/loot_table/entities/leaves_golem.json b/src/main/resources/data/decisland/loot_table/entities/leaves_golem.json new file mode 100644 index 0000000..011ac2d --- /dev/null +++ b/src/main/resources/data/decisland/loot_table/entities/leaves_golem.json @@ -0,0 +1,134 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:eye_of_nature", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:log", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 5, + "max": 20 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:emerald", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "decisland:emerald_nugget", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4, + "max": 12 + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:leaves", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 4, + "max": 12 + } + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "name": "decisland:natural_ring", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "decisland:herb_bag", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "decisland:wood_helmet", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "decisland:wood_chestplate", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "decisland:wood_leggings", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "decisland:wood_boots", + "weight": 1 + }, + { + "type": "minecraft:item", + "name": "decisland:leaves_dagger", + "weight": 2 + }, + { + "type": "minecraft:item", + "name": "decisland:poison_dart", + "weight": 4, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 11, + "max": 23 + } + } + ] + } + ] + } + ] +} diff --git a/src/main/resources/data/decisland/neoforge/biome_modifier/zombie_warrior_spawns.json b/src/main/resources/data/decisland/neoforge/biome_modifier/zombie_warrior_spawns.json new file mode 100644 index 0000000..4a1f497 --- /dev/null +++ b/src/main/resources/data/decisland/neoforge/biome_modifier/zombie_warrior_spawns.json @@ -0,0 +1,10 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#decisland:spawns_zombie_warrior", + "spawners": { + "type": "decisland:zombie_warrior", + "weight": 20, + "minCount": 1, + "maxCount": 2 + } +} diff --git a/src/main/resources/data/decisland/tags/worldgen/biome/spawns_zombie_warrior.json b/src/main/resources/data/decisland/tags/worldgen/biome/spawns_zombie_warrior.json new file mode 100644 index 0000000..cc2f7a1 --- /dev/null +++ b/src/main/resources/data/decisland/tags/worldgen/biome/spawns_zombie_warrior.json @@ -0,0 +1,10 @@ +{ + "values": [ + "minecraft:plains", + "minecraft:forest", + "minecraft:birch_forest", + "minecraft:dark_forest", + "minecraft:taiga", + "minecraft:snowy_plains" + ] +} From ab432d3d0c437ede19ae18928dd8583e9e47a124 Mon Sep 17 00:00:00 2001 From: Aolkzyeoer Date: Sat, 3 Oct 2026 16:10:48 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=89=B9=E9=87=8F=E7=A7=BB=E6=A4=8D?= =?UTF-8?q?=E5=9F=BA=E5=B2=A9=E7=89=88=E5=85=A8=E9=83=A8160=E4=B8=AA?= =?UTF-8?q?=E7=94=9F=E7=89=A9=EF=BC=9A=E5=BB=BA=E6=A8=A1/=E5=8A=A8?= =?UTF-8?q?=E7=94=BB/=E6=8A=80=E8=83=BDAI/=E6=88=98=E5=88=A9=E5=93=81/?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 BedrockMob 数据驱动框架(MobConfig:血量/速度/攻击/近战远程AI/目标选择) - 新增 GeneratedMobs(160实体注册+属性+生成位置)、GeneratedVanillaEntities(107原版基类)、GeneratedMobClient(批量渲染器) - 移植基岩几何体/动画/贴图资源,含 legacy 1.8.0 几何格式兼容 - 75张战利品表、49项生成条件(biome tag + neoforge:add_spawns) - entity_type 标签:can_breathe_under_water(12)、undead等5类(55) - 生成器 tools/entity_port/generate.mjs(Node,可复现) --- src/main/java/com/dec/decisland/DecIsland.kt | 2 + .../bedrock/model/SimpleBedrockMobModel.kt | 25 + .../client/renderer/BedrockMobRenderer.kt | 36 + .../client/renderer/GeneratedMobClient.kt | 979 +++++++++ .../com/dec/decisland/entity/GeneratedMobs.kt | 1350 +++++++++++++ .../entity/GeneratedVanillaEntities.kt | 386 ++++ .../dec/decisland/entity/custom/BedrockMob.kt | 148 ++ .../dec/decisland/events/ModClientEvents.kt | 2 + .../dec/decisland/events/ModEventBusEvents.kt | 3 + .../entity/abyssal_controller.animation.json | 1 + .../entity/abyssal_shadow.animation.json | 1 + .../animations/entity/ash_bomb.animation.json | 1 + .../entity/ash_horse.animation.json | 1 + .../entity/ash_horse_head.animation.json | 1 + .../entity/ash_knight.animation.json | 1 + .../entity/ash_knight_head.animation.json | 1 + .../entity/ash_sword.animation.json | 1 + .../entity/ash_sword_phantom.animation.json | 1 + .../entity/blackstone_thorn.animation.json | 1 + .../entity/chest_monster.animation.json | 1 + .../animations/entity/chester.animation.json | 1 + .../animations/entity/clam.animation.json | 1 + .../animations/entity/crab.animation.json | 1 + .../entity/dark_werewolf.animation.json | 1 + .../entity/ender_snail.animation.json | 1 + .../entity/ender_snake.animation.json | 1 + .../entity/entity_soul.animation.json | 1 + .../entity/entity_soul_1.animation.json | 1 + .../entity/escaped_soul_entity.animation.json | 1 + .../everlasting_winter_ghast.animation.json | 1 + .../everlasting_winter_shadow.animation.json | 1 + .../friendly_little_soul.animation.json | 1 + .../entity/frozen_heart.animation.json | 1 + .../frozen_heart_sleeping.animation.json | 1 + .../entity/frozen_shadow.animation.json | 1 + .../entity/ghost_diamond_axe.animation.json | 1 + .../entity/ghost_diamond_staff.animation.json | 1 + .../entity/ghost_diamond_sword.animation.json | 1 + .../entity/ghost_iron_axe.animation.json | 1 + .../entity/ghost_iron_sword.animation.json | 1 + .../entity/ghost_wooden_staff.animation.json | 1 + .../entity/ghost_wooden_sword.animation.json | 1 + .../animations/entity/goblin.animation.json | 1 + .../entity/goblin_sniper.animation.json | 1 + .../entity/goblin_wizard.animation.json | 1 + .../entity/host_of_deep.animation.json | 1 + .../entity/ice_monster.animation.json | 1 + .../entity/ice_spirit.animation.json | 1 + .../entity/ice_thorn.animation.json | 1 + .../entity/ice_wizard.animation.json | 1 + .../entity/illusioner.animation.json | 1 + .../entity/lava_lizard.animation.json | 1 + .../entity/little_soul.animation.json | 1 + .../entity/murloc_wizard.animation.json | 1 + .../entity/mushroom_monster.animation.json | 1 + .../animations/entity/nautilus.animation.json | 1 + .../animations/entity/saucer.animation.json | 1 + .../entity/sea_urchin.animation.json | 1 + .../entity/shadow_of_deep.animation.json | 1 + .../entity/shadow_soul_1.animation.json | 1 + .../entity/shadow_soul_2.animation.json | 1 + .../entity/soul_soldier.animation.json | 1 + .../animations/entity/werewolf.animation.json | 1 + .../entity/abyssal_controller.geometry.json | 1 + .../entity/abyssal_shadow.geometry.json | 1 + .../models/entity/ash_bomb.geometry.json | 1 + .../models/entity/ash_horse.geometry.json | 415 ++++ .../entity/ash_horse_head.geometry.json | 142 ++ .../models/entity/ash_knight.geometry.json | 218 ++ .../entity/ash_knight_head.geometry.json | 53 + .../models/entity/ash_sword.geometry.json | 1 + .../entity/ash_sword_phantom.geometry.json | 1 + .../entity/blackstone_thorn.geometry.json | 1 + .../models/entity/chest_monster.geometry.json | 1 + .../models/entity/chester.geometry.json | 1 + .../bedrock/models/entity/clam.geometry.json | 1 + .../bedrock/models/entity/crab.geometry.json | 1 + .../models/entity/dark_werewolf.geometry.json | 84 + .../models/entity/ender_snail.geometry.json | 1 + .../models/entity/ender_snake.geometry.json | 1 + .../models/entity/entity_soul.geometry.json | 250 +++ .../models/entity/entity_soul_1.geometry.json | 250 +++ .../entity/escaped_soul_entity.geometry.json | 250 +++ .../everlasting_winter_ghast.geometry.json | 1 + .../everlasting_winter_shadow.geometry.json | 1 + .../entity/friendly_little_soul.geometry.json | 1 + .../models/entity/frozen_heart.geometry.json | 1 + .../frozen_heart_sleeping.geometry.json | 1 + .../models/entity/frozen_shadow.geometry.json | 111 ++ .../entity/ghost_diamond_axe.geometry.json | 1 + .../entity/ghost_diamond_staff.geometry.json | 1 + .../entity/ghost_diamond_sword.geometry.json | 1 + .../entity/ghost_iron_axe.geometry.json | 1 + .../entity/ghost_iron_sword.geometry.json | 1 + .../entity/ghost_wooden_staff.geometry.json | 1 + .../entity/ghost_wooden_sword.geometry.json | 1 + .../models/entity/goblin.geometry.json | 1 + .../models/entity/goblin_sniper.geometry.json | 1 + .../models/entity/goblin_wizard.geometry.json | 1 + .../models/entity/host_of_deep.geometry.json | 84 + .../models/entity/ice_monster.geometry.json | 182 ++ .../models/entity/ice_spirit.geometry.json | 121 ++ .../models/entity/ice_thorn.geometry.json | 1 + .../models/entity/ice_wizard.geometry.json | 131 ++ .../models/entity/illusioner.geometry.json | 150 ++ .../models/entity/lava_lizard.geometry.json | 65 + .../models/entity/little_soul.geometry.json | 1 + .../models/entity/murloc_wizard.geometry.json | 1 + .../entity/mushroom_monster.geometry.json | 1 + .../models/entity/nautilus.geometry.json | 1 + .../models/entity/saucer.geometry.json | 1 + .../models/entity/sea_urchin.geometry.json | 1 + .../entity/shadow_of_deep.geometry.json | 84 + .../models/entity/shadow_soul_1.geometry.json | 250 +++ .../models/entity/shadow_soul_2.geometry.json | 250 +++ .../models/entity/soul_soldier.geometry.json | 157 ++ .../models/entity/werewolf.geometry.json | 84 + .../textures/entity/abyssal_controller.png | Bin 0 -> 2377 bytes .../textures/entity/abyssal_shadow.png | Bin 0 -> 638 bytes .../textures/entity/angry_chicken.png | Bin 0 -> 736 bytes .../decisland/textures/entity/archer.png | Bin 0 -> 1734 bytes .../decisland/textures/entity/ash_blaze.png | Bin 0 -> 914 bytes .../decisland/textures/entity/ash_bomb.png | Bin 0 -> 810 bytes .../decisland/textures/entity/ash_horse.png | Bin 0 -> 6050 bytes .../textures/entity/ash_horse_head.png | Bin 0 -> 6050 bytes .../decisland/textures/entity/ash_knight.png | Bin 0 -> 4920 bytes .../textures/entity/ash_knight_head.png | Bin 0 -> 4920 bytes .../textures/entity/ash_pufferfish.png | Bin 0 -> 1620 bytes .../decisland/textures/entity/ash_sword.png | Bin 0 -> 362 bytes .../textures/entity/ash_sword_phantom.png | Bin 0 -> 434 bytes .../textures/entity/baby_ender_dragon.png | Bin 0 -> 2013 bytes .../decisland/textures/entity/bat_charger.png | Bin 0 -> 802 bytes .../textures/entity/blackstone_thorn.png | Bin 0 -> 204 bytes .../textures/entity/blood_zombie.png | Bin 0 -> 974 bytes .../decisland/textures/entity/bomber.png | Bin 0 -> 2615 bytes .../decisland/textures/entity/brown_bear.png | Bin 0 -> 1657 bytes .../decisland/textures/entity/carnager.png | Bin 0 -> 2047 bytes .../textures/entity/chest_monster.png | Bin 0 -> 812 bytes .../decisland/textures/entity/chester.png | Bin 0 -> 812 bytes .../assets/decisland/textures/entity/clam.png | Bin 0 -> 326 bytes .../assets/decisland/textures/entity/crab.png | Bin 0 -> 17619 bytes .../textures/entity/crimson_slime.png | Bin 0 -> 624 bytes .../textures/entity/dark_snow_man.png | Bin 0 -> 843 bytes .../textures/entity/dark_werewolf.png | Bin 0 -> 1653 bytes .../decisland/textures/entity/doctor.png | Bin 0 -> 1378 bytes .../decisland/textures/entity/elf_of_ash.png | Bin 0 -> 866 bytes .../textures/entity/elf_of_chaos.png | Bin 0 -> 2351 bytes .../decisland/textures/entity/elf_of_deep.png | Bin 0 -> 1194 bytes .../decisland/textures/entity/elf_of_dust.png | Bin 0 -> 1460 bytes .../textures/entity/enchant_armor.png | Bin 0 -> 165 bytes .../textures/entity/enchant_armor_by_boss.png | Bin 0 -> 165 bytes .../textures/entity/enchant_diamond_armor.png | Bin 0 -> 165 bytes .../textures/entity/enchant_illager.png | Bin 0 -> 1099 bytes .../textures/entity/enchant_illager_1.png | Bin 0 -> 1099 bytes .../textures/entity/enchant_illager_2.png | Bin 0 -> 1099 bytes .../textures/entity/end_stone_golem.png | Bin 0 -> 3646 bytes .../decisland/textures/entity/ender_snail.png | Bin 0 -> 524 bytes .../decisland/textures/entity/ender_snake.png | Bin 0 -> 854 bytes .../decisland/textures/entity/ender_witch.png | Bin 0 -> 2267 bytes .../textures/entity/ender_witch_puppet.png | Bin 0 -> 2377 bytes .../decisland/textures/entity/entity_soul.png | Bin 0 -> 1990 bytes .../textures/entity/entity_soul_1.png | Bin 0 -> 1990 bytes .../textures/entity/escaped_soul_entity.png | Bin 0 -> 2898 bytes .../entity/everlasting_winter_ghast.png | Bin 0 -> 3044 bytes .../entity/everlasting_winter_ghast_1.png | Bin 0 -> 1342 bytes .../entity/everlasting_winter_shadow.png | Bin 0 -> 1904 bytes .../textures/entity/evil_snow_man.png | Bin 0 -> 835 bytes .../decisland/textures/entity/fire_storm.png | Bin 0 -> 536 bytes .../textures/entity/friendly_little_soul.png | Bin 0 -> 429 bytes .../textures/entity/friendly_spider.png | Bin 0 -> 1072 bytes .../textures/entity/frozen_ghast.png | Bin 0 -> 1121 bytes .../textures/entity/frozen_heart.png | Bin 0 -> 462 bytes .../textures/entity/frozen_heart_sleeping.png | Bin 0 -> 441 bytes .../decisland/textures/entity/frozen_man.png | Bin 0 -> 1430 bytes .../textures/entity/frozen_shadow.png | Bin 0 -> 3627 bytes .../textures/entity/frozen_spider.png | Bin 0 -> 887 bytes .../decisland/textures/entity/gargoyle.png | Bin 0 -> 1115 bytes .../textures/entity/ghost_diamond_axe.png | Bin 0 -> 178 bytes .../textures/entity/ghost_diamond_staff.png | Bin 0 -> 770 bytes .../textures/entity/ghost_diamond_sword.png | Bin 0 -> 680 bytes .../textures/entity/ghost_iron_axe.png | Bin 0 -> 207 bytes .../textures/entity/ghost_iron_sword.png | Bin 0 -> 654 bytes .../textures/entity/ghost_wooden_staff.png | Bin 0 -> 681 bytes .../textures/entity/ghost_wooden_sword.png | Bin 0 -> 634 bytes .../decisland/textures/entity/goblin.png | Bin 0 -> 3247 bytes .../textures/entity/goblin_sniper.png | Bin 0 -> 4237 bytes .../textures/entity/goblin_wizard.png | Bin 0 -> 4193 bytes .../textures/entity/host_of_deep.png | Bin 0 -> 1631 bytes .../decisland/textures/entity/ice_bat.png | Bin 0 -> 1428 bytes .../decisland/textures/entity/ice_blaze.png | Bin 0 -> 1039 bytes .../decisland/textures/entity/ice_creeper.png | Bin 0 -> 1320 bytes .../decisland/textures/entity/ice_monster.png | Bin 0 -> 5592 bytes .../decisland/textures/entity/ice_spirit.png | Bin 0 -> 1255 bytes .../decisland/textures/entity/ice_thorn.png | Bin 0 -> 205 bytes .../decisland/textures/entity/ice_wizard.png | Bin 0 -> 4376 bytes .../decisland/textures/entity/ice_zombie.png | Bin 0 -> 3021 bytes .../textures/entity/illusion_zombie.png | Bin 0 -> 1340 bytes .../decisland/textures/entity/illusioner.png | Bin 0 -> 2451 bytes .../textures/entity/illusioner_puppet.png | Bin 0 -> 2451 bytes .../textures/entity/jungle_spider.png | Bin 0 -> 1177 bytes .../textures/entity/king_of_pillager.png | Bin 0 -> 1912 bytes .../decisland/textures/entity/lava_lizard.png | Bin 0 -> 345 bytes .../decisland/textures/entity/life_insect.png | Bin 0 -> 1047 bytes .../decisland/textures/entity/little_bat.png | Bin 0 -> 1216 bytes .../decisland/textures/entity/little_soul.png | Bin 0 -> 429 bytes .../textures/entity/lurk_skeleton.png | Bin 0 -> 1482 bytes .../decisland/textures/entity/lurk_zombie.png | Bin 0 -> 1292 bytes .../decisland/textures/entity/mummy.png | Bin 0 -> 1054 bytes .../textures/entity/mummy_skeleton.png | Bin 0 -> 983 bytes .../decisland/textures/entity/murloc.png | Bin 0 -> 21046 bytes .../textures/entity/murloc_wizard.png | Bin 0 -> 21298 bytes .../textures/entity/mushroom_monster.png | Bin 0 -> 786 bytes .../textures/entity/mushroom_zombie.png | Bin 0 -> 1909 bytes .../textures/entity/mystical_skeleton.png | Bin 0 -> 439 bytes .../decisland/textures/entity/nautilus.png | Bin 0 -> 2112 bytes .../textures/entity/nether_creeper.png | Bin 0 -> 4816 bytes .../textures/entity/nether_golem.png | Bin 0 -> 5299 bytes .../textures/entity/nether_phantom.png | Bin 0 -> 1017 bytes .../textures/entity/nether_skeleton.png | Bin 0 -> 2222 bytes .../entity/nether_skeleton_wizard.png | Bin 0 -> 767 bytes .../textures/entity/obsidian_golem.png | Bin 0 -> 975 bytes .../textures/entity/pillager_by_boss.png | Bin 0 -> 1823 bytes .../decisland/textures/entity/pirate.png | Bin 0 -> 1431 bytes .../textures/entity/player_ghost.png | Bin 0 -> 1172 bytes .../decisland/textures/entity/polar_wolf.png | Bin 0 -> 1769 bytes .../decisland/textures/entity/predators.png | Bin 0 -> 780 bytes .../textures/entity/radiate_creeper.png | Bin 0 -> 2539 bytes .../textures/entity/radiate_enderman.png | Bin 0 -> 513 bytes .../textures/entity/radiate_skeleton.png | Bin 0 -> 913 bytes .../textures/entity/radiate_spider.png | Bin 0 -> 1176 bytes .../decisland/textures/entity/real_soul.png | Bin 0 -> 466 bytes .../decisland/textures/entity/rumorer.png | Bin 0 -> 1141 bytes .../decisland/textures/entity/sardine.png | Bin 0 -> 938 bytes .../decisland/textures/entity/saucer.png | Bin 0 -> 1324 bytes .../decisland/textures/entity/sea_urchin.png | Bin 0 -> 2152 bytes .../textures/entity/shadow_archer.png | Bin 0 -> 3229 bytes .../textures/entity/shadow_creeper.png | Bin 0 -> 738 bytes .../textures/entity/shadow_of_deep.png | Bin 0 -> 1631 bytes .../textures/entity/shadow_of_sea.png | Bin 0 -> 1268 bytes .../textures/entity/shadow_skeleton.png | Bin 0 -> 514 bytes .../entity/shadow_skeleton_puppet.png | Bin 0 -> 877 bytes .../textures/entity/shadow_soul_1.png | Bin 0 -> 1979 bytes .../textures/entity/shadow_soul_2.png | Bin 0 -> 1983 bytes .../textures/entity/shadow_zombie.png | Bin 0 -> 800 bytes .../textures/entity/shadow_zombie_puppet.png | Bin 0 -> 1649 bytes .../textures/entity/simple_glider.png | Bin 0 -> 2711 bytes .../textures/entity/skeleton_assassin.png | Bin 0 -> 680 bytes .../textures/entity/skeleton_knight.png | Bin 0 -> 1015 bytes .../entity/skeleton_knight_commander.png | Bin 0 -> 596 bytes .../textures/entity/skeleton_warrior.png | Bin 0 -> 1020 bytes .../textures/entity/skeleton_wizard.png | Bin 0 -> 801 bytes .../textures/entity/son_of_chaos.png | Bin 0 -> 2351 bytes .../textures/entity/son_of_nature.png | Bin 0 -> 4126 bytes .../assets/decisland/textures/entity/soul.png | Bin 0 -> 448 bytes .../decisland/textures/entity/soul_blaze.png | Bin 0 -> 1772 bytes .../decisland/textures/entity/soul_insect.png | Bin 0 -> 1162 bytes .../textures/entity/soul_skeleton.png | Bin 0 -> 2083 bytes .../textures/entity/soul_soldier.png | Bin 0 -> 1878 bytes .../decisland/textures/entity/soul_zombie.png | Bin 0 -> 2405 bytes .../assets/decisland/textures/entity/star.png | Bin 0 -> 1354 bytes .../decisland/textures/entity/stone_golem.png | Bin 0 -> 1004 bytes .../textures/entity/swamp_drowned.png | Bin 0 -> 1812 bytes .../decisland/textures/entity/swamp_golem.png | Bin 0 -> 4747 bytes .../decisland/textures/entity/tnt_creeper.png | Bin 0 -> 3246 bytes .../textures/entity/tnt_snow_man.png | Bin 0 -> 2403 bytes .../decisland/textures/entity/vampire_bat.png | Bin 0 -> 749 bytes .../textures/entity/vampire_bat_by_boss.png | Bin 0 -> 749 bytes .../textures/entity/vengeful_ghost.png | Bin 0 -> 1628 bytes .../textures/entity/vindicator_by_boss.png | Bin 0 -> 1568 bytes .../textures/entity/warped_skeleton.png | Bin 0 -> 1404 bytes .../decisland/textures/entity/watcher.png | Bin 0 -> 924 bytes .../decisland/textures/entity/werewolf.png | Bin 0 -> 1606 bytes .../decisland/textures/entity/zombie_fish.png | Bin 0 -> 1380 bytes .../textures/entity/zombie_summoner.png | Bin 0 -> 1616 bytes .../entities/abyssal_controller.json | 308 +++ .../loot_table/entities/ash_blaze.json | 102 + .../loot_table/entities/ash_horse_head.json | 65 + .../loot_table/entities/ash_knight.json | 92 + .../loot_table/entities/ash_knight_head.json | 55 + .../loot_table/entities/ash_pufferfish.json | 15 + .../loot_table/entities/ash_sword.json | 51 + .../loot_table/entities/blood_zombie.json | 134 ++ .../decisland/loot_table/entities/bomber.json | 73 + .../loot_table/entities/brown_bear.json | 81 + .../loot_table/entities/carnager.json | 37 + .../loot_table/entities/chest_monster.json | 203 ++ .../decisland/loot_table/entities/clam.json | 24 + .../loot_table/entities/dark_snow_man.json | 24 + .../loot_table/entities/elf_of_deep.json | 15 + .../loot_table/entities/enchant_illager.json | 120 ++ .../loot_table/entities/end_stone_golem.json | 149 ++ .../loot_table/entities/ender_snail.json | 64 + .../loot_table/entities/ender_snake.json | 74 + .../entities/everlasting_winter_ghast.json | 129 ++ .../loot_table/entities/evil_snow_man.json | 24 + .../loot_table/entities/frozen_heart.json | 108 + .../loot_table/entities/frozen_spider.json | 96 + .../loot_table/entities/gargoyle.json | 54 + .../decisland/loot_table/entities/goblin.json | 140 ++ .../loot_table/entities/goblin_sniper.json | 140 ++ .../loot_table/entities/goblin_wizard.json | 140 ++ .../loot_table/entities/host_of_deep.json | 86 + .../loot_table/entities/ice_blaze.json | 77 + .../loot_table/entities/ice_monster.json | 59 + .../loot_table/entities/ice_spirit.json | 44 + .../loot_table/entities/ice_wizard.json | 64 + .../loot_table/entities/ice_zombie.json | 105 + .../loot_table/entities/jungle_spider.json | 91 + .../loot_table/entities/king_of_pillager.json | 187 ++ .../loot_table/entities/lava_lizard.json | 38 + .../loot_table/entities/life_insect.json | 15 + .../loot_table/entities/lurk_zombie.json | 134 ++ .../decisland/loot_table/entities/mummy.json | 98 + .../loot_table/entities/mummy_skeleton.json | 91 + .../decisland/loot_table/entities/murloc.json | 115 ++ .../entities/mystical_skeleton.json | 113 ++ .../loot_table/entities/nautilus.json | 24 + .../loot_table/entities/nether_creeper.json | 44 + .../loot_table/entities/nether_golem.json | 80 + .../loot_table/entities/nether_phantom.json | 78 + .../loot_table/entities/nether_skeleton.json | 92 + .../entities/nether_skeleton_wizard.json | 100 + .../loot_table/entities/obsidian_golem.json | 149 ++ .../decisland/loot_table/entities/pirate.json | 37 + .../loot_table/entities/predators.json | 92 + .../loot_table/entities/radiate_creeper.json | 162 ++ .../loot_table/entities/radiate_enderman.json | 32 + .../loot_table/entities/radiate_skeleton.json | 56 + .../loot_table/entities/radiate_spider.json | 78 + .../loot_table/entities/rumorer.json | 52 + .../loot_table/entities/sardine.json | 41 + .../decisland/loot_table/entities/saucer.json | 68 + .../loot_table/entities/sea_urchin.json | 38 + .../loot_table/entities/shadow_of_deep.json | 15 + .../loot_table/entities/shadow_skeleton.json | 81 + .../loot_table/entities/shadow_zombie.json | 32 + .../loot_table/entities/simple_glider.json | 72 + .../loot_table/entities/skeleton_wizard.json | 54 + .../loot_table/entities/soul_blaze.json | 32 + .../loot_table/entities/soul_insect.json | 24 + .../loot_table/entities/soul_soldier.json | 24 + .../decisland/loot_table/entities/star.json | 43 + .../loot_table/entities/stone_golem.json | 149 ++ .../loot_table/entities/swamp_drowned.json | 81 + .../loot_table/entities/swamp_golem.json | 85 + .../loot_table/entities/tnt_creeper.json | 44 + .../loot_table/entities/tnt_snow_man.json | 29 + .../loot_table/entities/vampire_bat.json | 32 + .../loot_table/entities/warped_skeleton.json | 115 ++ .../biome_modifier/ash_blaze_spawns.json | 10 + .../biome_modifier/ash_pufferfish_spawns.json | 10 + .../biome_modifier/bomber_spawns.json | 10 + .../biome_modifier/brown_bear_spawns.json | 10 + .../biome_modifier/carnager_spawns.json | 10 + .../biome_modifier/chest_monster_spawns.json | 10 + .../neoforge/biome_modifier/clam_spawns.json | 10 + .../neoforge/biome_modifier/crab_spawns.json | 10 + .../biome_modifier/crimson_slime_spawns.json | 10 + .../biome_modifier/dark_snow_man_spawns.json | 10 + .../biome_modifier/ender_snail_spawns.json | 10 + .../biome_modifier/ender_snake_spawns.json | 10 + .../biome_modifier/frozen_spider_spawns.json | 10 + .../biome_modifier/goblin_spawns.json | 10 + .../biome_modifier/ice_zombie_spawns.json | 10 + .../biome_modifier/illusioner_spawns.json | 10 + .../biome_modifier/jungle_spider_spawns.json | 10 + .../biome_modifier/lava_lizard_spawns.json | 10 + .../biome_modifier/life_insect_spawns.json | 10 + .../biome_modifier/mummy_skeleton_spawns.json | 10 + .../neoforge/biome_modifier/mummy_spawns.json | 10 + .../biome_modifier/murloc_spawns.json | 10 + .../mushroom_zombie_spawns.json | 10 + .../mystical_skeleton_spawns.json | 10 + .../biome_modifier/nautilus_spawns.json | 10 + .../biome_modifier/nether_creeper_spawns.json | 10 + .../biome_modifier/nether_golem_spawns.json | 10 + .../biome_modifier/nether_phantom_spawns.json | 10 + .../nether_skeleton_spawns.json | 10 + .../biome_modifier/obsidian_golem_spawns.json | 10 + .../biome_modifier/polar_wolf_spawns.json | 10 + .../biome_modifier/pumpkin_slime_spawns.json | 10 + .../biome_modifier/rumorer_spawns.json | 10 + .../biome_modifier/sardine_spawns.json | 10 + .../biome_modifier/saucer_spawns.json | 10 + .../biome_modifier/sea_urchin_spawns.json | 10 + .../biome_modifier/shadow_of_sea_spawns.json | 10 + .../biome_modifier/soul_blaze_spawns.json | 10 + .../biome_modifier/soul_insect_spawns.json | 10 + .../biome_modifier/soul_skeleton_spawns.json | 10 + .../biome_modifier/soul_zombie_spawns.json | 10 + .../neoforge/biome_modifier/star_spawns.json | 10 + .../biome_modifier/stone_golem_spawns.json | 10 + .../biome_modifier/swamp_drowned_spawns.json | 10 + .../biome_modifier/swamp_golem_spawns.json | 10 + .../biome_modifier/vampire_bat_spawns.json | 10 + .../warped_skeleton_spawns.json | 10 + .../biome_modifier/werewolf_spawns.json | 10 + .../biome_modifier/zombie_fish_spawns.json | 10 + .../tags/worldgen/biome/spawns_ash_blaze.json | 5 + .../worldgen/biome/spawns_ash_pufferfish.json | 13 + .../tags/worldgen/biome/spawns_bomber.json | 5 + .../worldgen/biome/spawns_brown_bear.json | 8 + .../tags/worldgen/biome/spawns_carnager.json | 8 + .../worldgen/biome/spawns_chest_monster.json | 5 + .../tags/worldgen/biome/spawns_clam.json | 13 + .../tags/worldgen/biome/spawns_crab.json | 13 + .../worldgen/biome/spawns_crimson_slime.json | 5 + .../worldgen/biome/spawns_dark_snow_man.json | 12 + .../worldgen/biome/spawns_ender_snail.json | 9 + .../worldgen/biome/spawns_ender_snake.json | 9 + .../worldgen/biome/spawns_frozen_spider.json | 12 + .../tags/worldgen/biome/spawns_goblin.json | 14 + .../worldgen/biome/spawns_ice_zombie.json | 12 + .../worldgen/biome/spawns_illusioner.json | 7 + .../worldgen/biome/spawns_jungle_spider.json | 7 + .../worldgen/biome/spawns_lava_lizard.json | 9 + .../worldgen/biome/spawns_life_insect.json | 5 + .../tags/worldgen/biome/spawns_mummy.json | 5 + .../worldgen/biome/spawns_mummy_skeleton.json | 5 + .../tags/worldgen/biome/spawns_murloc.json | 13 + .../biome/spawns_mushroom_zombie.json | 5 + .../biome/spawns_mystical_skeleton.json | 7 + .../tags/worldgen/biome/spawns_nautilus.json | 13 + .../worldgen/biome/spawns_nether_creeper.json | 5 + .../worldgen/biome/spawns_nether_golem.json | 5 + .../worldgen/biome/spawns_nether_phantom.json | 5 + .../biome/spawns_nether_skeleton.json | 5 + .../worldgen/biome/spawns_obsidian_golem.json | 14 + .../worldgen/biome/spawns_polar_wolf.json | 12 + .../worldgen/biome/spawns_pumpkin_slime.json | 6 + .../tags/worldgen/biome/spawns_rumorer.json | 6 + .../tags/worldgen/biome/spawns_sardine.json | 16 + .../tags/worldgen/biome/spawns_saucer.json | 13 + .../worldgen/biome/spawns_sea_urchin.json | 13 + .../worldgen/biome/spawns_shadow_of_sea.json | 13 + .../worldgen/biome/spawns_soul_blaze.json | 5 + .../worldgen/biome/spawns_soul_insect.json | 5 + .../worldgen/biome/spawns_soul_skeleton.json | 5 + .../worldgen/biome/spawns_soul_zombie.json | 5 + .../tags/worldgen/biome/spawns_star.json | 5 + .../worldgen/biome/spawns_stone_golem.json | 14 + .../worldgen/biome/spawns_swamp_drowned.json | 6 + .../worldgen/biome/spawns_swamp_golem.json | 6 + .../worldgen/biome/spawns_vampire_bat.json | 14 + .../biome/spawns_warped_skeleton.json | 5 + .../tags/worldgen/biome/spawns_werewolf.json | 7 + .../worldgen/biome/spawns_zombie_fish.json | 9 + .../entity_type/can_breathe_under_water.json | 16 + .../entity_type/ignores_poison_and_regen.json | 59 + .../inverted_healing_and_harm.json | 59 + .../tags/entity_type/sensitive_to_smite.json | 59 + .../minecraft/tags/entity_type/undead.json | 59 + .../tags/entity_type/wither_friends.json | 59 + tools/entity_port/client_spec.json | 1762 +++++++++++++++++ tools/entity_port/gen_report.txt | 51 + tools/entity_port/generate.mjs | 1130 +++++++++++ tools/entity_port/jar_extract.mjs | 65 + tools/entity_port/recon.mjs | 29 + tools/entity_port/vanilla_items.json | 1 + tools/entity_port/vanilla_tex/blackstone.png | Bin 0 -> 204 bytes tools/entity_port/vanilla_tex/ice.png | Bin 0 -> 205 bytes tools/entity_port/vanilla_tex/stray.png | Bin 0 -> 439 bytes tools/entity_port/verify_mc.json | 488 +++++ tools/entity_port/verify_mc.mjs | 86 + tools/entity_port/verify_mc2.json | 91 + tools/entity_port/verify_mc2.mjs | 39 + 466 files changed, 17280 insertions(+) create mode 100644 src/main/java/com/dec/decisland/client/bedrock/model/SimpleBedrockMobModel.kt create mode 100644 src/main/java/com/dec/decisland/client/renderer/BedrockMobRenderer.kt create mode 100644 src/main/java/com/dec/decisland/client/renderer/GeneratedMobClient.kt create mode 100644 src/main/java/com/dec/decisland/entity/GeneratedMobs.kt create mode 100644 src/main/java/com/dec/decisland/entity/GeneratedVanillaEntities.kt create mode 100644 src/main/java/com/dec/decisland/entity/custom/BedrockMob.kt create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/abyssal_controller.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/abyssal_shadow.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ash_bomb.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ash_horse.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ash_horse_head.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ash_knight.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ash_knight_head.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ash_sword.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ash_sword_phantom.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/blackstone_thorn.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/chest_monster.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/chester.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/clam.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/crab.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/dark_werewolf.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ender_snail.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ender_snake.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/entity_soul.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/entity_soul_1.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/escaped_soul_entity.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/everlasting_winter_ghast.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/everlasting_winter_shadow.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/friendly_little_soul.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/frozen_heart.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/frozen_heart_sleeping.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/frozen_shadow.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ghost_diamond_axe.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ghost_diamond_staff.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ghost_diamond_sword.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ghost_iron_axe.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ghost_iron_sword.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ghost_wooden_staff.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ghost_wooden_sword.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/goblin.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/goblin_sniper.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/goblin_wizard.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/host_of_deep.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ice_monster.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ice_spirit.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ice_thorn.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/ice_wizard.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/illusioner.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/lava_lizard.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/little_soul.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/murloc_wizard.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/mushroom_monster.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/nautilus.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/saucer.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/sea_urchin.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/shadow_of_deep.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/shadow_soul_1.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/shadow_soul_2.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/soul_soldier.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/animations/entity/werewolf.animation.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/abyssal_controller.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/abyssal_shadow.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ash_bomb.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ash_horse.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ash_horse_head.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ash_knight.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ash_knight_head.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ash_sword.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ash_sword_phantom.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/blackstone_thorn.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/chest_monster.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/chester.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/clam.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/crab.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/dark_werewolf.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ender_snail.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ender_snake.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/entity_soul.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/entity_soul_1.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/escaped_soul_entity.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/everlasting_winter_ghast.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/everlasting_winter_shadow.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/friendly_little_soul.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/frozen_heart.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/frozen_heart_sleeping.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/frozen_shadow.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ghost_diamond_axe.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ghost_diamond_staff.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ghost_diamond_sword.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ghost_iron_axe.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ghost_iron_sword.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ghost_wooden_staff.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ghost_wooden_sword.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/goblin.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/goblin_sniper.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/goblin_wizard.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/host_of_deep.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ice_monster.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ice_spirit.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ice_thorn.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/ice_wizard.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/illusioner.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/lava_lizard.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/little_soul.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/murloc_wizard.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/mushroom_monster.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/nautilus.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/saucer.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/sea_urchin.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/shadow_of_deep.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/shadow_soul_1.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/shadow_soul_2.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/soul_soldier.geometry.json create mode 100644 src/main/resources/assets/decisland/bedrock/models/entity/werewolf.geometry.json create mode 100644 src/main/resources/assets/decisland/textures/entity/abyssal_controller.png create mode 100644 src/main/resources/assets/decisland/textures/entity/abyssal_shadow.png create mode 100644 src/main/resources/assets/decisland/textures/entity/angry_chicken.png create mode 100644 src/main/resources/assets/decisland/textures/entity/archer.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ash_blaze.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ash_bomb.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ash_horse.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ash_horse_head.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ash_knight.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ash_knight_head.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ash_pufferfish.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ash_sword.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ash_sword_phantom.png create mode 100644 src/main/resources/assets/decisland/textures/entity/baby_ender_dragon.png create mode 100644 src/main/resources/assets/decisland/textures/entity/bat_charger.png create mode 100644 src/main/resources/assets/decisland/textures/entity/blackstone_thorn.png create mode 100644 src/main/resources/assets/decisland/textures/entity/blood_zombie.png create mode 100644 src/main/resources/assets/decisland/textures/entity/bomber.png create mode 100644 src/main/resources/assets/decisland/textures/entity/brown_bear.png create mode 100644 src/main/resources/assets/decisland/textures/entity/carnager.png create mode 100644 src/main/resources/assets/decisland/textures/entity/chest_monster.png create mode 100644 src/main/resources/assets/decisland/textures/entity/chester.png create mode 100644 src/main/resources/assets/decisland/textures/entity/clam.png create mode 100644 src/main/resources/assets/decisland/textures/entity/crab.png create mode 100644 src/main/resources/assets/decisland/textures/entity/crimson_slime.png create mode 100644 src/main/resources/assets/decisland/textures/entity/dark_snow_man.png create mode 100644 src/main/resources/assets/decisland/textures/entity/dark_werewolf.png create mode 100644 src/main/resources/assets/decisland/textures/entity/doctor.png create mode 100644 src/main/resources/assets/decisland/textures/entity/elf_of_ash.png create mode 100644 src/main/resources/assets/decisland/textures/entity/elf_of_chaos.png create mode 100644 src/main/resources/assets/decisland/textures/entity/elf_of_deep.png create mode 100644 src/main/resources/assets/decisland/textures/entity/elf_of_dust.png create mode 100644 src/main/resources/assets/decisland/textures/entity/enchant_armor.png create mode 100644 src/main/resources/assets/decisland/textures/entity/enchant_armor_by_boss.png create mode 100644 src/main/resources/assets/decisland/textures/entity/enchant_diamond_armor.png create mode 100644 src/main/resources/assets/decisland/textures/entity/enchant_illager.png create mode 100644 src/main/resources/assets/decisland/textures/entity/enchant_illager_1.png create mode 100644 src/main/resources/assets/decisland/textures/entity/enchant_illager_2.png create mode 100644 src/main/resources/assets/decisland/textures/entity/end_stone_golem.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ender_snail.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ender_snake.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ender_witch.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ender_witch_puppet.png create mode 100644 src/main/resources/assets/decisland/textures/entity/entity_soul.png create mode 100644 src/main/resources/assets/decisland/textures/entity/entity_soul_1.png create mode 100644 src/main/resources/assets/decisland/textures/entity/escaped_soul_entity.png create mode 100644 src/main/resources/assets/decisland/textures/entity/everlasting_winter_ghast.png create mode 100644 src/main/resources/assets/decisland/textures/entity/everlasting_winter_ghast_1.png create mode 100644 src/main/resources/assets/decisland/textures/entity/everlasting_winter_shadow.png create mode 100644 src/main/resources/assets/decisland/textures/entity/evil_snow_man.png create mode 100644 src/main/resources/assets/decisland/textures/entity/fire_storm.png create mode 100644 src/main/resources/assets/decisland/textures/entity/friendly_little_soul.png create mode 100644 src/main/resources/assets/decisland/textures/entity/friendly_spider.png create mode 100644 src/main/resources/assets/decisland/textures/entity/frozen_ghast.png create mode 100644 src/main/resources/assets/decisland/textures/entity/frozen_heart.png create mode 100644 src/main/resources/assets/decisland/textures/entity/frozen_heart_sleeping.png create mode 100644 src/main/resources/assets/decisland/textures/entity/frozen_man.png create mode 100644 src/main/resources/assets/decisland/textures/entity/frozen_shadow.png create mode 100644 src/main/resources/assets/decisland/textures/entity/frozen_spider.png create mode 100644 src/main/resources/assets/decisland/textures/entity/gargoyle.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ghost_diamond_axe.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ghost_diamond_staff.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ghost_diamond_sword.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ghost_iron_axe.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ghost_iron_sword.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ghost_wooden_staff.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ghost_wooden_sword.png create mode 100644 src/main/resources/assets/decisland/textures/entity/goblin.png create mode 100644 src/main/resources/assets/decisland/textures/entity/goblin_sniper.png create mode 100644 src/main/resources/assets/decisland/textures/entity/goblin_wizard.png create mode 100644 src/main/resources/assets/decisland/textures/entity/host_of_deep.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ice_bat.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ice_blaze.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ice_creeper.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ice_monster.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ice_spirit.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ice_thorn.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ice_wizard.png create mode 100644 src/main/resources/assets/decisland/textures/entity/ice_zombie.png create mode 100644 src/main/resources/assets/decisland/textures/entity/illusion_zombie.png create mode 100644 src/main/resources/assets/decisland/textures/entity/illusioner.png create mode 100644 src/main/resources/assets/decisland/textures/entity/illusioner_puppet.png create mode 100644 src/main/resources/assets/decisland/textures/entity/jungle_spider.png create mode 100644 src/main/resources/assets/decisland/textures/entity/king_of_pillager.png create mode 100644 src/main/resources/assets/decisland/textures/entity/lava_lizard.png create mode 100644 src/main/resources/assets/decisland/textures/entity/life_insect.png create mode 100644 src/main/resources/assets/decisland/textures/entity/little_bat.png create mode 100644 src/main/resources/assets/decisland/textures/entity/little_soul.png create mode 100644 src/main/resources/assets/decisland/textures/entity/lurk_skeleton.png create mode 100644 src/main/resources/assets/decisland/textures/entity/lurk_zombie.png create mode 100644 src/main/resources/assets/decisland/textures/entity/mummy.png create mode 100644 src/main/resources/assets/decisland/textures/entity/mummy_skeleton.png create mode 100644 src/main/resources/assets/decisland/textures/entity/murloc.png create mode 100644 src/main/resources/assets/decisland/textures/entity/murloc_wizard.png create mode 100644 src/main/resources/assets/decisland/textures/entity/mushroom_monster.png create mode 100644 src/main/resources/assets/decisland/textures/entity/mushroom_zombie.png create mode 100644 src/main/resources/assets/decisland/textures/entity/mystical_skeleton.png create mode 100644 src/main/resources/assets/decisland/textures/entity/nautilus.png create mode 100644 src/main/resources/assets/decisland/textures/entity/nether_creeper.png create mode 100644 src/main/resources/assets/decisland/textures/entity/nether_golem.png create mode 100644 src/main/resources/assets/decisland/textures/entity/nether_phantom.png create mode 100644 src/main/resources/assets/decisland/textures/entity/nether_skeleton.png create mode 100644 src/main/resources/assets/decisland/textures/entity/nether_skeleton_wizard.png create mode 100644 src/main/resources/assets/decisland/textures/entity/obsidian_golem.png create mode 100644 src/main/resources/assets/decisland/textures/entity/pillager_by_boss.png create mode 100644 src/main/resources/assets/decisland/textures/entity/pirate.png create mode 100644 src/main/resources/assets/decisland/textures/entity/player_ghost.png create mode 100644 src/main/resources/assets/decisland/textures/entity/polar_wolf.png create mode 100644 src/main/resources/assets/decisland/textures/entity/predators.png create mode 100644 src/main/resources/assets/decisland/textures/entity/radiate_creeper.png create mode 100644 src/main/resources/assets/decisland/textures/entity/radiate_enderman.png create mode 100644 src/main/resources/assets/decisland/textures/entity/radiate_skeleton.png create mode 100644 src/main/resources/assets/decisland/textures/entity/radiate_spider.png create mode 100644 src/main/resources/assets/decisland/textures/entity/real_soul.png create mode 100644 src/main/resources/assets/decisland/textures/entity/rumorer.png create mode 100644 src/main/resources/assets/decisland/textures/entity/sardine.png create mode 100644 src/main/resources/assets/decisland/textures/entity/saucer.png create mode 100644 src/main/resources/assets/decisland/textures/entity/sea_urchin.png create mode 100644 src/main/resources/assets/decisland/textures/entity/shadow_archer.png create mode 100644 src/main/resources/assets/decisland/textures/entity/shadow_creeper.png create mode 100644 src/main/resources/assets/decisland/textures/entity/shadow_of_deep.png create mode 100644 src/main/resources/assets/decisland/textures/entity/shadow_of_sea.png create mode 100644 src/main/resources/assets/decisland/textures/entity/shadow_skeleton.png create mode 100644 src/main/resources/assets/decisland/textures/entity/shadow_skeleton_puppet.png create mode 100644 src/main/resources/assets/decisland/textures/entity/shadow_soul_1.png create mode 100644 src/main/resources/assets/decisland/textures/entity/shadow_soul_2.png create mode 100644 src/main/resources/assets/decisland/textures/entity/shadow_zombie.png create mode 100644 src/main/resources/assets/decisland/textures/entity/shadow_zombie_puppet.png create mode 100644 src/main/resources/assets/decisland/textures/entity/simple_glider.png create mode 100644 src/main/resources/assets/decisland/textures/entity/skeleton_assassin.png create mode 100644 src/main/resources/assets/decisland/textures/entity/skeleton_knight.png create mode 100644 src/main/resources/assets/decisland/textures/entity/skeleton_knight_commander.png create mode 100644 src/main/resources/assets/decisland/textures/entity/skeleton_warrior.png create mode 100644 src/main/resources/assets/decisland/textures/entity/skeleton_wizard.png create mode 100644 src/main/resources/assets/decisland/textures/entity/son_of_chaos.png create mode 100644 src/main/resources/assets/decisland/textures/entity/son_of_nature.png create mode 100644 src/main/resources/assets/decisland/textures/entity/soul.png create mode 100644 src/main/resources/assets/decisland/textures/entity/soul_blaze.png create mode 100644 src/main/resources/assets/decisland/textures/entity/soul_insect.png create mode 100644 src/main/resources/assets/decisland/textures/entity/soul_skeleton.png create mode 100644 src/main/resources/assets/decisland/textures/entity/soul_soldier.png create mode 100644 src/main/resources/assets/decisland/textures/entity/soul_zombie.png create mode 100644 src/main/resources/assets/decisland/textures/entity/star.png create mode 100644 src/main/resources/assets/decisland/textures/entity/stone_golem.png create mode 100644 src/main/resources/assets/decisland/textures/entity/swamp_drowned.png create mode 100644 src/main/resources/assets/decisland/textures/entity/swamp_golem.png create mode 100644 src/main/resources/assets/decisland/textures/entity/tnt_creeper.png create mode 100644 src/main/resources/assets/decisland/textures/entity/tnt_snow_man.png create mode 100644 src/main/resources/assets/decisland/textures/entity/vampire_bat.png create mode 100644 src/main/resources/assets/decisland/textures/entity/vampire_bat_by_boss.png create mode 100644 src/main/resources/assets/decisland/textures/entity/vengeful_ghost.png create mode 100644 src/main/resources/assets/decisland/textures/entity/vindicator_by_boss.png create mode 100644 src/main/resources/assets/decisland/textures/entity/warped_skeleton.png create mode 100644 src/main/resources/assets/decisland/textures/entity/watcher.png create mode 100644 src/main/resources/assets/decisland/textures/entity/werewolf.png create mode 100644 src/main/resources/assets/decisland/textures/entity/zombie_fish.png create mode 100644 src/main/resources/assets/decisland/textures/entity/zombie_summoner.png create mode 100644 src/main/resources/data/decisland/loot_table/entities/abyssal_controller.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ash_blaze.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ash_horse_head.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ash_knight.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ash_knight_head.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ash_pufferfish.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ash_sword.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/blood_zombie.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/bomber.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/brown_bear.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/carnager.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/chest_monster.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/clam.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/dark_snow_man.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/elf_of_deep.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/enchant_illager.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/end_stone_golem.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ender_snail.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ender_snake.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/everlasting_winter_ghast.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/evil_snow_man.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/frozen_heart.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/frozen_spider.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/gargoyle.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/goblin.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/goblin_sniper.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/goblin_wizard.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/host_of_deep.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ice_blaze.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ice_monster.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ice_spirit.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ice_wizard.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/ice_zombie.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/jungle_spider.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/king_of_pillager.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/lava_lizard.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/life_insect.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/lurk_zombie.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/mummy.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/mummy_skeleton.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/murloc.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/mystical_skeleton.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/nautilus.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/nether_creeper.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/nether_golem.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/nether_phantom.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/nether_skeleton.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/nether_skeleton_wizard.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/obsidian_golem.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/pirate.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/predators.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/radiate_creeper.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/radiate_enderman.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/radiate_skeleton.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/radiate_spider.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/rumorer.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/sardine.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/saucer.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/sea_urchin.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/shadow_of_deep.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/shadow_skeleton.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/shadow_zombie.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/simple_glider.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/skeleton_wizard.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/soul_blaze.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/soul_insect.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/soul_soldier.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/star.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/stone_golem.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/swamp_drowned.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/swamp_golem.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/tnt_creeper.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/tnt_snow_man.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/vampire_bat.json create mode 100644 src/main/resources/data/decisland/loot_table/entities/warped_skeleton.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/ash_blaze_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/ash_pufferfish_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/bomber_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/brown_bear_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/carnager_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/chest_monster_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/clam_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/crab_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/crimson_slime_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/dark_snow_man_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/ender_snail_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/ender_snake_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/frozen_spider_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/goblin_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/ice_zombie_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/illusioner_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/jungle_spider_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/lava_lizard_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/life_insect_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/mummy_skeleton_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/mummy_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/murloc_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/mushroom_zombie_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/mystical_skeleton_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/nautilus_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/nether_creeper_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/nether_golem_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/nether_phantom_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/nether_skeleton_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/obsidian_golem_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/polar_wolf_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/pumpkin_slime_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/rumorer_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/sardine_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/saucer_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/sea_urchin_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/shadow_of_sea_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/soul_blaze_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/soul_insect_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/soul_skeleton_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/soul_zombie_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/star_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/stone_golem_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/swamp_drowned_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/swamp_golem_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/vampire_bat_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/warped_skeleton_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/werewolf_spawns.json create mode 100644 src/main/resources/data/decisland/neoforge/biome_modifier/zombie_fish_spawns.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_ash_blaze.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_ash_pufferfish.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_bomber.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_brown_bear.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_carnager.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_chest_monster.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_clam.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_crab.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_crimson_slime.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_dark_snow_man.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_ender_snail.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_ender_snake.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_frozen_spider.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_goblin.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_ice_zombie.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_illusioner.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_jungle_spider.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_lava_lizard.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_life_insect.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_mummy.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_mummy_skeleton.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_murloc.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_mushroom_zombie.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_mystical_skeleton.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_nautilus.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_nether_creeper.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_nether_golem.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_nether_phantom.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_nether_skeleton.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_obsidian_golem.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_polar_wolf.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_pumpkin_slime.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_rumorer.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_sardine.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_saucer.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_sea_urchin.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_shadow_of_sea.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_soul_blaze.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_soul_insect.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_soul_skeleton.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_soul_zombie.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_star.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_stone_golem.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_swamp_drowned.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_swamp_golem.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_vampire_bat.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_warped_skeleton.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_werewolf.json create mode 100644 src/main/resources/data/decisland/tags/worldgen/biome/spawns_zombie_fish.json create mode 100644 src/main/resources/data/minecraft/tags/entity_type/can_breathe_under_water.json create mode 100644 src/main/resources/data/minecraft/tags/entity_type/ignores_poison_and_regen.json create mode 100644 src/main/resources/data/minecraft/tags/entity_type/inverted_healing_and_harm.json create mode 100644 src/main/resources/data/minecraft/tags/entity_type/sensitive_to_smite.json create mode 100644 src/main/resources/data/minecraft/tags/entity_type/undead.json create mode 100644 src/main/resources/data/minecraft/tags/entity_type/wither_friends.json create mode 100644 tools/entity_port/client_spec.json create mode 100644 tools/entity_port/gen_report.txt create mode 100644 tools/entity_port/generate.mjs create mode 100644 tools/entity_port/jar_extract.mjs create mode 100644 tools/entity_port/recon.mjs create mode 100644 tools/entity_port/vanilla_items.json create mode 100644 tools/entity_port/vanilla_tex/blackstone.png create mode 100644 tools/entity_port/vanilla_tex/ice.png create mode 100644 tools/entity_port/vanilla_tex/stray.png create mode 100644 tools/entity_port/verify_mc.json create mode 100644 tools/entity_port/verify_mc.mjs create mode 100644 tools/entity_port/verify_mc2.json create mode 100644 tools/entity_port/verify_mc2.mjs diff --git a/src/main/java/com/dec/decisland/DecIsland.kt b/src/main/java/com/dec/decisland/DecIsland.kt index 9e5f029..36093e5 100644 --- a/src/main/java/com/dec/decisland/DecIsland.kt +++ b/src/main/java/com/dec/decisland/DecIsland.kt @@ -3,6 +3,7 @@ package com.dec.decisland import com.dec.decisland.attachment.ModAttachments import com.dec.decisland.block.ModBlocks import com.dec.decisland.effect.ModEffects +import com.dec.decisland.entity.GeneratedMobs import com.dec.decisland.entity.ModEntities import com.dec.decisland.item.ModCreativeModeTabs import com.dec.decisland.item.ModItems @@ -53,6 +54,7 @@ class DecIsland(modEventBus: IEventBus, modContainer: ModContainer) { ModBlocks.register(modEventBus) ModEntities.registry(modEventBus) + GeneratedMobs.register(modEventBus) ModCreativeModeTabs.register(modEventBus) ModParticles.register(modEventBus) ModEffects.register(modEventBus) diff --git a/src/main/java/com/dec/decisland/client/bedrock/model/SimpleBedrockMobModel.kt b/src/main/java/com/dec/decisland/client/bedrock/model/SimpleBedrockMobModel.kt new file mode 100644 index 0000000..9be3983 --- /dev/null +++ b/src/main/java/com/dec/decisland/client/bedrock/model/SimpleBedrockMobModel.kt @@ -0,0 +1,25 @@ +package com.dec.decisland.client.bedrock.model + +import net.minecraft.world.entity.Entity + +/** + * 通用基岩版生物模型:按移动状态在 idle / walk 两个动画剪辑间切换。 + */ +class SimpleBedrockMobModel( + geometry: BedrockGeometry, + private val idleClip: BedrockAnimationClip, + private val walkClip: BedrockAnimationClip, +) : BedrockAnimatedEntityModel(geometry, idleClip) { + + override fun setupAnim( + entity: T, + limbSwing: Float, + limbSwingAmount: Float, + ageInTicks: Float, + netHeadYaw: Float, + headPitch: Float, + ) { + animation = if (limbSwingAmount > 0.03f) walkClip else idleClip + applyAnimation(ageInTicks / 20.0f) + } +} diff --git a/src/main/java/com/dec/decisland/client/renderer/BedrockMobRenderer.kt b/src/main/java/com/dec/decisland/client/renderer/BedrockMobRenderer.kt new file mode 100644 index 0000000..d357b40 --- /dev/null +++ b/src/main/java/com/dec/decisland/client/renderer/BedrockMobRenderer.kt @@ -0,0 +1,36 @@ +package com.dec.decisland.client.renderer + +import com.dec.decisland.client.bedrock.model.BedrockEntityAssets +import com.dec.decisland.client.bedrock.model.SimpleBedrockMobModel +import com.mojang.blaze3d.vertex.PoseStack +import net.minecraft.client.renderer.entity.EntityRendererProvider +import net.minecraft.client.renderer.entity.MobRenderer +import net.minecraft.resources.ResourceLocation +import net.minecraft.world.entity.Mob + +/** + * 通用基岩版生物渲染器:烘焙 geometry + idle/walk 动画 + 自定义贴图,参数化缩放。 + */ +open class BedrockMobRenderer( + context: EntityRendererProvider.Context, + geometryLocation: ResourceLocation, + animationLocation: ResourceLocation, + idleName: String, + walkName: String, + private val textureLocation: ResourceLocation, + private val scale: Float = 1.0f, +) : MobRenderer>( + context, + SimpleBedrockMobModel( + BedrockEntityAssets.geometry(geometryLocation), + BedrockEntityAssets.animation(animationLocation, idleName), + BedrockEntityAssets.animation(animationLocation, walkName), + ), + 0.45f * scale, +) { + override fun getTextureLocation(entity: T): ResourceLocation = textureLocation + + override fun scale(entity: T, poseStack: PoseStack, partialTick: Float) { + poseStack.scale(scale, scale, scale) + } +} diff --git a/src/main/java/com/dec/decisland/client/renderer/GeneratedMobClient.kt b/src/main/java/com/dec/decisland/client/renderer/GeneratedMobClient.kt new file mode 100644 index 0000000..f2c98aa --- /dev/null +++ b/src/main/java/com/dec/decisland/client/renderer/GeneratedMobClient.kt @@ -0,0 +1,979 @@ +package com.dec.decisland.client.renderer + +import com.dec.decisland.DecIsland +import com.dec.decisland.entity.GeneratedMobs +import com.dec.decisland.entity.custom.BedrockMob +import net.minecraft.client.renderer.entity.EntityRenderers +import net.minecraft.client.renderer.entity.EntityRendererProvider +import net.minecraft.resources.ResourceLocation +import net.minecraft.client.renderer.entity.BatRenderer +import net.minecraft.client.renderer.entity.BlazeRenderer +import net.minecraft.client.renderer.entity.CaveSpiderRenderer +import net.minecraft.client.renderer.entity.ChickenRenderer +import net.minecraft.client.renderer.entity.CodRenderer +import net.minecraft.client.renderer.entity.CowRenderer +import net.minecraft.client.renderer.entity.CreeperRenderer +import net.minecraft.client.renderer.entity.EndermanRenderer +import net.minecraft.client.renderer.entity.EvokerRenderer +import net.minecraft.client.renderer.entity.GhastRenderer +import net.minecraft.client.renderer.entity.GuardianRenderer +import net.minecraft.client.renderer.entity.IllusionerRenderer +import net.minecraft.client.renderer.entity.IronGolemRenderer +import net.minecraft.client.renderer.entity.PhantomRenderer +import net.minecraft.client.renderer.entity.PillagerRenderer +import net.minecraft.client.renderer.entity.PolarBearRenderer +import net.minecraft.client.renderer.entity.SalmonRenderer +import net.minecraft.client.renderer.entity.SilverfishRenderer +import net.minecraft.client.renderer.entity.SkeletonRenderer +import net.minecraft.client.renderer.entity.SlimeRenderer +import net.minecraft.client.renderer.entity.SnowGolemRenderer +import net.minecraft.client.renderer.entity.SpiderRenderer +import net.minecraft.client.renderer.entity.VexRenderer +import net.minecraft.client.renderer.entity.VillagerRenderer +import net.minecraft.client.renderer.entity.VindicatorRenderer +import net.minecraft.client.renderer.entity.WitchRenderer +import net.minecraft.client.renderer.entity.WitherSkeletonRenderer +import net.minecraft.client.renderer.entity.WolfRenderer +import net.minecraft.client.renderer.entity.ZombieRenderer +import net.minecraft.world.entity.ambient.Bat +import net.minecraft.world.entity.animal.Chicken +import net.minecraft.world.entity.animal.Cod +import net.minecraft.world.entity.animal.Cow +import net.minecraft.world.entity.animal.IronGolem +import net.minecraft.world.entity.animal.PolarBear +import net.minecraft.world.entity.animal.Salmon +import net.minecraft.world.entity.animal.SnowGolem +import net.minecraft.world.entity.animal.Wolf +import net.minecraft.world.entity.monster.AbstractSkeleton +import net.minecraft.world.entity.monster.Blaze +import net.minecraft.world.entity.monster.CaveSpider +import net.minecraft.world.entity.monster.Creeper +import net.minecraft.world.entity.monster.EnderMan +import net.minecraft.world.entity.monster.Evoker +import net.minecraft.world.entity.monster.Ghast +import net.minecraft.world.entity.monster.Guardian +import net.minecraft.world.entity.monster.Illusioner +import net.minecraft.world.entity.monster.Phantom +import net.minecraft.world.entity.monster.Pillager +import net.minecraft.world.entity.monster.Silverfish +import net.minecraft.world.entity.monster.Skeleton +import net.minecraft.world.entity.monster.Slime +import net.minecraft.world.entity.monster.SpellcasterIllager +import net.minecraft.world.entity.monster.Spider +import net.minecraft.world.entity.monster.Vex +import net.minecraft.world.entity.monster.Vindicator +import net.minecraft.world.entity.monster.Witch +import net.minecraft.world.entity.monster.WitherSkeleton +import net.minecraft.world.entity.monster.Zombie +import net.minecraft.world.entity.npc.Villager + +/** 由 tools/entity_port/generate.mjs 生成:批量实体渲染器(原版模型换贴图 + 基岩模型通用渲染) */ +class AngryChickenGeneratedRenderer(context: EntityRendererProvider.Context) : ChickenRenderer(context) { + override fun getTextureLocation(entity: Chicken): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/angry_chicken.png") + } +} +class ArcherGeneratedRenderer(context: EntityRendererProvider.Context) : PillagerRenderer(context) { + override fun getTextureLocation(entity: Pillager): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/archer.png") + } +} +class AshBlazeGeneratedRenderer(context: EntityRendererProvider.Context) : BlazeRenderer(context) { + override fun getTextureLocation(entity: Blaze): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/ash_blaze.png") + } +} +class AshPufferfishGeneratedRenderer(context: EntityRendererProvider.Context) : CodRenderer(context) { + override fun getTextureLocation(entity: Cod): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/ash_pufferfish.png") + } +} +class BabyEnderDragonGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/baby_ender_dragon.png") + } +} +class BatChargerGeneratedRenderer(context: EntityRendererProvider.Context) : BatRenderer(context) { + override fun getTextureLocation(entity: Bat): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/bat_charger.png") + } +} +class BloodZombieGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/blood_zombie.png") + } +} +class BomberGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/bomber.png") + } +} +class BrownBearGeneratedRenderer(context: EntityRendererProvider.Context) : PolarBearRenderer(context) { + override fun getTextureLocation(entity: PolarBear): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/brown_bear.png") + } +} +class CarnagerGeneratedRenderer(context: EntityRendererProvider.Context) : VindicatorRenderer(context) { + override fun getTextureLocation(entity: Vindicator): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/carnager.png") + } +} +class CrimsonSlimeGeneratedRenderer(context: EntityRendererProvider.Context) : SlimeRenderer(context) { + override fun getTextureLocation(entity: Slime): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/crimson_slime.png") + } +} +class DarkSnowManGeneratedRenderer(context: EntityRendererProvider.Context) : SnowGolemRenderer(context) { + override fun getTextureLocation(entity: SnowGolem): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/dark_snow_man.png") + } +} +class DoctorGeneratedRenderer(context: EntityRendererProvider.Context) : VillagerRenderer(context) { + override fun getTextureLocation(entity: Villager): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/doctor.png") + } +} +class ElfOfAshGeneratedRenderer(context: EntityRendererProvider.Context) : VexRenderer(context) { + override fun getTextureLocation(entity: Vex): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/elf_of_ash.png") + } +} +class ElfOfChaosGeneratedRenderer(context: EntityRendererProvider.Context) : IronGolemRenderer(context) { + override fun getTextureLocation(entity: IronGolem): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/elf_of_chaos.png") + } +} +class ElfOfDeepGeneratedRenderer(context: EntityRendererProvider.Context) : VexRenderer(context) { + override fun getTextureLocation(entity: Vex): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/elf_of_deep.png") + } +} +class ElfOfDustGeneratedRenderer(context: EntityRendererProvider.Context) : VexRenderer(context) { + override fun getTextureLocation(entity: Vex): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/elf_of_dust.png") + } +} +class EnchantArmorGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/enchant_armor.png") + } +} +class EnchantArmorByBossGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/enchant_armor_by_boss.png") + } +} +class EnchantDiamondArmorGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/enchant_diamond_armor.png") + } +} +class EnchantIllagerGeneratedRenderer(context: EntityRendererProvider.Context) : EvokerRenderer(context) { + override fun getTextureLocation(entity: SpellcasterIllager): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/enchant_illager.png") + } +} +class EnchantIllager1GeneratedRenderer(context: EntityRendererProvider.Context) : EvokerRenderer(context) { + override fun getTextureLocation(entity: SpellcasterIllager): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/enchant_illager_1.png") + } +} +class EnchantIllager2GeneratedRenderer(context: EntityRendererProvider.Context) : VindicatorRenderer(context) { + override fun getTextureLocation(entity: Vindicator): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/enchant_illager_2.png") + } +} +class EndStoneGolemGeneratedRenderer(context: EntityRendererProvider.Context) : IronGolemRenderer(context) { + override fun getTextureLocation(entity: IronGolem): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/end_stone_golem.png") + } +} +class EnderWitchGeneratedRenderer(context: EntityRendererProvider.Context) : WitchRenderer(context) { + override fun getTextureLocation(entity: Witch): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/ender_witch.png") + } +} +class EnderWitchPuppetGeneratedRenderer(context: EntityRendererProvider.Context) : WitchRenderer(context) { + override fun getTextureLocation(entity: Witch): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/ender_witch_puppet.png") + } +} +class EverlastingWinterGhast1GeneratedRenderer(context: EntityRendererProvider.Context) : GhastRenderer(context) { + override fun getTextureLocation(entity: Ghast): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/everlasting_winter_ghast_1.png") + } +} +class EvilSnowManGeneratedRenderer(context: EntityRendererProvider.Context) : SnowGolemRenderer(context) { + override fun getTextureLocation(entity: SnowGolem): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/evil_snow_man.png") + } +} +class FireStormGeneratedRenderer(context: EntityRendererProvider.Context) : BlazeRenderer(context) { + override fun getTextureLocation(entity: Blaze): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/fire_storm.png") + } +} +class FriendlySpiderGeneratedRenderer(context: EntityRendererProvider.Context) : SpiderRenderer(context) { + override fun getTextureLocation(entity: Spider): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/friendly_spider.png") + } +} +class FrozenGhastGeneratedRenderer(context: EntityRendererProvider.Context) : GhastRenderer(context) { + override fun getTextureLocation(entity: Ghast): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/frozen_ghast.png") + } +} +class FrozenManGeneratedRenderer(context: EntityRendererProvider.Context) : SnowGolemRenderer(context) { + override fun getTextureLocation(entity: SnowGolem): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/frozen_man.png") + } +} +class FrozenSpiderGeneratedRenderer(context: EntityRendererProvider.Context) : SpiderRenderer(context) { + override fun getTextureLocation(entity: Spider): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/frozen_spider.png") + } +} +class GargoyleGeneratedRenderer(context: EntityRendererProvider.Context) : BatRenderer(context) { + override fun getTextureLocation(entity: Bat): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/gargoyle.png") + } +} +class GingerbreadManByTotemGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { +} +class IceBatGeneratedRenderer(context: EntityRendererProvider.Context) : BatRenderer(context) { + override fun getTextureLocation(entity: Bat): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/ice_bat.png") + } +} +class IceBlazeGeneratedRenderer(context: EntityRendererProvider.Context) : BlazeRenderer(context) { + override fun getTextureLocation(entity: Blaze): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/ice_blaze.png") + } +} +class IceCreeperGeneratedRenderer(context: EntityRendererProvider.Context) : CreeperRenderer(context) { + override fun getTextureLocation(entity: Creeper): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/ice_creeper.png") + } +} +class IceZombieGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/ice_zombie.png") + } +} +class IllusionZombieGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/illusion_zombie.png") + } +} +class IllusionerGeneratedRenderer(context: EntityRendererProvider.Context) : IllusionerRenderer(context) { + override fun getTextureLocation(entity: Illusioner): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/illusioner.png") + } +} +class IllusionerPuppetGeneratedRenderer(context: EntityRendererProvider.Context) : IllusionerRenderer(context) { + override fun getTextureLocation(entity: Illusioner): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/illusioner_puppet.png") + } +} +class JungleSpiderGeneratedRenderer(context: EntityRendererProvider.Context) : CaveSpiderRenderer(context) { + override fun getTextureLocation(entity: CaveSpider): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/jungle_spider.png") + } +} +class KingOfPillagerGeneratedRenderer(context: EntityRendererProvider.Context) : PillagerRenderer(context) { + override fun getTextureLocation(entity: Pillager): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/king_of_pillager.png") + } +} +class LifeInsectGeneratedRenderer(context: EntityRendererProvider.Context) : SilverfishRenderer(context) { + override fun getTextureLocation(entity: Silverfish): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/life_insect.png") + } +} +class LittleBatGeneratedRenderer(context: EntityRendererProvider.Context) : BatRenderer(context) { + override fun getTextureLocation(entity: Bat): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/little_bat.png") + } +} +class LurkSkeletonGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/lurk_skeleton.png") + } +} +class LurkZombieGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/lurk_zombie.png") + } +} +class MummyGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/mummy.png") + } +} +class MummySkeletonGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/mummy_skeleton.png") + } +} +class MurlocGeneratedRenderer(context: EntityRendererProvider.Context) : GuardianRenderer(context) { + override fun getTextureLocation(entity: Guardian): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/murloc.png") + } +} +class MushroomZombieGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/mushroom_zombie.png") + } +} +class MysticalSkeletonGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/mystical_skeleton.png") + } +} +class NetherCreeperGeneratedRenderer(context: EntityRendererProvider.Context) : CreeperRenderer(context) { + override fun getTextureLocation(entity: Creeper): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/nether_creeper.png") + } +} +class NetherGolemGeneratedRenderer(context: EntityRendererProvider.Context) : IronGolemRenderer(context) { + override fun getTextureLocation(entity: IronGolem): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/nether_golem.png") + } +} +class NetherPhantomGeneratedRenderer(context: EntityRendererProvider.Context) : PhantomRenderer(context) { + override fun getTextureLocation(entity: Phantom): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/nether_phantom.png") + } +} +class NetherSkeletonGeneratedRenderer(context: EntityRendererProvider.Context) : WitherSkeletonRenderer(context) { + override fun getTextureLocation(entity: WitherSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/nether_skeleton.png") + } +} +class NetherSkeletonWizardGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/nether_skeleton_wizard.png") + } +} +class ObsidianGolemGeneratedRenderer(context: EntityRendererProvider.Context) : IronGolemRenderer(context) { + override fun getTextureLocation(entity: IronGolem): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/obsidian_golem.png") + } +} +class PillagerByBossGeneratedRenderer(context: EntityRendererProvider.Context) : PillagerRenderer(context) { + override fun getTextureLocation(entity: Pillager): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/pillager_by_boss.png") + } +} +class PirateGeneratedRenderer(context: EntityRendererProvider.Context) : PillagerRenderer(context) { + override fun getTextureLocation(entity: Pillager): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/pirate.png") + } +} +class PlayerGhostGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/player_ghost.png") + } +} +class PolarWolfGeneratedRenderer(context: EntityRendererProvider.Context) : WolfRenderer(context) { + override fun getTextureLocation(entity: Wolf): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/polar_wolf.png") + } +} +class PredatorsGeneratedRenderer(context: EntityRendererProvider.Context) : BatRenderer(context) { + override fun getTextureLocation(entity: Bat): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/predators.png") + } +} +class PumpkinSlimeGeneratedRenderer(context: EntityRendererProvider.Context) : SlimeRenderer(context) { + override fun getTextureLocation(entity: Slime): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/pumpkin_slime.png") + } +} +class RadiateCreeperGeneratedRenderer(context: EntityRendererProvider.Context) : CreeperRenderer(context) { + override fun getTextureLocation(entity: Creeper): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/radiate_creeper.png") + } +} +class RadiateEndermanGeneratedRenderer(context: EntityRendererProvider.Context) : EndermanRenderer(context) { + override fun getTextureLocation(entity: EnderMan): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/radiate_enderman.png") + } +} +class RadiateSkeletonGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/radiate_skeleton.png") + } +} +class RadiateSpiderGeneratedRenderer(context: EntityRendererProvider.Context) : CaveSpiderRenderer(context) { + override fun getTextureLocation(entity: CaveSpider): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/radiate_spider.png") + } +} +class RealSoulGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/real_soul.png") + } +} +class RumorerGeneratedRenderer(context: EntityRendererProvider.Context) : CowRenderer(context) { + override fun getTextureLocation(entity: Cow): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/rumorer.png") + } +} +class SardineGeneratedRenderer(context: EntityRendererProvider.Context) : CodRenderer(context) { + override fun getTextureLocation(entity: Cod): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/sardine.png") + } +} +class ShadowArcherGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/shadow_archer.png") + } +} +class ShadowCreeperGeneratedRenderer(context: EntityRendererProvider.Context) : CreeperRenderer(context) { + override fun getTextureLocation(entity: Creeper): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/shadow_creeper.png") + } +} +class ShadowOfSeaGeneratedRenderer(context: EntityRendererProvider.Context) : PhantomRenderer(context) { + override fun getTextureLocation(entity: Phantom): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/shadow_of_sea.png") + } +} +class ShadowSkeletonGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/shadow_skeleton.png") + } +} +class ShadowSkeletonPuppetGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/shadow_skeleton_puppet.png") + } +} +class ShadowZombieGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/shadow_zombie.png") + } +} +class ShadowZombiePuppetGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/shadow_zombie_puppet.png") + } +} +class SimpleGliderGeneratedRenderer(context: EntityRendererProvider.Context) : ChickenRenderer(context) { + override fun getTextureLocation(entity: Chicken): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/simple_glider.png") + } +} +class SkeletonAssassinGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/skeleton_assassin.png") + } +} +class SkeletonKnightGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/skeleton_knight.png") + } +} +class SkeletonKnightCommanderGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/skeleton_knight_commander.png") + } +} +class SkeletonWarriorGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/skeleton_warrior.png") + } +} +class SkeletonWizardGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/skeleton_wizard.png") + } +} +class SoldierGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { +} +class SonOfChaosGeneratedRenderer(context: EntityRendererProvider.Context) : IronGolemRenderer(context) { + override fun getTextureLocation(entity: IronGolem): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/son_of_chaos.png") + } +} +class SonOfNatureGeneratedRenderer(context: EntityRendererProvider.Context) : IronGolemRenderer(context) { + override fun getTextureLocation(entity: IronGolem): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/son_of_nature.png") + } +} +class SoulGeneratedRenderer(context: EntityRendererProvider.Context) : VexRenderer(context) { + override fun getTextureLocation(entity: Vex): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/soul.png") + } +} +class SoulBlazeGeneratedRenderer(context: EntityRendererProvider.Context) : BlazeRenderer(context) { + override fun getTextureLocation(entity: Blaze): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/soul_blaze.png") + } +} +class SoulInsectGeneratedRenderer(context: EntityRendererProvider.Context) : SilverfishRenderer(context) { + override fun getTextureLocation(entity: Silverfish): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/soul_insect.png") + } +} +class SoulSkeletonGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/soul_skeleton.png") + } +} +class SoulZombieGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/soul_zombie.png") + } +} +class StarGeneratedRenderer(context: EntityRendererProvider.Context) : BlazeRenderer(context) { + override fun getTextureLocation(entity: Blaze): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/star.png") + } +} +class StoneGolemGeneratedRenderer(context: EntityRendererProvider.Context) : IronGolemRenderer(context) { + override fun getTextureLocation(entity: IronGolem): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/stone_golem.png") + } +} +class SwampDrownedGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/swamp_drowned.png") + } +} +class SwampGolemGeneratedRenderer(context: EntityRendererProvider.Context) : IronGolemRenderer(context) { + override fun getTextureLocation(entity: IronGolem): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/swamp_golem.png") + } +} +class TntCreeperGeneratedRenderer(context: EntityRendererProvider.Context) : CreeperRenderer(context) { + override fun getTextureLocation(entity: Creeper): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/tnt_creeper.png") + } +} +class TntSnowManGeneratedRenderer(context: EntityRendererProvider.Context) : SnowGolemRenderer(context) { + override fun getTextureLocation(entity: SnowGolem): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/tnt_snow_man.png") + } +} +class VampireBatGeneratedRenderer(context: EntityRendererProvider.Context) : BatRenderer(context) { + override fun getTextureLocation(entity: Bat): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/vampire_bat.png") + } +} +class VampireBatByBossGeneratedRenderer(context: EntityRendererProvider.Context) : BatRenderer(context) { + override fun getTextureLocation(entity: Bat): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/vampire_bat_by_boss.png") + } +} +class VengefulGhostGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/vengeful_ghost.png") + } +} +class VindicatorByBossGeneratedRenderer(context: EntityRendererProvider.Context) : VindicatorRenderer(context) { + override fun getTextureLocation(entity: Vindicator): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/vindicator_by_boss.png") + } +} +class WarpedSkeletonGeneratedRenderer(context: EntityRendererProvider.Context) : SkeletonRenderer(context) { + override fun getTextureLocation(entity: AbstractSkeleton): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/warped_skeleton.png") + } +} +class WatcherGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/watcher.png") + } +} +class ZombieFishGeneratedRenderer(context: EntityRendererProvider.Context) : SalmonRenderer(context) { + override fun getTextureLocation(entity: Salmon): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/zombie_fish.png") + } +} +class ZombieSummonerGeneratedRenderer(context: EntityRendererProvider.Context) : ZombieRenderer(context) { + override fun getTextureLocation(entity: Zombie): ResourceLocation = TEXTURE + companion object { + val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/zombie_summoner.png") + } +} +object GeneratedMobClient { + @JvmStatic + fun registerAll() { + EntityRenderers.register(GeneratedMobs.ANGRY_CHICKEN.get(), ::AngryChickenGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ARCHER.get(), ::ArcherGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ASH_BLAZE.get(), ::AshBlazeGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ASH_PUFFERFISH.get(), ::AshPufferfishGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.BABY_ENDER_DRAGON.get(), ::BabyEnderDragonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.BAT_CHARGER.get(), ::BatChargerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.BLOOD_ZOMBIE.get(), ::BloodZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.BOMBER.get(), ::BomberGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.BROWN_BEAR.get(), ::BrownBearGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.CARNAGER.get(), ::CarnagerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.CRIMSON_SLIME.get(), ::CrimsonSlimeGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.DARK_SNOW_MAN.get(), ::DarkSnowManGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.DOCTOR.get(), ::DoctorGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ELF_OF_ASH.get(), ::ElfOfAshGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ELF_OF_CHAOS.get(), ::ElfOfChaosGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ELF_OF_DEEP.get(), ::ElfOfDeepGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ELF_OF_DUST.get(), ::ElfOfDustGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENCHANT_ARMOR.get(), ::EnchantArmorGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENCHANT_ARMOR_BY_BOSS.get(), ::EnchantArmorByBossGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENCHANT_DIAMOND_ARMOR.get(), ::EnchantDiamondArmorGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENCHANT_ILLAGER.get(), ::EnchantIllagerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENCHANT_ILLAGER_1.get(), ::EnchantIllager1GeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENCHANT_ILLAGER_2.get(), ::EnchantIllager2GeneratedRenderer) + EntityRenderers.register(GeneratedMobs.END_STONE_GOLEM.get(), ::EndStoneGolemGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENDER_WITCH.get(), ::EnderWitchGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENDER_WITCH_PUPPET.get(), ::EnderWitchPuppetGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.EVERLASTING_WINTER_GHAST_1.get(), ::EverlastingWinterGhast1GeneratedRenderer) + EntityRenderers.register(GeneratedMobs.EVIL_SNOW_MAN.get(), ::EvilSnowManGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.FIRE_STORM.get(), ::FireStormGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.FRIENDLY_SPIDER.get(), ::FriendlySpiderGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.FROZEN_GHAST.get(), ::FrozenGhastGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.FROZEN_MAN.get(), ::FrozenManGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.FROZEN_SPIDER.get(), ::FrozenSpiderGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.GARGOYLE.get(), ::GargoyleGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.GINGERBREAD_MAN_BY_TOTEM.get(), ::GingerbreadManByTotemGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ICE_BAT.get(), ::IceBatGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ICE_BLAZE.get(), ::IceBlazeGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ICE_CREEPER.get(), ::IceCreeperGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ICE_ZOMBIE.get(), ::IceZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ILLUSION_ZOMBIE.get(), ::IllusionZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ILLUSIONER.get(), ::IllusionerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ILLUSIONER_PUPPET.get(), ::IllusionerPuppetGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.JUNGLE_SPIDER.get(), ::JungleSpiderGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.KING_OF_PILLAGER.get(), ::KingOfPillagerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.LIFE_INSECT.get(), ::LifeInsectGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.LITTLE_BAT.get(), ::LittleBatGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.LURK_SKELETON.get(), ::LurkSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.LURK_ZOMBIE.get(), ::LurkZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.MUMMY.get(), ::MummyGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.MUMMY_SKELETON.get(), ::MummySkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.MURLOC.get(), ::MurlocGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.MUSHROOM_ZOMBIE.get(), ::MushroomZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.MYSTICAL_SKELETON.get(), ::MysticalSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.NETHER_CREEPER.get(), ::NetherCreeperGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.NETHER_GOLEM.get(), ::NetherGolemGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.NETHER_PHANTOM.get(), ::NetherPhantomGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.NETHER_SKELETON.get(), ::NetherSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.NETHER_SKELETON_WIZARD.get(), ::NetherSkeletonWizardGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.OBSIDIAN_GOLEM.get(), ::ObsidianGolemGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.PILLAGER_BY_BOSS.get(), ::PillagerByBossGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.PIRATE.get(), ::PirateGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.PLAYER_GHOST.get(), ::PlayerGhostGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.POLAR_WOLF.get(), ::PolarWolfGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.PREDATORS.get(), ::PredatorsGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.PUMPKIN_SLIME.get(), ::PumpkinSlimeGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.RADIATE_CREEPER.get(), ::RadiateCreeperGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.RADIATE_ENDERMAN.get(), ::RadiateEndermanGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.RADIATE_SKELETON.get(), ::RadiateSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.RADIATE_SPIDER.get(), ::RadiateSpiderGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.REAL_SOUL.get(), ::RealSoulGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.RUMORER.get(), ::RumorerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SARDINE.get(), ::SardineGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_ARCHER.get(), ::ShadowArcherGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_CREEPER.get(), ::ShadowCreeperGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_OF_SEA.get(), ::ShadowOfSeaGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_SKELETON.get(), ::ShadowSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_SKELETON_PUPPET.get(), ::ShadowSkeletonPuppetGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_ZOMBIE.get(), ::ShadowZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_ZOMBIE_PUPPET.get(), ::ShadowZombiePuppetGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SIMPLE_GLIDER.get(), ::SimpleGliderGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SKELETON_ASSASSIN.get(), ::SkeletonAssassinGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SKELETON_KNIGHT.get(), ::SkeletonKnightGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SKELETON_KNIGHT_COMMANDER.get(), ::SkeletonKnightCommanderGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SKELETON_WARRIOR.get(), ::SkeletonWarriorGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SKELETON_WIZARD.get(), ::SkeletonWizardGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SOLDIER.get(), ::SoldierGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SON_OF_CHAOS.get(), ::SonOfChaosGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SON_OF_NATURE.get(), ::SonOfNatureGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SOUL.get(), ::SoulGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SOUL_BLAZE.get(), ::SoulBlazeGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SOUL_INSECT.get(), ::SoulInsectGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SOUL_SKELETON.get(), ::SoulSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SOUL_ZOMBIE.get(), ::SoulZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.STAR.get(), ::StarGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.STONE_GOLEM.get(), ::StoneGolemGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SWAMP_DROWNED.get(), ::SwampDrownedGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SWAMP_GOLEM.get(), ::SwampGolemGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.TNT_CREEPER.get(), ::TntCreeperGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.TNT_SNOW_MAN.get(), ::TntSnowManGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.VAMPIRE_BAT.get(), ::VampireBatGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.VAMPIRE_BAT_BY_BOSS.get(), ::VampireBatByBossGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.VENGEFUL_GHOST.get(), ::VengefulGhostGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.VINDICATOR_BY_BOSS.get(), ::VindicatorByBossGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.WARPED_SKELETON.get(), ::WarpedSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.WATCHER.get(), ::WatcherGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ZOMBIE_FISH.get(), ::ZombieFishGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ZOMBIE_SUMMONER.get(), ::ZombieSummonerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ABYSSAL_CONTROLLER.get()) { context -> + BedrockMobRenderer(context, geo("abyssal_controller"), anim("abyssal_controller"), "idle", "walk", tex("abyssal_controller"), 1f) + } + EntityRenderers.register(GeneratedMobs.ABYSSAL_SHADOW.get()) { context -> + BedrockMobRenderer(context, geo("abyssal_shadow"), anim("abyssal_shadow"), "idle", "walk", tex("abyssal_shadow"), 1f) + } + EntityRenderers.register(GeneratedMobs.ASH_BOMB.get()) { context -> + BedrockMobRenderer(context, geo("ash_bomb"), anim("ash_bomb"), "idle", "walk", tex("ash_bomb"), 1f) + } + EntityRenderers.register(GeneratedMobs.ASH_HORSE.get()) { context -> + BedrockMobRenderer(context, geo("ash_horse"), anim("ash_horse"), "idle", "walk", tex("ash_horse"), 1f) + } + EntityRenderers.register(GeneratedMobs.ASH_HORSE_HEAD.get()) { context -> + BedrockMobRenderer(context, geo("ash_horse_head"), anim("ash_horse_head"), "idle", "walk", tex("ash_horse_head"), 1f) + } + EntityRenderers.register(GeneratedMobs.ASH_KNIGHT.get()) { context -> + BedrockMobRenderer(context, geo("ash_knight"), anim("ash_knight"), "idle", "walk", tex("ash_knight"), 1f) + } + EntityRenderers.register(GeneratedMobs.ASH_KNIGHT_HEAD.get()) { context -> + BedrockMobRenderer(context, geo("ash_knight_head"), anim("ash_knight_head"), "idle", "walk", tex("ash_knight_head"), 1f) + } + EntityRenderers.register(GeneratedMobs.ASH_SWORD.get()) { context -> + BedrockMobRenderer(context, geo("ash_sword"), anim("ash_sword"), "idle", "walk", tex("ash_sword"), 1f) + } + EntityRenderers.register(GeneratedMobs.ASH_SWORD_PHANTOM.get()) { context -> + BedrockMobRenderer(context, geo("ash_sword_phantom"), anim("ash_sword_phantom"), "idle", "walk", tex("ash_sword_phantom"), 1f) + } + EntityRenderers.register(GeneratedMobs.BLACKSTONE_THORN.get()) { context -> + BedrockMobRenderer(context, geo("blackstone_thorn"), anim("blackstone_thorn"), "idle", "walk", tex("blackstone_thorn"), 1f) + } + EntityRenderers.register(GeneratedMobs.CHEST_MONSTER.get()) { context -> + BedrockMobRenderer(context, geo("chest_monster"), anim("chest_monster"), "idle", "walk", tex("chest_monster"), 1f) + } + EntityRenderers.register(GeneratedMobs.CHESTER.get()) { context -> + BedrockMobRenderer(context, geo("chester"), anim("chester"), "idle", "walk", tex("chester"), 1f) + } + EntityRenderers.register(GeneratedMobs.CLAM.get()) { context -> + BedrockMobRenderer(context, geo("clam"), anim("clam"), "idle", "walk", tex("clam"), 1f) + } + EntityRenderers.register(GeneratedMobs.CRAB.get()) { context -> + BedrockMobRenderer(context, geo("crab"), anim("crab"), "idle", "walk", tex("crab"), 1f) + } + EntityRenderers.register(GeneratedMobs.DARK_WEREWOLF.get()) { context -> + BedrockMobRenderer(context, geo("dark_werewolf"), anim("dark_werewolf"), "idle", "walk", tex("dark_werewolf"), 1.4f) + } + EntityRenderers.register(GeneratedMobs.ENDER_SNAIL.get()) { context -> + BedrockMobRenderer(context, geo("ender_snail"), anim("ender_snail"), "idle", "walk", tex("ender_snail"), 1f) + } + EntityRenderers.register(GeneratedMobs.ENDER_SNAKE.get()) { context -> + BedrockMobRenderer(context, geo("ender_snake"), anim("ender_snake"), "idle", "walk", tex("ender_snake"), 1f) + } + EntityRenderers.register(GeneratedMobs.ENTITY_SOUL.get()) { context -> + BedrockMobRenderer(context, geo("entity_soul"), anim("entity_soul"), "idle", "walk", tex("entity_soul"), 1f) + } + EntityRenderers.register(GeneratedMobs.ENTITY_SOUL_1.get()) { context -> + BedrockMobRenderer(context, geo("entity_soul_1"), anim("entity_soul_1"), "idle", "walk", tex("entity_soul_1"), 1f) + } + EntityRenderers.register(GeneratedMobs.ESCAPED_SOUL_ENTITY.get()) { context -> + BedrockMobRenderer(context, geo("escaped_soul_entity"), anim("escaped_soul_entity"), "idle", "walk", tex("escaped_soul_entity"), 1f) + } + EntityRenderers.register(GeneratedMobs.EVERLASTING_WINTER_GHAST.get()) { context -> + BedrockMobRenderer(context, geo("everlasting_winter_ghast"), anim("everlasting_winter_ghast"), "idle", "walk", tex("everlasting_winter_ghast"), 1f) + } + EntityRenderers.register(GeneratedMobs.EVERLASTING_WINTER_SHADOW.get()) { context -> + BedrockMobRenderer(context, geo("everlasting_winter_shadow"), anim("everlasting_winter_shadow"), "idle", "walk", tex("everlasting_winter_shadow"), 1f) + } + EntityRenderers.register(GeneratedMobs.FRIENDLY_LITTLE_SOUL.get()) { context -> + BedrockMobRenderer(context, geo("friendly_little_soul"), anim("friendly_little_soul"), "idle", "walk", tex("friendly_little_soul"), 1f) + } + EntityRenderers.register(GeneratedMobs.FROZEN_HEART.get()) { context -> + BedrockMobRenderer(context, geo("frozen_heart"), anim("frozen_heart"), "idle", "walk", tex("frozen_heart"), 1f) + } + EntityRenderers.register(GeneratedMobs.FROZEN_HEART_SLEEPING.get()) { context -> + BedrockMobRenderer(context, geo("frozen_heart_sleeping"), anim("frozen_heart_sleeping"), "idle", "walk", tex("frozen_heart_sleeping"), 1f) + } + EntityRenderers.register(GeneratedMobs.FROZEN_SHADOW.get()) { context -> + BedrockMobRenderer(context, geo("frozen_shadow"), anim("frozen_shadow"), "idle", "walk", tex("frozen_shadow"), 1f) + } + EntityRenderers.register(GeneratedMobs.GHOST_DIAMOND_AXE.get()) { context -> + BedrockMobRenderer(context, geo("ghost_diamond_axe"), anim("ghost_diamond_axe"), "idle", "walk", tex("ghost_diamond_axe"), 1f) + } + EntityRenderers.register(GeneratedMobs.GHOST_DIAMOND_STAFF.get()) { context -> + BedrockMobRenderer(context, geo("ghost_diamond_staff"), anim("ghost_diamond_staff"), "idle", "walk", tex("ghost_diamond_staff"), 1f) + } + EntityRenderers.register(GeneratedMobs.GHOST_DIAMOND_SWORD.get()) { context -> + BedrockMobRenderer(context, geo("ghost_diamond_sword"), anim("ghost_diamond_sword"), "idle", "walk", tex("ghost_diamond_sword"), 1f) + } + EntityRenderers.register(GeneratedMobs.GHOST_IRON_AXE.get()) { context -> + BedrockMobRenderer(context, geo("ghost_iron_axe"), anim("ghost_iron_axe"), "idle", "walk", tex("ghost_iron_axe"), 1f) + } + EntityRenderers.register(GeneratedMobs.GHOST_IRON_SWORD.get()) { context -> + BedrockMobRenderer(context, geo("ghost_iron_sword"), anim("ghost_iron_sword"), "idle", "walk", tex("ghost_iron_sword"), 1f) + } + EntityRenderers.register(GeneratedMobs.GHOST_WOODEN_STAFF.get()) { context -> + BedrockMobRenderer(context, geo("ghost_wooden_staff"), anim("ghost_wooden_staff"), "idle", "walk", tex("ghost_wooden_staff"), 1f) + } + EntityRenderers.register(GeneratedMobs.GHOST_WOODEN_SWORD.get()) { context -> + BedrockMobRenderer(context, geo("ghost_wooden_sword"), anim("ghost_wooden_sword"), "idle", "walk", tex("ghost_wooden_sword"), 1f) + } + EntityRenderers.register(GeneratedMobs.GOBLIN.get()) { context -> + BedrockMobRenderer(context, geo("goblin"), anim("goblin"), "idle", "walk", tex("goblin"), 1f) + } + EntityRenderers.register(GeneratedMobs.GOBLIN_SNIPER.get()) { context -> + BedrockMobRenderer(context, geo("goblin_sniper"), anim("goblin_sniper"), "idle", "walk", tex("goblin_sniper"), 1f) + } + EntityRenderers.register(GeneratedMobs.GOBLIN_WIZARD.get()) { context -> + BedrockMobRenderer(context, geo("goblin_wizard"), anim("goblin_wizard"), "idle", "walk", tex("goblin_wizard"), 1f) + } + EntityRenderers.register(GeneratedMobs.HOST_OF_DEEP.get()) { context -> + BedrockMobRenderer(context, geo("host_of_deep"), anim("host_of_deep"), "idle", "walk", tex("host_of_deep"), 1f) + } + EntityRenderers.register(GeneratedMobs.ICE_MONSTER.get()) { context -> + BedrockMobRenderer(context, geo("ice_monster"), anim("ice_monster"), "idle", "walk", tex("ice_monster"), 1f) + } + EntityRenderers.register(GeneratedMobs.ICE_SPIRIT.get()) { context -> + BedrockMobRenderer(context, geo("ice_spirit"), anim("ice_spirit"), "idle", "walk", tex("ice_spirit"), 1f) + } + EntityRenderers.register(GeneratedMobs.ICE_THORN.get()) { context -> + BedrockMobRenderer(context, geo("ice_thorn"), anim("ice_thorn"), "idle", "walk", tex("ice_thorn"), 1f) + } + EntityRenderers.register(GeneratedMobs.ICE_WIZARD.get()) { context -> + BedrockMobRenderer(context, geo("ice_wizard"), anim("ice_wizard"), "idle", "walk", tex("ice_wizard"), 1f) + } + EntityRenderers.register(GeneratedMobs.LAVA_LIZARD.get()) { context -> + BedrockMobRenderer(context, geo("lava_lizard"), anim("lava_lizard"), "idle", "walk", tex("lava_lizard"), 1f) + } + EntityRenderers.register(GeneratedMobs.LITTLE_SOUL.get()) { context -> + BedrockMobRenderer(context, geo("little_soul"), anim("little_soul"), "idle", "walk", tex("little_soul"), 1f) + } + EntityRenderers.register(GeneratedMobs.MURLOC_WIZARD.get()) { context -> + BedrockMobRenderer(context, geo("murloc_wizard"), anim("murloc_wizard"), "idle", "walk", tex("murloc_wizard"), 1f) + } + EntityRenderers.register(GeneratedMobs.MUSHROOM_MONSTER.get()) { context -> + BedrockMobRenderer(context, geo("mushroom_monster"), anim("mushroom_monster"), "idle", "walk", tex("mushroom_monster"), 1f) + } + EntityRenderers.register(GeneratedMobs.NAUTILUS.get()) { context -> + BedrockMobRenderer(context, geo("nautilus"), anim("nautilus"), "idle", "walk", tex("nautilus"), 1f) + } + EntityRenderers.register(GeneratedMobs.SAUCER.get()) { context -> + BedrockMobRenderer(context, geo("saucer"), anim("saucer"), "idle", "walk", tex("saucer"), 1f) + } + EntityRenderers.register(GeneratedMobs.SEA_URCHIN.get()) { context -> + BedrockMobRenderer(context, geo("sea_urchin"), anim("sea_urchin"), "idle", "walk", tex("sea_urchin"), 1.2f) + } + EntityRenderers.register(GeneratedMobs.SHADOW_OF_DEEP.get()) { context -> + BedrockMobRenderer(context, geo("shadow_of_deep"), anim("shadow_of_deep"), "idle", "walk", tex("shadow_of_deep"), 1f) + } + EntityRenderers.register(GeneratedMobs.SHADOW_SOUL_1.get()) { context -> + BedrockMobRenderer(context, geo("shadow_soul_1"), anim("shadow_soul_1"), "idle", "walk", tex("shadow_soul_1"), 1f) + } + EntityRenderers.register(GeneratedMobs.SHADOW_SOUL_2.get()) { context -> + BedrockMobRenderer(context, geo("shadow_soul_2"), anim("shadow_soul_2"), "idle", "walk", tex("shadow_soul_2"), 1f) + } + EntityRenderers.register(GeneratedMobs.SOUL_SOLDIER.get()) { context -> + BedrockMobRenderer(context, geo("soul_soldier"), anim("soul_soldier"), "idle", "walk", tex("soul_soldier"), 1f) + } + EntityRenderers.register(GeneratedMobs.WEREWOLF.get()) { context -> + BedrockMobRenderer(context, geo("werewolf"), anim("werewolf"), "idle", "walk", tex("werewolf"), 1.2f) + } + } + + private fun geo(name: String) = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "bedrock/models/entity/$name.geometry.json") + private fun anim(name: String) = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "bedrock/animations/entity/$name.animation.json") + private fun tex(name: String) = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/$name.png") +} diff --git a/src/main/java/com/dec/decisland/entity/GeneratedMobs.kt b/src/main/java/com/dec/decisland/entity/GeneratedMobs.kt new file mode 100644 index 0000000..0a14a1f --- /dev/null +++ b/src/main/java/com/dec/decisland/entity/GeneratedMobs.kt @@ -0,0 +1,1350 @@ +package com.dec.decisland.entity + +import com.dec.decisland.DecIsland +import com.dec.decisland.entity.custom.BedrockMob +import com.dec.decisland.entity.custom.MobConfig +import net.minecraft.core.registries.Registries +import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.LivingEntity +import net.minecraft.world.level.Level +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.MobCategory +import net.minecraft.world.entity.SpawnPlacementTypes +import net.minecraft.world.entity.ai.attributes.AttributeSupplier +import net.minecraft.world.entity.ai.attributes.Attributes +import net.minecraft.world.entity.monster.Monster +import net.minecraft.world.entity.Mob +import net.minecraft.world.level.levelgen.Heightmap +import net.neoforged.bus.api.IEventBus +import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent +import net.neoforged.neoforge.event.entity.RegisterSpawnPlacementsEvent +import net.neoforged.neoforge.registries.DeferredHolder +import net.neoforged.neoforge.registries.DeferredRegister +import java.util.function.Supplier + +/** 由 tools/entity_port/generate.mjs 生成:基岩版生物批量移植注册表 */ +object GeneratedMobs { + @JvmField + val ENTITY_TYPES: DeferredRegister> = + DeferredRegister.create(Registries.ENTITY_TYPE, DecIsland.MOD_ID) + + private fun registerEntity( + name: String, + factory: (EntityType, Level) -> T, + category: MobCategory, + configure: EntityType.Builder.() -> Unit = {}, + ): DeferredHolder, EntityType> = + ENTITY_TYPES.register(name, Supplier { EntityType.Builder.of(factory, category).apply(configure).build(name) }) + + private val CFG_ABYSSAL_CONTROLLER = MobConfig("abyssal_controller", health = 150.0, speed = 0.080, attackDamage = 3.0, followRange = 96.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "villager", "iron_golem", "snow_golem")) + + @JvmField + val ABYSSAL_CONTROLLER: Supplier> = + registerEntity("abyssal_controller", { type, level -> BedrockMob(type, level, CFG_ABYSSAL_CONTROLLER) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + private val CFG_ABYSSAL_SHADOW = MobConfig("abyssal_shadow", health = 10.0, speed = 0.250, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager"), rangedProjectile = Supplier { ModEntities.WAVE_ENERGY.get() }) + + @JvmField + val ABYSSAL_SHADOW: Supplier> = + registerEntity("abyssal_shadow", { type, level -> BedrockMob(type, level, CFG_ABYSSAL_SHADOW) }, MobCategory.MONSTER) { + sized(1.00f, 1.00f) + } + + @JvmField + val ANGRY_CHICKEN: Supplier> = + registerEntity("angry_chicken", { type, level -> AngryChicken(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 0.80f) + } + + @JvmField + val ARCHER: Supplier> = + registerEntity("archer", { type, level -> Archer(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val ASH_BLAZE: Supplier> = + registerEntity("ash_blaze", { type, level -> AshBlaze(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f).fireImmune() + } + + private val CFG_ASH_BOMB = MobConfig("ash_bomb", health = 10.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val ASH_BOMB: Supplier> = + registerEntity("ash_bomb", { type, level -> BedrockMob(type, level, CFG_ASH_BOMB) }, MobCategory.MONSTER) { + sized(1.00f, 0.50f) + } + + private val CFG_ASH_HORSE = MobConfig("ash_horse", health = 300.0, speed = 0.250, attackDamage = 3.0, followRange = 96.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = true, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "villager")) + + @JvmField + val ASH_HORSE: Supplier> = + registerEntity("ash_horse", { type, level -> BedrockMob(type, level, CFG_ASH_HORSE) }, MobCategory.MONSTER) { + sized(1.40f, 1.60f) + } + + private val CFG_ASH_HORSE_HEAD = MobConfig("ash_horse_head", health = 150.0, speed = 0.080, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = true, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem")) + + @JvmField + val ASH_HORSE_HEAD: Supplier> = + registerEntity("ash_horse_head", { type, level -> BedrockMob(type, level, CFG_ASH_HORSE_HEAD) }, MobCategory.MONSTER) { + sized(1.00f, 1.00f) + } + + private val CFG_ASH_KNIGHT = MobConfig("ash_knight", health = 400.0, speed = 0.200, attackDamage = 3.0, followRange = 96.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = true, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "villager")) + + @JvmField + val ASH_KNIGHT: Supplier> = + registerEntity("ash_knight", { type, level -> BedrockMob(type, level, CFG_ASH_KNIGHT) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + private val CFG_ASH_KNIGHT_HEAD = MobConfig("ash_knight_head", health = 300.0, speed = 0.250, attackDamage = 14.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = true, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "villager")) + + @JvmField + val ASH_KNIGHT_HEAD: Supplier> = + registerEntity("ash_knight_head", { type, level -> BedrockMob(type, level, CFG_ASH_KNIGHT_HEAD) }, MobCategory.MONSTER) { + sized(0.80f, 0.80f) + } + + @JvmField + val ASH_PUFFERFISH: Supplier> = + registerEntity("ash_pufferfish", { type, level -> AshPufferfish(type, level) }, MobCategory.WATER_CREATURE) { + sized(0.80f, 0.80f) + } + + private val CFG_ASH_SWORD = MobConfig("ash_sword", health = 100.0, speed = 1.700, attackDamage = 10.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = true, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val ASH_SWORD: Supplier> = + registerEntity("ash_sword", { type, level -> BedrockMob(type, level, CFG_ASH_SWORD) }, MobCategory.MONSTER) { + sized(1.00f, 0.50f) + } + + private val CFG_ASH_SWORD_PHANTOM = MobConfig("ash_sword_phantom", health = 8.0, speed = 4.000, attackDamage = 10.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = true, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val ASH_SWORD_PHANTOM: Supplier> = + registerEntity("ash_sword_phantom", { type, level -> BedrockMob(type, level, CFG_ASH_SWORD_PHANTOM) }, MobCategory.MONSTER) { + sized(1.00f, 1.00f) + } + + @JvmField + val BABY_ENDER_DRAGON: Supplier> = + registerEntity("baby_ender_dragon", { type, level -> BabyEnderDragon(type, level) }, MobCategory.MONSTER) { + sized(3.00f, 1.50f).fireImmune() + } + + @JvmField + val BAT_CHARGER: Supplier> = + registerEntity("bat_charger", { type, level -> BatCharger(type, level) }, MobCategory.MONSTER) { + sized(0.80f, 1.44f) + } + + private val CFG_BLACKSTONE_THORN = MobConfig("blackstone_thorn", health = 27.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = true, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val BLACKSTONE_THORN: Supplier> = + registerEntity("blackstone_thorn", { type, level -> BedrockMob(type, level, CFG_BLACKSTONE_THORN) }, MobCategory.MONSTER) { + sized(1.00f, 2.00f) + } + + @JvmField + val BLOOD_ZOMBIE: Supplier> = + registerEntity("blood_zombie", { type, level -> BloodZombie(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.60f) + } + + @JvmField + val BOMBER: Supplier> = + registerEntity("bomber", { type, level -> Bomber(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f).fireImmune() + } + + @JvmField + val BROWN_BEAR: Supplier> = + registerEntity("brown_bear", { type, level -> BrownBear(type, level) }, MobCategory.CREATURE) { + sized(1.30f, 1.40f) + } + + @JvmField + val CARNAGER: Supplier> = + registerEntity("carnager", { type, level -> Carnager(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + private val CFG_CHEST_MONSTER = MobConfig("chest_monster", health = 50.0, speed = 0.400, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = true, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "villager", "iron_golem")) + + @JvmField + val CHEST_MONSTER: Supplier> = + registerEntity("chest_monster", { type, level -> BedrockMob(type, level, CFG_CHEST_MONSTER) }, MobCategory.MONSTER) { + sized(1.00f, 1.00f) + } + + private val CFG_CHESTER = MobConfig("chester", health = 20.0, speed = 0.300, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = true, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val CHESTER: Supplier> = + registerEntity("chester", { type, level -> BedrockMob(type, level, CFG_CHESTER) }, MobCategory.MONSTER) { + sized(0.56f, 0.56f) + } + + private val CFG_CLAM = MobConfig("clam", health = 20.0, speed = 0.080, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = true, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val CLAM: Supplier> = + registerEntity("clam", { type, level -> BedrockMob(type, level, CFG_CLAM) }, MobCategory.WATER_CREATURE) { + sized(0.30f, 0.30f) + } + + private val CFG_CRAB = MobConfig("crab", health = 20.0, speed = 0.150, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = true, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val CRAB: Supplier> = + registerEntity("crab", { type, level -> BedrockMob(type, level, CFG_CRAB) }, MobCategory.WATER_CREATURE) { + sized(0.30f, 0.30f) + } + + @JvmField + val CRIMSON_SLIME: Supplier> = + registerEntity("crimson_slime", { type, level -> CrimsonSlime(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + @JvmField + val DARK_SNOW_MAN: Supplier> = + registerEntity("dark_snow_man", { type, level -> DarkSnowMan(type, level) }, MobCategory.CREATURE) { + sized(0.40f, 1.80f) + } + + private val CFG_DARK_WEREWOLF = MobConfig("dark_werewolf", health = 100.0, speed = 0.250, attackDamage = 7.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = true, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val DARK_WEREWOLF: Supplier> = + registerEntity("dark_werewolf", { type, level -> BedrockMob(type, level, CFG_DARK_WEREWOLF) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val DOCTOR: Supplier> = + registerEntity("doctor", { type, level -> Doctor(type, level) }, MobCategory.CREATURE) { + sized(0.60f, 1.90f) + } + + @JvmField + val ELF_OF_ASH: Supplier> = + registerEntity("elf_of_ash", { type, level -> ElfOfAsh(type, level) }, MobCategory.MONSTER) { + sized(0.40f, 0.80f).fireImmune() + } + + @JvmField + val ELF_OF_CHAOS: Supplier> = + registerEntity("elf_of_chaos", { type, level -> ElfOfChaos(type, level) }, MobCategory.CREATURE) { + sized(0.60f, 2.00f).fireImmune() + } + + @JvmField + val ELF_OF_DEEP: Supplier> = + registerEntity("elf_of_deep", { type, level -> ElfOfDeep(type, level) }, MobCategory.MONSTER) { + sized(0.40f, 0.80f).fireImmune() + } + + @JvmField + val ELF_OF_DUST: Supplier> = + registerEntity("elf_of_dust", { type, level -> ElfOfDust(type, level) }, MobCategory.MONSTER) { + sized(0.40f, 0.80f).fireImmune() + } + + @JvmField + val ENCHANT_ARMOR: Supplier> = + registerEntity("enchant_armor", { type, level -> EnchantArmor(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + @JvmField + val ENCHANT_ARMOR_BY_BOSS: Supplier> = + registerEntity("enchant_armor_by_boss", { type, level -> EnchantArmorByBoss(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + @JvmField + val ENCHANT_DIAMOND_ARMOR: Supplier> = + registerEntity("enchant_diamond_armor", { type, level -> EnchantDiamondArmor(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + @JvmField + val ENCHANT_ILLAGER: Supplier> = + registerEntity("enchant_illager", { type, level -> EnchantIllager(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val ENCHANT_ILLAGER_1: Supplier> = + registerEntity("enchant_illager_1", { type, level -> EnchantIllager1(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val ENCHANT_ILLAGER_2: Supplier> = + registerEntity("enchant_illager_2", { type, level -> EnchantIllager2(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val END_STONE_GOLEM: Supplier> = + registerEntity("end_stone_golem", { type, level -> EndStoneGolem(type, level) }, MobCategory.CREATURE) { + sized(1.40f, 2.90f).fireImmune() + } + + private val CFG_ENDER_SNAIL = MobConfig("ender_snail", health = 30.0, speed = 0.200, attackDamage = 5.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val ENDER_SNAIL: Supplier> = + registerEntity("ender_snail", { type, level -> BedrockMob(type, level, CFG_ENDER_SNAIL) }, MobCategory.MONSTER) { + sized(0.80f, 0.80f) + } + + private val CFG_ENDER_SNAKE = MobConfig("ender_snake", health = 30.0, speed = 0.080, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val ENDER_SNAKE: Supplier> = + registerEntity("ender_snake", { type, level -> BedrockMob(type, level, CFG_ENDER_SNAKE) }, MobCategory.MONSTER) { + sized(1.00f, 0.60f) + } + + @JvmField + val ENDER_WITCH: Supplier> = + registerEntity("ender_witch", { type, level -> EnderWitch(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val ENDER_WITCH_PUPPET: Supplier> = + registerEntity("ender_witch_puppet", { type, level -> EnderWitchPuppet(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + private val CFG_ENTITY_SOUL = MobConfig("entity_soul", health = 170.0, speed = 0.500, attackDamage = 3.0, followRange = 96.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = true, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val ENTITY_SOUL: Supplier> = + registerEntity("entity_soul", { type, level -> BedrockMob(type, level, CFG_ENTITY_SOUL) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + private val CFG_ENTITY_SOUL_1 = MobConfig("entity_soul_1", health = 100.0, speed = 0.500, attackDamage = 3.0, followRange = 96.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = true, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val ENTITY_SOUL_1: Supplier> = + registerEntity("entity_soul_1", { type, level -> BedrockMob(type, level, CFG_ENTITY_SOUL_1) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + private val CFG_ESCAPED_SOUL_ENTITY = MobConfig("escaped_soul_entity", health = 400.0, speed = 0.320, attackDamage = 20.0, followRange = 32.0, knockbackResistance = 0.70, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem")) + + @JvmField + val ESCAPED_SOUL_ENTITY: Supplier> = + registerEntity("escaped_soul_entity", { type, level -> BedrockMob(type, level, CFG_ESCAPED_SOUL_ENTITY) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + private val CFG_EVERLASTING_WINTER_GHAST = MobConfig("everlasting_winter_ghast", health = 300.0, speed = 0.350, attackDamage = 2.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem")) + + @JvmField + val EVERLASTING_WINTER_GHAST: Supplier> = + registerEntity("everlasting_winter_ghast", { type, level -> BedrockMob(type, level, CFG_EVERLASTING_WINTER_GHAST) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + @JvmField + val EVERLASTING_WINTER_GHAST_1: Supplier> = + registerEntity("everlasting_winter_ghast_1", { type, level -> EverlastingWinterGhast1(type, level) }, MobCategory.MONSTER) { + sized(5.00f, 5.00f).fireImmune() + } + + private val CFG_EVERLASTING_WINTER_SHADOW = MobConfig("everlasting_winter_shadow", health = 50.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = true, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val EVERLASTING_WINTER_SHADOW: Supplier> = + registerEntity("everlasting_winter_shadow", { type, level -> BedrockMob(type, level, CFG_EVERLASTING_WINTER_SHADOW) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + @JvmField + val EVIL_SNOW_MAN: Supplier> = + registerEntity("evil_snow_man", { type, level -> EvilSnowMan(type, level) }, MobCategory.CREATURE) { + sized(0.40f, 1.80f) + } + + @JvmField + val FIRE_STORM: Supplier> = + registerEntity("fire_storm", { type, level -> FireStorm(type, level) }, MobCategory.MONSTER) { + sized(0.30f, 0.90f).fireImmune() + } + + private val CFG_FRIENDLY_LITTLE_SOUL = MobConfig("friendly_little_soul", health = 8.0, speed = 0.200, attackDamage = 4.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val FRIENDLY_LITTLE_SOUL: Supplier> = + registerEntity("friendly_little_soul", { type, level -> BedrockMob(type, level, CFG_FRIENDLY_LITTLE_SOUL) }, MobCategory.MONSTER) { + sized(0.60f, 1.50f) + } + + @JvmField + val FRIENDLY_SPIDER: Supplier> = + registerEntity("friendly_spider", { type, level -> FriendlySpider(type, level) }, MobCategory.MONSTER) { + sized(0.70f, 0.45f) + } + + @JvmField + val FROZEN_GHAST: Supplier> = + registerEntity("frozen_ghast", { type, level -> FrozenGhast(type, level) }, MobCategory.MONSTER) { + sized(2.00f, 2.00f).fireImmune() + } + + private val CFG_FROZEN_HEART = MobConfig("frozen_heart", health = 150.0, speed = 0.080, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem")) + + @JvmField + val FROZEN_HEART: Supplier> = + registerEntity("frozen_heart", { type, level -> BedrockMob(type, level, CFG_FROZEN_HEART) }, MobCategory.MONSTER) { + sized(1.00f, 1.00f) + } + + private val CFG_FROZEN_HEART_SLEEPING = MobConfig("frozen_heart_sleeping", health = 1000000.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = true, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val FROZEN_HEART_SLEEPING: Supplier> = + registerEntity("frozen_heart_sleeping", { type, level -> BedrockMob(type, level, CFG_FROZEN_HEART_SLEEPING) }, MobCategory.MONSTER) { + sized(1.00f, 1.00f) + } + + @JvmField + val FROZEN_MAN: Supplier> = + registerEntity("frozen_man", { type, level -> FrozenMan(type, level) }, MobCategory.CREATURE) { + sized(0.40f, 1.80f) + } + + private val CFG_FROZEN_SHADOW = MobConfig("frozen_shadow", health = 24.0, speed = 4.000, attackDamage = 10.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val FROZEN_SHADOW: Supplier> = + registerEntity("frozen_shadow", { type, level -> BedrockMob(type, level, CFG_FROZEN_SHADOW) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + @JvmField + val FROZEN_SPIDER: Supplier> = + registerEntity("frozen_spider", { type, level -> FrozenSpider(type, level) }, MobCategory.MONSTER) { + sized(1.40f, 0.90f) + } + + @JvmField + val GARGOYLE: Supplier> = + registerEntity("gargoyle", { type, level -> Gargoyle(type, level) }, MobCategory.MONSTER) { + sized(1.00f, 1.80f) + } + + private val CFG_GHOST_DIAMOND_AXE = MobConfig("ghost_diamond_axe", health = 40.0, speed = 0.200, attackDamage = 6.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "villager")) + + @JvmField + val GHOST_DIAMOND_AXE: Supplier> = + registerEntity("ghost_diamond_axe", { type, level -> BedrockMob(type, level, CFG_GHOST_DIAMOND_AXE) }, MobCategory.MONSTER) { + sized(0.40f, 1.80f) + } + + private val CFG_GHOST_DIAMOND_STAFF = MobConfig("ghost_diamond_staff", health = 40.0, speed = 0.080, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "villager", "iron_golem", "snow_golem"), rangedProjectile = Supplier { ModEntities.STREAM_ENERGY_BALL.get() }) + + @JvmField + val GHOST_DIAMOND_STAFF: Supplier> = + registerEntity("ghost_diamond_staff", { type, level -> BedrockMob(type, level, CFG_GHOST_DIAMOND_STAFF) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + private val CFG_GHOST_DIAMOND_SWORD = MobConfig("ghost_diamond_sword", health = 40.0, speed = 1.400, attackDamage = 7.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val GHOST_DIAMOND_SWORD: Supplier> = + registerEntity("ghost_diamond_sword", { type, level -> BedrockMob(type, level, CFG_GHOST_DIAMOND_SWORD) }, MobCategory.MONSTER) { + sized(1.00f, 1.00f) + } + + private val CFG_GHOST_IRON_AXE = MobConfig("ghost_iron_axe", health = 20.0, speed = 0.200, attackDamage = 5.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "villager")) + + @JvmField + val GHOST_IRON_AXE: Supplier> = + registerEntity("ghost_iron_axe", { type, level -> BedrockMob(type, level, CFG_GHOST_IRON_AXE) }, MobCategory.MONSTER) { + sized(0.40f, 1.80f) + } + + private val CFG_GHOST_IRON_SWORD = MobConfig("ghost_iron_sword", health = 20.0, speed = 1.800, attackDamage = 6.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val GHOST_IRON_SWORD: Supplier> = + registerEntity("ghost_iron_sword", { type, level -> BedrockMob(type, level, CFG_GHOST_IRON_SWORD) }, MobCategory.MONSTER) { + sized(1.00f, 1.00f) + } + + private val CFG_GHOST_WOODEN_STAFF = MobConfig("ghost_wooden_staff", health = 20.0, speed = 0.080, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "villager", "iron_golem", "snow_golem"), rangedProjectile = Supplier { ModEntities.ENERGY_BALL.get() }) + + @JvmField + val GHOST_WOODEN_STAFF: Supplier> = + registerEntity("ghost_wooden_staff", { type, level -> BedrockMob(type, level, CFG_GHOST_WOODEN_STAFF) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + private val CFG_GHOST_WOODEN_SWORD = MobConfig("ghost_wooden_sword", health = 10.0, speed = 1.800, attackDamage = 4.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val GHOST_WOODEN_SWORD: Supplier> = + registerEntity("ghost_wooden_sword", { type, level -> BedrockMob(type, level, CFG_GHOST_WOODEN_SWORD) }, MobCategory.MONSTER) { + sized(1.00f, 1.00f) + } + + @JvmField + val GINGERBREAD_MAN_BY_TOTEM: Supplier> = + registerEntity("gingerbread_man_by_totem", { type, level -> GingerbreadManByTotem(type, level) }, MobCategory.MONSTER) { + sized(0.30f, 0.54f) + } + + private val CFG_GOBLIN = MobConfig("goblin", health = 30.0, speed = 0.350, attackDamage = 2.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val GOBLIN: Supplier> = + registerEntity("goblin", { type, level -> BedrockMob(type, level, CFG_GOBLIN) }, MobCategory.MONSTER) { + sized(0.80f, 1.30f) + } + + private val CFG_GOBLIN_SNIPER = MobConfig("goblin_sniper", health = 20.0, speed = 0.200, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player"), rangedProjectile = Supplier { ModEntities.BULLET_BY_FLINTLOCK_PRO.get() }) + + @JvmField + val GOBLIN_SNIPER: Supplier> = + registerEntity("goblin_sniper", { type, level -> BedrockMob(type, level, CFG_GOBLIN_SNIPER) }, MobCategory.MONSTER) { + sized(0.80f, 1.30f) + } + + private val CFG_GOBLIN_WIZARD = MobConfig("goblin_wizard", health = 20.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player"), rangedProjectile = Supplier { ModEntities.GOLDEN_ENERGY_BALL.get() }) + + @JvmField + val GOBLIN_WIZARD: Supplier> = + registerEntity("goblin_wizard", { type, level -> BedrockMob(type, level, CFG_GOBLIN_WIZARD) }, MobCategory.MONSTER) { + sized(0.80f, 1.30f) + } + + private val CFG_HOST_OF_DEEP = MobConfig("host_of_deep", health = 400.0, speed = 0.500, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val HOST_OF_DEEP: Supplier> = + registerEntity("host_of_deep", { type, level -> BedrockMob(type, level, CFG_HOST_OF_DEEP) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val ICE_BAT: Supplier> = + registerEntity("ice_bat", { type, level -> IceBat(type, level) }, MobCategory.MONSTER) { + sized(0.50f, 0.90f) + } + + @JvmField + val ICE_BLAZE: Supplier> = + registerEntity("ice_blaze", { type, level -> IceBlaze(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f).fireImmune() + } + + @JvmField + val ICE_CREEPER: Supplier> = + registerEntity("ice_creeper", { type, level -> IceCreeper(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f).fireImmune() + } + + private val CFG_ICE_MONSTER = MobConfig("ice_monster", health = 100.0, speed = 0.250, attackDamage = 15.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "villager")) + + @JvmField + val ICE_MONSTER: Supplier> = + registerEntity("ice_monster", { type, level -> BedrockMob(type, level, CFG_ICE_MONSTER) }, MobCategory.MONSTER) { + sized(1.20f, 2.90f) + } + + private val CFG_ICE_SPIRIT = MobConfig("ice_spirit", health = 20.0, speed = 0.300, attackDamage = 6.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "villager")) + + @JvmField + val ICE_SPIRIT: Supplier> = + registerEntity("ice_spirit", { type, level -> BedrockMob(type, level, CFG_ICE_SPIRIT) }, MobCategory.MONSTER) { + sized(0.60f, 0.60f) + } + + private val CFG_ICE_THORN = MobConfig("ice_thorn", health = 6.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = true, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val ICE_THORN: Supplier> = + registerEntity("ice_thorn", { type, level -> BedrockMob(type, level, CFG_ICE_THORN) }, MobCategory.MONSTER) { + sized(1.00f, 2.00f) + } + + private val CFG_ICE_WIZARD = MobConfig("ice_wizard", health = 120.0, speed = 0.500, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val ICE_WIZARD: Supplier> = + registerEntity("ice_wizard", { type, level -> BedrockMob(type, level, CFG_ICE_WIZARD) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val ICE_ZOMBIE: Supplier> = + registerEntity("ice_zombie", { type, level -> IceZombie(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + @JvmField + val ILLUSION_ZOMBIE: Supplier> = + registerEntity("illusion_zombie", { type, level -> IllusionZombie(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val ILLUSIONER: Supplier> = + registerEntity("illusioner", { type, level -> Illusioner(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val ILLUSIONER_PUPPET: Supplier> = + registerEntity("illusioner_puppet", { type, level -> IllusionerPuppet(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val JUNGLE_SPIDER: Supplier> = + registerEntity("jungle_spider", { type, level -> JungleSpider(type, level) }, MobCategory.MONSTER) { + sized(0.40f, 0.30f) + } + + @JvmField + val KING_OF_PILLAGER: Supplier> = + registerEntity("king_of_pillager", { type, level -> KingOfPillager(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 2.00f).fireImmune() + } + + private val CFG_LAVA_LIZARD = MobConfig("lava_lizard", health = 15.0, speed = 0.160, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val LAVA_LIZARD: Supplier> = + registerEntity("lava_lizard", { type, level -> BedrockMob(type, level, CFG_LAVA_LIZARD) }, MobCategory.MONSTER) { + sized(1.20f, 0.60f) + } + + @JvmField + val LIFE_INSECT: Supplier> = + registerEntity("life_insect", { type, level -> LifeInsect(type, level) }, MobCategory.MONSTER) { + sized(0.40f, 0.30f).fireImmune() + } + + @JvmField + val LITTLE_BAT: Supplier> = + registerEntity("little_bat", { type, level -> LittleBat(type, level) }, MobCategory.MONSTER) { + sized(0.40f, 0.72f) + } + + private val CFG_LITTLE_SOUL = MobConfig("little_soul", health = 3.0, speed = 0.200, attackDamage = 6.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val LITTLE_SOUL: Supplier> = + registerEntity("little_soul", { type, level -> BedrockMob(type, level, CFG_LITTLE_SOUL) }, MobCategory.MONSTER) { + sized(0.60f, 1.50f) + } + + @JvmField + val LURK_SKELETON: Supplier> = + registerEntity("lurk_skeleton", { type, level -> LurkSkeleton(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + @JvmField + val LURK_ZOMBIE: Supplier> = + registerEntity("lurk_zombie", { type, level -> LurkZombie(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val MUMMY: Supplier> = + registerEntity("mummy", { type, level -> Mummy(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val MUMMY_SKELETON: Supplier> = + registerEntity("mummy_skeleton", { type, level -> MummySkeleton(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val MURLOC: Supplier> = + registerEntity("murloc", { type, level -> Murloc(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + private val CFG_MURLOC_WIZARD = MobConfig("murloc_wizard", health = 11.0, speed = 0.250, attackDamage = 5.0, followRange = 16.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player"), rangedProjectile = Supplier { ModEntities.WAVE_ENERGY.get() }) + + @JvmField + val MURLOC_WIZARD: Supplier> = + registerEntity("murloc_wizard", { type, level -> BedrockMob(type, level, CFG_MURLOC_WIZARD) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + private val CFG_MUSHROOM_MONSTER = MobConfig("mushroom_monster", health = 20.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = true, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val MUSHROOM_MONSTER: Supplier> = + registerEntity("mushroom_monster", { type, level -> BedrockMob(type, level, CFG_MUSHROOM_MONSTER) }, MobCategory.WATER_CREATURE) { + sized(0.30f, 0.30f) + } + + @JvmField + val MUSHROOM_ZOMBIE: Supplier> = + registerEntity("mushroom_zombie", { type, level -> MushroomZombie(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val MYSTICAL_SKELETON: Supplier> = + registerEntity("mystical_skeleton", { type, level -> MysticalSkeleton(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + private val CFG_NAUTILUS = MobConfig("nautilus", health = 10.0, speed = 0.080, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = true, friendly = true, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val NAUTILUS: Supplier> = + registerEntity("nautilus", { type, level -> BedrockMob(type, level, CFG_NAUTILUS) }, MobCategory.WATER_CREATURE) { + sized(0.30f, 0.30f) + } + + @JvmField + val NETHER_CREEPER: Supplier> = + registerEntity("nether_creeper", { type, level -> NetherCreeper(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f).fireImmune() + } + + @JvmField + val NETHER_GOLEM: Supplier> = + registerEntity("nether_golem", { type, level -> NetherGolem(type, level) }, MobCategory.CREATURE) { + sized(0.60f, 2.00f).fireImmune() + } + + @JvmField + val NETHER_PHANTOM: Supplier> = + registerEntity("nether_phantom", { type, level -> NetherPhantom(type, level) }, MobCategory.MONSTER) { + sized(1.20f, 0.75f) + } + + @JvmField + val NETHER_SKELETON: Supplier> = + registerEntity("nether_skeleton", { type, level -> NetherSkeleton(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f).fireImmune() + } + + @JvmField + val NETHER_SKELETON_WIZARD: Supplier> = + registerEntity("nether_skeleton_wizard", { type, level -> NetherSkeletonWizard(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val OBSIDIAN_GOLEM: Supplier> = + registerEntity("obsidian_golem", { type, level -> ObsidianGolem(type, level) }, MobCategory.CREATURE) { + sized(1.40f, 2.90f).fireImmune() + } + + @JvmField + val PILLAGER_BY_BOSS: Supplier> = + registerEntity("pillager_by_boss", { type, level -> PillagerByBoss(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val PIRATE: Supplier> = + registerEntity("pirate", { type, level -> Pirate(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val PLAYER_GHOST: Supplier> = + registerEntity("player_ghost", { type, level -> PlayerGhost(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val POLAR_WOLF: Supplier> = + registerEntity("polar_wolf", { type, level -> PolarWolf(type, level) }, MobCategory.CREATURE) { + sized(0.90f, 1.20f) + } + + @JvmField + val PREDATORS: Supplier> = + registerEntity("predators", { type, level -> Predators(type, level) }, MobCategory.MONSTER) { + sized(2.50f, 4.50f).fireImmune() + } + + @JvmField + val PUMPKIN_SLIME: Supplier> = + registerEntity("pumpkin_slime", { type, level -> PumpkinSlime(type, level) }, MobCategory.MONSTER) { + sized(0.50f, 0.50f) + } + + @JvmField + val RADIATE_CREEPER: Supplier> = + registerEntity("radiate_creeper", { type, level -> RadiateCreeper(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f).fireImmune() + } + + @JvmField + val RADIATE_ENDERMAN: Supplier> = + registerEntity("radiate_enderman", { type, level -> RadiateEnderman(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 2.90f) + } + + @JvmField + val RADIATE_SKELETON: Supplier> = + registerEntity("radiate_skeleton", { type, level -> RadiateSkeleton(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f).fireImmune() + } + + @JvmField + val RADIATE_SPIDER: Supplier> = + registerEntity("radiate_spider", { type, level -> RadiateSpider(type, level) }, MobCategory.MONSTER) { + sized(1.68f, 1.08f) + } + + @JvmField + val REAL_SOUL: Supplier> = + registerEntity("real_soul", { type, level -> RealSoul(type, level) }, MobCategory.MONSTER) { + sized(1.20f, 3.00f) + } + + @JvmField + val RUMORER: Supplier> = + registerEntity("rumorer", { type, level -> Rumorer(type, level) }, MobCategory.MONSTER) { + sized(0.70f, 1.20f) + } + + @JvmField + val SARDINE: Supplier> = + registerEntity("sardine", { type, level -> Sardine(type, level) }, MobCategory.WATER_CREATURE) { + sized(0.60f, 0.30f) + } + + private val CFG_SAUCER = MobConfig("saucer", health = 9.0, speed = 0.080, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) + + @JvmField + val SAUCER: Supplier> = + registerEntity("saucer", { type, level -> BedrockMob(type, level, CFG_SAUCER) }, MobCategory.MONSTER) { + sized(1.00f, 1.00f) + } + + private val CFG_SEA_URCHIN = MobConfig("sea_urchin", health = 6.0, speed = 0.080, attackDamage = 4.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = true, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val SEA_URCHIN: Supplier> = + registerEntity("sea_urchin", { type, level -> BedrockMob(type, level, CFG_SEA_URCHIN) }, MobCategory.WATER_CREATURE) { + sized(0.80f, 0.80f) + } + + @JvmField + val SHADOW_ARCHER: Supplier> = + registerEntity("shadow_archer", { type, level -> ShadowArcher(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + @JvmField + val SHADOW_CREEPER: Supplier> = + registerEntity("shadow_creeper", { type, level -> ShadowCreeper(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + private val CFG_SHADOW_OF_DEEP = MobConfig("shadow_of_deep", health = 40.0, speed = 0.300, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem")) + + @JvmField + val SHADOW_OF_DEEP: Supplier> = + registerEntity("shadow_of_deep", { type, level -> BedrockMob(type, level, CFG_SHADOW_OF_DEEP) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val SHADOW_OF_SEA: Supplier> = + registerEntity("shadow_of_sea", { type, level -> ShadowOfSea(type, level) }, MobCategory.WATER_CREATURE) { + sized(0.90f, 0.50f) + } + + @JvmField + val SHADOW_SKELETON: Supplier> = + registerEntity("shadow_skeleton", { type, level -> ShadowSkeleton(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val SHADOW_SKELETON_PUPPET: Supplier> = + registerEntity("shadow_skeleton_puppet", { type, level -> ShadowSkeletonPuppet(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + private val CFG_SHADOW_SOUL_1 = MobConfig("shadow_soul_1", health = 200.0, speed = 0.150, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.70, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem")) + + @JvmField + val SHADOW_SOUL_1: Supplier> = + registerEntity("shadow_soul_1", { type, level -> BedrockMob(type, level, CFG_SHADOW_SOUL_1) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + private val CFG_SHADOW_SOUL_2 = MobConfig("shadow_soul_2", health = 200.0, speed = 0.150, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.70, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem")) + + @JvmField + val SHADOW_SOUL_2: Supplier> = + registerEntity("shadow_soul_2", { type, level -> BedrockMob(type, level, CFG_SHADOW_SOUL_2) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + @JvmField + val SHADOW_ZOMBIE: Supplier> = + registerEntity("shadow_zombie", { type, level -> ShadowZombie(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val SHADOW_ZOMBIE_PUPPET: Supplier> = + registerEntity("shadow_zombie_puppet", { type, level -> ShadowZombiePuppet(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val SIMPLE_GLIDER: Supplier> = + registerEntity("simple_glider", { type, level -> SimpleGlider(type, level) }, MobCategory.CREATURE) { + sized(0.98f, 0.70f) + } + + @JvmField + val SKELETON_ASSASSIN: Supplier> = + registerEntity("skeleton_assassin", { type, level -> SkeletonAssassin(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val SKELETON_KNIGHT: Supplier> = + registerEntity("skeleton_knight", { type, level -> SkeletonKnight(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val SKELETON_KNIGHT_COMMANDER: Supplier> = + registerEntity("skeleton_knight_commander", { type, level -> SkeletonKnightCommander(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val SKELETON_WARRIOR: Supplier> = + registerEntity("skeleton_warrior", { type, level -> SkeletonWarrior(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f).fireImmune() + } + + @JvmField + val SKELETON_WIZARD: Supplier> = + registerEntity("skeleton_wizard", { type, level -> SkeletonWizard(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val SOLDIER: Supplier> = + registerEntity("soldier", { type, level -> Soldier(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val SON_OF_CHAOS: Supplier> = + registerEntity("son_of_chaos", { type, level -> SonOfChaos(type, level) }, MobCategory.CREATURE) { + sized(0.70f, 1.45f) + } + + @JvmField + val SON_OF_NATURE: Supplier> = + registerEntity("son_of_nature", { type, level -> SonOfNature(type, level) }, MobCategory.CREATURE) { + sized(0.70f, 1.45f) + } + + @JvmField + val SOUL: Supplier> = + registerEntity("soul", { type, level -> Soul(type, level) }, MobCategory.MONSTER) { + sized(0.35f, 0.60f).fireImmune() + } + + @JvmField + val SOUL_BLAZE: Supplier> = + registerEntity("soul_blaze", { type, level -> SoulBlaze(type, level) }, MobCategory.MONSTER) { + sized(0.50f, 1.80f).fireImmune() + } + + @JvmField + val SOUL_INSECT: Supplier> = + registerEntity("soul_insect", { type, level -> SoulInsect(type, level) }, MobCategory.WATER_CREATURE) { + sized(0.80f, 0.60f).fireImmune() + } + + @JvmField + val SOUL_SKELETON: Supplier> = + registerEntity("soul_skeleton", { type, level -> SoulSkeleton(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + private val CFG_SOUL_SOLDIER = MobConfig("soul_soldier", health = 50.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val SOUL_SOLDIER: Supplier> = + registerEntity("soul_soldier", { type, level -> BedrockMob(type, level, CFG_SOUL_SOLDIER) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val SOUL_ZOMBIE: Supplier> = + registerEntity("soul_zombie", { type, level -> SoulZombie(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f) + } + + @JvmField + val STAR: Supplier> = + registerEntity("star", { type, level -> Star(type, level) }, MobCategory.MONSTER) { + sized(1.00f, 1.00f).fireImmune() + } + + @JvmField + val STONE_GOLEM: Supplier> = + registerEntity("stone_golem", { type, level -> StoneGolem(type, level) }, MobCategory.CREATURE) { + sized(1.40f, 2.90f) + } + + @JvmField + val SWAMP_DROWNED: Supplier> = + registerEntity("swamp_drowned", { type, level -> SwampDrowned(type, level) }, MobCategory.WATER_CREATURE) { + sized(0.60f, 1.90f) + } + + @JvmField + val SWAMP_GOLEM: Supplier> = + registerEntity("swamp_golem", { type, level -> SwampGolem(type, level) }, MobCategory.WATER_CREATURE) { + sized(0.60f, 2.00f).fireImmune() + } + + @JvmField + val TNT_CREEPER: Supplier> = + registerEntity("tnt_creeper", { type, level -> TntCreeper(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.80f).fireImmune() + } + + @JvmField + val TNT_SNOW_MAN: Supplier> = + registerEntity("tnt_snow_man", { type, level -> TntSnowMan(type, level) }, MobCategory.CREATURE) { + sized(0.40f, 1.80f) + } + + @JvmField + val VAMPIRE_BAT: Supplier> = + registerEntity("vampire_bat", { type, level -> VampireBat(type, level) }, MobCategory.MONSTER) { + sized(0.40f, 0.72f) + } + + @JvmField + val VAMPIRE_BAT_BY_BOSS: Supplier> = + registerEntity("vampire_bat_by_boss", { type, level -> VampireBatByBoss(type, level) }, MobCategory.MONSTER) { + sized(0.40f, 0.72f) + } + + @JvmField + val VENGEFUL_GHOST: Supplier> = + registerEntity("vengeful_ghost", { type, level -> VengefulGhost(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val VINDICATOR_BY_BOSS: Supplier> = + registerEntity("vindicator_by_boss", { type, level -> VindicatorByBoss(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val WARPED_SKELETON: Supplier> = + registerEntity("warped_skeleton", { type, level -> WarpedSkeleton(type, level) }, MobCategory.MONSTER) { + sized(0.63f, 1.98f).fireImmune() + } + + @JvmField + val WATCHER: Supplier> = + registerEntity("watcher", { type, level -> Watcher(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + private val CFG_WEREWOLF = MobConfig("werewolf", health = 60.0, speed = 0.250, attackDamage = 5.0, followRange = 32.0, knockbackResistance = 0.75, xp = 5, fireImmune = false, undead = true, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) + + @JvmField + val WEREWOLF: Supplier> = + registerEntity("werewolf", { type, level -> BedrockMob(type, level, CFG_WEREWOLF) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + @JvmField + val ZOMBIE_FISH: Supplier> = + registerEntity("zombie_fish", { type, level -> ZombieFish(type, level) }, MobCategory.WATER_CREATURE) { + sized(0.50f, 0.50f) + } + + @JvmField + val ZOMBIE_SUMMONER: Supplier> = + registerEntity("zombie_summoner", { type, level -> ZombieSummoner(type, level) }, MobCategory.MONSTER) { + sized(0.60f, 1.90f) + } + + // ==== 属性 ==== + data class SpawnEntry(val type: Supplier>, val rule: String) + + @JvmStatic + val ATTRIBUTE_ENTRIES: List>, AttributeSupplier.Builder>> = listOf( + ABYSSAL_CONTROLLER to BedrockMob.createAttributes(CFG_ABYSSAL_CONTROLLER), + ABYSSAL_SHADOW to BedrockMob.createAttributes(CFG_ABYSSAL_SHADOW), + ANGRY_CHICKEN to net.minecraft.world.entity.animal.Chicken.createAttributes(), + ARCHER to net.minecraft.world.entity.monster.Pillager.createAttributes(), + ASH_BLAZE to net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + ASH_BOMB to BedrockMob.createAttributes(CFG_ASH_BOMB), + ASH_HORSE to BedrockMob.createAttributes(CFG_ASH_HORSE), + ASH_HORSE_HEAD to BedrockMob.createAttributes(CFG_ASH_HORSE_HEAD), + ASH_KNIGHT to BedrockMob.createAttributes(CFG_ASH_KNIGHT), + ASH_KNIGHT_HEAD to BedrockMob.createAttributes(CFG_ASH_KNIGHT_HEAD), + ASH_PUFFERFISH to net.minecraft.world.entity.animal.AbstractFish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 6.0), + ASH_SWORD to BedrockMob.createAttributes(CFG_ASH_SWORD), + ASH_SWORD_PHANTOM to BedrockMob.createAttributes(CFG_ASH_SWORD_PHANTOM), + BABY_ENDER_DRAGON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 300.0), + BAT_CHARGER to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0), + BLACKSTONE_THORN to BedrockMob.createAttributes(CFG_BLACKSTONE_THORN), + BLOOD_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), + BOMBER to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0), + BROWN_BEAR to net.minecraft.world.entity.animal.PolarBear.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0), + CARNAGER to net.minecraft.world.entity.monster.Vindicator.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 35.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), + CHEST_MONSTER to BedrockMob.createAttributes(CFG_CHEST_MONSTER), + CHESTER to BedrockMob.createAttributes(CFG_CHESTER), + CLAM to BedrockMob.createAttributes(CFG_CLAM), + CRAB to BedrockMob.createAttributes(CFG_CRAB), + CRIMSON_SLIME to net.minecraft.world.entity.monster.Monster.createMonsterAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0), + DARK_SNOW_MAN to net.minecraft.world.entity.animal.SnowGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0), + DARK_WEREWOLF to BedrockMob.createAttributes(CFG_DARK_WEREWOLF), + DOCTOR to net.minecraft.world.entity.npc.Villager.createAttributes(), + ELF_OF_ASH to net.minecraft.world.entity.monster.Vex.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + ELF_OF_CHAOS to net.minecraft.world.entity.animal.IronGolem.createAttributes(), + ELF_OF_DEEP to net.minecraft.world.entity.monster.Vex.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0), + ELF_OF_DUST to net.minecraft.world.entity.monster.Vex.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + ENCHANT_ARMOR to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0), + ENCHANT_ARMOR_BY_BOSS to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0), + ENCHANT_DIAMOND_ARMOR to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 60.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 8.0), + ENCHANT_ILLAGER to net.minecraft.world.entity.monster.Evoker.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 700.0), + ENCHANT_ILLAGER_1 to net.minecraft.world.entity.monster.Evoker.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 700.0), + ENCHANT_ILLAGER_2 to net.minecraft.world.entity.monster.Vindicator.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 400.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 1.0), + END_STONE_GOLEM to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 60.0), + ENDER_SNAIL to BedrockMob.createAttributes(CFG_ENDER_SNAIL), + ENDER_SNAKE to BedrockMob.createAttributes(CFG_ENDER_SNAKE), + ENDER_WITCH to net.minecraft.world.entity.monster.Witch.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0), + ENDER_WITCH_PUPPET to net.minecraft.world.entity.monster.Witch.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 2.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 4.0), + ENTITY_SOUL to BedrockMob.createAttributes(CFG_ENTITY_SOUL), + ENTITY_SOUL_1 to BedrockMob.createAttributes(CFG_ENTITY_SOUL_1), + ESCAPED_SOUL_ENTITY to BedrockMob.createAttributes(CFG_ESCAPED_SOUL_ENTITY), + EVERLASTING_WINTER_GHAST to BedrockMob.createAttributes(CFG_EVERLASTING_WINTER_GHAST), + EVERLASTING_WINTER_GHAST_1 to net.minecraft.world.entity.monster.Ghast.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 350.0), + EVERLASTING_WINTER_SHADOW to BedrockMob.createAttributes(CFG_EVERLASTING_WINTER_SHADOW), + EVIL_SNOW_MAN to net.minecraft.world.entity.animal.SnowGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0), + FIRE_STORM to net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + FRIENDLY_LITTLE_SOUL to BedrockMob.createAttributes(CFG_FRIENDLY_LITTLE_SOUL), + FRIENDLY_SPIDER to net.minecraft.world.entity.monster.Spider.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), + FROZEN_GHAST to net.minecraft.world.entity.monster.Ghast.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0), + FROZEN_HEART to BedrockMob.createAttributes(CFG_FROZEN_HEART), + FROZEN_HEART_SLEEPING to BedrockMob.createAttributes(CFG_FROZEN_HEART_SLEEPING), + FROZEN_MAN to net.minecraft.world.entity.animal.SnowGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0), + FROZEN_SHADOW to BedrockMob.createAttributes(CFG_FROZEN_SHADOW), + FROZEN_SPIDER to net.minecraft.world.entity.monster.Spider.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + GARGOYLE to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 23.0), + GHOST_DIAMOND_AXE to BedrockMob.createAttributes(CFG_GHOST_DIAMOND_AXE), + GHOST_DIAMOND_STAFF to BedrockMob.createAttributes(CFG_GHOST_DIAMOND_STAFF), + GHOST_DIAMOND_SWORD to BedrockMob.createAttributes(CFG_GHOST_DIAMOND_SWORD), + GHOST_IRON_AXE to BedrockMob.createAttributes(CFG_GHOST_IRON_AXE), + GHOST_IRON_SWORD to BedrockMob.createAttributes(CFG_GHOST_IRON_SWORD), + GHOST_WOODEN_STAFF to BedrockMob.createAttributes(CFG_GHOST_WOODEN_STAFF), + GHOST_WOODEN_SWORD to BedrockMob.createAttributes(CFG_GHOST_WOODEN_SWORD), + GINGERBREAD_MAN_BY_TOTEM to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 3.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 1.0), + GOBLIN to BedrockMob.createAttributes(CFG_GOBLIN), + GOBLIN_SNIPER to BedrockMob.createAttributes(CFG_GOBLIN_SNIPER), + GOBLIN_WIZARD to BedrockMob.createAttributes(CFG_GOBLIN_WIZARD), + HOST_OF_DEEP to BedrockMob.createAttributes(CFG_HOST_OF_DEEP), + ICE_BAT to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0), + ICE_BLAZE to net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 35.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + ICE_CREEPER to net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 7.0), + ICE_MONSTER to BedrockMob.createAttributes(CFG_ICE_MONSTER), + ICE_SPIRIT to BedrockMob.createAttributes(CFG_ICE_SPIRIT), + ICE_THORN to BedrockMob.createAttributes(CFG_ICE_THORN), + ICE_WIZARD to BedrockMob.createAttributes(CFG_ICE_WIZARD), + ICE_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 38.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + ILLUSION_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + ILLUSIONER to net.minecraft.world.entity.monster.Illusioner.createAttributes(), + ILLUSIONER_PUPPET to net.minecraft.world.entity.monster.Illusioner.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + JUNGLE_SPIDER to net.minecraft.world.entity.monster.Spider.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + KING_OF_PILLAGER to net.minecraft.world.entity.monster.Pillager.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 200.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + LAVA_LIZARD to BedrockMob.createAttributes(CFG_LAVA_LIZARD), + LIFE_INSECT to net.minecraft.world.entity.monster.Silverfish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 7.0), + LITTLE_BAT to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 5.0), + LITTLE_SOUL to BedrockMob.createAttributes(CFG_LITTLE_SOUL), + LURK_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 60.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), + LURK_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 70.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 5.0), + MUMMY to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 4.0), + MUMMY_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + MURLOC to net.minecraft.world.entity.monster.Guardian.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 11.0), + MURLOC_WIZARD to BedrockMob.createAttributes(CFG_MURLOC_WIZARD), + MUSHROOM_MONSTER to BedrockMob.createAttributes(CFG_MUSHROOM_MONSTER), + MUSHROOM_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + MYSTICAL_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + NAUTILUS to BedrockMob.createAttributes(CFG_NAUTILUS), + NETHER_CREEPER to net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 7.0), + NETHER_GOLEM to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0), + NETHER_PHANTOM to net.minecraft.world.entity.FlyingMob.createMobAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0).add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 25.0), + NETHER_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), + NETHER_SKELETON_WIZARD to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0), + OBSIDIAN_GOLEM to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 250.0), + PILLAGER_BY_BOSS to net.minecraft.world.entity.monster.Pillager.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + PIRATE to net.minecraft.world.entity.monster.Pillager.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 28.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + PLAYER_GHOST to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 4.0), + POLAR_WOLF to net.minecraft.world.entity.animal.Wolf.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0), + PREDATORS to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 300.0), + PUMPKIN_SLIME to net.minecraft.world.entity.monster.Monster.createMonsterAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0), + RADIATE_CREEPER to net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + RADIATE_ENDERMAN to net.minecraft.world.entity.monster.EnderMan.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 7.0), + RADIATE_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 35.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), + RADIATE_SPIDER to net.minecraft.world.entity.monster.Spider.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + REAL_SOUL to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 150.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 17.0), + RUMORER to net.minecraft.world.entity.animal.Cow.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0), + SARDINE to net.minecraft.world.entity.animal.AbstractFish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 6.0), + SAUCER to BedrockMob.createAttributes(CFG_SAUCER), + SEA_URCHIN to BedrockMob.createAttributes(CFG_SEA_URCHIN), + SHADOW_ARCHER to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 23.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + SHADOW_CREEPER to net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 12.0), + SHADOW_OF_DEEP to BedrockMob.createAttributes(CFG_SHADOW_OF_DEEP), + SHADOW_OF_SEA to net.minecraft.world.entity.FlyingMob.createMobAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0).add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 5.0), + SHADOW_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0), + SHADOW_SKELETON_PUPPET to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0), + SHADOW_SOUL_1 to BedrockMob.createAttributes(CFG_SHADOW_SOUL_1), + SHADOW_SOUL_2 to BedrockMob.createAttributes(CFG_SHADOW_SOUL_2), + SHADOW_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 55.0), + SHADOW_ZOMBIE_PUPPET to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 5.0), + SIMPLE_GLIDER to net.minecraft.world.entity.animal.Chicken.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0), + SKELETON_ASSASSIN to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 45.0), + SKELETON_KNIGHT to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + SKELETON_KNIGHT_COMMANDER to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 150.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + SKELETON_WARRIOR to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), + SKELETON_WIZARD to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0), + SOLDIER to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), + SON_OF_CHAOS to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0), + SON_OF_NATURE to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0), + SOUL to net.minecraft.world.entity.monster.Vex.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0), + SOUL_BLAZE to net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 8.0), + SOUL_INSECT to net.minecraft.world.entity.monster.Silverfish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 45.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 9.0), + SOUL_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0), + SOUL_SOLDIER to BedrockMob.createAttributes(CFG_SOUL_SOLDIER), + SOUL_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 5.0), + STAR to net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 55.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + STONE_GOLEM to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 70.0), + SWAMP_DROWNED to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + SWAMP_GOLEM to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 110.0), + TNT_CREEPER to net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 35.0), + TNT_SNOW_MAN to net.minecraft.world.entity.animal.SnowGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0), + VAMPIRE_BAT to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 1.0), + VAMPIRE_BAT_BY_BOSS to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 3.0), + VENGEFUL_GHOST to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0), + VINDICATOR_BY_BOSS to net.minecraft.world.entity.monster.Vindicator.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 4.0), + WARPED_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), + WATCHER to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), + WEREWOLF to BedrockMob.createAttributes(CFG_WEREWOLF), + ZOMBIE_FISH to net.minecraft.world.entity.animal.AbstractFish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0), + ZOMBIE_SUMMONER to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) + ) + + @JvmStatic + val SPAWN_ENTRIES: List = listOf( + SpawnEntry(ASH_BLAZE, "MONSTER"), + SpawnEntry(ASH_PUFFERFISH, "WATER"), + SpawnEntry(BOMBER, "MONSTER"), + SpawnEntry(BROWN_BEAR, "MOB"), + SpawnEntry(CARNAGER, "MONSTER"), + SpawnEntry(CHEST_MONSTER, "MONSTER"), + SpawnEntry(CLAM, "WATER"), + SpawnEntry(CRAB, "WATER"), + SpawnEntry(CRIMSON_SLIME, "MONSTER"), + SpawnEntry(DARK_SNOW_MAN, "MOB"), + SpawnEntry(ENDER_SNAIL, "MONSTER"), + SpawnEntry(ENDER_SNAKE, "MONSTER"), + SpawnEntry(FROZEN_SPIDER, "MONSTER"), + SpawnEntry(GOBLIN, "MONSTER"), + SpawnEntry(ICE_ZOMBIE, "MONSTER"), + SpawnEntry(ILLUSIONER, "MONSTER"), + SpawnEntry(JUNGLE_SPIDER, "MONSTER"), + SpawnEntry(LAVA_LIZARD, "MONSTER"), + SpawnEntry(LIFE_INSECT, "MONSTER"), + SpawnEntry(MUMMY, "MONSTER"), + SpawnEntry(MUMMY_SKELETON, "MONSTER"), + SpawnEntry(MURLOC, "MONSTER"), + SpawnEntry(MUSHROOM_ZOMBIE, "MONSTER"), + SpawnEntry(MYSTICAL_SKELETON, "MONSTER"), + SpawnEntry(NAUTILUS, "WATER"), + SpawnEntry(NETHER_CREEPER, "MONSTER"), + SpawnEntry(NETHER_GOLEM, "MOB"), + SpawnEntry(NETHER_PHANTOM, "MONSTER"), + SpawnEntry(NETHER_SKELETON, "MONSTER"), + SpawnEntry(OBSIDIAN_GOLEM, "MOB"), + SpawnEntry(POLAR_WOLF, "MOB"), + SpawnEntry(PUMPKIN_SLIME, "MONSTER"), + SpawnEntry(RUMORER, "MONSTER"), + SpawnEntry(SARDINE, "WATER"), + SpawnEntry(SAUCER, "MONSTER"), + SpawnEntry(SEA_URCHIN, "WATER"), + SpawnEntry(SHADOW_OF_SEA, "WATER"), + SpawnEntry(SOUL_BLAZE, "MONSTER"), + SpawnEntry(SOUL_INSECT, "WATER"), + SpawnEntry(SOUL_SKELETON, "MONSTER"), + SpawnEntry(SOUL_ZOMBIE, "MONSTER"), + SpawnEntry(STAR, "MONSTER"), + SpawnEntry(STONE_GOLEM, "MOB"), + SpawnEntry(SWAMP_DROWNED, "WATER"), + SpawnEntry(SWAMP_GOLEM, "WATER"), + SpawnEntry(VAMPIRE_BAT, "MONSTER"), + SpawnEntry(WARPED_SKELETON, "MONSTER"), + SpawnEntry(WEREWOLF, "MONSTER"), + SpawnEntry(ZOMBIE_FISH, "WATER") + ) + + @JvmStatic + fun register(modEventBus: IEventBus) { + ENTITY_TYPES.register(modEventBus) + } + + @JvmStatic + fun registerAttributes(event: EntityAttributeCreationEvent) { + for ((type, builder) in ATTRIBUTE_ENTRIES) { + event.put(@Suppress("UNCHECKED_CAST") (type.get() as EntityType), builder.build()) + } + } + + @JvmStatic + fun registerSpawnPlacements(event: RegisterSpawnPlacementsEvent) { + for ((type, rule) in SPAWN_ENTRIES) { + if (rule == "MONSTER") { + val t = @Suppress("UNCHECKED_CAST") (type.get() as EntityType) + event.register(t, SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Monster::checkMonsterSpawnRules, RegisterSpawnPlacementsEvent.Operation.REPLACE) + } else { + val t = @Suppress("UNCHECKED_CAST") (type.get() as EntityType) + val placement = if (rule == "WATER") SpawnPlacementTypes.IN_WATER else SpawnPlacementTypes.ON_GROUND + event.register(t, placement, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Mob::checkMobSpawnRules, RegisterSpawnPlacementsEvent.Operation.REPLACE) + } + } + } +} diff --git a/src/main/java/com/dec/decisland/entity/GeneratedVanillaEntities.kt b/src/main/java/com/dec/decisland/entity/GeneratedVanillaEntities.kt new file mode 100644 index 0000000..ae28b1d --- /dev/null +++ b/src/main/java/com/dec/decisland/entity/GeneratedVanillaEntities.kt @@ -0,0 +1,386 @@ +package com.dec.decisland.entity + +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.ambient.Bat +import net.minecraft.world.entity.animal.Chicken +import net.minecraft.world.entity.animal.Cod +import net.minecraft.world.entity.animal.Cow +import net.minecraft.world.entity.animal.IronGolem +import net.minecraft.world.entity.animal.PolarBear +import net.minecraft.world.entity.animal.Salmon +import net.minecraft.world.entity.animal.SnowGolem +import net.minecraft.world.entity.animal.Wolf +import net.minecraft.world.entity.monster.Blaze +import net.minecraft.world.entity.monster.CaveSpider +import net.minecraft.world.entity.monster.Creeper +import net.minecraft.world.entity.monster.EnderMan +import net.minecraft.world.entity.monster.Evoker +import net.minecraft.world.entity.monster.Ghast +import net.minecraft.world.entity.monster.Guardian +import net.minecraft.world.entity.monster.Illusioner +import net.minecraft.world.entity.monster.Phantom +import net.minecraft.world.entity.monster.Pillager +import net.minecraft.world.entity.monster.Silverfish +import net.minecraft.world.entity.monster.Skeleton +import net.minecraft.world.entity.monster.Slime +import net.minecraft.world.entity.monster.Spider +import net.minecraft.world.entity.monster.Vex +import net.minecraft.world.entity.monster.Vindicator +import net.minecraft.world.entity.monster.Witch +import net.minecraft.world.entity.monster.WitherSkeleton +import net.minecraft.world.entity.monster.Zombie +import net.minecraft.world.entity.npc.Villager +import net.minecraft.world.level.Level + +// 由 tools/entity_port/generate.mjs 生成:基岩版原版基类生物(原版 AI + 自定义贴图) + +class AngryChicken(entityType: EntityType, level: Level) : Chicken(entityType, level) { +} + +class Archer(entityType: EntityType, level: Level) : Pillager(entityType, level) { +} + +class AshBlaze(entityType: EntityType, level: Level) : Blaze(entityType, level) { + override fun fireImmune() = true +} + +class AshPufferfish(entityType: EntityType, level: Level) : Cod(entityType, level) { +} + +class BabyEnderDragon(entityType: EntityType, level: Level) : Skeleton(entityType, level) { + override fun fireImmune() = true +} + +class BatCharger(entityType: EntityType, level: Level) : Bat(entityType, level) { +} + +class BloodZombie(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class Bomber(entityType: EntityType, level: Level) : Zombie(entityType, level) { + override fun fireImmune() = true +} + +class BrownBear(entityType: EntityType, level: Level) : PolarBear(entityType, level) { +} + +class Carnager(entityType: EntityType, level: Level) : Vindicator(entityType, level) { +} + +class CrimsonSlime(entityType: EntityType, level: Level) : Slime(entityType, level) { +} + +class DarkSnowMan(entityType: EntityType, level: Level) : SnowGolem(entityType, level) { +} + +class Doctor(entityType: EntityType, level: Level) : Villager(entityType, level) { +} + +class ElfOfAsh(entityType: EntityType, level: Level) : Vex(entityType, level) { + override fun fireImmune() = true +} + +class ElfOfChaos(entityType: EntityType, level: Level) : IronGolem(entityType, level) { + override fun fireImmune() = true +} + +class ElfOfDeep(entityType: EntityType, level: Level) : Vex(entityType, level) { + override fun fireImmune() = true +} + +class ElfOfDust(entityType: EntityType, level: Level) : Vex(entityType, level) { + override fun fireImmune() = true +} + +class EnchantArmor(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class EnchantArmorByBoss(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class EnchantDiamondArmor(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class EnchantIllager(entityType: EntityType, level: Level) : Evoker(entityType, level) { +} + +class EnchantIllager1(entityType: EntityType, level: Level) : Evoker(entityType, level) { +} + +class EnchantIllager2(entityType: EntityType, level: Level) : Vindicator(entityType, level) { +} + +class EndStoneGolem(entityType: EntityType, level: Level) : IronGolem(entityType, level) { + override fun fireImmune() = true +} + +class EnderWitch(entityType: EntityType, level: Level) : Witch(entityType, level) { +} + +class EnderWitchPuppet(entityType: EntityType, level: Level) : Witch(entityType, level) { +} + +class EverlastingWinterGhast1(entityType: EntityType, level: Level) : Ghast(entityType, level) { + override fun fireImmune() = true +} + +class EvilSnowMan(entityType: EntityType, level: Level) : SnowGolem(entityType, level) { +} + +class FireStorm(entityType: EntityType, level: Level) : Blaze(entityType, level) { + override fun fireImmune() = true +} + +class FriendlySpider(entityType: EntityType, level: Level) : Spider(entityType, level) { +} + +class FrozenGhast(entityType: EntityType, level: Level) : Ghast(entityType, level) { + override fun fireImmune() = true +} + +class FrozenMan(entityType: EntityType, level: Level) : SnowGolem(entityType, level) { +} + +class FrozenSpider(entityType: EntityType, level: Level) : Spider(entityType, level) { +} + +class Gargoyle(entityType: EntityType, level: Level) : Bat(entityType, level) { +} + +class GingerbreadManByTotem(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class IceBat(entityType: EntityType, level: Level) : Bat(entityType, level) { +} + +class IceBlaze(entityType: EntityType, level: Level) : Blaze(entityType, level) { + override fun fireImmune() = true +} + +class IceCreeper(entityType: EntityType, level: Level) : Creeper(entityType, level) { + override fun fireImmune() = true +} + +class IceZombie(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class IllusionZombie(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class Illusioner(entityType: EntityType, level: Level) : net.minecraft.world.entity.monster.Illusioner(entityType, level) { +} + +class IllusionerPuppet(entityType: EntityType, level: Level) : Illusioner(entityType, level) { +} + +class JungleSpider(entityType: EntityType, level: Level) : CaveSpider(entityType, level) { +} + +class KingOfPillager(entityType: EntityType, level: Level) : Pillager(entityType, level) { + override fun fireImmune() = true +} + +class LifeInsect(entityType: EntityType, level: Level) : Silverfish(entityType, level) { + override fun fireImmune() = true +} + +class LittleBat(entityType: EntityType, level: Level) : Bat(entityType, level) { +} + +class LurkSkeleton(entityType: EntityType, level: Level) : Skeleton(entityType, level) { +} + +class LurkZombie(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class Mummy(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class MummySkeleton(entityType: EntityType, level: Level) : Skeleton(entityType, level) { +} + +class Murloc(entityType: EntityType, level: Level) : Guardian(entityType, level) { +} + +class MushroomZombie(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class MysticalSkeleton(entityType: EntityType, level: Level) : Skeleton(entityType, level) { +} + +class NetherCreeper(entityType: EntityType, level: Level) : Creeper(entityType, level) { + override fun fireImmune() = true +} + +class NetherGolem(entityType: EntityType, level: Level) : IronGolem(entityType, level) { + override fun fireImmune() = true +} + +class NetherPhantom(entityType: EntityType, level: Level) : Phantom(entityType, level) { +} + +class NetherSkeleton(entityType: EntityType, level: Level) : WitherSkeleton(entityType, level) { + override fun fireImmune() = true +} + +class NetherSkeletonWizard(entityType: EntityType, level: Level) : Skeleton(entityType, level) { +} + +class ObsidianGolem(entityType: EntityType, level: Level) : IronGolem(entityType, level) { + override fun fireImmune() = true +} + +class PillagerByBoss(entityType: EntityType, level: Level) : Pillager(entityType, level) { +} + +class Pirate(entityType: EntityType, level: Level) : Pillager(entityType, level) { +} + +class PlayerGhost(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class PolarWolf(entityType: EntityType, level: Level) : Wolf(entityType, level) { +} + +class Predators(entityType: EntityType, level: Level) : Bat(entityType, level) { + override fun fireImmune() = true +} + +class PumpkinSlime(entityType: EntityType, level: Level) : Slime(entityType, level) { +} + +class RadiateCreeper(entityType: EntityType, level: Level) : Creeper(entityType, level) { + override fun fireImmune() = true +} + +class RadiateEnderman(entityType: EntityType, level: Level) : EnderMan(entityType, level) { +} + +class RadiateSkeleton(entityType: EntityType, level: Level) : Skeleton(entityType, level) { + override fun fireImmune() = true +} + +class RadiateSpider(entityType: EntityType, level: Level) : CaveSpider(entityType, level) { +} + +class RealSoul(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class Rumorer(entityType: EntityType, level: Level) : Cow(entityType, level) { +} + +class Sardine(entityType: EntityType, level: Level) : Cod(entityType, level) { +} + +class ShadowArcher(entityType: EntityType, level: Level) : Skeleton(entityType, level) { +} + +class ShadowCreeper(entityType: EntityType, level: Level) : Creeper(entityType, level) { +} + +class ShadowOfSea(entityType: EntityType, level: Level) : Phantom(entityType, level) { +} + +class ShadowSkeleton(entityType: EntityType, level: Level) : Skeleton(entityType, level) { +} + +class ShadowSkeletonPuppet(entityType: EntityType, level: Level) : Skeleton(entityType, level) { +} + +class ShadowZombie(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class ShadowZombiePuppet(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class SimpleGlider(entityType: EntityType, level: Level) : Chicken(entityType, level) { +} + +class SkeletonAssassin(entityType: EntityType, level: Level) : Skeleton(entityType, level) { +} + +class SkeletonKnight(entityType: EntityType, level: Level) : Skeleton(entityType, level) { +} + +class SkeletonKnightCommander(entityType: EntityType, level: Level) : Skeleton(entityType, level) { +} + +class SkeletonWarrior(entityType: EntityType, level: Level) : Skeleton(entityType, level) { + override fun fireImmune() = true +} + +class SkeletonWizard(entityType: EntityType, level: Level) : Skeleton(entityType, level) { +} + +class Soldier(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class SonOfChaos(entityType: EntityType, level: Level) : IronGolem(entityType, level) { +} + +class SonOfNature(entityType: EntityType, level: Level) : IronGolem(entityType, level) { +} + +class Soul(entityType: EntityType, level: Level) : Vex(entityType, level) { + override fun fireImmune() = true +} + +class SoulBlaze(entityType: EntityType, level: Level) : Blaze(entityType, level) { + override fun fireImmune() = true +} + +class SoulInsect(entityType: EntityType, level: Level) : Silverfish(entityType, level) { + override fun fireImmune() = true +} + +class SoulSkeleton(entityType: EntityType, level: Level) : Skeleton(entityType, level) { +} + +class SoulZombie(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class Star(entityType: EntityType, level: Level) : Blaze(entityType, level) { + override fun fireImmune() = true +} + +class StoneGolem(entityType: EntityType, level: Level) : IronGolem(entityType, level) { +} + +class SwampDrowned(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class SwampGolem(entityType: EntityType, level: Level) : IronGolem(entityType, level) { + override fun fireImmune() = true +} + +class TntCreeper(entityType: EntityType, level: Level) : Creeper(entityType, level) { + override fun fireImmune() = true +} + +class TntSnowMan(entityType: EntityType, level: Level) : SnowGolem(entityType, level) { +} + +class VampireBat(entityType: EntityType, level: Level) : Bat(entityType, level) { +} + +class VampireBatByBoss(entityType: EntityType, level: Level) : Bat(entityType, level) { +} + +class VengefulGhost(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class VindicatorByBoss(entityType: EntityType, level: Level) : Vindicator(entityType, level) { +} + +class WarpedSkeleton(entityType: EntityType, level: Level) : Skeleton(entityType, level) { + override fun fireImmune() = true +} + +class Watcher(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} + +class ZombieFish(entityType: EntityType, level: Level) : Salmon(entityType, level) { +} + +class ZombieSummoner(entityType: EntityType, level: Level) : Zombie(entityType, level) { +} diff --git a/src/main/java/com/dec/decisland/entity/custom/BedrockMob.kt b/src/main/java/com/dec/decisland/entity/custom/BedrockMob.kt new file mode 100644 index 0000000..d57dfae --- /dev/null +++ b/src/main/java/com/dec/decisland/entity/custom/BedrockMob.kt @@ -0,0 +1,148 @@ +package com.dec.decisland.entity.custom + +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.LivingEntity +import net.minecraft.world.entity.ai.attributes.AttributeSupplier +import net.minecraft.world.entity.ai.attributes.Attributes +import net.minecraft.world.entity.ai.control.SmoothSwimmingMoveControl +import net.minecraft.world.entity.ai.goal.FloatGoal +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal +import net.minecraft.world.entity.ai.goal.PanicGoal +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal +import net.minecraft.world.entity.ai.goal.RandomSwimmingGoal +import net.minecraft.world.entity.ai.goal.RangedAttackGoal +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal +import net.minecraft.world.entity.ai.navigation.WaterBoundPathNavigation +import net.minecraft.world.entity.animal.IronGolem +import net.minecraft.world.entity.animal.SnowGolem +import net.minecraft.world.entity.monster.Monster +import net.minecraft.world.entity.monster.RangedAttackMob +import net.minecraft.world.entity.npc.AbstractVillager +import net.minecraft.world.entity.player.Player +import net.minecraft.world.entity.projectile.Projectile +import net.minecraft.world.level.Level +import net.minecraft.world.level.pathfinder.PathType +import java.util.function.Supplier +import kotlin.math.sqrt + +/** + * 基岩版生物的通用数据驱动基类(移植自基岩版行为包)。 + * + * 属性与 AI 均由 [MobConfig] 数据驱动: + * - 近战:MeleeAttackGoal + * - 远程:RangedAttackGoal + 已移植的模组弹射物 + * - 目标:玩家 / 村民 / 铁傀儡 / 雪傀儡 + * - 水生:WaterBoundPathNavigation + RandomSwimmingGoal + * - 火焰免疫:覆写 fireImmune() + * - 水下呼吸 / 亡灵分类:由 entity_type 标签数据驱动(can_breathe_under_water / undead 等) + */ +open class BedrockMob( + entityType: EntityType, + level: Level, + private val cfg: MobConfig, +) : Monster(entityType, level), RangedAttackMob { + + init { + xpReward = cfg.xp + if (cfg.water) { + setPathfindingMalus(PathType.WATER, 0.0f) + moveControl = SmoothSwimmingMoveControl(this, 85, 10, 0.5f, 0.1f, true) + navigation = WaterBoundPathNavigation(this, level) + } + } + + override fun fireImmune(): Boolean = cfg.fireImmune || super.fireImmune() + + override fun registerGoals() { + cfg.buildGoals(this) + } + + /** 远程攻击:发射配置的模组弹射物(未配置时静默忽略) */ + override fun performRangedAttack(target: LivingEntity, velocity: Float) { + val entityType = cfg.rangedProjectile?.get() ?: return + val projectile = entityType.create(level()) as? Projectile ?: return + val eyeX = target.x - x + val eyeY = target.getBoundingBox().minY + target.getBbHeight() / 2.0 - (y + getEyeHeight()) + val eyeZ = target.z - z + val horizontal = sqrt(eyeX * eyeX + eyeZ * eyeZ) + val lift = if (horizontal > 2.0) horizontal.toFloat() / 24.0f else 0.0f + projectile.setPos(x, y + getEyeHeight(), z) + projectile.owner = this + projectile.shoot(eyeX, eyeY + lift, eyeZ, 1.1f, 2.0f) + level().addFreshEntity(projectile) + } + + companion object { + @JvmStatic + fun createAttributes(cfg: MobConfig): AttributeSupplier.Builder = + Monster.createMonsterAttributes() + .add(Attributes.MAX_HEALTH, cfg.health) + .add(Attributes.MOVEMENT_SPEED, cfg.speed) + .add(Attributes.ATTACK_DAMAGE, cfg.attackDamage) + .add(Attributes.FOLLOW_RANGE, cfg.followRange) + .add(Attributes.KNOCKBACK_RESISTANCE, cfg.knockbackResistance) + .add(Attributes.ARMOR, cfg.armor) + } +} + +/** + * 基岩版生物 AI/属性配置(由生成器从行为包 JSON 数据化)。 + */ +class MobConfig( + val name: String, + val health: Double = 20.0, + val speed: Double = 0.25, + val attackDamage: Double = 3.0, + val followRange: Double = 32.0, + val knockbackResistance: Double = 0.0, + val armor: Double = 0.0, + val xp: Int = 5, + val fireImmune: Boolean = false, + val undead: Boolean = false, + val water: Boolean = false, + val friendly: Boolean = false, + val melee: Boolean = true, + val rangedProjectile: Supplier>? = null, + val rangedInterval: Int = 40, + val targets: List = emptyList(), +) { + fun buildGoals(mob: Monster) { + val goals = mob.goalSelector + goals.addGoal(0, FloatGoal(mob)) + if (friendly) { + goals.addGoal(1, PanicGoal(mob, 1.3)) + } + val attackSpeed = if (water) 1.0 else 1.15 + if (rangedProjectile != null) { + goals.addGoal(2, RangedAttackGoal(mob as RangedAttackMob, attackSpeed, rangedInterval, 15.0f)) + } else if (!friendly && melee) { + goals.addGoal(2, MeleeAttackGoal(mob, attackSpeed, true)) + } + if (water) { + goals.addGoal(5, RandomSwimmingGoal(mob, 1.0, 40)) + } else { + goals.addGoal(5, WaterAvoidingRandomStrollGoal(mob, 1.0)) + } + goals.addGoal(6, LookAtPlayerGoal(mob, Player::class.java, 8.0f)) + goals.addGoal(7, RandomLookAroundGoal(mob)) + + if (friendly) return + val targetGoals = mob.targetSelector + targetGoals.addGoal(1, HurtByTargetGoal(mob)) + if ("player" in targets) { + targetGoals.addGoal(2, NearestAttackableTargetGoal(mob, Player::class.java, true)) + } + if ("villager" in targets) { + targetGoals.addGoal(3, NearestAttackableTargetGoal(mob, AbstractVillager::class.java, false)) + } + if ("iron_golem" in targets) { + targetGoals.addGoal(3, NearestAttackableTargetGoal(mob, IronGolem::class.java, false)) + } + if ("snow_golem" in targets) { + targetGoals.addGoal(3, NearestAttackableTargetGoal(mob, SnowGolem::class.java, false)) + } + } +} diff --git a/src/main/java/com/dec/decisland/events/ModClientEvents.kt b/src/main/java/com/dec/decisland/events/ModClientEvents.kt index 6a6fc25..b0d820a 100644 --- a/src/main/java/com/dec/decisland/events/ModClientEvents.kt +++ b/src/main/java/com/dec/decisland/events/ModClientEvents.kt @@ -9,6 +9,7 @@ import com.dec.decisland.client.renderer.DartRenderer import com.dec.decisland.client.renderer.ElfOfLeavesRenderer import com.dec.decisland.client.renderer.EmptyRenderer import com.dec.decisland.client.renderer.EnergyBallBedrockRenderer +import com.dec.decisland.client.renderer.GeneratedMobClient import com.dec.decisland.client.renderer.FashionArmorClientItemExtensions import com.dec.decisland.client.renderer.LeavesGolemRenderer import com.dec.decisland.client.renderer.MaskClientItemExtensions @@ -152,6 +153,7 @@ object ModClientEvents { EntityRenderers.register(ModEntities.BULLET_BY_LAVA_FLINTLOCK.get(), ::ThrownItemRenderer) EntityRenderers.register(ModEntities.BULLET_BY_STAR_FLINTLOCK.get(), ::ThrownItemRenderer) EntityRenderers.register(ModEntities.BULLET_BY_STORM_FLINTLOCK.get(), ::ThrownItemRenderer) + GeneratedMobClient.registerAll() } @SubscribeEvent diff --git a/src/main/java/com/dec/decisland/events/ModEventBusEvents.kt b/src/main/java/com/dec/decisland/events/ModEventBusEvents.kt index 4d4ddec..2f42446 100644 --- a/src/main/java/com/dec/decisland/events/ModEventBusEvents.kt +++ b/src/main/java/com/dec/decisland/events/ModEventBusEvents.kt @@ -4,6 +4,7 @@ import com.dec.decisland.DecIsland import com.dec.decisland.client.model.ClothesModel import com.dec.decisland.client.model.EmptyModel import com.dec.decisland.client.model.FashionArmorModel +import com.dec.decisland.entity.GeneratedMobs import com.dec.decisland.entity.ModEntities import com.dec.decisland.entity.custom.ElfOfLeaves import com.dec.decisland.entity.custom.LeavesGolem @@ -43,6 +44,7 @@ object ModEventBusEvents { event.put(ModEntities.ZOMBIE_WARRIOR.get(), ZombieWarrior.createWarriorAttributes().build()) event.put(ModEntities.LEAVES_GOLEM.get(), LeavesGolem.createGolemAttributes().build()) event.put(ModEntities.ELF_OF_LEAVES.get(), ElfOfLeaves.createElfAttributes().build()) + GeneratedMobs.registerAttributes(event) } @SubscribeEvent @@ -55,6 +57,7 @@ object ModEventBusEvents { Monster::checkMonsterSpawnRules, RegisterSpawnPlacementsEvent.Operation.REPLACE, ) + GeneratedMobs.registerSpawnPlacements(event) } @SubscribeEvent diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/abyssal_controller.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/abyssal_controller.animation.json new file mode 100644 index 0000000..37cc40e --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/abyssal_controller.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":6.24,"bones":{"rightArm":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"3.12":{"post":[0,0,7.5],"lerp_mode":"catmullrom"},"6.24":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"leftArm":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"3.12":{"post":[0,0,-7.5],"lerp_mode":"catmullrom"},"6.24":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"rightLeg":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"3.12":{"post":[0,0,5],"lerp_mode":"catmullrom"},"6.24":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"leftLeg":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"3.12":{"post":[0,0,-5],"lerp_mode":"catmullrom"},"6.24":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":6.24,"bones":{"rightArm":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"3.12":{"post":[0,0,7.5],"lerp_mode":"catmullrom"},"6.24":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"leftArm":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"3.12":{"post":[0,0,-7.5],"lerp_mode":"catmullrom"},"6.24":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"rightLeg":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"3.12":{"post":[0,0,5],"lerp_mode":"catmullrom"},"6.24":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"leftLeg":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"3.12":{"post":[0,0,-5],"lerp_mode":"catmullrom"},"6.24":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/abyssal_shadow.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/abyssal_shadow.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/abyssal_shadow.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ash_bomb.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_bomb.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_bomb.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ash_horse.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_horse.animation.json new file mode 100644 index 0000000..69810ad --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_horse.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":"hold_on_last_frame","animation_length":1.83333,"bones":{"waist":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Body":{"rotation":{"0.0":[0,0,0],"0.25":[-40,0,0],"1.5":[-45,0,0],"1.7083":[5,0,0],"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0,0],"1.5":[0,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"1.5":[1,1,1],"1.7083":[1,1,1],"1.8333":[1,1,1]}},"heart":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Tail":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"TailA":{"rotation":{"0.0":[0,0,0],"0.25":[0,0,0],"0.875":[0,0,0],"1.5":[0,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0,0],"0.875":[0,0,0],"1.5":[0,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":[1,1,1],"1.8333":[1,1,1]}},"TailB":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"TailC":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Head":{"rotation":{"0.0":[0,0,0],"0.25":[25,0,0],"0.4583":[0,0,0],"0.75":[0.02363,2.16489,-6.2494],"1.1667":[-0.13019,-0.61958,4.9663],"1.5":[0,0,0],"1.7083":{"pre":[0,0,0],"post":[0,0,0],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,-1.3875,0],"0.4583":[0,0,0],"1.5":[0,0,0],"1.7083":{"pre":[0,0,0],"post":[0,0,0],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.4583":[1,1,1],"1.5":[1,1,1],"1.7083":{"pre":[1,1,1],"post":[1,1,1],"lerp_mode":"catmullrom"},"1.8333":[1,1,1]}},"Ear":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Neck":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Saddle":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"bag":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Leg1":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Leg1A":{"rotation":{"0.0":[0,0,0],"0.25":[12.5,0,0],"0.875":[12.5,0,0],"1.5":[12.5,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0,0],"0.875":[0,0,0],"1.5":[0,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":[1,1,1],"1.8333":[1,1,1]}},"Leg1B":{"rotation":{"0.0":[0,0,0],"0.25":[-37.5,0,0],"0.875":[-37.5,0,0],"1.5":[-37.5,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0,0],"0.875":[0,0,0],"1.5":[0,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":[1,1,1],"1.8333":[1,1,1]}},"Leg1C":{"rotation":{"0.0":[0,0,0],"0.25":[22.5,0,0],"0.875":[22.5,0,0],"1.5":[22.5,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0,0],"0.875":[0,0,0],"1.5":[0,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":[1,1,1],"1.8333":[1,1,1]}},"Leg2":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Leg2A":{"rotation":{"0.0":[0,0,0],"0.25":[17.5,0,0],"0.875":[17.5,0,0],"1.5":[17.5,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0,0],"0.875":[0,0,0],"1.5":[0,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":[1,1,1],"1.8333":[1,1,1]}},"Leg2B":{"rotation":{"0.0":[0,0,0],"0.25":[-50,0,0],"0.875":[-50,0,0],"1.5":[-50,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0,0],"0.875":[0,0,0],"1.5":[0,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":[1,1,1],"1.8333":[1,1,1]}},"Leg2C":{"rotation":{"0.0":[0,0,0],"0.25":[30,0,0],"0.875":[30,0,0],"1.5":[30,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0,0],"0.875":[0,0,0],"1.5":[0,0,0],"1.7083":[0,0,0],"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":[1,1,1],"1.8333":[1,1,1]}},"Leg3":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Leg3A":{"rotation":{"0.0":[0,0,0],"0.25":[-117.5,0,0],"0.375":[-115,0,0],"0.5":[-80.62,0,0],"0.625":[-122.91,0,0],"0.75":[-155.2,0,0],"0.875":[-117.5,0,0],"1.0":[-115,0,0],"1.125":[-80.62,0,0],"1.25":[-122.91,0,0],"1.375":[-155.2,0,0],"1.5":[-117.5,0,0],"1.7083":{"pre":[-7.48196,-0.51861,-0.01969],"post":[-7.48196,-0.51861,-0.01969],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,10.925,4.6125],"0.875":[0,10.925,4.6125],"1.5":[0,10.75,5.8625],"1.7083":{"pre":[0,0,0],"post":[0,0,0],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":{"pre":[1,1,1],"post":[1,1,1],"lerp_mode":"catmullrom"},"1.8333":[1,1,1]}},"Leg3B":{"rotation":{"0.0":[0,0,0],"0.25":[30,0,0],"0.375":[10,0,0],"0.5":[75,0,0],"0.625":[107.5,0,0],"0.75":[138.75,0,0],"0.875":[30,0,0],"1.0":[10,0,0],"1.125":[75,0,0],"1.25":[107.5,0,0],"1.375":[138.75,0,0],"1.5":[30,0,0],"1.7083":{"pre":[15,0,0],"post":[15,0,0],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0,0],"0.875":[0,0,0],"1.5":[0,0,0],"1.7083":{"pre":[0,0,0],"post":[0,0,0],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":{"pre":[1,1,1],"post":[1,1,1],"lerp_mode":"catmullrom"},"1.8333":[1,1,1]}},"Leg3C":{"rotation":{"0.0":[0,0,0],"0.25":[-5,0,0],"0.375":[-7.5,0,0],"0.5":[35.63,0,0],"0.625":[34.59,0,0],"0.75":[19.8,0,0],"0.875":[-5,0,0],"1.0":[-7.5,0,0],"1.125":[35.63,0,0],"1.25":[34.59,0,0],"1.375":[19.8,0,0],"1.5":[-5,0,0],"1.7083":{"pre":[-5,0,0],"post":[-5,0,0],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0,0],"0.875":[0,0,0],"1.5":[0,0,0],"1.7083":{"pre":[0,0,0],"post":[0,0,0],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":{"pre":[1,1,1],"post":[1,1,1],"lerp_mode":"catmullrom"},"1.8333":[1,1,1]}},"Leg4":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Leg4A":{"rotation":{"0.0":[0,0,0],"0.25":[-110,0,0],"0.375":[-139,0,0],"0.5":[-137.5,0,0],"0.625":[-99.19807,-2.30926,6.27742],"0.75":[-62.09904,-1.15463,3.13871],"0.875":[-110,0,0],"1.0":[-139,0,0],"1.125":[-137.5,0,0],"1.25":[-99.19807,-2.30926,6.27742],"1.375":[-62.09904,-1.15463,3.13871],"1.5":[-110,0,0],"1.7083":{"pre":[-7.5,0,0],"post":[-7.5,0,0],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,11,5],"0.875":[0,11,5],"1.5":[0,11,6.225],"1.7083":{"pre":[0,0,0],"post":[0,0,0],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":{"pre":[1,1,1],"post":[1,1,1],"lerp_mode":"catmullrom"},"1.8333":[1,1,1]}},"Leg4B":{"rotation":{"0.0":[0,0,0],"0.25":[97.5,0,0],"0.375":[123.5,0,0],"0.5":[20,0,0],"0.625":[5.83,0,0],"0.75":[106.67,0,0],"0.875":[97.5,0,0],"1.0":[123.5,0,0],"1.125":[20,0,0],"1.25":[5.83,0,0],"1.375":[106.67,0,0],"1.5":[97.5,0,0],"1.7083":{"pre":[20,0,0],"post":[20,0,0],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0,0],"0.875":[0,0,0],"1.5":[0,0,0],"1.7083":{"pre":[0,0,0],"post":[0,0,0],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":{"pre":[1,1,1],"post":[1,1,1],"lerp_mode":"catmullrom"},"1.8333":[1,1,1]}},"Leg4C":{"rotation":{"0.0":[0,0,0],"0.25":[22.5,0,0],"0.375":[31.5,0,0],"0.5":[-12.5,0,0],"0.625":[-8.33,0,0],"0.75":[22.08,0,0],"0.875":[22.5,0,0],"1.0":[31.5,0,0],"1.125":[-12.5,0,0],"1.25":[-8.33,0,0],"1.375":[22.08,0,0],"1.5":[22.5,0,0],"1.7083":{"pre":[-12.45844,0.47264,0.95416],"post":[-12.45844,0.47264,0.95416],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0,0],"0.875":[0,0,0],"1.5":[0,0,0],"1.7083":{"pre":[0,0,0],"post":[0,0,0],"lerp_mode":"catmullrom"},"1.8333":[0,0,0]},"scale":{"0.0":[1,1,1],"0.25":[1,1,1],"0.875":[1,1,1],"1.5":[1,1,1],"1.7083":{"pre":[1,1,1],"post":[1,1,1],"lerp_mode":"catmullrom"},"1.8333":[1,1,1]}}}},"walk":{"loop":true,"animation_length":1.41667,"bones":{"waist":{"rotation":{"0.0":[0,0,0],"1.4167":[0,0,0]},"position":{"0.0":[0,-1,0],"0.25":[0,-0.75,0],"0.4167":[0,-0.09,0],"0.75":[0,-1.09,0],"1.125":[0,0.1725,0],"1.4167":[0,-1,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Body":{"rotation":{"0.0":[0,0,0],"0.25":[2.49762,0.10901,-2.49762],"0.7083":[0,0,0],"0.9583":[2.49762,-0.10901,2.49762],"1.4167":[0,0,0]},"position":{"0.0":[0,0,0],"0.25":[0,0.4125,0],"0.7083":[0,0,0],"0.9583":[0,0.4125,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"heart":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Tail":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"TailA":{"rotation":{"0.0":[0,-30,0],"0.7083":[0,17.5,0],"1.4167":[0,-30,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"TailB":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"TailC":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Head":{"rotation":{"0.0":[0,0,0],"0.4167":[-7.5,0,0],"0.75":[0,0,0],"1.125":[-7.5,0,0],"1.4167":[0,0,0]},"position":{"0.0":[0,0,0],"0.4167":[0,0.825,0],"0.75":[0,0,0],"1.125":[0,0.825,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Ear":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Saddle":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"bag":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Leg1":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Leg1A":{"rotation":{"0.0":[32.5,0,0],"0.2083":[42.5,0,0],"0.4583":[0,0,0],"0.7083":[-20,0,0],"0.9583":[7.5,0,0],"1.2083":[25,0,0],"1.4167":[32.5,0,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Leg1B":{"rotation":{"0.0":[-25,0,0],"0.2083":[-50,0,0],"0.4583":[-65,0,0],"0.7083":[-17.5,0,0],"0.9583":[-45,0,0],"1.2083":[-42.5,0,0],"1.4167":[-25,0,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Leg1C":{"rotation":{"0.0":[2.5,0,0],"0.2083":[10,0,0],"0.4583":[-10,0,0],"0.7083":[35,0,0],"0.9583":[37.5,0,0],"1.2083":[27.5,0,0],"1.4167":[2.5,0,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Leg2":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Leg2A":{"rotation":{"0.0":[-12.5,0,0],"0.2083":[2.5,0,0],"0.4583":[10,0,0],"0.7083":[47.5,0,0],"0.9583":[55,0,0],"1.2083":[-10,0,0],"1.4167":[-12.5,0,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Leg2B":{"rotation":{"0.0":[-22.5,0,0],"0.2083":[-40,0,0],"0.4583":[-40,0,0],"0.7083":[-40,0,0],"0.9583":[-47.5,0,0],"1.2083":[-50,0,0],"1.4167":[-22.5,0,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Leg2C":{"rotation":{"0.0":[35,0,0],"0.2083":[37.5,0,0],"0.4583":[27.5,0,0],"0.7083":[10,0,0],"0.9583":[0,0,0],"1.2083":[22.5,0,0],"1.4167":[35,0,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Leg3":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Leg3A":{"rotation":{"0.0":[-35.83,0,0],"0.2083":[-25.83,0,0],"0.4167":[-1.66,0,0],"0.6667":[12.65,0,0],"0.9167":[-9.85,0,0],"1.1667":[-52.35,0,0],"1.4167":[-35.83,0,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Leg3B":{"rotation":{"0.0":[-7.08,0,0],"0.2083":[10.42,0,0],"0.4167":[2.09,0,0],"0.6667":[26.81,0,0],"0.9167":[61.81,0,0],"1.1667":[74.31,0,0],"1.4167":[0.42,0,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Leg3C":{"rotation":{"0.0":[-15.42,0,0],"0.2083":[14.58,0,0],"0.4167":[-2.09,0,0],"0.6667":[29.86,0,0],"0.9167":[17.36,0,0],"1.1667":[32.36,0,0],"1.4167":[-5.42,0,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Leg4":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"Leg4A":{"rotation":{"0.0":[10,0,0],"0.2083":[-20,0,0],"0.4167":[-24.61,0,0],"0.6667":[-37.63,0,0],"0.9167":[-27.63,0,0],"1.1667":[-2.63,0,0],"1.4167":[10,0,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Leg4B":{"rotation":{"0.0":[29.58,0,0],"0.2083":[82.08,0,0],"0.4167":[63.26,0,0],"0.6667":[3.83,0,0],"0.9167":[1.33,0,0],"1.1667":[6.33,0,0],"1.4167":[29.58,0,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}},"Leg4C":{"rotation":{"0.0":[37.5,0,0],"0.2083":[7.5,0,0],"0.4167":[15.39,0,0],"0.6667":[-5.13,0,0],"0.9167":[27.37,0,0],"1.1667":[-2.63,0,0],"1.4167":[37.5,0,0]},"position":{"0.0":[0,0,0],"1.4167":[0,0,0]},"scale":{"0.0":[1,1,1],"1.4167":[1,1,1]}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ash_horse_head.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_horse_head.animation.json new file mode 100644 index 0000000..63e5583 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_horse_head.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":1,"bones":{"UMouth":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[-17.5,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"main":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[12.5,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"LMouthWithSaddle":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[55,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":1,"bones":{"UMouth":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[-17.5,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"main":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[12.5,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"LMouthWithSaddle":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[55,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ash_knight.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_knight.animation.json new file mode 100644 index 0000000..8117d59 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_knight.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"walk":{"loop":true,"animation_length":1,"bones":{"body":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"main":{"rotation":{"0.0":[0,7.5,0],"0.5":[0,-10,0],"1.0":[0,7.5,0]},"position":{"0.0":[0,-0.4375,0],"0.25":[0,0.5225,0],"0.5":[0,-0.4375,0],"0.75":[0,0.5225,0],"1.0":[0,-0.4375,0]},"scale":{"0.0":[1,1,1],"1.0":[1,1,1]}},"heart":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"head":{"rotation":[0,0,0],"position":[0,0,0],"scale":1},"rightArm":{"rotation":{"0.0":[40.25542,0.60096,7.0411],"0.5":[-27.21819,-2.70264,11.5503],"1.0":[40.25542,0.60096,7.0411]},"position":{"0.0":[0,0,0],"1.0":[0,0,0]},"scale":{"0.0":[1,1,1],"1.0":[1,1,1]}},"leftArm":{"rotation":{"0.0":[-39.27612,-0.61165,-12.4623],"0.5":[36.07748,7.49581,-6.59277],"1.0":[-39.27612,-0.61165,-12.4623]},"position":{"0.0":[0,0,0],"1.0":[0,0,0]},"scale":{"0.0":[1,1,1],"1.0":[1,1,1]}},"rightLeg":{"rotation":{"0.0":[-25,0,0],"0.5":{"pre":[27.5,0,0],"post":[27.5,0,0],"lerp_mode":"catmullrom"},"1.0":[-25,0,0]},"position":{"0.0":[0,0.6875,-0.8375],"0.1667":{"pre":[0,-0.06,-0.5],"post":[0,-0.06,-0.5],"lerp_mode":"catmullrom"},"0.2917":{"post":[0,0.69,-0.2525],"lerp_mode":"catmullrom"},"0.5":{"post":[0,0.69,1.28],"lerp_mode":"catmullrom"},"0.7917":{"post":[0,0.14,0.04],"lerp_mode":"catmullrom"},"1.0":[0,0.6875,-0.8375]},"scale":{"0.0":[1,1,1],"1.0":[1,1,1]}},"leftLeg":{"rotation":{"0.0":[25,0,0],"0.5":{"pre":[-25,0,0],"post":[-25,0,0],"lerp_mode":"catmullrom"},"1.0":[25,0,0]},"position":{"0.0":[0,0.5,1.125],"0.1667":{"pre":[0,-0.0075,-0.07],"post":[0,-0.0075,-0.07],"lerp_mode":"catmullrom"},"0.2917":{"post":[0,0.6375,-0.975],"lerp_mode":"catmullrom"},"0.5":{"post":[0,-0.125,-0.69],"lerp_mode":"catmullrom"},"0.7917":{"post":[0,-0.05,1.6475],"lerp_mode":"catmullrom"},"1.0":[0,0.5,1.125]},"scale":{"0.0":[1,1,1],"1.0":[1,1,1]}}}},"idle":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ash_knight_head.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_knight_head.animation.json new file mode 100644 index 0000000..4eae28e --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_knight_head.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":1,"bones":{"main":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[0,4,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":1,"bones":{"main":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[0,4,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ash_sword.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_sword.animation.json new file mode 100644 index 0000000..9bad827 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_sword.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":2,"bones":{"main":{"rotation":{"0.0":[-30,30,0],"0.5":[30,30,0],"1.0":[30,-30,0],"1.5":[-30,-30,0],"2.0":[-30,30,0]}}}},"walk":{"loop":true,"animation_length":2,"bones":{"main":{"rotation":{"0.0":[-30,30,0],"0.5":[30,30,0],"1.0":[30,-30,0],"1.5":[-30,-30,0],"2.0":[-30,30,0]}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ash_sword_phantom.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_sword_phantom.animation.json new file mode 100644 index 0000000..9bad827 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ash_sword_phantom.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":2,"bones":{"main":{"rotation":{"0.0":[-30,30,0],"0.5":[30,30,0],"1.0":[30,-30,0],"1.5":[-30,-30,0],"2.0":[-30,30,0]}}}},"walk":{"loop":true,"animation_length":2,"bones":{"main":{"rotation":{"0.0":[-30,30,0],"0.5":[30,30,0],"1.0":[30,-30,0],"1.5":[-30,-30,0],"2.0":[-30,30,0]}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/blackstone_thorn.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/blackstone_thorn.animation.json new file mode 100644 index 0000000..c7f8736 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/blackstone_thorn.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":"hold_on_last_frame","animation_length":5.0625,"bones":{"main":{"scale":{"0.0":[1,0,1],"1.5625":[1,0.1,1],"1.75":[1,1.5,1],"1.9375":[1,1,1],"2.125":[1,1,1],"2.3125":[1,0.1,1],"3.75":[1,0.1,1],"3.9375":[1,1.5,1],"4.125":[1,1,1],"4.3125":[1,1,1],"4.5":[1,0.1,1],"5.0625":[1,0,1]}}}},"walk":{"loop":"hold_on_last_frame","animation_length":5.0625,"bones":{"main":{"scale":{"0.0":[1,0,1],"1.5625":[1,0.1,1],"1.75":[1,1.5,1],"1.9375":[1,1,1],"2.125":[1,1,1],"2.3125":[1,0.1,1],"3.75":[1,0.1,1],"3.9375":[1,1.5,1],"4.125":[1,1,1],"4.3125":[1,1,1],"4.5":[1,0.1,1],"5.0625":[1,0,1]}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/chest_monster.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/chest_monster.animation.json new file mode 100644 index 0000000..09c775f --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/chest_monster.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"walk":{"loop":true,"animation_length":0.56,"bones":{"up":{"rotation":{"0.0":[0,0,0],"0.32":[0,0,0],"0.4":[-35,0,0],"0.56":[0,0,0]}},"global":{"position":{"0.0":[0,0,0],"0.32":[0,9,0],"0.56":[0,0,0]}}}},"idle":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/chester.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/chester.animation.json new file mode 100644 index 0000000..09c775f --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/chester.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"walk":{"loop":true,"animation_length":0.56,"bones":{"up":{"rotation":{"0.0":[0,0,0],"0.32":[0,0,0],"0.4":[-35,0,0],"0.56":[0,0,0]}},"global":{"position":{"0.0":[0,0,0],"0.32":[0,9,0],"0.56":[0,0,0]}}}},"idle":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/clam.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/clam.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/clam.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/crab.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/crab.animation.json new file mode 100644 index 0000000..b5d6fc7 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/crab.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"walk":{"loop":true,"animation_length":0.52,"bones":{"bone9":{"rotation":{"0.0":[-35,0,0],"0.2833":[5,0,0],"0.5167":[-35,0,0]}},"bone10":{"rotation":{"0.0":[20,0,0],"0.2833":[-30,0,0],"0.5167":[20,0,0]}},"bone11":{"rotation":{"0.0":[-25,0,0],"0.2833":[5,0,0],"0.5167":[-25,0,0]}},"bone12":{"rotation":{"0.0":[-20,0,0],"0.2833":[30,0,0],"0.5167":[-20,0,0]}},"bone13":{"rotation":{"0.0":[20,0,0],"0.2833":[-35,0,0],"0.5167":[20,0,0]}},"bone14":{"rotation":{"0.0":[-30,0,0],"0.2833":[25,0,0],"0.5167":[-30,0,0]}}}},"idle":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/dark_werewolf.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/dark_werewolf.animation.json new file mode 100644 index 0000000..30cad5c --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/dark_werewolf.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"bones":{"waist":{"rotation":[40,0,0]},"rightleg":{"rotation":[10,0,0],"scale":1.2},"leftleg":{"rotation":[10,0,0],"scale":1.2},"rightarm":{"rotation":[-30,0,0],"scale":1.3},"leftarm":{"rotation":[-30,0,0],"scale":1.3}}},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ender_snail.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ender_snail.animation.json new file mode 100644 index 0000000..8db48c0 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ender_snail.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"walk":{"loop":true,"animation_length":2,"bones":{"shell":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,3],"lerp_mode":"catmullrom"},"2.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"body":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,1],"lerp_mode":"catmullrom"},"2.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}},"scale":{"0.0":{"post":[1,1,1],"lerp_mode":"catmullrom"},"1.0":{"post":[1,1,1.4],"lerp_mode":"catmullrom"},"2.0":{"post":[1,1,1],"lerp_mode":"catmullrom"}}}}},"idle":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ender_snake.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ender_snake.animation.json new file mode 100644 index 0000000..6d4dbb0 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ender_snake.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"bones":{"head_bone":{"position":[0,0,0],"rotation":["query.target_x_rotation",0,0]}}},"walk":{"loop":true,"bones":{"head_bone":{"rotation":["math.cos(query.life_time*60)*2",0,0],"position":[0,0,0]},"jaw":{"rotation":["5+math.cos(query.life_time*60)*5",0,0],"position":[0,0,0]},"horn":{"rotation":["math.cos(query.life_time*180)*6",0,0],"position":[0,0,0]},"horn2":{"rotation":[0,"math.cos(query.life_time*180)*10",0],"position":[0,0,0]},"horn3":{"rotation":[0,"math.cos(query.life_time*180)*10",0],"position":[0,0,0]}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/entity_soul.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/entity_soul.animation.json new file mode 100644 index 0000000..88bf545 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/entity_soul.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/entity_soul_1.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/entity_soul_1.animation.json new file mode 100644 index 0000000..88bf545 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/entity_soul_1.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/escaped_soul_entity.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/escaped_soul_entity.animation.json new file mode 100644 index 0000000..88bf545 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/escaped_soul_entity.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/everlasting_winter_ghast.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/everlasting_winter_ghast.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/everlasting_winter_ghast.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/everlasting_winter_shadow.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/everlasting_winter_shadow.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/everlasting_winter_shadow.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/friendly_little_soul.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/friendly_little_soul.animation.json new file mode 100644 index 0000000..88bf545 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/friendly_little_soul.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/frozen_heart.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/frozen_heart.animation.json new file mode 100644 index 0000000..072d30e --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/frozen_heart.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"walk":{"loop":true,"animation_length":1,"bones":{"down":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[50,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}},"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[0,-2,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"up":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[-50,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}},"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[0,2,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"left":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[0,-50,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}},"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[2,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"right":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[0,50,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}},"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[-2,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}},"behind":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[-70,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}},"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.5":{"post":[0,0,0],"lerp_mode":"catmullrom"},"1.0":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"idle":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/frozen_heart_sleeping.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/frozen_heart_sleeping.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/frozen_heart_sleeping.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/frozen_shadow.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/frozen_shadow.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/frozen_shadow.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_diamond_axe.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_diamond_axe.animation.json new file mode 100644 index 0000000..a5d12f0 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_diamond_axe.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"animation_length":0.66667,"bones":{"iron_axe":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.6667":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":0.625,"bones":{"iron_axe":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.1667":{"post":[0,27.5,0],"lerp_mode":"catmullrom"},"0.4583":{"post":[0,-27.5,0],"lerp_mode":"catmullrom"},"0.625":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_diamond_staff.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_diamond_staff.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_diamond_staff.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_diamond_sword.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_diamond_sword.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_diamond_sword.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_iron_axe.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_iron_axe.animation.json new file mode 100644 index 0000000..a5d12f0 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_iron_axe.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"animation_length":0.66667,"bones":{"iron_axe":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.6667":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":0.625,"bones":{"iron_axe":{"rotation":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.1667":{"post":[0,27.5,0],"lerp_mode":"catmullrom"},"0.4583":{"post":[0,-27.5,0],"lerp_mode":"catmullrom"},"0.625":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_iron_sword.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_iron_sword.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_iron_sword.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_wooden_staff.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_wooden_staff.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_wooden_staff.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_wooden_sword.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_wooden_sword.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ghost_wooden_sword.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/goblin.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/goblin.animation.json new file mode 100644 index 0000000..71edf89 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/goblin.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":2.12,"bones":{"body":{"rotation":{"0.0":[2.5,0,0],"1.04":[-2.5,0,0],"2.12":[2.5,0,0]}},"head":{"rotation":{"0.0":[5,0,0],"1.04":[-5,0,0],"2.12":[5,0,0]},"position":{"0.0":[0,0,-0.5],"1.04":[0,0,0.5],"2.12":[0,0,-0.5]}},"rightArm":{"rotation":{"0.0":[-2.5,0,0],"1.04":[2.5,0,0],"2.12":[-2.5,0,0]},"position":{"0.0":[0,0,-0.25],"1.04":[0,0,0.25],"2.12":[0,0,-0.25]}},"leftArm":{"rotation":{"0.0":[-2.5,0,0],"1.04":[2.5,0,0],"2.08":[-2.5,0,0]},"position":{"0.0":[0,0,-0.25],"1.04":[0,0,0.25],"2.08":[0,0,-0.25]}}}},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/goblin_sniper.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/goblin_sniper.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/goblin_sniper.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/goblin_wizard.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/goblin_wizard.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/goblin_wizard.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/host_of_deep.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/host_of_deep.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/host_of_deep.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ice_monster.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ice_monster.animation.json new file mode 100644 index 0000000..14ce19a --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ice_monster.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"walk":{"loop":true,"animation_length":1,"bones":{"body":{"rotation":{"0.0":[0,0,0],"0.5":[7.5,0,0],"1.0":[0,0,0]},"position":{"0.0":[0,0,0],"0.5":[0,-1,-1],"1.0":[0,0,0]}},"head":{"rotation":{"0.0":[0,0,0],"0.5":[-2.5,0,0],"1.0":[0,0,0]}},"top":{"position":{"0.0":[0,0,0],"0.5":[0,1,0],"1.0":[0,0,0]}},"arm0":{"rotation":{"0.0":[0,0,0],"0.5":[-14.91643,2.11089,4.53359],"1.0":[0,0,0]}},"arm1":{"rotation":{"0.0":[0,0,0],"0.5":[-14.91643,-2.11089,-4.53359],"1.0":[0,0,0]}},"leg0":{"rotation":{"0.0":[0,0,0],"0.3333":[13.34,0,0],"0.6667":[-26.67,0,0],"1.0":[0,0,0]}},"knee0":{"rotation":{"0.0":[0,0,0],"0.3333":[8.33,0,0],"0.6667":[28.33,0,0],"1.0":[0,0,0]}},"leg1":{"rotation":{"0.0":[0,0,0],"0.3333":[-32.5,0,0],"0.6667":[20,0,0],"1.0":[0,0,0]}},"knee1":{"rotation":{"0.0":[0,0,0],"0.2917":[27.29,0,0],"0.6667":[8.33,0,0],"1.0":[0,0,0]}}}},"idle":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ice_spirit.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ice_spirit.animation.json new file mode 100644 index 0000000..82d59a7 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ice_spirit.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"walk":{"loop":true,"animation_length":1,"bones":{"head":{"rotation":{"0.0":[0,0,0],"0.5":[-5,0,0],"1.0":[0,0,0]}},"rightArm":{"rotation":{"0.0":[0,0,0],"0.25":[-32.5,0,0],"0.5":[0,0,0],"0.75":[30,0,0],"1.0":[0,0,0]}},"leftArm":{"rotation":{"0.0":[0,0,0],"0.25":[30,0,0],"0.5":[0,0,0],"0.75":[-30,0,0],"1.0":[0,0,0]}},"leftLeg":{"rotation":{"0.0":[0,0,0],"0.25":[-15,0,0],"0.5":[0,0,0],"0.75":[15,0,0],"1.0":[0,0,0]}},"rightLeg":{"rotation":{"0.0":[0,0,0],"0.25":[15,0,0],"0.5":[0,0,0],"0.75":[-15,0,0],"1.0":[0,0,0]}}}},"idle":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ice_thorn.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ice_thorn.animation.json new file mode 100644 index 0000000..c7f8736 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ice_thorn.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":"hold_on_last_frame","animation_length":5.0625,"bones":{"main":{"scale":{"0.0":[1,0,1],"1.5625":[1,0.1,1],"1.75":[1,1.5,1],"1.9375":[1,1,1],"2.125":[1,1,1],"2.3125":[1,0.1,1],"3.75":[1,0.1,1],"3.9375":[1,1.5,1],"4.125":[1,1,1],"4.3125":[1,1,1],"4.5":[1,0.1,1],"5.0625":[1,0,1]}}}},"walk":{"loop":"hold_on_last_frame","animation_length":5.0625,"bones":{"main":{"scale":{"0.0":[1,0,1],"1.5625":[1,0.1,1],"1.75":[1,1.5,1],"1.9375":[1,1,1],"2.125":[1,1,1],"2.3125":[1,0.1,1],"3.75":[1,0.1,1],"3.9375":[1,1.5,1],"4.125":[1,1,1],"4.3125":[1,1,1],"4.5":[1,0.1,1],"5.0625":[1,0,1]}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/ice_wizard.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/ice_wizard.animation.json new file mode 100644 index 0000000..36716a9 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/ice_wizard.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"walk":{"loop":true,"animation_length":0.66667,"bones":{"fly_block":{"rotation":{"0.0":[0,0,0],"0.5":[0,-180,0]}},"leg0":{"rotation":{"0.0":[0,0,0],"0.1667":[12.5,0,0],"0.3333":[0,0,0],"0.5":[-12.5,0,0],"0.6667":[0,0,0]}},"leg1":{"rotation":{"0.0":[0,0,0],"0.1667":[-12.5,0,0],"0.3333":[0,0,0],"0.5":[12.5,0,0],"0.6667":[0,0,0]}},"rightArm":{"rotation":{"0.0":[0,0,0],"0.1667":[-12.5,0,0],"0.3333":[0,0,0],"0.5":[12.5,0,0],"0.6667":[0,0,0]}},"leftArm":{"rotation":{"0.0":[0,0,0],"0.1667":[12.5,0,0],"0.3333":[0,0,0],"0.5":[-12.5,0,0],"0.6667":[0,0,0]}},"clothes":{"rotation":{"0.0":[2.5,0,0],"0.375":[5,0,0],"0.6667":[2.5,0,0]}},"head":{"rotation":{"0.0":[0,0,0],"0.375":[-2.5,0,0],"0.6667":[0,0,0]}}}},"idle":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/illusioner.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/illusioner.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/illusioner.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/lava_lizard.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/lava_lizard.animation.json new file mode 100644 index 0000000..99ddf03 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/lava_lizard.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"walk":{"loop":true,"animation_length":0.76,"bones":{"leftFin":{"position":{"0.0":[0,0,0],"0.24":[0,0,-2],"0.76":[0,0,0]}},"rightFin":{"position":{"0.0":[0,0,0],"0.48":[0,0,-2],"0.76":[0,0,0]}},"waist":{"position":{"0.0":[0,0,0],"0.24":[0,0,-2],"0.76":[0,0,0]}}}},"idle":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/little_soul.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/little_soul.animation.json new file mode 100644 index 0000000..88bf545 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/little_soul.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/murloc_wizard.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/murloc_wizard.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/murloc_wizard.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/mushroom_monster.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/mushroom_monster.animation.json new file mode 100644 index 0000000..e850e8a --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/mushroom_monster.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"walk":{"loop":true,"animation_length":0.56,"bones":{"body":{"scale":{"0.0":[1,1,1],"0.28":[1,0.8,1],"0.56":[1,1,1]}},"head":{"position":{"0.0":[0,0,0],"0.28":[0,-1,0],"0.56":[0,0,0]},"scale":{"0.0":[1,1,1],"0.28":[1,1,1],"0.56":[1,1,1]}}}},"idle":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/nautilus.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/nautilus.animation.json new file mode 100644 index 0000000..030e363 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/nautilus.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"walk":{"loop":true,"animation_length":2.04,"bones":{"bone":{"rotation":{"0.0":[-7.5,0,0],"1.0333":[15,0,0],"2.0333":[-7.5,0,0]}},"bone2":{"rotation":{"0.0":[10,0,0],"1.0333":[0,0,0],"2.0333":[10,0,0]}},"bone3":{"rotation":{"0.0":[10,0,0],"1.0333":[0,0,0],"2.0333":[10,0,0]}},"bone4":{"rotation":{"0.0":[10,0,0],"1.0333":[0,0,0],"2.0333":[10,0,0]}},"bone5":{"rotation":{"0.0":[10,0,0],"1.0333":[0,0,0],"2.0333":[10,0,0]}},"bone6":{"rotation":{"0.0":[10,0,0],"1.0333":[0,0,0],"2.0333":[10,0,0]}},"bone9":{"rotation":{"0.0":[10,0,0],"1.0333":[0,0,0],"2.0333":[10,0,0]}},"bone10":{"rotation":{"0.0":[10,0,0],"1.0333":[0,0,0],"2.0333":[10,0,0]}},"bone11":{"rotation":{"0.0":[10,0,0],"1.0333":[0,0,0],"2.0333":[10,0,0]}},"bone12":{"rotation":{"0.0":[10,0,0],"1.0333":[0,0,0],"2.0333":[10,0,0]}}}},"idle":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/saucer.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/saucer.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/saucer.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/sea_urchin.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/sea_urchin.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/sea_urchin.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/shadow_of_deep.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/shadow_of_deep.animation.json new file mode 100644 index 0000000..9e2390b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/shadow_of_deep.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":0},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/shadow_soul_1.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/shadow_soul_1.animation.json new file mode 100644 index 0000000..88bf545 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/shadow_soul_1.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/shadow_soul_2.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/shadow_soul_2.animation.json new file mode 100644 index 0000000..88bf545 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/shadow_soul_2.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/soul_soldier.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/soul_soldier.animation.json new file mode 100644 index 0000000..88bf545 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/soul_soldier.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}},"walk":{"loop":true,"animation_length":1.5,"bones":{"waist":{"position":{"0.0":{"post":[0,0,0],"lerp_mode":"catmullrom"},"0.75":{"post":[0,-3,0],"lerp_mode":"catmullrom"},"1.5":{"post":[0,0,0],"lerp_mode":"catmullrom"}}}}}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/animations/entity/werewolf.animation.json b/src/main/resources/assets/decisland/bedrock/animations/entity/werewolf.animation.json new file mode 100644 index 0000000..30cad5c --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/animations/entity/werewolf.animation.json @@ -0,0 +1 @@ +{"format_version":"1.8.0","animations":{"idle":{"loop":true,"bones":{"waist":{"rotation":[40,0,0]},"rightleg":{"rotation":[10,0,0],"scale":1.2},"leftleg":{"rotation":[10,0,0],"scale":1.2},"rightarm":{"rotation":[-30,0,0],"scale":1.3},"leftarm":{"rotation":[-30,0,0],"scale":1.3}}},"walk":{"loop":true,"animation_length":0}}} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/abyssal_controller.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/abyssal_controller.geometry.json new file mode 100644 index 0000000..fbbf7b6 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/abyssal_controller.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.abyssal_controller","texture_width":128,"texture_height":128,"visible_bounds_width":3,"visible_bounds_height":3,"visible_bounds_offset":[0,1.5,0]},"bones":[{"name":"root","pivot":[0,24,0]},{"name":"body","parent":"root","pivot":[0,24,0],"cubes":[{"origin":[-4,12,-2],"size":[8,12,4],"uv":[16,16]}]},{"name":"jacket","parent":"body","pivot":[0,24,0],"cubes":[{"origin":[-4,12,-2],"size":[8,12,4],"inflate":0.5,"uv":[16,32]}]},{"name":"waist","parent":"body","pivot":[0,12,0]},{"name":"head","parent":"root","pivot":[0,24,0],"cubes":[{"origin":[-4,24,-4],"size":[8,8,8],"inflate":0.5,"uv":[0,0]}]},{"name":"hat","parent":"root","pivot":[0,24,0],"cubes":[{"origin":[-4,24,-4],"size":[8,8,8],"inflate":1,"uv":[32,0]}]},{"name":"rightArm","parent":"root","pivot":[-7,22,0],"cubes":[{"origin":[-9,12,-2],"size":[4,12,4],"uv":[0,16]}]},{"name":"rightSleeve","parent":"rightArm","pivot":[-7,22,0],"cubes":[{"origin":[-9,12,-2],"size":[4,12,4],"inflate":0.5,"uv":[48,48]}]},{"name":"rightItem","parent":"rightArm","pivot":[-8,15,1]},{"name":"leftArm","parent":"root","pivot":[5,22,0],"cubes":[{"origin":[4,12,-2],"size":[4,12,4],"uv":[40,16],"mirror":true}]},{"name":"leftSleeve","parent":"leftArm","pivot":[5,22,0],"cubes":[{"origin":[5,12,-2],"size":[4,12,4],"inflate":0.5,"uv":[40,32],"mirror":true}]},{"name":"leftItem","parent":"leftArm","pivot":[6,15,1]},{"name":"rightLeg","parent":"root","pivot":[-1.9,12,0],"cubes":[{"origin":[-4.05,0,-2],"size":[4,12,4],"uv":[16,48]}]},{"name":"rightPants","parent":"rightLeg","pivot":[-1.9,12,0],"cubes":[{"origin":[-4.25,0,-2],"size":[4,12,4],"inflate":0.25,"uv":[0,48]}]},{"name":"leftLeg","parent":"root","pivot":[1.9,12,0],"cubes":[{"origin":[0.05,5,-2],"size":[4,7,4],"uv":[32,48],"mirror":true},{"origin":[1,3,-1.5],"size":[3,2,3],"uv":[0,64]},{"origin":[1.5,0,-1],"size":[2,3,2],"uv":[0,77]}]},{"name":"leftPants","parent":"leftLeg","pivot":[1.9,10,0],"cubes":[{"origin":[0.25,5,-2],"size":[4,9,4],"inflate":0.25,"uv":[0,32],"mirror":true}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/abyssal_shadow.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/abyssal_shadow.geometry.json new file mode 100644 index 0000000..60a73aa --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/abyssal_shadow.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.head","texture_width":64,"texture_height":64,"visible_bounds_width":2.5,"visible_bounds_height":2.5,"visible_bounds_offset":[0,1.25,0]},"bones":[{"name":"root","pivot":[0,1,0]},{"name":"head","parent":"root","pivot":[0,1,0],"cubes":[{"origin":[-4,1,-4],"size":[8,8,8],"inflate":0.5,"uv":[0,0]}]},{"name":"hat","parent":"root","pivot":[0,1,0],"cubes":[{"origin":[-4,1,-4],"size":[8,8,8],"inflate":1,"uv":[32,0]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ash_bomb.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ash_bomb.geometry.json new file mode 100644 index 0000000..21e8e47 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ash_bomb.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.half_block","texture_width":128,"texture_height":128,"visible_bounds_width":3,"visible_bounds_height":3,"visible_bounds_offset":[0,1.5,0]},"bones":[{"name":"bone","pivot":[0,0,0],"cubes":[{"origin":[-16,0,-16],"size":[32,16,32],"uv":[0,0]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ash_horse.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ash_horse.geometry.json new file mode 100644 index 0000000..27c2bd3 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ash_horse.geometry.json @@ -0,0 +1,415 @@ +{ + "format_version": "1.10.0", + "geometry.ash_horse": { + "texturewidth": 128, + "textureheight": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0], + "bones": [ + { + "name": "waist", + "pivot": [0, 0, 0] + }, + { + "name": "Body", + "parent": "waist", + "pivot": [0, 13, 9], + "cubes": [ + {"origin": [-5, 11, -10], "size": [10, 10, 24], "uv": [0, 34]} + ] + }, + { + "name": "heart", + "parent": "Body", + "pivot": [0, 15, -6], + "cubes": [ + {"origin": [-2, 13, -8], "size": [4, 4, 4], "uv": [0, 68]} + ], + "locators": { + "heart": [0, 16, -8] + } + }, + { + "name": "Tail", + "parent": "Body", + "pivot": [0, 21, 14] + }, + { + "name": "TailA", + "parent": "Tail", + "pivot": [0, 21, 14], + "rotation": [-65, 0, 0], + "cubes": [ + {"origin": [-1, 20, 14], "size": [2, 2, 10], "uv": [26, 0]} + ] + }, + { + "name": "TailB", + "parent": "Tail", + "pivot": [0, 21, 14], + "rotation": [-65, 0, 0] + }, + { + "name": "TailC", + "parent": "Tail", + "pivot": [0, 21, 14], + "rotation": [-80.34, 0, 0] + }, + { + "name": "Head", + "parent": "Body", + "pivot": [0, 20, -10], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [-2.5, 25, -11.5], "size": [5, 5, 7], "uv": [0, 0]} + ], + "locators": { + "eye0": [2, 28, -8], + "eye1": [-2, 28, -9] + } + }, + { + "name": "Mouth", + "parent": "Head", + "pivot": [0, 27.05, -13] + }, + { + "name": "UMouth", + "parent": "Mouth", + "pivot": [0, 20.05, -10], + "cubes": [ + {"origin": [-2, 27.05, -17], "size": [4, 3, 6], "uv": [24, 18]} + ] + }, + { + "name": "LMouth", + "parent": "Mouth", + "pivot": [0, 22, 2], + "cubes": [ + {"origin": [-2, 26, -16.5], "size": [4, 2, 5], "uv": [24, 27]} + ] + }, + { + "name": "Ear", + "parent": "Head", + "pivot": [0, 20, -10] + }, + { + "name": "Ear1", + "parent": "Ear", + "pivot": [0, 20, -10], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [0.45, 29, -6], "size": [2, 3, 1], "uv": [0, 0]} + ] + }, + { + "name": "Ear2", + "parent": "Ear", + "pivot": [0, 20, -10], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [-2.45, 29, -6], "size": [2, 3, 1], "uv": [0, 0]} + ] + }, + { + "name": "MuleEar", + "parent": "Head", + "pivot": [0, 20, -10] + }, + { + "name": "MuleEarL", + "parent": "MuleEar", + "pivot": [0, 20, -10], + "rotation": [30, 0, 15], + "cubes": [ + {"origin": [-2, 29, -6], "size": [2, 7, 1], "uv": [0, 12]} + ] + }, + { + "name": "MuleEarR", + "parent": "MuleEar", + "pivot": [0, 20, -10], + "rotation": [30, 0, -15], + "cubes": [ + {"origin": [0, 29, -6], "size": [2, 7, 1], "uv": [0, 12]} + ] + }, + { + "name": "Neck", + "parent": "Head", + "pivot": [0, 20, -10], + "cubes": [ + {"origin": [-2.05, 15.8, -12], "size": [4, 14, 8], "uv": [0, 12]} + ], + "locators": { + "lead": [0, 17, -8] + } + }, + { + "name": "Mane", + "parent": "Head", + "pivot": [0, 20, -10], + "cubes": [ + {"origin": [-1, 15.5, -5], "size": [2, 15, 3], "uv": [50, 0]} + ] + }, + { + "name": "hair", + "parent": "Mane", + "pivot": [0, 30, -3], + "rotation": [-45, 0, 0] + }, + { + "name": "HeadSaddle", + "parent": "Head", + "pivot": [0, 20, -10], + "cubes": [ + {"origin": [-2.5, 25.1, -17], "size": [5, 5, 12], "uv": [80, 12], "inflate": 0.05} + ] + }, + { + "name": "SaddleMouth", + "parent": "Head", + "pivot": [0, 26, -14], + "rotation": [-30, 0, 0] + }, + { + "name": "SaddleMouthL", + "parent": "SaddleMouth", + "pivot": [0, 22.35296, -7.61487], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [1.5, 28.35296, -11.61487], "size": [1, 2, 2], "uv": [74, 13]} + ] + }, + { + "name": "SaddleMouthR", + "parent": "SaddleMouth", + "pivot": [0, 22.35296, -7.61487], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [-2.5, 28.35296, -11.61487], "size": [1, 2, 2], "uv": [74, 13]} + ] + }, + { + "name": "Saddle", + "parent": "Body", + "pivot": [0, 22, 2], + "cubes": [ + {"origin": [-5, 21, -1], "size": [10, 1, 8], "uv": [80, 0]} + ] + }, + { + "name": "SaddleB", + "parent": "Saddle", + "pivot": [0, 22, 2], + "cubes": [ + {"origin": [-1.5, 22, -1], "size": [3, 1, 2], "uv": [106, 9]} + ] + }, + { + "name": "SaddleC", + "parent": "Saddle", + "pivot": [0, 22, 2], + "cubes": [ + {"origin": [-4, 22, 5], "size": [8, 1, 2], "uv": [80, 9]} + ] + }, + { + "name": "SaddleL", + "parent": "Saddle", + "pivot": [5, 21, 2], + "cubes": [ + {"origin": [4.5, 15, 1.5], "size": [1, 6, 1], "uv": [70, 0]}, + {"origin": [4.5, 15, 1.5], "size": [1, 6, 1], "uv": [70, 0]} + ] + }, + { + "name": "SaddleL2", + "parent": "Saddle", + "pivot": [5, 21, 2], + "cubes": [ + {"origin": [4.5, 13, 1], "size": [1, 2, 2], "uv": [74, 0]} + ] + }, + { + "name": "SaddleR2", + "parent": "Saddle", + "pivot": [-5, 21, 2], + "cubes": [ + {"origin": [-5.5, 13, 1], "size": [1, 2, 2], "uv": [74, 4]} + ] + }, + { + "name": "SaddleR", + "parent": "Saddle", + "pivot": [-5, 21, 2], + "cubes": [ + {"origin": [-5.5, 15, 1.5], "size": [1, 6, 1], "uv": [80, 0]} + ] + }, + { + "name": "SaddleMouthLine", + "parent": "Saddle", + "pivot": [0, 0, 0] + }, + { + "name": "SaddleMouthLineR", + "parent": "SaddleMouthLine", + "pivot": [0, 20, -10] + }, + { + "name": "SaddleMouthLineB", + "parent": "SaddleMouthLine", + "pivot": [0, 20, -10] + }, + { + "name": "bag", + "parent": "Body", + "pivot": [0, 20, -10] + }, + { + "name": "Bag1", + "parent": "bag", + "pivot": [-7.5, 21, 10], + "rotation": [0, 90, 0] + }, + { + "name": "Bag2", + "parent": "bag", + "pivot": [4.5, 21, 10], + "rotation": [0, 90, 0] + }, + { + "name": "Leg1", + "parent": "waist", + "pivot": [4, 15, 11] + }, + { + "name": "Leg1A", + "parent": "Leg1", + "pivot": [4, 15, 11], + "cubes": [ + {"origin": [1.5, 8, 8.5], "size": [4, 9, 5], "uv": [78, 29]} + ] + }, + { + "name": "Leg1B", + "parent": "Leg1", + "pivot": [4, 8, 11], + "cubes": [ + {"origin": [2, 3, 9.5], "size": [3, 5, 3], "uv": [78, 43]} + ] + }, + { + "name": "Leg1C", + "parent": "Leg1", + "pivot": [4, 8, 11], + "cubes": [ + {"origin": [1.5, -0.1, 9], "size": [4, 3, 4], "uv": [78, 51]} + ], + "locators": { + "leg1c": [4, 2, 12] + } + }, + { + "name": "Leg2", + "parent": "waist", + "pivot": [4, 15, 11] + }, + { + "name": "Leg2A", + "parent": "Leg2", + "pivot": [-4, 15, 11], + "cubes": [ + {"origin": [-5.5, 8, 8.5], "size": [4, 9, 5], "uv": [96, 29]} + ] + }, + { + "name": "Leg2B", + "parent": "Leg2", + "pivot": [-4, 8, 11], + "cubes": [ + {"origin": [-5, 3, 9.5], "size": [3, 5, 3], "uv": [96, 43]} + ] + }, + { + "name": "Leg2C", + "parent": "Leg2", + "pivot": [-4, 8, 11], + "cubes": [ + {"origin": [-5.5, -0.1, 9], "size": [4, 3, 4], "uv": [96, 51]} + ], + "locators": { + "leg2c": [-4, 2, 12] + } + }, + { + "name": "Leg3", + "parent": "waist", + "pivot": [4, 15, 11] + }, + { + "name": "Leg3A", + "parent": "Leg3", + "pivot": [4, 15, -8], + "cubes": [ + {"origin": [2.1, 8, -10.1], "size": [3, 8, 4], "uv": [44, 29]} + ] + }, + { + "name": "Leg3B", + "parent": "Leg3", + "pivot": [4, 8, -8], + "cubes": [ + {"origin": [2.1, 3, -9.6], "size": [3, 5, 3], "uv": [44, 41]} + ] + }, + { + "name": "Leg3C", + "parent": "Leg3", + "pivot": [4, 8, -8], + "cubes": [ + {"origin": [1.6, -0.1, -10.1], "size": [4, 3, 4], "uv": [44, 51]} + ], + "locators": { + "leg3c": [4, 2, -8] + } + }, + { + "name": "Leg4", + "parent": "waist", + "pivot": [4, 15, 11] + }, + { + "name": "Leg4A", + "parent": "Leg4", + "pivot": [-4, 15, -8], + "cubes": [ + {"origin": [-5.1, 8, -10.1], "size": [3, 8, 4], "uv": [60, 29]} + ] + }, + { + "name": "Leg4B", + "parent": "Leg4", + "pivot": [-4, 8, -8], + "cubes": [ + {"origin": [-5.1, 3, -9.6], "size": [3, 5, 3], "uv": [60, 41]} + ] + }, + { + "name": "Leg4C", + "parent": "Leg4", + "pivot": [-4, 8, -8], + "cubes": [ + {"origin": [-5.6, -0.1, -10.1], "size": [4, 3, 4], "uv": [60, 51]} + ], + "locators": { + "leg4c": [-4, 2, -8] + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ash_horse_head.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ash_horse_head.geometry.json new file mode 100644 index 0000000..95b8a1a --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ash_horse_head.geometry.json @@ -0,0 +1,142 @@ +{ + "format_version": "1.10.0", + "geometry.ash_horse_head": { + "texturewidth": 128, + "textureheight": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0], + "bones": [ + { + "name": "main", + "pivot": [0, -17, 10] + }, + { + "name": "HeadSaddle", + "parent": "main", + "pivot": [0, 3, 0], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [-2.5, 8.1, -7], "size": [5, 5, 12], "uv": [80, 12], "inflate": 0.05} + ] + }, + { + "name": "Mane", + "parent": "main", + "pivot": [0, 3, 0], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [-1, -1.5, 5], "size": [2, 15, 3], "uv": [50, 0]} + ] + }, + { + "name": "hair", + "parent": "Mane", + "pivot": [0, 13, 7], + "rotation": [-45, 0, 0] + }, + { + "name": "Neck", + "parent": "main", + "pivot": [0, 3, 0], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [-2.05, -1.2, -2], "size": [4, 14, 8], "uv": [0, 12]} + ], + "locators": { + "lead": [0, 0, 2] + } + }, + { + "name": "MuleEarR", + "parent": "main", + "pivot": [0, 3, 0], + "rotation": [30, 0, -15], + "cubes": [ + {"origin": [0, 12, 4], "size": [2, 7, 1], "uv": [0, 12]} + ] + }, + { + "name": "MuleEarL", + "parent": "main", + "pivot": [0, 3, 0], + "rotation": [30, 0, 15], + "cubes": [ + {"origin": [-2, 12, 4], "size": [2, 7, 1], "uv": [0, 12]} + ] + }, + { + "name": "Ear2", + "parent": "main", + "pivot": [0, 3, 0], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [-2.45, 12, 4], "size": [2, 3, 1], "uv": [0, 0]} + ] + }, + { + "name": "Ear1", + "parent": "main", + "pivot": [0, 3, 0], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [0.45, 12, 4], "size": [2, 3, 1], "uv": [0, 0]} + ] + }, + { + "name": "UMouth", + "parent": "main", + "pivot": [0, 10.05, -5], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [-2, 8.48782, -11.16987], "size": [4, 3, 6], "uv": [24, 18]} + ] + }, + { + "name": "Head", + "parent": "main", + "pivot": [0, 3, 0], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [-2.5, 8, -1.5], "size": [5, 5, 7], "uv": [0, 0]} + ], + "locators": { + "eye0": [2, 11, 2], + "eye1": [-2, 11, 1] + } + }, + { + "name": "LMouthWithSaddle", + "parent": "main", + "pivot": [0, 8, -5] + }, + { + "name": "LMouth", + "parent": "LMouthWithSaddle", + "pivot": [0, 8, -5], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [-2, 7.59808, -9.87564], "size": [4, 2, 5], "uv": [24, 27]} + ] + }, + { + "name": "SaddleMouthR", + "parent": "LMouthWithSaddle", + "pivot": [0, 3, 0], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [-2.5, 9, -4], "size": [1, 2, 2], "uv": [74, 13]} + ] + }, + { + "name": "SaddleMouthL", + "parent": "LMouthWithSaddle", + "pivot": [0, 3, 0], + "rotation": [30, 0, 0], + "cubes": [ + {"origin": [1.5, 9, -4], "size": [1, 2, 2], "uv": [74, 13]} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ash_knight.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ash_knight.geometry.json new file mode 100644 index 0000000..edd0380 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ash_knight.geometry.json @@ -0,0 +1,218 @@ +{ + "format_version": "1.10.0", + "geometry.ash_knight": { + "texturewidth": 128, + "textureheight": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 3, + "visible_bounds_offset": [0, 1.5, 0], + "bones": [ + { + "name": "waist", + "pivot": [0, 14, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 26, 0] + }, + { + "name": "main", + "parent": "body", + "pivot": [0, 26, 0], + "cubes": [ + {"origin": [-4, 14, -2], "size": [8, 12, 4], "uv": [16, 16]} + ] + }, + { + "name": "chestplate", + "parent": "main", + "pivot": [0, 22, 0], + "cubes": [ + {"origin": [-4, 14, -2], "size": [8, 12, 4], "uv": [32, 32], "inflate": 0.1} + ] + }, + { + "name": "heart", + "parent": "main", + "pivot": [0, 22, 0], + "cubes": [ + {"origin": [-2, 20, -2], "size": [4, 4, 4], "uv": [0, 32], "inflate": -0.5} + ], + "locators": { + "heart": [0, 22, 0] + } + }, + { + "name": "cope", + "parent": "main", + "pivot": [0, 24, 1], + "rotation": [2.5, 0, 0], + "cubes": [ + {"origin": [-4, 10, 2.1], "size": [8, 16, 0], "uv": [16, 32]} + ] + }, + { + "name": "head", + "parent": "main", + "pivot": [0, 26, 0], + "cubes": [ + {"origin": [-4, 26, -4], "size": [8, 8, 8], "uv": [0, 0]} + ], + "locators": { + "head": [0, 30, 0] + } + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 26, 0], + "cubes": [ + {"origin": [-4, 26, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + ] + }, + { + "name": "corner0", + "parent": "hat", + "pivot": [-4, 34, -4], + "rotation": [30, 0, -30], + "cubes": [ + {"origin": [-4.5, 33.25, -5.43301], "size": [2, 4, 2], "uv": [28, 54]} + ] + }, + { + "name": "corner1", + "parent": "hat", + "pivot": [4, 34, -4], + "rotation": [30, 0, 30], + "cubes": [ + {"origin": [3, 34, -5], "size": [2, 4, 2], "uv": [28, 54]} + ] + }, + { + "name": "rightArm", + "parent": "main", + "pivot": [-5, 24, 0], + "cubes": [ + {"origin": [-6, 12, -1], "size": [2, 14, 2], "uv": [40, 16]} + ], + "locators": { + "rightarm": [-5, 19, 0] + } + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-5, 13, 1] + }, + { + "name": "right_shoulder", + "parent": "rightArm", + "pivot": [-5, 24, 0], + "rotation": [0, 0, 30], + "cubes": [ + {"origin": [-8, 24, -2], "size": [4, 2, 4], "uv": [0, 46], "inflate": 0.2} + ] + }, + { + "name": "right_sleeve", + "parent": "right_shoulder", + "pivot": [-5, 24, 0], + "rotation": [0, 0, -30], + "cubes": [ + {"origin": [-7, 19, -2], "size": [3, 6, 4], "uv": [0, 52]} + ] + }, + { + "name": "leftArm", + "parent": "main", + "pivot": [5, 24, 0], + "mirror": true, + "cubes": [ + {"origin": [4, 12, -1], "size": [2, 14, 2], "uv": [40, 16]} + ], + "locators": { + "leftarm": [5, 19, 0] + } + }, + { + "name": "leftItem", + "parent": "leftArm", + "pivot": [6, 17, 1] + }, + { + "name": "left_shoulder", + "parent": "leftArm", + "pivot": [5, 24, 0], + "rotation": [0, 0, -30], + "cubes": [ + {"origin": [4, 24, -2], "size": [4, 2, 4], "uv": [0, 40], "inflate": 0.2} + ] + }, + { + "name": "left_sleeve", + "parent": "left_shoulder", + "pivot": [5, 24, 0], + "rotation": [0, 0, 30], + "cubes": [ + {"origin": [4, 19, -2], "size": [3, 6, 4], "uv": [14, 52]} + ] + }, + { + "name": "rightLeg", + "parent": "body", + "pivot": [-2, 14, 0], + "cubes": [ + {"origin": [-3, 0, -1], "size": [2, 14, 2], "uv": [0, 16]} + ], + "locators": { + "rightleg": [-2, 8, 0] + } + }, + { + "name": "right_leggings", + "parent": "rightLeg", + "pivot": [-2, 14, 0], + "cubes": [ + {"origin": [-4, 2, -2], "size": [4, 12, 4], "uv": [64, 0]} + ] + }, + { + "name": "right_boots", + "parent": "rightLeg", + "pivot": [-2, 14, 0], + "cubes": [ + {"origin": [-4, 0, -2], "size": [4, 4, 4], "uv": [36, 54], "inflate": 0.2} + ] + }, + { + "name": "leftLeg", + "parent": "body", + "pivot": [2, 14, 0], + "mirror": true, + "cubes": [ + {"origin": [1, 0, -1], "size": [2, 14, 2], "uv": [0, 16]} + ], + "locators": { + "leftleg": [2, 8, 0] + } + }, + { + "name": "left_leggings", + "parent": "leftLeg", + "pivot": [2, 14, 0], + "cubes": [ + {"origin": [0, 2, -2], "size": [4, 12, 4], "uv": [80, 0]} + ] + }, + { + "name": "left_boots", + "parent": "leftLeg", + "pivot": [2, 2, 0], + "cubes": [ + {"origin": [0, 0, -2], "size": [4, 4, 4], "uv": [36, 54], "inflate": 0.2} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ash_knight_head.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ash_knight_head.geometry.json new file mode 100644 index 0000000..7b8a993 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ash_knight_head.geometry.json @@ -0,0 +1,53 @@ +{ + "format_version": "1.10.0", + "geometry.ash_knight_head": { + "texturewidth": 128, + "textureheight": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 3, + "visible_bounds_offset": [0, 1.5, 0], + "bones": [ + { + "name": "main", + "pivot": [0, 1, 0] + }, + { + "name": "head", + "parent": "main", + "pivot": [0, 1, 0], + "cubes": [ + {"origin": [-4, 1, -4], "size": [8, 8, 8], "uv": [0, 0]} + ], + "locators": { + "head": [0, 5, 0] + } + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 1, 0], + "cubes": [ + {"origin": [-4, 1, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + ] + }, + { + "name": "corner0", + "parent": "hat", + "pivot": [-4, 9, -4], + "rotation": [30, 0, -30], + "cubes": [ + {"origin": [-4.5, 8.25, -5.43301], "size": [2, 4, 2], "uv": [28, 54]} + ] + }, + { + "name": "corner1", + "parent": "hat", + "pivot": [4, 9, -4], + "rotation": [30, 0, 30], + "cubes": [ + {"origin": [3, 9, -5], "size": [2, 4, 2], "uv": [28, 54]} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ash_sword.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ash_sword.geometry.json new file mode 100644 index 0000000..0f3a19d --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ash_sword.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.ash_sword","texture_width":16,"texture_height":16,"visible_bounds_width":1,"visible_bounds_height":1,"visible_bounds_offset":[0,0,0]},"bones":[{"name":"main","pivot":[0,8,-11],"texture_meshes":[{"texture":"default","position":[0,0,0],"rotation":[0,45,0],"local_pivot":[8,1,8]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ash_sword_phantom.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ash_sword_phantom.geometry.json new file mode 100644 index 0000000..0f3a19d --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ash_sword_phantom.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.ash_sword","texture_width":16,"texture_height":16,"visible_bounds_width":1,"visible_bounds_height":1,"visible_bounds_offset":[0,0,0]},"bones":[{"name":"main","pivot":[0,8,-11],"texture_meshes":[{"texture":"default","position":[0,0,0],"rotation":[0,45,0],"local_pivot":[8,1,8]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/blackstone_thorn.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/blackstone_thorn.geometry.json new file mode 100644 index 0000000..cd624d1 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/blackstone_thorn.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.ice_thorn","texture_width":16,"texture_height":16,"visible_bounds_width":3,"visible_bounds_height":4,"visible_bounds_offset":[0,1,0]},"bones":[{"name":"main","pivot":[0,0,0],"cubes":[{"origin":[-5,0,-5],"size":[10,4,10],"uv":[0,0]},{"origin":[-4,4,-4],"size":[8,2,8],"uv":[0,0]},{"origin":[-3,6,-3],"size":[6,4,6],"uv":[0,0]},{"origin":[-2,10,-2],"size":[4,8,4],"uv":[0,0]},{"origin":[-1,18,-1],"size":[2,12,2],"uv":[0,0]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/chest_monster.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/chest_monster.geometry.json new file mode 100644 index 0000000..c043f5a --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/chest_monster.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.chester","texture_width":64,"texture_height":64,"visible_bounds_width":2,"visible_bounds_height":2.5,"visible_bounds_offset":[0,0.75,0]},"bones":[{"name":"global","pivot":[0,0,0],"cubes":[{"origin":[-5,0,-4],"size":[9,6,9],"uv":[0,0]}]},{"name":"up","parent":"global","pivot":[-0.5,5.75,5],"cubes":[{"origin":[-5,6,-4],"size":[9,3,9],"uv":[0,15]},{"origin":[-1,5,-5],"size":[1,2,1],"uv":[0,28]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/chester.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/chester.geometry.json new file mode 100644 index 0000000..c043f5a --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/chester.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.chester","texture_width":64,"texture_height":64,"visible_bounds_width":2,"visible_bounds_height":2.5,"visible_bounds_offset":[0,0.75,0]},"bones":[{"name":"global","pivot":[0,0,0],"cubes":[{"origin":[-5,0,-4],"size":[9,6,9],"uv":[0,0]}]},{"name":"up","parent":"global","pivot":[-0.5,5.75,5],"cubes":[{"origin":[-5,6,-4],"size":[9,3,9],"uv":[0,15]},{"origin":[-1,5,-5],"size":[1,2,1],"uv":[0,28]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/clam.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/clam.geometry.json new file mode 100644 index 0000000..2b20524 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/clam.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.clam","texture_width":64,"texture_height":64,"visible_bounds_width":2,"visible_bounds_height":1,"visible_bounds_offset":[0,0.5,0]},"bones":[{"name":"under","pivot":[0,0,0],"cubes":[{"origin":[-3,0,7],"size":[6,1,1],"uv":[0,0]},{"origin":[-2,0,6],"size":[4,1,1],"uv":[0,0]},{"origin":[-1,0,5],"size":[2,1,1],"uv":[0,0]},{"origin":[-2,-1,4],"size":[4,1,1],"uv":[0,0]},{"origin":[-3,-1,3],"size":[6,1,1],"uv":[0,0]},{"origin":[-4,-1,2],"size":[8,1,1],"uv":[0,0]},{"origin":[-5,-2,1],"size":[10,1,1],"uv":[0,0]},{"origin":[-5,-2,-5],"size":[10,1,1],"uv":[0,0]},{"origin":[-6,-2,0],"size":[12,1,1],"uv":[0,0]},{"origin":[-6,-2,-1],"size":[12,1,1],"uv":[0,0]},{"origin":[-6,-2,-2],"size":[12,1,1],"uv":[0,0]},{"origin":[-6,-2,-3],"size":[12,1,1],"uv":[0,0]},{"origin":[-6,-2,-4],"size":[12,1,1],"uv":[0,0]}]},{"name":"over","pivot":[0,0,0],"cubes":[{"origin":[-2,0,4],"size":[4,1,1],"uv":[0,0]},{"origin":[-2,0,4],"size":[4,1,1],"uv":[0,0]},{"origin":[-3,0,3],"size":[6,1,1],"uv":[0,0]},{"origin":[-4,0,2],"size":[8,1,1],"uv":[0,0]},{"origin":[-5,1,1],"size":[10,1,1],"uv":[0,0]},{"origin":[-6,1,0],"size":[12,1,1],"uv":[0,0]},{"origin":[-6,1,-1],"size":[12,1,1],"uv":[0,0]},{"origin":[-6,1,-3],"size":[12,1,1],"uv":[0,0]},{"origin":[-6,1,-4],"size":[12,1,1],"uv":[0,0]},{"origin":[-5,1,-5],"size":[10,1,1],"uv":[0,0]},{"origin":[-6,1,-2],"size":[12,1,1],"uv":[0,0]}]},{"name":"body","pivot":[0,0,0],"cubes":[{"origin":[-1,-1,-1],"size":[2,2,2],"uv":[0,0]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/crab.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/crab.geometry.json new file mode 100644 index 0000000..a71ddf1 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/crab.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.crab","texture_width":256,"texture_height":256,"visible_bounds_width":5,"visible_bounds_height":2,"visible_bounds_offset":[0,0,0]},"bones":[{"name":"bone","pivot":[3,19,-1],"rotation":[0,90,0],"cubes":[{"origin":[9.08552,10.48838,-8.19239],"size":[9,10,7],"pivot":[19.08552,3.48838,-8.19239],"rotation":[0,0,10],"uv":[78,78]},{"origin":[-15.24696,12.73674,-2.15486],"size":[13,10,10],"pivot":[-5.24696,4.73674,1.84514],"rotation":[0,-50,-10],"uv":[0,66]},{"origin":[-0.59565,10.78481,-12.97056],"size":[13,10,10],"pivot":[17.40435,3.78481,-8.97056],"rotation":[0,45,10],"uv":[50,56]},{"origin":[-27.01779,6.00269,-1.11902],"size":[13,4,4],"pivot":[-1,5.08462,6.03279],"rotation":[-10,5,30],"uv":[96,63]},{"origin":[-27.32054,4.79244,-7.9827],"size":[14,4,4],"pivot":[-1,5.08462,6.03279],"rotation":[-10,0,30],"uv":[80,11]},{"origin":[16.73462,4.90202,-0.88631],"size":[13,4,4],"pivot":[-1,5.08462,6.03279],"rotation":[-10,-5,-30],"uv":[32,93]},{"origin":[15.51782,8.3437,2.89915],"size":[13,4,4],"pivot":[-1,5.08462,6.03279],"rotation":[-10,-15,-30],"uv":[80,19]},{"origin":[16.90893,3.68517,-7.78746],"size":[13,4,4],"pivot":[-1,5.08462,6.03279],"rotation":[-10,0,-30],"uv":[86,55]},{"origin":[-27.18857,8.00959,4.50388],"size":[13,4,4],"pivot":[-1,5.08462,6.03279],"rotation":[-10,15,30],"uv":[66,95]},{"origin":[-11,12.08462,5.03279],"size":[23,10,7],"pivot":[-1,5.08462,6.03279],"rotation":[-10,0,0],"uv":[0,49]},{"origin":[-11,12,-12],"size":[23,10,3],"uv":[67,27]},{"origin":[-5,25,-11],"size":[2,7,3],"pivot":[5,18,-26],"rotation":[0,0,-25],"uv":[0,66]},{"origin":[3,17,-11],"size":[2,6,3],"pivot":[13,10,-26],"rotation":[0,0,30],"uv":[75,120]},{"origin":[-11,12,-9],"size":[23,10,17],"uv":[0,0]},{"origin":[-10,7.04798,9.90929],"size":[21,5,6],"pivot":[-1,-4.95202,9.90929],"rotation":[10,0,0],"uv":[63,0]},{"origin":[-12,10,-11],"size":[25,5,17],"pivot":[-1,-2,-11],"rotation":[-10,0,0],"uv":[0,27]},{"origin":[-16.23169,10.28628,-8.95858],"size":[9,10,7],"pivot":[-19.23169,3.28628,-8.95858],"rotation":[0,0,-10],"uv":[46,76]}],"locators":{"locator11":[-1,0,-7],"locator8":[-1,0,-7],"locator2":[-1,0,-9]}},{"name":"bone2","pivot":[-8,15,-14],"cubes":[{"origin":[-17,7,-8],"size":[10,6,6],"pivot":[11,-2,-10],"rotation":[0,-20,15],"uv":[0,86]}],"locators":{"locator3":[0,0,0]}},{"name":"bone3","pivot":[0,0,0]},{"name":"bone4","pivot":[-11,16,-15],"cubes":[{"origin":[-16,4,-16],"size":[4,14,5],"pivot":[-12,14,-13],"rotation":[35,0,35],"uv":[60,103]},{"origin":[-20.31709,6.71343,-10.96694],"size":[6,4,7],"pivot":[-15.31709,6.71343,-6.96694],"rotation":[10,0,0],"uv":[34,101]},{"origin":[-19.31709,0.7742,-6.27235],"size":[4,6,2],"pivot":[-15.31709,2.7742,-6.27235],"rotation":[10,0,0],"uv":[117,0]}],"locators":{"locator5":[0,0,0]}},{"name":"bone5","parent":"bone4","pivot":[-15.31709,2.7742,-6.27235],"cubes":[{"origin":[-19.31709,0.7742,-9.27235],"size":[4,6,3],"pivot":[-15.31709,2.7742,-7.27235],"rotation":[10,0,0],"uv":[36,66]}]},{"name":"bone6","pivot":[-11,17,12],"cubes":[{"origin":[-16,12,5],"size":[10,6,6],"pivot":[-6,14,8],"rotation":[0,20,15],"uv":[78,43]}],"locators":{"locator6":[0,0,0]}},{"name":"bone7","pivot":[-14,18,10],"cubes":[{"origin":[-16.67008,4.53339,9.02251],"size":[4,12,5],"pivot":[-12.67008,15.53339,13.02251],"rotation":[-40,0,35],"uv":[110,71]},{"origin":[-22.30518,9.03129,2.88767],"size":[6,4,6],"uv":[104,89]},{"origin":[-22.30518,3.03129,2.88767],"size":[6,7,3],"uv":[119,22]},{"origin":[-22.30518,3.03129,5.88767],"size":[6,7,3],"pivot":[-16.30518,9.03129,9.88767],"rotation":[10,0,0],"uv":[112,99]}],"locators":{"locator7":[0,0,0]}},{"name":"bone8","pivot":[0,0,0]},{"name":"bone9","pivot":[0,23,-24],"cubes":[{"origin":[-3.12592,8.58788,-25.21274],"size":[4,15,5],"pivot":[0.87408,21.58788,-21.21274],"rotation":[-25,0,0],"uv":[16,98]},{"origin":[-3.12592,-0.50364,-30.33201],"size":[4,12,5],"uv":[78,103]}],"locators":{"locator9":[0,0,0]}},{"name":"bone10","pivot":[9,21,-21],"cubes":[{"origin":[6,-0.35641,-31.59808],"size":[4,11,4],"uv":[110,40]},{"origin":[6,7,-24],"size":[4,17,4],"pivot":[7,23,-21],"rotation":[-30,0,0],"uv":[96,99]}],"locators":{"locator10":[0,0,0]}},{"name":"bone11","pivot":[19,23,-22],"cubes":[{"origin":[15.71427,8.26182,-21.68328],"size":[4,19,4],"pivot":[16.71427,26.26182,-21.68328],"rotation":[-30,0,0],"uv":[0,98]},{"origin":[15.71427,-0.32663,-30.68328],"size":[4,11,4],"uv":[0,27]}]},{"name":"bone12","pivot":[-2,18,25],"cubes":[{"origin":[-4,9,22],"size":[4,11,3],"pivot":[0,19,22],"rotation":[25,0,0],"uv":[48,119]},{"origin":[-4,0.20478,25.94511],"size":[4,11,3],"uv":[13,118]}],"locators":{"locator12":[0,0,0]}},{"name":"bone13","pivot":[8,22,23],"cubes":[{"origin":[6,8,22],"size":[4,14,3],"pivot":[10,20,22],"rotation":[30,0,0],"uv":[0,0]},{"origin":[6,0.1077,27.59808],"size":[4,11,3],"uv":[116,8]}],"locators":{"locator13":[0,0,0]}},{"name":"bone14","pivot":[18,22,22],"cubes":[{"origin":[16,13,24],"size":[4,11,3],"pivot":[19,13,26],"rotation":[25,0,0],"uv":[112,112]},{"origin":[16,0,24],"size":[4,13,3],"uv":[34,112]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/dark_werewolf.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/dark_werewolf.geometry.json new file mode 100644 index 0000000..16e99d2 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/dark_werewolf.geometry.json @@ -0,0 +1,84 @@ +{ + "format_version": "1.10.0", + "geometry.werewolf": { + "texturewidth": 64, + "textureheight": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2, + "visible_bounds_offset": [0, 1, 0], + "bones": [ + { + "name": "waist", + "pivot": [0, 12, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 12, -2], "size": [8, 12, 4], "uv": [16, 16]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 24, -4], "size": [8, 8, 8], "uv": [0, 0]}, + {"origin": [-4, 24, -4], "size": [8, 8, 8], "uv": [0, 0]}, + {"origin": [-2, 25, -8], "size": [4, 3, 4], "uv": [24, 0]}, + {"origin": [-1, 28, -8], "size": [1, 1, 1], "uv": [0, 0]}, + {"origin": [0, 28, -8], "size": [1, 1, 1], "uv": [0, 0]}, + {"origin": [-5, 31, 1], "size": [2, 3, 1], "uv": [12, 0]}, + {"origin": [3, 31, 1], "size": [2, 3, 1], "uv": [12, 0]} + ] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-5, 22, 0], + "cubes": [ + {"origin": [-8, 12, -2], "size": [4, 12, 4], "uv": [40, 16]} + ] + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-6, 15, 1] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [5, 22, 0], + "mirror": true, + "cubes": [ + {"origin": [4, 12, -2], "size": [4, 12, 4], "uv": [40, 16]} + ] + }, + { + "name": "rightLeg", + "pivot": [-1.9, 12, 0], + "cubes": [ + {"origin": [-3.9, 0, -2], "size": [4, 12, 4], "uv": [0, 16]} + ] + }, + { + "name": "leftLeg", + "pivot": [1.9, 12, 0], + "mirror": true, + "cubes": [ + {"origin": [-0.1, 0, -2], "size": [4, 12, 4], "uv": [0, 16]} + ] + }, + { + "name": "bone", + "parent": "body", + "pivot": [0, 0, 0], + "rotation": [10, 0, 0], + "cubes": [ + {"origin": [-1, 12, 3], "size": [2, 2, 7], "uv": [8, 0]} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ender_snail.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ender_snail.geometry.json new file mode 100644 index 0000000..b90aef6 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ender_snail.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.snail","texture_width":32,"texture_height":32,"visible_bounds_width":2,"visible_bounds_height":1,"visible_bounds_offset":[0,0.5,0]},"bones":[{"name":"global","pivot":[0,3,0]},{"name":"shell","parent":"global","pivot":[0,0,0],"cubes":[{"origin":[-2,1,-1],"size":[4,5,5],"uv":[0,10]}]},{"name":"body","parent":"global","pivot":[0,0,0],"cubes":[{"origin":[-1,0,-3],"size":[2,1,8],"uv":[0,0]},{"origin":[-1,1,-3],"size":[2,3,2],"pivot":[0,0,0],"rotation":[5,0,0],"uv":[13,0]}]},{"name":"head","parent":"global","pivot":[0,4,-3]},{"name":"right_eye","parent":"head","pivot":[0,4,-3],"rotation":[0,0,-12.5],"cubes":[{"origin":[-1,3,-3],"size":[1,3,0],"uv":[5,4]},{"origin":[-1,6,-4],"size":[1,1,1],"uv":[0,3]}]},{"name":"left_eye","parent":"head","pivot":[0,4,-3],"rotation":[0,0,12.5],"cubes":[{"origin":[0,3,-3],"size":[1,3,0],"uv":[5,0]},{"origin":[0,6,-4],"size":[1,1,1],"uv":[0,0]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ender_snake.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ender_snake.geometry.json new file mode 100644 index 0000000..1bf4e45 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ender_snake.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.ender_snake","texture_width":64,"texture_height":64,"visible_bounds_width":4,"visible_bounds_height":3,"visible_bounds_offset":[0,0.5,0]},"bones":[{"name":"head_bone","pivot":[0,3,-3],"cubes":[{"origin":[-5,4,-15],"size":[10,0,16],"uv":[-16,48]},{"origin":[-5,1,-15],"size":[10,7,16],"uv":[0,0]}]},{"name":"horn","parent":"head_bone","pivot":[0,8,1],"rotation":[-65,0,0],"cubes":[{"origin":[-6,8,1],"size":[12,10,0],"uv":[38,4]}]},{"name":"horn2","parent":"head_bone","pivot":[5,4,0],"cubes":[{"origin":[0,5,0],"size":[12,10,0],"pivot":[5,5,0],"rotation":[-60,0,90],"uv":[38,4]}]},{"name":"horn3","parent":"head_bone","pivot":[-5,4,0],"rotation":[-180,0,180],"cubes":[{"origin":[-10,5,0],"size":[12,10,0],"pivot":[-5,5,0],"rotation":[60,0,90],"uv":[38,4]}]},{"name":"jaw","parent":"head_bone","pivot":[0,3,0],"cubes":[{"origin":[-5,0,-15],"size":[10,4,16],"uv":[0,24]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/entity_soul.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/entity_soul.geometry.json new file mode 100644 index 0000000..367eba6 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/entity_soul.geometry.json @@ -0,0 +1,250 @@ +{ + "format_version": "1.10.0", + "geometry.escaped_soul": { + "texturewidth": 128, + "textureheight": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 4, + "visible_bounds_offset": [0, 2, 0], + "bones": [ + { + "name": "root", + "pivot": [0, 19, 0], + "locators": { + "particles_point": [0, 19, 0] + } + }, + { + "name": "waist", + "parent": "root", + "pivot": [0, 15, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 21, 0], + "cubes": [ + {"origin": [-6, 21, -2], "size": [12, 12, 4], "uv": [36, 0]}, + {"origin": [-5, 15, -2], "size": [10, 6, 4], "uv": [52, 34], "inflate": -0.01}, + {"origin": [-5, 11, 2], "size": [10, 4, 0], "uv": [56, 56]}, + {"origin": [5, 11, -2], "size": [0, 4, 4], "uv": [0, 10]}, + {"origin": [-5, 11, -2], "size": [0, 4, 4], "uv": [0, 0]}, + {"origin": [-5, 11, -2], "size": [10, 4, 0], "uv": [56, 52]}, + {"origin": [-4, 24, -4], "size": [8, 8, 6], "uv": [48, 16], "inflate": -1}, + {"origin": [-6, 17, -2], "size": [12, 4, 0], "uv": [56, 30]}, + {"origin": [-6, 17, 2], "size": [12, 4, 0], "uv": [24, 16]}, + {"origin": [-6, 17, -2], "size": [0, 4, 4], "uv": [28, 0]}, + {"origin": [6, 17, -2], "size": [0, 4, 4], "uv": [0, 14]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 33, 0] + }, + { + "name": "maxilla", + "parent": "head", + "pivot": [0, 33, 0], + "cubes": [ + {"origin": [-5, 35, -4], "size": [10, 6, 8], "uv": [0, 0]}, + {"origin": [-5, 33, -4], "size": [10, 2, 0], "uv": [60, 62], "inflate": -0.01}, + {"origin": [-5, 33, 4], "size": [10, 2, 0], "uv": [56, 60], "inflate": -0.01}, + {"origin": [5, 33, -4], "size": [0, 2, 8], "uv": [20, 50], "inflate": -0.01}, + {"origin": [-5, 33, -4], "size": [0, 2, 8], "uv": [20, 48], "inflate": -0.01} + ] + }, + { + "name": "royal_crown", + "parent": "maxilla", + "pivot": [0, 7, 0], + "cubes": [ + {"origin": [-4, 41, 2], "size": [8, 2, 2], "uv": [56, 48]}, + {"origin": [2, 43, -4], "size": [2, 2, 2], "uv": [46, 18]}, + {"origin": [-1, 43, -4], "size": [2, 4, 2], "uv": [0, 38]}, + {"origin": [-4, 43, -4], "size": [2, 2, 2], "uv": [0, 0]}, + {"origin": [2, 41, -2], "size": [2, 2, 4], "uv": [20, 64]}, + {"origin": [-4, 41, -2], "size": [2, 2, 4], "uv": [28, 38]}, + {"origin": [-4, 41, -4], "size": [8, 2, 2], "uv": [56, 44]} + ] + }, + { + "name": "maxilla0", + "parent": "head", + "pivot": [0, 33, 0], + "cubes": [ + {"origin": [-5, 33, -4], "size": [10, 2, 8], "uv": [0, 38], "inflate": 0.01}, + {"origin": [5, 31, -4], "size": [0, 2, 8], "uv": [20, 46], "inflate": -0.01}, + {"origin": [-5, 31, -4], "size": [0, 2, 8], "uv": [24, 12], "inflate": -0.01}, + {"origin": [-5, 31, -4], "size": [10, 2, 0], "uv": [40, 62], "inflate": -0.01}, + {"origin": [-5, 31, 4], "size": [10, 2, 0], "uv": [20, 62], "inflate": -0.01} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 33, 0] + }, + { + "name": "cape", + "parent": "body", + "pivot": [0, 31, 3] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [7, 29, 0], + "cubes": [ + {"origin": [6, 15, -3], "size": [4, 18, 6], "uv": [0, 48]} + ] + }, + { + "name": "left_shoulder", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [0, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -0.99} + ] + }, + { + "name": "left_shoulder4", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "left_shoulder3", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [-45, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "left_shoulder2", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [45, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "leftSleeve", + "parent": "leftArm", + "pivot": [7, 29, 0] + }, + { + "name": "leftItem", + "parent": "leftArm", + "pivot": [8, 22, 1] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-7, 29, 0], + "cubes": [ + {"origin": [-10, 15, -3], "size": [4, 18, 6], "uv": [36, 38]} + ] + }, + { + "name": "rightSleeve", + "parent": "rightArm", + "pivot": [-7, 29, 0] + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-8, 22, 1], + "locators": { + "lead_hold": [-8, 22, 1] + } + }, + { + "name": "right_shoulder", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [0, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -0.99}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -0.99} + ] + }, + { + "name": "right_shoulder4", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "right_shoulder3", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [-45, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "right_shoulder2", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [45, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "jacket", + "parent": "body", + "pivot": [0, 31, 0] + }, + { + "name": "leg", + "parent": "root", + "pivot": [0, 19, 0] + }, + { + "name": "leg0", + "parent": "leg", + "pivot": [0, 17, 0] + }, + { + "name": "leg1", + "parent": "leg0", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-4, 9, -2], "size": [8, 4, 4], "uv": [0, 30], "inflate": -0.01} + ] + }, + { + "name": "leg2", + "parent": "leg1", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-3, 6, -2], "size": [6, 2, 4], "uv": [14, 48], "inflate": -0.01} + ] + }, + { + "name": "leg3", + "parent": "leg2", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-2, 3, -1], "size": [4, 2, 2], "uv": [28, 0], "inflate": -0.01}, + {"origin": [-1, 0, -1], "size": [2, 2, 2], "uv": [64, 0], "inflate": -0.01} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/entity_soul_1.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/entity_soul_1.geometry.json new file mode 100644 index 0000000..367eba6 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/entity_soul_1.geometry.json @@ -0,0 +1,250 @@ +{ + "format_version": "1.10.0", + "geometry.escaped_soul": { + "texturewidth": 128, + "textureheight": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 4, + "visible_bounds_offset": [0, 2, 0], + "bones": [ + { + "name": "root", + "pivot": [0, 19, 0], + "locators": { + "particles_point": [0, 19, 0] + } + }, + { + "name": "waist", + "parent": "root", + "pivot": [0, 15, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 21, 0], + "cubes": [ + {"origin": [-6, 21, -2], "size": [12, 12, 4], "uv": [36, 0]}, + {"origin": [-5, 15, -2], "size": [10, 6, 4], "uv": [52, 34], "inflate": -0.01}, + {"origin": [-5, 11, 2], "size": [10, 4, 0], "uv": [56, 56]}, + {"origin": [5, 11, -2], "size": [0, 4, 4], "uv": [0, 10]}, + {"origin": [-5, 11, -2], "size": [0, 4, 4], "uv": [0, 0]}, + {"origin": [-5, 11, -2], "size": [10, 4, 0], "uv": [56, 52]}, + {"origin": [-4, 24, -4], "size": [8, 8, 6], "uv": [48, 16], "inflate": -1}, + {"origin": [-6, 17, -2], "size": [12, 4, 0], "uv": [56, 30]}, + {"origin": [-6, 17, 2], "size": [12, 4, 0], "uv": [24, 16]}, + {"origin": [-6, 17, -2], "size": [0, 4, 4], "uv": [28, 0]}, + {"origin": [6, 17, -2], "size": [0, 4, 4], "uv": [0, 14]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 33, 0] + }, + { + "name": "maxilla", + "parent": "head", + "pivot": [0, 33, 0], + "cubes": [ + {"origin": [-5, 35, -4], "size": [10, 6, 8], "uv": [0, 0]}, + {"origin": [-5, 33, -4], "size": [10, 2, 0], "uv": [60, 62], "inflate": -0.01}, + {"origin": [-5, 33, 4], "size": [10, 2, 0], "uv": [56, 60], "inflate": -0.01}, + {"origin": [5, 33, -4], "size": [0, 2, 8], "uv": [20, 50], "inflate": -0.01}, + {"origin": [-5, 33, -4], "size": [0, 2, 8], "uv": [20, 48], "inflate": -0.01} + ] + }, + { + "name": "royal_crown", + "parent": "maxilla", + "pivot": [0, 7, 0], + "cubes": [ + {"origin": [-4, 41, 2], "size": [8, 2, 2], "uv": [56, 48]}, + {"origin": [2, 43, -4], "size": [2, 2, 2], "uv": [46, 18]}, + {"origin": [-1, 43, -4], "size": [2, 4, 2], "uv": [0, 38]}, + {"origin": [-4, 43, -4], "size": [2, 2, 2], "uv": [0, 0]}, + {"origin": [2, 41, -2], "size": [2, 2, 4], "uv": [20, 64]}, + {"origin": [-4, 41, -2], "size": [2, 2, 4], "uv": [28, 38]}, + {"origin": [-4, 41, -4], "size": [8, 2, 2], "uv": [56, 44]} + ] + }, + { + "name": "maxilla0", + "parent": "head", + "pivot": [0, 33, 0], + "cubes": [ + {"origin": [-5, 33, -4], "size": [10, 2, 8], "uv": [0, 38], "inflate": 0.01}, + {"origin": [5, 31, -4], "size": [0, 2, 8], "uv": [20, 46], "inflate": -0.01}, + {"origin": [-5, 31, -4], "size": [0, 2, 8], "uv": [24, 12], "inflate": -0.01}, + {"origin": [-5, 31, -4], "size": [10, 2, 0], "uv": [40, 62], "inflate": -0.01}, + {"origin": [-5, 31, 4], "size": [10, 2, 0], "uv": [20, 62], "inflate": -0.01} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 33, 0] + }, + { + "name": "cape", + "parent": "body", + "pivot": [0, 31, 3] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [7, 29, 0], + "cubes": [ + {"origin": [6, 15, -3], "size": [4, 18, 6], "uv": [0, 48]} + ] + }, + { + "name": "left_shoulder", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [0, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -0.99} + ] + }, + { + "name": "left_shoulder4", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "left_shoulder3", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [-45, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "left_shoulder2", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [45, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "leftSleeve", + "parent": "leftArm", + "pivot": [7, 29, 0] + }, + { + "name": "leftItem", + "parent": "leftArm", + "pivot": [8, 22, 1] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-7, 29, 0], + "cubes": [ + {"origin": [-10, 15, -3], "size": [4, 18, 6], "uv": [36, 38]} + ] + }, + { + "name": "rightSleeve", + "parent": "rightArm", + "pivot": [-7, 29, 0] + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-8, 22, 1], + "locators": { + "lead_hold": [-8, 22, 1] + } + }, + { + "name": "right_shoulder", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [0, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -0.99}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -0.99} + ] + }, + { + "name": "right_shoulder4", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "right_shoulder3", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [-45, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "right_shoulder2", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [45, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "jacket", + "parent": "body", + "pivot": [0, 31, 0] + }, + { + "name": "leg", + "parent": "root", + "pivot": [0, 19, 0] + }, + { + "name": "leg0", + "parent": "leg", + "pivot": [0, 17, 0] + }, + { + "name": "leg1", + "parent": "leg0", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-4, 9, -2], "size": [8, 4, 4], "uv": [0, 30], "inflate": -0.01} + ] + }, + { + "name": "leg2", + "parent": "leg1", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-3, 6, -2], "size": [6, 2, 4], "uv": [14, 48], "inflate": -0.01} + ] + }, + { + "name": "leg3", + "parent": "leg2", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-2, 3, -1], "size": [4, 2, 2], "uv": [28, 0], "inflate": -0.01}, + {"origin": [-1, 0, -1], "size": [2, 2, 2], "uv": [64, 0], "inflate": -0.01} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/escaped_soul_entity.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/escaped_soul_entity.geometry.json new file mode 100644 index 0000000..367eba6 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/escaped_soul_entity.geometry.json @@ -0,0 +1,250 @@ +{ + "format_version": "1.10.0", + "geometry.escaped_soul": { + "texturewidth": 128, + "textureheight": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 4, + "visible_bounds_offset": [0, 2, 0], + "bones": [ + { + "name": "root", + "pivot": [0, 19, 0], + "locators": { + "particles_point": [0, 19, 0] + } + }, + { + "name": "waist", + "parent": "root", + "pivot": [0, 15, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 21, 0], + "cubes": [ + {"origin": [-6, 21, -2], "size": [12, 12, 4], "uv": [36, 0]}, + {"origin": [-5, 15, -2], "size": [10, 6, 4], "uv": [52, 34], "inflate": -0.01}, + {"origin": [-5, 11, 2], "size": [10, 4, 0], "uv": [56, 56]}, + {"origin": [5, 11, -2], "size": [0, 4, 4], "uv": [0, 10]}, + {"origin": [-5, 11, -2], "size": [0, 4, 4], "uv": [0, 0]}, + {"origin": [-5, 11, -2], "size": [10, 4, 0], "uv": [56, 52]}, + {"origin": [-4, 24, -4], "size": [8, 8, 6], "uv": [48, 16], "inflate": -1}, + {"origin": [-6, 17, -2], "size": [12, 4, 0], "uv": [56, 30]}, + {"origin": [-6, 17, 2], "size": [12, 4, 0], "uv": [24, 16]}, + {"origin": [-6, 17, -2], "size": [0, 4, 4], "uv": [28, 0]}, + {"origin": [6, 17, -2], "size": [0, 4, 4], "uv": [0, 14]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 33, 0] + }, + { + "name": "maxilla", + "parent": "head", + "pivot": [0, 33, 0], + "cubes": [ + {"origin": [-5, 35, -4], "size": [10, 6, 8], "uv": [0, 0]}, + {"origin": [-5, 33, -4], "size": [10, 2, 0], "uv": [60, 62], "inflate": -0.01}, + {"origin": [-5, 33, 4], "size": [10, 2, 0], "uv": [56, 60], "inflate": -0.01}, + {"origin": [5, 33, -4], "size": [0, 2, 8], "uv": [20, 50], "inflate": -0.01}, + {"origin": [-5, 33, -4], "size": [0, 2, 8], "uv": [20, 48], "inflate": -0.01} + ] + }, + { + "name": "royal_crown", + "parent": "maxilla", + "pivot": [0, 7, 0], + "cubes": [ + {"origin": [-4, 41, 2], "size": [8, 2, 2], "uv": [56, 48]}, + {"origin": [2, 43, -4], "size": [2, 2, 2], "uv": [46, 18]}, + {"origin": [-1, 43, -4], "size": [2, 4, 2], "uv": [0, 38]}, + {"origin": [-4, 43, -4], "size": [2, 2, 2], "uv": [0, 0]}, + {"origin": [2, 41, -2], "size": [2, 2, 4], "uv": [20, 64]}, + {"origin": [-4, 41, -2], "size": [2, 2, 4], "uv": [28, 38]}, + {"origin": [-4, 41, -4], "size": [8, 2, 2], "uv": [56, 44]} + ] + }, + { + "name": "maxilla0", + "parent": "head", + "pivot": [0, 33, 0], + "cubes": [ + {"origin": [-5, 33, -4], "size": [10, 2, 8], "uv": [0, 38], "inflate": 0.01}, + {"origin": [5, 31, -4], "size": [0, 2, 8], "uv": [20, 46], "inflate": -0.01}, + {"origin": [-5, 31, -4], "size": [0, 2, 8], "uv": [24, 12], "inflate": -0.01}, + {"origin": [-5, 31, -4], "size": [10, 2, 0], "uv": [40, 62], "inflate": -0.01}, + {"origin": [-5, 31, 4], "size": [10, 2, 0], "uv": [20, 62], "inflate": -0.01} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 33, 0] + }, + { + "name": "cape", + "parent": "body", + "pivot": [0, 31, 3] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [7, 29, 0], + "cubes": [ + {"origin": [6, 15, -3], "size": [4, 18, 6], "uv": [0, 48]} + ] + }, + { + "name": "left_shoulder", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [0, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -0.99} + ] + }, + { + "name": "left_shoulder4", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "left_shoulder3", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [-45, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "left_shoulder2", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [45, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "leftSleeve", + "parent": "leftArm", + "pivot": [7, 29, 0] + }, + { + "name": "leftItem", + "parent": "leftArm", + "pivot": [8, 22, 1] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-7, 29, 0], + "cubes": [ + {"origin": [-10, 15, -3], "size": [4, 18, 6], "uv": [36, 38]} + ] + }, + { + "name": "rightSleeve", + "parent": "rightArm", + "pivot": [-7, 29, 0] + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-8, 22, 1], + "locators": { + "lead_hold": [-8, 22, 1] + } + }, + { + "name": "right_shoulder", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [0, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -0.99}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -0.99} + ] + }, + { + "name": "right_shoulder4", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "right_shoulder3", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [-45, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "right_shoulder2", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [45, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "jacket", + "parent": "body", + "pivot": [0, 31, 0] + }, + { + "name": "leg", + "parent": "root", + "pivot": [0, 19, 0] + }, + { + "name": "leg0", + "parent": "leg", + "pivot": [0, 17, 0] + }, + { + "name": "leg1", + "parent": "leg0", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-4, 9, -2], "size": [8, 4, 4], "uv": [0, 30], "inflate": -0.01} + ] + }, + { + "name": "leg2", + "parent": "leg1", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-3, 6, -2], "size": [6, 2, 4], "uv": [14, 48], "inflate": -0.01} + ] + }, + { + "name": "leg3", + "parent": "leg2", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-2, 3, -1], "size": [4, 2, 2], "uv": [28, 0], "inflate": -0.01}, + {"origin": [-1, 0, -1], "size": [2, 2, 2], "uv": [64, 0], "inflate": -0.01} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/everlasting_winter_ghast.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/everlasting_winter_ghast.geometry.json new file mode 100644 index 0000000..df92392 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/everlasting_winter_ghast.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.everlasting_winter_ghast","texture_width":128,"texture_height":128,"visible_bounds_width":3,"visible_bounds_height":28,"visible_bounds_offset":[0,-11,0]},"bones":[{"name":"root","pivot":[0,0,0]},{"name":"waist","parent":"root","pivot":[0,12,0]},{"name":"body","parent":"waist","pivot":[0,24,0],"cubes":[{"origin":[-4,12,-2],"size":[8,12,4],"uv":[16,16]},{"origin":[-4,12,-2],"size":[8,12,4],"inflate":0.25,"uv":[16,32]}]},{"name":"head","parent":"body","pivot":[0,24,0],"cubes":[{"origin":[-4,24,-4],"size":[8,8,8],"uv":[0,0]},{"origin":[-4,24,-4],"size":[8,8,8],"inflate":0.5,"uv":[32,0]}]},{"name":"leftArm","parent":"body","pivot":[5,21.5,0],"cubes":[{"origin":[4,11.5,-2],"size":[3,12,4],"uv":[32,48]},{"origin":[4,11.5,-2],"size":[3,12,4],"inflate":0.25,"uv":[48,48]}]},{"name":"leftItem","parent":"leftArm","pivot":[6,14.5,1]},{"name":"rightArm","parent":"body","pivot":[-5,21.5,0],"cubes":[{"origin":[-7,11.5,-2],"size":[3,12,4],"uv":[40,16]},{"origin":[-7,11.5,-2],"size":[3,12,4],"inflate":0.25,"uv":[40,32]}]},{"name":"rightItem","parent":"rightArm","pivot":[-6,14.5,1],"locators":{"lead_hold":[-6,14.5,1]}},{"name":"rightLeg","parent":"root","pivot":[-1.9,12,0],"cubes":[{"origin":[-3.9,0,-2],"size":[4,12,4],"uv":[0,16]},{"origin":[-3.9,0,-2],"size":[4,12,4],"inflate":0.25,"uv":[0,32]}]},{"name":"leftLeg","parent":"root","pivot":[1.9,12,0],"cubes":[{"origin":[-0.1,0,-2],"size":[4,12,4],"uv":[16,48]},{"origin":[-0.1,0,-2],"size":[4,12,4],"inflate":0.25,"uv":[0,48]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/everlasting_winter_shadow.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/everlasting_winter_shadow.geometry.json new file mode 100644 index 0000000..df92392 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/everlasting_winter_shadow.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.everlasting_winter_ghast","texture_width":128,"texture_height":128,"visible_bounds_width":3,"visible_bounds_height":28,"visible_bounds_offset":[0,-11,0]},"bones":[{"name":"root","pivot":[0,0,0]},{"name":"waist","parent":"root","pivot":[0,12,0]},{"name":"body","parent":"waist","pivot":[0,24,0],"cubes":[{"origin":[-4,12,-2],"size":[8,12,4],"uv":[16,16]},{"origin":[-4,12,-2],"size":[8,12,4],"inflate":0.25,"uv":[16,32]}]},{"name":"head","parent":"body","pivot":[0,24,0],"cubes":[{"origin":[-4,24,-4],"size":[8,8,8],"uv":[0,0]},{"origin":[-4,24,-4],"size":[8,8,8],"inflate":0.5,"uv":[32,0]}]},{"name":"leftArm","parent":"body","pivot":[5,21.5,0],"cubes":[{"origin":[4,11.5,-2],"size":[3,12,4],"uv":[32,48]},{"origin":[4,11.5,-2],"size":[3,12,4],"inflate":0.25,"uv":[48,48]}]},{"name":"leftItem","parent":"leftArm","pivot":[6,14.5,1]},{"name":"rightArm","parent":"body","pivot":[-5,21.5,0],"cubes":[{"origin":[-7,11.5,-2],"size":[3,12,4],"uv":[40,16]},{"origin":[-7,11.5,-2],"size":[3,12,4],"inflate":0.25,"uv":[40,32]}]},{"name":"rightItem","parent":"rightArm","pivot":[-6,14.5,1],"locators":{"lead_hold":[-6,14.5,1]}},{"name":"rightLeg","parent":"root","pivot":[-1.9,12,0],"cubes":[{"origin":[-3.9,0,-2],"size":[4,12,4],"uv":[0,16]},{"origin":[-3.9,0,-2],"size":[4,12,4],"inflate":0.25,"uv":[0,32]}]},{"name":"leftLeg","parent":"root","pivot":[1.9,12,0],"cubes":[{"origin":[-0.1,0,-2],"size":[4,12,4],"uv":[16,48]},{"origin":[-0.1,0,-2],"size":[4,12,4],"inflate":0.25,"uv":[0,48]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/friendly_little_soul.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/friendly_little_soul.geometry.json new file mode 100644 index 0000000..31bdad1 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/friendly_little_soul.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.little_soul","texture_width":64,"texture_height":64,"visible_bounds_width":5,"visible_bounds_height":5.5,"visible_bounds_offset":[0,1.25,0]},"bones":[{"name":"root","pivot":[0,0,0]},{"name":"waist","parent":"root","pivot":[0,12,0]},{"name":"body","parent":"waist","pivot":[1,24,0],"cubes":[{"origin":[-4,12,-4],"size":[8,10,8],"uv":[0,0]},{"origin":[-4,9,-4],"size":[8,3,0],"uv":[24,3]},{"origin":[-4,9,4],"size":[8,3,0],"uv":[24,0]},{"origin":[4,9,-4],"size":[0,3,8],"uv":[0,13]},{"origin":[-4,9,-4],"size":[0,3,8],"uv":[0,10]}]},{"name":"head","parent":"body","pivot":[1,24,0]},{"name":"hat","parent":"head","pivot":[1,24,0]},{"name":"leftArm","parent":"body","pivot":[3,16,-1],"cubes":[{"origin":[3.5,15,-2],"size":[6,2,2],"pivot":[3,16,-1],"rotation":[0,45,0],"uv":[14,22]}]},{"name":"rightArm","parent":"body","pivot":[-4,16,-1],"cubes":[{"origin":[-9,15,-1.29289],"size":[6,2,2],"pivot":[-2,16,-1],"rotation":[0,-45,0],"uv":[16,18]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/frozen_heart.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/frozen_heart.geometry.json new file mode 100644 index 0000000..748489e --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/frozen_heart.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.frozen_heart","texture_width":64,"texture_height":64,"visible_bounds_width":3,"visible_bounds_height":2.5,"visible_bounds_offset":[0,0.75,0]},"bones":[{"name":"head","pivot":[0,8,0]},{"name":"head_cube","parent":"head","pivot":[0,0,0],"cubes":[{"origin":[-8,0,-8],"size":[16,16,16],"uv":[0,0]}]},{"name":"tentacle","parent":"head","pivot":[0,0,0]},{"name":"down","parent":"tentacle","pivot":[0,0,0],"cubes":[{"origin":[-1,-8,-1],"size":[2,8,2],"pivot":[0,8,0],"rotation":[15,0,0],"uv":[0,0]}]},{"name":"up","parent":"tentacle","pivot":[0,16,0],"cubes":[{"origin":[-1,-8,-1],"size":[2,8,2],"pivot":[0,8,0],"rotation":[165,0,0],"uv":[0,0]}]},{"name":"left","parent":"tentacle","pivot":[8,8,0],"cubes":[{"origin":[-1,-8,-1],"size":[2,8,2],"pivot":[0,8,0],"rotation":[15,0,-90],"uv":[0,0]}]},{"name":"right","parent":"tentacle","pivot":[-8,8,0],"cubes":[{"origin":[-1,-8,-1],"size":[2,8,2],"pivot":[0,8,0],"rotation":[15,0,90],"uv":[0,0]}]},{"name":"behind","parent":"tentacle","pivot":[0,8,8],"cubes":[{"origin":[-1,-8,-1],"size":[2,8,2],"pivot":[0,8,0],"rotation":[90,0,0],"uv":[0,0]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/frozen_heart_sleeping.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/frozen_heart_sleeping.geometry.json new file mode 100644 index 0000000..404651c --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/frozen_heart_sleeping.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.block","texture_width":128,"texture_height":128,"visible_bounds_width":3,"visible_bounds_height":3,"visible_bounds_offset":[0,1.5,0]},"bones":[{"name":"bone","pivot":[0,0,0],"cubes":[{"origin":[-16,0,-16],"size":[32,32,32],"uv":[0,0]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/frozen_shadow.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/frozen_shadow.geometry.json new file mode 100644 index 0000000..c1ec288 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/frozen_shadow.geometry.json @@ -0,0 +1,111 @@ +{ + "format_version": "1.8.0", + "geometry.cuteboi": { + "visible_bounds_width": 1, + "visible_bounds_height": 2, + "visible_bounds_offset": [0, 1, 0], + "bones": [{ + "name": "root", + "pivot": [0.0, 0.0, 0.0] + }, { + "name": "waist", + "parent": "root", + "pivot": [0.0, 12.0, 0.0] + }, { + "name": "body", + "parent": "waist", + "pivot": [0.0, 24.0, 0.0], + "cubes": [{ + "origin": [-4.0, 12.0, -2.0], + "size": [8, 12, 4], + "uv": [16, 16] + }, { + "origin": [-4.0, 12.0, -2.0], + "size": [8, 12, 4], + "uv": [16, 32], + "inflate": 0.25 + }] + }, { + "name": "head", + "parent": "body", + "pivot": [0.0, 24.0, 0.0], + "cubes": [{ + "origin": [-4.0, 24.0, -4.0], + "size": [8, 8, 8], + "uv": [0, 0] + }, { + "origin": [-4.0, 24.0, -4.0], + "size": [8, 8, 8], + "uv": [32, 0], + "inflate": 0.5 + }] + }, { + "name": "rightLeg", + "parent": "root", + "pivot": [-1.9, 12.0, 0.0], + "cubes": [{ + "origin": [-3.9, 0.0, -2.0], + "size": [4, 12, 4], + "uv": [0, 16] + }, { + "origin": [-3.9, 0.0, -2.0], + "size": [4, 12, 4], + "uv": [0, 32], + "inflate": 0.25 + }] + }, { + "name": "leftLeg", + "parent": "root", + "pivot": [1.9, 12.0, 0.0], + "cubes": [{ + "origin": [-0.1, 0.0, -2.0], + "size": [4, 12, 4], + "uv": [16, 48] + }, { + "origin": [-0.1, 0.0, -2.0], + "size": [4, 12, 4], + "uv": [0, 48], + "inflate": 0.25 + }] + }, { + "name": "leftArm", + "parent": "body", + "pivot": [5.0, 21.5, 0.0], + "cubes": [{ + "origin": [4.0, 11.5, -2.0], + "size": [3, 12, 4], + "uv": [32, 48] + }, { + "origin": [4.0, 11.5, -2.0], + "size": [3, 12, 4], + "uv": [48, 48], + "inflate": 0.25 + }] + }, { + "name": "leftItem", + "pivot": [6, 14.5, 1], + "parent": "leftArm" + }, { + "name": "rightArm", + "parent": "body", + "pivot": [-5.0, 21.5, 0.0], + "cubes": [{ + "origin": [-7.0, 11.5, -2.0], + "size": [3, 12, 4], + "uv": [40, 16] + }, { + "origin": [-7.0, 11.5, -2.0], + "size": [3, 12, 4], + "uv": [40, 32], + "inflate": 0.25 + }] + }, { + "name": "rightItem", + "pivot": [-6, 14.5, 1], + "locators": { + "lead_hold": [-6, 14.5, 1] + }, + "parent": "rightArm" + }] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ghost_diamond_axe.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_diamond_axe.geometry.json new file mode 100644 index 0000000..a131c5e --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_diamond_axe.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.ghost_axe","texture_width":16,"texture_height":16,"visible_bounds_width":2,"visible_bounds_height":2.5,"visible_bounds_offset":[0,0.75,0]},"bones":[{"name":"iron_axe","pivot":[0,13,-12],"rotation":[0,45,90],"cubes":[{"origin":[-11,13,-11],"size":[2,1,7],"uv":{"north":{"uv":[11,1],"uv_size":[-2,1]},"east":{"uv":[10,1],"uv_size":[1,7]},"south":{"uv":[9,7],"uv_size":[2,1]},"west":{"uv":[9,1],"uv_size":[1,7]},"up":{"uv":[11,8],"uv_size":[-2,-7]},"down":{"uv":[11,1],"uv_size":[-2,7]}}},{"origin":[-9,13,-10],"size":[1,1,8],"uv":{"north":{"uv":[9,2],"uv_size":[-1,1]},"east":{"uv":[8,2],"uv_size":[1,8]},"south":{"uv":[8,9],"uv_size":[1,1]},"west":{"uv":[8,2],"uv_size":[1,8]},"up":{"uv":[9,10],"uv_size":[-1,-8]},"down":{"uv":[9,2],"uv_size":[-1,8]}}},{"origin":[-12,13,-10],"size":[1,1,7],"uv":{"north":{"uv":[12,2],"uv_size":[-1,1]},"east":{"uv":[11,2],"uv_size":[1,7]},"south":{"uv":[11,8],"uv_size":[1,1]},"west":{"uv":[11,2],"uv_size":[1,7]},"up":{"uv":[12,9],"uv_size":[-1,-7]},"down":{"uv":[12,2],"uv_size":[-1,7]}}},{"origin":[-8,13,-9],"size":[1,1,4],"uv":{"north":{"uv":[8,3],"uv_size":[-1,1]},"east":{"uv":[7,3],"uv_size":[1,4]},"south":{"uv":[7,6],"uv_size":[1,1]},"west":{"uv":[7,3],"uv_size":[1,4]},"up":{"uv":[8,7],"uv_size":[-1,-4]},"down":{"uv":[8,3],"uv_size":[-1,4]}}},{"origin":[-7,13,-8],"size":[1,1,2],"uv":{"north":{"uv":[7,4],"uv_size":[-1,1]},"east":{"uv":[6,4],"uv_size":[1,2]},"south":{"uv":[6,5],"uv_size":[1,1]},"west":{"uv":[6,4],"uv_size":[1,2]},"up":{"uv":[7,6],"uv_size":[-1,-2]},"down":{"uv":[7,4],"uv_size":[-1,2]}}},{"origin":[-13,13,-8],"size":[1,1,5],"uv":{"north":{"uv":[13,4],"uv_size":[-1,1]},"east":{"uv":[12,4],"uv_size":[1,5]},"south":{"uv":[12,8],"uv_size":[1,1]},"west":{"uv":[12,4],"uv_size":[1,5]},"up":{"uv":[13,9],"uv_size":[-1,-5]},"down":{"uv":[13,4],"uv_size":[-1,5]}}},{"origin":[-14,13,-6],"size":[1,1,2],"uv":{"north":{"uv":[14,6],"uv_size":[-1,1]},"east":{"uv":[13,6],"uv_size":[1,2]},"south":{"uv":[13,7],"uv_size":[1,1]},"west":{"uv":[13,6],"uv_size":[1,2]},"up":{"uv":[14,8],"uv_size":[-1,-2]},"down":{"uv":[14,6],"uv_size":[-1,2]}}},{"origin":[-8,13,-4],"size":[1,1,3],"uv":{"north":{"uv":[8,8],"uv_size":[-1,1]},"east":{"uv":[7,8],"uv_size":[1,3]},"south":{"uv":[7,10],"uv_size":[1,1]},"west":{"uv":[7,8],"uv_size":[1,3]},"up":{"uv":[8,11],"uv_size":[-1,-3]},"down":{"uv":[8,8],"uv_size":[-1,3]}}},{"origin":[-10,13,-4],"size":[1,1,1],"uv":{"north":{"uv":[10,8],"uv_size":[-1,1]},"east":{"uv":[9,8],"uv_size":[1,1]},"south":{"uv":[9,8],"uv_size":[1,1]},"west":{"uv":[9,8],"uv_size":[1,1]},"up":{"uv":[10,9],"uv_size":[-1,-1]},"down":{"uv":[10,8],"uv_size":[-1,1]}}},{"origin":[-7,13,-3],"size":[1,1,3],"uv":{"north":{"uv":[7,9],"uv_size":[-1,1]},"east":{"uv":[6,9],"uv_size":[1,3]},"south":{"uv":[6,11],"uv_size":[1,1]},"west":{"uv":[6,9],"uv_size":[1,3]},"up":{"uv":[7,12],"uv_size":[-1,-3]},"down":{"uv":[7,9],"uv_size":[-1,3]}}},{"origin":[-6,13,-2],"size":[1,1,3],"uv":{"north":{"uv":[6,10],"uv_size":[-1,1]},"east":{"uv":[5,10],"uv_size":[1,3]},"south":{"uv":[5,12],"uv_size":[1,1]},"west":{"uv":[5,10],"uv_size":[1,3]},"up":{"uv":[6,13],"uv_size":[-1,-3]},"down":{"uv":[6,10],"uv_size":[-1,3]}}},{"origin":[-5,13,-1],"size":[1,1,3],"uv":{"north":{"uv":[5,11],"uv_size":[-1,1]},"east":{"uv":[4,11],"uv_size":[1,3]},"south":{"uv":[4,13],"uv_size":[1,1]},"west":{"uv":[4,11],"uv_size":[1,3]},"up":{"uv":[5,14],"uv_size":[-1,-3]},"down":{"uv":[5,11],"uv_size":[-1,3]}}},{"origin":[-4,13,0],"size":[1,1,3],"uv":{"north":{"uv":[4,12],"uv_size":[-1,1]},"east":{"uv":[3,12],"uv_size":[1,3]},"south":{"uv":[3,14],"uv_size":[1,1]},"west":{"uv":[3,12],"uv_size":[1,3]},"up":{"uv":[4,15],"uv_size":[-1,-3]},"down":{"uv":[4,12],"uv_size":[-1,3]}}},{"origin":[-3,13,1],"size":[1,1,2],"uv":{"north":{"uv":[3,13],"uv_size":[-1,1]},"east":{"uv":[2,13],"uv_size":[1,2]},"south":{"uv":[2,14],"uv_size":[1,1]},"west":{"uv":[2,13],"uv_size":[1,2]},"up":{"uv":[3,15],"uv_size":[-1,-2]},"down":{"uv":[3,13],"uv_size":[-1,2]}}}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ghost_diamond_staff.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_diamond_staff.geometry.json new file mode 100644 index 0000000..079bbb1 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_diamond_staff.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.diamond_staff","texture_width":32,"texture_height":32,"visible_bounds_width":2,"visible_bounds_height":2,"visible_bounds_offset":[0,0,0]},"bones":[{"name":"diamond_staff","pivot":[0,8,0],"rotation":[-90,0,-45],"cubes":[{"origin":[-8,8,5],"size":[3,1,3],"uv":[8,0]},{"origin":[-5,8,3],"size":[1,1,3],"uv":[19,5]},{"origin":[-4,8,2],"size":[1,1,3],"uv":[13,19]},{"origin":[-3,8,1],"size":[1,1,3],"uv":[8,18]},{"origin":[-2,8,0],"size":[1,1,3],"uv":[0,18]},{"origin":[-1,8,-1],"size":[1,1,3],"uv":[17,1]},{"origin":[0,8,-2],"size":[1,1,3],"uv":[15,15]},{"origin":[1,8,-3],"size":[1,1,3],"uv":[14,8]},{"origin":[2,8,-4],"size":[1,1,3],"uv":[10,14]},{"origin":[-6,8,4],"size":[1,1,1],"uv":[6,14]},{"origin":[3,8,-7],"size":[1,1,5],"uv":[7,8]},{"origin":[4,8,-7],"size":[1,1,4],"uv":[0,13]},{"origin":[5,8,-8],"size":[1,1,6],"uv":[0,0]},{"origin":[6,8,-8],"size":[1,1,5],"uv":[0,7]},{"origin":[7,8,-8],"size":[1,1,3],"uv":[11,4]},{"origin":[4,8,-2],"size":[1,1,1],"uv":[0,13]},{"origin":[5,8,-1],"size":[1,1,1],"uv":[7,9]},{"origin":[6,8,-2],"size":[1,1,1],"uv":[0,9]},{"origin":[3,8,-1],"size":[1,1,1],"uv":[8,4]},{"origin":[2,8,-6],"size":[1,1,1],"uv":[7,7]},{"origin":[1,8,-5],"size":[1,1,1],"uv":[0,7]},{"origin":[0,8,-4],"size":[1,1,1],"uv":[0,4]},{"origin":[0,8,-6],"size":[1,1,1],"uv":[0,2]},{"origin":[1,8,-7],"size":[1,1,1],"uv":[0,0]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ghost_diamond_sword.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_diamond_sword.geometry.json new file mode 100644 index 0000000..306c504 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_diamond_sword.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.sword","texture_width":32,"texture_height":32,"visible_bounds_width":3,"visible_bounds_height":1,"visible_bounds_offset":[0,0.5,0]},"bones":[{"name":"all","pivot":[0,0,0],"rotation":[0,-45,0]},{"name":"blade","parent":"all","pivot":[0,0,0],"cubes":[{"origin":[-4,0,-3],"size":[1,1,2],"uv":[17,8]},{"origin":[-3,0,-2],"size":[1,1,2],"uv":[10,16]},{"origin":[-2,0,-2],"size":[3,1,1],"uv":[14,0]},{"origin":[-2,0,-1],"size":[1,1,2],"uv":[16,16]},{"origin":[-3,0,-3],"size":[3,1,1],"uv":[14,14]},{"origin":[-4,0,-4],"size":[3,1,1],"uv":[0,14]},{"origin":[-1,0,-1],"size":[3,1,3],"uv":[0,0]},{"origin":[-5,0,-4],"size":[1,1,2],"uv":[0,16]},{"origin":[-5,0,-5],"size":[3,1,1],"uv":[7,13]},{"origin":[-6,0,-5],"size":[1,1,2],"uv":[15,11]},{"origin":[-6,0,-6],"size":[3,1,1],"uv":[0,12]},{"origin":[-7,0,-6],"size":[1,1,2],"uv":[15,5]},{"origin":[-7,0,-7],"size":[3,1,1],"uv":[9,11]},{"origin":[-8,0,-7],"size":[1,1,2],"uv":[6,15]},{"origin":[-8,0,-8],"size":[3,1,1],"uv":[9,5]}]},{"name":"cross","parent":"all","pivot":[0,0,0],"cubes":[{"origin":[2,0,2],"size":[1,1,1],"uv":[0,19]},{"origin":[0,0,2],"size":[2,1,3],"uv":[0,8]},{"origin":[2,0,0],"size":[3,1,2],"uv":[7,8]},{"origin":[2,0,3],"size":[1,1,1],"uv":[14,16]},{"origin":[3,0,2],"size":[1,1,1],"uv":[15,8]},{"origin":[-1,0,3],"size":[1,1,3],"uv":[9,1]},{"origin":[3,0,-1],"size":[3,1,1],"uv":[14,2]},{"origin":[-2,0,4],"size":[1,1,2],"uv":[4,18]},{"origin":[4,0,-2],"size":[2,1,1],"uv":[10,19]}]},{"name":"hilt","parent":"all","pivot":[0,0,0],"cubes":[{"origin":[4,0,4],"size":[2,1,1],"uv":[19,4]},{"origin":[3,0,3],"size":[2,1,1],"uv":[16,19]},{"origin":[4,0,5],"size":[1,1,1],"uv":[20,16]},{"origin":[3,0,4],"size":[1,1,1],"uv":[19,11]}]},{"name":"tail","parent":"all","pivot":[0,0,0],"cubes":[{"origin":[5,0,5],"size":[3,1,3],"uv":[0,4]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ghost_iron_axe.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_iron_axe.geometry.json new file mode 100644 index 0000000..a131c5e --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_iron_axe.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.ghost_axe","texture_width":16,"texture_height":16,"visible_bounds_width":2,"visible_bounds_height":2.5,"visible_bounds_offset":[0,0.75,0]},"bones":[{"name":"iron_axe","pivot":[0,13,-12],"rotation":[0,45,90],"cubes":[{"origin":[-11,13,-11],"size":[2,1,7],"uv":{"north":{"uv":[11,1],"uv_size":[-2,1]},"east":{"uv":[10,1],"uv_size":[1,7]},"south":{"uv":[9,7],"uv_size":[2,1]},"west":{"uv":[9,1],"uv_size":[1,7]},"up":{"uv":[11,8],"uv_size":[-2,-7]},"down":{"uv":[11,1],"uv_size":[-2,7]}}},{"origin":[-9,13,-10],"size":[1,1,8],"uv":{"north":{"uv":[9,2],"uv_size":[-1,1]},"east":{"uv":[8,2],"uv_size":[1,8]},"south":{"uv":[8,9],"uv_size":[1,1]},"west":{"uv":[8,2],"uv_size":[1,8]},"up":{"uv":[9,10],"uv_size":[-1,-8]},"down":{"uv":[9,2],"uv_size":[-1,8]}}},{"origin":[-12,13,-10],"size":[1,1,7],"uv":{"north":{"uv":[12,2],"uv_size":[-1,1]},"east":{"uv":[11,2],"uv_size":[1,7]},"south":{"uv":[11,8],"uv_size":[1,1]},"west":{"uv":[11,2],"uv_size":[1,7]},"up":{"uv":[12,9],"uv_size":[-1,-7]},"down":{"uv":[12,2],"uv_size":[-1,7]}}},{"origin":[-8,13,-9],"size":[1,1,4],"uv":{"north":{"uv":[8,3],"uv_size":[-1,1]},"east":{"uv":[7,3],"uv_size":[1,4]},"south":{"uv":[7,6],"uv_size":[1,1]},"west":{"uv":[7,3],"uv_size":[1,4]},"up":{"uv":[8,7],"uv_size":[-1,-4]},"down":{"uv":[8,3],"uv_size":[-1,4]}}},{"origin":[-7,13,-8],"size":[1,1,2],"uv":{"north":{"uv":[7,4],"uv_size":[-1,1]},"east":{"uv":[6,4],"uv_size":[1,2]},"south":{"uv":[6,5],"uv_size":[1,1]},"west":{"uv":[6,4],"uv_size":[1,2]},"up":{"uv":[7,6],"uv_size":[-1,-2]},"down":{"uv":[7,4],"uv_size":[-1,2]}}},{"origin":[-13,13,-8],"size":[1,1,5],"uv":{"north":{"uv":[13,4],"uv_size":[-1,1]},"east":{"uv":[12,4],"uv_size":[1,5]},"south":{"uv":[12,8],"uv_size":[1,1]},"west":{"uv":[12,4],"uv_size":[1,5]},"up":{"uv":[13,9],"uv_size":[-1,-5]},"down":{"uv":[13,4],"uv_size":[-1,5]}}},{"origin":[-14,13,-6],"size":[1,1,2],"uv":{"north":{"uv":[14,6],"uv_size":[-1,1]},"east":{"uv":[13,6],"uv_size":[1,2]},"south":{"uv":[13,7],"uv_size":[1,1]},"west":{"uv":[13,6],"uv_size":[1,2]},"up":{"uv":[14,8],"uv_size":[-1,-2]},"down":{"uv":[14,6],"uv_size":[-1,2]}}},{"origin":[-8,13,-4],"size":[1,1,3],"uv":{"north":{"uv":[8,8],"uv_size":[-1,1]},"east":{"uv":[7,8],"uv_size":[1,3]},"south":{"uv":[7,10],"uv_size":[1,1]},"west":{"uv":[7,8],"uv_size":[1,3]},"up":{"uv":[8,11],"uv_size":[-1,-3]},"down":{"uv":[8,8],"uv_size":[-1,3]}}},{"origin":[-10,13,-4],"size":[1,1,1],"uv":{"north":{"uv":[10,8],"uv_size":[-1,1]},"east":{"uv":[9,8],"uv_size":[1,1]},"south":{"uv":[9,8],"uv_size":[1,1]},"west":{"uv":[9,8],"uv_size":[1,1]},"up":{"uv":[10,9],"uv_size":[-1,-1]},"down":{"uv":[10,8],"uv_size":[-1,1]}}},{"origin":[-7,13,-3],"size":[1,1,3],"uv":{"north":{"uv":[7,9],"uv_size":[-1,1]},"east":{"uv":[6,9],"uv_size":[1,3]},"south":{"uv":[6,11],"uv_size":[1,1]},"west":{"uv":[6,9],"uv_size":[1,3]},"up":{"uv":[7,12],"uv_size":[-1,-3]},"down":{"uv":[7,9],"uv_size":[-1,3]}}},{"origin":[-6,13,-2],"size":[1,1,3],"uv":{"north":{"uv":[6,10],"uv_size":[-1,1]},"east":{"uv":[5,10],"uv_size":[1,3]},"south":{"uv":[5,12],"uv_size":[1,1]},"west":{"uv":[5,10],"uv_size":[1,3]},"up":{"uv":[6,13],"uv_size":[-1,-3]},"down":{"uv":[6,10],"uv_size":[-1,3]}}},{"origin":[-5,13,-1],"size":[1,1,3],"uv":{"north":{"uv":[5,11],"uv_size":[-1,1]},"east":{"uv":[4,11],"uv_size":[1,3]},"south":{"uv":[4,13],"uv_size":[1,1]},"west":{"uv":[4,11],"uv_size":[1,3]},"up":{"uv":[5,14],"uv_size":[-1,-3]},"down":{"uv":[5,11],"uv_size":[-1,3]}}},{"origin":[-4,13,0],"size":[1,1,3],"uv":{"north":{"uv":[4,12],"uv_size":[-1,1]},"east":{"uv":[3,12],"uv_size":[1,3]},"south":{"uv":[3,14],"uv_size":[1,1]},"west":{"uv":[3,12],"uv_size":[1,3]},"up":{"uv":[4,15],"uv_size":[-1,-3]},"down":{"uv":[4,12],"uv_size":[-1,3]}}},{"origin":[-3,13,1],"size":[1,1,2],"uv":{"north":{"uv":[3,13],"uv_size":[-1,1]},"east":{"uv":[2,13],"uv_size":[1,2]},"south":{"uv":[2,14],"uv_size":[1,1]},"west":{"uv":[2,13],"uv_size":[1,2]},"up":{"uv":[3,15],"uv_size":[-1,-2]},"down":{"uv":[3,13],"uv_size":[-1,2]}}}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ghost_iron_sword.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_iron_sword.geometry.json new file mode 100644 index 0000000..306c504 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_iron_sword.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.sword","texture_width":32,"texture_height":32,"visible_bounds_width":3,"visible_bounds_height":1,"visible_bounds_offset":[0,0.5,0]},"bones":[{"name":"all","pivot":[0,0,0],"rotation":[0,-45,0]},{"name":"blade","parent":"all","pivot":[0,0,0],"cubes":[{"origin":[-4,0,-3],"size":[1,1,2],"uv":[17,8]},{"origin":[-3,0,-2],"size":[1,1,2],"uv":[10,16]},{"origin":[-2,0,-2],"size":[3,1,1],"uv":[14,0]},{"origin":[-2,0,-1],"size":[1,1,2],"uv":[16,16]},{"origin":[-3,0,-3],"size":[3,1,1],"uv":[14,14]},{"origin":[-4,0,-4],"size":[3,1,1],"uv":[0,14]},{"origin":[-1,0,-1],"size":[3,1,3],"uv":[0,0]},{"origin":[-5,0,-4],"size":[1,1,2],"uv":[0,16]},{"origin":[-5,0,-5],"size":[3,1,1],"uv":[7,13]},{"origin":[-6,0,-5],"size":[1,1,2],"uv":[15,11]},{"origin":[-6,0,-6],"size":[3,1,1],"uv":[0,12]},{"origin":[-7,0,-6],"size":[1,1,2],"uv":[15,5]},{"origin":[-7,0,-7],"size":[3,1,1],"uv":[9,11]},{"origin":[-8,0,-7],"size":[1,1,2],"uv":[6,15]},{"origin":[-8,0,-8],"size":[3,1,1],"uv":[9,5]}]},{"name":"cross","parent":"all","pivot":[0,0,0],"cubes":[{"origin":[2,0,2],"size":[1,1,1],"uv":[0,19]},{"origin":[0,0,2],"size":[2,1,3],"uv":[0,8]},{"origin":[2,0,0],"size":[3,1,2],"uv":[7,8]},{"origin":[2,0,3],"size":[1,1,1],"uv":[14,16]},{"origin":[3,0,2],"size":[1,1,1],"uv":[15,8]},{"origin":[-1,0,3],"size":[1,1,3],"uv":[9,1]},{"origin":[3,0,-1],"size":[3,1,1],"uv":[14,2]},{"origin":[-2,0,4],"size":[1,1,2],"uv":[4,18]},{"origin":[4,0,-2],"size":[2,1,1],"uv":[10,19]}]},{"name":"hilt","parent":"all","pivot":[0,0,0],"cubes":[{"origin":[4,0,4],"size":[2,1,1],"uv":[19,4]},{"origin":[3,0,3],"size":[2,1,1],"uv":[16,19]},{"origin":[4,0,5],"size":[1,1,1],"uv":[20,16]},{"origin":[3,0,4],"size":[1,1,1],"uv":[19,11]}]},{"name":"tail","parent":"all","pivot":[0,0,0],"cubes":[{"origin":[5,0,5],"size":[3,1,3],"uv":[0,4]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ghost_wooden_staff.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_wooden_staff.geometry.json new file mode 100644 index 0000000..b6d1829 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_wooden_staff.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.wooden_staff","texture_width":32,"texture_height":32,"visible_bounds_width":2,"visible_bounds_height":2,"visible_bounds_offset":[0,0,0]},"bones":[{"name":"wooden_staff","pivot":[0,12,0],"rotation":[-90,0,45],"cubes":[{"origin":[5,11,5],"size":[3,1,3],"uv":[0,0]},{"origin":[4,11,4],"size":[2,1,1],"uv":[13,0]},{"origin":[3,11,3],"size":[2,1,1],"uv":[6,13]},{"origin":[2,11,2],"size":[2,1,1],"uv":[0,13]},{"origin":[1,11,1],"size":[2,1,1],"uv":[11,12]},{"origin":[0,11,0],"size":[2,1,1],"uv":[6,11]},{"origin":[-1,11,-1],"size":[2,1,1],"uv":[0,11]},{"origin":[-2,11,-2],"size":[2,1,1],"uv":[10,7]},{"origin":[-3,11,-3],"size":[2,1,1],"uv":[10,4]},{"origin":[-6,11,-4],"size":[4,1,1],"uv":[0,7]},{"origin":[4,11,5],"size":[1,1,1],"uv":[15,10]},{"origin":[3,11,4],"size":[1,1,1],"uv":[15,8]},{"origin":[2,11,3],"size":[1,1,1],"uv":[15,5]},{"origin":[1,11,2],"size":[1,1,1],"uv":[14,15]},{"origin":[0,11,1],"size":[1,1,1],"uv":[8,15]},{"origin":[-1,11,0],"size":[1,1,1],"uv":[4,15]},{"origin":[-2,11,-1],"size":[1,1,1],"uv":[0,15]},{"origin":[-3,11,-2],"size":[1,1,1],"uv":[14,2]},{"origin":[-4,11,-3],"size":[1,1,1],"uv":[11,14]},{"origin":[-7,11,-6],"size":[4,1,2],"uv":[0,4]},{"origin":[-7,11,-7],"size":[3,1,1],"uv":[8,9]},{"origin":[-8,11,-8],"size":[3,1,1],"uv":[0,9]},{"origin":[-8,11,-7],"size":[1,1,2],"uv":[9,0]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ghost_wooden_sword.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_wooden_sword.geometry.json new file mode 100644 index 0000000..306c504 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ghost_wooden_sword.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.sword","texture_width":32,"texture_height":32,"visible_bounds_width":3,"visible_bounds_height":1,"visible_bounds_offset":[0,0.5,0]},"bones":[{"name":"all","pivot":[0,0,0],"rotation":[0,-45,0]},{"name":"blade","parent":"all","pivot":[0,0,0],"cubes":[{"origin":[-4,0,-3],"size":[1,1,2],"uv":[17,8]},{"origin":[-3,0,-2],"size":[1,1,2],"uv":[10,16]},{"origin":[-2,0,-2],"size":[3,1,1],"uv":[14,0]},{"origin":[-2,0,-1],"size":[1,1,2],"uv":[16,16]},{"origin":[-3,0,-3],"size":[3,1,1],"uv":[14,14]},{"origin":[-4,0,-4],"size":[3,1,1],"uv":[0,14]},{"origin":[-1,0,-1],"size":[3,1,3],"uv":[0,0]},{"origin":[-5,0,-4],"size":[1,1,2],"uv":[0,16]},{"origin":[-5,0,-5],"size":[3,1,1],"uv":[7,13]},{"origin":[-6,0,-5],"size":[1,1,2],"uv":[15,11]},{"origin":[-6,0,-6],"size":[3,1,1],"uv":[0,12]},{"origin":[-7,0,-6],"size":[1,1,2],"uv":[15,5]},{"origin":[-7,0,-7],"size":[3,1,1],"uv":[9,11]},{"origin":[-8,0,-7],"size":[1,1,2],"uv":[6,15]},{"origin":[-8,0,-8],"size":[3,1,1],"uv":[9,5]}]},{"name":"cross","parent":"all","pivot":[0,0,0],"cubes":[{"origin":[2,0,2],"size":[1,1,1],"uv":[0,19]},{"origin":[0,0,2],"size":[2,1,3],"uv":[0,8]},{"origin":[2,0,0],"size":[3,1,2],"uv":[7,8]},{"origin":[2,0,3],"size":[1,1,1],"uv":[14,16]},{"origin":[3,0,2],"size":[1,1,1],"uv":[15,8]},{"origin":[-1,0,3],"size":[1,1,3],"uv":[9,1]},{"origin":[3,0,-1],"size":[3,1,1],"uv":[14,2]},{"origin":[-2,0,4],"size":[1,1,2],"uv":[4,18]},{"origin":[4,0,-2],"size":[2,1,1],"uv":[10,19]}]},{"name":"hilt","parent":"all","pivot":[0,0,0],"cubes":[{"origin":[4,0,4],"size":[2,1,1],"uv":[19,4]},{"origin":[3,0,3],"size":[2,1,1],"uv":[16,19]},{"origin":[4,0,5],"size":[1,1,1],"uv":[20,16]},{"origin":[3,0,4],"size":[1,1,1],"uv":[19,11]}]},{"name":"tail","parent":"all","pivot":[0,0,0],"cubes":[{"origin":[5,0,5],"size":[3,1,3],"uv":[0,4]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/goblin.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/goblin.geometry.json new file mode 100644 index 0000000..a214db7 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/goblin.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.goblin","texture_width":64,"texture_height":64,"visible_bounds_width":3,"visible_bounds_height":4,"visible_bounds_offset":[0,1,0]},"bones":[{"name":"body","pivot":[0,17,-2],"cubes":[{"origin":[-4,14,3],"size":[8,5,4],"pivot":[0,3,5],"rotation":[30,0,0],"uv":[20,22]},{"origin":[-4,7.45427,-2.06814],"size":[8,6,4],"pivot":[0,-2.54573,-0.06814],"rotation":[2.5,0,0],"uv":[0,16]}]},{"name":"bodyArmor","parent":"body","pivot":[0,24,0]},{"name":"belt","parent":"body","pivot":[0,24,0]},{"name":"waist","pivot":[0,12,0]},{"name":"head","pivot":[0,16,-2],"cubes":[{"origin":[-4.5,16,-8],"size":[9,9,8],"uv":[0,0]},{"origin":[-4.5,16,-4],"size":[9,1,4],"uv":[26,0]},{"origin":[5.5,24,-18],"size":[1,9,3],"pivot":[2,8,-14],"rotation":[-45,0,-42.5],"uv":[24,43]},{"origin":[-4.5,29,-17],"size":[1,9,3],"pivot":[-8,13,-13],"rotation":[-45,0,40],"uv":[24,43]},{"origin":[-4.5,20,-9],"size":[9,2,1],"uv":[26,5]},{"origin":[-1.5,17,-3],"size":[3,3,3],"pivot":[0,-5,-4],"rotation":[17.5,0,0],"uv":[32,44]},{"origin":[-1.5,37.05695,14.2378],"size":[3,2,4],"pivot":[0,14.05695,14.2378],"rotation":[87.5,0,0],"uv":[34,8]}]},{"name":"rightArm","pivot":[-5,15,-2],"cubes":[{"origin":[-8,8,-4],"size":[4,8,4],"uv":[0,38]}]},{"name":"rightItem","parent":"rightArm","pivot":[-6,10,-2]},{"name":"rightArmArmor","parent":"rightArm","pivot":[-5,22,0]},{"name":"leftArm","pivot":[5,15,-2],"mirror":true,"cubes":[{"origin":[4,8,-4],"size":[4,8,4],"uv":[32,32],"mirror":false}]},{"name":"leftArmArmor","parent":"leftArm","pivot":[5,22,0],"mirror":true},{"name":"rightLeg","pivot":[-1.9,8,0],"cubes":[{"origin":[-3.9,0,-2],"size":[4,8,4],"uv":[16,31]}]},{"name":"rightLegging","parent":"rightLeg","pivot":[-1.9,12,0]},{"name":"rightBoot","parent":"rightLeg","pivot":[-1.9,12,0]},{"name":"rightSock","parent":"rightLeg","pivot":[-1.9,12,0]},{"name":"leftLeg","pivot":[1.9,8,0],"mirror":true,"cubes":[{"origin":[-0.1,0,-2],"size":[4,8,4],"uv":[0,26],"mirror":false}]},{"name":"leftLegging","parent":"leftLeg","pivot":[1.9,12,0],"mirror":true},{"name":"leftBoot","parent":"leftLeg","pivot":[1.9,12,0],"mirror":true},{"name":"leftSock","parent":"leftLeg","pivot":[1.9,12,0],"mirror":true},{"name":"helmet","pivot":[0,24,0]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/goblin_sniper.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/goblin_sniper.geometry.json new file mode 100644 index 0000000..12f411f --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/goblin_sniper.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.goblin_wizard","texture_width":128,"texture_height":128,"visible_bounds_width":3,"visible_bounds_height":4,"visible_bounds_offset":[0,1,0]},"bones":[{"name":"body","pivot":[0,17,-2],"cubes":[{"origin":[-4,14,3],"size":[8,5,4],"pivot":[0,3,5],"rotation":[30,0,0],"uv":[20,22]},{"origin":[-4,7.45427,-2.06814],"size":[8,6,4],"pivot":[0,-2.54573,-0.06814],"rotation":[2.5,0,0],"uv":[0,16]}]},{"name":"bodyArmor","parent":"body","pivot":[0,24,0]},{"name":"belt","parent":"body","pivot":[0,24,0]},{"name":"waist","pivot":[0,12,0]},{"name":"head","pivot":[0,16,-2],"cubes":[{"origin":[-4.5,16,-8],"size":[9,9,8],"uv":[0,0]},{"origin":[-4.5,16,-4],"size":[9,1,4],"uv":[26,0]},{"origin":[-4.5,20,-9],"size":[9,2,1],"uv":[26,5]},{"origin":[-1.5,17,-3],"size":[3,3,3],"pivot":[0,-5,-4],"rotation":[17.5,0,0],"uv":[32,44]},{"origin":[-1.5,37.05695,14.2378],"size":[3,2,4],"pivot":[0,14.05695,14.2378],"rotation":[87.5,0,0],"uv":[34,8]}]},{"name":"hat","parent":"head","pivot":[0,16,-2],"cubes":[{"origin":[-5,16,-8],"size":[10,9.5,9],"uv":[64,0]}]},{"name":"rightArm","pivot":[-5,15,-2],"cubes":[{"origin":[-8,8,-4],"size":[4,8,4],"uv":[0,38]}]},{"name":"rightItem","parent":"rightArm","pivot":[-6,10,-2]},{"name":"rightArmArmor","parent":"rightArm","pivot":[-5,22,0]},{"name":"leftArm","pivot":[5,15,-2],"mirror":true,"cubes":[{"origin":[4,8,-4],"size":[4,8,4],"uv":[32,32],"mirror":false}]},{"name":"leftArmArmor","parent":"leftArm","pivot":[5,22,0],"mirror":true},{"name":"rightLeg","pivot":[-1.9,8,0],"cubes":[{"origin":[-3.9,0,-2],"size":[4,8,4],"uv":[16,31]}]},{"name":"rightLegging","parent":"rightLeg","pivot":[-1.9,12,0]},{"name":"rightBoot","parent":"rightLeg","pivot":[-1.9,12,0]},{"name":"rightSock","parent":"rightLeg","pivot":[-1.9,12,0]},{"name":"leftLeg","pivot":[1.9,8,0],"mirror":true,"cubes":[{"origin":[-0.1,0,-2],"size":[4,8,4],"uv":[0,26],"mirror":false}]},{"name":"leftLegging","parent":"leftLeg","pivot":[1.9,12,0],"mirror":true},{"name":"leftBoot","parent":"leftLeg","pivot":[1.9,12,0],"mirror":true},{"name":"leftSock","parent":"leftLeg","pivot":[1.9,12,0],"mirror":true},{"name":"helmet","pivot":[0,24,0]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/goblin_wizard.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/goblin_wizard.geometry.json new file mode 100644 index 0000000..12f411f --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/goblin_wizard.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.goblin_wizard","texture_width":128,"texture_height":128,"visible_bounds_width":3,"visible_bounds_height":4,"visible_bounds_offset":[0,1,0]},"bones":[{"name":"body","pivot":[0,17,-2],"cubes":[{"origin":[-4,14,3],"size":[8,5,4],"pivot":[0,3,5],"rotation":[30,0,0],"uv":[20,22]},{"origin":[-4,7.45427,-2.06814],"size":[8,6,4],"pivot":[0,-2.54573,-0.06814],"rotation":[2.5,0,0],"uv":[0,16]}]},{"name":"bodyArmor","parent":"body","pivot":[0,24,0]},{"name":"belt","parent":"body","pivot":[0,24,0]},{"name":"waist","pivot":[0,12,0]},{"name":"head","pivot":[0,16,-2],"cubes":[{"origin":[-4.5,16,-8],"size":[9,9,8],"uv":[0,0]},{"origin":[-4.5,16,-4],"size":[9,1,4],"uv":[26,0]},{"origin":[-4.5,20,-9],"size":[9,2,1],"uv":[26,5]},{"origin":[-1.5,17,-3],"size":[3,3,3],"pivot":[0,-5,-4],"rotation":[17.5,0,0],"uv":[32,44]},{"origin":[-1.5,37.05695,14.2378],"size":[3,2,4],"pivot":[0,14.05695,14.2378],"rotation":[87.5,0,0],"uv":[34,8]}]},{"name":"hat","parent":"head","pivot":[0,16,-2],"cubes":[{"origin":[-5,16,-8],"size":[10,9.5,9],"uv":[64,0]}]},{"name":"rightArm","pivot":[-5,15,-2],"cubes":[{"origin":[-8,8,-4],"size":[4,8,4],"uv":[0,38]}]},{"name":"rightItem","parent":"rightArm","pivot":[-6,10,-2]},{"name":"rightArmArmor","parent":"rightArm","pivot":[-5,22,0]},{"name":"leftArm","pivot":[5,15,-2],"mirror":true,"cubes":[{"origin":[4,8,-4],"size":[4,8,4],"uv":[32,32],"mirror":false}]},{"name":"leftArmArmor","parent":"leftArm","pivot":[5,22,0],"mirror":true},{"name":"rightLeg","pivot":[-1.9,8,0],"cubes":[{"origin":[-3.9,0,-2],"size":[4,8,4],"uv":[16,31]}]},{"name":"rightLegging","parent":"rightLeg","pivot":[-1.9,12,0]},{"name":"rightBoot","parent":"rightLeg","pivot":[-1.9,12,0]},{"name":"rightSock","parent":"rightLeg","pivot":[-1.9,12,0]},{"name":"leftLeg","pivot":[1.9,8,0],"mirror":true,"cubes":[{"origin":[-0.1,0,-2],"size":[4,8,4],"uv":[0,26],"mirror":false}]},{"name":"leftLegging","parent":"leftLeg","pivot":[1.9,12,0],"mirror":true},{"name":"leftBoot","parent":"leftLeg","pivot":[1.9,12,0],"mirror":true},{"name":"leftSock","parent":"leftLeg","pivot":[1.9,12,0],"mirror":true},{"name":"helmet","pivot":[0,24,0]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/host_of_deep.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/host_of_deep.geometry.json new file mode 100644 index 0000000..c0b9904 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/host_of_deep.geometry.json @@ -0,0 +1,84 @@ +{ + "format_version": "1.10.0", + "geometry.host_of_deep": { + "texturewidth": 64, + "textureheight": 64, + "visible_bounds_width": 2, + "visible_bounds_height": 3, + "visible_bounds_offset": [0, 1.5, 0], + "bones": [ + { + "name": "body", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 12, -3], "size": [8, 12, 6], "uv": [16, 20]}, + {"origin": [-4, 6, -3], "size": [8, 18, 6], "uv": [0, 38], "inflate": 0.5} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 24, -4], "size": [8, 10, 8], "uv": [0, 0]}, + {"origin": [-4, 24, -4], "size": [8, 10, 8], "uv": [32, 0], "inflate": 0.5} + ] + }, + { + "name": "arms", + "parent": "body", + "pivot": [0, 22, 0], + "cubes": [ + {"origin": [-8, 16, -2], "size": [4, 8, 4], "uv": [44, 22]}, + {"origin": [4, 16, -2], "size": [4, 8, 4], "uv": [44, 22]}, + {"origin": [-4, 16, -2], "size": [8, 4, 4], "uv": [40, 38]} + ] + }, + { + "name": "leg0", + "parent": "body", + "pivot": [-2, 12, 0], + "cubes": [ + {"origin": [-4, 0, -2], "size": [4, 12, 4], "uv": [0, 22]} + ] + }, + { + "name": "leg1", + "parent": "body", + "pivot": [2, 12, 0], + "mirror": true, + "cubes": [ + {"origin": [0, 0, -2], "size": [4, 12, 4], "uv": [0, 22]} + ] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-5, 22, 0], + "cubes": [ + {"origin": [-8, 12, -2], "size": [4, 12, 4], "uv": [40, 46]} + ], + "locators": { + "right_hand": [-6, 12, 0] + } + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-5.5, 16, 0.5] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [5, 22, 0], + "mirror": true, + "cubes": [ + {"origin": [4, 12, -2], "size": [4, 12, 4], "uv": [40, 46]} + ], + "locators": { + "left_hand": [6, 12, 0] + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ice_monster.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ice_monster.geometry.json new file mode 100644 index 0000000..1a1d715 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ice_monster.geometry.json @@ -0,0 +1,182 @@ +{ + "format_version": "1.10.0", + "geometry.ice_monster": { + "texturewidth": 128, + "textureheight": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 5, + "visible_bounds_offset": [0, 2.5, 0], + "bones": [ + { + "name": "waist", + "pivot": [0, 24, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 15, 0], + "rotation": [15, 0, 0], + "cubes": [ + {"origin": [-8, 23, -5], "size": [16, 12, 12], "uv": [0, 0]}, + {"origin": [-6.5, 15, -4], "size": [13, 8, 8], "uv": [0, 24], "inflate": 0.5} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 33, 0], + "rotation": [-15, 0, 0], + "locators": { + "lead": [0, 31, 0] + } + }, + { + "name": "top", + "parent": "head", + "pivot": [0, 38, 5], + "cubes": [ + {"origin": [-5, 39, -3.5], "size": [10, 8, 8], "uv": [48, 16]} + ] + }, + { + "name": "corner", + "parent": "top", + "pivot": [0, 47, 0], + "rotation": [-12.5, 0, 0], + "cubes": [ + {"origin": [2, 46, 2.5], "size": [2, 4, 2], "uv": [68, 48]}, + {"origin": [3, 46, -1.5], "size": [2, 7, 2], "uv": [82, 79]}, + {"origin": [-5, 46, -1.5], "size": [2, 7, 2], "uv": [60, 82]}, + {"origin": [-5, 46, -3.5], "size": [2, 8, 2], "uv": [24, 54]}, + {"origin": [3, 46, -3.5], "size": [2, 8, 2], "uv": [0, 0]}, + {"origin": [-4, 46, 2.5], "size": [2, 4, 2], "uv": [54, 32]}, + {"origin": [-3, 46, -0.5], "size": [2, 6, 2], "uv": [84, 0]}, + {"origin": [1, 46, -0.5], "size": [2, 6, 2], "uv": [82, 30]}, + {"origin": [-1, 46, -3.5], "size": [2, 12, 2], "uv": [24, 40]}, + {"origin": [-1, 46, 2.5], "size": [2, 6, 2], "uv": [42, 64]} + ] + }, + { + "name": "inner_corner", + "parent": "corner", + "pivot": [0, 49, -2], + "rotation": [-15, 0, -30], + "cubes": [ + {"origin": [-5.5, 48, -1.5], "size": [2, 7, 2], "uv": [74, 81]}, + {"origin": [-7.5, 45, 0.5], "size": [2, 7, 2], "uv": [76, 14]}, + {"origin": [-5.5, 47, 2.5], "size": [2, 7, 2], "uv": [24, 78]} + ] + }, + { + "name": "inner_corner2", + "parent": "corner", + "pivot": [0, 48, 0], + "rotation": [-15, 0, 30], + "cubes": [ + {"origin": [3.5, 48, -1.5], "size": [2, 7, 2], "uv": [78, 62]}, + {"origin": [5.5, 45, 0.5], "size": [2, 7, 2], "uv": [60, 48]}, + {"origin": [3.5, 47, 2.5], "size": [2, 7, 2], "uv": [76, 72]} + ] + }, + { + "name": "maxilla", + "parent": "head", + "pivot": [0, -1, 0], + "cubes": [ + {"origin": [-5, 35, -3.5], "size": [10, 6, 8], "uv": [56, 0], "inflate": -0.1} + ] + }, + { + "name": "arm0", + "parent": "body", + "pivot": [-9, 31, 0], + "rotation": [-15, 0, 0], + "cubes": [ + {"origin": [-14, 11.5, -3], "size": [6, 24, 6], "uv": [0, 40]} + ] + }, + { + "name": "shoulder", + "parent": "arm0", + "pivot": [-12, 34, 0], + "cubes": [ + {"origin": [-15, 29, -3], "size": [6, 8, 6], "uv": [72, 48], "inflate": 0.1} + ] + }, + { + "name": "arm_corner", + "parent": "shoulder", + "pivot": [-14, 35, 0], + "rotation": [0, 0, -30], + "cubes": [ + {"origin": [-15, 35, -2], "size": [4, 4, 4], "uv": [60, 74]}, + {"origin": [-14, 37, -1], "size": [2, 6, 2], "uv": [34, 24]} + ] + }, + { + "name": "arm1", + "parent": "body", + "pivot": [9, 31, 0], + "rotation": [-15, 0, 0], + "cubes": [ + {"origin": [8, 11.5, -3], "size": [6, 24, 6], "uv": [36, 34]} + ] + }, + { + "name": "shoulder1", + "parent": "arm1", + "pivot": [12, 34, 0], + "cubes": [ + {"origin": [9, 29, -3], "size": [6, 8, 6], "uv": [36, 72], "inflate": 0.1} + ] + }, + { + "name": "arm_corner2", + "parent": "shoulder1", + "pivot": [11, 35, 0], + "rotation": [0, 0, 30], + "cubes": [ + {"origin": [11, 36, -2], "size": [4, 4, 4], "uv": [44, 0]}, + {"origin": [12, 38, -1], "size": [2, 6, 2], "uv": [0, 24]} + ] + }, + { + "name": "leg0", + "parent": "waist", + "pivot": [-3, 13, 0], + "rotation": [-15, 0, 0], + "cubes": [ + {"origin": [-6.5, 8, -3], "size": [6, 8, 6], "uv": [0, 72]} + ] + }, + { + "name": "knee0", + "parent": "leg0", + "pivot": [-4, 10, 0], + "rotation": [15, 0, 0], + "cubes": [ + {"origin": [-6.5, 0, -3], "size": [6, 10, 6], "uv": [54, 58], "inflate": 0.1} + ] + }, + { + "name": "leg1", + "parent": "waist", + "pivot": [3, 13, 0], + "rotation": [-15, 0, 0], + "mirror": true, + "cubes": [ + {"origin": [0.5, 8, -3], "size": [6, 8, 6], "uv": [18, 64], "mirror": false} + ] + }, + { + "name": "knee1", + "parent": "leg1", + "pivot": [4, 10, 0], + "rotation": [15, 0, 0], + "cubes": [ + {"origin": [0.5, 0, -3], "size": [6, 10, 6], "uv": [60, 32], "inflate": 0.1} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ice_spirit.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ice_spirit.geometry.json new file mode 100644 index 0000000..ba5bb4c --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ice_spirit.geometry.json @@ -0,0 +1,121 @@ +{ + "format_version": "1.10.0", + "geometry.ice_spirit": { + "texturewidth": 64, + "textureheight": 64, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 1.25, 0], + "bones": [ + { + "name": "root", + "pivot": [0, 4, 0], + "locators": { + "particles_point": [0, 8, 0] + } + }, + { + "name": "waist", + "parent": "root", + "pivot": [0, 4, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 4, 0] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 7, 0], + "cubes": [ + {"origin": [-4, 4, -4], "size": [8, 8, 8], "uv": [0, 0]} + ] + }, + { + "name": "corner", + "parent": "head", + "pivot": [0, 11, -1], + "rotation": [-30, 0, 0], + "cubes": [ + {"origin": [-4, 10, -4], "size": [2, 6, 2], "uv": [32, 24], "inflate": -0.1}, + {"origin": [2, 10, -4], "size": [2, 6, 2], "uv": [30, 32], "inflate": -0.1}, + {"origin": [1, 9, -1], "size": [2, 6, 2], "uv": [32, 16], "inflate": -0.1}, + {"origin": [-3, 9, -1], "size": [2, 6, 2], "uv": [32, 8], "inflate": -0.1}, + {"origin": [-1, 10, -4], "size": [2, 8, 2], "uv": [24, 24], "inflate": -0.1}, + {"origin": [-1, 10, 1.5], "size": [2, 6, 2], "uv": [32, 0], "inflate": -0.1} + ] + }, + { + "name": "corner0", + "parent": "corner", + "pivot": [-1, 13, 0], + "rotation": [0, 0, -30], + "cubes": [ + {"origin": [-5, 10, -1], "size": [2, 6, 2], "uv": [0, 0], "inflate": -0.1} + ] + }, + { + "name": "corner1", + "parent": "corner", + "pivot": [2, 13, 0], + "rotation": [0, 0, 30], + "cubes": [ + {"origin": [3, 10, -1], "size": [2, 6, 2], "uv": [24, 0], "inflate": -0.1} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 14, 0] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-4, 8, 0], + "rotation": [0, 0, 15], + "cubes": [ + {"origin": [-6, 1, -2], "size": [3, 8, 4], "uv": [0, 35]} + ], + "locators": { + "right_hand": [-4, 3, 0] + } + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-5, 14, 1] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [5, 9, 0], + "rotation": [0, 0, -15], + "mirror": true, + "cubes": [ + {"origin": [3, 1, -2], "size": [3, 8, 4], "uv": [0, 24], "mirror": false} + ], + "locators": { + "left_hand": [5, 4, 0] + } + }, + { + "name": "leftLeg", + "parent": "root", + "pivot": [1.9, 3, 0], + "mirror": true, + "cubes": [ + {"origin": [-0.1, 0, -2], "size": [4, 4, 4], "uv": [16, 16], "mirror": false} + ] + }, + { + "name": "rightLeg", + "parent": "root", + "pivot": [-1.9, 2, 0], + "cubes": [ + {"origin": [-3.9, 0, -2], "size": [4, 4, 4], "uv": [0, 16]} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ice_thorn.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ice_thorn.geometry.json new file mode 100644 index 0000000..cd624d1 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ice_thorn.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.ice_thorn","texture_width":16,"texture_height":16,"visible_bounds_width":3,"visible_bounds_height":4,"visible_bounds_offset":[0,1,0]},"bones":[{"name":"main","pivot":[0,0,0],"cubes":[{"origin":[-5,0,-5],"size":[10,4,10],"uv":[0,0]},{"origin":[-4,4,-4],"size":[8,2,8],"uv":[0,0]},{"origin":[-3,6,-3],"size":[6,4,6],"uv":[0,0]},{"origin":[-2,10,-2],"size":[4,8,4],"uv":[0,0]},{"origin":[-1,18,-1],"size":[2,12,2],"uv":[0,0]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/ice_wizard.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/ice_wizard.geometry.json new file mode 100644 index 0000000..bf21a3f --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/ice_wizard.geometry.json @@ -0,0 +1,131 @@ +{ + "format_version": "1.10.0", + "geometry.ice_wizard": { + "texturewidth": 128, + "textureheight": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 3, + "visible_bounds_offset": [0, 1.5, 0], + "bones": [ + { + "name": "body", + "pivot": [0, 12, 0], + "cubes": [ + {"origin": [-4, 12, -3], "size": [8, 12, 6], "uv": [16, 20]} + ] + }, + { + "name": "block", + "parent": "body", + "pivot": [0, 0, 0] + }, + { + "name": "ice_block", + "parent": "block", + "pivot": [0, 18, 0], + "cubes": [ + {"origin": [-8, 2, -8], "size": [16, 32, 16], "uv": [0, 64], "inflate": -10} + ] + }, + { + "name": "fly_block", + "parent": "block", + "pivot": [0, 18, 0] + }, + { + "name": "rightblock", + "parent": "fly_block", + "pivot": [0, 18, 0], + "rotation": [0, 90, 0], + "cubes": [ + {"origin": [-8, 10, -21], "size": [16, 16, 16], "uv": [0, 64], "inflate": -10} + ], + "locators": { + "rightblock": [0, 18, -13] + } + }, + { + "name": "leftblock", + "parent": "fly_block", + "pivot": [0, 18, 0], + "rotation": [0, -90, 0], + "cubes": [ + {"origin": [-8, 10, -21], "size": [16, 16, 16], "uv": [0, 64], "inflate": -10} + ], + "locators": { + "leftblock": [0, 18, -13] + } + }, + { + "name": "clothes", + "parent": "body", + "pivot": [0, 20, 0], + "cubes": [ + {"origin": [-4, 6, -3], "size": [8, 18, 6], "uv": [0, 38], "inflate": 0.5} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4.5, 23.5, -4.5], "size": [9, 11, 9], "uv": [28, 44]}, + {"origin": [-4, 24, -4], "size": [8, 10, 8], "uv": [0, 0]} + ] + }, + { + "name": "nose", + "parent": "head", + "pivot": [0, 26, 0], + "cubes": [ + {"origin": [-1, 23, -6], "size": [2, 4, 2], "uv": [24, 0]} + ] + }, + { + "name": "leg0", + "parent": "body", + "pivot": [-2, 12, 0], + "cubes": [ + {"origin": [-4, 0, -2], "size": [4, 12, 4], "uv": [0, 22]} + ] + }, + { + "name": "leg1", + "parent": "body", + "pivot": [2, 12, 0], + "mirror": true, + "cubes": [ + {"origin": [0, 0, -2], "size": [4, 12, 4], "uv": [0, 22]} + ] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-5, 22, 0], + "cubes": [ + {"origin": [-8, 12, -2], "size": [4, 12, 4], "uv": [44, 22]} + ], + "locators": { + "right_hand": [-6, 12, 0] + } + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-5.5, 16, 0.5] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [5, 22, 0], + "mirror": true, + "cubes": [ + {"origin": [4, 12, -2], "size": [4, 12, 4], "uv": [44, 22]} + ], + "locators": { + "left_hand": [6, 12, 0] + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/illusioner.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/illusioner.geometry.json new file mode 100644 index 0000000..752d629 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/illusioner.geometry.json @@ -0,0 +1,150 @@ +{ + "format_version": "1.10.0", + "geometry.illusioner": { + "visible_bounds_width": 1.5, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [ 0, 1.25, 0 ], + "texturewidth": 64, + "textureheight": 64, + "bones": [ + { + "name": "head", + "parent": "body", + "pivot": [ 0.0, 24.0, 0.0 ], + "cubes": [ + { + "origin": [ -4.0, 24.0, -4.0 ], + "size": [ 8.0, 10.0, 8.0 ], + "uv": [ 0, 0 ] + } + ] + }, + { + "name":"hat", + "parent":"head", + "pivot":[0.0,1.05,0.0], + "cubes":[ + { + "origin":[-4.0,23.1903,-4.1], + "size":[8.0,11.0,8.0], + "uv":[32,0], + "inflate":0.5 + } + ] + }, + { + "name": "nose", + "parent": "head", + "pivot": [ 0.0, 26.0, 0.0 ], + "cubes": [ + { + "origin": [ -1.0, 23.0, -6.0 ], + "size": [ 2.0, 4.0, 2.0 ], + "uv": [ 24, 0 ] + } + ] + }, + { + "name": "body", + "pivot": [ 0.0, 24.0, 0.0 ], + "cubes": [ + { + "origin": [ -4.0, 12.0, -3.0 ], + "size": [ 8.0, 12.0, 6.0 ], + "uv": [ 16, 20 ] + }, + { + "origin": [ -4.0, 6.0, -3.0 ], + "size": [ 8.0, 18.0, 6.0 ], + "uv": [ 0, 38 ], + "inflate": 0.5 + } + ] + }, + { + "name": "arms", + "parent": "body", + "pivot": [ 0.0, 22.0, 0.0 ], + "cubes": [ + { + "origin": [ -8.0, 16.0, -2.0 ], + "size": [ 4.0, 8.0, 4.0 ], + "uv": [ 44, 22 ] + }, + { + "origin": [ 4.0, 16.0, -2.0 ], + "size": [ 4.0, 8.0, 4.0 ], + "uv": [ 44, 22 ] + }, + { + "origin": [ -4.0, 16.0, -2.0 ], + "size": [ 8.0, 4.0, 4.0 ], + "uv": [ 40, 38 ] + } + ] + }, + { + "name": "leg0", + "parent": "body", + "pivot": [ -2.0, 12.0, 0.0 ], + "cubes": [ + { + "origin": [ -4.0, 0.0, -2.0 ], + "size": [ 4.0, 12.0, 4.0 ], + "uv": [ 0, 22 ] + } + ] + }, + { + "name": "leg1", + "parent": "body", + "pivot": [ 2.0, 12.0, 0.0 ], + "mirror": true, + "cubes": [ + { + "origin": [ 0.0, 0.0, -2.0 ], + "size": [ 4.0, 12.0, 4.0 ], + "uv": [ 0, 22 ] + } + ] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [ -5.0, 22.0, 0.0 ], + "locators": { + "right_hand": [ -6.0, 12.0, 0.0 ] + }, + "cubes": [ + { + "origin": [ -8.0, 12.0, -2.0 ], + "size": [ 4.0, 12.0, 4.0 ], + "uv": [ 40, 46 ] + } + ] + }, + { + "name": "rightItem", + "pivot": [ -5.5, 16, 0.5 ], + "neverRender": true, + "parent": "rightArm" + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [ 5.0, 22.0, 0.0 ], + "locators": { + "left_hand": [ 6.0, 12.0, 0.0 ] + }, + "mirror": true, + "cubes": [ + { + "origin": [ 4.0, 12.0, -2.0 ], + "size": [ 4.0, 12.0, 4.0 ], + "uv": [ 40, 46 ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/lava_lizard.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/lava_lizard.geometry.json new file mode 100644 index 0000000..612f690 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/lava_lizard.geometry.json @@ -0,0 +1,65 @@ +{ + "format_version": "1.10.0", + "geometry.lava_lizard": { + "texturewidth": 32, + "textureheight": 32, + "visible_bounds_width": 3, + "visible_bounds_height": 1.5, + "visible_bounds_offset": [0, 0.25, 0], + "bones": [ + { + "name": "body", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [-1, 1, 1], "size": [2, 4, 7], "uv": [0, 0]}, + {"origin": [0, 5, 0], "size": [0, 1, 6], "uv": [20, -6]}, + {"origin": [-0.9992, 2.0008, -3], "size": [2, 3, 1], "uv": [0, 0]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 2, 0], + "cubes": [ + {"origin": [-1, 1, -2], "size": [2, 4, 3], "uv": [11, 0]} + ] + }, + { + "name": "leftFin", + "parent": "body", + "pivot": [1, 1, 0], + "rotation": [0, 0, 35], + "cubes": [ + {"origin": [1, 1, 1], "size": [2, 0, 1], "uv": [24, 4]} + ] + }, + { + "name": "rightFin", + "parent": "body", + "pivot": [-1, 1, 0], + "rotation": [0, 0, -35], + "cubes": [ + {"origin": [-3, 1, 1], "size": [2, 0, 1], "uv": [24, 1]}, + {"origin": [-3, 1, 6], "size": [2, 0, 1], "uv": [24, 1]} + ] + }, + { + "name": "tailfin", + "parent": "body", + "pivot": [0, 0, 8], + "cubes": [ + {"origin": [0, 1, 8], "size": [0, 4, 6], "uv": [20, 1]} + ] + }, + { + "name": "waist", + "parent": "body", + "pivot": [0, 1, 0], + "rotation": [0, 0, 45], + "cubes": [ + {"origin": [0.94038, 1.74959, 6], "size": [2, 0, 1], "uv": [24, 1]} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/little_soul.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/little_soul.geometry.json new file mode 100644 index 0000000..31bdad1 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/little_soul.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.little_soul","texture_width":64,"texture_height":64,"visible_bounds_width":5,"visible_bounds_height":5.5,"visible_bounds_offset":[0,1.25,0]},"bones":[{"name":"root","pivot":[0,0,0]},{"name":"waist","parent":"root","pivot":[0,12,0]},{"name":"body","parent":"waist","pivot":[1,24,0],"cubes":[{"origin":[-4,12,-4],"size":[8,10,8],"uv":[0,0]},{"origin":[-4,9,-4],"size":[8,3,0],"uv":[24,3]},{"origin":[-4,9,4],"size":[8,3,0],"uv":[24,0]},{"origin":[4,9,-4],"size":[0,3,8],"uv":[0,13]},{"origin":[-4,9,-4],"size":[0,3,8],"uv":[0,10]}]},{"name":"head","parent":"body","pivot":[1,24,0]},{"name":"hat","parent":"head","pivot":[1,24,0]},{"name":"leftArm","parent":"body","pivot":[3,16,-1],"cubes":[{"origin":[3.5,15,-2],"size":[6,2,2],"pivot":[3,16,-1],"rotation":[0,45,0],"uv":[14,22]}]},{"name":"rightArm","parent":"body","pivot":[-4,16,-1],"cubes":[{"origin":[-9,15,-1.29289],"size":[6,2,2],"pivot":[-2,16,-1],"rotation":[0,-45,0],"uv":[16,18]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/murloc_wizard.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/murloc_wizard.geometry.json new file mode 100644 index 0000000..0b2dcec --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/murloc_wizard.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.murloc","texture_width":64,"texture_height":64,"visible_bounds_width":6,"visible_bounds_height":4.5,"visible_bounds_offset":[0,0.75,0]},"bones":[{"name":"rightLeg","pivot":[-1.9,12,0]},{"name":"body","pivot":[0,24,0],"cubes":[{"origin":[-4,12,-2],"size":[8,12,4],"uv":{"north":{"uv":[4,20],"uv_size":[8,12]},"east":{"uv":[0,20],"uv_size":[4,12]},"south":{"uv":[16,20],"uv_size":[8,12]},"west":{"uv":[12,20],"uv_size":[4,12]},"up":{"uv":[4,16],"uv_size":[8,4]},"down":{"uv":[12,20],"uv_size":[8,-4]}}},{"origin":[-1,22,0],"size":[1,1,3],"uv":{"north":{"uv":[27,7],"uv_size":[1,1]},"east":{"uv":[24,7],"uv_size":[3,1]},"south":{"uv":[31,7],"uv_size":[1,1]},"west":{"uv":[28,7],"uv_size":[3,1]},"up":{"uv":[27,4],"uv_size":[1,3]},"down":{"uv":[28,7],"uv_size":[1,-3]}}},{"origin":[-1,20,1],"size":[1,1,3],"uv":{"north":{"uv":[27,3],"uv_size":[1,1]},"east":{"uv":[24,3],"uv_size":[3,1]},"south":{"uv":[31,3],"uv_size":[1,1]},"west":{"uv":[28,3],"uv_size":[3,1]},"up":{"uv":[27,0],"uv_size":[1,3]},"down":{"uv":[28,3],"uv_size":[1,-3]}}},{"origin":[-1,18,2],"size":[1,1,3],"uv":{"north":{"uv":[23,19],"uv_size":[1,1]},"east":{"uv":[20,19],"uv_size":[3,1]},"south":{"uv":[27,19],"uv_size":[1,1]},"west":{"uv":[24,19],"uv_size":[3,1]},"up":{"uv":[23,16],"uv_size":[1,3]},"down":{"uv":[24,19],"uv_size":[1,-3]}}},{"origin":[-1,16,1],"size":[1,1,3],"uv":{"north":{"uv":[3,7],"uv_size":[1,1]},"east":{"uv":[0,7],"uv_size":[3,1]},"south":{"uv":[7,7],"uv_size":[1,1]},"west":{"uv":[4,7],"uv_size":[3,1]},"up":{"uv":[3,4],"uv_size":[1,3]},"down":{"uv":[4,7],"uv_size":[1,-3]}}},{"origin":[-1,14,0],"size":[1,1,3],"uv":{"north":{"uv":[3,3],"uv_size":[1,1]},"east":{"uv":[0,3],"uv_size":[3,1]},"south":{"uv":[7,3],"uv_size":[1,1]},"west":{"uv":[4,3],"uv_size":[3,1]},"up":{"uv":[3,0],"uv_size":[1,3]},"down":{"uv":[4,3],"uv_size":[1,-3]}}}]},{"name":"head","parent":"body","pivot":[0,24,0],"cubes":[{"origin":[-4,24,-4],"size":[8,8,8],"uv":{"north":{"uv":[8,8],"uv_size":[8,8]},"east":{"uv":[0,8],"uv_size":[8,8]},"south":{"uv":[24,8],"uv_size":[8,8]},"west":{"uv":[16,8],"uv_size":[8,8]},"up":{"uv":[8,0],"uv_size":[8,8]},"down":{"uv":[16,8],"uv_size":[8,-8]}}}]},{"name":"leftArm","parent":"body","pivot":[5,22,0],"cubes":[{"origin":[4,12,-2],"size":[4,12,4],"uv":{"north":{"uv":[36,4],"uv_size":[4,12]},"east":{"uv":[32,4],"uv_size":[4,12]},"south":{"uv":[44,4],"uv_size":[4,12]},"west":{"uv":[40,4],"uv_size":[4,12]},"up":{"uv":[36,0],"uv_size":[4,4]},"down":{"uv":[40,4],"uv_size":[4,-4]}}}]},{"name":"rightArm","parent":"body","pivot":[-5,22,0],"cubes":[{"origin":[-8,12,-2],"size":[4,12,4],"uv":{"north":{"uv":[40,40],"uv_size":[4,12]},"east":{"uv":[36,40],"uv_size":[4,12]},"south":{"uv":[48,40],"uv_size":[4,12]},"west":{"uv":[44,40],"uv_size":[4,12]},"up":{"uv":[40,36],"uv_size":[4,4]},"down":{"uv":[44,40],"uv_size":[4,-4]}}}]},{"name":"leftLeg","parent":"body","pivot":[1.9,12,0]},{"name":"bone","parent":"leftLeg","pivot":[0,12,0],"cubes":[{"origin":[-4.1,6,-2],"size":[8,6,4],"uv":{"north":{"uv":[12.5,23],"uv_size":[4,8]},"east":{"uv":[13,20],"uv_size":[4,12]},"south":{"uv":[12.5,19.5],"uv_size":[4.5,9]},"west":{"uv":[13,20],"uv_size":[4,12]},"up":{"uv":[28,24],"uv_size":[4,4]},"down":{"uv":[32,28],"uv_size":[4,-4]}}}]},{"name":"bone2","parent":"bone","pivot":[0,6,0],"cubes":[{"origin":[-3.1,0,-2],"size":[6,6,3],"uv":{"north":{"uv":[12.5,23],"uv_size":[4,8]},"east":{"uv":[13,20],"uv_size":[4,12]},"south":{"uv":[12.5,19.5],"uv_size":[4.5,9]},"west":{"uv":[13,20],"uv_size":[4,12]},"up":{"uv":[28,24],"uv_size":[4,4]},"down":{"uv":[32,28],"uv_size":[4,-4]}}}]},{"name":"bone3","parent":"bone2","pivot":[0,0,0],"cubes":[{"origin":[-5.1,-9,-1],"size":[10,9,1],"uv":{"north":{"uv":[12.5,23],"uv_size":[4,8]},"east":{"uv":[13,20],"uv_size":[4,12]},"south":{"uv":[12.5,19.5],"uv_size":[4.5,9]},"west":{"uv":[13,20],"uv_size":[4,12]},"up":{"uv":[28,24],"uv_size":[4,4]},"down":{"uv":[32,28],"uv_size":[4,-4]}}}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/mushroom_monster.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/mushroom_monster.geometry.json new file mode 100644 index 0000000..7f6bb66 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/mushroom_monster.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.mushroom_monster","texture_width":64,"texture_height":64,"visible_bounds_width":2,"visible_bounds_height":2.5,"visible_bounds_offset":[0,0.75,0]},"bones":[{"name":"global","pivot":[0,0,0]},{"name":"body","parent":"global","pivot":[2,0,-3],"cubes":[{"origin":[-3,0,-3],"size":[5,5,5],"uv":[0,19]}]},{"name":"head","parent":"global","pivot":[2,0,-3],"cubes":[{"origin":[-5,5,-5],"size":[9,2,9],"uv":[0,0]},{"origin":[-4,7,-4],"size":[7,1,7],"uv":[0,11]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/nautilus.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/nautilus.geometry.json new file mode 100644 index 0000000..d334292 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/nautilus.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.nautilus","texture_width":128,"texture_height":128,"visible_bounds_width":2,"visible_bounds_height":1,"visible_bounds_offset":[0,0,0]},"bones":[{"name":"bone","pivot":[0,0,0],"cubes":[{"origin":[-3,0,0],"size":[5,1,1],"uv":[40,37]},{"origin":[-3,0,-1],"size":[5,1,1],"uv":[22,32]},{"origin":[-3,0,-2],"size":[5,1,1],"uv":[22,30]},{"origin":[-3,1,-3],"size":[5,1,1],"uv":[22,28]},{"origin":[-3,1,-4],"size":[5,1,1],"uv":[22,26]},{"origin":[-3,2,-5],"size":[5,1,1],"uv":[0,23]},{"origin":[-3,0,1],"size":[5,1,1],"uv":[22,19]},{"origin":[-3,1,-2],"size":[5,1,5],"uv":[23,47]},{"origin":[-3,1,3],"size":[5,1,1],"uv":[22,17]},{"origin":[-3,2,-4],"size":[5,1,9],"uv":[0,41]},{"origin":[-3,3,-5],"size":[5,1,11],"uv":[40,40]},{"origin":[-3,4,-5],"size":[5,1,11],"uv":[19,35]},{"origin":[-4,4,-5],"size":[7,2,2],"uv":[43,7]},{"origin":[-3,5,-5],"size":[5,1,12],"uv":[22,22]},{"origin":[-3,6,-5],"size":[5,1,12],"uv":[0,13]},{"origin":[-4,3,-3],"size":[7,6,8],"uv":[0,27]},{"origin":[-4,9,-2],"size":[7,1,6],"uv":[43,0]},{"origin":[-4,2,-2],"size":[7,1,5],"uv":[44,12]},{"origin":[-3,7,-5],"size":[5,1,12],"uv":[0,0]},{"origin":[-3,8,-4],"size":[5,1,11],"uv":[22,0]},{"origin":[-3,9,-3],"size":[5,1,9],"uv":[25,12]},{"origin":[-3,10,-2],"size":[5,1,6],"uv":[44,22]},{"origin":[-3,11,2],"size":[5,1,1],"uv":[22,15]},{"origin":[-3,11,1],"size":[5,1,1],"uv":[22,13]},{"origin":[-3,11,0],"size":[5,1,1],"uv":[22,22]},{"origin":[-3,11,-1],"size":[5,1,1],"uv":[0,21]},{"origin":[-3,11,-2],"size":[5,1,1],"uv":[0,19]},{"origin":[-3,10,-3],"size":[5,1,1],"uv":[0,17]},{"origin":[-3,9,-4],"size":[5,1,1],"uv":[0,15]},{"origin":[-3,8,-5],"size":[5,1,1],"uv":[0,13]},{"origin":[-3,8,-6],"size":[5,1,1],"uv":[0,9]},{"origin":[-3,7,-7],"size":[5,1,1],"uv":[0,7]},{"origin":[-3,6,-7],"size":[5,1,1],"uv":[0,5]},{"origin":[-2,6,-8],"size":[3,1,1],"uv":[22,4]},{"origin":[-3,5,-6],"size":[5,2,1],"uv":[0,0]},{"origin":[-2,6,-9],"size":[3,1,1],"uv":[22,2]},{"origin":[-1,6,-10],"size":[1,1,1],"uv":[22,6]},{"origin":[-2,7,-8],"size":[3,1,1],"uv":[22,0]},{"origin":[-3,7,-6],"size":[5,1,1],"uv":[0,3]}]},{"name":"bone2","parent":"bone","pivot":[-2,5,-6],"cubes":[{"origin":[-3,5,-12],"size":[1,1,7],"uv":[0,59]}]},{"name":"bone3","parent":"bone","pivot":[-3,4,-5],"cubes":[{"origin":[-3,3,-12],"size":[1,1,7],"uv":[58,30]}]},{"name":"bone4","parent":"bone","pivot":[-3,1,-4],"cubes":[{"origin":[-3,1,-11],"size":[1,1,7],"uv":[27,54]}]},{"name":"bone5","parent":"bone","pivot":[-1,2,-5],"cubes":[{"origin":[-1,1,-11],"size":[1,1,7],"uv":[18,53]}]},{"name":"bone6","parent":"bone","pivot":[1,2,-4],"cubes":[{"origin":[1,1,-11],"size":[1,1,7],"uv":[52,52]}]},{"name":"bone7","parent":"bone","pivot":[1,-3,1]},{"name":"bone8","parent":"bone","pivot":[3,-3,1]},{"name":"bone9","parent":"bone","pivot":[-1,4,-6],"cubes":[{"origin":[-1,3,-11],"size":[1,1,7],"uv":[36,52]}]},{"name":"bone10","parent":"bone","pivot":[2,4,-4],"cubes":[{"origin":[1,3,-11],"size":[1,1,7],"uv":[9,52]}]},{"name":"bone11","parent":"bone","pivot":[1,5,-6],"cubes":[{"origin":[1,5,-11],"size":[1,1,7],"uv":[0,51]}]},{"name":"bone12","parent":"bone","pivot":[0,6,-6],"cubes":[{"origin":[-1,5,-11],"size":[1,1,7],"uv":[49,29]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/saucer.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/saucer.geometry.json new file mode 100644 index 0000000..1e7236b --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/saucer.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.saucer","texture_width":128,"texture_height":128,"visible_bounds_width":1,"visible_bounds_height":1,"visible_bounds_offset":[0,0,0]},"bones":[{"name":"bottom","pivot":[0,0,0],"cubes":[{"origin":[-10,0,-10],"size":[20,1,20],"uv":[0,0]},{"origin":[-7,1,-7],"size":[14,1,14],"uv":[0,21]}]},{"name":"body","pivot":[0,0,0],"cubes":[{"origin":[-6,2,-6],"size":[12,6,12],"uv":[0,36]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/sea_urchin.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/sea_urchin.geometry.json new file mode 100644 index 0000000..daee2c9 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/sea_urchin.geometry.json @@ -0,0 +1 @@ +{"format_version":"1.12.0","minecraft:geometry":[{"description":{"identifier":"geometry.sea_urchin","texture_width":16,"texture_height":16,"visible_bounds_width":2,"visible_bounds_height":1,"visible_bounds_offset":[0,0.5,0]},"bones":[{"name":"bone","pivot":[0,0,0],"cubes":[{"origin":[-3,-2,-2],"size":[5,5,5],"uv":[0,0]},{"origin":[-7,0,1],"size":[4,1,1],"uv":[0,0]},{"origin":[-1,1,3],"size":[1,1,4],"uv":[0,0]},{"origin":[-2,0,-7],"size":[1,1,5],"uv":[0,0]},{"origin":[2,-1,-1],"size":[4,1,1],"uv":[0,0]},{"origin":[0,3,-1],"size":[1,4,1],"uv":[0,0]},{"origin":[-2,3,1],"size":[1,7,1],"uv":[0,0]},{"origin":[2,0,1],"size":[2,1,1],"uv":[0,0]},{"origin":[1,2,-6],"size":[1,1,4],"uv":[0,0]},{"origin":[-1,-7,0],"size":[1,5,1],"uv":[0,0]},{"origin":[-3,-5,2],"size":[1,3,1],"uv":[0,0]},{"origin":[-2,-7,-2],"size":[1,5,1],"uv":[0,0]},{"origin":[-7,1,-2],"size":[4,1,1],"uv":[0,0]},{"origin":[2,2,-2],"size":[3,1,1],"uv":[4,1]},{"origin":[-3,0,3],"size":[1,1,3],"uv":[0,0]},{"origin":[1,-1,3],"size":[1,1,3],"uv":[0,0]}]}]}]} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/shadow_of_deep.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/shadow_of_deep.geometry.json new file mode 100644 index 0000000..c0b9904 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/shadow_of_deep.geometry.json @@ -0,0 +1,84 @@ +{ + "format_version": "1.10.0", + "geometry.host_of_deep": { + "texturewidth": 64, + "textureheight": 64, + "visible_bounds_width": 2, + "visible_bounds_height": 3, + "visible_bounds_offset": [0, 1.5, 0], + "bones": [ + { + "name": "body", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 12, -3], "size": [8, 12, 6], "uv": [16, 20]}, + {"origin": [-4, 6, -3], "size": [8, 18, 6], "uv": [0, 38], "inflate": 0.5} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 24, -4], "size": [8, 10, 8], "uv": [0, 0]}, + {"origin": [-4, 24, -4], "size": [8, 10, 8], "uv": [32, 0], "inflate": 0.5} + ] + }, + { + "name": "arms", + "parent": "body", + "pivot": [0, 22, 0], + "cubes": [ + {"origin": [-8, 16, -2], "size": [4, 8, 4], "uv": [44, 22]}, + {"origin": [4, 16, -2], "size": [4, 8, 4], "uv": [44, 22]}, + {"origin": [-4, 16, -2], "size": [8, 4, 4], "uv": [40, 38]} + ] + }, + { + "name": "leg0", + "parent": "body", + "pivot": [-2, 12, 0], + "cubes": [ + {"origin": [-4, 0, -2], "size": [4, 12, 4], "uv": [0, 22]} + ] + }, + { + "name": "leg1", + "parent": "body", + "pivot": [2, 12, 0], + "mirror": true, + "cubes": [ + {"origin": [0, 0, -2], "size": [4, 12, 4], "uv": [0, 22]} + ] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-5, 22, 0], + "cubes": [ + {"origin": [-8, 12, -2], "size": [4, 12, 4], "uv": [40, 46]} + ], + "locators": { + "right_hand": [-6, 12, 0] + } + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-5.5, 16, 0.5] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [5, 22, 0], + "mirror": true, + "cubes": [ + {"origin": [4, 12, -2], "size": [4, 12, 4], "uv": [40, 46]} + ], + "locators": { + "left_hand": [6, 12, 0] + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/shadow_soul_1.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/shadow_soul_1.geometry.json new file mode 100644 index 0000000..367eba6 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/shadow_soul_1.geometry.json @@ -0,0 +1,250 @@ +{ + "format_version": "1.10.0", + "geometry.escaped_soul": { + "texturewidth": 128, + "textureheight": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 4, + "visible_bounds_offset": [0, 2, 0], + "bones": [ + { + "name": "root", + "pivot": [0, 19, 0], + "locators": { + "particles_point": [0, 19, 0] + } + }, + { + "name": "waist", + "parent": "root", + "pivot": [0, 15, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 21, 0], + "cubes": [ + {"origin": [-6, 21, -2], "size": [12, 12, 4], "uv": [36, 0]}, + {"origin": [-5, 15, -2], "size": [10, 6, 4], "uv": [52, 34], "inflate": -0.01}, + {"origin": [-5, 11, 2], "size": [10, 4, 0], "uv": [56, 56]}, + {"origin": [5, 11, -2], "size": [0, 4, 4], "uv": [0, 10]}, + {"origin": [-5, 11, -2], "size": [0, 4, 4], "uv": [0, 0]}, + {"origin": [-5, 11, -2], "size": [10, 4, 0], "uv": [56, 52]}, + {"origin": [-4, 24, -4], "size": [8, 8, 6], "uv": [48, 16], "inflate": -1}, + {"origin": [-6, 17, -2], "size": [12, 4, 0], "uv": [56, 30]}, + {"origin": [-6, 17, 2], "size": [12, 4, 0], "uv": [24, 16]}, + {"origin": [-6, 17, -2], "size": [0, 4, 4], "uv": [28, 0]}, + {"origin": [6, 17, -2], "size": [0, 4, 4], "uv": [0, 14]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 33, 0] + }, + { + "name": "maxilla", + "parent": "head", + "pivot": [0, 33, 0], + "cubes": [ + {"origin": [-5, 35, -4], "size": [10, 6, 8], "uv": [0, 0]}, + {"origin": [-5, 33, -4], "size": [10, 2, 0], "uv": [60, 62], "inflate": -0.01}, + {"origin": [-5, 33, 4], "size": [10, 2, 0], "uv": [56, 60], "inflate": -0.01}, + {"origin": [5, 33, -4], "size": [0, 2, 8], "uv": [20, 50], "inflate": -0.01}, + {"origin": [-5, 33, -4], "size": [0, 2, 8], "uv": [20, 48], "inflate": -0.01} + ] + }, + { + "name": "royal_crown", + "parent": "maxilla", + "pivot": [0, 7, 0], + "cubes": [ + {"origin": [-4, 41, 2], "size": [8, 2, 2], "uv": [56, 48]}, + {"origin": [2, 43, -4], "size": [2, 2, 2], "uv": [46, 18]}, + {"origin": [-1, 43, -4], "size": [2, 4, 2], "uv": [0, 38]}, + {"origin": [-4, 43, -4], "size": [2, 2, 2], "uv": [0, 0]}, + {"origin": [2, 41, -2], "size": [2, 2, 4], "uv": [20, 64]}, + {"origin": [-4, 41, -2], "size": [2, 2, 4], "uv": [28, 38]}, + {"origin": [-4, 41, -4], "size": [8, 2, 2], "uv": [56, 44]} + ] + }, + { + "name": "maxilla0", + "parent": "head", + "pivot": [0, 33, 0], + "cubes": [ + {"origin": [-5, 33, -4], "size": [10, 2, 8], "uv": [0, 38], "inflate": 0.01}, + {"origin": [5, 31, -4], "size": [0, 2, 8], "uv": [20, 46], "inflate": -0.01}, + {"origin": [-5, 31, -4], "size": [0, 2, 8], "uv": [24, 12], "inflate": -0.01}, + {"origin": [-5, 31, -4], "size": [10, 2, 0], "uv": [40, 62], "inflate": -0.01}, + {"origin": [-5, 31, 4], "size": [10, 2, 0], "uv": [20, 62], "inflate": -0.01} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 33, 0] + }, + { + "name": "cape", + "parent": "body", + "pivot": [0, 31, 3] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [7, 29, 0], + "cubes": [ + {"origin": [6, 15, -3], "size": [4, 18, 6], "uv": [0, 48]} + ] + }, + { + "name": "left_shoulder", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [0, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -0.99} + ] + }, + { + "name": "left_shoulder4", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "left_shoulder3", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [-45, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "left_shoulder2", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [45, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "leftSleeve", + "parent": "leftArm", + "pivot": [7, 29, 0] + }, + { + "name": "leftItem", + "parent": "leftArm", + "pivot": [8, 22, 1] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-7, 29, 0], + "cubes": [ + {"origin": [-10, 15, -3], "size": [4, 18, 6], "uv": [36, 38]} + ] + }, + { + "name": "rightSleeve", + "parent": "rightArm", + "pivot": [-7, 29, 0] + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-8, 22, 1], + "locators": { + "lead_hold": [-8, 22, 1] + } + }, + { + "name": "right_shoulder", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [0, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -0.99}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -0.99} + ] + }, + { + "name": "right_shoulder4", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "right_shoulder3", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [-45, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "right_shoulder2", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [45, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "jacket", + "parent": "body", + "pivot": [0, 31, 0] + }, + { + "name": "leg", + "parent": "root", + "pivot": [0, 19, 0] + }, + { + "name": "leg0", + "parent": "leg", + "pivot": [0, 17, 0] + }, + { + "name": "leg1", + "parent": "leg0", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-4, 9, -2], "size": [8, 4, 4], "uv": [0, 30], "inflate": -0.01} + ] + }, + { + "name": "leg2", + "parent": "leg1", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-3, 6, -2], "size": [6, 2, 4], "uv": [14, 48], "inflate": -0.01} + ] + }, + { + "name": "leg3", + "parent": "leg2", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-2, 3, -1], "size": [4, 2, 2], "uv": [28, 0], "inflate": -0.01}, + {"origin": [-1, 0, -1], "size": [2, 2, 2], "uv": [64, 0], "inflate": -0.01} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/shadow_soul_2.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/shadow_soul_2.geometry.json new file mode 100644 index 0000000..367eba6 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/shadow_soul_2.geometry.json @@ -0,0 +1,250 @@ +{ + "format_version": "1.10.0", + "geometry.escaped_soul": { + "texturewidth": 128, + "textureheight": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 4, + "visible_bounds_offset": [0, 2, 0], + "bones": [ + { + "name": "root", + "pivot": [0, 19, 0], + "locators": { + "particles_point": [0, 19, 0] + } + }, + { + "name": "waist", + "parent": "root", + "pivot": [0, 15, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 21, 0], + "cubes": [ + {"origin": [-6, 21, -2], "size": [12, 12, 4], "uv": [36, 0]}, + {"origin": [-5, 15, -2], "size": [10, 6, 4], "uv": [52, 34], "inflate": -0.01}, + {"origin": [-5, 11, 2], "size": [10, 4, 0], "uv": [56, 56]}, + {"origin": [5, 11, -2], "size": [0, 4, 4], "uv": [0, 10]}, + {"origin": [-5, 11, -2], "size": [0, 4, 4], "uv": [0, 0]}, + {"origin": [-5, 11, -2], "size": [10, 4, 0], "uv": [56, 52]}, + {"origin": [-4, 24, -4], "size": [8, 8, 6], "uv": [48, 16], "inflate": -1}, + {"origin": [-6, 17, -2], "size": [12, 4, 0], "uv": [56, 30]}, + {"origin": [-6, 17, 2], "size": [12, 4, 0], "uv": [24, 16]}, + {"origin": [-6, 17, -2], "size": [0, 4, 4], "uv": [28, 0]}, + {"origin": [6, 17, -2], "size": [0, 4, 4], "uv": [0, 14]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 33, 0] + }, + { + "name": "maxilla", + "parent": "head", + "pivot": [0, 33, 0], + "cubes": [ + {"origin": [-5, 35, -4], "size": [10, 6, 8], "uv": [0, 0]}, + {"origin": [-5, 33, -4], "size": [10, 2, 0], "uv": [60, 62], "inflate": -0.01}, + {"origin": [-5, 33, 4], "size": [10, 2, 0], "uv": [56, 60], "inflate": -0.01}, + {"origin": [5, 33, -4], "size": [0, 2, 8], "uv": [20, 50], "inflate": -0.01}, + {"origin": [-5, 33, -4], "size": [0, 2, 8], "uv": [20, 48], "inflate": -0.01} + ] + }, + { + "name": "royal_crown", + "parent": "maxilla", + "pivot": [0, 7, 0], + "cubes": [ + {"origin": [-4, 41, 2], "size": [8, 2, 2], "uv": [56, 48]}, + {"origin": [2, 43, -4], "size": [2, 2, 2], "uv": [46, 18]}, + {"origin": [-1, 43, -4], "size": [2, 4, 2], "uv": [0, 38]}, + {"origin": [-4, 43, -4], "size": [2, 2, 2], "uv": [0, 0]}, + {"origin": [2, 41, -2], "size": [2, 2, 4], "uv": [20, 64]}, + {"origin": [-4, 41, -2], "size": [2, 2, 4], "uv": [28, 38]}, + {"origin": [-4, 41, -4], "size": [8, 2, 2], "uv": [56, 44]} + ] + }, + { + "name": "maxilla0", + "parent": "head", + "pivot": [0, 33, 0], + "cubes": [ + {"origin": [-5, 33, -4], "size": [10, 2, 8], "uv": [0, 38], "inflate": 0.01}, + {"origin": [5, 31, -4], "size": [0, 2, 8], "uv": [20, 46], "inflate": -0.01}, + {"origin": [-5, 31, -4], "size": [0, 2, 8], "uv": [24, 12], "inflate": -0.01}, + {"origin": [-5, 31, -4], "size": [10, 2, 0], "uv": [40, 62], "inflate": -0.01}, + {"origin": [-5, 31, 4], "size": [10, 2, 0], "uv": [20, 62], "inflate": -0.01} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 33, 0] + }, + { + "name": "cape", + "parent": "body", + "pivot": [0, 31, 3] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [7, 29, 0], + "cubes": [ + {"origin": [6, 15, -3], "size": [4, 18, 6], "uv": [0, 48]} + ] + }, + { + "name": "left_shoulder", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [0, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -0.99} + ] + }, + { + "name": "left_shoulder4", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "left_shoulder3", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [-45, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "left_shoulder2", + "parent": "leftArm", + "pivot": [5, 31, 0], + "rotation": [45, 0, 45], + "cubes": [ + {"origin": [3.12132, 30.53553, -4], "size": [8, 8, 8], "uv": [24, 22], "inflate": -2} + ] + }, + { + "name": "leftSleeve", + "parent": "leftArm", + "pivot": [7, 29, 0] + }, + { + "name": "leftItem", + "parent": "leftArm", + "pivot": [8, 22, 1] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-7, 29, 0], + "cubes": [ + {"origin": [-10, 15, -3], "size": [4, 18, 6], "uv": [36, 38]} + ] + }, + { + "name": "rightSleeve", + "parent": "rightArm", + "pivot": [-7, 29, 0] + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-8, 22, 1], + "locators": { + "lead_hold": [-8, 22, 1] + } + }, + { + "name": "right_shoulder", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [0, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -0.99}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -0.99} + ] + }, + { + "name": "right_shoulder4", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "right_shoulder3", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [-45, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "right_shoulder2", + "parent": "rightArm", + "pivot": [-5, 31, 0], + "rotation": [45, 0, -45], + "cubes": [ + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2}, + {"origin": [-11, 31, -4], "size": [8, 8, 8], "uv": [0, 14], "inflate": -2} + ] + }, + { + "name": "jacket", + "parent": "body", + "pivot": [0, 31, 0] + }, + { + "name": "leg", + "parent": "root", + "pivot": [0, 19, 0] + }, + { + "name": "leg0", + "parent": "leg", + "pivot": [0, 17, 0] + }, + { + "name": "leg1", + "parent": "leg0", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-4, 9, -2], "size": [8, 4, 4], "uv": [0, 30], "inflate": -0.01} + ] + }, + { + "name": "leg2", + "parent": "leg1", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-3, 6, -2], "size": [6, 2, 4], "uv": [14, 48], "inflate": -0.01} + ] + }, + { + "name": "leg3", + "parent": "leg2", + "pivot": [0, 17, 0], + "cubes": [ + {"origin": [-2, 3, -1], "size": [4, 2, 2], "uv": [28, 0], "inflate": -0.01}, + {"origin": [-1, 0, -1], "size": [2, 2, 2], "uv": [64, 0], "inflate": -0.01} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/soul_soldier.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/soul_soldier.geometry.json new file mode 100644 index 0000000..7690f93 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/soul_soldier.geometry.json @@ -0,0 +1,157 @@ +{ + "format_version": "1.10.0", + "geometry.soul_soldier": { + "texturewidth": 64, + "textureheight": 64, + "visible_bounds_width": 3, + "visible_bounds_height": 3, + "visible_bounds_offset": [0, 1.5, 0], + "bones": [ + { + "name": "root", + "pivot": [0, 16, 0], + "locators": { + "particles_point": [0, 16, 0] + } + }, + { + "name": "waist", + "parent": "root", + "pivot": [0, 12, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 14, 0], + "cubes": [ + {"origin": [-4, 14, -2], "size": [8, 12, 4], "uv": [0, 28]}, + {"origin": [-4, 19, -5], "size": [8, 8, 6], "uv": [0, 14], "inflate": -2}, + {"origin": [-4, 10, -2], "size": [8, 4, 0], "uv": [44, 18]}, + {"origin": [-4, 10, 2], "size": [8, 4, 0], "uv": [44, 0]}, + {"origin": [-4, 10, -2], "size": [0, 4, 4], "uv": [22, 10]}, + {"origin": [4, 10, -2], "size": [0, 4, 4], "uv": [0, 0]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 26, 0] + }, + { + "name": "maxilla", + "parent": "head", + "pivot": [0, 26, 0], + "cubes": [ + {"origin": [-4, 28, -4], "size": [8, 6, 8], "uv": [0, 0]}, + {"origin": [-4, 26, 4], "size": [8, 2, 0], "uv": [0, 44], "inflate": -0.011}, + {"origin": [-4, 26, -4], "size": [8, 2, 0], "uv": [0, 44], "inflate": -0.01}, + {"origin": [4, 26, -4], "size": [0, 2, 8], "uv": [0, 36], "inflate": -0.01}, + {"origin": [-4, 26, -4], "size": [0, 2, 8], "uv": [0, 36], "inflate": -0.01} + ] + }, + { + "name": "maxilla0", + "parent": "head", + "pivot": [0, 26, 0], + "cubes": [ + {"origin": [-4, 26, -4], "size": [8, 2, 8], "uv": [20, 20], "inflate": 0.01}, + {"origin": [4, 24, -4], "size": [0, 2, 8], "uv": [22, 10], "inflate": -0.01}, + {"origin": [-4, 24, -4], "size": [0, 2, 8], "uv": [22, 10], "inflate": -0.01}, + {"origin": [-4, 24, -4], "size": [8, 2, 0], "uv": [44, 22], "inflate": -0.01}, + {"origin": [-4, 24, 4], "size": [8, 2, 0], "uv": [44, 22], "inflate": -0.01} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 26, 0] + }, + { + "name": "cape", + "parent": "body", + "pivot": [0, 24, 3] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [5, 22, 0], + "cubes": [ + {"origin": [4, 12, -2], "size": [4, 14, 4], "uv": [32, 0]} + ] + }, + { + "name": "leftSleeve", + "parent": "leftArm", + "pivot": [5, 22, 0] + }, + { + "name": "leftItem", + "parent": "leftArm", + "pivot": [6, 15, 1] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-5, 22, 0], + "cubes": [ + {"origin": [-8, 12, -2], "size": [4, 14, 4], "uv": [24, 30]} + ] + }, + { + "name": "rightSleeve", + "parent": "rightArm", + "pivot": [-5, 22, 0] + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-6, 15, 1], + "locators": { + "lead_hold": [-6, 15, 1] + } + }, + { + "name": "jacket", + "parent": "body", + "pivot": [0, 24, 0] + }, + { + "name": "leg", + "parent": "root", + "pivot": [0, 16, 0] + }, + { + "name": "leg0", + "parent": "leg", + "pivot": [0, 14, 0], + "cubes": [ + {"origin": [-4, 10, -2], "size": [8, 2, 4], "uv": [40, 30], "inflate": -0.01} + ] + }, + { + "name": "leg1", + "parent": "leg0", + "pivot": [0, 14, 0], + "cubes": [ + {"origin": [-3, 7, -2], "size": [6, 2, 4], "uv": [40, 36], "inflate": -0.01} + ] + }, + { + "name": "leg2", + "parent": "leg1", + "pivot": [0, 14, 0], + "cubes": [ + {"origin": [-2, 3, -2], "size": [4, 2, 4], "uv": [40, 42], "inflate": -0.01} + ] + }, + { + "name": "leg3", + "parent": "leg2", + "pivot": [0, 14, 0], + "cubes": [ + {"origin": [-1, 0, -1], "size": [2, 2, 2], "uv": [0, 0], "inflate": -0.01} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/bedrock/models/entity/werewolf.geometry.json b/src/main/resources/assets/decisland/bedrock/models/entity/werewolf.geometry.json new file mode 100644 index 0000000..16e99d2 --- /dev/null +++ b/src/main/resources/assets/decisland/bedrock/models/entity/werewolf.geometry.json @@ -0,0 +1,84 @@ +{ + "format_version": "1.10.0", + "geometry.werewolf": { + "texturewidth": 64, + "textureheight": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2, + "visible_bounds_offset": [0, 1, 0], + "bones": [ + { + "name": "waist", + "pivot": [0, 12, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 12, -2], "size": [8, 12, 4], "uv": [16, 16]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 24, -4], "size": [8, 8, 8], "uv": [0, 0]}, + {"origin": [-4, 24, -4], "size": [8, 8, 8], "uv": [0, 0]}, + {"origin": [-2, 25, -8], "size": [4, 3, 4], "uv": [24, 0]}, + {"origin": [-1, 28, -8], "size": [1, 1, 1], "uv": [0, 0]}, + {"origin": [0, 28, -8], "size": [1, 1, 1], "uv": [0, 0]}, + {"origin": [-5, 31, 1], "size": [2, 3, 1], "uv": [12, 0]}, + {"origin": [3, 31, 1], "size": [2, 3, 1], "uv": [12, 0]} + ] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-5, 22, 0], + "cubes": [ + {"origin": [-8, 12, -2], "size": [4, 12, 4], "uv": [40, 16]} + ] + }, + { + "name": "rightItem", + "parent": "rightArm", + "pivot": [-6, 15, 1] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [5, 22, 0], + "mirror": true, + "cubes": [ + {"origin": [4, 12, -2], "size": [4, 12, 4], "uv": [40, 16]} + ] + }, + { + "name": "rightLeg", + "pivot": [-1.9, 12, 0], + "cubes": [ + {"origin": [-3.9, 0, -2], "size": [4, 12, 4], "uv": [0, 16]} + ] + }, + { + "name": "leftLeg", + "pivot": [1.9, 12, 0], + "mirror": true, + "cubes": [ + {"origin": [-0.1, 0, -2], "size": [4, 12, 4], "uv": [0, 16]} + ] + }, + { + "name": "bone", + "parent": "body", + "pivot": [0, 0, 0], + "rotation": [10, 0, 0], + "cubes": [ + {"origin": [-1, 12, 3], "size": [2, 2, 7], "uv": [8, 0]} + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decisland/textures/entity/abyssal_controller.png b/src/main/resources/assets/decisland/textures/entity/abyssal_controller.png new file mode 100644 index 0000000000000000000000000000000000000000..674ce9e15ca4d3dd161ad1b968e6354e98b1f290 GIT binary patch literal 2377 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/abyssal_shadow.png b/src/main/resources/assets/decisland/textures/entity/abyssal_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..384c7667c43eb424a169202ee296360f7fe5975f GIT binary patch literal 638 zcmV-^0)hRBP)_a5OmM|BL z>xI4NMYCc!m-i`>hG0yC(AxQU-o3lk0;9!RefQzo1+Q_8dwC6@XnfzT30y4Nk^POZ zxV0Wq{N#28{Sf^$o)s#3#65|zqRPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TA@fx=z~Vf))#T#cvF%a=SB;It^(4qQJQLT84ci}XK zjlR4zyIvV~I)K1P-UD<3jpyCaMZ6B6p*H<~U(c;pD=pA5wlA~UtbmyA(WuP;Mpj0d z220`GJ`4r}Eyt$v7Le!J_v7TetOj^GV@zfZ`o8MGDs$}W(OMOd4x?_DO9|%c=0o9h zfJ}Wty)NBh5HmwMk!>0Xa}&QNnDY($6Wht!*SE|8BKWm{LdEQF8;d=nlqXF{!U^pC>&H`M=mY`2Z%Ktw`B9TZW5{X1wN2yEx*b_=o SHrlNK0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TTL0f<>i8K~u0FN<=@@6s>*|OKnA}sp11gK}59TCvBt> zglds$p|PMO7Ex&eHlYbNZLx_-jE!;gZd#Mo|H+>1*}M0d+)eJ{{$QBLotZo5%sFT7 zPNFFrzI*HG5b~MJE7db&#)L&KE&#S$D@0Fb*6*aZ?D#|qHpSo723SKlUL(KR_1&V zmTk;jNYfe{jgMh3u)PmhEa}-P6ey8UW@RueJdow3BE|x+bKxR!^z%dE(mdz>7 z@9qE4(~~R40_=7Ki{=DIN5`oj5`>2m%1evs8DI<0?>_pVFTmLTfuTr39Rkb5eY}Pg za9wdxB=N%VLI{UCCo|9wuoA$U$_mRqYckMZ~tKAJrb!@PWnDxp}o9sZzwo6 z|3XH-thA&kTv948C!6xZRRxq^93D}>4-Q3{GIoi_K+vA^7b512okZJTBS8`#;9a@7 z^YhBG5qOW+E)Wv~oWKIhonfK54T7K_tO>%R%sUUIa6cZ$=FQ{GhPEr?v{hH#L}fV_l)`l=kK+W0TMWQrtdbSdWaZ)k>KM;L!1P%NwDF0-<9ICB z@tpgxg1tuLPhY8N2?sSZuqalN6ac^yFz>Ymc_e&i*O?es;W1LtW^n-hzc_r@+Zgcb zOD{xX00$<AN<3G{>G_q02M z+|P-7YWg4(2n1-c*fADb561A00y*9;cYCdUPxUQ}a#6eY#khc56LsrCZs%{>y)B}E zoQzcZ-X9$Lo9e|y`ScrLY-)z;cn(nKvfZykSBqH=pa2L8AUKy9R)z$9xP9BZO}>{g c$?~Dpzb;9Nki?u^GXMYp07*qoM6N<$g8IcgKL7v# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ash_blaze.png b/src/main/resources/assets/decisland/textures/entity/ash_blaze.png new file mode 100644 index 0000000000000000000000000000000000000000..f4eb9ee3a67b75933d05f0307cd014d1d0b475a5 GIT binary patch literal 914 zcmV;D18w|?P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TXVrGo*xI$BINK5HT#!$__MjrKYY-7jAT8(x1_P(4XKh&^B?~XoEYAxUx}LfgdCi zFcQFqRG>i9l96-eOk(c@u(%3^0?&nwMx&HSBzQc_FeLzi)@n6swg*hc{d>1~4i!KR0J4pMg%xXO0j2~X z#z(w#-#;n7X0FUPa-Hu;n`6KHuU%h1&RDZWv2?FC8 zmr0prm=bU;dWnOF{BibImJ=K})Bq)jf;S#8)}W4AhbaM&xj6g9FGb@>0M-3J#t{%C z2qJ8w0Aw2-0QOVyCp~%mkdFk2ff@k04uA+z{Y6KZWhiES9`c{2e|u-!^j&0{P_Z#U zY<9fQPup)bl(n@rR)ENg+~-jM1*YZS+}yNQ0ivi)>hl6`MIhuUZ~$m{h|Fc_q{xjAaL+k`b72dKmDP+cw;4^XiY z@bU36XFm`K@YwEP0uV4%fTQ5^`N-{da~*)SJ5pF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ash_bomb.png b/src/main/resources/assets/decisland/textures/entity/ash_bomb.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce8293c1e5484f3fcfce3bf32a397963910dd58 GIT binary patch literal 810 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl{S3GfMVHPkUX<;SM3B%>fKBgQZArB%ts(*0SA!0%O&Kjyjkd4~WMZcBV^ z2&8yQg8YL2BLIWY{d4Dl;+zE@k;M!Qe1|}oQB=dLfq{Xk+|$J|q$2L^^wWJ$6?j}K zjqm*a|KHj&H~o6c#7zwoPj%lB6BT#Qd!zDjcZWcdk7j(J7su9VlY%(bew9l;_pmGd zZtk)|JBBjF8>Y|i{Y-6+O4d<*KJ}g1WefQS=SBA}*WS>7@y+oJ-KF=kV_)VO_kLzH zcwTTc<3=u z8D*PG?+nZ7`U4SJuwX{gaZ|T#DaKvCn{8i%T_ds1M0$P9H>OLwd*$SIt+9cKYN+YD zIo@pHm9Sa6(eQr*)RWC^MYlQ@9?40o|7^7B(%m$v=gb#EZ1Sp}PY8TqC}D4tBe6{z z92^eWJ>i?5Y}nXoDjnYSAL^X0q@aXbr=rff>FMqOY5vVv(K5+RX>oIj)ajhe718N) z#UA@b@yy-2{pW7Rh-DLEBA=Dz9EH={c%f)nB-!KOFk;mju#CL=N@1C^8F`&h6NdFlfT@4zP?r^FoAJ-yglG;21}1?91{MVdM&g+bXBqClk6&}x Wv;Wau#U;RW$>8bg=d#Wzp$P!NKxB3R literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ash_horse.png b/src/main/resources/assets/decisland/textures/entity/ash_horse.png new file mode 100644 index 0000000000000000000000000000000000000000..ea0c6f446a0676cb8a21b9e83d3d6033e1a63b0c GIT binary patch literal 6050 zcmb_ghd)*CA3wHytz=wWdxm6%%xmwxH=&ZUMaH$VSH>lKh0wiL5t&)(7TJ45wi}nY z=;C+!AAaX`&U0SR8PD^4*8B7RJc-7JT2vG)6aWBF>1eB)g7?UO7da`|_9?lb!5e|U zsg^2$8iDSB9b$h~9dmN<2qSk(001U^9d#A+;6hB1-cz2TyrFA@mi)r1FJg$`~6oLEg z(DLC!EN&&jiEd)JDdle0+1iir0Eb78^-L+^=5-dq3hdgM#5%Qnl?Q%p&{G_)7t;Kw zcS1MwB?f~jR*Gnw)2R)UQ@ZOWk;k*8f^ZUH^xYZfJKdj?93nG9+(kFJ%GucySQ}M_z}JsqN+nvH zw6IFk-lb1LHiGn@kB%fr$;hzHC6_68?%rLmNLO0(V9>aq9WR2Oot=f18Apns-&)qa z;=M8VlyT|_11Q1e<>ioR8)ntxxv5F^@#L|M6pK3`VkE(mN(hANp)Lb6%W7-CZ1^4i zy_}t&S5+z@1JI2w5HW*Wz$)%9&Bjk`aIl8tpmRQd?UWGEvv)!mslg{Uc*b$ zjCX`EfhB{n2qVpg8Pbvq-BfAH?7GN!7)*V^SyVmfLnnm*fR9u@rih3~&vTaYiWE(= ztmp?!ph3|d`GWKm+k1PS`6CB7yEl<+gOCo#`byJ*!PNjmeb?(nPuqE*oZ@w1{%1Ts zZ1lgM{WQzLF$lCfe&_14rM+)2cSzhpWKH?$%C+5xq%rh5z8SUmP0HXM5~%~wrfTMi zptbq4a{j)qN;DQEEgRmotiK58x$$-~OYjVM47F z`Rk~u^0PMGd(}UGHTe1Ytt(Ac#31URb2&M2geh_G>ZpRA;arO0)kJ5q*F z`h_}2L~umGfE4jRCnsh0qW-s!7X3%XC3wS?IAlcrUR)RpA)rIt`CQ5HtAS(!=i}8k zOP3X+<%-6lxon~E)&NgW{EI+lj+F$W8hY=KHRcrEpTd||!m?NCN*x$}i0bL-(E;|I zAqbNLQG~9TK~^X@6>*HpJ_h4U(<5adHfUU9&Z$FZX=Sz0etkTuJc@@a>reFOI>Cp# zM>qT&5Kf}>6rkVt$e^5t9?GR+o2c*j&1N#*ASOJsSmnRs%j%u|Et)yZ8y6oh|AZVH zT$s8ex7;0Ml%!d)KZvwDJL@It5L2WA&JOQJ^a`(BNgtgn{M~Hr0s~NoU*7VzK&(f8 z2UGHzeJ1a(;}@cvI2?|^dLTrgJv<_!0FhZVaRY0VY&jo>o^to4uoX&7!({dN9JDOZGZt%aZ7rMeXsL++DEj30 zh&j|qxt3x(+YtF@eN&%dQxMup(Lh5y=G&UN`tC;#u`Er8C!xvYAXR^3%wwsfAcIw8 zYI_FDRFUN4DA_X}_D_Xu{f{}XD-PNdN#Sg=_plmjKl*K?#k#*1=2MiyvRoh^l_dQi zs8mgC4lp^n0pKD;rn`+2OtN(=vyKTtK+do7?VL+hh9(a{QVFX}Z!dlf{BN&@ULsF_ z0#Dhu-LhCH-`uPZJ-ffhj$XOG!bw^v&52RENiZk7FH%Xx8F5W!Xum=FhFe&C>g0=@ zfBZ)AaUe7$ElmOhWA_E^wHI2X?RzKOZ@MwfzB1C%`Ht1KLb-(PC`qCC;6;igG)n@nyS7pWtV}-pSO4UM3t12)vVW(%}ptE}o ztOL~1M(wEM_W?^4@iZ@tw*{2XZ@{t1PTGJiY5F`DLihgF$W!SB6D2U!ar=*BtWfqY zODXshx$cMB`BjZxOop>u3^0@0)Kn_ex(1dSXkGJF(C2klZmE{1QOU2fs+Xu1T%4Sw z-y6(72!wxsWnn=Q>-9;T6mz9u?2pwZgv7bjs82|7p(WV)>DF+R4Jey3Pf&CE} zxI68J6%W~NrE1!UFuH<$4N$-7LvuxQb1lcWSToFGcKO;-&7eV~Wo2iNl>P~nm6f&s z6(MXeAuYGE+n)8cp4qQrn4_qnrG+1fM5;_kRn-bn#1b+xG0II33q%Q~YHDhJ)arq# zaneS*K*H!AeY$8FoAj-Y<*v?flKl1a=g(rwFWc=S+AovM`sVW{Z!dQcR>jHAw|_W-Rjytl55l^W%Xv>X0yP)#kZvHdXN3SE#5QPZ91UKqR6As^mNmMkLp^X6v4O_S=?$q=Df z)iP&hCayjks9dWP(Inxsp(%1|Bz4t?U8NEla45W_;;QAA9rp7dss8u~`p0~Y!3WPB zjKqt|1r==&_JZ_cReNE9O=mKG4UQRBylm;}+-Wl@I~R@hUt9FaZ*H|`JZ97gs5?f! z#Rc<2aoGsBCgifI@+e^xY{8`8@`oZ(6i`7yLR}RmoV0fKjz6t$5V1ON@G(P8;1z7-kN^i+nkiNmu zsYFn>3c){SkmN>ZelE}`5JS28DuL|D1M!0Ieiix(D_*v%Fx*&sFa^OxfS4~&t>O7T z))k19t*E*6nAEp*MqY*L)jlQGMwX;S9hWy={LAa9#Hs=vu8-r2wjH&OXW7>TEpBFl)rJOSbk?CNCN13$Of!n zq93fSu{^JS|MH_oQh1b`QpuJklZ9Mlm0jKYn8%9A{7nZZED#C`Ym`Y0MzCY1q z2$-PGE)ODTKmhCQRRP%~e7QI$M=8F~1!#CfLcK{ozVB2z?emyO$duL7)02(q>g_Gq z=mqh3Ru7T2Mv!!Yh9JEv$OS+m&@}h7&zY*y!UCa}`p}WUrY{e9XXuWHytj1M<3sZ<@33X8ryzuwNstRZF`UFTOh zCG70Z4r6F+H)lL99R0a_O9x^}y!JPq2fYycB4w})Q7xkd&+;+BWX+1Fa5($%@o|D? z1;{YLpvK&I0$r(NMf~Yr%Dbo4*~MJ2BUSwEyN&esUH1z|R}WuTS68hN!0=R^Nhp#4 zCc;Pr*xm~h#h(N#jDS#eeDcNB7}BZvB3W3X zGgkWN=UE8LxB$KHnK=AKbG{J|H7GF?BtbDdq*W2=kq>g|jz(j#L`b6gt6{g&S|KM& zUE>(AxBr{w7GET4k1Y|td7@U!ND#24#&H4;k$x*aS_R%+lDzv=`oHv{7-PYH;i=mg zZ}>4QSf+r47yB`iye)+0){SLyFo)qod&c_+U=oxudXa7t!}AD0Ye}Tss=%P|Ll_HJ z=bv%Cl(;}LGO}~pdfB#^kk;TX3)>^|{uj?n6ye{NRBUqYP?g3Iq)j+#Im?)i>MA*m z`D6+1ZX}g+LaAjOBv%aQN&Ao~EGl4ehP33HVJcgjV=7r6N7UiF4?dFsJB{fa5-C36X6` zhCeG8*x1R*>E&#ckk=7zD%QPMM17Ag(Rx2ME*9bL)@-u~KS$(GVNUvjeiB;Q*v*N& zo*4~-x;iRPPftG~HRlBGNvZR|@pwyVPps{B{u#O+EUDRJReSvunO(H*kZrgc%{+V2 zK45x#P2!G)g}9VlQu5_x@Sj62?hJCU1|M2C7aHhpR`V$QoKJuBrf6XQUA3u#w=Yh- zdVTS?sPu$Ka_+cb5056{=#f0RA)(jNUi-)(zrdXwx!7j|%R2!g@M=K{IDV%Zf1GO9 zDn^$m+cjb^A(f)eo%8h?TU}xs5;>t*m{#)+_G~DladAzf`IaN4kRODfl+gi*q$;c?XT-u=#SyO}`E zzt}s9;a`IY`P2!nyX!k2-W-mC^^8Rrf%WSE^KeAr!1|IysU!9z)Qrn`QtEZpjb}cu za&7FN@#Zj{Ae2SFXGF!k*m-Y{uDMBjs!|N9;+=@-QBrxF@#5T0Fs)i)&K+sdcC88t z;NESETywn4kI(>n7M=+&`_sgt$-SLs7YJC3$L~jjwmvi79$tgCfHc>uZ8vUY%tu`1 zfpUhn_ROP)vq?S%UO~C_??2?);Pn?KKgcibz0+h#&uYo>H!?K%X@on_%dZl5n7JeB z%%9Z@vg9k9Fjwp9--uubko^5xGf|^kQl6jtHL@?lv#=q{SO}l;xH#I@=jX{#2?X~C z+$ET6<`_}1XWKG-9UYCgGY%-Bym z2G+qBEOSDln6Ur~CLgi37^Q{K`Ox)sN?`f@vx?>IzpjIHrb@kki|wEmJrO*qcl*fV z7HZq$f*7`9Id>l11W#oq_Onp}&6N_dwZGB!^Q*>0g1P8mGvu0LA6g)&<54iS$~LfY z_hcf#R(Fal<%1v%4WVQby6_ZRu=9V#u}7>efJ0oNi-D)qNUq96Y1I z(fp!&L>n0ZuNy_3gm+)*krs27aw^@61v<^0EVczWIYx_N6JP>?2Xz;DtOuKTzy0&CAzvsFz%c?KJBID}CgXq{WB>>iCu3BTS zi8AdS=u&#z%NbppG;k8Ay&=(*+0Ux-@DZ75TZ+d5nv=VtA|X}ta7(Mi`9=?M&k9F2 zQYIlWWd0fRZ?E#|6et^{C(VV^I>Jti9S~vw|Cczyou1K?@BuFKYypqrWzsMhO44sJ zy35PjF{jj3NhA3m)(N26317AaJ4Kf^=riI!gCt2R+O&;Q!vvPfBPRv`)(gvngPZ*C z%eal1A1CIy^bD*$J>2L4ay?)bk=2gCo;x5qQA zXQEYp2{ANWq^ni9mSqV897j|=6s$FU9jLo8@ zQU$E-owQJ10`~n;XfhRwm$6YLCfywVzvw8&qiAT`;#ORlxZ20)2C++)+}lmt3nzv!_%UrSg4^$fft{n=u#xA#k_y--AgYCi$B{OgOh0ryj{ zXo4`o;Bqf=KO*0tT--M34>|oeVZGxVV#v(s6!j-i(du}uor5g~7IO>zv=kpZm^#?= z*xzd1i&5k*FVMPx!(LIMsC=Xkv%k8ddqzM9*myMB@Ue@!vYP{VRcB6nbRMk6g@Ca~ zKi;8{-3}NNPDn{x+x#eeF-pN+%DBkI<0Dz{fs*X+ZZS~Vs7LzXM$Zzf%$=1)b|6Ey h+GstsT$Ji8f;?L#oao+EGq}$V=x7+Kqg0)v{|8hem^=Ug literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ash_horse_head.png b/src/main/resources/assets/decisland/textures/entity/ash_horse_head.png new file mode 100644 index 0000000000000000000000000000000000000000..ea0c6f446a0676cb8a21b9e83d3d6033e1a63b0c GIT binary patch literal 6050 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ash_knight.png b/src/main/resources/assets/decisland/textures/entity/ash_knight.png new file mode 100644 index 0000000000000000000000000000000000000000..7b67f5b17e51c5840a1d1179a8bc98d7d615cbeb GIT binary patch literal 4920 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 IM6N<$f(+iBEC2ui literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ash_sword_phantom.png b/src/main/resources/assets/decisland/textures/entity/ash_sword_phantom.png new file mode 100644 index 0000000000000000000000000000000000000000..cf9bca69d733bf3d385d643a272265ff87da27c4 GIT binary patch literal 434 zcmV;j0ZsmiP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0Y^zhK~y+TV`Lx$ z*a=EExc}y2u;!OwAlU$r<|ZyBF#G7o7Ys~b7Ks3)5d`M{dO^GkKsJMD#lOr9M}NEr zi{1J4xq&DHK$<}s6M5wsQeIyGYlKP>?*+Ag>T81QrPIIw;D$#90{7lS+}p99F|O+Vj&<=*}M zbpXsj18^_E0_r~VU$Cv9M1me**Z_(bK$<~@fHcG68Ws+?0Ne`?e|$awa<=(jPKLd| z--5jn!YIfP&nwGtkL9leNFJ&b1;7me1>6Uw{|twJyk&U&=LdrxGZ)zZXBfYM<#8Fn z*vg~Yu#@#0*x$F9euAS=g^d^NY(oAA0mcK;wheXP?lC<3`iUqF=l~pupxkB6AqW;A c4KOeO0AFN|kUp*~LI3~&07*qoM6N<$g5c(>4FCWD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/baby_ender_dragon.png b/src/main/resources/assets/decisland/textures/entity/baby_ender_dragon.png new file mode 100644 index 0000000000000000000000000000000000000000..769a3c860beb06e9af7737897fe1710d5ac5ca8b GIT binary patch literal 2013 zcmV<32O{{1P)XE|H83 z4q8!>sO=M9C#=%d>@KTLJ-Tn(fqN$QsoGVw_p1G>+Q(e-_6!URr2YN<>h1daI=Q&G z$gvN9$HvA|`HtUDPftl(Tbtgj+D}eS)cEo7@$~BID!IJ8RPR_v4luQ|P0|&M#dL3P zFWKJSuHwtZ_dDjahRS4xLLn^_3ab13{Jg?2=?MUY!vn!x0E~`~Dq(MKZj#>K-sI@$ zCV^g4#hamO${Ib*maZO`a}SN>+5~KeAgWS2#v=kIQl?CAD}a^va*ui z-`^))U0tfHR4OHdgM-%h#l^)co9BFW1Hf06xFFO!O;ZJc%?G>*R#A5eLa|s(2mt=# zIXgRpvrJZ3SJk`838J0mgMMGWof_aG$U;2J2_7FG8+Xoky++Y_GilO*EGBKXYa647 zOVH)>`SjCIXKKi|zrLCYqR;d5bJE({s-g<#TUc07&UI~V&08kWdlNIHVb^oHoMOQC zfQHe-XD3bJk^uZ!eg)wB{3`$*9UbZ&Ye+4dot;h5x3RI|EmIT#J_3aTU<#Ke0P^{~ zTK?tbC247CQ4s=y-`?J;{NUl?LG|N(Yir93h#b+UVAx$aIr*5{xC?qF7&;!BVhWd` z8sM`rCYs9P>?FF9*wkiQFm!yDuYeDbVYj=xTSXtN0Y6|1wIN_s0g%N!`b-a0(FZ)+ zcp708uLK{zvwVop z`c(kP1BUHD14a<);Eh3pkV&nPWAw~!cz9SjH0&O27xvD%^xwK>OiWCqcXxLQA^{%$ zJ~%k2X%npg=$RJL#JvFX1keBo`3}Zy7a{Wa%-^OXHG$-=_w@9r<&ogX-+IpBYfe=; zj(m|3!IsUD28)AHCPI9di489>;FWa^p!QG$q=(1vT2 zlcfRNZ3;@^elPu#{4nvgiUfcB_;>Q%Zxd>H2`JwwIQgSr;QGEM8x4R>rKARc2^rSt zE5M{oXcbpjBoQa&2MWC?GufgKFgeE9t1$8t ztWrK<&?Rg=`(v-dDgcBsgWbiBP_60cWFizgC+TfCu2WvXi4iDFHf6rlvHa7w7a{Tpl*o2EU4#fCAO?7qqDm*^5&(3kd+`kaa@N`B?y<^WpiPi!t8v#+6s%pySmP4nuTQ@_v97B+Mnp z^90GTNdPFUUOUu5s4D<5YE$nqb8~YkN@KEQ#@eB&%~mgr;mi0D116%gqmAQaC#y8& za=E6e40j#1LiwOr3NY}nR%jB;qy;e{(Rg+z0I~{$Bt}+gBmlLBqL`gCjfvr-avYXt zcT6rbKG=1+Tz&^Yy+To~0Mx>VwJHM>@YMj90J5wtY0+L!hvwqL)NjqL5gug~26u3> zN+V6cwXlrk^ym;=_x|;c@h-m5Zv}uFK%oJEd_n+NT3Sl!)iHgREJnIW@2JxS8*1z3!i7Tn$W`S~gy_%#TDSYBR^I^o&O3iF1TR@CAyR6ke0JP$}y z;uSpBmF+%!yt@wwt-i!mY+}aX<0>f-O@?`cZdSf#R0Tjx^`#MGC_IFu3CRp`eSKYF z6BALY0Enr+G-`~GI>*pdJ~s=gzF^lu&q|F?#U`f8<8w(HBeWdT)K0J-_x>(`f{UXJ zGg)7j`_i}$FFu#FE&*Nr!NpNb=<|iP4~^;Y5_(Aseq2Cife>^p?(=!7PD5WoCU6Co zb$E%n_m4RRlAoaBsH?y!zYv$G%W_x9_d722t>qM00U!kNSOBCT1iBql7oF)pK(cl|RCr%{(0vF1E`ZRF zoy0DiG(g||&|UxEBtirtYez#(M4#(JHK3NA^U)$7nhyh@)}8Ya&WGm10Ptb15j0-_ vXavg5yv7#|Xy)B%1aDt7pb;oH^BVsFUHe(8F}R8000000NkvXXu0mjffeFJB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/bat_charger.png b/src/main/resources/assets/decisland/textures/entity/bat_charger.png new file mode 100644 index 0000000000000000000000000000000000000000..c37e0a0a4cf3ba60986536da7595a89949f3e9d8 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~;1^9%x&T-XjveU3omNJkQn&W5q`|!5sHDU6CTz_UZ1>2Z-n;FGAnFkuF zL^v2b8ft(0^i7VH)s&Odg@;Fpm(xUE8fc8@(pND+N~|QvFZe$;z`%Ivz!RVf&H|6f zVg?4jgCNYfV`BDO1_mZ~PZ!6K2=}*BZznA_;Bl!v%;Iz>P4oZ%)z-?LYZaGVc#;@z zv2vqsc(YD?!Q=;fiqEwRBy(iV4Dz~H{n{p7ETib0-jQv+Y7XUMZ#4yK0!$e1KWOFq z7huqxU-M~a*#}E=ULNkL`HiQKUKgye*qq^iqQbLj>&Y~Q&mww1FXOf=ml}*G8GWSoe49`=D1=#sX^ct)i+=G`IF%kE!P1NK@#0d3etpompEp zDtWBvy?#L2aSf{q)BCpDxfeXGRiwSM9-EfbiEu1z39_?0{r2~CTVaNZS_aC19e*JdlL5sRvj)+>Gi4oii)y*w^=CePt zha9qcvYkmQ(f8ACO^wIXO*=TJL^wsWIqKRQM)~?Eh@Da3Im~On^-Rv&m$T{x6J9di znJBPT!{WlVs$(*YtV(}Zb8J{&Shn_aPo#neOHCQo|;3WhU?c z`Z()$UL$wwbdK&{%$d#&(s>(mw;#C9p;x3XkiB4*dCuP4?F|h7q+9*(snvW+f4n=O zp>JwK*Nq=~dRz7!`EfjKweO#sKlJ`A_$2c|5ReC)z4*}Q$iB}VQpIY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/blackstone_thorn.png b/src/main/resources/assets/decisland/textures/entity/blackstone_thorn.png new file mode 100644 index 0000000000000000000000000000000000000000..3213cc35181213843c091eb1f4b67abb1b001243 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VW_45v~v2-`oF;iEPQ4p39 z;}^K`Z^A;LY^kSW7co`z&=UF_dPtSv!3m7 z@tbkQB!_QmZwOn8Eqio+#Pm7JzgX?(O?>x_xo4XAd)5MhA3z5%c)I$ztaD0e0sy~u BO5gwh literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/blood_zombie.png b/src/main/resources/assets/decisland/textures/entity/blood_zombie.png new file mode 100644 index 0000000000000000000000000000000000000000..0383e20dc3f690ed0aa7075b9af7a5f19270e3d7 GIT binary patch literal 974 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 Z{{h9Et(9o)>DK@N002ovPDHLkV1m9=5u^YB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/brown_bear.png b/src/main/resources/assets/decisland/textures/entity/brown_bear.png new file mode 100644 index 0000000000000000000000000000000000000000..65a8e4bcdb2897ff77acf35c3bb40569ccaa18f7 GIT binary patch literal 1657 zcmV-<28Q{GP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T1_aj;uHHl#Gm&bueO|R2NWww0xzsuQ0 zr49NJ5a9GE+$OR8H9$}#7$DLo@7(Ir>aa5)TMYq#y*@Vf4@GY1K+n!ml4oipyK8C) zU}K(LJjue||M?I5b(tT&dA#7cV?%*nZ%M48v^)eH>^l-4YU-za^w!A&9w;~b^bsF; z3@`#9ta>9$U-4UKo*EZ1XUC!m7f!gXb9oEuOQl@`ff3&iFHF%(uuxw|D^&muLiBT_@R_t3~#%p`^72I zAoj^KOZU3$_4wRI{B40iNUywjxE75vp2=WgUkQsw}WBa!uWCSI+_)i#C zk%1|hqQdyBXR(I1uiih}7{Hk>ZU7T!)CN%E{(;?xGK^cMj(dQKQx&w-+;=D1(@M*- zOe#O~bkodLke8cfXuhMvZZmt1nrq(oO|T(Y|GL*+I$VU(>TpM`_<&_<$}+DSkHY=x z{&V63&BL;}bHt7-C3$WtU5i+ufv)&*dNbsmLo6u0{KA#cx~+s7HZhbGB2X?P+8;+ooi^&^QYYVLA3|4V#cr{hRVVHBL-0RCBAb-wE+MKqz`%6 zgkvEQL*+oOoU=Q+X9BUovDms|rH?pv!3BgCSM5D@f;L1*%oL&3HY7a<(e1wQT5a7qG{62{dZw0{ry45MD5XXaTWT#iUn-Bq zUSmyJi`E6<@yYF0DQ+z`a38iQ`?Sz&9^>_wk~M%(kIH$0*zuCy*{26@)9YiPPED=S z%r6_#O`|Ri3~hkg63vXxuRY;fZdyPBXu>&)?PvjNFzT<740l7(i~(TW?jsz^ zpez!GI;2U(0ISc@gB8Y*5#YNf1>aEyWv5D0Lx3(btKjV6fcue0Zw2F1(^P220Q4RO z1cbP_?{A+2KvLlW?{R2y9LI4S$8j9TaU92Ki`nddl!Sa*b_Kmp00000NkvXXu0mjf D@l_$t literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/carnager.png b/src/main/resources/assets/decisland/textures/entity/carnager.png new file mode 100644 index 0000000000000000000000000000000000000000..b5b1e15728899b80754577d24b4d15a5c61d22be GIT binary patch literal 2047 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 b?|+rExsEd<=6(epM8e?d>gTe~DWM4f)imyr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/crimson_slime.png b/src/main/resources/assets/decisland/textures/entity/crimson_slime.png new file mode 100644 index 0000000000000000000000000000000000000000..6580215a55b6850ce8bd16f8c0429a960daad617 GIT binary patch literal 624 zcmV-$0+0QPP)2^CfVuSS}&UP>V$=IY1}x(g%)v1Ed5%OeQ+H zI7X#ubKSvAO7*(>b@8roZvf~j8}fWp**I>dH{|!@W2^OD5H?;ZWpTt+n(B(%3A*$O zOs~(RRNoH|-^BZ-*$hY$ef`qkVlqKJJ?VRwK5*P8AW2Ynce+`;PFrS})J2+4P59{?-`ran+_IXd; zBoCCXw?*LX^Pc*{dM)f%PkC0NXMnHId+3*EXJ0zV!})`tND~1GO7qSJzHBjG|HtjG5XQ z@Mp1T6(1v_?X+*p(A^;fJ=H-UZF{QQaoAMec84&Eig?xfArnCTB!92h&9&Jud+qDk z&?ybUx*y)w2FJ1qZ(P7msH&Q-Dv#;eAcXeQ{xi74o;`a$2mb(e1h}$Lmgxxq0000< KMNUMnLSTZp#woi1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/dark_snow_man.png b/src/main/resources/assets/decisland/textures/entity/dark_snow_man.png new file mode 100644 index 0000000000000000000000000000000000000000..707ffc073973242a68b6dca2800e725e86824117 GIT binary patch literal 843 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=y{{R2~-T(ic>FODNa*scM1`2z6dKw!WPn#l;24{o7NQ52UzD zg8YJkilKnP%b)QRP?)p8BeIx*f$snaGiF`u7!u)rb=qyG#|AvC%v-qM z{;xN%x^!Y%^6{IscQPH8@4A`g^WtOMV+*@KhaQ>P?YDb-Y4!g}of)|cqTVZX-##H! zy|w6N$2PXORa-ai*!pir^JO`&W`2FY?%UVaukL#<@}4*8p?lPw?OWJZZP_ZHS$IE4 z`o=r?tOsJ>b@v|RytDnr5vj<@>vb!qYXt6$E4118^PW!SbeC1vs**n2PTS+HWBBg( zRMq!Fx{KuR?tMN#-JU)3QlXRPGN@9468ISdc@ED+Q7BlZ!?*$yW z67DBXEdx?+A8K#EdXsS#g8WgSql&HEaWZRp7h~?(?om62>F>;&TEH$Z&j*a zq`TOJl^sP8~W5Lxn z4(+Z{#by*fPC`SMD3{!Tm8WK9m8KtZWQ-y52JV#*%%Zzn>cUyn5vx ze7zw3Ny`Rzr|Vbym#ur)*t2_^yVGS5J2Cq5yQJoIslnZom#q^_TsvW<8AL*H`|(G| z*GVXrd|kXUd&z$FV_6GV%lpPU*SVG)UGgm~L^(_2n>IAl-VDGYZhIg;mKi!}Iq3%Bui$|=|%#X%5fr*#F)78&q Iol`;+0Fw=tzyJUM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/dark_werewolf.png b/src/main/resources/assets/decisland/textures/entity/dark_werewolf.png new file mode 100644 index 0000000000000000000000000000000000000000..1828e122d98df3f463d9b1c1b6e44538b7458880 GIT binary patch literal 1653 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/elf_of_chaos.png b/src/main/resources/assets/decisland/textures/entity/elf_of_chaos.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca71f407b4f4b96d77823d0ee81e2aa57d2b804 GIT binary patch literal 2351 zcmchYX;c#07RRwN#0dvXOrMw;n)wvX?2;&wnt}t0R&p)J9P_1R8s$KmH#4=&SrmPl zX1N-)US`)J=P_pl%Lzv^2O=>x&;FnNJ1H*Cc5>4Dr2znd z9M;~3Aoe$ZnAC3Z%4I&_i=9Ly!R{pBMZd<9IM@?}al!xq)%RtDzLMg-G8ad8TVn$= zU2P35WsQAc1r*Y*&l=Q)-0SS%&b*^Ln{W8>0%Y>q{;_MSEGpvDMd(DlRxcX3+~UxI z+`D-DVD|~&2V3BvlXR~Ys2c_B$I10r0MA+>=z$uHP<5KW($Zryb`y5xPdiP3{9MlQ zxisB$fd1q)jftDu%;bagi`of(jw{vZK_@WH2l9O`Y<cb600N>EP=7(;sX>OSwig zAC-^cPN7UXO2+fwV7|d>4gAXH8xRdOc!p&c~1_-1^g#s0|upbQH`i;<-ZV^u8Nj zwxj@S6gdl-ZSAh323dYB`8p~0XJfrGqIt>HBNYS*dh9%h^(_%8#5{}rnqI!w|8s{7 z>uYkA-qVlW_P;?d7qzCQsj{|i6_7%Ysbj;%S>h_=Phmtd_YP^j5T4%r4PMn zuPq8KMU!JD9lr@IPy&xS4FGxWhpz@X)0A*3MfVwQ7`SeqI8`qU#E70^A%CA zPo%QIK|L8MBve#$a&|%A#ZtR;yDP#t1V>L{XN>kTt^0venQ8MyMu2ehvob#V8?RL> zKrsewwx}JCH)ce&vC|kq^}e)22dToDuzm<#Wc{TU0pYEHulk)=->935HTIn+W#k(QnHC6zeXjXEIHagSPZ|6N z_O#wV;P#^i7(EAg?0ngcjwW|6vQZDA^)?l6pb~kXozQF?&}D-P*x;2qqNI~(3KW7H z@>aIw^OWUxY1>}e&kf2`avo$bsa=`)xGm)ID}u8)W1F=vK?Ro#A{=v2=*a}ZkWY(^5y!UHB|IY{?!J~A*_IHC z)67R*1*D>5bu38Se2-L5(Jf{TuZg32KGyFF<#nN7m7|)8;{6R)o|p4@zEGBuVwaFX z=_)_`G{iUlOp{gs=Hl#)_<+;V)*BF-gpMI z%Q^=#?^bv`Eq?A);~$LV6*ijC6Tj^VE`MZ#J zI2GgL{5|W-{<;f)krlr>Fy?U*8qD!vh zW*1h^yB7K)p98bD0i&hjtD;%UjR`) zbq|;VS|GENR>Ny{9}rbnY)==6gR_>K9mD=R{R`L0;1$_%JPHCo{qSnOR>HaWF@|C9 z_dGNx`1&Brr1ZXq|{|s6*dBYz?1XdP8P$8cf5`Vz?2kgKoptpAyRSdVtR()N5R6~tVxYOgFf5g~9#7;m z)gA7O>cV~!$OFyJOG$1i)6bSy7DGZS`;fBb6@rDo&zA;rUf+KSw0>&`Z~uSiP7Xti nhhKj|yBL{P|4RY64Fd3#b+d0Qf1E4+Gyzy!XPXx%eG>ly_k@f_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/elf_of_deep.png b/src/main/resources/assets/decisland/textures/entity/elf_of_deep.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc2ada0910a1c7183fb2cecb1e555efe3205f56 GIT binary patch literal 1194 zcmV;b1XcTqP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B01RF_2K~#8N?U+G}TvZT-=g;N`xG~_uMGzzk z;x2+g5V8_B ztIcNgM6R)}jYEp>u@&61+H6Ko|IduL-GfBD@9xt5Q< z`RVuzNwMt$KKc6DA-BY8vk2=HnF~;S#-NMnEu`8W57~Ug0$PFk#@jqpIB|R}v1)rf z&=kSaGxk^uuvW24Z0lO_u-a~i!g{o68`HKqxt4?GVNY1bvApbhbuJ+NlC>Q+Z3k=P zna7uHu03Z>(mYf|o->{cFb4A*V60?qhaZ~5N#d86mwRR$8gK9S{MJg&4laqwjHQ(+ zT$Zfu$blpuq*Z7xA!EJ=te4grPb)d+@ZL3^=U#ls0&K32y}rKQz54sjp$4B=)>(j*E`9QwH@t1$)z}da7c$S*WT&%XzL-vw|>Svw{{d4@AZ7o#`Ievq!)*o!{=vkt3Qot@dBCrgUbqtq&ersBBT7AW3 zP3ALJV~&F&qzh1t!m>s(pq3}^9sCr+0=33-Nye!$hEGk6ISz_}4DSGnky$4hQj2Is z<^njo0BGC=7`KLa=4#AwNOAZM$3XeDwgxJ~p*1t%yGykjCC*tGX&N+mf^gopTnmxnG5iY<*bk8F21(L z90!HC0DZ|2SaU2uKbZ?i0Wih33rIg>+=n&hIJ80#n1UI`MVL32B%T7Gf-}w;Vbtf6 z+B$PJ<~Z=7FomQr$RO5aKJVE_0r=GZ`0MX`FeMdEekeql|J?8RU%23E`ahZF%7 z*b|<0b^WxkCR|&kr-!vCPTnQ#i%$_LT3e|DPId`Cc||WR01&6Xj`ts}c(C@Amlktx zvG%l29=)f3R+!??Rs6)n#KgqJ#KgqJ#KgqJ#KgqJIpN~sJ#vYUA3GSpd;kCd07*qo IM6N<$f(#2duK)l5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/elf_of_dust.png b/src/main/resources/assets/decisland/textures/entity/elf_of_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..c876cc1d48cd4fb0afeb6ea68f9c5dc336c276b2 GIT binary patch literal 1460 zcmV;l1xxygP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TFH@BY35>O zWySwqUW(p7+@ivdwYB9g%e#K zwRVnnEEB#$i-i~-8b2{H;g*+|c}Mqspv@R_tS>4w{0)gw22eAGaQmJ?q_qY*iM;R@ zSc6mq`~LFs(p_9!BqPqZ8Pk~%3bNN*2ib8EMmCGGA}{%+st^1lU&U`2z3+p$jJUS%ABP`U%aiY`;Q(EZu}Hu}^>`4$I+U~rfjWl%;IbbJQb zJqd_>czAFlBO^`GR=lDovYf(!%VEb$5$^uBq+K0ZEfdnSBK2H40TSSNQV z9_*MNvtY+1nwKCPrXuuvTF2JN%eOcHLwJ?dTU;zv?HG|FYxI~E)(Kj#F|G*-@0o{h zI|IhX#=IklKJ762;TPQE;$qVJlL;0%(q@u%6yvd|+cjyF>Hq|VLhZY|2;cF=`T4m! zJ3C8ye~@U1-HYF3T=&!Vz#)0EpkoKvC<+W<3t+t6tAL?ohO&d}F_t$=MNw~=A{4IQ zlu!!+$eaG~En7gJvKWp*$_j~>0OoOmqDQSU)=(s#F^MI$IWt07QwJC}#j{|~4dxgD^*z1{NBL+T9<4ko?7JU>6X zy}i9ce@gsMnhx06+4)ElBs6cwAUtdi4i2j40Ek5yV#2NHDhUor-2yfvLg6@uy2`>u z^eM2ryX(axT;dTd(Q?91AnE`KM<__RA}%M8C4NDL`Q!kiPc6}YFoK+*^;MK&w-Xhkd)4f{7<8q0aZ`suhMitEcNSvcR(FeU*!H4_^Et)4AzaV1CqM7 zbRCe?wWaHTq^>Pp2PAcE={g{(YfIMwNnKmI4oK?S(se*m*Or<)z`0*y`3M7-h5M`k O0000L*eF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/enchant_armor_by_boss.png b/src/main/resources/assets/decisland/textures/entity/enchant_armor_by_boss.png new file mode 100644 index 0000000000000000000000000000000000000000..664804979069181e4041a5399265771877ac9f6c GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|;yqm)Ln;{G zUSQ+}@(wNd?w`wN-rL*eF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/enchant_diamond_armor.png b/src/main/resources/assets/decisland/textures/entity/enchant_diamond_armor.png new file mode 100644 index 0000000000000000000000000000000000000000..664804979069181e4041a5399265771877ac9f6c GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|;yqm)Ln;{G zUSQ+}@(wNd?w`wN-rL*eF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/enchant_illager.png b/src/main/resources/assets/decisland/textures/entity/enchant_illager.png new file mode 100644 index 0000000000000000000000000000000000000000..62f5bd70bf3350d22812d6525faba7fe80ec6369 GIT binary patch literal 1099 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1=1o(uw0_mxJaxf>fUvNPyu4etZe6{4RaI5>?Af!sckf=YVuhup zWlLx0Z{Q+0oZGVcN8yhzKViKPd@u8&`KtH5DllWj#|fV{03Gd;9F{ z?1r%W3bM*`Yabt4`gF(CCqRo-E*%a9Q6)is!9b%30fq=2US6Pj&H|6fVg?4j!ywFf zJby(B0|T>#r;B4qg!|g*jMHZs2(VJkE<=?ncLxVqlimPvv#m^v^QL5G?dvY_&tO*DRTYMo_>>u zZ#6<@Jbc>uVBR$^^J{05S^wNPut!!)-~?|+!;v+`v8NBce3<=z%DSUjYeGFzUuPw` zI7jce`u`i>-jh6W3m;_f7H)X9%SL~X{-+pm4z`C(v+kbr5o9=_J@rRg=#2Y&pZ%599s)qA_KAHc(!sV<;M)BkM zEIZElGHhwd6J)46zEq3p*0WzMX$&tKy+s)nOe!2>SPb2d28bLMY%uQ>KT;`B9Kz#j zIEQK8+6DakCp(@AG!!}dfx%*)JkuM?%@TeLwTDkCJX`S~B>TnWhff)H9@O17Jzul= zAyT@4y-!VGzjw$50*>AswVk=l77hw~r}vvelUzI0k+e`(uv=1r?k-Pu`g z)Flyj&*^E5>VN)~F6&kSjox0K$}%IE;YJsC>%-)O)w^Q$G0flJwdFzZ|9QZS#o+1c K=d#Wzp$Pzkk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1=1o(uw0_mxJaxf>fUvNPyu4etZe6{4RaI5>?Af!sckf=YVuhup zWlLx0Z{Q+0oZGVcN8yhzKViKPd@u8&`KtH5DllWj#|fV{03Gd;9F{ z?1r%W3bM*`Yabt4`gF(CCqRo-E*%a9Q6)is!9b%30fq=2US6Pj&H|6fVg?4j!ywFf zJby(B0|T>#r;B4qg!|g*jMHZs2(VJkE<=?ncLxVqlimPvv#m^v^QL5G?dvY_&tO*DRTYMo_>>u zZ#6<@Jbc>uVBR$^^J{05S^wNPut!!)-~?|+!;v+`v8NBce3<=z%DSUjYeGFzUuPw` zI7jce`u`i>-jh6W3m;_f7H)X9%SL~X{-+pm4z`C(v+kbr5o9=_J@rRg=#2Y&pZ%599s)qA_KAHc(!sV<;M)BkM zEIZElGHhwd6J)46zEq3p*0WzMX$&tKy+s)nOe!2>SPb2d28bLMY%uQ>KT;`B9Kz#j zIEQK8+6DakCp(@AG!!}dfx%*)JkuM?%@TeLwTDkCJX`S~B>TnWhff)H9@O17Jzul= zAyT@4y-!VGzjw$50*>AswVk=l77hw~r}vvelUzI0k+e`(uv=1r?k-Pu`g z)Flyj&*^E5>VN)~F6&kSjox0K$}%IE;YJsC>%-)O)w^Q$G0flJwdFzZ|9QZS#o+1c K=d#Wzp$Pzkk44ofy`glX(f`u%tWsIx;Y9 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ender_snail.png b/src/main/resources/assets/decisland/textures/entity/ender_snail.png new file mode 100644 index 0000000000000000000000000000000000000000..33313cd0eda6f57296e375e7c7de4f65513e8d33 GIT binary patch literal 524 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1^2Ka=y0_k1bD&KrOv1Uc~vkz-8oSDYV%>4e;&*O)C=M~Lsk8jWO$!m;m ztO~0Fs;r!K_B)W`FA4Gs{*M9}uH2ci5Gci2;1OBOz`%DHgc*0@9{>M;N5=E`j3&nGC7&jIv~%flj}lp2qWDFjL0{mI`9$I0X*cDf z5B3YO7H@M`f4hCQ#wynD$5k1XBen)cP- zDQD5XvGLIZq0>Kf8b8)GUR7Uoz^Uo0^tPtuL3#;mp4qdW<2}IGZDW_HDdE=O_p-h5 zxVjF@i|@ibf^zdect1E^xJ%^#&yS7|KU%)B{F}sJUhr1EM>s8^x>aGH+qZCz9S*l* z_pyJzcSd?f(wT_aOE({EES3sbUpP^gyWo4=yu}r3l6+L9)qB^RWoq0m8K5`6XPaP* z?zOZ=hpHboCXq5TL^=2TY2PBVd4uk%9P`N8uB_dSrpqQP9h|c6j9#GMGasew&1cpd z?%nd1GkfzJy-SatR4^UOnzewlMJ#z#(pj^T(6+8nu-HLz}_V)z4*}Q$iB} Di!9@O literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ender_snake.png b/src/main/resources/assets/decisland/textures/entity/ender_snake.png new file mode 100644 index 0000000000000000000000000000000000000000..b188abec605aa77c8a246a73c62ebdb3a1aa9196 GIT binary patch literal 854 zcmV-c1F8IpP)((d*IY0~-#X>*djMh=o7cW}F{TLmNJ*)PvCk|2exadmOsn0(paG+(d2{U=t2`rP}>7V5kb0TRw_=VaKw`_!1g zVI>6h=eBb)n8W6vISt3H45M##tBwG6l1V`5gPhcUn_mytURiTI9o%wH|9Cn?{iNCx zf=3!og9wzFPHMlc@#1V(S*m`zrvaD%o(lYXGy!+_&yClzyZa{sg1Wx4ENHm1@Pe4y zuNkWCu&`=b>r|qCx~Bm&>>((_HMQT!_^2#ZKi$&+5dj<-V+qi9UYX_~UR_^V7WmQU zMFHx@^y@hkm8I&Zdm4b}c~=yS>08^X@fuyJ`bEI+0y_V5-vzX7>EA`5Nf2j&{B#)8 z_hJa}!oCCni+~c~O@mnzz)4HAlB-<2**9-rzi+SHj;}fmyf!S+eZ8d0*G+{aU1Q+gzsshB-r)O< zY!F6ON7i$+ONU1hj>CD}Q{OL`064BPngE0*JE;Wli0P*;jUdnYNQa|N31D)}M(YF4 zBKL=&JZpu=O;Sc$*N;fNb*3*eOrPiUkcBjRvBezq-s(JuU?g%^v#^xhn$cKpHA1mgBNN>!p|e;Fac^2LHF|1k*;m5=u@}1LlkYd>HTznaZ=|iDk`=OTX_0*UFV!9WMi^z z=cNGK&b-ac+t7Ahb&hVM+eg5vBft_3J!qf@5mudyR08%l4LhsO+uz$E;COl>;NL$W zY>t4(!$*~XO29TAgPaHGe_(BjfX9W8q{sopxx><2ybE|IFs*LYsW1}|y$r3M0DObv glh-DTIPaf{zpw|ksREMJ-T(jq07*qoM6N<$g3u*}cpy>wrf9waH z;!J5;TbghNGxTu{74@O6TA#QfR#bAY)N2VP9U+I#do88~D@`_pP$v|Nm-V|d8rtRa z-KD}S?pD$q2rLwQV6BZHs40H^eDnnif4Sw=&Qsx@`2!VzQ#QF50Q{+P|CaYTgNCME z`hyqVF`Ts9wvpQKd0(fHFh$Z4>PN>kf~I?~1@`FHt|6qe@3=Jutm_VXz4SxaCE z1$u!$t|QR-J2+NdI#gqZb~g)rr!b3TV0d_7Er5Gxicg(#%OnuYe-Un!59 z3CS|85b-a-8%9#JdAH8Zio+L`3}fsqp%e)aDZ`8I+YN$EQv=BrRq2n|99;5^z?qgXQqwpsyDcJ^)i}=gA0)`g@Ls&T-smiSZ45~ zX2e8D88>-aDGw_{3h@c{%QyAEe~P{I_Bt3yAn(mTbHbqr8CiJqrcmulSJ~i1XR6Nx zg*c{_TkrC5?FO>f*gf>3o6y8~Uu}l!Bk2`v!1e6#a;mbU$I*&AMh=r(RaJ2pPx4r=aSemMm-BUz{*T0F$=UzfL zvPyB4F2Xz>3!FuFVX+YR%828#qsp z5l*b^(7J#`X9H&}{A@9-5t{dZx%ZDeA!wukzZ6Y%y~xuc$(1Uz{`!WCNqN*rS3w*W zP?nEdvJHD}s*`~4%uwitOm|LDrG%0qjOA&}e^^q)>*tsrG`Ua(MG(i3;t$F@l!~R@ z7mVlQIcm0}$f;6C%+z*Zdk09?7A%F}@|B-gW$uobwqH%O_nFM7{%XEKoHwsJh?f8) zD}LAMOU__i;(Hf#@})rNK18Ob)K1e3oKFG0orGI{9MQduxvcf$5hK0{>i_u#e2e}kTG>uA$p9dQ01GR{&> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ender_witch_puppet.png b/src/main/resources/assets/decisland/textures/entity/ender_witch_puppet.png new file mode 100644 index 0000000000000000000000000000000000000000..a746add35512aa69655cdb1783bd2333492ad7b5 GIT binary patch literal 2377 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/entity_soul.png b/src/main/resources/assets/decisland/textures/entity/entity_soul.png new file mode 100644 index 0000000000000000000000000000000000000000..ce2f03780445848ba78ab5171dcdcfc47cba12a5 GIT binary patch literal 1990 zcmb_d`#Tei7oSU6C1er#nan!UU($riDp zh@ljwu-tMPWo#~uSgi5NyZ3+iexB!?&vVZCJfG)0&-vl}>49?EyL7=*A| zxFL-S`^1k)HyHCxc^QsZ@R92Q&&fKgIhF%w%bbYOWrPwxabKh zI+Y$r3{N4lKokJAOaTE}~t*BaJOc&oiUUDaMK5A6&8 z1g_QE%Ahy}Y|+BpIU3y5Q@&@bfu#xB{h-xkGJ?ctKe@G$pl#szTC(Qld@_=R@+xWm z;w-i+l1l@r_}^W0gynxT(>0&MW7MsZZORtNL&Eh4$d!C@d0e3u^ufdV^~}+; zc6-Ogqf9{78|te;W&zt}`s!3H2;n_kpD<8Em+f_PFFzI?&Twd5+NPK{u8QGs&%ry8 z?q}i0)zb(L*&pXHR7F>eTImrFOEHzl@kxN*85qXRoOmRT~~Z!mqf@ANz^}|&TmI!{oQ+L zLDIQ>K^p7HVz4PMiG3qSYWgZvnEZwlVI)_x%2McG3@(d>y!)XQUdjN^>=%E`o)_E= z*%0gi5+JhhGSzs(b(d#6^Qh3TkL+_VoSTUeeW&A_w%0q|2kLATm4v1@N&irfH zqUe>mN+Z;jpLq!`W9ePd#H+d#2or#B{LSBF@dbPS0b{9HIM9n;d%&v!t8U+1eo?aYneFS|S1uyw@mqwhef;AcPq#h;1OT%)a=@u+z(1F$idy zPr*DHEG-~gK9CQhRFD6Iz4DaT_uTX>+j1&J zofvnu7AIZl>tyJ^Q;EauuqnACkT=u!%RY$KvQ2dfkd6w?>xK4Rvg@}{HnrzN?9$@% z@Q}iKwH;0@!bY^FVf#Zrz5iiHR65 zkA~dzS-(ZEg4+by-M5Moewt4cb$vI(9XKa8rPTJhK-Q?F$fzol2GD^+{k#+unFE<( zBivm0!P@&Ez$meiplso?sZ_&oo&Eybt75$(W$Q-||GwfujJ$5iiZ~7qkD?2OUww4b zpR~{&1k!ag-cxij^PnKR0AJLAQURJ8V6S>H^#;gxuGz zh9au4#oB{*X7>1qwqO6WL=oK^3Ft??mG56@GTifjzk;b&66FA~cYLMOW0mKBJ1LG& z9#NLJPPT=qeradK@?R==CP5iWyXdqs3ehEO&qUwnq<%)kRs(S~e|QaGaG=boLq7F_FyMIy ztTS$BI$u~(5eW=w7+88cacf$b04Z%jSiH>-WzF8h#86l1j}~>We_<|HJoZ#alK1_g zkoNJ7s8=ZvFy3|WHY8;_eO(|EaClWNN3r4l0o1%tn}OcFMC(aw`_U|D+c7lL6kF_* zVr1zNU1bdRoA#oQ!0YrXD_!JD^$)Lx#mGor=l=mRzvZm#LjQL%liKy48{!-aUJbjJ F{4ek5w#@(l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/entity_soul_1.png b/src/main/resources/assets/decisland/textures/entity/entity_soul_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ce2f03780445848ba78ab5171dcdcfc47cba12a5 GIT binary patch literal 1990 zcmb_d`#Tei7oSU6C1er#nan!UU($riDp zh@ljwu-tMPWo#~uSgi5NyZ3+iexB!?&vVZCJfG)0&-vl}>49?EyL7=*A| zxFL-S`^1k)HyHCxc^QsZ@R92Q&&fKgIhF%w%bbYOWrPwxabKh zI+Y$r3{N4lKokJAOaTE}~t*BaJOc&oiUUDaMK5A6&8 z1g_QE%Ahy}Y|+BpIU3y5Q@&@bfu#xB{h-xkGJ?ctKe@G$pl#szTC(Qld@_=R@+xWm z;w-i+l1l@r_}^W0gynxT(>0&MW7MsZZORtNL&Eh4$d!C@d0e3u^ufdV^~}+; zc6-Ogqf9{78|te;W&zt}`s!3H2;n_kpD<8Em+f_PFFzI?&Twd5+NPK{u8QGs&%ry8 z?q}i0)zb(L*&pXHR7F>eTImrFOEHzl@kxN*85qXRoOmRT~~Z!mqf@ANz^}|&TmI!{oQ+L zLDIQ>K^p7HVz4PMiG3qSYWgZvnEZwlVI)_x%2McG3@(d>y!)XQUdjN^>=%E`o)_E= z*%0gi5+JhhGSzs(b(d#6^Qh3TkL+_VoSTUeeW&A_w%0q|2kLATm4v1@N&irfH zqUe>mN+Z;jpLq!`W9ePd#H+d#2or#B{LSBF@dbPS0b{9HIM9n;d%&v!t8U+1eo?aYneFS|S1uyw@mqwhef;AcPq#h;1OT%)a=@u+z(1F$idy zPr*DHEG-~gK9CQhRFD6Iz4DaT_uTX>+j1&J zofvnu7AIZl>tyJ^Q;EauuqnACkT=u!%RY$KvQ2dfkd6w?>xK4Rvg@}{HnrzN?9$@% z@Q}iKwH;0@!bY^FVf#Zrz5iiHR65 zkA~dzS-(ZEg4+by-M5Moewt4cb$vI(9XKa8rPTJhK-Q?F$fzol2GD^+{k#+unFE<( zBivm0!P@&Ez$meiplso?sZ_&oo&Eybt75$(W$Q-||GwfujJ$5iiZ~7qkD?2OUww4b zpR~{&1k!ag-cxij^PnKR0AJLAQURJ8V6S>H^#;gxuGz zh9au4#oB{*X7>1qwqO6WL=oK^3Ft??mG56@GTifjzk;b&66FA~cYLMOW0mKBJ1LG& z9#NLJPPT=qeradK@?R==CP5iWyXdqs3ehEO&qUwnq<%)kRs(S~e|QaGaG=boLq7F_FyMIy ztTS$BI$u~(5eW=w7+88cacf$b04Z%jSiH>-WzF8h#86l1j}~>We_<|HJoZ#alK1_g zkoNJ7s8=ZvFy3|WHY8;_eO(|EaClWNN3r4l0o1%tn}OcFMC(aw`_U|D+c7lL6kF_* zVr1zNU1bdRoA#oQ!0YrXD_!JD^$)Lx#mGor=l=mRzvZm#LjQL%liKy48{!-aUJbjJ F{4ek5w#@(l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/escaped_soul_entity.png b/src/main/resources/assets/decisland/textures/entity/escaped_soul_entity.png new file mode 100644 index 0000000000000000000000000000000000000000..c11a48852b702dae99da757b8791674a616f4ba1 GIT binary patch literal 2898 zcmb_ehd12Y6aVUjRiZ>BdP0;SQA6~yY6v#!hFv^Cv}Cc56)n2xS)E7p6)jjbD_Sg~ zMvYiqL|G-;WBKj-AAa}D%;(OTnRDjOIWu!(&7Ock*Lbc0001)3*D)t!=zmO4OP1Yg zut73Vyfz1G0oB8|H^~b1Yb^sydh$WhJI4UPwF?6sO-p3%PM)c;{a4?0DQtPh$9R_Eib@%C=7wvGceLC= zzXjuNGxQ2T?AFqs8PZ&1jVZ{L6oXKs?D& z_b3cKB%JWlTN45al%YEQ(`z+OPRRZ{JbWlQZ;DQmap|PQLQPJ#Ld5Eb^)8X&Ixl}n zzBxL2jo)uu#-Zs`+7Xktmlu<)%KZ%f`#imjbJj&MJC8fEiLenhKN^`U0v&2e0*{j* zT^&uCQk4DHPC(WLGAjCbOCCOcV!OGamTpaHOC1Tj01fGfq>9F`^1sh z1Rbuhbw_n($@8q!$8*-i0qG+vTtr+7bejbO}>^EFV(cPj2*J{ zW1tuhx2o!r_|jWId7guLtNPy?s-B2u@4?!lX zL=W89D?C}sb$zS{zqpq)cn>XYUJs@(miz&cQh@hQ7|SP8*{W#FKU#gi1*s_AAHF`R zMvVWS>rZjP8rf#P90#k{xOpe39QFs#&YRI3gxGOQaUcYqy}XOhasxU$d$?uf{z;IP zc@X9Ng)}9-VEH-XtV}W|34r&Cx|Tk;4sVg5St%{RJExDBn3yb~_2JI2R3qXbNmaL7 zaSKny?(}Q>g|_V&;B3wF)UoPWLTRY62vr%a&)b=88!zsX@#EchLW&j>?i(5Q3SsFk zhlb9+mYZNMku&|&+$_DFi|hYc-Uu_M6~0L{{PKL4xZgnSUsI*>Q(~)ma(p1NJ>6vm zd}T8dO=Uehr(-pkVxa0WYdt$)%IJV-q%*%yod5mWjh0+lgnz?+oZ7FpE^ye|XNmTQ z`@0}MtM~bWPi~Nt)b+)Hw!YQ`6Iw?9@B*Fw>ojWT8@PC$&UcI(XNNDGRI{_QN3oyr z5;jaXvVOebYo_Qgbp&+ZXG@jm!oBJKaF)AsD2KfF6dE|SrEIgcrO@nP-#{&F$^Uk+ zGLmTZK6+G?;^Ksixdqix4EpPw#%ukU7szxk|Fk>r{yOyHIpr8(E21u{7=v2p>Q+&i zlbOlEnphfX*8+>tg!5`D4L1g3=YYJizQA?n+_0DKoH#@aW!H9CM29c9jEG^R;ZeZ)-mhRhAMQ^JNelTn|yU=Ehj> z;|8RQM|7w=kL~j8$OW`#J$RVKltGor$~{dVCSjK&RiTywMF0WXL3?BEepUIzPibzy zzWGc}l*1{&lxdYhtyWXK0@9?_njM2xHh7rTET?vhO+hdJS|3iVVTl@^CkVk&0Ot-n8M04>m2q?^P*d zo_E(et2#J)oj(G+Rn-&rs?pDeuvnoqe6t)V?avPOym5VLI8mXe&lQS!zbusOpq%n< zsZf88;ib*UjR#|g+6>YHH4>S{-WJ>Iux@3{MMYFAO2dnvJY3wdMX{Tq?PHAn7+l@{ zY6z5JK%vpz|SJz!y zDCOnNu z>EB)UV&EDz{DMA0v9XiiXf!CY$ucz_V{mC-&(EiYLUEB}2rIW=!I(o`TW3zI zFw4D&r(NQZ5%nD(b@|Z|W>z`q_lD3S7NM=D0h#TzK|bj=h$bayVX zI2IH5MZ*H?Mq}xMRuZejJGzPzA?}gqf(5i{m`pygBwKBKcRZch+75{Bt5ndY@Nh$x?`8PXhj{wC9oI-PN7>4blO8!=b!;r?Fb_f%=i4~r@^{z2CqLgE}zfrYyu)9y6`ry%!+sF7ui$Xr*5<>KR7PK^mEsO{SX@|V)u~W zCbNew{1y;G8|v_c#0KmYrt2k?8GapR6DdKkgmdgN!Ec;ssJiZ4s!ldEw4&EJ`-=mo z@q{j@Zc)K))2wPoVY3p9^UJ*N-yBbU0vrg>&Er^FuzQ|6beF_am4w z85^3m=<(g0VtB507R`~mzVwD*Q398v$ut}m7b{Tuu{Y6FkGDkom^ArC?&sG^XaDO- z;y*|XPoMxc7EU>V#Wjb+gHS`RvEKMOeMebNQHav(kz@$}qj|af$Ku6u;zCIqzHr5I zsn7ESD%A0zhFc}b(?g-L{XuxO_;0TzzU_A^1?`7?R@hY8342P{%QqjWEyid?`jC&l zIRnAS?}2K!SD-ye%O>*QZIN>_}T!2x;mW#CRF7c5KT zM6X0rhoK*li9nGqNU6SuB9IYUAsl+NRKN>VquTf4Pa+6Eb&XcA6ssG7d2P03VX}&p zwMYJSib;~jty4?At~lg@x6tPNUDRrv-rt%%z9+4JA6-^NDSHeo@-9a)kFo5{))vN! zCMm;RWU=^u4#@WE5JDh6J2tY~5~1Sh9Fm5Nw9{(f9MTg>>$|C2r84fh5V}xA%YpGP z;y=tNfcP4h?0#8jW?w%ymQQiN$+iutk$A>Y-ld~{*54?V=tkiOZcYlS%F&}%M58{o z5+J|d^ozO}n_jY(ML<<>tF4Y<(6ZF7eM#?!CAk-Z1E!$GYNgp7&eC|WC3DkhP9W16 zN5ZM()l|NCzW$78NQ_TiS5rHQ_;10Y-vRiz%;8iCx}6effbthmn4yl2r1`VUF1(QjxQfN|IP)4zmp_q==l7Q;s3aVHq)# zltMY=5D_LOrzJLrEqnCt|9@USFRttQT=$Fn#r3)G`*SDQ+aV<-U=jcTNLr&TFYGAs zFF>L@{1)NewIc$-7m(%v`Loi`9V6^(W@`ojHOXL}x5$nc4??*F0|4aBUkEg$_%8tf zINaLO%puHkDc3E2%t^VUhj0z+>&wZotyQB|B_!-WasKEd`w~>|(B+BdJ$t~6SOn#O zmDYLmK;~$R!m~Yl&Zrf{?{Qr->vPZ!kUd+Ranft36joPkt=}}_cC3z1>z-IO=C3|I z6&yf3?k(+=)Qljz?o(=(IS z$+WE|6&nW~zW&wfcrzZOmdZ(nF9vk!J)Qa}@3cMkMOlCNi%;`zD$DZBZ>xIY8$Hz* zhD+14KOr?FHz)Y+TaPtrt*u??8srU^KSHffs_iU1Gn25`cUR*?eWnEZ9}Pn+aenB2 zM(>tjv>Hxtx{Q-jtJVa4h5# zY5iVcc5^X`J2^?N{h7(p7X(4YqUGfS3Pl+5o z;X_EC)eDg;1BoAwZVDR2>a>JN)$DqjdrukI*E4hchPRfSXFJjrbIKvHOT#riBD{)N zPo(gvHs?u{hgpJ0so>?g%vaHgKPDvA(bvBUEO*Df?|>q*65j$0AI<9TIZaZDyZZic zSSGKx<-8Unj5^iGhFhnv)JP#vCK#_(x9EYo!NTIC1E^QQ4K-da2`n5IJy+HzFeNe_gEl?+!XH%KWQky*<40=)?)y_ zc$Pxn?0Ts!1(ls9J+|Ng2B&H;g*OZ*)sy-lebQo?WrfdOxnfkuJYAIWrhelv&@cKZ zw5CU29QK5&Ms6w*+IO@b7ZU>U)@IW;?JJ6y!dh5(GTgSUHhH2Vvi8O7`uwI81eHx6 z?$8tdu{qq~A`sLge#AZLE@t7(XvumJip2RAH;H+nBnM~EZ|mNll*+VIYwKc*NJERL z8DW<>DcIoB*Bky-6I$IcFKeBlA00@AE4d;F%eV0su(3Ff=l^FxO&z(i|9~=@A zU%;lO(VejGEIl(rdpq^slz#-jk2`QHimt8-Ju;o6)_`j9ub6=$k+DGdb%NUcGU8JM zVspxORnxD56Jp_-$)aX7j_z%>B+x$!DM~9+ax221d%Y4YKkvtKcjDqEs+Fd%iwqTN@=q&0?H^=6d3aD|IK z;|XtNBJzZnT?Ed)l7tmU0X3F5VjsFH%3bK{lsYu`O#s>eSsr!hzK&?W$8l{g9&?l# zWW9ie`3RIUr)5v!K%`#}-89eviv1=*8b!;75PDa`zc)28lAVQ+`PajOH8?c7xx+NUE}DU>|~WiMYM#&l3j?G6%G z-2szcb+l4EH>ZK}e9tE}-a_5FR%KbU8PZ@t?o~qGcK*XOGtCci5huom z-m%F7OATL4Jt!Mq_|a2YC=e+&)^xdf*UJ9!(EroL z8A4_6xVnztzxSzr7qWv&DSs=t^g(5|Z^1 z6A4FL)8}0Z%iPn=5_ceAkcO?`2PaIDvqBgH1Be=55{A@$YktSY!$X?wp+DvlbJMc*@9Z3AI zf7!7@shl;|ZL6TeTc3Gqz6^ywEgJ>Zwc{bX()==t*SRbXQzYi@Q=gPG)0x92qum6@ zYireZ_aq{&+~c30YR&`a;L^u0Nkik3=E99GEzrz|l*U>GCktkYtL~G>b(n+tDj&)l z8yhcd{u6NNGvCn15=qkzO*~PwU^BYl!>UNT^|GPX{dZ*oOVH+5tj^#>6{s4x{CeD& z);&%Z$BI}Qw7+CGo7S;eh6*8J^7aE9xyyp_m0pA@m(SNv^Kd#4-HYXEn5McFnSEKJ zW07JQrcL}k58`s)=?dkZO(og+ zm!23$hO~wf)7=i{^!rpk8N-wZOUT26)FyKQgm}B19aeW8Ha(+h8c9E8~Ek0 zLRjk+z9;Qkvy2-M55;q#k^4vXoildj8%4J}+-g=O+l)eN-}J0cXS)X)i8L_u3rD}u z8Zhd~MJa6cl4}&@HdNjqqAi&9B;}>KB4?ErR^xm^eJ^B+7el)($@{JF^KB@_si+~Q z33)dos$WTKu#CwzqrpaM(S}RY14pXLqPxZJY~4~`Up+MK{J{+MFG+DKv*SQ!Q+U{K z=LXCnl|ME%QnFXwR;`1J9jtnoDa!R)RhBTY(OxryWoG0`M}EFz&mX;G%ZuTQD)X_& z4shA|=dxd$w!gQ?M+AQfzTy3>xAt7N`UmFHu{#epM7TB$G&tY(Q;790*l|hto%!K<5+-~P&Up(zaC?rGPKN(kg zj`l0E`)$OPo^)m?^#PH05ej)?0ngcP)QqNYaY-Ku+ll=9GHyTeEHp<1vQ@)4gEf}Q zlO^>1^h}c7WbmxJk#UY;m3)rBR~0o*T#Y1U4*EZ&_-?S$Nxiosuu{exRBrtZo{idy ziZ1hPhUISG>}(dAYZEgXio5i^Gf*Nv{|8ramPR;-tHtkM29~y4h~X^scVUeMI|ih8 znFXe-(g^)o?W+e{bnIDNfhtDJG`g^pDu7>`lO~Ignlj)k17Q84zG!Fm%BC#)u?}fI zl1|}gJ`kOd|3JEGG2Ky_a$euzq`p_1aU=d!7Tx3b+iI`x+cRDHOKL00S!-ND6CC?d zV-oamG}jj3e*+eQCAG~X1)b|65+Wf$iNre(NxF_bnEw>`gjXa|tbRj)Uu0Ex1-kSe ze&A)1^radWCvvlrQS3u069NTnv;ZT{saSx|70||`fsDct?DnCken={oNSctpKI_51 zf$)QVG&F5vflsWG33~ZAcmIlt-VZqunLNP`SjBm&swJ%VThn!Z^-TsS-jHnJPpItX w$Nw#SO?c(VT=M>ZVgFb5|AV~=N!v21h~HIt|2K4e=Q9VaPup3N&Anp&18`5`oB#j- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/everlasting_winter_ghast_1.png b/src/main/resources/assets/decisland/textures/entity/everlasting_winter_ghast_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f222f66f3c0d53ea54003c8157b64d7d9de862e2 GIT binary patch literal 1342 zcmV-E1;P4>P)Px#1am@3R0s$N2z&@+hyVZt=t)FDRA_&vOjYKK?xU;{ZN*^ZF40dU5PEomf?se(%LGvMd7t zBuRoOimWtsT|+4a04U3Hy~g{0{p55YkOGw(0d@tIrxHY2maQ?4_u?38OpNM@6zjC%G&7=m#vtuuzFa(4Y>gnxGL+bO#q#tC zF?!Ut73gVxn@%Pe7KNsv_f6%w*G>R*4q|I|&j`8W*<3Ae#;0}M^nt;mC2tYeb=gS46C~9T*{~LSV0^304UEY_G zV{Q(!Uf34`dd2nhg;a_{`p|REw#@E2E}x4)3ha7r154hneQkbY0+i!jM%blR*aZPA zE7x-ySVl|u3bv{$KpcnU+hvG-R)N4CbAYSyam}^86J5&7JhG2tG>{Bk&uw57>>>~g z9d@BUu(rd`#DUq*cX?4NXfijuy&pj@*XW}60qGC$=JlhzkRZ$&z?Q^TMyo6PdJ{@1 zT`rqS?32F_B>xw^S1e#OwT#IOi4x~XK^MY$Ocnx zrIfyp2&C}leH_2JDm!_#^}Ue%xxVC=Wf`Vb)sT(zT>M@4igJt*rJErV&6f+zW-|>7JRQ~WHd6{Tz0UBXf z?@Q}4yp&RyFBdH%$OJ^}8U-fEe^?ay#~IcSQ%l1%EDFtE8-V+=uIt8m?D9U1Ag#_d zXb4u2e80ZD(mBAS?aBqF($WE@*ZFSi6wRJvRaJh?P!vV2Bdn_#G0W=f%PRoTHHJ?! zl;?Rv@$YShZ1)tBf2$pKEhGu0@Wih~?*r0*1Ie=4f04aZYybcN07*qoM6N<$f^Elv AumAu6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/everlasting_winter_shadow.png b/src/main/resources/assets/decisland/textures/entity/everlasting_winter_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..0f952b9b2cb9735348f53714f558c9a5c2a2f0d0 GIT binary patch literal 1904 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/fire_storm.png b/src/main/resources/assets/decisland/textures/entity/fire_storm.png new file mode 100644 index 0000000000000000000000000000000000000000..d95d59cb146e8e4d5c5d76685a6105b2ade8c5cd GIT binary patch literal 536 zcmV+z0_XjSP)&Y6Q zuSuG!S%3xzfGfD4L+Xpraf7WExmp)%$G!3$wN9_?0vumbdny?pX)*N7-b53h}zY6EZRS3W?t~Wn7F3r^)_O9&$bdR}->+=G-DUL33#k~9r0S;4}s^JEB6#>|@cWkg7 zas0vzY$gda;N~Xu54jB=LR@j0JW}aXWamY3*ZLe4m$vM*a5i14!|9D0Pe5@ aaK|r0ow+!E1F7-=0000QSO;uumf=k2Y76I&DnSTDR=X}OAVLc>DI&72Ml73uytimRKteNO+l@4B)~ zWJ1`?Ce4GE&x4N37#@>3HZ>@w=wHzKTjCq8t^4+P)0UL?)B70Go>k716})KC=i?$W zT{ZMQ!xDy|2M;w5oO#r16J*Q!uFv~@K_P34`-#Wy4q@yXOFcBVM(0I_as3E<#ov3{ zRaC&QvHYB4p>wOe^z>7HjQe@N?{^Gimq^x-S$Ss8pCh@h-?Asn3_stXed$1y_hEw* zcFcdiSKR-;+TqV!IkOv<-__^+s@2kK-Fj`^>s@CbY|?RY2{G2Qm9F{S_2%T-2Vq)A z%WYNu{`wqOK7ZY{ZI-sS#<97z+fGEiKFqcxXu(&$9~E2$Pd;(aS<8PhJ@^4%FW=wY zMr-+N-+%ni4h%h1aG?Bmtls@{^+vF-K4A6Bm3i3zcK5ad$aPwtT}H$ OIy_zdT-G@yGywqQZMZA| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/friendly_spider.png b/src/main/resources/assets/decisland/textures/entity/friendly_spider.png new file mode 100644 index 0000000000000000000000000000000000000000..5f620fc7ed9c9e5b2147c4644612b49ef95f6598 GIT binary patch literal 1072 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 ZBU^FO62A3C;=tfy@O1TaS?83{1OVpVx2pgE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/frozen_man.png b/src/main/resources/assets/decisland/textures/entity/frozen_man.png new file mode 100644 index 0000000000000000000000000000000000000000..9664cb36bceb1f6e8d2e117300f730029923221d GIT binary patch literal 1430 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 N002ovPDHLkV1fvopQ-== literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/gargoyle.png b/src/main/resources/assets/decisland/textures/entity/gargoyle.png new file mode 100644 index 0000000000000000000000000000000000000000..8f6f7ab6013c76a3122d574ced3c81f535edc0f6 GIT binary patch literal 1115 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0d3GfMVEhs3+&d$!r$jHjdDk>@}EG*2+%gfBn)Ya9Ml9EbHOav+{DJdx~ zE_Qc!4+;wM^z^i|vr9@!N=r-2$;nAgO^uC>jf{-U&CQLAiwh18*4EZ`b#>L$)Qpaf zj*pL5R#rAJFo=nXNl8fw2ng`?_4V=badUI?_xE>kafynG3JVMK^Yioa@=8ulPDn_I zh=>Rb3=9no_4f7-2?+@g5BKo!aBy(2x3_n6baZxh2D(Q%Lw_rfvMCAj3;s_&VA$R9 zdO6S>&H|6fVg?4jLmGbcvvB}<7#6Wg(Zl&H2vy)j*45sw=!je2*V zd~z;NdHSbl0|Un7qI&zCejgI-YF>)^7#41j+rN-iIikVxRb-Rt;>|Oizf5-HKI6_k zEn(-j+{x0PL8kr`R;@5<+oS0Oy+7@C}gw0 z<=$!IEB$SGA{C6KrTe&BS$TAK%n5l=c|~HzoO8O(v-{b;npoXuU1sGcW4&efd5wen zWF=Gne%Yermh#)e)1}FE(dXC`YIgVLPUiaZ*LlmlX{%Xc|4BP))c7rVzBKd2_KDsX zn{qq0OWt#B`zy5##0xpn^dwo##qolho-23Prd5ybl(xTn;KES5*!}%N);%-An9kq1 ze)r9iPT6bQRihMsZki_4cOaplitB|B|2^iN>!e)+1-vBn{;0Js7JDZac%^LhbDdr4 z?`1R+>Ml?5Y1^4nC(*WmVQTrGc#DD$yK3wCo?I^yd$LdV$33M9*89IT$1Dq4rLuI& z-v6!Hj+%PSb3RWwy&=*pXw!pGF0mC{b5v^_tELA`>7D=V=c0pk^YmM99J3K^oqzaP zP>{f#=*AT;lLYvBk92RkSEOjMt}@n{k@d;k$5H>7nsj+SE9F+4{ItQd`_qqR?YZ_P z_79&sD7Be?&J|47In|VZdRN@Eqnp+<-gl5V_1xvao1*n>OFUdpP7Zlq?Z_IbKKrVj zVCbHkM_ShGtNlN*_V>Ba z6biXQ90GPQoZ*zopr04YB&A^-pY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ghost_diamond_staff.png b/src/main/resources/assets/decisland/textures/entity/ghost_diamond_staff.png new file mode 100644 index 0000000000000000000000000000000000000000..3be5771f2f4fe0c8d87b174a7b89cd99daac4b3e GIT binary patch literal 770 zcmV+d1O5DoP)2NhL{lwCY zFw0>YV2;4$fN#1w3@q>7f*k;3BRjzU$YHR<58Bug5ApjD4 z6B@)IvU(lZ%^>zsZ9TXe^QRBN`c6vA6XyV2A)uUE4mL+i{DT*&)i4xfX*b5ySyu3X%VDt8^+sxn;6|edQxjacnF}o2HgD7cqaiRF0s|fb03ow`FlOXVxk~R@h)V^}xqWl9|DYXzcx{V-)(iR0H zVM{?5>LMNvgej6G^5Q#i9_L=qjQ363H=B3nz5CAho$vg5Ia0s&b7$hdFVnR4e2lg} z&y(2oiRqj^CwAZ0nYg{TL`#(?)bsKw!9ICsl&aOLdEWBj9PF>p$MrWeRJd2+vtoZM z3?%1363=#)R+4)im&<%_bFLN)EM%M)LL$;&u#fbX=+E*h`x842ksKn@(ZEroh$MQP zIee;%K?ST;6&wXLfXPYyZ;Cv!OtZd*Qm5&Gl; zIKKFu&Bs@-)9a5P*nWGX!eduUf1!AcRajix4k}1Kgb6rWzQ)cm(_xEqUqWl(NEf^~ zdpZFIkq{CNOUrpPa+b`Y(mP!cqCi@52Nj>$h89RjYqh!uoHlF(a>-*dNgQ*J9T*rDM>P^_FP5);cvjT+Oo4xt!lvI6;x#X;^) z4C~IxyaaM8JzX3_EKVmUEMPAvEd0rTC?&g%aT0H1rd`E{2mhtb^CqM*Y)X^(W+MD| z{zG;5If_C;LJ7Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0wYO8K~z{r?N+@` z12GKFu>l(cY8O}#+|Y%I6;o=mQ-1-I<$y|rL90>gfZM_ z#gUWVZzqQPBr9JW$9585a!R6BtLepJp?kfamfQ?)VK$qQO{>+?lAGZ|2uw?WgV>R3 zHk;IE9)_W{Lt<#x>$TOj+ilWKCKIa*0>^bK_DoAytyUDU-|stIqS0uOAOHf#<95a1 z&=n011Xz(=4Un`VpkA-rU`PUB8-GsGBpfT=ULTwwC*b!tn~nAJaCf1j*Kc)wd8E)j zy?kY6vXwx$+f~cuQqAXc#e6!Q25H5GF~2Tuu8yhy`20!ztle-%?r%@@`_DP?vx7Iq zJPF?MP{24)dZZL=WzT2Hz)ncW?M|v69E-HcgJbB|06Q9uMx-B)$EwrmfD)HSBafm? z0?ud1pBM{cFc=u-a;>#J3h*e3NOlHRfE95Irx5g+L(jrGIWBd^Z8qct=2FMPFo6l+ z@WD3V;mM(ffENbtads%V8FrF_-XtOQ1O$#jy245D1W1zetmMqjI6inMN+B&s4C@$u zUze3!Q3UZELzCZtr0W*Qn^*cyl7%GU>t#QU?^KBR7l4?qb%>R+pwD(``qG8y2Z3;K zh%w8wOVXQZxuApM->%_sXb+B^$g}qg4A(DOJYpZ4Uv*mBS7`H|UItq;p+bcU{|HL`0S75{vE;dpX8-^I07*qoM6N<$f-lD=TL1t6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ghost_wooden_staff.png b/src/main/resources/assets/decisland/textures/entity/ghost_wooden_staff.png new file mode 100644 index 0000000000000000000000000000000000000000..b52bf951558f78dc8ca686725e07dfc8199eedf4 GIT binary patch literal 681 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/goblin_wizard.png b/src/main/resources/assets/decisland/textures/entity/goblin_wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..114a78bc16705054e2bc7d800d9ba0ef8d0a0687 GIT binary patch literal 4193 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 JPDHLkV1lgJ*KYs- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ice_creeper.png b/src/main/resources/assets/decisland/textures/entity/ice_creeper.png new file mode 100644 index 0000000000000000000000000000000000000000..32e21ced386aa747b699259e69d85a23ce792f07 GIT binary patch literal 1320 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ice_spirit.png b/src/main/resources/assets/decisland/textures/entity/ice_spirit.png new file mode 100644 index 0000000000000000000000000000000000000000..7b24a7c70ec0d90adc7eb65a8d57ec8dc4d225b2 GIT binary patch literal 1255 zcmVPx#1am@3R0s$N2z&@+hyVZtkx4{BRCt{2n!j(`Mij@tlrJz9OMvUCf|Vjuhqhh} z7)XXJMK*UxmnKV6Z$bWnw0}a}ElY!LMzh2~fCxdoC2LzCfIFl{flPr-fd&#t226_- ze8zR4o_sv0MJ-u zhs_0e0N`{`bKATQ0C>z5xLCY!x;O%L+IU^nC!pXSIt~Qu%4`&l{GOp|Qvglb+kN z46qcX1=w~K5L2jO&REp*P6ssrkVly^(K8jNgW3;QaNE{&W59tw-{4VF`DyZx*Q`5} zHZln&H&lM{v`8yI@As!saofC3>lpyzWSz0w=5<=@aRhxow!CrVyctej^`#{1_5jk^ zy7`ZAV+43&`B~+>U^~0}4FLH1i_cvEP-P%_e*l2sB>c5!1~Na@rInxM{dr>D{$=m) zqzu=uHs2&|f-nAZzRag;A$hw)1^{cT&23!N?xC)#i55yZX3T6zKuL z$`W${fJU4eUR$^f0Ps3*5ht&2@>ZNZK^v*Mhq!HCCmU07faMgPGEg+RV>YBS+#$SsJL}Iyo=YgDkpUFYypd z=X)JzwKo+9RN@}a&s9g30WF0rOln^wV{B9Tpx#GNKz049_#G(74XUVXmezV!#<4ek zAJFxB!skNxTnJjf>XembHUFgc#_t0nYgLKZijlM37vx1no~{Q+K8luicJ~{y%TwjN zVN?;BqGjMChy&96e;OancL8}%pos50Gcu||h~W&7JD|#}GtB@R*))uO7f>H$iQCUY z+Qq7xuP9j8>k0DFLEuOHw=B!~fb26OEzmK2A21RJ1Sh8rPts*2YXgnN0l`Ulr?y8j;sUBqWR4tV&Kx9DQ>;nUO0O*yUV=n^ywmSD30AS~XG zlL=FC09#pN?zdmz-avc=0HG|W<8@j1ch6Y>fNw4}J8?3d{)+bhgw^$Wg4TN6jgU^4 zH84v1@?^XNd@jWBo1V1E(XUQ7t;o=n|0fs_4S0r)CfAstn*`JM00dM0dDrWSASUCa zBd%iF{}aZ~0;c>w5ql|G1g8BzF%k;v&H`r*h0`$Q{|PJWSwPiIs{>49$;V$H>h9E# zSJs`E4k+v_@S$Qocyjzq{bR$*5_9ErobKma7rr-D>1mStS>S`G>-7XdA3D@@oX&K; zr$t5mf&)nZ`%BQB7c8HPkVNPl-Y36F;?AJW0Iatk(CpiC);>E|&d0 yY5KIe**~r>;TE#J*T}x<@{Hr&yCt8L|6%mJBlGltLfm?weGHzielF{r5}E*|_g7^A literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ice_wizard.png b/src/main/resources/assets/decisland/textures/entity/ice_wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..7adf4dac68b00b1fc3f991d1e1cbb724ce4a42ca GIT binary patch literal 4376 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 N^uR!?Si?5-{{XzPt;+xa literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/ice_zombie.png b/src/main/resources/assets/decisland/textures/entity/ice_zombie.png new file mode 100644 index 0000000000000000000000000000000000000000..052e2b859a2612ae4f1fb4449fde10688240abd0 GIT binary patch literal 3021 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%0D!48LjdZLWB}Z45X-!*kBB2F z0QTY(0Iq!Z(9?z$3INX~3BlI~kaVM>@6FE~V1F}0Ghr-z&^D8yo1~ht3GLZIO#R|H zT)FvRKc7(R@(77EL&Q_-1PNly57?j0nBK=-kIU3w8_aNJbbUr`m7l!$GtUnIfVe>t zA#S0=_WS;uuOn%KC;++vp1ZyRrBL7fIjQ5AK0CtAI_nIl&J4L4LQav|E4{B@cEo#h zY8bQ%uu>HJ`z18Qo*j&w+bh!mc7~Ng9!}~wr{XO0Y#Cj{abstXjC9P@^fa`=jORLu znAZj~(Dbw?dy~F921cO`W}ps?Kphx?Hkd)jz-U`CyNG#mawKTc%duB}~3OOwi zlx@Lk0z31~GSetd-w5J(-~D+Fxm*sz!^6nsa-nmN37%z;;%jOmRcCZy1j)>#BV*n# z7AGqY8>Ws5O2KV56;}m-aVApDhK^X(p=FURW82DT_|a`Ave_)g#>U)dRHy)Oty^As z<>mvif}c53djRM z{VBE&bvNjzs^?!i1~rjFOz%U@*o2x$aY>1dOn@yvC=+NE4NV|SSrCm@&42_rF1b;Y z)%m^qK^0Y;_13bbPBZ}-*m9!Z>?%M4WMg{77}c>t_Ivk(TD8i7CLlsI0b_%vPdH)bXG}r-BIhBb~ny{eMc%W{ARjcfdgAH`hJJtC`fmkT|#3e_Jr?Kllod@VN z=XcVgG*tG4$YyU-yQqN?ed3bCp5kN(s&Djro{dodXddegZnKH0{?R-h-qqbQdOr7p zf%Ro?8MTc9dvyhGogM%H{OS7@u<7wiA&;7|>DK@GhyB|j@i^{>H~{Y6?BQJ<@xALm zHi?-SVUv(qhJG7M<8QSMj)qv)4Bk3DfT5wG`aA0Xp!NP2w*df`&;JzJY}T#+9Ud?} z>q42m6HH&xCoXxmnqpQpnSdkY+Xg|FnGHmb4Sw{=Cl39$sbLsURTar((%tvlw(aSo z>$>~@iSJ#!7|jF#Z%CQq0Wx9vp;?C~q7ehFA}}Z_&K7+)5`@?;Y`-Ug{{d_VxH(|k Rc@_Ww002ovPDHLkV1m=vn=SwV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/illusioner_puppet.png b/src/main/resources/assets/decisland/textures/entity/illusioner_puppet.png new file mode 100644 index 0000000000000000000000000000000000000000..308d4e74f79f55291e17e64e7bf2610fbb557327 GIT binary patch literal 2451 zcmV;E32gR>P)Px#1am@3R0s$N2z&@+hyVZyJxN4CRCt`-TTf^l*BSrK>}poh?gT0FS{6A-2sp&$sT;D%CSXjG^$aR|1YAX=#H zhP6-*W^oU$q?Kg}&HkIw?o1D>Z}i@qH?uRlE7|G~#LT=u-@fmA-}k-uzV}H%1N`Ch z&m90TD;2ja(b)-fbO5`%fql(N1s5+|PypcE8*exOaN@)X0Kn|0pDK-h8vy#={LHb< z0sufwq_{fUEMV)a_e0U~Lp)3)Df0}n*{rnR^QTUE$_&GRuIr%(XqyF8tui-Q5`-v_ zW)MmMz#iiS$;^Ly?Hc#}>+x{_-kD!pTSKu}#M?774iH`w;#wDg_At#tZ7a0^7={4= zk!GI|*Ser4Qf+4*2%`ZV9Y`?m02ZU8{3RKmjiJOJSQ^t6X4ORE{@NHeb#^019f6z^P>t|ZCKq(g#W z`^B{`j$uDjvCRV1QmGW^#2!6*1OQl=pGSwLp+nPL=BZAEIMbz4iTm>#%+#47SH+b= z9y^P(iXZa;P`q zVVK@UO{iLBC?9_OvAYbi10{{f<#I@;)9CE%L@X9_>x;!AHa0deJUr|XfZr_3@cVz* zm^w4$4%}W{@m2XoNMR(`QFqnuNI4#R&!g)UEAp>A=Nh?bfYZxN+l#`{&n= zrLncW4WiG!v)|;zfYz7?>Lwv-0sz-6SmvoLPJ;n}-ku(p0n&zIv50g!E&st{(R~*g zXCX4qf(9JZ`&we&9n+nw$}_)w+hJFYKmIij>^aK)vPIa&CfdGFe_D~uOmaKkb_o0b z0tY6AU%mDl=e1W~k=FhF>u>Pmzy2B6|G#VNhcZK%&ziD!6Sgvue{3HN-q0v zu0G1l$hN+bPK_bZ`}$>WytMmEpUh$7{xCNGav^ZM2Obj)Itv^mHtr9HYIi6>(I=ty z>65uo?G97`TaO=e-)5x}X_wdv!fJpb+Ps!Xa1AWeL{R;s^))HsWBv7efEUI_(c9Al zpuP#Zn_Ujo&ksMO9h(6)KP2g^J+1>UM^Q}O3v<;)~en;Z?&h{2p(4lGE_pW6H z)`vkm7$@|P=CN@<<$8GlSYJL4H6d?L?WmuKL%SJj7g(kVY9fX4l6;n_ou5yLKhx98 z6|~C-926+hBZj{gVtmNUFDxeF$Y}t9qB;|`eJ0ZeaVF}OotenhD zIzcxwPb#KH=l`lzhP}E13WHM)5#0=lZKzE2AxCZ%0D!48LjdZLWB}Z45X-!*kBB2F z0QTY(0Iq!Z(9?z$3INX~3BlI~kaVM>@6FE~V1F}0Ghr-z&^D8yo1~ht3GLZIO#R|H zT)FvRKc7(R@(77EL&Q_-1PNly57?j0nBK=-kIU3w8_aNJbbUr`m7l!$GtUnIfVe>t zA#S0=_WS;uuOn%KC;++vp1ZyRrBL7fIjQ5AK0CtAI_nIl&J4L4LQav|E4{B@cEo#h zY8bQ%uu>HJ`z18Qo*j&w+bh!mc7~Ng9!}~wr{XO0Y#Cj{abstXjC9P@^fa`=jORLu znAZj~(Dbw?dy~F921cO`W}ps?Kphx?Hkd)jz-U`CyNG#mawKTc%duB}~3OOwi zlx@Lk0z31~GSetd-w5J(-~D+Fxm*sz!^6nsa-nmN37%z;;%jOmRcCZy1j)>#BV*n# z7AGqY8>Ws5O2KV56;}m-aVApDhK^X(p=FURW82DT_|a`Ave_)g#>U)dRHy)Oty^As z<>mvif}c53djRM z{VBE&bvNjzs^?!i1~rjFOz%U@*o2x$aY>1dOn@yvC=+NE4NV|SSrCm@&42_rF1b;Y z)%m^qK^0Y;_13bbPBZ}-*m9!Z>?%M4WMg{77}c>t_Ivk(TD8i7CLlsI0b_%vPdH)bXG}r-BIhBb~ny{eMc%W{ARjcfdgAH`hJJtC`fmkT|#3e_Jr?Kllod@VN z=XcVgG*tG4$YyU-yQqN?ed3bCp5kN(s&Djro{dodXddegZnKH0{?R-h-qqbQdOr7p zf%Ro?8MTc9dvyhGogM%H{OS7@u<7wiA&;7|>DK@GhyB|j@i^{>H~{Y6?BQJ<@xALm zHi?-SVUv(qhJG7M<8QSMj)qv)4Bk3DfT5wG`aA0Xp!NP2w*df`&;JzJY}T#+9Ud?} z>q42m6HH&xCoXxmnqpQpnSdkY+Xg|FnGHmb4Sw{=Cl39$sbLsURTar((%tvlw(aSo z>$>~@iSJ#!7|jF#Z%CQq0Wx9vp;?C~q7ehFA}}Z_&K7+)5`@?;Y`-Ug{{d_VxH(|k Rc@_Ww002ovPDHLkV1m=vn=SwV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/jungle_spider.png b/src/main/resources/assets/decisland/textures/entity/jungle_spider.png new file mode 100644 index 0000000000000000000000000000000000000000..80a856da6731adbd630e5ec373818a796b80a8c1 GIT binary patch literal 1177 zcmV;K1ZMk*P)7zBirn1U)wFLLqh!JAbcJop#%;?Zh_;%&zc&HiWF7$;1L`)OM?KFf!t>b%wu3#`jxl9JOb3qdR%$H>m)#B58wvg2+&~7>#9sZ6%y3@ zN`Uu$T?BaGQTEow>!=(9qH|y6A4TJbIvoJ=>ht73;MV5FA-07G=$B-F{4Pq7AL4Yt zcnmlKAK6?27G01RdA%s?TY!9<{&D+-h_us~<67cCqV^vQGR!NkAsVz(ZM_ipy zpPapU3bA$@6LpNqd)|NpFv>6x!tZqZ+PXAOu^A}~6X1E8Nl>;mkJqP;#|!>5ZLG5Q zjQ}g#`{*R|;*@^7lmZkyOV-;4Wl58_Sd%lr!Sg5^SbOSw??mv@W_8d~1lWXZ8WW=Y zfCH(QQ>drWZn6hhd!o(c&fiC;na*izsf_?tMcKadyl!Ox`Tpx$YVEGy8DHhk@9-`9 zpgoE;kph<@K+j?hIvm8RWRiM}8X%Y{iU~p80GsOUdsBcX`)DmoD*#VUP$D&WNeX-2 zQwhLu+t;68a+}SAGTQhXBg`8wI)XC+#d$AfJME-m+)cCkc`pqo{q%CuPos-L8eJZw z!)%2Mn#rhoPk?O~&(e0$POq+pX?%U025Y5#OD72{qyem6?RxRbg^ySaYf z1Z$QEHFsNSeXo_)I-9ou5AwtSjzwTWAmWe+;9NkrgGPVvj=&@UEI^*TA7uhSJV2ri zb7#QkHw4V;<8FNftUPI^mG*ji^n4?&?QG6eFq{-Op1&B(z&E>Fcfc87Jqn|J?j=D- zSHo;jz}fXto)@HGJ!b-pZ|$34jW+T^{5GuJ;~i^8l*H zy|yS2LVX|>9^UA;QnRy}9bp7y5^fy=Rrb%inV{MT@UEELW@RseM~ROr!;2Z#kH`0t z7!ItQW7I}~0%s5M*~`(L^K37b)f_>`Q9}9mmN&*SKRXvzfMr%?K=jv>df(d$o;UU6 zPzA74xXjL}jR4Q1n$_vg#^~A`#e*^u`0A=8=(U)Mu9bjjkt*%z0^=>PEq|J$7~qY~ zeLNCtCBUMy_cLN%8tIW&b_XcCsVTWpP_#a^5};9Ce{!%)y~S$U$#rim1r}wA(a)6H r3Gi-fYLQpH_GQP6Zfu^a>LTDD0oO!eJE_+q00000NkvXXu0mjfgBmh` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/king_of_pillager.png b/src/main/resources/assets/decisland/textures/entity/king_of_pillager.png new file mode 100644 index 0000000000000000000000000000000000000000..edf3ea91397d5e30f88613a2ecf49ed299b9e787 GIT binary patch literal 1912 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$jZRL%n;xc;tCWO5fK&>6O)sbk<-$WH#1XJRn^eY(9+U0Ha4~d0xL_SG#fQ{ z_Yil@gJ`2_>h;YbDy!Qa_cfib{Y;1OBOz`%DHgc*llQvUvNtv` zKknwe7c8Cdxv1ea&$?TUT}PMf>pYwxv14|_dS-*as%|Rl*DD>1=6hJfa%9cxqbnR- z{W_l?j7?68)i+sj^sJ=(&+BaKrnr}fnej$k=jK_X!ckVakDG~iLdk}8;+r2&+U{6j z!E$hI?}9sxiEITEuHUYmcYnWO!yT(P5!a9YQ~CJVq-^eEL(l(meC;MH!_`GfZsu** zPuOh8*`;uD@)vUt;hk<;o=;lMSz|Tg*ZV4!Zs=I+=u^qdy7x-|r`9!he{5@9d_2KV zj^lE=#{VM^G*8d7Gh7kaEdAi@o|$PP7rU9iI`b^}ZnC)M@PggUmWNEO8<@X1^SInm z+2WEUVCcYcXu>QpTegce`|sQ9&S`$}(80I6oUMCj&-0_kU(Rz&?{xI#&Ni6)O681v z%7Q=d_=LbBrZfIoS>L$C%{%MH*+(4v>_2eCnaK4Y*66V@-H>hB8GV~CD@x*Cs{iu> z88gcp#KI*jE{O9? zJ#b5ByC|pbGWs{y z$a3zfqNMd(e{-w}%$YoQQ}+Ek2C6YfWgb3@e@#(v%n*=n1O-s5C}7hYIrpO1y^~xIEGmGzn$RCci4c#<)?(tj{l9; z4ZJNJHV?c8Rz_blgpZIhc})% zySQW5yCbog$J@B~8}1f1nr-TOqV0G@t)F@W*JFOM0OkEx>yks?Pq6>Wv{+o?ul$KW Z3>Q3=I(GQYod$F@gQu&X%Q~loCIHube{ui- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/life_insect.png b/src/main/resources/assets/decisland/textures/entity/life_insect.png new file mode 100644 index 0000000000000000000000000000000000000000..9a019ff573109a894aa5dade35390c0301bd80f4 GIT binary patch literal 1047 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 OIy_zdT-G@yGywqQZMZA| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/lurk_skeleton.png b/src/main/resources/assets/decisland/textures/entity/lurk_skeleton.png new file mode 100644 index 0000000000000000000000000000000000000000..d2fdd59aa109988c43b4415957bd241d9230e59b GIT binary patch literal 1482 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/murloc_wizard.png b/src/main/resources/assets/decisland/textures/entity/murloc_wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e72b17329a5cf70f6d38a8ff46d8aabd5e27c6 GIT binary patch literal 21298 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/mushroom_monster.png b/src/main/resources/assets/decisland/textures/entity/mushroom_monster.png new file mode 100644 index 0000000000000000000000000000000000000000..263036eecd8ae24df879afa30b8fad5b8a1f50ed GIT binary patch literal 786 zcmV+t1MU2YP)Ls{nLV~XTh0`Tqai{ZT; z>l?!dz>N>bf9~ubRQ{rdsc&oa8YsWPy3%e&^(I5Nq{x6u+4^RI{I|j^;u9R9=}Q9CMN{IF@C2AP~qtj-j7>>9Jmd(@-I;b zAhr7Gk#=p7&7COB01U!q4zMLKK{ep(=6zT24reoNHSBD!yDJVdc~6p7+45NQ_uW;RU${k^ z8&B!P^rF+t@A%$_z@U-@0Ac@Q0K)X_rL>kn?3Nb`D7EG&scgk2K@w*GB(yZfngcXu zRieopAfcr()*PTQs}fD-00}LPvE~4cS(Ruq2S{jXj5P;n%&J6_IY2^7W2`wqV^$@a z%mETw8e`1?8nY_VWDbzf(im$F(3n+;CUbyIH1=;3pBPOh=^%yO=~Eo(T0XJX+mr?{iDV-H8E=cm}=s`)~HF< zG^Q~|O-!t*!4R!cOJagp&>%!aETAM5YJsEWDnNSK+^;7HHO5`9Z300f{- zjzxvlK>*t2`FYj)mL*{8)Az?Q>$_mi0 z1C?<0Fj7*o)1*UIfSlH3E3Galr3|N&JT5oQM&Z^OqLHJ)b9=&WF#c=}{jb<#?g59oW5+T`39$ z=<_^p76f?6Pc0w!2=IGeeS`r1%cG}7zxJsr3e%JzfZYYp>SIaXYL{>&jwJxku8}e> zz!qWf?AO>RRDjm=*MRt~+E6BbVSND8KO+ZCeGP%RTtMMEC0u~DeI*#BmE}3htmXDN zX?F4|`QnG4P&AFadFd1hFQ~;3)&N-(eKV91aH;OX?#0T$09TZ$a9Y#^K{=YUr8uf{ zrH4Zfu4RyVt707vg3QFV&Jam=0l9d=_2YG&qAuXpGqhJTrN6&Fao+CijBPsdgnn7k z?>O)oRqs7+IL0@-`;R1Ezo{ukYu75%&z+;X*25y^u(EE{rIx+yRuJ&e;U^72{`|`E ze@{TC)PzNHTbo~3Pmm(oKX#BP5+NEM*1AVY ziPCqwiCppQ5sfPMcz$7_(jOfqs;(wE22gi5QKIqPyA#Hg8zR8%3eZab#^nSA;{*i) zMCIiQkm+gKdiq^4x9#BL9_0Fc2U&tS2}9_>B^v2PiAR zkbtTmmtHRufVwRsi4Y>q`vqRuKT{N9KadEDQoLc5$YMn1Jxy z-(pj6mF9Kd5P7}ICTC}f8XB}z`4l;u#EKt$Tr1%R*Fmj=H%uQ2RVM^-r{nNBK{cB zDrAknNHc!?(07Rm*z&*|F<25-WddXivjTVyTb}2%S11Q1(Vzs`r)2{8x}#%>FwEbv zBOw7ObkI=j;Jd=6jg{g+mYMCO$if2k4fKg}95n!1af$NH0xfNh=-9!}%?Xe}$r%9m z0hI5_*Zh)Z!~j+R6TrR<%W`z*$llVT%xAX&0Y*gOIU=h0;gFi*P+nJ7mC@`4<#-+( zouui=q^JY<#93ZePBZ62(vMOYai8N@G1u#kP{~XojEC2#{ZXC3T z{&0tARHRe+I1PYkZl_Zafa5q$q{rdHEVSJoI;V|{~_NsurUN4n!&cX!j>pA0Hwy8jW{JT|7r2q*zxuBWDyAc)@+Z=Fh<1q{vgKf0OJKP6Iu zXPbajutGBTU@IV*?5D!Jg#s2UDnu$wJ9Eacp9&kjU3+kx@E694R(PoR@YsgvMpoq0`O9J2Gc{^yHxb~@bT`HVtBNUa)h5xO9Pfw)$4985y1~-mfz|Q=&0NPO zz>FcQkJ}2cx`oZ~*$OaY$m-*^0<3OfGkmrJ%owuzxUB%ITi6VrtpGEItUhil!0Hw@ v!)GhNj3KL!+X}F{h0XBU3NT~H>f`?amb_to*hM>i00000NkvXXu0mjfTeOvi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/mystical_skeleton.png b/src/main/resources/assets/decisland/textures/entity/mystical_skeleton.png new file mode 100644 index 0000000000000000000000000000000000000000..d1bcd79d5c708175c1ea74d36312737406abcb5c GIT binary patch literal 439 zcmV;o0Z9IdP)NklE1l8Q#*|B;f(V!b(#Ek6Xc%_y+s|!+NVaL(rO>|_lMTlFWa}4pq7OP@>^6IxxBwE8;D1EZO6I#JMZ6sFyn*mA6^NM%-84gHE+|IKkuv(mLQ0uxDb^^d hz#*c#)@t%_{{Yh0dsuX6kmLXW002ovPDHLkV1h7c#P
  • extends HumanoidMobRenderer", + "generic": false + }, + "WitherSkeletonRenderer": { + "file": "net/minecraft/client/renderer/entity/WitherSkeletonRenderer.java", + "decl": "public class WitherSkeletonRenderer extends SkeletonRenderer", + "generic": false + }, + "CreeperRenderer": { + "file": "net/minecraft/client/renderer/entity/CreeperRenderer.java", + "decl": "public class CreeperRenderer extends MobRenderer", + "generic": false + }, + "SpiderRenderer": { + "file": "net/minecraft/client/renderer/entity/SpiderRenderer.java", + "decl": "public class SpiderRenderer extends MobRenderer extends IllagerRenderer", + "generic": true + }, + "SilverfishRenderer": { + "file": "net/minecraft/client/renderer/entity/SilverfishRenderer.java", + "decl": "public class SilverfishRenderer extends MobRenderer", + "generic": false + }, + "VindicatorRenderer": { + "file": "net/minecraft/client/renderer/entity/VindicatorRenderer.java", + "decl": "public class VindicatorRenderer extends IllagerRenderer", + "generic": false + }, + "PhantomRenderer": { + "file": "net/minecraft/client/renderer/entity/PhantomRenderer.java", + "decl": "public class PhantomRenderer extends MobRenderer", + "generic": false + } + }, + "entities": { + "Zombie": { + "pkg": "monster", + "decl": "public class Zombie extends Monster", + "createAttributes": true, + "ctor": "public Zombie(EntityType entityType, Level level)" + }, + "Drowned": { + "pkg": "monster", + "decl": "public class Drowned extends Zombie", + "createAttributes": true, + "ctor": "public Drowned(EntityType entityType, Level level)" + }, + "Skeleton": { + "pkg": "monster", + "decl": "public class Skeleton extends AbstractSkeleton", + "createAttributes": false, + "ctor": "public Skeleton(EntityType entityType, Level level)" + }, + "Stray": { + "pkg": "monster", + "decl": "public class Stray extends AbstractSkeleton", + "createAttributes": false, + "ctor": "public Stray(EntityType entityType, Level level)" + }, + "WitherSkeleton": { + "pkg": "monster", + "decl": "public class WitherSkeleton extends AbstractSkeleton", + "createAttributes": false, + "ctor": "public WitherSkeleton(EntityType entityType, Level level)" + }, + "Creeper": { + "pkg": "monster", + "decl": "public class Creeper extends Monster", + "createAttributes": true, + "ctor": "public Creeper(EntityType entityType, Level level)" + }, + "Bat": { + "pkg": "ambient", + "decl": "public class Bat extends AmbientCreature", + "createAttributes": true, + "ctor": "public Bat(EntityType entityType, Level level)" + }, + "Ghast": { + "pkg": "monster", + "decl": "public class Ghast extends FlyingMob", + "createAttributes": true, + "ctor": "public Ghast(EntityType entityType, Level level)" + }, + "Blaze": { + "pkg": "monster", + "decl": "public class Blaze extends Monster", + "createAttributes": true, + "ctor": "public Blaze(EntityType entityType, Level level)" + }, + "Slime": { + "pkg": "monster", + "decl": "public class Slime extends Mob", + "createAttributes": false, + "ctor": "public Slime(EntityType entityType, Level level)" + }, + "MagmaCube": { + "pkg": "monster", + "decl": "public class MagmaCube extends Slime", + "createAttributes": true, + "ctor": "public MagmaCube(EntityType entityType, Level level)" + }, + "Vex": { + "pkg": "monster", + "decl": "public class Vex extends Monster", + "createAttributes": true, + "ctor": "public Vex(EntityType entityType, Level level)" + }, + "Guardian": { + "pkg": "monster", + "decl": "public class Guardian extends Monster", + "createAttributes": true, + "ctor": "public Guardian(EntityType entityType, Level level)" + }, + "IronGolem": { + "pkg": "animal", + "decl": "public class IronGolem extends AbstractGolem", + "createAttributes": true, + "ctor": "public IronGolem(EntityType entityType, Level level)" + }, + "SnowGolem": { + "pkg": "animal", + "decl": "public class SnowGolem extends AbstractGolem", + "createAttributes": true, + "ctor": "public SnowGolem(EntityType entityType, Level level)" + }, + "PolarBear": { + "pkg": "animal", + "decl": "public class PolarBear extends Animal", + "createAttributes": true, + "ctor": "public PolarBear(EntityType entityType, Level level)" + }, + "CaveSpider": { + "pkg": "monster", + "decl": "public class CaveSpider extends Spider", + "createAttributes": false, + "ctor": "public CaveSpider(EntityType entityType, Level level)" + }, + "Spider": { + "pkg": "monster", + "decl": "public class Spider extends Monster", + "createAttributes": true, + "ctor": "public Spider(EntityType entityType, Level level)" + }, + "EnderMan": { + "pkg": "monster", + "decl": "public class EnderMan extends Monster", + "createAttributes": true, + "ctor": "public EnderMan(EntityType entityType, Level level)" + }, + "Cod": { + "pkg": "animal", + "decl": "public class Cod extends AbstractSchoolingFish", + "createAttributes": false, + "ctor": "public Cod(EntityType entityType, Level level)" + }, + "Chicken": { + "pkg": "animal", + "decl": "public class Chicken extends Animal", + "createAttributes": true, + "ctor": "public Chicken(EntityType entityType, Level level)" + }, + "Evoker": { + "pkg": "monster", + "decl": "public class Evoker extends SpellcasterIllager", + "createAttributes": true, + "ctor": "public Evoker(EntityType entityType, Level level)" + }, + "Silverfish": { + "pkg": "monster", + "decl": "public class Silverfish extends Monster", + "createAttributes": true, + "ctor": "public Silverfish(EntityType entityType, Level level)" + }, + "Wolf": { + "pkg": "animal", + "decl": "public class Wolf extends TamableAnimal", + "createAttributes": true, + "ctor": "public Wolf(EntityType entityType, Level level)" + }, + "Pillager": { + "pkg": "monster", + "decl": "public class Pillager extends AbstractIllager", + "createAttributes": true, + "ctor": "public Pillager(EntityType entityType, Level level)" + }, + "Vindicator": { + "pkg": "monster", + "decl": "public class Vindicator extends AbstractIllager", + "createAttributes": true, + "ctor": "public Vindicator(EntityType entityType, Level level)" + }, + "Phantom": { + "pkg": "monster", + "decl": "public class Phantom extends FlyingMob", + "createAttributes": false, + "ctor": "public Phantom(EntityType entityType, Level level)" + }, + "Cow": { + "pkg": "animal", + "decl": "public class Cow extends Animal", + "createAttributes": true, + "ctor": "public Cow(EntityType entityType, Level level)" + }, + "Villager": { + "pkg": "npc", + "decl": "public class Villager extends AbstractVillager", + "createAttributes": true, + "ctor": "public Villager(EntityType entityType, Level level)" + }, + "Witch": { + "pkg": "monster", + "decl": "public class Witch extends Raider", + "createAttributes": true, + "ctor": "public Witch(EntityType entityType, Level level)" + }, + "Salmon": { + "pkg": "animal", + "decl": "public class Salmon extends AbstractSchoolingFish", + "createAttributes": false, + "ctor": "public Salmon(EntityType entityType, Level level)" + }, + "Illusioner": { + "pkg": "monster", + "decl": "public class Illusioner extends SpellcasterIllager", + "createAttributes": true, + "ctor": "public Illusioner(EntityType entityType, Level level)" + }, + "SpellcasterIllager": { + "pkg": "monster", + "decl": "public abstract class SpellcasterIllager extends AbstractIllager {", + "createAttributes": false, + "ctor": null + }, + "AbstractSkeleton": { + "pkg": "monster", + "decl": "public abstract class AbstractSkeleton extends Monster implements RangedAttackMob {", + "createAttributes": true, + "ctor": null + } + }, + "vanillaItemCount": 238, + "hasItems": [ + [ + "netherrack", + false + ], + [ + "snow", + false + ], + [ + "ice", + false + ], + [ + "tnt", + false + ], + [ + "sponge", + false + ], + [ + "music_disc_13", + false + ], + [ + "cod", + true + ], + [ + "skeleton_skull", + false + ], + [ + "lily_pad", + false + ], + [ + "nether_quartz_ore", + false + ], + [ + "poppy", + false + ], + [ + "sweet_berries", + false + ], + [ + "amethyst_shard", + true + ], + [ + "copper_ingot", + true + ], + [ + "iron_sword", + false + ], + [ + "bow", + true + ], + [ + "crossbow", + false + ], + [ + "enchanted_book", + false + ], + [ + "iron_helmet", + false + ], + [ + "netherite_scrap", + true + ], + [ + "crimson_fungus", + false + ], + [ + "nether_wart_block", + false + ], + [ + "end_stone", + false + ], + [ + "coal_ore", + false + ], + [ + "diamond_ore", + false + ], + [ + "redstone", + true + ], + [ + "end_pearl", + false + ] + ], + "vanillaTex": { + "block/ice.png": false, + "entity/skeleton/stray.png": false, + "entity/zombie/zombie.png": false, + "block/tnt.png": false + } +} \ No newline at end of file diff --git a/tools/entity_port/verify_mc.mjs b/tools/entity_port/verify_mc.mjs new file mode 100644 index 0000000..e028459 --- /dev/null +++ b/tools/entity_port/verify_mc.mjs @@ -0,0 +1,86 @@ +// 验证 mc_sources 中渲染器/实体类签名 + 完整物品表 + 原版贴图可用性 +import fs from 'fs'; + +const MC = 'f:/DecIslandNeoforge-main/mc_sources'; +const out = {}; + +// 1) 渲染器类声明(是否泛型)+ getTextureLocation 签名 +const renderers = ['ZombieRenderer','DrownedRenderer','SkeletonRenderer','StrayRenderer','WitherSkeletonRenderer', + 'CreeperRenderer','BatRenderer','GhastRenderer','BlazeRenderer','SlimeRenderer','MagmaCubeRenderer','VexRenderer', + 'GuardianRenderer','IronGolemRenderer','SnowGolemRenderer','PolarBearRenderer','CaveSpiderRenderer','SpiderRenderer', + 'EndermanRenderer','EnderManRenderer','CodRenderer','ChickenRenderer','EvokerRenderer','SilverfishRenderer', + 'WolfRenderer','PillagerRenderer','VindicatorRenderer','PhantomRenderer','CowRenderer','VillagerRenderer', + 'WitchRenderer','SalmonRenderer','IllusionerRenderer']; +out.renderers = {}; +function findFile(name) { + const hits = []; + (function walk(d) { + if (!fs.existsSync(d)) return; + for (const f of fs.readdirSync(d)) { + const p = `${d}/${f}`; + if (fs.statSync(p).isDirectory()) walk(p); + else if (f === `${name}.java`) hits.push(p); + } + })(`${MC}/net/minecraft/client/renderer/entity`); + return hits; +} +for (const r of renderers) { + const hits = findFile(r); + if (!hits.length) { out.renderers[r] = null; continue; } + const t = fs.readFileSync(hits[0], 'utf8'); + const decl = t.match(/public class \w+(<[^>]+>)?\s+extends\s+([^\s{]+)/); + out.renderers[r] = { + file: hits[0].replace(MC + '/', ''), + decl: decl ? decl[0] : t.split('\n').find((l) => l.includes('class '))?.trim(), + generic: /public class \w+]+>)?\s+extends\s+([^\s<{]+)/)?.[0] ?? t.split('\n').find((l) => l.includes('class '))?.trim(), + createAttributes: /static AttributeSupplier\.Builder createAttributes\w*\(/.test(t), + ctor: t.match(/public \w+\(EntityType<[^)]*\)/)?.[0] ?? null, + }; +} + +// 3) Items.java 完整物品注册名 +const items = new Set(); +const itemsT = fs.readFileSync(`${MC}/net/minecraft/world/item/Items.java`, 'utf8'); +for (const m of itemsT.matchAll(/register(?:Item|Block|)\("([a-z0-9_.]+)"/g)) items.add(m[1]); +for (const m of itemsT.matchAll(/=\s*register[A-Za-z]*\("([a-z0-9_.]+)"/g)) items.add(m[1]); +out.vanillaItemCount = items.size; +out.hasItems = ['netherrack','snow','ice','tnt','sponge','music_disc_13','cod','skeleton_skull','lily_pad', + 'nether_quartz_ore','poppy','sweet_berries','amethyst_shard','copper_ingot','iron_sword','bow','crossbow', + 'enchanted_book','iron_helmet','netherite_scrap','crimson_fungus','nether_wart_block','end_stone','coal_ore', + 'diamond_ore','redstone','end_pearl'].map((i) => [i, items.has(i)]); +fs.writeFileSync('f:/DecIslandNeoforge-main/tools/entity_port/vanilla_items.json', JSON.stringify([...items], null, 0)); + +// 4) 原版贴图(供 fallback) +out.vanillaTex = {}; +for (const rel of ['block/ice.png','entity/skeleton/stray.png','entity/zombie/zombie.png','block/tnt.png']) { + out.vanillaTex[rel] = fs.existsSync(`${MC}/assets/minecraft/textures/${rel}`); +} + +fs.writeFileSync('f:/DecIslandNeoforge-main/tools/entity_port/verify_mc.json', JSON.stringify(out, null, 1)); +console.log('renderers:', Object.entries(out.renderers).map(([k, v]) => `${k}=${v ? (v.generic ? 'GENERIC' : 'plain') : 'MISSING'}`).join('\n ')); +console.log('entities:', Object.entries(out.entities).map(([k, v]) => `${k}=${v ? `${v.pkg} attrs=${v.createAttributes}` : 'MISSING'}`).join('\n ')); +console.log('vanillaItemCount:', out.vanillaItemCount); +console.log('hasItems:', JSON.stringify(out.hasItems)); +console.log('vanillaTex:', JSON.stringify(out.vanillaTex)); diff --git a/tools/entity_port/verify_mc2.json b/tools/entity_port/verify_mc2.json new file mode 100644 index 0000000..00fa95e --- /dev/null +++ b/tools/entity_port/verify_mc2.json @@ -0,0 +1,91 @@ +{ + "Slime": [], + "Phantom": [], + "Cod": [], + "Salmon": [], + "AbstractFish": [ + "createAttributes(" + ], + "AbstractSkeleton": [ + "createAttributes(" + ], + "Spider": [ + "createAttributes(" + ], + "SnowGolem": [ + "createAttributes(" + ], + "Bat": [ + "createAttributes(" + ], + "net/minecraft/world/item/Items.java": { + "size": 168717, + "items": 238, + "sample": [ + "redstone", + "saddle", + "minecart", + "chest_minecart", + "tnt_minecart" + ] + }, + "net/minecraft/references/Items.java": { + "size": 569, + "items": 0, + "sample": [] + }, + "blocksCount": 242, + "blocksSample": [ + [ + "netherrack", + false + ], + [ + "snow", + false + ], + [ + "ice", + false + ], + [ + "tnt", + false + ], + [ + "sponge", + false + ], + [ + "lily_pad", + false + ], + [ + "nether_quartz_ore", + false + ], + [ + "poppy", + false + ], + [ + "end_stone", + false + ], + [ + "coal_ore", + false + ], + [ + "water", + false + ], + [ + "lava", + false + ] + ], + "jars": [ + "1.21.1-NeoForge_21.1.247.jar 27MB" + ] +} \ No newline at end of file diff --git a/tools/entity_port/verify_mc2.mjs b/tools/entity_port/verify_mc2.mjs new file mode 100644 index 0000000..abeeffa --- /dev/null +++ b/tools/entity_port/verify_mc2.mjs @@ -0,0 +1,39 @@ +// 补充验证:属性方法名 / Blocks.java 物品 / references Items.java / 客户端 jar +import fs from 'fs'; + +const MC = 'f:/DecIslandNeoforge-main/mc_sources'; +const out = {}; + +// 属性 builder 方法(宽匹配) +for (const [n, p] of Object.entries({ + Slime: 'monster/Slime.java', Phantom: 'monster/Phantom.java', Cod: 'animal/Cod.java', + Salmon: 'animal/Salmon.java', AbstractFish: 'animal/AbstractFish.java', AbstractSkeleton: 'monster/AbstractSkeleton.java', + Spider: 'monster/Spider.java', SnowGolem: 'animal/SnowGolem.java', Bat: 'ambient/Bat.java', +})) { + const t = fs.readFileSync(`${MC}/net/minecraft/world/entity/${p}`, 'utf8'); + out[n] = (t.match(/static AttributeSupplier\.Builder (\w+)\(/g) ?? []).map((s) => s.replace('static AttributeSupplier.Builder ', '')); +} + +// Items.java 两个文件对比 +for (const f of ['net/minecraft/world/item/Items.java', 'net/minecraft/references/Items.java']) { + const p = `${MC}/${f}`; + if (!fs.existsSync(p)) { out[f] = 'missing'; continue; } + const t = fs.readFileSync(p, 'utf8'); + const names = new Set(); + for (const m of t.matchAll(/register[A-Za-z]*\("([a-z0-9_.]+)"/g)) names.add(m[1]); + out[f] = { size: t.length, items: names.size, sample: [...names].slice(0, 5) }; +} + +// Blocks.java register 字符串 +const bt = fs.readFileSync(`${MC}/net/minecraft/world/level/block/Blocks.java`, 'utf8'); +const blocks = new Set(); +for (const m of bt.matchAll(/register[A-Za-z]*\("([a-z0-9_.]+)"/g)) blocks.add(m[1]); +out.blocksCount = blocks.size; +out.blocksSample = ['netherrack', 'snow', 'ice', 'tnt', 'sponge', 'lily_pad', 'nether_quartz_ore', 'poppy', 'end_stone', 'coal_ore', 'water', 'lava'].map((b) => [b, blocks.has(b)]); + +// 客户端 jar 探测 +const vDir = 'E:/.minecraft/versions/1.21.1-NeoForge_21.1.247'; +out.jars = fs.existsSync(vDir) ? fs.readdirSync(vDir).filter((f) => f.endsWith('.jar')).map((f) => `${f} ${Math.round(fs.statSync(`${vDir}/${f}`).size / 1e6)}MB`) : []; + +fs.writeFileSync('f:/DecIslandNeoforge-main/tools/entity_port/verify_mc2.json', JSON.stringify(out, null, 1)); +console.log(JSON.stringify(out, null, 1)); From e282ca545ab802f6e4bd7a716ecb6436c1b5b19d Mon Sep 17 00:00:00 2001 From: Aolkzyeoer Date: Sat, 3 Oct 2026 16:25:13 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=20Builder=20=E6=83=B0=E6=80=A7=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E7=B1=BB=E5=88=9D=E5=A7=8B=E5=8C=96=E6=9C=9F?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E6=9C=AA=E7=BB=91=E5=AE=9A=E7=9A=84=20NeoFor?= =?UTF-8?q?ge=20=E6=89=A9=E5=B1=95=E5=B1=9E=E6=80=A7(swim=5Fspeed)?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E5=90=AF=E5=8A=A8=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dec/decisland/entity/GeneratedMobs.kt | 325 +++++++++--------- tools/entity_port/generate.mjs | 9 +- 2 files changed, 168 insertions(+), 166 deletions(-) diff --git a/src/main/java/com/dec/decisland/entity/GeneratedMobs.kt b/src/main/java/com/dec/decisland/entity/GeneratedMobs.kt index 0a14a1f..695df2e 100644 --- a/src/main/java/com/dec/decisland/entity/GeneratedMobs.kt +++ b/src/main/java/com/dec/decisland/entity/GeneratedMobs.kt @@ -1106,167 +1106,167 @@ object GeneratedMobs { data class SpawnEntry(val type: Supplier>, val rule: String) @JvmStatic - val ATTRIBUTE_ENTRIES: List>, AttributeSupplier.Builder>> = listOf( - ABYSSAL_CONTROLLER to BedrockMob.createAttributes(CFG_ABYSSAL_CONTROLLER), - ABYSSAL_SHADOW to BedrockMob.createAttributes(CFG_ABYSSAL_SHADOW), - ANGRY_CHICKEN to net.minecraft.world.entity.animal.Chicken.createAttributes(), - ARCHER to net.minecraft.world.entity.monster.Pillager.createAttributes(), - ASH_BLAZE to net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - ASH_BOMB to BedrockMob.createAttributes(CFG_ASH_BOMB), - ASH_HORSE to BedrockMob.createAttributes(CFG_ASH_HORSE), - ASH_HORSE_HEAD to BedrockMob.createAttributes(CFG_ASH_HORSE_HEAD), - ASH_KNIGHT to BedrockMob.createAttributes(CFG_ASH_KNIGHT), - ASH_KNIGHT_HEAD to BedrockMob.createAttributes(CFG_ASH_KNIGHT_HEAD), - ASH_PUFFERFISH to net.minecraft.world.entity.animal.AbstractFish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 6.0), - ASH_SWORD to BedrockMob.createAttributes(CFG_ASH_SWORD), - ASH_SWORD_PHANTOM to BedrockMob.createAttributes(CFG_ASH_SWORD_PHANTOM), - BABY_ENDER_DRAGON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 300.0), - BAT_CHARGER to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0), - BLACKSTONE_THORN to BedrockMob.createAttributes(CFG_BLACKSTONE_THORN), - BLOOD_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), - BOMBER to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0), - BROWN_BEAR to net.minecraft.world.entity.animal.PolarBear.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0), - CARNAGER to net.minecraft.world.entity.monster.Vindicator.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 35.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), - CHEST_MONSTER to BedrockMob.createAttributes(CFG_CHEST_MONSTER), - CHESTER to BedrockMob.createAttributes(CFG_CHESTER), - CLAM to BedrockMob.createAttributes(CFG_CLAM), - CRAB to BedrockMob.createAttributes(CFG_CRAB), - CRIMSON_SLIME to net.minecraft.world.entity.monster.Monster.createMonsterAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0), - DARK_SNOW_MAN to net.minecraft.world.entity.animal.SnowGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0), - DARK_WEREWOLF to BedrockMob.createAttributes(CFG_DARK_WEREWOLF), - DOCTOR to net.minecraft.world.entity.npc.Villager.createAttributes(), - ELF_OF_ASH to net.minecraft.world.entity.monster.Vex.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - ELF_OF_CHAOS to net.minecraft.world.entity.animal.IronGolem.createAttributes(), - ELF_OF_DEEP to net.minecraft.world.entity.monster.Vex.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0), - ELF_OF_DUST to net.minecraft.world.entity.monster.Vex.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - ENCHANT_ARMOR to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0), - ENCHANT_ARMOR_BY_BOSS to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0), - ENCHANT_DIAMOND_ARMOR to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 60.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 8.0), - ENCHANT_ILLAGER to net.minecraft.world.entity.monster.Evoker.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 700.0), - ENCHANT_ILLAGER_1 to net.minecraft.world.entity.monster.Evoker.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 700.0), - ENCHANT_ILLAGER_2 to net.minecraft.world.entity.monster.Vindicator.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 400.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 1.0), - END_STONE_GOLEM to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 60.0), - ENDER_SNAIL to BedrockMob.createAttributes(CFG_ENDER_SNAIL), - ENDER_SNAKE to BedrockMob.createAttributes(CFG_ENDER_SNAKE), - ENDER_WITCH to net.minecraft.world.entity.monster.Witch.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0), - ENDER_WITCH_PUPPET to net.minecraft.world.entity.monster.Witch.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 2.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 4.0), - ENTITY_SOUL to BedrockMob.createAttributes(CFG_ENTITY_SOUL), - ENTITY_SOUL_1 to BedrockMob.createAttributes(CFG_ENTITY_SOUL_1), - ESCAPED_SOUL_ENTITY to BedrockMob.createAttributes(CFG_ESCAPED_SOUL_ENTITY), - EVERLASTING_WINTER_GHAST to BedrockMob.createAttributes(CFG_EVERLASTING_WINTER_GHAST), - EVERLASTING_WINTER_GHAST_1 to net.minecraft.world.entity.monster.Ghast.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 350.0), - EVERLASTING_WINTER_SHADOW to BedrockMob.createAttributes(CFG_EVERLASTING_WINTER_SHADOW), - EVIL_SNOW_MAN to net.minecraft.world.entity.animal.SnowGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0), - FIRE_STORM to net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - FRIENDLY_LITTLE_SOUL to BedrockMob.createAttributes(CFG_FRIENDLY_LITTLE_SOUL), - FRIENDLY_SPIDER to net.minecraft.world.entity.monster.Spider.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), - FROZEN_GHAST to net.minecraft.world.entity.monster.Ghast.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0), - FROZEN_HEART to BedrockMob.createAttributes(CFG_FROZEN_HEART), - FROZEN_HEART_SLEEPING to BedrockMob.createAttributes(CFG_FROZEN_HEART_SLEEPING), - FROZEN_MAN to net.minecraft.world.entity.animal.SnowGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0), - FROZEN_SHADOW to BedrockMob.createAttributes(CFG_FROZEN_SHADOW), - FROZEN_SPIDER to net.minecraft.world.entity.monster.Spider.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - GARGOYLE to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 23.0), - GHOST_DIAMOND_AXE to BedrockMob.createAttributes(CFG_GHOST_DIAMOND_AXE), - GHOST_DIAMOND_STAFF to BedrockMob.createAttributes(CFG_GHOST_DIAMOND_STAFF), - GHOST_DIAMOND_SWORD to BedrockMob.createAttributes(CFG_GHOST_DIAMOND_SWORD), - GHOST_IRON_AXE to BedrockMob.createAttributes(CFG_GHOST_IRON_AXE), - GHOST_IRON_SWORD to BedrockMob.createAttributes(CFG_GHOST_IRON_SWORD), - GHOST_WOODEN_STAFF to BedrockMob.createAttributes(CFG_GHOST_WOODEN_STAFF), - GHOST_WOODEN_SWORD to BedrockMob.createAttributes(CFG_GHOST_WOODEN_SWORD), - GINGERBREAD_MAN_BY_TOTEM to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 3.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 1.0), - GOBLIN to BedrockMob.createAttributes(CFG_GOBLIN), - GOBLIN_SNIPER to BedrockMob.createAttributes(CFG_GOBLIN_SNIPER), - GOBLIN_WIZARD to BedrockMob.createAttributes(CFG_GOBLIN_WIZARD), - HOST_OF_DEEP to BedrockMob.createAttributes(CFG_HOST_OF_DEEP), - ICE_BAT to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0), - ICE_BLAZE to net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 35.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - ICE_CREEPER to net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 7.0), - ICE_MONSTER to BedrockMob.createAttributes(CFG_ICE_MONSTER), - ICE_SPIRIT to BedrockMob.createAttributes(CFG_ICE_SPIRIT), - ICE_THORN to BedrockMob.createAttributes(CFG_ICE_THORN), - ICE_WIZARD to BedrockMob.createAttributes(CFG_ICE_WIZARD), - ICE_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 38.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - ILLUSION_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - ILLUSIONER to net.minecraft.world.entity.monster.Illusioner.createAttributes(), - ILLUSIONER_PUPPET to net.minecraft.world.entity.monster.Illusioner.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - JUNGLE_SPIDER to net.minecraft.world.entity.monster.Spider.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - KING_OF_PILLAGER to net.minecraft.world.entity.monster.Pillager.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 200.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - LAVA_LIZARD to BedrockMob.createAttributes(CFG_LAVA_LIZARD), - LIFE_INSECT to net.minecraft.world.entity.monster.Silverfish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 7.0), - LITTLE_BAT to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 5.0), - LITTLE_SOUL to BedrockMob.createAttributes(CFG_LITTLE_SOUL), - LURK_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 60.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), - LURK_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 70.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 5.0), - MUMMY to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 4.0), - MUMMY_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - MURLOC to net.minecraft.world.entity.monster.Guardian.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 11.0), - MURLOC_WIZARD to BedrockMob.createAttributes(CFG_MURLOC_WIZARD), - MUSHROOM_MONSTER to BedrockMob.createAttributes(CFG_MUSHROOM_MONSTER), - MUSHROOM_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - MYSTICAL_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - NAUTILUS to BedrockMob.createAttributes(CFG_NAUTILUS), - NETHER_CREEPER to net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 7.0), - NETHER_GOLEM to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0), - NETHER_PHANTOM to net.minecraft.world.entity.FlyingMob.createMobAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0).add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 25.0), - NETHER_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), - NETHER_SKELETON_WIZARD to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0), - OBSIDIAN_GOLEM to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 250.0), - PILLAGER_BY_BOSS to net.minecraft.world.entity.monster.Pillager.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - PIRATE to net.minecraft.world.entity.monster.Pillager.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 28.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - PLAYER_GHOST to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 4.0), - POLAR_WOLF to net.minecraft.world.entity.animal.Wolf.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0), - PREDATORS to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 300.0), - PUMPKIN_SLIME to net.minecraft.world.entity.monster.Monster.createMonsterAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0), - RADIATE_CREEPER to net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - RADIATE_ENDERMAN to net.minecraft.world.entity.monster.EnderMan.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 7.0), - RADIATE_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 35.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), - RADIATE_SPIDER to net.minecraft.world.entity.monster.Spider.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - REAL_SOUL to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 150.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 17.0), - RUMORER to net.minecraft.world.entity.animal.Cow.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0), - SARDINE to net.minecraft.world.entity.animal.AbstractFish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 6.0), - SAUCER to BedrockMob.createAttributes(CFG_SAUCER), - SEA_URCHIN to BedrockMob.createAttributes(CFG_SEA_URCHIN), - SHADOW_ARCHER to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 23.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - SHADOW_CREEPER to net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 12.0), - SHADOW_OF_DEEP to BedrockMob.createAttributes(CFG_SHADOW_OF_DEEP), - SHADOW_OF_SEA to net.minecraft.world.entity.FlyingMob.createMobAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0).add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 5.0), - SHADOW_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0), - SHADOW_SKELETON_PUPPET to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0), - SHADOW_SOUL_1 to BedrockMob.createAttributes(CFG_SHADOW_SOUL_1), - SHADOW_SOUL_2 to BedrockMob.createAttributes(CFG_SHADOW_SOUL_2), - SHADOW_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 55.0), - SHADOW_ZOMBIE_PUPPET to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 5.0), - SIMPLE_GLIDER to net.minecraft.world.entity.animal.Chicken.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0), - SKELETON_ASSASSIN to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 45.0), - SKELETON_KNIGHT to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - SKELETON_KNIGHT_COMMANDER to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 150.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - SKELETON_WARRIOR to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), - SKELETON_WIZARD to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0), - SOLDIER to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), - SON_OF_CHAOS to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0), - SON_OF_NATURE to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0), - SOUL to net.minecraft.world.entity.monster.Vex.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0), - SOUL_BLAZE to net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 8.0), - SOUL_INSECT to net.minecraft.world.entity.monster.Silverfish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 45.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 9.0), - SOUL_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0), - SOUL_SOLDIER to BedrockMob.createAttributes(CFG_SOUL_SOLDIER), - SOUL_ZOMBIE to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 5.0), - STAR to net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 55.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - STONE_GOLEM to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 70.0), - SWAMP_DROWNED to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - SWAMP_GOLEM to net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 110.0), - TNT_CREEPER to net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 35.0), - TNT_SNOW_MAN to net.minecraft.world.entity.animal.SnowGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0), - VAMPIRE_BAT to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 1.0), - VAMPIRE_BAT_BY_BOSS to net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 3.0), - VENGEFUL_GHOST to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0), - VINDICATOR_BY_BOSS to net.minecraft.world.entity.monster.Vindicator.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 4.0), - WARPED_SKELETON to net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0), - WATCHER to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0), - WEREWOLF to BedrockMob.createAttributes(CFG_WEREWOLF), - ZOMBIE_FISH to net.minecraft.world.entity.animal.AbstractFish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0), - ZOMBIE_SUMMONER to net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) + val ATTRIBUTE_ENTRIES: List>, Supplier>> = listOf( + ABYSSAL_CONTROLLER to Supplier { BedrockMob.createAttributes(CFG_ABYSSAL_CONTROLLER) }, + ABYSSAL_SHADOW to Supplier { BedrockMob.createAttributes(CFG_ABYSSAL_SHADOW) }, + ANGRY_CHICKEN to Supplier { net.minecraft.world.entity.animal.Chicken.createAttributes() }, + ARCHER to Supplier { net.minecraft.world.entity.monster.Pillager.createAttributes() }, + ASH_BLAZE to Supplier { net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + ASH_BOMB to Supplier { BedrockMob.createAttributes(CFG_ASH_BOMB) }, + ASH_HORSE to Supplier { BedrockMob.createAttributes(CFG_ASH_HORSE) }, + ASH_HORSE_HEAD to Supplier { BedrockMob.createAttributes(CFG_ASH_HORSE_HEAD) }, + ASH_KNIGHT to Supplier { BedrockMob.createAttributes(CFG_ASH_KNIGHT) }, + ASH_KNIGHT_HEAD to Supplier { BedrockMob.createAttributes(CFG_ASH_KNIGHT_HEAD) }, + ASH_PUFFERFISH to Supplier { net.minecraft.world.entity.animal.AbstractFish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 6.0) }, + ASH_SWORD to Supplier { BedrockMob.createAttributes(CFG_ASH_SWORD) }, + ASH_SWORD_PHANTOM to Supplier { BedrockMob.createAttributes(CFG_ASH_SWORD_PHANTOM) }, + BABY_ENDER_DRAGON to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 300.0) }, + BAT_CHARGER to Supplier { net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0) }, + BLACKSTONE_THORN to Supplier { BedrockMob.createAttributes(CFG_BLACKSTONE_THORN) }, + BLOOD_ZOMBIE to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0) }, + BOMBER to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0) }, + BROWN_BEAR to Supplier { net.minecraft.world.entity.animal.PolarBear.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0) }, + CARNAGER to Supplier { net.minecraft.world.entity.monster.Vindicator.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 35.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0) }, + CHEST_MONSTER to Supplier { BedrockMob.createAttributes(CFG_CHEST_MONSTER) }, + CHESTER to Supplier { BedrockMob.createAttributes(CFG_CHESTER) }, + CLAM to Supplier { BedrockMob.createAttributes(CFG_CLAM) }, + CRAB to Supplier { BedrockMob.createAttributes(CFG_CRAB) }, + CRIMSON_SLIME to Supplier { net.minecraft.world.entity.monster.Monster.createMonsterAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0) }, + DARK_SNOW_MAN to Supplier { net.minecraft.world.entity.animal.SnowGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0) }, + DARK_WEREWOLF to Supplier { BedrockMob.createAttributes(CFG_DARK_WEREWOLF) }, + DOCTOR to Supplier { net.minecraft.world.entity.npc.Villager.createAttributes() }, + ELF_OF_ASH to Supplier { net.minecraft.world.entity.monster.Vex.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + ELF_OF_CHAOS to Supplier { net.minecraft.world.entity.animal.IronGolem.createAttributes() }, + ELF_OF_DEEP to Supplier { net.minecraft.world.entity.monster.Vex.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0) }, + ELF_OF_DUST to Supplier { net.minecraft.world.entity.monster.Vex.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + ENCHANT_ARMOR to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0) }, + ENCHANT_ARMOR_BY_BOSS to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0) }, + ENCHANT_DIAMOND_ARMOR to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 60.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 8.0) }, + ENCHANT_ILLAGER to Supplier { net.minecraft.world.entity.monster.Evoker.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 700.0) }, + ENCHANT_ILLAGER_1 to Supplier { net.minecraft.world.entity.monster.Evoker.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 700.0) }, + ENCHANT_ILLAGER_2 to Supplier { net.minecraft.world.entity.monster.Vindicator.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 400.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 1.0) }, + END_STONE_GOLEM to Supplier { net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 60.0) }, + ENDER_SNAIL to Supplier { BedrockMob.createAttributes(CFG_ENDER_SNAIL) }, + ENDER_SNAKE to Supplier { BedrockMob.createAttributes(CFG_ENDER_SNAKE) }, + ENDER_WITCH to Supplier { net.minecraft.world.entity.monster.Witch.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0) }, + ENDER_WITCH_PUPPET to Supplier { net.minecraft.world.entity.monster.Witch.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 2.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 4.0) }, + ENTITY_SOUL to Supplier { BedrockMob.createAttributes(CFG_ENTITY_SOUL) }, + ENTITY_SOUL_1 to Supplier { BedrockMob.createAttributes(CFG_ENTITY_SOUL_1) }, + ESCAPED_SOUL_ENTITY to Supplier { BedrockMob.createAttributes(CFG_ESCAPED_SOUL_ENTITY) }, + EVERLASTING_WINTER_GHAST to Supplier { BedrockMob.createAttributes(CFG_EVERLASTING_WINTER_GHAST) }, + EVERLASTING_WINTER_GHAST_1 to Supplier { net.minecraft.world.entity.monster.Ghast.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 350.0) }, + EVERLASTING_WINTER_SHADOW to Supplier { BedrockMob.createAttributes(CFG_EVERLASTING_WINTER_SHADOW) }, + EVIL_SNOW_MAN to Supplier { net.minecraft.world.entity.animal.SnowGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0) }, + FIRE_STORM to Supplier { net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + FRIENDLY_LITTLE_SOUL to Supplier { BedrockMob.createAttributes(CFG_FRIENDLY_LITTLE_SOUL) }, + FRIENDLY_SPIDER to Supplier { net.minecraft.world.entity.monster.Spider.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0) }, + FROZEN_GHAST to Supplier { net.minecraft.world.entity.monster.Ghast.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0) }, + FROZEN_HEART to Supplier { BedrockMob.createAttributes(CFG_FROZEN_HEART) }, + FROZEN_HEART_SLEEPING to Supplier { BedrockMob.createAttributes(CFG_FROZEN_HEART_SLEEPING) }, + FROZEN_MAN to Supplier { net.minecraft.world.entity.animal.SnowGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0) }, + FROZEN_SHADOW to Supplier { BedrockMob.createAttributes(CFG_FROZEN_SHADOW) }, + FROZEN_SPIDER to Supplier { net.minecraft.world.entity.monster.Spider.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + GARGOYLE to Supplier { net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 23.0) }, + GHOST_DIAMOND_AXE to Supplier { BedrockMob.createAttributes(CFG_GHOST_DIAMOND_AXE) }, + GHOST_DIAMOND_STAFF to Supplier { BedrockMob.createAttributes(CFG_GHOST_DIAMOND_STAFF) }, + GHOST_DIAMOND_SWORD to Supplier { BedrockMob.createAttributes(CFG_GHOST_DIAMOND_SWORD) }, + GHOST_IRON_AXE to Supplier { BedrockMob.createAttributes(CFG_GHOST_IRON_AXE) }, + GHOST_IRON_SWORD to Supplier { BedrockMob.createAttributes(CFG_GHOST_IRON_SWORD) }, + GHOST_WOODEN_STAFF to Supplier { BedrockMob.createAttributes(CFG_GHOST_WOODEN_STAFF) }, + GHOST_WOODEN_SWORD to Supplier { BedrockMob.createAttributes(CFG_GHOST_WOODEN_SWORD) }, + GINGERBREAD_MAN_BY_TOTEM to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 3.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 1.0) }, + GOBLIN to Supplier { BedrockMob.createAttributes(CFG_GOBLIN) }, + GOBLIN_SNIPER to Supplier { BedrockMob.createAttributes(CFG_GOBLIN_SNIPER) }, + GOBLIN_WIZARD to Supplier { BedrockMob.createAttributes(CFG_GOBLIN_WIZARD) }, + HOST_OF_DEEP to Supplier { BedrockMob.createAttributes(CFG_HOST_OF_DEEP) }, + ICE_BAT to Supplier { net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0) }, + ICE_BLAZE to Supplier { net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 35.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + ICE_CREEPER to Supplier { net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 7.0) }, + ICE_MONSTER to Supplier { BedrockMob.createAttributes(CFG_ICE_MONSTER) }, + ICE_SPIRIT to Supplier { BedrockMob.createAttributes(CFG_ICE_SPIRIT) }, + ICE_THORN to Supplier { BedrockMob.createAttributes(CFG_ICE_THORN) }, + ICE_WIZARD to Supplier { BedrockMob.createAttributes(CFG_ICE_WIZARD) }, + ICE_ZOMBIE to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 38.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + ILLUSION_ZOMBIE to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + ILLUSIONER to Supplier { net.minecraft.world.entity.monster.Illusioner.createAttributes() }, + ILLUSIONER_PUPPET to Supplier { net.minecraft.world.entity.monster.Illusioner.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + JUNGLE_SPIDER to Supplier { net.minecraft.world.entity.monster.Spider.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + KING_OF_PILLAGER to Supplier { net.minecraft.world.entity.monster.Pillager.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 200.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + LAVA_LIZARD to Supplier { BedrockMob.createAttributes(CFG_LAVA_LIZARD) }, + LIFE_INSECT to Supplier { net.minecraft.world.entity.monster.Silverfish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 7.0) }, + LITTLE_BAT to Supplier { net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 5.0) }, + LITTLE_SOUL to Supplier { BedrockMob.createAttributes(CFG_LITTLE_SOUL) }, + LURK_SKELETON to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 60.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0) }, + LURK_ZOMBIE to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 70.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 5.0) }, + MUMMY to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 4.0) }, + MUMMY_SKELETON to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + MURLOC to Supplier { net.minecraft.world.entity.monster.Guardian.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 11.0) }, + MURLOC_WIZARD to Supplier { BedrockMob.createAttributes(CFG_MURLOC_WIZARD) }, + MUSHROOM_MONSTER to Supplier { BedrockMob.createAttributes(CFG_MUSHROOM_MONSTER) }, + MUSHROOM_ZOMBIE to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + MYSTICAL_SKELETON to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + NAUTILUS to Supplier { BedrockMob.createAttributes(CFG_NAUTILUS) }, + NETHER_CREEPER to Supplier { net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 7.0) }, + NETHER_GOLEM to Supplier { net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0) }, + NETHER_PHANTOM to Supplier { net.minecraft.world.entity.FlyingMob.createMobAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0).add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 25.0) }, + NETHER_SKELETON to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0) }, + NETHER_SKELETON_WIZARD to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0) }, + OBSIDIAN_GOLEM to Supplier { net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 250.0) }, + PILLAGER_BY_BOSS to Supplier { net.minecraft.world.entity.monster.Pillager.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + PIRATE to Supplier { net.minecraft.world.entity.monster.Pillager.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 28.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + PLAYER_GHOST to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 4.0) }, + POLAR_WOLF to Supplier { net.minecraft.world.entity.animal.Wolf.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0) }, + PREDATORS to Supplier { net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 300.0) }, + PUMPKIN_SLIME to Supplier { net.minecraft.world.entity.monster.Monster.createMonsterAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0) }, + RADIATE_CREEPER to Supplier { net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + RADIATE_ENDERMAN to Supplier { net.minecraft.world.entity.monster.EnderMan.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 50.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 7.0) }, + RADIATE_SKELETON to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 35.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0) }, + RADIATE_SPIDER to Supplier { net.minecraft.world.entity.monster.Spider.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + REAL_SOUL to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 150.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 17.0) }, + RUMORER to Supplier { net.minecraft.world.entity.animal.Cow.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0) }, + SARDINE to Supplier { net.minecraft.world.entity.animal.AbstractFish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 6.0) }, + SAUCER to Supplier { BedrockMob.createAttributes(CFG_SAUCER) }, + SEA_URCHIN to Supplier { BedrockMob.createAttributes(CFG_SEA_URCHIN) }, + SHADOW_ARCHER to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 23.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + SHADOW_CREEPER to Supplier { net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 12.0) }, + SHADOW_OF_DEEP to Supplier { BedrockMob.createAttributes(CFG_SHADOW_OF_DEEP) }, + SHADOW_OF_SEA to Supplier { net.minecraft.world.entity.FlyingMob.createMobAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0).add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 5.0) }, + SHADOW_SKELETON to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0) }, + SHADOW_SKELETON_PUPPET to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 10.0) }, + SHADOW_SOUL_1 to Supplier { BedrockMob.createAttributes(CFG_SHADOW_SOUL_1) }, + SHADOW_SOUL_2 to Supplier { BedrockMob.createAttributes(CFG_SHADOW_SOUL_2) }, + SHADOW_ZOMBIE to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 55.0) }, + SHADOW_ZOMBIE_PUPPET to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 5.0) }, + SIMPLE_GLIDER to Supplier { net.minecraft.world.entity.animal.Chicken.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0) }, + SKELETON_ASSASSIN to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 45.0) }, + SKELETON_KNIGHT to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + SKELETON_KNIGHT_COMMANDER to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 150.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + SKELETON_WARRIOR to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0) }, + SKELETON_WIZARD to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0) }, + SOLDIER to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0) }, + SON_OF_CHAOS to Supplier { net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 40.0) }, + SON_OF_NATURE to Supplier { net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0) }, + SOUL to Supplier { net.minecraft.world.entity.monster.Vex.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0) }, + SOUL_BLAZE to Supplier { net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 8.0) }, + SOUL_INSECT to Supplier { net.minecraft.world.entity.monster.Silverfish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 45.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 9.0) }, + SOUL_SKELETON to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0) }, + SOUL_SOLDIER to Supplier { BedrockMob.createAttributes(CFG_SOUL_SOLDIER) }, + SOUL_ZOMBIE to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 5.0) }, + STAR to Supplier { net.minecraft.world.entity.monster.Blaze.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 55.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + STONE_GOLEM to Supplier { net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 70.0) }, + SWAMP_DROWNED to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + SWAMP_GOLEM to Supplier { net.minecraft.world.entity.animal.IronGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 110.0) }, + TNT_CREEPER to Supplier { net.minecraft.world.entity.monster.Creeper.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 35.0) }, + TNT_SNOW_MAN to Supplier { net.minecraft.world.entity.animal.SnowGolem.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 15.0) }, + VAMPIRE_BAT to Supplier { net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 1.0) }, + VAMPIRE_BAT_BY_BOSS to Supplier { net.minecraft.world.entity.ambient.Bat.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 3.0) }, + VENGEFUL_GHOST to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0) }, + VINDICATOR_BY_BOSS to Supplier { net.minecraft.world.entity.monster.Vindicator.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 4.0) }, + WARPED_SKELETON to Supplier { net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 2.0) }, + WATCHER to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) }, + WEREWOLF to Supplier { BedrockMob.createAttributes(CFG_WEREWOLF) }, + ZOMBIE_FISH to Supplier { net.minecraft.world.entity.animal.AbstractFish.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 20.0) }, + ZOMBIE_SUMMONER to Supplier { net.minecraft.world.entity.monster.Zombie.createAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, 30.0).add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 3.0) } ) @JvmStatic @@ -1330,7 +1330,8 @@ object GeneratedMobs { @JvmStatic fun registerAttributes(event: EntityAttributeCreationEvent) { for ((type, builder) in ATTRIBUTE_ENTRIES) { - event.put(@Suppress("UNCHECKED_CAST") (type.get() as EntityType), builder.build()) + // Builder 必须在事件回调期构建: 时 NeoForge 扩展属性(swim_speed 等)尚未绑定会 NPE + event.put(@Suppress("UNCHECKED_CAST") (type.get() as EntityType), builder.get().build()) } } diff --git a/tools/entity_port/generate.mjs b/tools/entity_port/generate.mjs index 6db8059..50e67d9 100644 --- a/tools/entity_port/generate.mjs +++ b/tools/entity_port/generate.mjs @@ -945,7 +945,7 @@ for (const r of results) { const defHp = VANILLA_HP[r.impl.cls] ?? 20; if (Math.abs(r.bh.health - defHp) > 0.01) ov += `.add(${ATTRS}.MAX_HEALTH, ${Math.max(1, r.bh.health).toFixed(1)})`; if (r.impl.pkg === 'monster' && r.bh.melee) ov += `.add(${ATTRS}.ATTACK_DAMAGE, ${Math.max(0.5, r.bh.attack).toFixed(1)})`; - attrEntries.push(` ${upper(r.name)} to ${fqAttr(r)}${ov}`); + attrEntries.push(` ${upper(r.name)} to Supplier { ${fqAttr(r)}${ov} }`); } else { // custom BedrockMob const c = r.bh; @@ -981,7 +981,7 @@ for (const r of results) { sized(${w.toFixed(2)}f, ${h.toFixed(2)}f) } `; - attrEntries.push(` ${upper(r.name)} to BedrockMob.createAttributes(CFG_${upper(r.name)})`); + attrEntries.push(` ${upper(r.name)} to Supplier { BedrockMob.createAttributes(CFG_${upper(r.name)}) }`); } if (r.spawn) { const rule = r.bh.water || r.spawn.water ? 'WATER' : (cat === 'MONSTER' ? 'MONSTER' : 'MOB'); @@ -1024,7 +1024,7 @@ g += ` data class SpawnEntry(val type: Supplier>, val rule: String) @JvmStatic - val ATTRIBUTE_ENTRIES: List>, AttributeSupplier.Builder>> = listOf( + val ATTRIBUTE_ENTRIES: List>, Supplier>> = listOf( ${attrEntries.join(',\n')} ) @@ -1041,7 +1041,8 @@ ${spawnEntries.join(',\n')} @JvmStatic fun registerAttributes(event: EntityAttributeCreationEvent) { for ((type, builder) in ATTRIBUTE_ENTRIES) { - event.put(@Suppress("UNCHECKED_CAST") (type.get() as EntityType), builder.build()) + // Builder 必须在事件回调期构建: 时 NeoForge 扩展属性(swim_speed 等)尚未绑定会 NPE + event.put(@Suppress("UNCHECKED_CAST") (type.get() as EntityType), builder.get().build()) } } From 65e48f6b40a1600cbfec91cf8fa9dfe9aa1c9efb Mon Sep 17 00:00:00 2001 From: Aolkzyeoer Date: Sat, 3 Oct 2026 16:52:24 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=8A=A8?= =?UTF-8?q?=E7=94=BB=E8=A7=A3=E6=9E=90=E5=AE=B9=E5=BF=8DMolang=E8=A1=A8?= =?UTF-8?q?=E8=BE=BE=E5=BC=8F(=E5=8D=A1=E5=8A=A0=E8=BD=BD=E7=95=8C?= =?UTF-8?q?=E9=9D=A2)=20+=20=E5=8E=9F=E7=89=88=E6=B8=B2=E6=9F=93=E5=99=A8?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E6=98=BE=E5=BC=8F=E7=B1=BB=E5=9E=8B=E5=8F=82?= =?UTF-8?q?=E6=95=B0(=E7=BC=96=E8=AF=91=E4=BF=AE=E5=A4=8D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bedrock/model/BedrockEntityAssets.kt | 17 +- .../client/renderer/GeneratedMobClient.kt | 214 +++++++++--------- tools/entity_port/generate.mjs | 2 +- 3 files changed, 122 insertions(+), 111 deletions(-) diff --git a/src/main/java/com/dec/decisland/client/bedrock/model/BedrockEntityAssets.kt b/src/main/java/com/dec/decisland/client/bedrock/model/BedrockEntityAssets.kt index 5aa0188..c168c5d 100644 --- a/src/main/java/com/dec/decisland/client/bedrock/model/BedrockEntityAssets.kt +++ b/src/main/java/com/dec/decisland/client/bedrock/model/BedrockEntityAssets.kt @@ -4,6 +4,7 @@ import com.google.gson.JsonArray import com.google.gson.JsonElement import com.google.gson.JsonObject import com.google.gson.JsonParser +import com.google.gson.JsonPrimitive import net.minecraft.client.Minecraft import net.minecraft.resources.ResourceLocation import java.io.InputStream @@ -194,13 +195,23 @@ object BedrockEntityAssets { return null } + // 基岩动画可能含 Molang 表达式(如 "query.target_x_rotation"),无法静态求值 → 跳过该关键帧 return BedrockVec3( - array[0].asFloat, - array[1].asFloat, - array[2].asFloat, + array[0].asFloatOrNull() ?: return null, + array[1].asFloatOrNull() ?: return null, + array[2].asFloatOrNull() ?: return null, ) } + private fun JsonElement.asFloatOrNull(): Float? { + val primitive = this as? JsonPrimitive ?: return null + return when { + primitive.isNumber -> primitive.asFloat + primitive.isString -> primitive.asString.toFloatOrNull() + else -> null + } + } + private fun parseJson(resourceId: ResourceLocation): JsonObject { openResource(resourceId).use { stream -> if (stream == null) { diff --git a/src/main/java/com/dec/decisland/client/renderer/GeneratedMobClient.kt b/src/main/java/com/dec/decisland/client/renderer/GeneratedMobClient.kt index f2c98aa..477331b 100644 --- a/src/main/java/com/dec/decisland/client/renderer/GeneratedMobClient.kt +++ b/src/main/java/com/dec/decisland/client/renderer/GeneratedMobClient.kt @@ -705,113 +705,113 @@ class ZombieSummonerGeneratedRenderer(context: EntityRendererProvider.Context) : object GeneratedMobClient { @JvmStatic fun registerAll() { - EntityRenderers.register(GeneratedMobs.ANGRY_CHICKEN.get(), ::AngryChickenGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ARCHER.get(), ::ArcherGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ASH_BLAZE.get(), ::AshBlazeGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ASH_PUFFERFISH.get(), ::AshPufferfishGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.BABY_ENDER_DRAGON.get(), ::BabyEnderDragonGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.BAT_CHARGER.get(), ::BatChargerGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.BLOOD_ZOMBIE.get(), ::BloodZombieGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.BOMBER.get(), ::BomberGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.BROWN_BEAR.get(), ::BrownBearGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.CARNAGER.get(), ::CarnagerGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.CRIMSON_SLIME.get(), ::CrimsonSlimeGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.DARK_SNOW_MAN.get(), ::DarkSnowManGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.DOCTOR.get(), ::DoctorGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ELF_OF_ASH.get(), ::ElfOfAshGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ELF_OF_CHAOS.get(), ::ElfOfChaosGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ELF_OF_DEEP.get(), ::ElfOfDeepGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ELF_OF_DUST.get(), ::ElfOfDustGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ENCHANT_ARMOR.get(), ::EnchantArmorGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ENCHANT_ARMOR_BY_BOSS.get(), ::EnchantArmorByBossGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ENCHANT_DIAMOND_ARMOR.get(), ::EnchantDiamondArmorGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ENCHANT_ILLAGER.get(), ::EnchantIllagerGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ENCHANT_ILLAGER_1.get(), ::EnchantIllager1GeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ENCHANT_ILLAGER_2.get(), ::EnchantIllager2GeneratedRenderer) - EntityRenderers.register(GeneratedMobs.END_STONE_GOLEM.get(), ::EndStoneGolemGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ENDER_WITCH.get(), ::EnderWitchGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ENDER_WITCH_PUPPET.get(), ::EnderWitchPuppetGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.EVERLASTING_WINTER_GHAST_1.get(), ::EverlastingWinterGhast1GeneratedRenderer) - EntityRenderers.register(GeneratedMobs.EVIL_SNOW_MAN.get(), ::EvilSnowManGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.FIRE_STORM.get(), ::FireStormGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.FRIENDLY_SPIDER.get(), ::FriendlySpiderGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.FROZEN_GHAST.get(), ::FrozenGhastGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.FROZEN_MAN.get(), ::FrozenManGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.FROZEN_SPIDER.get(), ::FrozenSpiderGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.GARGOYLE.get(), ::GargoyleGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.GINGERBREAD_MAN_BY_TOTEM.get(), ::GingerbreadManByTotemGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ICE_BAT.get(), ::IceBatGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ICE_BLAZE.get(), ::IceBlazeGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ICE_CREEPER.get(), ::IceCreeperGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ICE_ZOMBIE.get(), ::IceZombieGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ILLUSION_ZOMBIE.get(), ::IllusionZombieGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ILLUSIONER.get(), ::IllusionerGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ILLUSIONER_PUPPET.get(), ::IllusionerPuppetGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.JUNGLE_SPIDER.get(), ::JungleSpiderGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.KING_OF_PILLAGER.get(), ::KingOfPillagerGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.LIFE_INSECT.get(), ::LifeInsectGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.LITTLE_BAT.get(), ::LittleBatGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.LURK_SKELETON.get(), ::LurkSkeletonGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.LURK_ZOMBIE.get(), ::LurkZombieGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.MUMMY.get(), ::MummyGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.MUMMY_SKELETON.get(), ::MummySkeletonGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.MURLOC.get(), ::MurlocGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.MUSHROOM_ZOMBIE.get(), ::MushroomZombieGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.MYSTICAL_SKELETON.get(), ::MysticalSkeletonGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.NETHER_CREEPER.get(), ::NetherCreeperGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.NETHER_GOLEM.get(), ::NetherGolemGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.NETHER_PHANTOM.get(), ::NetherPhantomGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.NETHER_SKELETON.get(), ::NetherSkeletonGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.NETHER_SKELETON_WIZARD.get(), ::NetherSkeletonWizardGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.OBSIDIAN_GOLEM.get(), ::ObsidianGolemGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.PILLAGER_BY_BOSS.get(), ::PillagerByBossGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.PIRATE.get(), ::PirateGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.PLAYER_GHOST.get(), ::PlayerGhostGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.POLAR_WOLF.get(), ::PolarWolfGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.PREDATORS.get(), ::PredatorsGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.PUMPKIN_SLIME.get(), ::PumpkinSlimeGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.RADIATE_CREEPER.get(), ::RadiateCreeperGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.RADIATE_ENDERMAN.get(), ::RadiateEndermanGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.RADIATE_SKELETON.get(), ::RadiateSkeletonGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.RADIATE_SPIDER.get(), ::RadiateSpiderGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.REAL_SOUL.get(), ::RealSoulGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.RUMORER.get(), ::RumorerGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SARDINE.get(), ::SardineGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SHADOW_ARCHER.get(), ::ShadowArcherGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SHADOW_CREEPER.get(), ::ShadowCreeperGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SHADOW_OF_SEA.get(), ::ShadowOfSeaGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SHADOW_SKELETON.get(), ::ShadowSkeletonGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SHADOW_SKELETON_PUPPET.get(), ::ShadowSkeletonPuppetGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SHADOW_ZOMBIE.get(), ::ShadowZombieGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SHADOW_ZOMBIE_PUPPET.get(), ::ShadowZombiePuppetGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SIMPLE_GLIDER.get(), ::SimpleGliderGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SKELETON_ASSASSIN.get(), ::SkeletonAssassinGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SKELETON_KNIGHT.get(), ::SkeletonKnightGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SKELETON_KNIGHT_COMMANDER.get(), ::SkeletonKnightCommanderGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SKELETON_WARRIOR.get(), ::SkeletonWarriorGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SKELETON_WIZARD.get(), ::SkeletonWizardGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SOLDIER.get(), ::SoldierGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SON_OF_CHAOS.get(), ::SonOfChaosGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SON_OF_NATURE.get(), ::SonOfNatureGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SOUL.get(), ::SoulGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SOUL_BLAZE.get(), ::SoulBlazeGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SOUL_INSECT.get(), ::SoulInsectGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SOUL_SKELETON.get(), ::SoulSkeletonGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SOUL_ZOMBIE.get(), ::SoulZombieGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.STAR.get(), ::StarGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.STONE_GOLEM.get(), ::StoneGolemGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SWAMP_DROWNED.get(), ::SwampDrownedGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.SWAMP_GOLEM.get(), ::SwampGolemGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.TNT_CREEPER.get(), ::TntCreeperGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.TNT_SNOW_MAN.get(), ::TntSnowManGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.VAMPIRE_BAT.get(), ::VampireBatGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.VAMPIRE_BAT_BY_BOSS.get(), ::VampireBatByBossGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.VENGEFUL_GHOST.get(), ::VengefulGhostGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.VINDICATOR_BY_BOSS.get(), ::VindicatorByBossGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.WARPED_SKELETON.get(), ::WarpedSkeletonGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.WATCHER.get(), ::WatcherGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ZOMBIE_FISH.get(), ::ZombieFishGeneratedRenderer) - EntityRenderers.register(GeneratedMobs.ZOMBIE_SUMMONER.get(), ::ZombieSummonerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ANGRY_CHICKEN.get(), ::AngryChickenGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ARCHER.get(), ::ArcherGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ASH_BLAZE.get(), ::AshBlazeGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ASH_PUFFERFISH.get(), ::AshPufferfishGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.BABY_ENDER_DRAGON.get(), ::BabyEnderDragonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.BAT_CHARGER.get(), ::BatChargerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.BLOOD_ZOMBIE.get(), ::BloodZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.BOMBER.get(), ::BomberGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.BROWN_BEAR.get(), ::BrownBearGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.CARNAGER.get(), ::CarnagerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.CRIMSON_SLIME.get(), ::CrimsonSlimeGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.DARK_SNOW_MAN.get(), ::DarkSnowManGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.DOCTOR.get(), ::DoctorGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ELF_OF_ASH.get(), ::ElfOfAshGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ELF_OF_CHAOS.get(), ::ElfOfChaosGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ELF_OF_DEEP.get(), ::ElfOfDeepGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ELF_OF_DUST.get(), ::ElfOfDustGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENCHANT_ARMOR.get(), ::EnchantArmorGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENCHANT_ARMOR_BY_BOSS.get(), ::EnchantArmorByBossGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENCHANT_DIAMOND_ARMOR.get(), ::EnchantDiamondArmorGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENCHANT_ILLAGER.get(), ::EnchantIllagerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENCHANT_ILLAGER_1.get(), ::EnchantIllager1GeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENCHANT_ILLAGER_2.get(), ::EnchantIllager2GeneratedRenderer) + EntityRenderers.register(GeneratedMobs.END_STONE_GOLEM.get(), ::EndStoneGolemGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENDER_WITCH.get(), ::EnderWitchGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ENDER_WITCH_PUPPET.get(), ::EnderWitchPuppetGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.EVERLASTING_WINTER_GHAST_1.get(), ::EverlastingWinterGhast1GeneratedRenderer) + EntityRenderers.register(GeneratedMobs.EVIL_SNOW_MAN.get(), ::EvilSnowManGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.FIRE_STORM.get(), ::FireStormGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.FRIENDLY_SPIDER.get(), ::FriendlySpiderGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.FROZEN_GHAST.get(), ::FrozenGhastGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.FROZEN_MAN.get(), ::FrozenManGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.FROZEN_SPIDER.get(), ::FrozenSpiderGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.GARGOYLE.get(), ::GargoyleGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.GINGERBREAD_MAN_BY_TOTEM.get(), ::GingerbreadManByTotemGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ICE_BAT.get(), ::IceBatGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ICE_BLAZE.get(), ::IceBlazeGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ICE_CREEPER.get(), ::IceCreeperGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ICE_ZOMBIE.get(), ::IceZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ILLUSION_ZOMBIE.get(), ::IllusionZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ILLUSIONER.get(), ::IllusionerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ILLUSIONER_PUPPET.get(), ::IllusionerPuppetGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.JUNGLE_SPIDER.get(), ::JungleSpiderGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.KING_OF_PILLAGER.get(), ::KingOfPillagerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.LIFE_INSECT.get(), ::LifeInsectGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.LITTLE_BAT.get(), ::LittleBatGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.LURK_SKELETON.get(), ::LurkSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.LURK_ZOMBIE.get(), ::LurkZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.MUMMY.get(), ::MummyGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.MUMMY_SKELETON.get(), ::MummySkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.MURLOC.get(), ::MurlocGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.MUSHROOM_ZOMBIE.get(), ::MushroomZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.MYSTICAL_SKELETON.get(), ::MysticalSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.NETHER_CREEPER.get(), ::NetherCreeperGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.NETHER_GOLEM.get(), ::NetherGolemGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.NETHER_PHANTOM.get(), ::NetherPhantomGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.NETHER_SKELETON.get(), ::NetherSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.NETHER_SKELETON_WIZARD.get(), ::NetherSkeletonWizardGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.OBSIDIAN_GOLEM.get(), ::ObsidianGolemGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.PILLAGER_BY_BOSS.get(), ::PillagerByBossGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.PIRATE.get(), ::PirateGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.PLAYER_GHOST.get(), ::PlayerGhostGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.POLAR_WOLF.get(), ::PolarWolfGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.PREDATORS.get(), ::PredatorsGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.PUMPKIN_SLIME.get(), ::PumpkinSlimeGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.RADIATE_CREEPER.get(), ::RadiateCreeperGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.RADIATE_ENDERMAN.get(), ::RadiateEndermanGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.RADIATE_SKELETON.get(), ::RadiateSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.RADIATE_SPIDER.get(), ::RadiateSpiderGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.REAL_SOUL.get(), ::RealSoulGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.RUMORER.get(), ::RumorerGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SARDINE.get(), ::SardineGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_ARCHER.get(), ::ShadowArcherGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_CREEPER.get(), ::ShadowCreeperGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_OF_SEA.get(), ::ShadowOfSeaGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_SKELETON.get(), ::ShadowSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_SKELETON_PUPPET.get(), ::ShadowSkeletonPuppetGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_ZOMBIE.get(), ::ShadowZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SHADOW_ZOMBIE_PUPPET.get(), ::ShadowZombiePuppetGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SIMPLE_GLIDER.get(), ::SimpleGliderGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SKELETON_ASSASSIN.get(), ::SkeletonAssassinGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SKELETON_KNIGHT.get(), ::SkeletonKnightGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SKELETON_KNIGHT_COMMANDER.get(), ::SkeletonKnightCommanderGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SKELETON_WARRIOR.get(), ::SkeletonWarriorGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SKELETON_WIZARD.get(), ::SkeletonWizardGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SOLDIER.get(), ::SoldierGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SON_OF_CHAOS.get(), ::SonOfChaosGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SON_OF_NATURE.get(), ::SonOfNatureGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SOUL.get(), ::SoulGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SOUL_BLAZE.get(), ::SoulBlazeGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SOUL_INSECT.get(), ::SoulInsectGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SOUL_SKELETON.get(), ::SoulSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SOUL_ZOMBIE.get(), ::SoulZombieGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.STAR.get(), ::StarGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.STONE_GOLEM.get(), ::StoneGolemGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SWAMP_DROWNED.get(), ::SwampDrownedGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.SWAMP_GOLEM.get(), ::SwampGolemGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.TNT_CREEPER.get(), ::TntCreeperGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.TNT_SNOW_MAN.get(), ::TntSnowManGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.VAMPIRE_BAT.get(), ::VampireBatGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.VAMPIRE_BAT_BY_BOSS.get(), ::VampireBatByBossGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.VENGEFUL_GHOST.get(), ::VengefulGhostGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.VINDICATOR_BY_BOSS.get(), ::VindicatorByBossGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.WARPED_SKELETON.get(), ::WarpedSkeletonGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.WATCHER.get(), ::WatcherGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ZOMBIE_FISH.get(), ::ZombieFishGeneratedRenderer) + EntityRenderers.register(GeneratedMobs.ZOMBIE_SUMMONER.get(), ::ZombieSummonerGeneratedRenderer) EntityRenderers.register(GeneratedMobs.ABYSSAL_CONTROLLER.get()) { context -> BedrockMobRenderer(context, geo("abyssal_controller"), anim("abyssal_controller"), "idle", "walk", tex("abyssal_controller"), 1f) } diff --git a/tools/entity_port/generate.mjs b/tools/entity_port/generate.mjs index 50e67d9..9583300 100644 --- a/tools/entity_port/generate.mjs +++ b/tools/entity_port/generate.mjs @@ -1105,7 +1105,7 @@ rc += `object GeneratedMobClient { fun registerAll() { `; for (const c of vanillaRens) { - rc += ` EntityRenderers.register(GeneratedMobs.${upper(c.name)}.get(), ::${renClassNames[c.name]})\n`; + rc += ` EntityRenderers.register<${c.renGeneric ?? c.sup}>(GeneratedMobs.${upper(c.name)}.get(), ::${renClassNames[c.name]})\n`; } for (const c of customRens) { rc += ` EntityRenderers.register(GeneratedMobs.${upper(c.name)}.get()) { context -> From 0d1e7d3a6fbae78fe4f068d11e2f487419b8bcb3 Mon Sep 17 00:00:00 2001 From: Aolkzyeoer Date: Sat, 3 Oct 2026 17:42:54 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=85=A8=E9=83=A8160?= =?UTF-8?q?=E4=B8=AA=E7=94=9F=E6=88=90=E7=94=9F=E7=89=A9=E7=9A=84=E5=88=B7?= =?UTF-8?q?=E6=80=AA=E8=9B=8B=20+=20DecIsland=E7=94=9F=E7=89=A9=E5=88=9B?= =?UTF-8?q?=E9=80=A0=E6=A0=87=E7=AD=BE=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DeferredSpawnEggItem 注册 160 个 _spawn_egg,蛋颜色取实体贴图平均色(无贴图用名字哈希稳定色) - 新创造标签页 decisland_entities_tab(DecIsland 生物,图标哥布林法师蛋) - 语言 key 自动导入基岩版现成翻译(生成 深海牢笼 / Spawn Goblin Wizard),缺失时实体名加前缀兜底 - 160 个 item/template_spawn_egg 物品模型 json --- .../assets/decisland/lang/en_us.json | 159 +++ .../assets/decisland/lang/zh_cn.json | 158 +++ .../datagen/Lang/BedrockLangResources.kt | 4 + .../dec/decisland/datagen/ModLangProvider.kt | 13 + .../com/dec/decisland/entity/GeneratedMobs.kt | 968 ++++++++++++++++++ .../dec/decisland/item/ModCreativeModeTabs.kt | 14 + .../item/abyssal_controller_spawn_egg.json | 3 + .../models/item/abyssal_shadow_spawn_egg.json | 3 + .../models/item/angry_chicken_spawn_egg.json | 3 + .../models/item/archer_spawn_egg.json | 3 + .../models/item/ash_blaze_spawn_egg.json | 3 + .../models/item/ash_bomb_spawn_egg.json | 3 + .../models/item/ash_horse_head_spawn_egg.json | 3 + .../models/item/ash_horse_spawn_egg.json | 3 + .../item/ash_knight_head_spawn_egg.json | 3 + .../models/item/ash_knight_spawn_egg.json | 3 + .../models/item/ash_pufferfish_spawn_egg.json | 3 + .../item/ash_sword_phantom_spawn_egg.json | 3 + .../models/item/ash_sword_spawn_egg.json | 3 + .../item/baby_ender_dragon_spawn_egg.json | 3 + .../models/item/bat_charger_spawn_egg.json | 3 + .../item/blackstone_thorn_spawn_egg.json | 3 + .../models/item/blood_zombie_spawn_egg.json | 3 + .../models/item/bomber_spawn_egg.json | 3 + .../models/item/brown_bear_spawn_egg.json | 3 + .../models/item/carnager_spawn_egg.json | 3 + .../models/item/chest_monster_spawn_egg.json | 3 + .../models/item/chester_spawn_egg.json | 3 + .../decisland/models/item/clam_spawn_egg.json | 3 + .../decisland/models/item/crab_spawn_egg.json | 3 + .../models/item/crimson_slime_spawn_egg.json | 3 + .../models/item/dark_snow_man_spawn_egg.json | 3 + .../models/item/dark_werewolf_spawn_egg.json | 3 + .../models/item/doctor_spawn_egg.json | 3 + .../models/item/elf_of_ash_spawn_egg.json | 3 + .../models/item/elf_of_chaos_spawn_egg.json | 3 + .../models/item/elf_of_deep_spawn_egg.json | 3 + .../models/item/elf_of_dust_spawn_egg.json | 3 + .../item/enchant_armor_by_boss_spawn_egg.json | 3 + .../models/item/enchant_armor_spawn_egg.json | 3 + .../item/enchant_diamond_armor_spawn_egg.json | 3 + .../item/enchant_illager_1_spawn_egg.json | 3 + .../item/enchant_illager_2_spawn_egg.json | 3 + .../item/enchant_illager_spawn_egg.json | 3 + .../item/end_stone_golem_spawn_egg.json | 3 + .../models/item/ender_snail_spawn_egg.json | 3 + .../models/item/ender_snake_spawn_egg.json | 3 + .../item/ender_witch_puppet_spawn_egg.json | 3 + .../models/item/ender_witch_spawn_egg.json | 3 + .../models/item/entity_soul_1_spawn_egg.json | 3 + .../models/item/entity_soul_spawn_egg.json | 3 + .../item/escaped_soul_entity_spawn_egg.json | 3 + .../everlasting_winter_ghast_1_spawn_egg.json | 3 + .../everlasting_winter_ghast_spawn_egg.json | 3 + .../everlasting_winter_shadow_spawn_egg.json | 3 + .../models/item/evil_snow_man_spawn_egg.json | 3 + .../models/item/fire_storm_spawn_egg.json | 3 + .../item/friendly_little_soul_spawn_egg.json | 3 + .../item/friendly_spider_spawn_egg.json | 3 + .../models/item/frozen_ghast_spawn_egg.json | 3 + .../item/frozen_heart_sleeping_spawn_egg.json | 3 + .../models/item/frozen_heart_spawn_egg.json | 3 + .../models/item/frozen_man_spawn_egg.json | 3 + .../models/item/frozen_shadow_spawn_egg.json | 3 + .../models/item/frozen_spider_spawn_egg.json | 3 + .../models/item/gargoyle_spawn_egg.json | 3 + .../item/ghost_diamond_axe_spawn_egg.json | 3 + .../item/ghost_diamond_staff_spawn_egg.json | 3 + .../item/ghost_diamond_sword_spawn_egg.json | 3 + .../models/item/ghost_iron_axe_spawn_egg.json | 3 + .../item/ghost_iron_sword_spawn_egg.json | 3 + .../item/ghost_wooden_staff_spawn_egg.json | 3 + .../item/ghost_wooden_sword_spawn_egg.json | 3 + .../gingerbread_man_by_totem_spawn_egg.json | 3 + .../models/item/goblin_sniper_spawn_egg.json | 3 + .../models/item/goblin_spawn_egg.json | 3 + .../models/item/goblin_wizard_spawn_egg.json | 3 + .../models/item/host_of_deep_spawn_egg.json | 3 + .../models/item/ice_bat_spawn_egg.json | 3 + .../models/item/ice_blaze_spawn_egg.json | 3 + .../models/item/ice_creeper_spawn_egg.json | 3 + .../models/item/ice_monster_spawn_egg.json | 3 + .../models/item/ice_spirit_spawn_egg.json | 3 + .../models/item/ice_thorn_spawn_egg.json | 3 + .../models/item/ice_wizard_spawn_egg.json | 3 + .../models/item/ice_zombie_spawn_egg.json | 3 + .../item/illusion_zombie_spawn_egg.json | 3 + .../item/illusioner_puppet_spawn_egg.json | 3 + .../models/item/illusioner_spawn_egg.json | 3 + .../models/item/jungle_spider_spawn_egg.json | 3 + .../item/king_of_pillager_spawn_egg.json | 3 + .../models/item/lava_lizard_spawn_egg.json | 3 + .../models/item/life_insect_spawn_egg.json | 3 + .../models/item/little_bat_spawn_egg.json | 3 + .../models/item/little_soul_spawn_egg.json | 3 + .../models/item/lurk_skeleton_spawn_egg.json | 3 + .../models/item/lurk_zombie_spawn_egg.json | 3 + .../models/item/mummy_skeleton_spawn_egg.json | 3 + .../models/item/mummy_spawn_egg.json | 3 + .../models/item/murloc_spawn_egg.json | 3 + .../models/item/murloc_wizard_spawn_egg.json | 3 + .../item/mushroom_monster_spawn_egg.json | 3 + .../item/mushroom_zombie_spawn_egg.json | 3 + .../item/mystical_skeleton_spawn_egg.json | 3 + .../models/item/nautilus_spawn_egg.json | 3 + .../models/item/nether_creeper_spawn_egg.json | 3 + .../models/item/nether_golem_spawn_egg.json | 3 + .../models/item/nether_phantom_spawn_egg.json | 3 + .../item/nether_skeleton_spawn_egg.json | 3 + .../nether_skeleton_wizard_spawn_egg.json | 3 + .../models/item/obsidian_golem_spawn_egg.json | 3 + .../item/pillager_by_boss_spawn_egg.json | 3 + .../models/item/pirate_spawn_egg.json | 3 + .../models/item/player_ghost_spawn_egg.json | 3 + .../models/item/polar_wolf_spawn_egg.json | 3 + .../models/item/predators_spawn_egg.json | 3 + .../models/item/pumpkin_slime_spawn_egg.json | 3 + .../item/radiate_creeper_spawn_egg.json | 3 + .../item/radiate_enderman_spawn_egg.json | 3 + .../item/radiate_skeleton_spawn_egg.json | 3 + .../models/item/radiate_spider_spawn_egg.json | 3 + .../models/item/real_soul_spawn_egg.json | 3 + .../models/item/rumorer_spawn_egg.json | 3 + .../models/item/sardine_spawn_egg.json | 3 + .../models/item/saucer_spawn_egg.json | 3 + .../models/item/sea_urchin_spawn_egg.json | 3 + .../models/item/shadow_archer_spawn_egg.json | 3 + .../models/item/shadow_creeper_spawn_egg.json | 3 + .../models/item/shadow_of_deep_spawn_egg.json | 3 + .../models/item/shadow_of_sea_spawn_egg.json | 3 + .../shadow_skeleton_puppet_spawn_egg.json | 3 + .../item/shadow_skeleton_spawn_egg.json | 3 + .../models/item/shadow_soul_1_spawn_egg.json | 3 + .../models/item/shadow_soul_2_spawn_egg.json | 3 + .../item/shadow_zombie_puppet_spawn_egg.json | 3 + .../models/item/shadow_zombie_spawn_egg.json | 3 + .../models/item/simple_glider_spawn_egg.json | 3 + .../item/skeleton_assassin_spawn_egg.json | 3 + .../skeleton_knight_commander_spawn_egg.json | 3 + .../item/skeleton_knight_spawn_egg.json | 3 + .../item/skeleton_warrior_spawn_egg.json | 3 + .../item/skeleton_wizard_spawn_egg.json | 3 + .../models/item/soldier_spawn_egg.json | 3 + .../models/item/son_of_chaos_spawn_egg.json | 3 + .../models/item/son_of_nature_spawn_egg.json | 3 + .../models/item/soul_blaze_spawn_egg.json | 3 + .../models/item/soul_insect_spawn_egg.json | 3 + .../models/item/soul_skeleton_spawn_egg.json | 3 + .../models/item/soul_soldier_spawn_egg.json | 3 + .../decisland/models/item/soul_spawn_egg.json | 3 + .../models/item/soul_zombie_spawn_egg.json | 3 + .../decisland/models/item/star_spawn_egg.json | 3 + .../models/item/stone_golem_spawn_egg.json | 3 + .../models/item/swamp_drowned_spawn_egg.json | 3 + .../models/item/swamp_golem_spawn_egg.json | 3 + .../models/item/tnt_creeper_spawn_egg.json | 3 + .../models/item/tnt_snow_man_spawn_egg.json | 3 + .../item/vampire_bat_by_boss_spawn_egg.json | 3 + .../models/item/vampire_bat_spawn_egg.json | 3 + .../models/item/vengeful_ghost_spawn_egg.json | 3 + .../item/vindicator_by_boss_spawn_egg.json | 3 + .../item/warped_skeleton_spawn_egg.json | 3 + .../models/item/watcher_spawn_egg.json | 3 + .../models/item/werewolf_spawn_egg.json | 3 + .../models/item/zombie_fish_spawn_egg.json | 3 + .../item/zombie_summoner_spawn_egg.json | 3 + tools/entity_port/generate.mjs | 111 ++ 167 files changed, 1907 insertions(+) create mode 100644 src/main/resources/assets/decisland/models/item/abyssal_controller_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/abyssal_shadow_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/angry_chicken_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/archer_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ash_blaze_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ash_bomb_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ash_horse_head_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ash_horse_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ash_knight_head_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ash_knight_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ash_pufferfish_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ash_sword_phantom_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ash_sword_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/baby_ender_dragon_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/bat_charger_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/blackstone_thorn_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/blood_zombie_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/bomber_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/brown_bear_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/carnager_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/chest_monster_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/chester_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/clam_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/crab_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/crimson_slime_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/dark_snow_man_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/dark_werewolf_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/doctor_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/elf_of_ash_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/elf_of_chaos_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/elf_of_deep_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/elf_of_dust_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/enchant_armor_by_boss_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/enchant_armor_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/enchant_diamond_armor_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/enchant_illager_1_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/enchant_illager_2_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/enchant_illager_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/end_stone_golem_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ender_snail_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ender_snake_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ender_witch_puppet_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ender_witch_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/entity_soul_1_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/entity_soul_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/escaped_soul_entity_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/everlasting_winter_ghast_1_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/everlasting_winter_ghast_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/everlasting_winter_shadow_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/evil_snow_man_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/fire_storm_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/friendly_little_soul_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/friendly_spider_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/frozen_ghast_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/frozen_heart_sleeping_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/frozen_heart_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/frozen_man_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/frozen_shadow_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/frozen_spider_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/gargoyle_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ghost_diamond_axe_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ghost_diamond_staff_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ghost_diamond_sword_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ghost_iron_axe_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ghost_iron_sword_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ghost_wooden_staff_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ghost_wooden_sword_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/gingerbread_man_by_totem_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/goblin_sniper_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/goblin_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/goblin_wizard_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/host_of_deep_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ice_bat_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ice_blaze_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ice_creeper_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ice_monster_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ice_spirit_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ice_thorn_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ice_wizard_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/ice_zombie_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/illusion_zombie_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/illusioner_puppet_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/illusioner_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/jungle_spider_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/king_of_pillager_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/lava_lizard_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/life_insect_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/little_bat_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/little_soul_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/lurk_skeleton_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/lurk_zombie_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/mummy_skeleton_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/mummy_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/murloc_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/murloc_wizard_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/mushroom_monster_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/mushroom_zombie_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/mystical_skeleton_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/nautilus_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/nether_creeper_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/nether_golem_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/nether_phantom_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/nether_skeleton_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/nether_skeleton_wizard_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/obsidian_golem_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/pillager_by_boss_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/pirate_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/player_ghost_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/polar_wolf_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/predators_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/pumpkin_slime_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/radiate_creeper_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/radiate_enderman_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/radiate_skeleton_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/radiate_spider_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/real_soul_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/rumorer_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/sardine_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/saucer_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/sea_urchin_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/shadow_archer_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/shadow_creeper_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/shadow_of_deep_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/shadow_of_sea_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/shadow_skeleton_puppet_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/shadow_skeleton_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/shadow_soul_1_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/shadow_soul_2_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/shadow_zombie_puppet_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/shadow_zombie_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/simple_glider_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/skeleton_assassin_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/skeleton_knight_commander_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/skeleton_knight_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/skeleton_warrior_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/skeleton_wizard_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/soldier_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/son_of_chaos_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/son_of_nature_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/soul_blaze_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/soul_insect_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/soul_skeleton_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/soul_soldier_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/soul_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/soul_zombie_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/star_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/stone_golem_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/swamp_drowned_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/swamp_golem_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/tnt_creeper_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/tnt_snow_man_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/vampire_bat_by_boss_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/vampire_bat_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/vengeful_ghost_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/vindicator_by_boss_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/warped_skeleton_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/watcher_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/werewolf_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/zombie_fish_spawn_egg.json create mode 100644 src/main/resources/assets/decisland/models/item/zombie_summoner_spawn_egg.json diff --git a/src/generated/resources/assets/decisland/lang/en_us.json b/src/generated/resources/assets/decisland/lang/en_us.json index 8277c9f..b6e66fc 100644 --- a/src/generated/resources/assets/decisland/lang/en_us.json +++ b/src/generated/resources/assets/decisland/lang/en_us.json @@ -538,6 +538,8 @@ "item.decisland.a_piece_of_salmon": "a Piece of Salmon", "item.decisland.absolute_zero": "Absolute Zero", "item.decisland.abyssal_controller_mask": "Abyssal Controller Mask", + "item.decisland.abyssal_controller_spawn_egg": "Spawn Abyssal Controller", + "item.decisland.abyssal_shadow_spawn_egg": "Spawn Abyssal Shadow", "item.decisland.agent_mask": "Agent Mask", "item.decisland.alchemic_stone": "Alchemic Stone", "item.decisland.alex_mask": "Alex Mask", @@ -553,17 +555,27 @@ "item.decisland.amethyst_ray_staff": "Amethyst Ray Sfaff", "item.decisland.amethyst_sword": "Amethyst Sword", "item.decisland.angel_purification": "Angel Purification", + "item.decisland.angry_chicken_spawn_egg": "Spawn Angry Chicken", "item.decisland.apple_juice": "Apple Juice", "item.decisland.apple_pie": "Apple Pie", "item.decisland.archer_bullet_bag": "Archer Bullet Bag", "item.decisland.archer_hat": "Archer Hat", + "item.decisland.archer_spawn_egg": "Spawn Archer", "item.decisland.archer_stones_bag": "Archer Stones Bag", "item.decisland.arctic_fox_mask": "Arcitc Fox Mask", "item.decisland.ash_blaze_mask": "Ash Blaze Mask", + "item.decisland.ash_blaze_spawn_egg": "Spawn Ash Blaze", + "item.decisland.ash_bomb_spawn_egg": "Spawn Ash Bomb", + "item.decisland.ash_horse_head_spawn_egg": "Spawn Ash Horse Head", "item.decisland.ash_key": "Ash Key", + "item.decisland.ash_knight_head_spawn_egg": "Spawn Ash Knight Head", "item.decisland.ash_knight_mask": "Ash Knight Mask", + "item.decisland.ash_knight_spawn_egg": "Spawn Ash Knight", "item.decisland.ash_pufferfish": "Inflamed Ash Pufferfish", "item.decisland.ash_pufferfish_mask": "Ash Pufferfish Mask", + "item.decisland.ash_pufferfish_spawn_egg": "Spawn Ash Pufferfish", + "item.decisland.ash_sword_phantom_spawn_egg": "Spawn Ash Sword Phantom", + "item.decisland.ash_sword_spawn_egg": "Spawn Ash Sword", "item.decisland.autumn_leaves": "Autumn Leaves", "item.decisland.axolotl_blue_mask": "Axolotl Blue Mask", "item.decisland.axolotl_cyan_mask": "Axolotl Cyan Mask", @@ -571,10 +583,12 @@ "item.decisland.axolotl_lucy_mask": "Axolotl Lucy Mask", "item.decisland.axolotl_wild_mask": "Axolotl Wild Mask", "item.decisland.baby_blue_eyes_flower": "Baby Blue Eyes Flower", + "item.decisland.baby_ender_dragon_spawn_egg": "Spawn Baby Ender Dragon", "item.decisland.balloon_flower": "Balloon Flower", "item.decisland.bamboo_katana": "Bamboo Katana", "item.decisland.bamboo_yataghan": "Bamboo Yataghan", "item.decisland.bat_bait": "Bat Bait", + "item.decisland.bat_charger_spawn_egg": "Spawn Bat Charger", "item.decisland.bat_mask": "Bat Mask", "item.decisland.bat_staff": "Bat Staff", "item.decisland.bat_wing": "Incomplete Bat Wing", @@ -584,6 +598,7 @@ "item.decisland.black_courtesy": "Black Courtesy", "item.decisland.black_shoes": "Black Shoes", "item.decisland.black_shorts": "Black Shorts", + "item.decisland.blackstone_thorn_spawn_egg": "Spawn Blackstone Thorn", "item.decisland.blaze_mask": "Blaze Mask", "item.decisland.blaze_staff": "Blaze Staff", "item.decisland.blizzard_staff": "Blizzard Staff", @@ -593,6 +608,7 @@ "item.decisland.blood_meat": "Blood Meat", "item.decisland.blood_sickle": "Blood Sickle", "item.decisland.blood_worm": "Blood Worm", + "item.decisland.blood_zombie_spawn_egg": "Spawn Blood Zombie", "item.decisland.blue_cat_ears": "Blue Cat Ears", "item.decisland.blue_gem": "Blue Gem", "item.decisland.blue_gem_debris": "Blue Gem Debris", @@ -601,6 +617,7 @@ "item.decisland.blue_of_the_sea": "Blue Of The Sea", "item.decisland.bomber": "Bomber", "item.decisland.bomber_bullet": "Bomber Bullet", + "item.decisland.bomber_spawn_egg": "Spawn Bomber", "item.decisland.bone_sword": "Bone Sword", "item.decisland.book_of_deep": "Book of Deep", "item.decisland.boomber_mask": "Bommber Mask", @@ -608,6 +625,7 @@ "item.decisland.brain_rice": "Brain Rice", "item.decisland.breeze_flower": "Breeze Flower", "item.decisland.brown_bear_mask": "Brown Bear Mask", + "item.decisland.brown_bear_spawn_egg": "Spawn Brown Bear", "item.decisland.brown_mooshroom_mask": "Brown Mooshroom Mask", "item.decisland.bullet_bag": "Bullet Bag", "item.decisland.butter_flower": "Butter Flower", @@ -616,10 +634,13 @@ "item.decisland.camouflage_pants": "Camouflage Pants", "item.decisland.candy": "Candy", "item.decisland.candy_cane": "Candy Cane", + "item.decisland.carnager_spawn_egg": "Spawn Carnager", "item.decisland.catapult": "Catapult", "item.decisland.cave_spider_mask": "Cave Spider Mask", "item.decisland.challenge_of_ash": "Challenge Of Ash", "item.decisland.chaos_staff": "Chaos Staff", + "item.decisland.chest_monster_spawn_egg": "Spawn Chest Monster", + "item.decisland.chester_spawn_egg": "Spawn Chester", "item.decisland.chicken_mask": "Chicken Mask", "item.decisland.chicken_staff": "Chicken Staff", "item.decisland.chocolate_cookie": "Chocolate Cookie", @@ -627,6 +648,7 @@ "item.decisland.christmas_cap": "Christmas Cap", "item.decisland.christmas_gift": "Christmas Gift", "item.decisland.christmas_sock": "Christmas Sock", + "item.decisland.clam_spawn_egg": "Spawn Clam", "item.decisland.cloud_flower": "Cloud Flower", "item.decisland.coal_fish": "Coal Fish", "item.decisland.coal_nugget": "Coal Nugget", @@ -649,8 +671,10 @@ "item.decisland.cow_mask": "Cow Mask", "item.decisland.crab_leg": "Crab Leg", "item.decisland.crab_leg_cooked": "Cooked Crab Leg", + "item.decisland.crab_spawn_egg": "Spawn Crab", "item.decisland.creeper_mask": "Creeper Mask", "item.decisland.crimson_slime_mask": "Crimson Slime Mask", + "item.decisland.crimson_slime_spawn_egg": "Spawn Crimson Slime", "item.decisland.crinum": "Crinum", "item.decisland.crying_boots": "Crying Boots", "item.decisland.crying_chestplate": "Crying Chestplate", @@ -663,8 +687,10 @@ "item.decisland.dark_debris": "Dark Debris", "item.decisland.dark_pearl": "Dark Pearl", "item.decisland.dark_snow_man_mask": "Dark Snow Man Mask", + "item.decisland.dark_snow_man_spawn_egg": "Spawn Dark Snow Man", "item.decisland.dark_stone": "Dark Stone", "item.decisland.dark_werewolf_mask": "Dark Werewolf Mask", + "item.decisland.dark_werewolf_spawn_egg": "Spawn Dark Werewolf", "item.decisland.dark_zombie_mask": "Dark Zombie Mask", "item.decisland.dead_wood_dagger": "Dead Wood Dagger", "item.decisland.dead_wood_rapier": "Dead Wood Rapier", @@ -688,6 +714,7 @@ "item.decisland.dirt_chestplate": "Dirt Chestplate", "item.decisland.dirt_helmet": "Dirt Helmet", "item.decisland.dirt_leggings": "Dirt Leggings", + "item.decisland.doctor_spawn_egg": "Spawn Doctor", "item.decisland.dolphin_mask": "Dolphin Mask", "item.decisland.dragon_fireball_by_player": "Dragon Fireball", "item.decisland.drift_bottle": "Drift Bottle", @@ -697,8 +724,12 @@ "item.decisland.dust_staff": "Dust Staff", "item.decisland.echo_of_deep": "Echo of Deep", "item.decisland.elf_of_ash_mask": "Elf Of Ash Mask", + "item.decisland.elf_of_ash_spawn_egg": "Spawn Elf Of Ash", "item.decisland.elf_of_chaos_mask": "Elf Of Chaos Mask", + "item.decisland.elf_of_chaos_spawn_egg": "Spawn Elf Of Chaos", "item.decisland.elf_of_deep_mask": "Elf Of Deep Mask", + "item.decisland.elf_of_deep_spawn_egg": "Spawn Elf Of Deep", + "item.decisland.elf_of_dust_spawn_egg": "Spawn Elf Of Dust", "item.decisland.elf_of_leaves_mask": "Elf Of Leaves Mask", "item.decisland.emerald_apple": "Emerald Apple", "item.decisland.emerald_apple_enchanted": "Enchanted Emerald Apple", @@ -716,7 +747,14 @@ "item.decisland.emerald_staff": "Emerald Staff", "item.decisland.emerald_sword": "Emerald Sword", "item.decisland.empty_totem": "Empty Totem", + "item.decisland.enchant_armor_by_boss_spawn_egg": "Spawn Enchant Armor", + "item.decisland.enchant_armor_spawn_egg": "Spawn Enchant Armor", + "item.decisland.enchant_diamond_armor_spawn_egg": "Spawn Enchant Diamond Armor", + "item.decisland.enchant_illager_1_spawn_egg": "Spawn Enchant Illager", + "item.decisland.enchant_illager_2_spawn_egg": "Spawn Enchant Illager", + "item.decisland.enchant_illager_spawn_egg": "Spawn Enchant Illager", "item.decisland.end_stone_golem_mask": "End Stone Golem Mask", + "item.decisland.end_stone_golem_spawn_egg": "Spawn Endstone Golem", "item.decisland.ender_bone": "Ender Bone", "item.decisland.ender_breath": "Ender Breath", "item.decisland.ender_core": "Ender Core", @@ -725,33 +763,44 @@ "item.decisland.ender_fish": "Ender Fish", "item.decisland.ender_powder": "Ender Powder", "item.decisland.ender_ring": "Ender Ring", + "item.decisland.ender_snail_spawn_egg": "Spawn Ender Snail", + "item.decisland.ender_snake_spawn_egg": "Spawn Ender Snake", "item.decisland.ender_stone": "Ender Stone", "item.decisland.ender_substance": "Ender Substance", "item.decisland.ender_witch_mask": "Ender Witch Mask", + "item.decisland.ender_witch_puppet_spawn_egg": "Spawn Ender Witch Puppet", + "item.decisland.ender_witch_spawn_egg": "Spawn Ender Witch", "item.decisland.enderman_mask": "Enderman Mask", "item.decisland.energy_ray_staff": "Energy Ray Staff", "item.decisland.energy_totem": "Energy Totem", "item.decisland.enriched_uranium": "Enriched Uranium", "item.decisland.entity_soul": "Entity Soul", + "item.decisland.entity_soul_1_spawn_egg": "Spawn Entity Soul", "item.decisland.entity_soul_mask": "Entity Soul Mask", + "item.decisland.entity_soul_spawn_egg": "Spawn Entity Soul", "item.decisland.es_clothes": "Es Clothes", "item.decisland.es_pants": "Es Pants", "item.decisland.es_shoes": "Es Shoes", + "item.decisland.escaped_soul_entity_spawn_egg": "Spawn Escaped Soul", "item.decisland.everlasting_winter_boots": "Everlasting Winter Boots", "item.decisland.everlasting_winter_chestplate": "Everlasting Winter Chestplate", "item.decisland.everlasting_winter_dagger": "Everlasting Winter Dagger", "item.decisland.everlasting_winter_dart": "Everlasting Dart", "item.decisland.everlasting_winter_flintlock": "Everlasting Winter Flintlock", + "item.decisland.everlasting_winter_ghast_1_spawn_egg": "Spawn Everlasting Winter Ghast", "item.decisland.everlasting_winter_ghast_mask": "Everlasting Winter Ghast Mask", + "item.decisland.everlasting_winter_ghast_spawn_egg": "Spawn Everlasting Winter Ghast", "item.decisland.everlasting_winter_heart": "Everlasting Winter Heart", "item.decisland.everlasting_winter_helmet": "Everlasting Winter Helmet", "item.decisland.everlasting_winter_ingot": "Everlasting Winter Ingot", "item.decisland.everlasting_winter_leggings": "Everlasting Winter Leggings", + "item.decisland.everlasting_winter_shadow_spawn_egg": "Spawn Everlasting Winter Shadow", "item.decisland.everlasting_winter_sickle": "Everlasting Winter Sickle", "item.decisland.everlasting_winter_staff": "Everlasting Winter Staff", "item.decisland.everlasting_winter_stick": "Everlasting Winter Stick", "item.decisland.everlasting_winter_sword": "Everlasting Winter Sword", "item.decisland.evil_snow_man_mask": "Evil Snow Man Mask", + "item.decisland.evil_snow_man_spawn_egg": "Spawn Evil Snow Man", "item.decisland.experience_book": "Experience Book", "item.decisland.experience_book_empty": "Empty Experience Book", "item.decisland.experience_book_pro_empty": "Empty Experience Book Pro", @@ -764,6 +813,7 @@ "item.decisland.final_crystal_nucleus": "Final Crystal Nucleus", "item.decisland.fire_heart": "Fire Heart", "item.decisland.fire_ring": "Fire Ring", + "item.decisland.fire_storm_spawn_egg": "Spawn Fire Storm", "item.decisland.fire_totem": "Fire Totem", "item.decisland.firefly_bottle": "Firefly Bottle", "item.decisland.flare_magic_book": "Flare Magic Book", @@ -778,6 +828,8 @@ "item.decisland.frank_mask": "Frank Mask", "item.decisland.fried_egg": "Fried Egg", "item.decisland.fried_melon_seed": "Fried Melon Seed", + "item.decisland.friendly_little_soul_spawn_egg": "Spawn Friendly Little Soul", + "item.decisland.friendly_spider_spawn_egg": "Spawn Friendly Spider", "item.decisland.fritillary": "Fritillary", "item.decisland.fritillary_seeds": "Fritillary Seeds", "item.decisland.frozen_ball": "Frozen Ball", @@ -785,28 +837,43 @@ "item.decisland.frozen_chestplate": "Frozen Chestplate", "item.decisland.frozen_dart": "Frozen Dart", "item.decisland.frozen_fish": "Frozen Fish", + "item.decisland.frozen_ghast_spawn_egg": "Spawn Frozen Ghast", + "item.decisland.frozen_heart_sleeping_spawn_egg": "Spawn Frozen Heart Sleeping", + "item.decisland.frozen_heart_spawn_egg": "Spawn Frozen Heart", "item.decisland.frozen_helmet": "Frozen Helmet", "item.decisland.frozen_leggings": "Frozen Leggings", + "item.decisland.frozen_man_spawn_egg": "Spawn Frozen Man", "item.decisland.frozen_mirror_flower": "Frozen Mirror Flower", "item.decisland.frozen_power": "Frozen Power", "item.decisland.frozen_power_debris": "Frozen Power Debris", "item.decisland.frozen_ray_staff": "Frozen Ray Staff", + "item.decisland.frozen_shadow_spawn_egg": "Spawn Frozen Shadow", "item.decisland.frozen_spider_mask": "Frozen Spider Mask", + "item.decisland.frozen_spider_spawn_egg": "Spawn Frozen Spider", "item.decisland.frozen_staff": "Frozen Staff", "item.decisland.gargoyle_mask": "Gargoyle Mask", + "item.decisland.gargoyle_spawn_egg": "Spawn Gargoyle", "item.decisland.gas_bomb": "Gas Bomb", "item.decisland.ghast_mask": "Ghast Mask", "item.decisland.ghost_dagger": "The Raider Of Soul", + "item.decisland.ghost_diamond_axe_spawn_egg": "Spawn Ghost Diamond Axe", + "item.decisland.ghost_diamond_staff_spawn_egg": "Spawn Ghost Diamond Staff", + "item.decisland.ghost_diamond_sword_spawn_egg": "Spawn Ghost Diamond Sword", "item.decisland.ghost_dirt_wall": "Ghost Dirt Wall", "item.decisland.ghost_essence": "Ghost Essence", "item.decisland.ghost_flintlock": "Ghost Flintlock", "item.decisland.ghost_ingot": "Ghost Ingot", + "item.decisland.ghost_iron_axe_spawn_egg": "Spawn Ghost Iron Axe", + "item.decisland.ghost_iron_sword_spawn_egg": "Spawn Ghost Iron Sword", "item.decisland.ghost_sickle": "The Reaper Of Soul", "item.decisland.ghost_summoner": "Ghost Summoner", "item.decisland.ghost_sword": "The Absorber Of Soul", + "item.decisland.ghost_wooden_staff_spawn_egg": "Spawn Ghost Wooden Staff", + "item.decisland.ghost_wooden_sword_spawn_egg": "Spawn Ghost Wooden Sword", "item.decisland.giant_bat_wings": "Giant Bat Wings", "item.decisland.giant_ivy": "Giant Ivy", "item.decisland.gingerbread_man": "Gingerbread Man", + "item.decisland.gingerbread_man_by_totem_spawn_egg": "Spawn Gingerbread Man", "item.decisland.gingerbread_man_mask": "Gingerbread Man Mask", "item.decisland.gingerbread_sword": "Gingerbread Sword", "item.decisland.gingerbread_totem": "Gingerbread Totem", @@ -818,6 +885,9 @@ "item.decisland.glass_pickaxe": "Glass Pickaxe", "item.decisland.glass_tank": "Glass Tank", "item.decisland.goblin_mask": "Goblin Mask", + "item.decisland.goblin_sniper_spawn_egg": "Spawn Goblin Sniper", + "item.decisland.goblin_spawn_egg": "Spawn Goblin", + "item.decisland.goblin_wizard_spawn_egg": "Spawn Goblin Wizard", "item.decisland.god_of_destroy": "God Of Destroy", "item.decisland.god_of_sun": "God Of Sun", "item.decisland.gold_dart": "Gold Dart", @@ -852,23 +922,34 @@ "item.decisland.high_concentration_uranium": "High Concentration Uranium", "item.decisland.hook_rope": "Hook Rope", "item.decisland.host_of_deep_mask": "Host Of Deep Mask", + "item.decisland.host_of_deep_spawn_egg": "Spawn Host Of Deep", "item.decisland.houttuynia": "Houttuynia", "item.decisland.houttuynia_seeds": "Houttuynia Seeds", "item.decisland.hunter_book": "Book of Hunter", "item.decisland.hunter_bullet_bag": "Hunter Bullet Bag", "item.decisland.husk_mask": "Huck Mask", + "item.decisland.ice_bat_spawn_egg": "Spawn Ice Bat", "item.decisland.ice_blaze_mask": "Ice Blaze Mask", + "item.decisland.ice_blaze_spawn_egg": "Spawn Ice Blaze", "item.decisland.ice_brick": "Ice Brick", "item.decisland.ice_cream": "Ice Cream", + "item.decisland.ice_creeper_spawn_egg": "Spawn Ice Creeper", "item.decisland.ice_heart": "Heart Of Ice", "item.decisland.ice_hook_rope": "Ice Hook Rope", "item.decisland.ice_ingot": "Ice Ingot", + "item.decisland.ice_monster_spawn_egg": "Spawn Ice Monster", "item.decisland.ice_nugget": "Ice Nugget", "item.decisland.ice_rod": "Ice Rod", + "item.decisland.ice_spirit_spawn_egg": "Spawn Ice Spirit", "item.decisland.ice_sword": "Ice Sword", + "item.decisland.ice_thorn_spawn_egg": "Spawn Ice Thorn", + "item.decisland.ice_wizard_spawn_egg": "Spawn Ice Wizard", "item.decisland.ice_zombie_mask": "Ice Zombie Mask", + "item.decisland.ice_zombie_spawn_egg": "Spawn Ice Zombie", "item.decisland.illager_mask": "Illager Mask", "item.decisland.illager_sword": "Illager Sword", + "item.decisland.illusion_zombie_spawn_egg": "Spawn Illusion Zombie", + "item.decisland.illusioner_spawn_egg": "Spawn Illusioner", "item.decisland.infinite_crystal_nucleus_1": "Infinite Crystal Nucleus I", "item.decisland.infinite_crystal_nucleus_2": "Infinite Crystal Nucleus II", "item.decisland.infinite_crystal_nucleus_3": "Infinite Crystal Nucleus III", @@ -890,6 +971,8 @@ "item.decisland.jiuzhi_jacket": "Jiuzhi Jacket", "item.decisland.jiuzhi_pants": "Jiuzhi Pants", "item.decisland.jiuzhi_shoes": "Jiuzhi Shoes", + "item.decisland.jungle_spider_spawn_egg": "Spawn Jungle Spider", + "item.decisland.king_of_pillager_spawn_egg": "Spawn King Of Pillager", "item.decisland.knight_helmet": "Helmet Of Knight", "item.decisland.lamp_flower": "Lamp Flower", "item.decisland.lamprey": "Lamprey", @@ -910,6 +993,7 @@ "item.decisland.lava_helmet": "Lava Helmet", "item.decisland.lava_ingot": "Lava Ingot", "item.decisland.lava_leggings": "Lava Leggings", + "item.decisland.lava_lizard_spawn_egg": "Spawn Lava Lizard", "item.decisland.lava_nugget": "Lava Nugget", "item.decisland.lava_sword": "Lava Sword", "item.decisland.leaves_dagger": "Leaves Dagger", @@ -924,12 +1008,17 @@ "item.decisland.lester_shoes": "Lester Shoes", "item.decisland.levitation_cloud": "Levitation Cloud", "item.decisland.levitation_dirt_wall": "Levitation Dirt Wall", + "item.decisland.life_insect_spawn_egg": "Spawn Life Insect", "item.decisland.lightning_stone": "Lightning Stone", + "item.decisland.little_bat_spawn_egg": "Spawn Little Bat", + "item.decisland.little_soul_spawn_egg": "Spawn Little Soul", "item.decisland.lollipop": "Lollipop", "item.decisland.long_bread": "Long Bread", "item.decisland.lurk_bud": "Lurk Bud", "item.decisland.lurk_fruit": "Lurk Fruit", "item.decisland.lurk_orchid": "Lurk Orchid", + "item.decisland.lurk_skeleton_spawn_egg": "Spawn Lurk Skeleton", + "item.decisland.lurk_zombie_spawn_egg": "Spawn Lurk Zombie", "item.decisland.magic_article": "Magic Article", "item.decisland.magic_chest_debris": "Magic Chest Debris", "item.decisland.magic_crystal": "Magic Crystal", @@ -952,20 +1041,33 @@ "item.decisland.muddy_fish": "Muddy Fish", "item.decisland.mummy_mask": "Mummy Mask", "item.decisland.mummy_skeleton_mask": "Mummy Skeleton Mask", + "item.decisland.mummy_skeleton_spawn_egg": "Spawn Mummy Skeleton", + "item.decisland.mummy_spawn_egg": "Spawn Mummy", + "item.decisland.murloc_spawn_egg": "Spawn Murloc", + "item.decisland.murloc_wizard_spawn_egg": "Spawn Murloc Wizard", "item.decisland.mushroom_mask": "Mushroom Mask", + "item.decisland.mushroom_monster_spawn_egg": "Spawn Mushroom Monster", + "item.decisland.mushroom_zombie_spawn_egg": "Spawn Mushroom Zombie", "item.decisland.mysterious_key": "Mysterious Key", "item.decisland.mysterious_key_debris": "Mysterious Key Debris", "item.decisland.mystical_skeleton_mask": "Mystical Skeleton Mask", + "item.decisland.mystical_skeleton_spawn_egg": "Spawn Mystical Skeleton", "item.decisland.natural_ring": "Natural Ring", "item.decisland.natural_spear": "Natural Spear", "item.decisland.nature_essence": "Nature Essence", "item.decisland.nautilus_alive": "Nautilus Alive", + "item.decisland.nautilus_spawn_egg": "Spawn Nautilus", "item.decisland.nether_creeper_mask": "Nether Creeper Mask", + "item.decisland.nether_creeper_spawn_egg": "Spawn Nether Creeper", "item.decisland.nether_dandelion": "Nether Dandelion", "item.decisland.nether_golem_mask": "Nether Golem Mask", + "item.decisland.nether_golem_spawn_egg": "Spawn Nether Golem", "item.decisland.nether_phantom_mask": "Nether Phantom Mask", + "item.decisland.nether_phantom_spawn_egg": "Spawn Nether Phantom", "item.decisland.nether_skeleton_mask": "Nether Skeleton Mask", + "item.decisland.nether_skeleton_spawn_egg": "Spawn Nether Skeleton", "item.decisland.nether_skeleton_wizard_mask": "Nether Skeleton Wizard Mask", + "item.decisland.nether_skeleton_wizard_spawn_egg": "Spawn Nether Skeleton Wizard", "item.decisland.nether_stick_flower": "Nether Stick Flower", "item.decisland.netherite_dagger": "Netherite Dagger", "item.decisland.netherite_dart": "Netherite Dart", @@ -973,6 +1075,7 @@ "item.decisland.night_sword": "The Night", "item.decisland.nightmare": "Nightmare", "item.decisland.obsidian_golem_mask": "Obsdian Golem Mask", + "item.decisland.obsidian_golem_spawn_egg": "Spawn Obsidian Golem", "item.decisland.ocean_totem": "Ocean Totem", "item.decisland.old_book": "Ancient Book", "item.decisland.old_monster_mask": "Old Monster Mask", @@ -985,32 +1088,43 @@ "item.decisland.piglin_chestplate": "Piglin Chestplate", "item.decisland.piglin_leggings": "Piglin Leggings", "item.decisland.pigzombie_mask": "Pigzombie Mask", + "item.decisland.pillager_by_boss_spawn_egg": "Spawn Pillager", "item.decisland.pine_cone": "Pine Cone", "item.decisland.pink_dandelion": "Pink Dandelion", "item.decisland.pink_fan_flower": "Pink Fan Flower", "item.decisland.pink_jellyfish": "Pink Jellyfish", "item.decisland.pirate_bullet_bag": "Pirate Bullet Bag", + "item.decisland.pirate_spawn_egg": "Spawn Pirate", "item.decisland.player_ghost_mask": "Player Ghost Mask", + "item.decisland.player_ghost_spawn_egg": "Spawn Player Ghost", "item.decisland.poison_bag": "Poison Bag", "item.decisland.poison_dart": "Poison Dart", "item.decisland.poison_fish": "Poison Fish", "item.decisland.poison_gland": "Poison Gland", "item.decisland.polar_wolf_mask": "Polar Wolf Mask", + "item.decisland.polar_wolf_spawn_egg": "Spawn Polar Wolf", "item.decisland.polarbear_mask": "Polarbear Mask", "item.decisland.pollution_algae": "Pollutional Algae", "item.decisland.potato_rice": "Potato Rice", "item.decisland.predators_mask": "Predators Mask", + "item.decisland.predators_spawn_egg": "Spawn Predators", "item.decisland.prehistoric_monster_mask": "Prehistoric Monster Mask", "item.decisland.pufferfish_mask": "Pufferfish Mask", "item.decisland.pulse_stone": "Pulse Stone", "item.decisland.pumpkin_candy": "Pumpkin Candy", + "item.decisland.pumpkin_slime_spawn_egg": "Spawn Pumpkin Slime", "item.decisland.pure_ingot": "Pure Ingot", "item.decisland.radiate_creeper_mask": "Radiate Creeper Mask", + "item.decisland.radiate_creeper_spawn_egg": "Spawn Radiate Creeper", "item.decisland.radiate_crystal": "Radiate Crystal", "item.decisland.radiate_enderman_mask": "Radiate Enderman Mask", + "item.decisland.radiate_enderman_spawn_egg": "Spawn Radiate Enderman", + "item.decisland.radiate_skeleton_spawn_egg": "Spawn Radiate Skeleton", + "item.decisland.radiate_spider_spawn_egg": "Spawn Radiate Spider", "item.decisland.radiate_spreader": "Radiate Spreader", "item.decisland.radiate_sword": "Radiate Sword", "item.decisland.rapier": "Rapier", + "item.decisland.real_soul_spawn_egg": "Spawn Real Soul", "item.decisland.red_bag": "Red Bag", "item.decisland.red_gem": "Red Gem", "item.decisland.red_gem_debris": "Red Gem Debris", @@ -1025,23 +1139,37 @@ "item.decisland.rosemary": "Rosemary", "item.decisland.rough_steel": "Rough Steel", "item.decisland.rumorer_mask": "Rumorer Mask", + "item.decisland.rumorer_spawn_egg": "Spawn Rumorer", "item.decisland.rupert_boots": "Rupert Boots", "item.decisland.rupert_chestplate": "Rupert Chestplate", "item.decisland.rupert_helmet": "Rupert Helmet", "item.decisland.rupert_leggings": "Rupert Leggings", "item.decisland.russet_grass": "Russet Grass", "item.decisland.sardine": "Sardine", + "item.decisland.sardine_spawn_egg": "Spawn Sardine", + "item.decisland.saucer_spawn_egg": "Spawn Saucer", "item.decisland.scale_sword": "Scale Sword", "item.decisland.scarecrow": "Scarecrow", "item.decisland.scimitar": "Scimitar", "item.decisland.sea_turtle_mask": "Sea Turtle Mask", "item.decisland.sea_urchin": "Sea Urchin", + "item.decisland.sea_urchin_spawn_egg": "Spawn Sea Urchin", + "item.decisland.shadow_archer_spawn_egg": "Spawn Shadow Archer", "item.decisland.shadow_creeper_mask": "Shadow Creeper Mask", + "item.decisland.shadow_creeper_spawn_egg": "Spawn Shadow Creeper", "item.decisland.shadow_crystal": "Shadow Crystal", "item.decisland.shadow_feather": "Shadow Feather", + "item.decisland.shadow_of_deep_spawn_egg": "Spawn Shadow Of Deep", "item.decisland.shadow_of_sea_mask": "Shadow Of Sea Mask", + "item.decisland.shadow_of_sea_spawn_egg": "Spawn Shadow Of Sea", "item.decisland.shadow_skeleton_mask": "Shadow Skeleton Mask", + "item.decisland.shadow_skeleton_puppet_spawn_egg": "Spawn Shadow Skeleton Puppet", + "item.decisland.shadow_skeleton_spawn_egg": "Spawn Shadow Skeleton", + "item.decisland.shadow_soul_1_spawn_egg": "Spawn Shadow Soul", + "item.decisland.shadow_soul_2_spawn_egg": "Spawn Shadow Soul", "item.decisland.shadow_zombie_mask": "Shadow Zombie Mask", + "item.decisland.shadow_zombie_puppet_spawn_egg": "Spawn Shadow Zombie Puppet", + "item.decisland.shadow_zombie_spawn_egg": "Spawn Shadow Zombie", "item.decisland.sharp_coral": "Sharp Coral", "item.decisland.shell": "Shell", "item.decisland.short_flintlock": "Short Flintlock", @@ -1049,10 +1177,16 @@ "item.decisland.shulker_mask": "Shulker Mask", "item.decisland.simple_car": "Simple Car", "item.decisland.simple_glider": "Simple Glider", + "item.decisland.simple_glider_spawn_egg": "Spawn Simple Glider", "item.decisland.skeleton_assassin_mask": "Skeleton Assassin Mask", + "item.decisland.skeleton_assassin_spawn_egg": "Spawn Skeleton Assassin", "item.decisland.skeleton_fish": "Skeleton Fish", + "item.decisland.skeleton_knight_commander_spawn_egg": "Spawn Skeleton Knight Commander", "item.decisland.skeleton_knight_mask": "Skeleton Knight Mask", + "item.decisland.skeleton_knight_spawn_egg": "Spawn Skeleton Knight", "item.decisland.skeleton_mask": "Skeleton Mask", + "item.decisland.skeleton_warrior_spawn_egg": "Spawn Skeleton Warrior", + "item.decisland.skeleton_wizard_spawn_egg": "Spawn Skeleton Wizard", "item.decisland.slime_axe": "Slime Axe", "item.decisland.slime_mask": "Slime Mask", "item.decisland.slime_pickaxe": "Slime Pickaxe", @@ -1064,15 +1198,24 @@ "item.decisland.snow_flower": "Snow Flower", "item.decisland.snow_lotus": "Snow Lotus", "item.decisland.snowball_magic_book": "Snowball Magic Book", + "item.decisland.soldier_spawn_egg": "Spawn Soldier", + "item.decisland.son_of_chaos_spawn_egg": "Spawn Son Of Chaos", + "item.decisland.son_of_nature_spawn_egg": "Spawn Son Of Nature", "item.decisland.soul": "Soul", "item.decisland.soul_blaze_mask": "Soul Blaze Mask", "item.decisland.soul_blaze_rod": "Soul Blaze Rod", + "item.decisland.soul_blaze_spawn_egg": "Spawn Soul Blaze", "item.decisland.soul_fireball": "Soul Fireball", + "item.decisland.soul_insect_spawn_egg": "Spawn Soul Insect", "item.decisland.soul_key": "Soul Key", "item.decisland.soul_skeleton_mask": "Soul Skeleton Mask", + "item.decisland.soul_skeleton_spawn_egg": "Spawn Soul Skeleton", + "item.decisland.soul_soldier_spawn_egg": "Spawn Soul Soldier", + "item.decisland.soul_spawn_egg": "Spawn Soul", "item.decisland.soul_staff": "The Breath Of Soul", "item.decisland.soul_wake_bullet_render": "Soul Wake Bullet Render", "item.decisland.soul_zombie_mask": "Soul Zombie Mask", + "item.decisland.soul_zombie_spawn_egg": "Spawn Soul Zombie", "item.decisland.soybean": "Soybean", "item.decisland.spark_flower": "Spark Flower", "item.decisland.spell_flower": "Spell Flower", @@ -1084,6 +1227,7 @@ "item.decisland.star_debris": "Star Debris", "item.decisland.star_flintlock": "Star Flintlock", "item.decisland.star_flower": "Star Flower", + "item.decisland.star_spawn_egg": "Spawn Star", "item.decisland.star_sword": "The Bursting Star", "item.decisland.steel_battleaxe": "Steel Battleaxe", "item.decisland.steel_boots": "Steel Boots", @@ -1103,6 +1247,7 @@ "item.decisland.stone_chestplate": "Stone Chestplate", "item.decisland.stone_dagger": "Stone Dagger", "item.decisland.stone_dart": "Stone Dart", + "item.decisland.stone_golem_spawn_egg": "Spawn Stone Golem", "item.decisland.stone_helmet": "Stone Helmet", "item.decisland.stone_leggings": "Stone Leggings", "item.decisland.stones_bag": "Stones Bag", @@ -1121,7 +1266,9 @@ "item.decisland.striped_pants": "Striped Pants", "item.decisland.sun_stone": "Sun Stone", "item.decisland.swamp_drowned_mask": "Swamp Drowned Mask", + "item.decisland.swamp_drowned_spawn_egg": "Spawn Swamp Drowned", "item.decisland.swamp_golem_mask": "Swamp Golem Mask", + "item.decisland.swamp_golem_spawn_egg": "Spawn Swamp Golem", "item.decisland.sword_fish": "Sword Fish", "item.decisland.sword_of_deep": "Black Domain", "item.decisland.sword_of_guard": "The Spirit Of Guard", @@ -1135,6 +1282,8 @@ "item.decisland.thyme": "Thyme", "item.decisland.time_compass": "Time Compass", "item.decisland.tnt_creeper_mask": "Tnt Creeper Mask", + "item.decisland.tnt_creeper_spawn_egg": "Spawn TNT Creeper", + "item.decisland.tnt_snow_man_spawn_egg": "Spawn TNT Snow Man", "item.decisland.tofu": "Tofu", "item.decisland.tropical_fish": "Tropical Fish", "item.decisland.tropical_fish_cooked": "Cooked Tropical Fish", @@ -1147,18 +1296,25 @@ "item.decisland.unknow_book": "Unknow Book", "item.decisland.uranium": "Uranium", "item.decisland.uranium_apple": "Uranium Apple", + "item.decisland.vampire_bat_by_boss_spawn_egg": "Spawn Vampire Bat", + "item.decisland.vampire_bat_spawn_egg": "Spawn Vampire Bat", "item.decisland.vengeful_ghost_mask": "Vengeful Ghost Mask", + "item.decisland.vengeful_ghost_spawn_egg": "Spawn Vengeful Ghost", "item.decisland.vex_mask": "Vex Mask", "item.decisland.village_guardian": "Village Guardian", "item.decisland.villager_mask": "Villager Mask", + "item.decisland.vindicator_by_boss_spawn_egg": "Spawn Vindicator", "item.decisland.void_whispering_dagger": "The Void Whispering", "item.decisland.vortex": "Vortex", "item.decisland.wandering_trader_mask": "Wandering Trader Mask", "item.decisland.warden_sword": "Warden Sword", "item.decisland.warped_skeleton_mask": "Warped Skeleton Mask", + "item.decisland.warped_skeleton_spawn_egg": "Spawn Warped Skeleton", "item.decisland.waste": "Waste", + "item.decisland.watcher_spawn_egg": "Spawn Watcher", "item.decisland.wave_magic_book": "Wave Magic Book", "item.decisland.werewolf_mask": "Werewolf Mask", + "item.decisland.werewolf_spawn_egg": "Spawn Werewolf", "item.decisland.white_shoes": "White Shoes", "item.decisland.white_t_shirt": "White T Shirt", "item.decisland.wind_dagger": "Wind Dagger", @@ -1185,8 +1341,10 @@ "item.decisland.yellow_jellyfish": "Yellow Jellyfish", "item.decisland.zombie_brain": "Zombie Brain", "item.decisland.zombie_fish": "Zombie Fish", + "item.decisland.zombie_fish_spawn_egg": "Spawn Zombie Fish", "item.decisland.zombie_mask": "Zombie Mask", "item.decisland.zombie_summoner_mask": "Zombie Summoner Mask", + "item.decisland.zombie_summoner_spawn_egg": "Spawn Zombie Summoner", "item.decisland.zombie_villager_mask": "Zombie Villager Mask", "item.decisland.zombie_warrior_mask": "Zombie Warrior Mask", "item.record_star.desc": "fish - 拥抱星辰", @@ -1319,6 +1477,7 @@ "itemGroup.decisland_accessories_tab": "DecIsland Accessories", "itemGroup.decisland_blocks_tab": "DecIsland Blocks", "itemGroup.decisland_crops_tab": "DecIsland Crops", + "itemGroup.decisland_entities_tab": "DecIsland Entities", "itemGroup.decisland_foods_tab": "DecIsland Foods", "itemGroup.decisland_masks_tab": "DecIsland Masks", "itemGroup.decisland_materials_tab": "DecIsland Materials", diff --git a/src/generated/resources/assets/decisland/lang/zh_cn.json b/src/generated/resources/assets/decisland/lang/zh_cn.json index d790020..00945cf 100644 --- a/src/generated/resources/assets/decisland/lang/zh_cn.json +++ b/src/generated/resources/assets/decisland/lang/zh_cn.json @@ -538,6 +538,8 @@ "item.decisland.a_piece_of_salmon": "生鱼片", "item.decisland.absolute_zero": "绝对零度", "item.decisland.abyssal_controller_mask": "深海牢笼面具", + "item.decisland.abyssal_controller_spawn_egg": "生成 深海牢笼", + "item.decisland.abyssal_shadow_spawn_egg": "生成深海之影", "item.decisland.agent_mask": "机器人面具", "item.decisland.alchemic_stone": "炼金石", "item.decisland.alex_mask": "艾利克斯面具", @@ -553,17 +555,27 @@ "item.decisland.amethyst_ray_staff": "紫水晶射线杖", "item.decisland.amethyst_sword": "紫水晶剑", "item.decisland.angel_purification": "净化使者", + "item.decisland.angry_chicken_spawn_egg": "生成愤怒小鸡", "item.decisland.apple_juice": "苹果汁", "item.decisland.apple_pie": "苹果派", "item.decisland.archer_bullet_bag": "射手子弹袋", "item.decisland.archer_hat": "射手帽", + "item.decisland.archer_spawn_egg": "生成 弓箭手", "item.decisland.archer_stones_bag": "射手石子袋", "item.decisland.arctic_fox_mask": "雪狐面具", "item.decisland.ash_blaze_mask": "灰烬烈焰人面具", + "item.decisland.ash_blaze_spawn_egg": "生成 灰烬烈焰人", + "item.decisland.ash_bomb_spawn_egg": "生成灰烬炸弹", + "item.decisland.ash_horse_head_spawn_egg": "生成灰烬马的头", "item.decisland.ash_key": "灰烬钥匙", + "item.decisland.ash_knight_head_spawn_egg": "生成灰烬之首", "item.decisland.ash_knight_mask": "灰烬骑士面具", + "item.decisland.ash_knight_spawn_egg": "生成 灰烬骑士", "item.decisland.ash_pufferfish": "红肿灰烬豚", "item.decisland.ash_pufferfish_mask": "灰烬河豚面具", + "item.decisland.ash_pufferfish_spawn_egg": "生成 灰烬豚", + "item.decisland.ash_sword_phantom_spawn_egg": "生成灰烬剑影", + "item.decisland.ash_sword_spawn_egg": "生成灰烬之刃", "item.decisland.autumn_leaves": "秋叶", "item.decisland.axolotl_blue_mask": "蓝色美西螈面具", "item.decisland.axolotl_cyan_mask": "青色美西螈面具", @@ -571,10 +583,12 @@ "item.decisland.axolotl_lucy_mask": "粉红色美西螈面具", "item.decisland.axolotl_wild_mask": "棕色面具", "item.decisland.baby_blue_eyes_flower": "喜林草", + "item.decisland.baby_ender_dragon_spawn_egg": "生成 末影幼龙", "item.decisland.balloon_flower": "桔梗花", "item.decisland.bamboo_katana": "竹太刀", "item.decisland.bamboo_yataghan": "竹长剑", "item.decisland.bat_bait": "蝙蝠诱饵", + "item.decisland.bat_charger_spawn_egg": "生成蝙蝠冲锋者", "item.decisland.bat_mask": "蝙蝠面具", "item.decisland.bat_staff": "蝙蝠杖", "item.decisland.bat_wing": "残缺蝙蝠翅", @@ -584,6 +598,7 @@ "item.decisland.black_courtesy": "黑礼帽", "item.decisland.black_shoes": "黑鞋子", "item.decisland.black_shorts": "黑短裤", + "item.decisland.blackstone_thorn_spawn_egg": "生成黑石刺", "item.decisland.blaze_mask": "烈焰人面具", "item.decisland.blaze_staff": "烈焰法杖", "item.decisland.blizzard_staff": "暴风雪法杖", @@ -593,6 +608,7 @@ "item.decisland.blood_meat": "血腥肉块", "item.decisland.blood_sickle": "血色镰刀", "item.decisland.blood_worm": "血蠕虫", + "item.decisland.blood_zombie_spawn_egg": "生成 血肉之躯", "item.decisland.blue_cat_ears": "蓝色猫耳", "item.decisland.blue_gem": "蓝宝石", "item.decisland.blue_gem_debris": "蓝宝石碎片", @@ -601,6 +617,7 @@ "item.decisland.blue_of_the_sea": "海之忧伤", "item.decisland.bomber": "轰炸者", "item.decisland.bomber_bullet": "轰炸弹", + "item.decisland.bomber_spawn_egg": "生成 轰炸者", "item.decisland.bone_sword": "骨刃", "item.decisland.book_of_deep": "深渊之书", "item.decisland.boomber_mask": "轰炸者面具", @@ -608,6 +625,7 @@ "item.decisland.brain_rice": "脑花拌饭", "item.decisland.breeze_flower": "微风之歌", "item.decisland.brown_bear_mask": "棕熊面具", + "item.decisland.brown_bear_spawn_egg": "生成 棕熊", "item.decisland.brown_mooshroom_mask": "棕色蘑菇牛面具", "item.decisland.bullet_bag": "子弹袋", "item.decisland.butter_flower": "黄油郁金香", @@ -616,10 +634,13 @@ "item.decisland.camouflage_pants": "迷彩裤", "item.decisland.candy": "糖果", "item.decisland.candy_cane": "拐棍糖", + "item.decisland.carnager_spawn_egg": "生成 屠杀者", "item.decisland.catapult": "弹弓", "item.decisland.cave_spider_mask": "洞穴蜘蛛面具", "item.decisland.challenge_of_ash": "灰烬挑战书", "item.decisland.chaos_staff": "混沌召唤杖", + "item.decisland.chest_monster_spawn_egg": "生成 箱子怪", + "item.decisland.chester_spawn_egg": "生成 储存者", "item.decisland.chicken_mask": "小鸡面具", "item.decisland.chicken_staff": "小鸡法杖", "item.decisland.chocolate_cookie": "巧克力曲奇", @@ -627,6 +648,7 @@ "item.decisland.christmas_cap": "圣诞帽", "item.decisland.christmas_gift": "圣诞礼物", "item.decisland.christmas_sock": "圣诞袜", + "item.decisland.clam_spawn_egg": "生成 蛤", "item.decisland.cloud_flower": "坠云", "item.decisland.coal_fish": "煤炭鱼", "item.decisland.coal_nugget": "煤炭粒", @@ -649,8 +671,10 @@ "item.decisland.cow_mask": "牛面具", "item.decisland.crab_leg": "螃蟹腿", "item.decisland.crab_leg_cooked": "烤熟的螃蟹腿", + "item.decisland.crab_spawn_egg": "生成 螃蟹", "item.decisland.creeper_mask": "苦力怕面具", "item.decisland.crimson_slime_mask": "猩红史莱姆面具", + "item.decisland.crimson_slime_spawn_egg": "生成 绯红史莱姆", "item.decisland.crinum": "海百合", "item.decisland.crying_boots": "曜泣之靴", "item.decisland.crying_chestplate": "曜泣胸甲", @@ -663,8 +687,10 @@ "item.decisland.dark_debris": "暗夜碎片", "item.decisland.dark_pearl": "暗黑珍珠", "item.decisland.dark_snow_man_mask": "暗黑雪人面具", + "item.decisland.dark_snow_man_spawn_egg": "生成 黑暗雪人", "item.decisland.dark_stone": "黑暗石", "item.decisland.dark_werewolf_mask": "暗狼人面具", + "item.decisland.dark_werewolf_spawn_egg": "生成 暗狼人", "item.decisland.dark_zombie_mask": "暗黑僵尸面具", "item.decisland.dead_wood_dagger": "枯蔓", "item.decisland.dead_wood_rapier": "枯木之握", @@ -688,6 +714,7 @@ "item.decisland.dirt_chestplate": "泥土胸甲", "item.decisland.dirt_helmet": "泥土头盔", "item.decisland.dirt_leggings": "泥土护腿", + "item.decisland.doctor_spawn_egg": "生成 医生", "item.decisland.dolphin_mask": "海豚面具", "item.decisland.dragon_fireball_by_player": "龙息弹", "item.decisland.drift_bottle": "漂流瓶", @@ -697,8 +724,12 @@ "item.decisland.dust_staff": "尘埃召唤杖", "item.decisland.echo_of_deep": "深渊回影", "item.decisland.elf_of_ash_mask": "灰烬精灵面具", + "item.decisland.elf_of_ash_spawn_egg": "生成 灰烬精灵", "item.decisland.elf_of_chaos_mask": "混乱精灵面具面具", + "item.decisland.elf_of_chaos_spawn_egg": "生成 混沌之灵", "item.decisland.elf_of_deep_mask": "深渊精灵面具", + "item.decisland.elf_of_deep_spawn_egg": "生成 深渊精灵", + "item.decisland.elf_of_dust_spawn_egg": "生成尘埃精灵", "item.decisland.elf_of_leaves_mask": "绿叶精灵面具", "item.decisland.emerald_apple": "绿宝石苹果", "item.decisland.emerald_apple_enchanted": "附魔绿宝石苹果", @@ -716,7 +747,14 @@ "item.decisland.emerald_staff": "绿宝石法杖", "item.decisland.emerald_sword": "绿宝石剑", "item.decisland.empty_totem": "空图腾", + "item.decisland.enchant_armor_by_boss_spawn_egg": "生成附魔盔甲", + "item.decisland.enchant_armor_spawn_egg": "生成 附魔盔甲", + "item.decisland.enchant_diamond_armor_spawn_egg": "生成 附魔钻石甲", + "item.decisland.enchant_illager_1_spawn_egg": "生成附魔师", + "item.decisland.enchant_illager_2_spawn_egg": "生成附魔师", + "item.decisland.enchant_illager_spawn_egg": "生成 附魔师", "item.decisland.end_stone_golem_mask": "末地石傀儡面具", + "item.decisland.end_stone_golem_spawn_egg": "生成 末地石傀儡", "item.decisland.ender_bone": "末影骨", "item.decisland.ender_breath": "末影之息", "item.decisland.ender_core": "末影核心", @@ -725,33 +763,44 @@ "item.decisland.ender_fish": "末影鱼", "item.decisland.ender_powder": "末影粉末", "item.decisland.ender_ring": "末影戒", + "item.decisland.ender_snail_spawn_egg": "生成 末影蜗牛", + "item.decisland.ender_snake_spawn_egg": "生成 末影蟒", "item.decisland.ender_stone": "末影石", "item.decisland.ender_substance": "潜影物质", "item.decisland.ender_witch_mask": "末影女巫面具", + "item.decisland.ender_witch_puppet_spawn_egg": "生成末影女巫分身", + "item.decisland.ender_witch_spawn_egg": "生成 末影女巫", "item.decisland.enderman_mask": "末影人面具", "item.decisland.energy_ray_staff": "能量射线杖", "item.decisland.energy_totem": "能量图腾", "item.decisland.enriched_uranium": "浓缩铀", "item.decisland.entity_soul": "实体灵魂", + "item.decisland.entity_soul_1_spawn_egg": "生成真实之魂", "item.decisland.entity_soul_mask": "实体灵魂面具", + "item.decisland.entity_soul_spawn_egg": "生成 真实之魂", "item.decisland.es_clothes": "ES上衣", "item.decisland.es_pants": "ES裤子", "item.decisland.es_shoes": "ES鞋子", + "item.decisland.escaped_soul_entity_spawn_egg": "生成逃逸之魂", "item.decisland.everlasting_winter_boots": "永冬靴", "item.decisland.everlasting_winter_chestplate": "永冬胸甲", "item.decisland.everlasting_winter_dagger": "永冬短剑", "item.decisland.everlasting_winter_dart": "永冬手里剑", "item.decisland.everlasting_winter_flintlock": "永冬枪", + "item.decisland.everlasting_winter_ghast_1_spawn_egg": "生成永冬恶魂", "item.decisland.everlasting_winter_ghast_mask": "永冬恶魂面具", + "item.decisland.everlasting_winter_ghast_spawn_egg": "生成 永冬恶魂", "item.decisland.everlasting_winter_heart": "永冬之心", "item.decisland.everlasting_winter_helmet": "永冬头盔", "item.decisland.everlasting_winter_ingot": "永冬锭", "item.decisland.everlasting_winter_leggings": "永冬护腿", + "item.decisland.everlasting_winter_shadow_spawn_egg": "生成永冬之影", "item.decisland.everlasting_winter_sickle": "永冬镰刀", "item.decisland.everlasting_winter_staff": "永冬法杖", "item.decisland.everlasting_winter_stick": "永冬棍", "item.decisland.everlasting_winter_sword": "永冬长剑", "item.decisland.evil_snow_man_mask": "邪恶雪人面具", + "item.decisland.evil_snow_man_spawn_egg": "生成 邪恶雪人", "item.decisland.experience_book": "经验书", "item.decisland.experience_book_empty": "空的经验书", "item.decisland.experience_book_pro_empty": "空的汲取之书", @@ -764,6 +813,7 @@ "item.decisland.final_crystal_nucleus": "终极晶核", "item.decisland.fire_heart": "烈火之心", "item.decisland.fire_ring": "烈焰戒", + "item.decisland.fire_storm_spawn_egg": "生成烈焰风暴", "item.decisland.fire_totem": "火焰图腾", "item.decisland.firefly_bottle": "萤火虫瓶", "item.decisland.flare_magic_book": "耀斑魔法书", @@ -778,6 +828,8 @@ "item.decisland.frank_mask": "弗兰克面具", "item.decisland.fried_egg": "煎蛋", "item.decisland.fried_melon_seed": "炒瓜子", + "item.decisland.friendly_little_soul_spawn_egg": "生成友好小幽灵", + "item.decisland.friendly_spider_spawn_egg": "生成友好蜘蛛", "item.decisland.fritillary": "贝母", "item.decisland.fritillary_seeds": "贝母种子", "item.decisland.frozen_ball": "冰霜魔法球", @@ -785,28 +837,43 @@ "item.decisland.frozen_chestplate": "霜冻甲", "item.decisland.frozen_dart": "霜冻手里剑", "item.decisland.frozen_fish": "冰霜鱼", + "item.decisland.frozen_ghast_spawn_egg": "生成 冰霜恶魂", + "item.decisland.frozen_heart_sleeping_spawn_egg": "生成睡着的冰冻之心", + "item.decisland.frozen_heart_spawn_egg": "生成 冰冻之心", "item.decisland.frozen_helmet": "霜冻头盔", "item.decisland.frozen_leggings": "霜冻护腿", + "item.decisland.frozen_man_spawn_egg": "生成 冰人", "item.decisland.frozen_mirror_flower": "冰镜花", "item.decisland.frozen_power": "冰霜能量", "item.decisland.frozen_power_debris": "冰霜能量碎片", "item.decisland.frozen_ray_staff": "冰能量射线杖", + "item.decisland.frozen_shadow_spawn_egg": "生成 寒霜之影", "item.decisland.frozen_spider_mask": "冰冻蜘蛛面具", + "item.decisland.frozen_spider_spawn_egg": "生成 冰冻蜘蛛", "item.decisland.frozen_staff": "冰法杖", "item.decisland.gargoyle_mask": "石像鬼面具", + "item.decisland.gargoyle_spawn_egg": "生成 石像鬼", "item.decisland.gas_bomb": "毒气弹", "item.decisland.ghast_mask": "恶魂面具", "item.decisland.ghost_dagger": "灵魂突击者", + "item.decisland.ghost_diamond_axe_spawn_egg": "生成 鬼魂钻石斧", + "item.decisland.ghost_diamond_staff_spawn_egg": "生成 鬼魂钻石法杖", + "item.decisland.ghost_diamond_sword_spawn_egg": "生成 鬼魂钻石剑", "item.decisland.ghost_dirt_wall": "鬼魂土墙", "item.decisland.ghost_essence": "幽魂精华", "item.decisland.ghost_flintlock": "幽魂猎杀者", "item.decisland.ghost_ingot": "幽魂锭", + "item.decisland.ghost_iron_axe_spawn_egg": "生成 鬼魂铁斧", + "item.decisland.ghost_iron_sword_spawn_egg": "生成 鬼魂铁剑", "item.decisland.ghost_sickle": "灵魂收割者", "item.decisland.ghost_summoner": "唤魂者", "item.decisland.ghost_sword": "灵魂吸收者", + "item.decisland.ghost_wooden_staff_spawn_egg": "生成 鬼魂木法杖", + "item.decisland.ghost_wooden_sword_spawn_egg": "生成鬼魂木剑", "item.decisland.giant_bat_wings": "巨型蝙蝠翅", "item.decisland.giant_ivy": "巨藤", "item.decisland.gingerbread_man": "姜饼人", + "item.decisland.gingerbread_man_by_totem_spawn_egg": "生成姜饼人", "item.decisland.gingerbread_man_mask": "姜饼人面具", "item.decisland.gingerbread_sword": "姜饼剑", "item.decisland.gingerbread_totem": "姜饼图腾", @@ -818,6 +885,9 @@ "item.decisland.glass_pickaxe": "玻璃镐", "item.decisland.glass_tank": "玻璃缸", "item.decisland.goblin_mask": "哥布林面具", + "item.decisland.goblin_sniper_spawn_egg": "生成 哥布林狙击手", + "item.decisland.goblin_spawn_egg": "生成 哥布林", + "item.decisland.goblin_wizard_spawn_egg": "生成 哥布林法师", "item.decisland.god_of_destroy": "破坏之神", "item.decisland.god_of_sun": "太阳神", "item.decisland.gold_dart": "金手里剑", @@ -852,23 +922,34 @@ "item.decisland.high_concentration_uranium": "高纯度铀", "item.decisland.hook_rope": "钩锁", "item.decisland.host_of_deep_mask": "深渊之主面具", + "item.decisland.host_of_deep_spawn_egg": "生成 深渊之主", "item.decisland.houttuynia": "折耳根", "item.decisland.houttuynia_seeds": "折耳根种子", "item.decisland.hunter_book": "猎人之书", "item.decisland.hunter_bullet_bag": "猎人子弹袋", "item.decisland.husk_mask": "剥皮者面具", + "item.decisland.ice_bat_spawn_egg": "生成 冰冻蝙蝠", "item.decisland.ice_blaze_mask": "寒霜人面具", + "item.decisland.ice_blaze_spawn_egg": "生成 寒霜人", "item.decisland.ice_brick": "冰砖", "item.decisland.ice_cream": "冰淇淋", + "item.decisland.ice_creeper_spawn_egg": "生成 冰冻苦力怕", "item.decisland.ice_heart": "冰冻之心", "item.decisland.ice_hook_rope": "极寒钩锁", "item.decisland.ice_ingot": "冰锭", + "item.decisland.ice_monster_spawn_egg": "生成 冰雪怪", "item.decisland.ice_nugget": "冰粒", "item.decisland.ice_rod": "寒霜棍", + "item.decisland.ice_spirit_spawn_egg": "生成 冰魂", "item.decisland.ice_sword": "冰棱", + "item.decisland.ice_thorn_spawn_egg": "生成冰刺", + "item.decisland.ice_wizard_spawn_egg": "生成 寒潮法师", "item.decisland.ice_zombie_mask": "寒冰僵尸面具", + "item.decisland.ice_zombie_spawn_egg": "生成 寒冰僵尸", "item.decisland.illager_mask": "刌民面具", "item.decisland.illager_sword": "绝望长剑", + "item.decisland.illusion_zombie_spawn_egg": "生成 幻影僵尸", + "item.decisland.illusioner_spawn_egg": "生成 幻术师", "item.decisland.infinite_crystal_nucleus_1": "无限晶核I", "item.decisland.infinite_crystal_nucleus_2": "无限晶核II", "item.decisland.infinite_crystal_nucleus_3": "无限晶核III", @@ -890,6 +971,8 @@ "item.decisland.jiuzhi_jacket": "玖治夹克", "item.decisland.jiuzhi_pants": "玖治裤子", "item.decisland.jiuzhi_shoes": "玖治鞋", + "item.decisland.jungle_spider_spawn_egg": "生成 丛林蜘蛛", + "item.decisland.king_of_pillager_spawn_egg": "生成 掠夺者之王", "item.decisland.knight_helmet": "骑士头盔", "item.decisland.lamp_flower": "灯笼花", "item.decisland.lamprey": "七鳃鳗", @@ -910,6 +993,7 @@ "item.decisland.lava_helmet": "狱岩头盔", "item.decisland.lava_ingot": "岩浆锭", "item.decisland.lava_leggings": "狱岩护腿", + "item.decisland.lava_lizard_spawn_egg": "生成 熔岩蜥蜴", "item.decisland.lava_nugget": "炙热粒", "item.decisland.lava_sword": "岩浆之剑", "item.decisland.leaves_dagger": "绿叶短刀", @@ -924,12 +1008,17 @@ "item.decisland.lester_shoes": "里斯特鞋", "item.decisland.levitation_cloud": "悬浮云", "item.decisland.levitation_dirt_wall": "飘浮土墙", + "item.decisland.life_insect_spawn_egg": "生成 生命虫", "item.decisland.lightning_stone": "雷电石", + "item.decisland.little_bat_spawn_egg": "生成小蝙蝠", + "item.decisland.little_soul_spawn_egg": "生成小幽灵", "item.decisland.lollipop": "棒棒糖", "item.decisland.long_bread": "长面包", "item.decisland.lurk_bud": "潜声芽", "item.decisland.lurk_fruit": "潜声果", "item.decisland.lurk_orchid": "潜声兰", + "item.decisland.lurk_skeleton_spawn_egg": "生成 潜声骷髅", + "item.decisland.lurk_zombie_spawn_egg": "生成 潜声僵尸", "item.decisland.magic_article": "魔法充能条", "item.decisland.magic_chest_debris": "魔法箱子碎片", "item.decisland.magic_crystal": "魔法水晶", @@ -952,20 +1041,33 @@ "item.decisland.muddy_fish": "泥鱼", "item.decisland.mummy_mask": "木乃伊面具", "item.decisland.mummy_skeleton_mask": "干尸面具", + "item.decisland.mummy_skeleton_spawn_egg": "生成 干尸", + "item.decisland.mummy_spawn_egg": "生成 木乃伊", + "item.decisland.murloc_spawn_egg": "生成 鱼人", + "item.decisland.murloc_wizard_spawn_egg": "生成 鱼人法师", "item.decisland.mushroom_mask": "蘑菇面具", + "item.decisland.mushroom_monster_spawn_egg": "生成 蘑菇怪", + "item.decisland.mushroom_zombie_spawn_egg": "生成 真菌僵尸", "item.decisland.mysterious_key": "神秘钥匙", "item.decisland.mysterious_key_debris": "神秘钥匙碎片", "item.decisland.mystical_skeleton_mask": "神秘骷髅面具", + "item.decisland.mystical_skeleton_spawn_egg": "生成 神秘骷髅", "item.decisland.natural_ring": "自然戒", "item.decisland.natural_spear": "自然之矛", "item.decisland.nature_essence": "自然精华", "item.decisland.nautilus_alive": "活的鹦鹉螺", + "item.decisland.nautilus_spawn_egg": "生成 鹦鹉螺", "item.decisland.nether_creeper_mask": "地狱苦力怕面具", + "item.decisland.nether_creeper_spawn_egg": "生成 地狱苦力怕", "item.decisland.nether_dandelion": "地狱蒲公英", "item.decisland.nether_golem_mask": "地狱傀儡面具", + "item.decisland.nether_golem_spawn_egg": "生成 地狱傀儡", "item.decisland.nether_phantom_mask": "地狱幻翼面具", + "item.decisland.nether_phantom_spawn_egg": "生成 地狱幻翼", "item.decisland.nether_skeleton_mask": "地狱骷髅面具", + "item.decisland.nether_skeleton_spawn_egg": "生成 地狱骷髅", "item.decisland.nether_skeleton_wizard_mask": "地狱骷髅法师面具", + "item.decisland.nether_skeleton_wizard_spawn_egg": "生成 地狱骷髅法师", "item.decisland.nether_stick_flower": "矮棍花", "item.decisland.netherite_dagger": "下界合金短剑", "item.decisland.netherite_dart": "下界合金手里剑", @@ -973,6 +1075,7 @@ "item.decisland.night_sword": "夜之刃", "item.decisland.nightmare": "夜魔", "item.decisland.obsidian_golem_mask": "黑曜石傀儡面具", + "item.decisland.obsidian_golem_spawn_egg": "生成 黑曜石傀儡", "item.decisland.ocean_totem": "海洋图腾", "item.decisland.old_book": "古老的书", "item.decisland.old_monster_mask": "老怪物面具", @@ -985,32 +1088,43 @@ "item.decisland.piglin_chestplate": "猪灵护甲", "item.decisland.piglin_leggings": "猪灵护腿", "item.decisland.pigzombie_mask": "僵尸猪人面具", + "item.decisland.pillager_by_boss_spawn_egg": "生成掠夺者", "item.decisland.pine_cone": "松果", "item.decisland.pink_dandelion": "星云蒲公英", "item.decisland.pink_fan_flower": "粉扇花", "item.decisland.pink_jellyfish": "粉水母", "item.decisland.pirate_bullet_bag": "海盗子弹袋", + "item.decisland.pirate_spawn_egg": "生成 海盗", "item.decisland.player_ghost_mask": "鬼魂面具", + "item.decisland.player_ghost_spawn_egg": "生成 不屈的灵魂", "item.decisland.poison_bag": "毒囊", "item.decisland.poison_dart": "剧毒手里剑", "item.decisland.poison_fish": "剧毒鱼", "item.decisland.poison_gland": "剧毒腺体", "item.decisland.polar_wolf_mask": "北极狼面具", + "item.decisland.polar_wolf_spawn_egg": "生成 北极狼", "item.decisland.polarbear_mask": "北极熊面具", "item.decisland.pollution_algae": "污染海藻", "item.decisland.potato_rice": "土豆焖饭", "item.decisland.predators_mask": "扑食者面具", + "item.decisland.predators_spawn_egg": "生成 扑食者", "item.decisland.prehistoric_monster_mask": "远古怪物面具", "item.decisland.pufferfish_mask": "河豚面具", "item.decisland.pulse_stone": "脉冲石", "item.decisland.pumpkin_candy": "南瓜糖", + "item.decisland.pumpkin_slime_spawn_egg": "生成 南瓜头史莱姆", "item.decisland.pure_ingot": "纯洁之锭", "item.decisland.radiate_creeper_mask": "辐射苦力怕面具", + "item.decisland.radiate_creeper_spawn_egg": "生成 辐射苦力怕", "item.decisland.radiate_crystal": "辐射水晶", "item.decisland.radiate_enderman_mask": "辐射末影人面具", + "item.decisland.radiate_enderman_spawn_egg": "生成 辐射末影人", + "item.decisland.radiate_skeleton_spawn_egg": "生成 辐射骷髅", + "item.decisland.radiate_spider_spawn_egg": "生成 辐射蜘蛛", "item.decisland.radiate_spreader": "堕落之神", "item.decisland.radiate_sword": "堕落圣刃", "item.decisland.rapier": "刺剑", + "item.decisland.real_soul_spawn_egg": "生成 真魂", "item.decisland.red_bag": "红包", "item.decisland.red_gem": "红宝石", "item.decisland.red_gem_debris": "红宝石碎片", @@ -1025,23 +1139,37 @@ "item.decisland.rosemary": "迷迭香", "item.decisland.rough_steel": "粗制钢料", "item.decisland.rumorer_mask": "灵异面具", + "item.decisland.rumorer_spawn_egg": "生成 灵异闻者", "item.decisland.rupert_boots": "鲁伯特靴", "item.decisland.rupert_chestplate": "鲁伯特胸甲", "item.decisland.rupert_helmet": "鲁伯特头盔", "item.decisland.rupert_leggings": "鲁伯特护腿", "item.decisland.russet_grass": "赤褐草", "item.decisland.sardine": "沙丁鱼", + "item.decisland.sardine_spawn_egg": "生成 沙丁鱼", + "item.decisland.saucer_spawn_egg": "生成 飞碟", "item.decisland.scale_sword": "鳞之刃", "item.decisland.scarecrow": "稻草人", "item.decisland.scimitar": "弯刀", "item.decisland.sea_turtle_mask": "海龟面具", "item.decisland.sea_urchin": "海胆", + "item.decisland.sea_urchin_spawn_egg": "生成 海胆", + "item.decisland.shadow_archer_spawn_egg": "生成 暗影射手", "item.decisland.shadow_creeper_mask": "暗影苦力怕面具", + "item.decisland.shadow_creeper_spawn_egg": "生成 暗影苦力怕", "item.decisland.shadow_crystal": "暗影水晶", "item.decisland.shadow_feather": "暗影羽", + "item.decisland.shadow_of_deep_spawn_egg": "生成 深渊之影", "item.decisland.shadow_of_sea_mask": "幻翼海妖面具", + "item.decisland.shadow_of_sea_spawn_egg": "生成 幻影海妖", "item.decisland.shadow_skeleton_mask": "幻翼骷髅面具", + "item.decisland.shadow_skeleton_puppet_spawn_egg": "生成暗影骷髅分身", + "item.decisland.shadow_skeleton_spawn_egg": "生成 暗影骷髅", + "item.decisland.shadow_soul_1_spawn_egg": "生成暗影灵魂", + "item.decisland.shadow_soul_2_spawn_egg": "生成暗影灵魂", "item.decisland.shadow_zombie_mask": "幻翼僵尸面具", + "item.decisland.shadow_zombie_puppet_spawn_egg": "生成暗影僵尸分身", + "item.decisland.shadow_zombie_spawn_egg": "生成 暗影僵尸", "item.decisland.sharp_coral": "尖锐珊瑚", "item.decisland.shell": "贝壳", "item.decisland.short_flintlock": "短燧发枪", @@ -1049,10 +1177,16 @@ "item.decisland.shulker_mask": "潜影贝面具", "item.decisland.simple_car": "简单小车", "item.decisland.simple_glider": "简单滑翔机", + "item.decisland.simple_glider_spawn_egg": "生成简单滑翔机", "item.decisland.skeleton_assassin_mask": "骷髅刺客面具", + "item.decisland.skeleton_assassin_spawn_egg": "生成 骷髅刺客", "item.decisland.skeleton_fish": "骷髅鱼", + "item.decisland.skeleton_knight_commander_spawn_egg": "生成 骷髅骑士长", "item.decisland.skeleton_knight_mask": "骷髅骑士面具", + "item.decisland.skeleton_knight_spawn_egg": "生成 骷髅骑士", "item.decisland.skeleton_mask": "骷髅面具", + "item.decisland.skeleton_warrior_spawn_egg": "生成 骷髅战士", + "item.decisland.skeleton_wizard_spawn_egg": "生成 骷髅法师", "item.decisland.slime_axe": "史莱姆斧", "item.decisland.slime_mask": "史莱姆面具", "item.decisland.slime_pickaxe": "史莱姆镐", @@ -1064,15 +1198,23 @@ "item.decisland.snow_flower": "雪地圣女", "item.decisland.snow_lotus": "雪莲花", "item.decisland.snowball_magic_book": "冰冻能量书", + "item.decisland.soldier_spawn_egg": "生成 士兵", + "item.decisland.son_of_nature_spawn_egg": "生成自然之子", "item.decisland.soul": "灵魂", "item.decisland.soul_blaze_mask": "灵魂烈焰人面具", "item.decisland.soul_blaze_rod": "灵魂烈焰棒", + "item.decisland.soul_blaze_spawn_egg": "生成 灵魂烈焰人", "item.decisland.soul_fireball": "灵魂烈焰弹", + "item.decisland.soul_insect_spawn_egg": "生成 灵魂虫", "item.decisland.soul_key": "灵魂钥匙", "item.decisland.soul_skeleton_mask": "灵魂骷髅面具", + "item.decisland.soul_skeleton_spawn_egg": "生成 灵魂骷髅", + "item.decisland.soul_soldier_spawn_egg": "生成 灵魂士兵", + "item.decisland.soul_spawn_egg": "生成 灵魂", "item.decisland.soul_staff": "灵魂之息", "item.decisland.soul_wake_bullet_render": "灵魂尾迹渲染", "item.decisland.soul_zombie_mask": "灵魂僵尸面具", + "item.decisland.soul_zombie_spawn_egg": "生成 灵魂僵尸", "item.decisland.soybean": "大豆", "item.decisland.spark_flower": "庭院丁香", "item.decisland.spell_flower": "印法花", @@ -1084,6 +1226,7 @@ "item.decisland.star_debris": "星体碎片", "item.decisland.star_flintlock": "星落", "item.decisland.star_flower": "星星花", + "item.decisland.star_spawn_egg": "生成 星星", "item.decisland.star_sword": "迸发之星", "item.decisland.steel_battleaxe": "钢战斧", "item.decisland.steel_boots": "钢靴", @@ -1103,6 +1246,7 @@ "item.decisland.stone_chestplate": "石头胸甲", "item.decisland.stone_dagger": "石短剑", "item.decisland.stone_dart": "石手里剑", + "item.decisland.stone_golem_spawn_egg": "生成 石头傀儡", "item.decisland.stone_helmet": "石头头盔", "item.decisland.stone_leggings": "石头护腿", "item.decisland.stones_bag": "石子袋", @@ -1121,7 +1265,9 @@ "item.decisland.striped_pants": "条纹裤", "item.decisland.sun_stone": "日光石", "item.decisland.swamp_drowned_mask": "淤骸面具", + "item.decisland.swamp_drowned_spawn_egg": "生成 淤骸", "item.decisland.swamp_golem_mask": "沼泽巨怪面具", + "item.decisland.swamp_golem_spawn_egg": "生成 沼泽巨怪", "item.decisland.sword_fish": "剑鱼", "item.decisland.sword_of_deep": "黑域", "item.decisland.sword_of_guard": "侍卫之灵", @@ -1135,6 +1281,8 @@ "item.decisland.thyme": "百里香", "item.decisland.time_compass": "时间指针", "item.decisland.tnt_creeper_mask": "TNT苦力怕面具", + "item.decisland.tnt_creeper_spawn_egg": "生成 TNT苦力怕", + "item.decisland.tnt_snow_man_spawn_egg": "生成 TNT雪人", "item.decisland.tofu": "豆腐", "item.decisland.tropical_fish": "热带鱼", "item.decisland.tropical_fish_cooked": "烤熟的热带鱼", @@ -1147,18 +1295,25 @@ "item.decisland.unknow_book": "未知的书", "item.decisland.uranium": "铀", "item.decisland.uranium_apple": "铀苹果", + "item.decisland.vampire_bat_by_boss_spawn_egg": "生成吸血蝙蝠", + "item.decisland.vampire_bat_spawn_egg": "生成 吸血蝙蝠", "item.decisland.vengeful_ghost_mask": "怨魂面具", + "item.decisland.vengeful_ghost_spawn_egg": "生成 怨魂", "item.decisland.vex_mask": "恼鬼面具", "item.decisland.village_guardian": "村庄守卫", "item.decisland.villager_mask": "村民面具", + "item.decisland.vindicator_by_boss_spawn_egg": "生成卫道士", "item.decisland.void_whispering_dagger": "虚空之低语", "item.decisland.vortex": "旋涡", "item.decisland.wandering_trader_mask": "流浪商人面具", "item.decisland.warden_sword": "匿潜刃", "item.decisland.warped_skeleton_mask": "扭曲骷髅面具", + "item.decisland.warped_skeleton_spawn_egg": "生成 扭曲骷髅", "item.decisland.waste": "废料", + "item.decisland.watcher_spawn_egg": "生成 看守者", "item.decisland.wave_magic_book": "波涌魔法书", "item.decisland.werewolf_mask": "狼人面具", + "item.decisland.werewolf_spawn_egg": "生成 狼人", "item.decisland.white_shoes": "白鞋", "item.decisland.white_t_shirt": "白短袖", "item.decisland.wind_dagger": "冽风", @@ -1185,8 +1340,10 @@ "item.decisland.yellow_jellyfish": "黄水母", "item.decisland.zombie_brain": "僵尸大脑", "item.decisland.zombie_fish": "僵尸鱼", + "item.decisland.zombie_fish_spawn_egg": "生成 僵尸鱼", "item.decisland.zombie_mask": "僵尸面具", "item.decisland.zombie_summoner_mask": "僵尸召唤师面具", + "item.decisland.zombie_summoner_spawn_egg": "生成 僵尸召唤师", "item.decisland.zombie_villager_mask": "僵尸村民面具", "item.decisland.zombie_warrior_mask": "僵尸战士面具", "item.record_star.desc": "fish - 拥抱星辰", @@ -1319,6 +1476,7 @@ "itemGroup.decisland_accessories_tab": "DecIsland 饰品", "itemGroup.decisland_blocks_tab": "DecIsland 方块", "itemGroup.decisland_crops_tab": "DecIsland 作物", + "itemGroup.decisland_entities_tab": "DecIsland 生物", "itemGroup.decisland_foods_tab": "DecIsland 食物", "itemGroup.decisland_masks_tab": "DecIsland 面具", "itemGroup.decisland_materials_tab": "DecIsland 材料", diff --git a/src/main/java/com/dec/decisland/datagen/Lang/BedrockLangResources.kt b/src/main/java/com/dec/decisland/datagen/Lang/BedrockLangResources.kt index 6894757..5b3b799 100644 --- a/src/main/java/com/dec/decisland/datagen/Lang/BedrockLangResources.kt +++ b/src/main/java/com/dec/decisland/datagen/Lang/BedrockLangResources.kt @@ -26,6 +26,10 @@ object BedrockLangResources { @JvmStatic fun itemName(locale: String, name: String): String? = get(locale, javaItemKey(name)) + @JvmStatic + fun spawnEggName(locale: String, name: String): String? = + get(locale, "item.spawn_egg.entity.dec:$name.name") + @JvmStatic fun blockName(locale: String, name: String): String? = get(locale, javaBlockKey(name)) diff --git a/src/main/java/com/dec/decisland/datagen/ModLangProvider.kt b/src/main/java/com/dec/decisland/datagen/ModLangProvider.kt index b7c4f54..ea6dcdb 100644 --- a/src/main/java/com/dec/decisland/datagen/ModLangProvider.kt +++ b/src/main/java/com/dec/decisland/datagen/ModLangProvider.kt @@ -3,6 +3,7 @@ package com.dec.decisland.datagen import com.dec.decisland.DecIsland import com.dec.decisland.block.ModBlocks import com.dec.decisland.effect.ModEffects +import com.dec.decisland.entity.GeneratedMobs import com.dec.decisland.item.ModCreativeModeTabs import com.dec.decisland.item.ModItems import com.dec.decisland.datagen.Lang.BedrockLangResources @@ -39,6 +40,18 @@ abstract class ModLangProvider protected constructor( translations["itemGroup.${config.name}"] = translation } + // 生成生物刷怪蛋:基岩版 spawn_egg 条目优先,缺失时用实体名生成(生成 哥布林法师 / Spawn Goblin Wizard) + GeneratedMobs.SPAWN_EGGS.entries.forEach { entry -> + val entityName = entry.id.path.removeSuffix("_spawn_egg") + val eggName = BedrockLangResources.spawnEggName(locale, entityName) + ?: translations["entity.${DecIsland.MOD_ID}.$entityName"]?.let { base -> + if (locale == "zh_cn") "生成$base" else "Spawn $base" + } + if (eggName != null) { + translations["item.${DecIsland.MOD_ID}.${entry.id.path}"] = eggName + } + } + when (locale) { "en_us" -> translations[ModEffects.DIZZINESS.get().descriptionId] = "Dizziness" "zh_cn" -> translations[ModEffects.DIZZINESS.get().descriptionId] = "眩晕" diff --git a/src/main/java/com/dec/decisland/entity/GeneratedMobs.kt b/src/main/java/com/dec/decisland/entity/GeneratedMobs.kt index 695df2e..2d4896a 100644 --- a/src/main/java/com/dec/decisland/entity/GeneratedMobs.kt +++ b/src/main/java/com/dec/decisland/entity/GeneratedMobs.kt @@ -14,11 +14,14 @@ import net.minecraft.world.entity.ai.attributes.AttributeSupplier import net.minecraft.world.entity.ai.attributes.Attributes import net.minecraft.world.entity.monster.Monster import net.minecraft.world.entity.Mob +import net.minecraft.world.item.Item import net.minecraft.world.level.levelgen.Heightmap import net.neoforged.bus.api.IEventBus +import net.neoforged.neoforge.common.DeferredSpawnEggItem import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent import net.neoforged.neoforge.event.entity.RegisterSpawnPlacementsEvent import net.neoforged.neoforge.registries.DeferredHolder +import net.neoforged.neoforge.registries.DeferredItem import net.neoforged.neoforge.registries.DeferredRegister import java.util.function.Supplier @@ -28,6 +31,10 @@ object GeneratedMobs { val ENTITY_TYPES: DeferredRegister> = DeferredRegister.create(Registries.ENTITY_TYPE, DecIsland.MOD_ID) + @JvmField + val SPAWN_EGGS: DeferredRegister.Items = + DeferredRegister.createItems(DecIsland.MOD_ID) + private fun registerEntity( name: String, factory: (EntityType, Level) -> T, @@ -44,6 +51,12 @@ object GeneratedMobs { sized(0.60f, 1.80f) } + @JvmField + val ABYSSAL_CONTROLLER_EGG: DeferredItem = + SPAWN_EGGS.register("abyssal_controller_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ABYSSAL_CONTROLLER.get() }, 14147036, 16777215, Item.Properties()) + }) + private val CFG_ABYSSAL_SHADOW = MobConfig("abyssal_shadow", health = 10.0, speed = 0.250, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager"), rangedProjectile = Supplier { ModEntities.WAVE_ENERGY.get() }) @JvmField @@ -52,24 +65,48 @@ object GeneratedMobs { sized(1.00f, 1.00f) } + @JvmField + val ABYSSAL_SHADOW_EGG: DeferredItem = + SPAWN_EGGS.register("abyssal_shadow_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ABYSSAL_SHADOW.get() }, 6983555, 10605507, Item.Properties()) + }) + @JvmField val ANGRY_CHICKEN: Supplier> = registerEntity("angry_chicken", { type, level -> AngryChicken(type, level) }, MobCategory.MONSTER) { sized(0.60f, 0.80f) } + @JvmField + val ANGRY_CHICKEN_EGG: DeferredItem = + SPAWN_EGGS.register("angry_chicken_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ANGRY_CHICKEN.get() }, 14535363, 16777215, Item.Properties()) + }) + @JvmField val ARCHER: Supplier> = registerEntity("archer", { type, level -> Archer(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val ARCHER_EGG: DeferredItem = + SPAWN_EGGS.register("archer_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ARCHER.get() }, 7889494, 11835014, Item.Properties()) + }) + @JvmField val ASH_BLAZE: Supplier> = registerEntity("ash_blaze", { type, level -> AshBlaze(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f).fireImmune() } + @JvmField + val ASH_BLAZE_EGG: DeferredItem = + SPAWN_EGGS.register("ash_blaze_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ASH_BLAZE.get() }, 3881531, 6447457, Item.Properties()) + }) + private val CFG_ASH_BOMB = MobConfig("ash_bomb", health = 10.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -78,6 +115,12 @@ object GeneratedMobs { sized(1.00f, 0.50f) } + @JvmField + val ASH_BOMB_EGG: DeferredItem = + SPAWN_EGGS.register("ash_bomb_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ASH_BOMB.get() }, 11687220, 16745816, Item.Properties()) + }) + private val CFG_ASH_HORSE = MobConfig("ash_horse", health = 300.0, speed = 0.250, attackDamage = 3.0, followRange = 96.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = true, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "villager")) @JvmField @@ -86,6 +129,12 @@ object GeneratedMobs { sized(1.40f, 1.60f) } + @JvmField + val ASH_HORSE_EGG: DeferredItem = + SPAWN_EGGS.register("ash_horse_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ASH_HORSE.get() }, 3680038, 6178374, Item.Properties()) + }) + private val CFG_ASH_HORSE_HEAD = MobConfig("ash_horse_head", health = 150.0, speed = 0.080, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = true, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem")) @JvmField @@ -94,6 +143,12 @@ object GeneratedMobs { sized(1.00f, 1.00f) } + @JvmField + val ASH_HORSE_HEAD_EGG: DeferredItem = + SPAWN_EGGS.register("ash_horse_head_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ASH_HORSE_HEAD.get() }, 3680038, 6178374, Item.Properties()) + }) + private val CFG_ASH_KNIGHT = MobConfig("ash_knight", health = 400.0, speed = 0.200, attackDamage = 3.0, followRange = 96.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = true, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "villager")) @JvmField @@ -102,6 +157,12 @@ object GeneratedMobs { sized(0.60f, 1.90f) } + @JvmField + val ASH_KNIGHT_EGG: DeferredItem = + SPAWN_EGGS.register("ash_knight_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ASH_KNIGHT.get() }, 2893093, 5129284, Item.Properties()) + }) + private val CFG_ASH_KNIGHT_HEAD = MobConfig("ash_knight_head", health = 300.0, speed = 0.250, attackDamage = 14.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = true, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "villager")) @JvmField @@ -110,12 +171,24 @@ object GeneratedMobs { sized(0.80f, 0.80f) } + @JvmField + val ASH_KNIGHT_HEAD_EGG: DeferredItem = + SPAWN_EGGS.register("ash_knight_head_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ASH_KNIGHT_HEAD.get() }, 2893093, 5129284, Item.Properties()) + }) + @JvmField val ASH_PUFFERFISH: Supplier> = registerEntity("ash_pufferfish", { type, level -> AshPufferfish(type, level) }, MobCategory.WATER_CREATURE) { sized(0.80f, 0.80f) } + @JvmField + val ASH_PUFFERFISH_EGG: DeferredItem = + SPAWN_EGGS.register("ash_pufferfish_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ASH_PUFFERFISH.get() }, 11444882, 16641496, Item.Properties()) + }) + private val CFG_ASH_SWORD = MobConfig("ash_sword", health = 100.0, speed = 1.700, attackDamage = 10.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = true, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -124,6 +197,12 @@ object GeneratedMobs { sized(1.00f, 0.50f) } + @JvmField + val ASH_SWORD_EGG: DeferredItem = + SPAWN_EGGS.register("ash_sword_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ASH_SWORD.get() }, 5967647, 9250364, Item.Properties()) + }) + private val CFG_ASH_SWORD_PHANTOM = MobConfig("ash_sword_phantom", health = 8.0, speed = 4.000, attackDamage = 10.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = true, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -132,18 +211,36 @@ object GeneratedMobs { sized(1.00f, 1.00f) } + @JvmField + val ASH_SWORD_PHANTOM_EGG: DeferredItem = + SPAWN_EGGS.register("ash_sword_phantom_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ASH_SWORD_PHANTOM.get() }, 5967647, 9250364, Item.Properties()) + }) + @JvmField val BABY_ENDER_DRAGON: Supplier> = registerEntity("baby_ender_dragon", { type, level -> BabyEnderDragon(type, level) }, MobCategory.MONSTER) { sized(3.00f, 1.50f).fireImmune() } + @JvmField + val BABY_ENDER_DRAGON_EGG: DeferredItem = + SPAWN_EGGS.register("baby_ender_dragon_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { BABY_ENDER_DRAGON.get() }, 2433830, 4538949, Item.Properties()) + }) + @JvmField val BAT_CHARGER: Supplier> = registerEntity("bat_charger", { type, level -> BatCharger(type, level) }, MobCategory.MONSTER) { sized(0.80f, 1.44f) } + @JvmField + val BAT_CHARGER_EGG: DeferredItem = + SPAWN_EGGS.register("bat_charger_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { BAT_CHARGER.get() }, 11678887, 16734451, Item.Properties()) + }) + private val CFG_BLACKSTONE_THORN = MobConfig("blackstone_thorn", health = 27.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = true, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -152,30 +249,60 @@ object GeneratedMobs { sized(1.00f, 2.00f) } + @JvmField + val BLACKSTONE_THORN_EGG: DeferredItem = + SPAWN_EGGS.register("blackstone_thorn_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { BLACKSTONE_THORN.get() }, 3453506, 5832555, Item.Properties()) + }) + @JvmField val BLOOD_ZOMBIE: Supplier> = registerEntity("blood_zombie", { type, level -> BloodZombie(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.60f) } + @JvmField + val BLOOD_ZOMBIE_EGG: DeferredItem = + SPAWN_EGGS.register("blood_zombie_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { BLOOD_ZOMBIE.get() }, 7582260, 11403096, Item.Properties()) + }) + @JvmField val BOMBER: Supplier> = registerEntity("bomber", { type, level -> Bomber(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f).fireImmune() } + @JvmField + val BOMBER_EGG: DeferredItem = + SPAWN_EGGS.register("bomber_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { BOMBER.get() }, 9190686, 13591867, Item.Properties()) + }) + @JvmField val BROWN_BEAR: Supplier> = registerEntity("brown_bear", { type, level -> BrownBear(type, level) }, MobCategory.CREATURE) { sized(1.30f, 1.40f) } + @JvmField + val BROWN_BEAR_EGG: DeferredItem = + SPAWN_EGGS.register("brown_bear_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { BROWN_BEAR.get() }, 6566921, 10115102, Item.Properties()) + }) + @JvmField val CARNAGER: Supplier> = registerEntity("carnager", { type, level -> Carnager(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val CARNAGER_EGG: DeferredItem = + SPAWN_EGGS.register("carnager_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { CARNAGER.get() }, 4146237, 6778212, Item.Properties()) + }) + private val CFG_CHEST_MONSTER = MobConfig("chest_monster", health = 50.0, speed = 0.400, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = true, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "villager", "iron_golem")) @JvmField @@ -184,6 +311,12 @@ object GeneratedMobs { sized(1.00f, 1.00f) } + @JvmField + val CHEST_MONSTER_EGG: DeferredItem = + SPAWN_EGGS.register("chest_monster_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { CHEST_MONSTER.get() }, 5521183, 8611644, Item.Properties()) + }) + private val CFG_CHESTER = MobConfig("chester", health = 20.0, speed = 0.300, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = true, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -192,6 +325,12 @@ object GeneratedMobs { sized(0.56f, 0.56f) } + @JvmField + val CHESTER_EGG: DeferredItem = + SPAWN_EGGS.register("chester_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { CHESTER.get() }, 5521183, 8611644, Item.Properties()) + }) + private val CFG_CLAM = MobConfig("clam", health = 20.0, speed = 0.080, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = true, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -200,6 +339,12 @@ object GeneratedMobs { sized(0.30f, 0.30f) } + @JvmField + val CLAM_EGG: DeferredItem = + SPAWN_EGGS.register("clam_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { CLAM.get() }, 15390422, 16777215, Item.Properties()) + }) + private val CFG_CRAB = MobConfig("crab", health = 20.0, speed = 0.150, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = true, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -208,18 +353,36 @@ object GeneratedMobs { sized(0.30f, 0.30f) } + @JvmField + val CRAB_EGG: DeferredItem = + SPAWN_EGGS.register("crab_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { CRAB.get() }, 6250593, 9606037, Item.Properties()) + }) + @JvmField val CRIMSON_SLIME: Supplier> = registerEntity("crimson_slime", { type, level -> CrimsonSlime(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f) } + @JvmField + val CRIMSON_SLIME_EGG: DeferredItem = + SPAWN_EGGS.register("crimson_slime_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { CRIMSON_SLIME.get() }, 14579061, 16756912, Item.Properties()) + }) + @JvmField val DARK_SNOW_MAN: Supplier> = registerEntity("dark_snow_man", { type, level -> DarkSnowMan(type, level) }, MobCategory.CREATURE) { sized(0.40f, 1.80f) } + @JvmField + val DARK_SNOW_MAN_EGG: DeferredItem = + SPAWN_EGGS.register("dark_snow_man_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { DARK_SNOW_MAN.get() }, 3439538, 5814527, Item.Properties()) + }) + private val CFG_DARK_WEREWOLF = MobConfig("dark_werewolf", health = 100.0, speed = 0.250, attackDamage = 7.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = true, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -228,78 +391,156 @@ object GeneratedMobs { sized(0.60f, 1.90f) } + @JvmField + val DARK_WEREWOLF_EGG: DeferredItem = + SPAWN_EGGS.register("dark_werewolf_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { DARK_WEREWOLF.get() }, 2903402, 5077409, Item.Properties()) + }) + @JvmField val DOCTOR: Supplier> = registerEntity("doctor", { type, level -> Doctor(type, level) }, MobCategory.CREATURE) { sized(0.60f, 1.90f) } + @JvmField + val DOCTOR_EGG: DeferredItem = + SPAWN_EGGS.register("doctor_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { DOCTOR.get() }, 7757395, 11637122, Item.Properties()) + }) + @JvmField val ELF_OF_ASH: Supplier> = registerEntity("elf_of_ash", { type, level -> ElfOfAsh(type, level) }, MobCategory.MONSTER) { sized(0.40f, 0.80f).fireImmune() } + @JvmField + val ELF_OF_ASH_EGG: DeferredItem = + SPAWN_EGGS.register("elf_of_ash_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ELF_OF_ASH.get() }, 11579956, 16777048, Item.Properties()) + }) + @JvmField val ELF_OF_CHAOS: Supplier> = registerEntity("elf_of_chaos", { type, level -> ElfOfChaos(type, level) }, MobCategory.CREATURE) { sized(0.60f, 2.00f).fireImmune() } + @JvmField + val ELF_OF_CHAOS_EGG: DeferredItem = + SPAWN_EGGS.register("elf_of_chaos_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ELF_OF_CHAOS.get() }, 11678812, 16734350, Item.Properties()) + }) + @JvmField val ELF_OF_DEEP: Supplier> = registerEntity("elf_of_deep", { type, level -> ElfOfDeep(type, level) }, MobCategory.MONSTER) { sized(0.40f, 0.80f).fireImmune() } + @JvmField + val ELF_OF_DEEP_EGG: DeferredItem = + SPAWN_EGGS.register("elf_of_deep_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ELF_OF_DEEP.get() }, 8952233, 13230582, Item.Properties()) + }) + @JvmField val ELF_OF_DUST: Supplier> = registerEntity("elf_of_dust", { type, level -> ElfOfDust(type, level) }, MobCategory.MONSTER) { sized(0.40f, 0.80f).fireImmune() } + @JvmField + val ELF_OF_DUST_EGG: DeferredItem = + SPAWN_EGGS.register("elf_of_dust_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ELF_OF_DUST.get() }, 9605778, 14145495, Item.Properties()) + }) + @JvmField val ENCHANT_ARMOR: Supplier> = registerEntity("enchant_armor", { type, level -> EnchantArmor(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f) } + @JvmField + val ENCHANT_ARMOR_EGG: DeferredItem = + SPAWN_EGGS.register("enchant_armor_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ENCHANT_ARMOR.get() }, 8106548, 12123992, Item.Properties()) + }) + @JvmField val ENCHANT_ARMOR_BY_BOSS: Supplier> = registerEntity("enchant_armor_by_boss", { type, level -> EnchantArmorByBoss(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f) } + @JvmField + val ENCHANT_ARMOR_BY_BOSS_EGG: DeferredItem = + SPAWN_EGGS.register("enchant_armor_by_boss_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ENCHANT_ARMOR_BY_BOSS.get() }, 3453614, 5832701, Item.Properties()) + }) + @JvmField val ENCHANT_DIAMOND_ARMOR: Supplier> = registerEntity("enchant_diamond_armor", { type, level -> EnchantDiamondArmor(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f) } + @JvmField + val ENCHANT_DIAMOND_ARMOR_EGG: DeferredItem = + SPAWN_EGGS.register("enchant_diamond_armor_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ENCHANT_DIAMOND_ARMOR.get() }, 3453586, 5832663, Item.Properties()) + }) + @JvmField val ENCHANT_ILLAGER: Supplier> = registerEntity("enchant_illager", { type, level -> EnchantIllager(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val ENCHANT_ILLAGER_EGG: DeferredItem = + SPAWN_EGGS.register("enchant_illager_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ENCHANT_ILLAGER.get() }, 3453603, 5832686, Item.Properties()) + }) + @JvmField val ENCHANT_ILLAGER_1: Supplier> = registerEntity("enchant_illager_1", { type, level -> EnchantIllager1(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val ENCHANT_ILLAGER_1_EGG: DeferredItem = + SPAWN_EGGS.register("enchant_illager_1_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ENCHANT_ILLAGER_1.get() }, 11678812, 16734350, Item.Properties()) + }) + @JvmField val ENCHANT_ILLAGER_2: Supplier> = registerEntity("enchant_illager_2", { type, level -> EnchantIllager2(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val ENCHANT_ILLAGER_2_EGG: DeferredItem = + SPAWN_EGGS.register("enchant_illager_2_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ENCHANT_ILLAGER_2.get() }, 3453584, 5832660, Item.Properties()) + }) + @JvmField val END_STONE_GOLEM: Supplier> = registerEntity("end_stone_golem", { type, level -> EndStoneGolem(type, level) }, MobCategory.CREATURE) { sized(1.40f, 2.90f).fireImmune() } + @JvmField + val END_STONE_GOLEM_EGG: DeferredItem = + SPAWN_EGGS.register("end_stone_golem_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { END_STONE_GOLEM.get() }, 14277534, 16777192, Item.Properties()) + }) + private val CFG_ENDER_SNAIL = MobConfig("ender_snail", health = 30.0, speed = 0.200, attackDamage = 5.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -308,6 +549,12 @@ object GeneratedMobs { sized(0.80f, 0.80f) } + @JvmField + val ENDER_SNAIL_EGG: DeferredItem = + SPAWN_EGGS.register("ender_snail_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ENDER_SNAIL.get() }, 4928690, 7821567, Item.Properties()) + }) + private val CFG_ENDER_SNAKE = MobConfig("ender_snake", health = 30.0, speed = 0.080, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -316,18 +563,36 @@ object GeneratedMobs { sized(1.00f, 0.60f) } + @JvmField + val ENDER_SNAKE_EGG: DeferredItem = + SPAWN_EGGS.register("ender_snake_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ENDER_SNAKE.get() }, 6040668, 9391502, Item.Properties()) + }) + @JvmField val ENDER_WITCH: Supplier> = registerEntity("ender_witch", { type, level -> EnderWitch(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val ENDER_WITCH_EGG: DeferredItem = + SPAWN_EGGS.register("ender_witch_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ENDER_WITCH.get() }, 3453519, 5832573, Item.Properties()) + }) + @JvmField val ENDER_WITCH_PUPPET: Supplier> = registerEntity("ender_witch_puppet", { type, level -> EnderWitchPuppet(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val ENDER_WITCH_PUPPET_EGG: DeferredItem = + SPAWN_EGGS.register("ender_witch_puppet_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ENDER_WITCH_PUPPET.get() }, 4731208, 7558516, Item.Properties()) + }) + private val CFG_ENTITY_SOUL = MobConfig("entity_soul", health = 170.0, speed = 0.500, attackDamage = 3.0, followRange = 96.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = true, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -336,6 +601,12 @@ object GeneratedMobs { sized(0.60f, 1.80f) } + @JvmField + val ENTITY_SOUL_EGG: DeferredItem = + SPAWN_EGGS.register("entity_soul_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ENTITY_SOUL.get() }, 8151882, 12163191, Item.Properties()) + }) + private val CFG_ENTITY_SOUL_1 = MobConfig("entity_soul_1", health = 100.0, speed = 0.500, attackDamage = 3.0, followRange = 96.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = true, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -344,6 +615,12 @@ object GeneratedMobs { sized(0.60f, 1.80f) } + @JvmField + val ENTITY_SOUL_1_EGG: DeferredItem = + SPAWN_EGGS.register("entity_soul_1_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ENTITY_SOUL_1.get() }, 8151882, 12163191, Item.Properties()) + }) + private val CFG_ESCAPED_SOUL_ENTITY = MobConfig("escaped_soul_entity", health = 400.0, speed = 0.320, attackDamage = 20.0, followRange = 32.0, knockbackResistance = 0.70, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem")) @JvmField @@ -352,6 +629,12 @@ object GeneratedMobs { sized(0.60f, 1.80f) } + @JvmField + val ESCAPED_SOUL_ENTITY_EGG: DeferredItem = + SPAWN_EGGS.register("escaped_soul_entity_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ESCAPED_SOUL_ENTITY.get() }, 7649707, 11534329, Item.Properties()) + }) + private val CFG_EVERLASTING_WINTER_GHAST = MobConfig("everlasting_winter_ghast", health = 300.0, speed = 0.350, attackDamage = 2.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem")) @JvmField @@ -360,12 +643,24 @@ object GeneratedMobs { sized(0.60f, 1.80f) } + @JvmField + val EVERLASTING_WINTER_GHAST_EGG: DeferredItem = + SPAWN_EGGS.register("everlasting_winter_ghast_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { EVERLASTING_WINTER_GHAST.get() }, 11914482, 16777215, Item.Properties()) + }) + @JvmField val EVERLASTING_WINTER_GHAST_1: Supplier> = registerEntity("everlasting_winter_ghast_1", { type, level -> EverlastingWinterGhast1(type, level) }, MobCategory.MONSTER) { sized(5.00f, 5.00f).fireImmune() } + @JvmField + val EVERLASTING_WINTER_GHAST_1_EGG: DeferredItem = + SPAWN_EGGS.register("everlasting_winter_ghast_1_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { EVERLASTING_WINTER_GHAST_1.get() }, 4630941, 7403238, Item.Properties()) + }) + private val CFG_EVERLASTING_WINTER_SHADOW = MobConfig("everlasting_winter_shadow", health = 50.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = true, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -374,18 +669,36 @@ object GeneratedMobs { sized(0.60f, 1.80f) } + @JvmField + val EVERLASTING_WINTER_SHADOW_EGG: DeferredItem = + SPAWN_EGGS.register("everlasting_winter_shadow_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { EVERLASTING_WINTER_SHADOW.get() }, 12768237, 16777215, Item.Properties()) + }) + @JvmField val EVIL_SNOW_MAN: Supplier> = registerEntity("evil_snow_man", { type, level -> EvilSnowMan(type, level) }, MobCategory.CREATURE) { sized(0.40f, 1.80f) } + @JvmField + val EVIL_SNOW_MAN_EGG: DeferredItem = + SPAWN_EGGS.register("evil_snow_man_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { EVIL_SNOW_MAN.get() }, 11695924, 16757592, Item.Properties()) + }) + @JvmField val FIRE_STORM: Supplier> = registerEntity("fire_storm", { type, level -> FireStorm(type, level) }, MobCategory.MONSTER) { sized(0.30f, 0.90f).fireImmune() } + @JvmField + val FIRE_STORM_EGG: DeferredItem = + SPAWN_EGGS.register("fire_storm_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { FIRE_STORM.get() }, 12684066, 16764480, Item.Properties()) + }) + private val CFG_FRIENDLY_LITTLE_SOUL = MobConfig("friendly_little_soul", health = 8.0, speed = 0.200, attackDamage = 4.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -394,18 +707,36 @@ object GeneratedMobs { sized(0.60f, 1.50f) } + @JvmField + val FRIENDLY_LITTLE_SOUL_EGG: DeferredItem = + SPAWN_EGGS.register("friendly_little_soul_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { FRIENDLY_LITTLE_SOUL.get() }, 15790320, 16777215, Item.Properties()) + }) + @JvmField val FRIENDLY_SPIDER: Supplier> = registerEntity("friendly_spider", { type, level -> FriendlySpider(type, level) }, MobCategory.MONSTER) { sized(0.70f, 0.45f) } + @JvmField + val FRIENDLY_SPIDER_EGG: DeferredItem = + SPAWN_EGGS.register("friendly_spider_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { FRIENDLY_SPIDER.get() }, 4545366, 7310725, Item.Properties()) + }) + @JvmField val FROZEN_GHAST: Supplier> = registerEntity("frozen_ghast", { type, level -> FrozenGhast(type, level) }, MobCategory.MONSTER) { sized(2.00f, 2.00f).fireImmune() } + @JvmField + val FROZEN_GHAST_EGG: DeferredItem = + SPAWN_EGGS.register("frozen_ghast_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { FROZEN_GHAST.get() }, 15462126, 16777215, Item.Properties()) + }) + private val CFG_FROZEN_HEART = MobConfig("frozen_heart", health = 150.0, speed = 0.080, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem")) @JvmField @@ -414,6 +745,12 @@ object GeneratedMobs { sized(1.00f, 1.00f) } + @JvmField + val FROZEN_HEART_EGG: DeferredItem = + SPAWN_EGGS.register("frozen_heart_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { FROZEN_HEART.get() }, 5429721, 8454143, Item.Properties()) + }) + private val CFG_FROZEN_HEART_SLEEPING = MobConfig("frozen_heart_sleeping", health = 1000000.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = true, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -422,12 +759,24 @@ object GeneratedMobs { sized(1.00f, 1.00f) } + @JvmField + val FROZEN_HEART_SLEEPING_EGG: DeferredItem = + SPAWN_EGGS.register("frozen_heart_sleeping_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { FROZEN_HEART_SLEEPING.get() }, 3438514, 5813247, Item.Properties()) + }) + @JvmField val FROZEN_MAN: Supplier> = registerEntity("frozen_man", { type, level -> FrozenMan(type, level) }, MobCategory.CREATURE) { sized(0.40f, 1.80f) } + @JvmField + val FROZEN_MAN_EGG: DeferredItem = + SPAWN_EGGS.register("frozen_man_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { FROZEN_MAN.get() }, 3442866, 5819135, Item.Properties()) + }) + private val CFG_FROZEN_SHADOW = MobConfig("frozen_shadow", health = 24.0, speed = 4.000, attackDamage = 10.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -436,18 +785,36 @@ object GeneratedMobs { sized(0.60f, 1.80f) } + @JvmField + val FROZEN_SHADOW_EGG: DeferredItem = + SPAWN_EGGS.register("frozen_shadow_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { FROZEN_SHADOW.get() }, 14016755, 16777215, Item.Properties()) + }) + @JvmField val FROZEN_SPIDER: Supplier> = registerEntity("frozen_spider", { type, level -> FrozenSpider(type, level) }, MobCategory.MONSTER) { sized(1.40f, 0.90f) } + @JvmField + val FROZEN_SPIDER_EGG: DeferredItem = + SPAWN_EGGS.register("frozen_spider_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { FROZEN_SPIDER.get() }, 16382972, 16777215, Item.Properties()) + }) + @JvmField val GARGOYLE: Supplier> = registerEntity("gargoyle", { type, level -> Gargoyle(type, level) }, MobCategory.MONSTER) { sized(1.00f, 1.80f) } + @JvmField + val GARGOYLE_EGG: DeferredItem = + SPAWN_EGGS.register("gargoyle_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { GARGOYLE.get() }, 11709492, 16775768, Item.Properties()) + }) + private val CFG_GHOST_DIAMOND_AXE = MobConfig("ghost_diamond_axe", health = 40.0, speed = 0.200, attackDamage = 6.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "villager")) @JvmField @@ -456,6 +823,12 @@ object GeneratedMobs { sized(0.40f, 1.80f) } + @JvmField + val GHOST_DIAMOND_AXE_EGG: DeferredItem = + SPAWN_EGGS.register("ghost_diamond_axe_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { GHOST_DIAMOND_AXE.get() }, 11678797, 16734330, Item.Properties()) + }) + private val CFG_GHOST_DIAMOND_STAFF = MobConfig("ghost_diamond_staff", health = 40.0, speed = 0.080, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "villager", "iron_golem", "snow_golem"), rangedProjectile = Supplier { ModEntities.STREAM_ENERGY_BALL.get() }) @JvmField @@ -464,6 +837,12 @@ object GeneratedMobs { sized(0.60f, 1.80f) } + @JvmField + val GHOST_DIAMOND_STAFF_EGG: DeferredItem = + SPAWN_EGGS.register("ghost_diamond_staff_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { GHOST_DIAMOND_STAFF.get() }, 5289642, 8323064, Item.Properties()) + }) + private val CFG_GHOST_DIAMOND_SWORD = MobConfig("ghost_diamond_sword", health = 40.0, speed = 1.400, attackDamage = 7.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -472,6 +851,12 @@ object GeneratedMobs { sized(1.00f, 1.00f) } + @JvmField + val GHOST_DIAMOND_SWORD_EGG: DeferredItem = + SPAWN_EGGS.register("ghost_diamond_sword_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { GHOST_DIAMOND_SWORD.get() }, 2251084, 4229753, Item.Properties()) + }) + private val CFG_GHOST_IRON_AXE = MobConfig("ghost_iron_axe", health = 20.0, speed = 0.200, attackDamage = 5.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "villager")) @JvmField @@ -480,6 +865,12 @@ object GeneratedMobs { sized(0.40f, 1.80f) } + @JvmField + val GHOST_IRON_AXE_EGG: DeferredItem = + SPAWN_EGGS.register("ghost_iron_axe_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { GHOST_IRON_AXE.get() }, 7169366, 10918534, Item.Properties()) + }) + private val CFG_GHOST_IRON_SWORD = MobConfig("ghost_iron_sword", health = 20.0, speed = 1.800, attackDamage = 6.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -488,6 +879,12 @@ object GeneratedMobs { sized(1.00f, 1.00f) } + @JvmField + val GHOST_IRON_SWORD_EGG: DeferredItem = + SPAWN_EGGS.register("ghost_iron_sword_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { GHOST_IRON_SWORD.get() }, 5723474, 8881537, Item.Properties()) + }) + private val CFG_GHOST_WOODEN_STAFF = MobConfig("ghost_wooden_staff", health = 20.0, speed = 0.080, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "villager", "iron_golem", "snow_golem"), rangedProjectile = Supplier { ModEntities.ENERGY_BALL.get() }) @JvmField @@ -496,6 +893,12 @@ object GeneratedMobs { sized(0.60f, 1.80f) } + @JvmField + val GHOST_WOODEN_STAFF_EGG: DeferredItem = + SPAWN_EGGS.register("ghost_wooden_staff_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { GHOST_WOODEN_STAFF.get() }, 8481601, 12624745, Item.Properties()) + }) + private val CFG_GHOST_WOODEN_SWORD = MobConfig("ghost_wooden_sword", health = 10.0, speed = 1.800, attackDamage = 4.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -504,12 +907,24 @@ object GeneratedMobs { sized(1.00f, 1.00f) } + @JvmField + val GHOST_WOODEN_SWORD_EGG: DeferredItem = + SPAWN_EGGS.register("ghost_wooden_sword_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { GHOST_WOODEN_SWORD.get() }, 4075282, 6705450, Item.Properties()) + }) + @JvmField val GINGERBREAD_MAN_BY_TOTEM: Supplier> = registerEntity("gingerbread_man_by_totem", { type, level -> GingerbreadManByTotem(type, level) }, MobCategory.MONSTER) { sized(0.30f, 0.54f) } + @JvmField + val GINGERBREAD_MAN_BY_TOTEM_EGG: DeferredItem = + SPAWN_EGGS.register("gingerbread_man_by_totem_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { GINGERBREAD_MAN_BY_TOTEM.get() }, 3438514, 5813247, Item.Properties()) + }) + private val CFG_GOBLIN = MobConfig("goblin", health = 30.0, speed = 0.350, attackDamage = 2.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -518,6 +933,12 @@ object GeneratedMobs { sized(0.80f, 1.30f) } + @JvmField + val GOBLIN_EGG: DeferredItem = + SPAWN_EGGS.register("goblin_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { GOBLIN.get() }, 11678793, 16734325, Item.Properties()) + }) + private val CFG_GOBLIN_SNIPER = MobConfig("goblin_sniper", health = 20.0, speed = 0.200, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player"), rangedProjectile = Supplier { ModEntities.BULLET_BY_FLINTLOCK_PRO.get() }) @JvmField @@ -526,6 +947,12 @@ object GeneratedMobs { sized(0.80f, 1.30f) } + @JvmField + val GOBLIN_SNIPER_EGG: DeferredItem = + SPAWN_EGGS.register("goblin_sniper_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { GOBLIN_SNIPER.get() }, 10040498, 14768383, Item.Properties()) + }) + private val CFG_GOBLIN_WIZARD = MobConfig("goblin_wizard", health = 20.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player"), rangedProjectile = Supplier { ModEntities.GOLDEN_ENERGY_BALL.get() }) @JvmField @@ -534,6 +961,12 @@ object GeneratedMobs { sized(0.80f, 1.30f) } + @JvmField + val GOBLIN_WIZARD_EGG: DeferredItem = + SPAWN_EGGS.register("goblin_wizard_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { GOBLIN_WIZARD.get() }, 10596916, 15466328, Item.Properties()) + }) + private val CFG_HOST_OF_DEEP = MobConfig("host_of_deep", health = 400.0, speed = 0.500, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -542,24 +975,48 @@ object GeneratedMobs { sized(0.60f, 1.90f) } + @JvmField + val HOST_OF_DEEP_EGG: DeferredItem = + SPAWN_EGGS.register("host_of_deep_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { HOST_OF_DEEP.get() }, 4603453, 7366244, Item.Properties()) + }) + @JvmField val ICE_BAT: Supplier> = registerEntity("ice_bat", { type, level -> IceBat(type, level) }, MobCategory.MONSTER) { sized(0.50f, 0.90f) } + @JvmField + val ICE_BAT_EGG: DeferredItem = + SPAWN_EGGS.register("ice_bat_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ICE_BAT.get() }, 15003126, 16777215, Item.Properties()) + }) + @JvmField val ICE_BLAZE: Supplier> = registerEntity("ice_blaze", { type, level -> IceBlaze(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f).fireImmune() } + @JvmField + val ICE_BLAZE_EGG: DeferredItem = + SPAWN_EGGS.register("ice_blaze_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ICE_BLAZE.get() }, 7577584, 11397631, Item.Properties()) + }) + @JvmField val ICE_CREEPER: Supplier> = registerEntity("ice_creeper", { type, level -> IceCreeper(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f).fireImmune() } + @JvmField + val ICE_CREEPER_EGG: DeferredItem = + SPAWN_EGGS.register("ice_creeper_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ICE_CREEPER.get() }, 13492218, 16777215, Item.Properties()) + }) + private val CFG_ICE_MONSTER = MobConfig("ice_monster", health = 100.0, speed = 0.250, attackDamage = 15.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "villager")) @JvmField @@ -568,6 +1025,12 @@ object GeneratedMobs { sized(1.20f, 2.90f) } + @JvmField + val ICE_MONSTER_EGG: DeferredItem = + SPAWN_EGGS.register("ice_monster_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ICE_MONSTER.get() }, 13557757, 16777215, Item.Properties()) + }) + private val CFG_ICE_SPIRIT = MobConfig("ice_spirit", health = 20.0, speed = 0.300, attackDamage = 6.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "villager")) @JvmField @@ -576,6 +1039,12 @@ object GeneratedMobs { sized(0.60f, 0.60f) } + @JvmField + val ICE_SPIRIT_EGG: DeferredItem = + SPAWN_EGGS.register("ice_spirit_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ICE_SPIRIT.get() }, 12768504, 16777215, Item.Properties()) + }) + private val CFG_ICE_THORN = MobConfig("ice_thorn", health = 6.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = true, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -584,6 +1053,12 @@ object GeneratedMobs { sized(1.00f, 2.00f) } + @JvmField + val ICE_THORN_EGG: DeferredItem = + SPAWN_EGGS.register("ice_thorn_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ICE_THORN.get() }, 5354036, 8388440, Item.Properties()) + }) + private val CFG_ICE_WIZARD = MobConfig("ice_wizard", health = 120.0, speed = 0.500, attackDamage = 3.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -592,42 +1067,84 @@ object GeneratedMobs { sized(0.60f, 1.90f) } + @JvmField + val ICE_WIZARD_EGG: DeferredItem = + SPAWN_EGGS.register("ice_wizard_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ICE_WIZARD.get() }, 9677781, 14285311, Item.Properties()) + }) + @JvmField val ICE_ZOMBIE: Supplier> = registerEntity("ice_zombie", { type, level -> IceZombie(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f) } + @JvmField + val ICE_ZOMBIE_EGG: DeferredItem = + SPAWN_EGGS.register("ice_zombie_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ICE_ZOMBIE.get() }, 14871273, 16777215, Item.Properties()) + }) + @JvmField val ILLUSION_ZOMBIE: Supplier> = registerEntity("illusion_zombie", { type, level -> IllusionZombie(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val ILLUSION_ZOMBIE_EGG: DeferredItem = + SPAWN_EGGS.register("illusion_zombie_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ILLUSION_ZOMBIE.get() }, 6250335, 9605778, Item.Properties()) + }) + @JvmField val ILLUSIONER: Supplier> = registerEntity("illusioner", { type, level -> Illusioner(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val ILLUSIONER_EGG: DeferredItem = + SPAWN_EGGS.register("illusioner_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ILLUSIONER.get() }, 3627638, 6065329, Item.Properties()) + }) + @JvmField val ILLUSIONER_PUPPET: Supplier> = registerEntity("illusioner_puppet", { type, level -> IllusionerPuppet(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val ILLUSIONER_PUPPET_EGG: DeferredItem = + SPAWN_EGGS.register("illusioner_puppet_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ILLUSIONER_PUPPET.get() }, 3627638, 6065329, Item.Properties()) + }) + @JvmField val JUNGLE_SPIDER: Supplier> = registerEntity("jungle_spider", { type, level -> JungleSpider(type, level) }, MobCategory.MONSTER) { sized(0.40f, 0.30f) } + @JvmField + val JUNGLE_SPIDER_EGG: DeferredItem = + SPAWN_EGGS.register("jungle_spider_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { JUNGLE_SPIDER.get() }, 5661267, 8885891, Item.Properties()) + }) + @JvmField val KING_OF_PILLAGER: Supplier> = registerEntity("king_of_pillager", { type, level -> KingOfPillager(type, level) }, MobCategory.MONSTER) { sized(0.60f, 2.00f).fireImmune() } + @JvmField + val KING_OF_PILLAGER_EGG: DeferredItem = + SPAWN_EGGS.register("king_of_pillager_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { KING_OF_PILLAGER.get() }, 3453565, 5832635, Item.Properties()) + }) + private val CFG_LAVA_LIZARD = MobConfig("lava_lizard", health = 15.0, speed = 0.160, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -636,18 +1153,36 @@ object GeneratedMobs { sized(1.20f, 0.60f) } + @JvmField + val LAVA_LIZARD_EGG: DeferredItem = + SPAWN_EGGS.register("lava_lizard_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { LAVA_LIZARD.get() }, 11089074, 16144639, Item.Properties()) + }) + @JvmField val LIFE_INSECT: Supplier> = registerEntity("life_insect", { type, level -> LifeInsect(type, level) }, MobCategory.MONSTER) { sized(0.40f, 0.30f).fireImmune() } + @JvmField + val LIFE_INSECT_EGG: DeferredItem = + SPAWN_EGGS.register("life_insect_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { LIFE_INSECT.get() }, 13583923, 16740695, Item.Properties()) + }) + @JvmField val LITTLE_BAT: Supplier> = registerEntity("little_bat", { type, level -> LittleBat(type, level) }, MobCategory.MONSTER) { sized(0.40f, 0.72f) } + @JvmField + val LITTLE_BAT_EGG: DeferredItem = + SPAWN_EGGS.register("little_bat_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { LITTLE_BAT.get() }, 3942661, 6506777, Item.Properties()) + }) + private val CFG_LITTLE_SOUL = MobConfig("little_soul", health = 3.0, speed = 0.200, attackDamage = 6.0, followRange = 64.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -656,36 +1191,72 @@ object GeneratedMobs { sized(0.60f, 1.50f) } + @JvmField + val LITTLE_SOUL_EGG: DeferredItem = + SPAWN_EGGS.register("little_soul_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { LITTLE_SOUL.get() }, 15790320, 16777215, Item.Properties()) + }) + @JvmField val LURK_SKELETON: Supplier> = registerEntity("lurk_skeleton", { type, level -> LurkSkeleton(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f) } + @JvmField + val LURK_SKELETON_EGG: DeferredItem = + SPAWN_EGGS.register("lurk_skeleton_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { LURK_SKELETON.get() }, 1214090, 2869197, Item.Properties()) + }) + @JvmField val LURK_ZOMBIE: Supplier> = registerEntity("lurk_zombie", { type, level -> LurkZombie(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val LURK_ZOMBIE_EGG: DeferredItem = + SPAWN_EGGS.register("lurk_zombie_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { LURK_ZOMBIE.get() }, 1259580, 2907747, Item.Properties()) + }) + @JvmField val MUMMY: Supplier> = registerEntity("mummy", { type, level -> Mummy(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val MUMMY_EGG: DeferredItem = + SPAWN_EGGS.register("mummy_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { MUMMY.get() }, 14075565, 16777212, Item.Properties()) + }) + @JvmField val MUMMY_SKELETON: Supplier> = registerEntity("mummy_skeleton", { type, level -> MummySkeleton(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val MUMMY_SKELETON_EGG: DeferredItem = + SPAWN_EGGS.register("mummy_skeleton_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { MUMMY_SKELETON.get() }, 14075565, 16777211, Item.Properties()) + }) + @JvmField val MURLOC: Supplier> = registerEntity("murloc", { type, level -> Murloc(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val MURLOC_EGG: DeferredItem = + SPAWN_EGGS.register("murloc_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { MURLOC.get() }, 5012629, 7977434, Item.Properties()) + }) + private val CFG_MURLOC_WIZARD = MobConfig("murloc_wizard", health = 11.0, speed = 0.250, attackDamage = 5.0, followRange = 16.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player"), rangedProjectile = Supplier { ModEntities.WAVE_ENERGY.get() }) @JvmField @@ -694,6 +1265,12 @@ object GeneratedMobs { sized(0.60f, 1.90f) } + @JvmField + val MURLOC_WIZARD_EGG: DeferredItem = + SPAWN_EGGS.register("murloc_wizard_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { MURLOC_WIZARD.get() }, 5148060, 8114404, Item.Properties()) + }) + private val CFG_MUSHROOM_MONSTER = MobConfig("mushroom_monster", health = 20.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = true, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -702,18 +1279,36 @@ object GeneratedMobs { sized(0.30f, 0.30f) } + @JvmField + val MUSHROOM_MONSTER_EGG: DeferredItem = + SPAWN_EGGS.register("mushroom_monster_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { MUSHROOM_MONSTER.get() }, 14310479, 16748413, Item.Properties()) + }) + @JvmField val MUSHROOM_ZOMBIE: Supplier> = registerEntity("mushroom_zombie", { type, level -> MushroomZombie(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val MUSHROOM_ZOMBIE_EGG: DeferredItem = + SPAWN_EGGS.register("mushroom_zombie_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { MUSHROOM_ZOMBIE.get() }, 3369827, 5743512, Item.Properties()) + }) + @JvmField val MYSTICAL_SKELETON: Supplier> = registerEntity("mystical_skeleton", { type, level -> MysticalSkeleton(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val MYSTICAL_SKELETON_EGG: DeferredItem = + SPAWN_EGGS.register("mystical_skeleton_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { MYSTICAL_SKELETON.get() }, 4666546, 7493887, Item.Properties()) + }) + private val CFG_NAUTILUS = MobConfig("nautilus", health = 10.0, speed = 0.080, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = true, friendly = true, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -722,120 +1317,240 @@ object GeneratedMobs { sized(0.30f, 0.30f) } + @JvmField + val NAUTILUS_EGG: DeferredItem = + SPAWN_EGGS.register("nautilus_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { NAUTILUS.get() }, 16329256, 16730696, Item.Properties()) + }) + @JvmField val NETHER_CREEPER: Supplier> = registerEntity("nether_creeper", { type, level -> NetherCreeper(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f).fireImmune() } + @JvmField + val NETHER_CREEPER_EGG: DeferredItem = + SPAWN_EGGS.register("nether_creeper_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { NETHER_CREEPER.get() }, 5316640, 8339006, Item.Properties()) + }) + @JvmField val NETHER_GOLEM: Supplier> = registerEntity("nether_golem", { type, level -> NetherGolem(type, level) }, MobCategory.CREATURE) { sized(0.60f, 2.00f).fireImmune() } + @JvmField + val NETHER_GOLEM_EGG: DeferredItem = + SPAWN_EGGS.register("nether_golem_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { NETHER_GOLEM.get() }, 6497830, 9913669, Item.Properties()) + }) + @JvmField val NETHER_PHANTOM: Supplier> = registerEntity("nether_phantom", { type, level -> NetherPhantom(type, level) }, MobCategory.MONSTER) { sized(1.20f, 0.75f) } + @JvmField + val NETHER_PHANTOM_EGG: DeferredItem = + SPAWN_EGGS.register("nether_phantom_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { NETHER_PHANTOM.get() }, 14735059, 16777215, Item.Properties()) + }) + @JvmField val NETHER_SKELETON: Supplier> = registerEntity("nether_skeleton", { type, level -> NetherSkeleton(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f).fireImmune() } + @JvmField + val NETHER_SKELETON_EGG: DeferredItem = + SPAWN_EGGS.register("nether_skeleton_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { NETHER_SKELETON.get() }, 5570560, 8720914, Item.Properties()) + }) + @JvmField val NETHER_SKELETON_WIZARD: Supplier> = registerEntity("nether_skeleton_wizard", { type, level -> NetherSkeletonWizard(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val NETHER_SKELETON_WIZARD_EGG: DeferredItem = + SPAWN_EGGS.register("nether_skeleton_wizard_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { NETHER_SKELETON_WIZARD.get() }, 5636096, 8786450, Item.Properties()) + }) + @JvmField val OBSIDIAN_GOLEM: Supplier> = registerEntity("obsidian_golem", { type, level -> ObsidianGolem(type, level) }, MobCategory.CREATURE) { sized(1.40f, 2.90f).fireImmune() } + @JvmField + val OBSIDIAN_GOLEM_EGG: DeferredItem = + SPAWN_EGGS.register("obsidian_golem_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { OBSIDIAN_GOLEM.get() }, 3453523, 5832578, Item.Properties()) + }) + @JvmField val PILLAGER_BY_BOSS: Supplier> = registerEntity("pillager_by_boss", { type, level -> PillagerByBoss(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val PILLAGER_BY_BOSS_EGG: DeferredItem = + SPAWN_EGGS.register("pillager_by_boss_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { PILLAGER_BY_BOSS.get() }, 5392712, 8418675, Item.Properties()) + }) + @JvmField val PIRATE: Supplier> = registerEntity("pirate", { type, level -> Pirate(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val PIRATE_EGG: DeferredItem = + SPAWN_EGGS.register("pirate_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { PIRATE.get() }, 10072628, 14810968, Item.Properties()) + }) + @JvmField val PLAYER_GHOST: Supplier> = registerEntity("player_ghost", { type, level -> PlayerGhost(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val PLAYER_GHOST_EGG: DeferredItem = + SPAWN_EGGS.register("player_ghost_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { PLAYER_GHOST.get() }, 8092539, 12105912, Item.Properties()) + }) + @JvmField val POLAR_WOLF: Supplier> = registerEntity("polar_wolf", { type, level -> PolarWolf(type, level) }, MobCategory.CREATURE) { sized(0.90f, 1.20f) } + @JvmField + val POLAR_WOLF_EGG: DeferredItem = + SPAWN_EGGS.register("polar_wolf_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { POLAR_WOLF.get() }, 11089074, 16144639, Item.Properties()) + }) + @JvmField val PREDATORS: Supplier> = registerEntity("predators", { type, level -> Predators(type, level) }, MobCategory.MONSTER) { sized(2.50f, 4.50f).fireImmune() } + @JvmField + val PREDATORS_EGG: DeferredItem = + SPAWN_EGGS.register("predators_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { PREDATORS.get() }, 9319602, 13785343, Item.Properties()) + }) + @JvmField val PUMPKIN_SLIME: Supplier> = registerEntity("pumpkin_slime", { type, level -> PumpkinSlime(type, level) }, MobCategory.MONSTER) { sized(0.50f, 0.50f) } + @JvmField + val PUMPKIN_SLIME_EGG: DeferredItem = + SPAWN_EGGS.register("pumpkin_slime_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { PUMPKIN_SLIME.get() }, 12414743, 16754738, Item.Properties()) + }) + @JvmField val RADIATE_CREEPER: Supplier> = registerEntity("radiate_creeper", { type, level -> RadiateCreeper(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f).fireImmune() } + @JvmField + val RADIATE_CREEPER_EGG: DeferredItem = + SPAWN_EGGS.register("radiate_creeper_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { RADIATE_CREEPER.get() }, 999437, 2517027, Item.Properties()) + }) + @JvmField val RADIATE_ENDERMAN: Supplier> = registerEntity("radiate_enderman", { type, level -> RadiateEnderman(type, level) }, MobCategory.MONSTER) { sized(0.60f, 2.90f) } + @JvmField + val RADIATE_ENDERMAN_EGG: DeferredItem = + SPAWN_EGGS.register("radiate_enderman_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { RADIATE_ENDERMAN.get() }, 858375, 2307099, Item.Properties()) + }) + @JvmField val RADIATE_SKELETON: Supplier> = registerEntity("radiate_skeleton", { type, level -> RadiateSkeleton(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f).fireImmune() } + @JvmField + val RADIATE_SKELETON_EGG: DeferredItem = + SPAWN_EGGS.register("radiate_skeleton_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { RADIATE_SKELETON.get() }, 10529697, 15399403, Item.Properties()) + }) + @JvmField val RADIATE_SPIDER: Supplier> = registerEntity("radiate_spider", { type, level -> RadiateSpider(type, level) }, MobCategory.MONSTER) { sized(1.68f, 1.08f) } + @JvmField + val RADIATE_SPIDER_EGG: DeferredItem = + SPAWN_EGGS.register("radiate_spider_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { RADIATE_SPIDER.get() }, 7499625, 11315360, Item.Properties()) + }) + @JvmField val REAL_SOUL: Supplier> = registerEntity("real_soul", { type, level -> RealSoul(type, level) }, MobCategory.MONSTER) { sized(1.20f, 3.00f) } + @JvmField + val REAL_SOUL_EGG: DeferredItem = + SPAWN_EGGS.register("real_soul_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { REAL_SOUL.get() }, 15790320, 16777215, Item.Properties()) + }) + @JvmField val RUMORER: Supplier> = registerEntity("rumorer", { type, level -> Rumorer(type, level) }, MobCategory.MONSTER) { sized(0.70f, 1.20f) } + @JvmField + val RUMORER_EGG: DeferredItem = + SPAWN_EGGS.register("rumorer_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { RUMORER.get() }, 1184274, 2829099, Item.Properties()) + }) + @JvmField val SARDINE: Supplier> = registerEntity("sardine", { type, level -> Sardine(type, level) }, MobCategory.WATER_CREATURE) { sized(0.60f, 0.30f) } + @JvmField + val SARDINE_EGG: DeferredItem = + SPAWN_EGGS.register("sardine_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SARDINE.get() }, 8495030, 12642559, Item.Properties()) + }) + private val CFG_SAUCER = MobConfig("saucer", health = 9.0, speed = 0.080, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = false, rangedInterval = 40, targets = listOf("player")) @JvmField @@ -844,6 +1559,12 @@ object GeneratedMobs { sized(1.00f, 1.00f) } + @JvmField + val SAUCER_EGG: DeferredItem = + SPAWN_EGGS.register("saucer_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SAUCER.get() }, 6912397, 10532560, Item.Properties()) + }) + private val CFG_SEA_URCHIN = MobConfig("sea_urchin", health = 6.0, speed = 0.080, attackDamage = 4.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = true, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -852,18 +1573,36 @@ object GeneratedMobs { sized(0.80f, 0.80f) } + @JvmField + val SEA_URCHIN_EGG: DeferredItem = + SPAWN_EGGS.register("sea_urchin_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SEA_URCHIN.get() }, 591383, 1972528, Item.Properties()) + }) + @JvmField val SHADOW_ARCHER: Supplier> = registerEntity("shadow_archer", { type, level -> ShadowArcher(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f) } + @JvmField + val SHADOW_ARCHER_EGG: DeferredItem = + SPAWN_EGGS.register("shadow_archer_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SHADOW_ARCHER.get() }, 8220015, 12297640, Item.Properties()) + }) + @JvmField val SHADOW_CREEPER: Supplier> = registerEntity("shadow_creeper", { type, level -> ShadowCreeper(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f) } + @JvmField + val SHADOW_CREEPER_EGG: DeferredItem = + SPAWN_EGGS.register("shadow_creeper_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SHADOW_CREEPER.get() }, 10564786, 15423743, Item.Properties()) + }) + private val CFG_SHADOW_OF_DEEP = MobConfig("shadow_of_deep", health = 40.0, speed = 0.300, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem")) @JvmField @@ -872,24 +1611,48 @@ object GeneratedMobs { sized(0.60f, 1.90f) } + @JvmField + val SHADOW_OF_DEEP_EGG: DeferredItem = + SPAWN_EGGS.register("shadow_of_deep_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SHADOW_OF_DEEP.get() }, 4603453, 7366244, Item.Properties()) + }) + @JvmField val SHADOW_OF_SEA: Supplier> = registerEntity("shadow_of_sea", { type, level -> ShadowOfSea(type, level) }, MobCategory.WATER_CREATURE) { sized(0.90f, 0.50f) } + @JvmField + val SHADOW_OF_SEA_EGG: DeferredItem = + SPAWN_EGGS.register("shadow_of_sea_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SHADOW_OF_SEA.get() }, 14213085, 16777215, Item.Properties()) + }) + @JvmField val SHADOW_SKELETON: Supplier> = registerEntity("shadow_skeleton", { type, level -> ShadowSkeleton(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val SHADOW_SKELETON_EGG: DeferredItem = + SPAWN_EGGS.register("shadow_skeleton_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SHADOW_SKELETON.get() }, 11678786, 16734315, Item.Properties()) + }) + @JvmField val SHADOW_SKELETON_PUPPET: Supplier> = registerEntity("shadow_skeleton_puppet", { type, level -> ShadowSkeletonPuppet(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val SHADOW_SKELETON_PUPPET_EGG: DeferredItem = + SPAWN_EGGS.register("shadow_skeleton_puppet_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SHADOW_SKELETON_PUPPET.get() }, 5056854, 8014213, Item.Properties()) + }) + private val CFG_SHADOW_SOUL_1 = MobConfig("shadow_soul_1", health = 200.0, speed = 0.150, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.70, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem")) @JvmField @@ -898,6 +1661,12 @@ object GeneratedMobs { sized(0.60f, 1.80f) } + @JvmField + val SHADOW_SOUL_1_EGG: DeferredItem = + SPAWN_EGGS.register("shadow_soul_1_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SHADOW_SOUL_1.get() }, 7169110, 10852742, Item.Properties()) + }) + private val CFG_SHADOW_SOUL_2 = MobConfig("shadow_soul_2", health = 200.0, speed = 0.150, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 0.70, xp = 5, fireImmune = true, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem")) @JvmField @@ -906,96 +1675,192 @@ object GeneratedMobs { sized(0.60f, 1.80f) } + @JvmField + val SHADOW_SOUL_2_EGG: DeferredItem = + SPAWN_EGGS.register("shadow_soul_2_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SHADOW_SOUL_2.get() }, 7169360, 10918526, Item.Properties()) + }) + @JvmField val SHADOW_ZOMBIE: Supplier> = registerEntity("shadow_zombie", { type, level -> ShadowZombie(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val SHADOW_ZOMBIE_EGG: DeferredItem = + SPAWN_EGGS.register("shadow_zombie_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SHADOW_ZOMBIE.get() }, 3451314, 5830399, Item.Properties()) + }) + @JvmField val SHADOW_ZOMBIE_PUPPET: Supplier> = registerEntity("shadow_zombie_puppet", { type, level -> ShadowZombiePuppet(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val SHADOW_ZOMBIE_PUPPET_EGG: DeferredItem = + SPAWN_EGGS.register("shadow_zombie_puppet_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SHADOW_ZOMBIE_PUPPET.get() }, 4791894, 7682950, Item.Properties()) + }) + @JvmField val SIMPLE_GLIDER: Supplier> = registerEntity("simple_glider", { type, level -> SimpleGlider(type, level) }, MobCategory.CREATURE) { sized(0.98f, 0.70f) } + @JvmField + val SIMPLE_GLIDER_EGG: DeferredItem = + SPAWN_EGGS.register("simple_glider_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SIMPLE_GLIDER.get() }, 7830655, 11713213, Item.Properties()) + }) + @JvmField val SKELETON_ASSASSIN: Supplier> = registerEntity("skeleton_assassin", { type, level -> SkeletonAssassin(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val SKELETON_ASSASSIN_EGG: DeferredItem = + SPAWN_EGGS.register("skeleton_assassin_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SKELETON_ASSASSIN.get() }, 11052968, 16119029, Item.Properties()) + }) + @JvmField val SKELETON_KNIGHT: Supplier> = registerEntity("skeleton_knight", { type, level -> SkeletonKnight(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val SKELETON_KNIGHT_EGG: DeferredItem = + SPAWN_EGGS.register("skeleton_knight_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SKELETON_KNIGHT.get() }, 10855845, 15856113, Item.Properties()) + }) + @JvmField val SKELETON_KNIGHT_COMMANDER: Supplier> = registerEntity("skeleton_knight_commander", { type, level -> SkeletonKnightCommander(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val SKELETON_KNIGHT_COMMANDER_EGG: DeferredItem = + SPAWN_EGGS.register("skeleton_knight_commander_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SKELETON_KNIGHT_COMMANDER.get() }, 7681202, 11557119, Item.Properties()) + }) + @JvmField val SKELETON_WARRIOR: Supplier> = registerEntity("skeleton_warrior", { type, level -> SkeletonWarrior(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f).fireImmune() } + @JvmField + val SKELETON_WARRIOR_EGG: DeferredItem = + SPAWN_EGGS.register("skeleton_warrior_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SKELETON_WARRIOR.get() }, 10790052, 15790320, Item.Properties()) + }) + @JvmField val SKELETON_WIZARD: Supplier> = registerEntity("skeleton_wizard", { type, level -> SkeletonWizard(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val SKELETON_WIZARD_EGG: DeferredItem = + SPAWN_EGGS.register("skeleton_wizard_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SKELETON_WIZARD.get() }, 10987431, 16053236, Item.Properties()) + }) + @JvmField val SOLDIER: Supplier> = registerEntity("soldier", { type, level -> Soldier(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val SOLDIER_EGG: DeferredItem = + SPAWN_EGGS.register("soldier_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SOLDIER.get() }, 3435698, 5809407, Item.Properties()) + }) + @JvmField val SON_OF_CHAOS: Supplier> = registerEntity("son_of_chaos", { type, level -> SonOfChaos(type, level) }, MobCategory.CREATURE) { sized(0.70f, 1.45f) } + @JvmField + val SON_OF_CHAOS_EGG: DeferredItem = + SPAWN_EGGS.register("son_of_chaos_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SON_OF_CHAOS.get() }, 8106548, 12123992, Item.Properties()) + }) + @JvmField val SON_OF_NATURE: Supplier> = registerEntity("son_of_nature", { type, level -> SonOfNature(type, level) }, MobCategory.CREATURE) { sized(0.70f, 1.45f) } + @JvmField + val SON_OF_NATURE_EGG: DeferredItem = + SPAWN_EGGS.register("son_of_nature_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SON_OF_NATURE.get() }, 3110403, 5354006, Item.Properties()) + }) + @JvmField val SOUL: Supplier> = registerEntity("soul", { type, level -> Soul(type, level) }, MobCategory.MONSTER) { sized(0.35f, 0.60f).fireImmune() } + @JvmField + val SOUL_EGG: DeferredItem = + SPAWN_EGGS.register("soul_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SOUL.get() }, 15921906, 16777215, Item.Properties()) + }) + @JvmField val SOUL_BLAZE: Supplier> = registerEntity("soul_blaze", { type, level -> SoulBlaze(type, level) }, MobCategory.MONSTER) { sized(0.50f, 1.80f).fireImmune() } + @JvmField + val SOUL_BLAZE_EGG: DeferredItem = + SPAWN_EGGS.register("soul_blaze_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SOUL_BLAZE.get() }, 3057078, 5304831, Item.Properties()) + }) + @JvmField val SOUL_INSECT: Supplier> = registerEntity("soul_insect", { type, level -> SoulInsect(type, level) }, MobCategory.WATER_CREATURE) { sized(0.80f, 0.60f).fireImmune() } + @JvmField + val SOUL_INSECT_EGG: DeferredItem = + SPAWN_EGGS.register("soul_insect_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SOUL_INSECT.get() }, 12567747, 16777215, Item.Properties()) + }) + @JvmField val SOUL_SKELETON: Supplier> = registerEntity("soul_skeleton", { type, level -> SoulSkeleton(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val SOUL_SKELETON_EGG: DeferredItem = + SPAWN_EGGS.register("soul_skeleton_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SOUL_SKELETON.get() }, 3453551, 5832616, Item.Properties()) + }) + private val CFG_SOUL_SOLDIER = MobConfig("soul_soldier", health = 50.0, speed = 0.250, attackDamage = 3.0, followRange = 32.0, knockbackResistance = 1.00, xp = 5, fireImmune = false, undead = false, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -1004,84 +1869,168 @@ object GeneratedMobs { sized(0.60f, 1.90f) } + @JvmField + val SOUL_SOLDIER_EGG: DeferredItem = + SPAWN_EGGS.register("soul_soldier_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SOUL_SOLDIER.get() }, 7712939, 11599865, Item.Properties()) + }) + @JvmField val SOUL_ZOMBIE: Supplier> = registerEntity("soul_zombie", { type, level -> SoulZombie(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f) } + @JvmField + val SOUL_ZOMBIE_EGG: DeferredItem = + SPAWN_EGGS.register("soul_zombie_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SOUL_ZOMBIE.get() }, 3450802, 5829631, Item.Properties()) + }) + @JvmField val STAR: Supplier> = registerEntity("star", { type, level -> Star(type, level) }, MobCategory.MONSTER) { sized(1.00f, 1.00f).fireImmune() } + @JvmField + val STAR_EGG: DeferredItem = + SPAWN_EGGS.register("star_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { STAR.get() }, 4370996, 7077720, Item.Properties()) + }) + @JvmField val STONE_GOLEM: Supplier> = registerEntity("stone_golem", { type, level -> StoneGolem(type, level) }, MobCategory.CREATURE) { sized(1.40f, 2.90f) } + @JvmField + val STONE_GOLEM_EGG: DeferredItem = + SPAWN_EGGS.register("stone_golem_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { STONE_GOLEM.get() }, 3453519, 5832573, Item.Properties()) + }) + @JvmField val SWAMP_DROWNED: Supplier> = registerEntity("swamp_drowned", { type, level -> SwampDrowned(type, level) }, MobCategory.WATER_CREATURE) { sized(0.60f, 1.90f) } + @JvmField + val SWAMP_DROWNED_EGG: DeferredItem = + SPAWN_EGGS.register("swamp_drowned_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SWAMP_DROWNED.get() }, 7372126, 11123601, Item.Properties()) + }) + @JvmField val SWAMP_GOLEM: Supplier> = registerEntity("swamp_golem", { type, level -> SwampGolem(type, level) }, MobCategory.WATER_CREATURE) { sized(0.60f, 2.00f).fireImmune() } + @JvmField + val SWAMP_GOLEM_EGG: DeferredItem = + SPAWN_EGGS.register("swamp_golem_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { SWAMP_GOLEM.get() }, 5531198, 8690534, Item.Properties()) + }) + @JvmField val TNT_CREEPER: Supplier> = registerEntity("tnt_creeper", { type, level -> TntCreeper(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.80f).fireImmune() } + @JvmField + val TNT_CREEPER_EGG: DeferredItem = + SPAWN_EGGS.register("tnt_creeper_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { TNT_CREEPER.get() }, 11760225, 16755860, Item.Properties()) + }) + @JvmField val TNT_SNOW_MAN: Supplier> = registerEntity("tnt_snow_man", { type, level -> TntSnowMan(type, level) }, MobCategory.CREATURE) { sized(0.40f, 1.80f) } + @JvmField + val TNT_SNOW_MAN_EGG: DeferredItem = + SPAWN_EGGS.register("tnt_snow_man_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { TNT_SNOW_MAN.get() }, 14735315, 16777215, Item.Properties()) + }) + @JvmField val VAMPIRE_BAT: Supplier> = registerEntity("vampire_bat", { type, level -> VampireBat(type, level) }, MobCategory.MONSTER) { sized(0.40f, 0.72f) } + @JvmField + val VAMPIRE_BAT_EGG: DeferredItem = + SPAWN_EGGS.register("vampire_bat_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { VAMPIRE_BAT.get() }, 11705140, 16769880, Item.Properties()) + }) + @JvmField val VAMPIRE_BAT_BY_BOSS: Supplier> = registerEntity("vampire_bat_by_boss", { type, level -> VampireBatByBoss(type, level) }, MobCategory.MONSTER) { sized(0.40f, 0.72f) } + @JvmField + val VAMPIRE_BAT_BY_BOSS_EGG: DeferredItem = + SPAWN_EGGS.register("vampire_bat_by_boss_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { VAMPIRE_BAT_BY_BOSS.get() }, 7419058, 11229439, Item.Properties()) + }) + @JvmField val VENGEFUL_GHOST: Supplier> = registerEntity("vengeful_ghost", { type, level -> VengefulGhost(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val VENGEFUL_GHOST_EGG: DeferredItem = + SPAWN_EGGS.register("vengeful_ghost_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { VENGEFUL_GHOST.get() }, 8091769, 12104885, Item.Properties()) + }) + @JvmField val VINDICATOR_BY_BOSS: Supplier> = registerEntity("vindicator_by_boss", { type, level -> VindicatorByBoss(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val VINDICATOR_BY_BOSS_EGG: DeferredItem = + SPAWN_EGGS.register("vindicator_by_boss_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { VINDICATOR_BY_BOSS.get() }, 6447970, 9934743, Item.Properties()) + }) + @JvmField val WARPED_SKELETON: Supplier> = registerEntity("warped_skeleton", { type, level -> WarpedSkeleton(type, level) }, MobCategory.MONSTER) { sized(0.63f, 1.98f).fireImmune() } + @JvmField + val WARPED_SKELETON_EGG: DeferredItem = + SPAWN_EGGS.register("warped_skeleton_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { WARPED_SKELETON.get() }, 938858, 2458017, Item.Properties()) + }) + @JvmField val WATCHER: Supplier> = registerEntity("watcher", { type, level -> Watcher(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val WATCHER_EGG: DeferredItem = + SPAWN_EGGS.register("watcher_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { WATCHER.get() }, 11678858, 16734412, Item.Properties()) + }) + private val CFG_WEREWOLF = MobConfig("werewolf", health = 60.0, speed = 0.250, attackDamage = 5.0, followRange = 32.0, knockbackResistance = 0.75, xp = 5, fireImmune = false, undead = true, water = false, friendly = false, melee = true, rangedInterval = 40, targets = listOf("player", "iron_golem", "snow_golem", "villager")) @JvmField @@ -1090,18 +2039,36 @@ object GeneratedMobs { sized(0.60f, 1.90f) } + @JvmField + val WEREWOLF_EGG: DeferredItem = + SPAWN_EGGS.register("werewolf_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { WEREWOLF.get() }, 4220275, 6855342, Item.Properties()) + }) + @JvmField val ZOMBIE_FISH: Supplier> = registerEntity("zombie_fish", { type, level -> ZombieFish(type, level) }, MobCategory.WATER_CREATURE) { sized(0.50f, 0.50f) } + @JvmField + val ZOMBIE_FISH_EGG: DeferredItem = + SPAWN_EGGS.register("zombie_fish_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ZOMBIE_FISH.get() }, 11678835, 16734381, Item.Properties()) + }) + @JvmField val ZOMBIE_SUMMONER: Supplier> = registerEntity("zombie_summoner", { type, level -> ZombieSummoner(type, level) }, MobCategory.MONSTER) { sized(0.60f, 1.90f) } + @JvmField + val ZOMBIE_SUMMONER_EGG: DeferredItem = + SPAWN_EGGS.register("zombie_summoner_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ZOMBIE_SUMMONER.get() }, 3239011, 5547160, Item.Properties()) + }) + // ==== 属性 ==== data class SpawnEntry(val type: Supplier>, val rule: String) @@ -1325,6 +2292,7 @@ object GeneratedMobs { @JvmStatic fun register(modEventBus: IEventBus) { ENTITY_TYPES.register(modEventBus) + SPAWN_EGGS.register(modEventBus) } @JvmStatic diff --git a/src/main/java/com/dec/decisland/item/ModCreativeModeTabs.kt b/src/main/java/com/dec/decisland/item/ModCreativeModeTabs.kt index c51c4f0..d829904 100644 --- a/src/main/java/com/dec/decisland/item/ModCreativeModeTabs.kt +++ b/src/main/java/com/dec/decisland/item/ModCreativeModeTabs.kt @@ -2,6 +2,7 @@ package com.dec.decisland.item import com.dec.decisland.DecIsland import com.dec.decisland.block.ModBlocks +import com.dec.decisland.entity.GeneratedMobs import com.dec.decisland.item.category.Accessory import com.dec.decisland.item.category.Mask import com.dec.decisland.item.category.Material @@ -93,6 +94,14 @@ object ModCreativeModeTabs { ).iconItem { ModBlocks.RED_LANTERN.get().asItem() }.build(), ) + @JvmField + val DECISLAND_ENTITIES_TAB: Supplier = registerTab( + CreativeTabConfig.Builder( + "decisland_entities_tab", + mapOf("en_us" to "DecIsland Entities", "zh_cn" to "DecIsland 生物"), + ).iconItem { GeneratedMobs.GOBLIN_WIZARD_EGG.get() }.build(), + ) + private fun addItemsToTab(tabConfig: CreativeTabConfig, output: CreativeModeTab.Output) { val currentTab = CREATIVE_MOD_TABS.getEntries() .firstOrNull { it.id.path == tabConfig.name } @@ -115,6 +124,11 @@ object ModCreativeModeTabs { ?.let(output::accept) } } + + // 生成生物刷怪蛋全部归入 DecIsland 生物标签页 + if (currentTab != null && currentTab == DECISLAND_ENTITIES_TAB.get()) { + GeneratedMobs.SPAWN_EGGS.entries.forEach { output.accept(it.get()) } + } } @JvmStatic diff --git a/src/main/resources/assets/decisland/models/item/abyssal_controller_spawn_egg.json b/src/main/resources/assets/decisland/models/item/abyssal_controller_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/abyssal_controller_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/abyssal_shadow_spawn_egg.json b/src/main/resources/assets/decisland/models/item/abyssal_shadow_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/abyssal_shadow_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/angry_chicken_spawn_egg.json b/src/main/resources/assets/decisland/models/item/angry_chicken_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/angry_chicken_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/archer_spawn_egg.json b/src/main/resources/assets/decisland/models/item/archer_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/archer_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ash_blaze_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ash_blaze_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ash_blaze_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ash_bomb_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ash_bomb_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ash_bomb_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ash_horse_head_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ash_horse_head_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ash_horse_head_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ash_horse_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ash_horse_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ash_horse_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ash_knight_head_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ash_knight_head_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ash_knight_head_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ash_knight_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ash_knight_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ash_knight_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ash_pufferfish_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ash_pufferfish_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ash_pufferfish_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ash_sword_phantom_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ash_sword_phantom_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ash_sword_phantom_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ash_sword_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ash_sword_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ash_sword_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/baby_ender_dragon_spawn_egg.json b/src/main/resources/assets/decisland/models/item/baby_ender_dragon_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/baby_ender_dragon_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/bat_charger_spawn_egg.json b/src/main/resources/assets/decisland/models/item/bat_charger_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/bat_charger_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/blackstone_thorn_spawn_egg.json b/src/main/resources/assets/decisland/models/item/blackstone_thorn_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/blackstone_thorn_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/blood_zombie_spawn_egg.json b/src/main/resources/assets/decisland/models/item/blood_zombie_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/blood_zombie_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/bomber_spawn_egg.json b/src/main/resources/assets/decisland/models/item/bomber_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/bomber_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/brown_bear_spawn_egg.json b/src/main/resources/assets/decisland/models/item/brown_bear_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/brown_bear_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/carnager_spawn_egg.json b/src/main/resources/assets/decisland/models/item/carnager_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/carnager_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/chest_monster_spawn_egg.json b/src/main/resources/assets/decisland/models/item/chest_monster_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/chest_monster_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/chester_spawn_egg.json b/src/main/resources/assets/decisland/models/item/chester_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/chester_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/clam_spawn_egg.json b/src/main/resources/assets/decisland/models/item/clam_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/clam_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/crab_spawn_egg.json b/src/main/resources/assets/decisland/models/item/crab_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/crab_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/crimson_slime_spawn_egg.json b/src/main/resources/assets/decisland/models/item/crimson_slime_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/crimson_slime_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/dark_snow_man_spawn_egg.json b/src/main/resources/assets/decisland/models/item/dark_snow_man_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/dark_snow_man_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/dark_werewolf_spawn_egg.json b/src/main/resources/assets/decisland/models/item/dark_werewolf_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/dark_werewolf_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/doctor_spawn_egg.json b/src/main/resources/assets/decisland/models/item/doctor_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/doctor_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/elf_of_ash_spawn_egg.json b/src/main/resources/assets/decisland/models/item/elf_of_ash_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/elf_of_ash_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/elf_of_chaos_spawn_egg.json b/src/main/resources/assets/decisland/models/item/elf_of_chaos_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/elf_of_chaos_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/elf_of_deep_spawn_egg.json b/src/main/resources/assets/decisland/models/item/elf_of_deep_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/elf_of_deep_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/elf_of_dust_spawn_egg.json b/src/main/resources/assets/decisland/models/item/elf_of_dust_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/elf_of_dust_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/enchant_armor_by_boss_spawn_egg.json b/src/main/resources/assets/decisland/models/item/enchant_armor_by_boss_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/enchant_armor_by_boss_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/enchant_armor_spawn_egg.json b/src/main/resources/assets/decisland/models/item/enchant_armor_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/enchant_armor_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/enchant_diamond_armor_spawn_egg.json b/src/main/resources/assets/decisland/models/item/enchant_diamond_armor_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/enchant_diamond_armor_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/enchant_illager_1_spawn_egg.json b/src/main/resources/assets/decisland/models/item/enchant_illager_1_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/enchant_illager_1_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/enchant_illager_2_spawn_egg.json b/src/main/resources/assets/decisland/models/item/enchant_illager_2_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/enchant_illager_2_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/enchant_illager_spawn_egg.json b/src/main/resources/assets/decisland/models/item/enchant_illager_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/enchant_illager_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/end_stone_golem_spawn_egg.json b/src/main/resources/assets/decisland/models/item/end_stone_golem_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/end_stone_golem_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ender_snail_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ender_snail_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ender_snail_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ender_snake_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ender_snake_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ender_snake_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ender_witch_puppet_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ender_witch_puppet_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ender_witch_puppet_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ender_witch_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ender_witch_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ender_witch_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/entity_soul_1_spawn_egg.json b/src/main/resources/assets/decisland/models/item/entity_soul_1_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/entity_soul_1_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/entity_soul_spawn_egg.json b/src/main/resources/assets/decisland/models/item/entity_soul_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/entity_soul_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/escaped_soul_entity_spawn_egg.json b/src/main/resources/assets/decisland/models/item/escaped_soul_entity_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/escaped_soul_entity_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/everlasting_winter_ghast_1_spawn_egg.json b/src/main/resources/assets/decisland/models/item/everlasting_winter_ghast_1_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/everlasting_winter_ghast_1_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/everlasting_winter_ghast_spawn_egg.json b/src/main/resources/assets/decisland/models/item/everlasting_winter_ghast_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/everlasting_winter_ghast_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/everlasting_winter_shadow_spawn_egg.json b/src/main/resources/assets/decisland/models/item/everlasting_winter_shadow_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/everlasting_winter_shadow_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/evil_snow_man_spawn_egg.json b/src/main/resources/assets/decisland/models/item/evil_snow_man_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/evil_snow_man_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/fire_storm_spawn_egg.json b/src/main/resources/assets/decisland/models/item/fire_storm_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/fire_storm_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/friendly_little_soul_spawn_egg.json b/src/main/resources/assets/decisland/models/item/friendly_little_soul_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/friendly_little_soul_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/friendly_spider_spawn_egg.json b/src/main/resources/assets/decisland/models/item/friendly_spider_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/friendly_spider_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/frozen_ghast_spawn_egg.json b/src/main/resources/assets/decisland/models/item/frozen_ghast_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/frozen_ghast_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/frozen_heart_sleeping_spawn_egg.json b/src/main/resources/assets/decisland/models/item/frozen_heart_sleeping_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/frozen_heart_sleeping_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/frozen_heart_spawn_egg.json b/src/main/resources/assets/decisland/models/item/frozen_heart_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/frozen_heart_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/frozen_man_spawn_egg.json b/src/main/resources/assets/decisland/models/item/frozen_man_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/frozen_man_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/frozen_shadow_spawn_egg.json b/src/main/resources/assets/decisland/models/item/frozen_shadow_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/frozen_shadow_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/frozen_spider_spawn_egg.json b/src/main/resources/assets/decisland/models/item/frozen_spider_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/frozen_spider_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/gargoyle_spawn_egg.json b/src/main/resources/assets/decisland/models/item/gargoyle_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/gargoyle_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ghost_diamond_axe_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ghost_diamond_axe_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ghost_diamond_axe_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ghost_diamond_staff_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ghost_diamond_staff_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ghost_diamond_staff_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ghost_diamond_sword_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ghost_diamond_sword_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ghost_diamond_sword_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ghost_iron_axe_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ghost_iron_axe_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ghost_iron_axe_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ghost_iron_sword_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ghost_iron_sword_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ghost_iron_sword_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ghost_wooden_staff_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ghost_wooden_staff_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ghost_wooden_staff_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ghost_wooden_sword_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ghost_wooden_sword_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ghost_wooden_sword_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/gingerbread_man_by_totem_spawn_egg.json b/src/main/resources/assets/decisland/models/item/gingerbread_man_by_totem_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/gingerbread_man_by_totem_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/goblin_sniper_spawn_egg.json b/src/main/resources/assets/decisland/models/item/goblin_sniper_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/goblin_sniper_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/goblin_spawn_egg.json b/src/main/resources/assets/decisland/models/item/goblin_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/goblin_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/goblin_wizard_spawn_egg.json b/src/main/resources/assets/decisland/models/item/goblin_wizard_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/goblin_wizard_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/host_of_deep_spawn_egg.json b/src/main/resources/assets/decisland/models/item/host_of_deep_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/host_of_deep_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ice_bat_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ice_bat_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ice_bat_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ice_blaze_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ice_blaze_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ice_blaze_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ice_creeper_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ice_creeper_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ice_creeper_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ice_monster_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ice_monster_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ice_monster_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ice_spirit_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ice_spirit_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ice_spirit_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ice_thorn_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ice_thorn_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ice_thorn_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ice_wizard_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ice_wizard_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ice_wizard_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/ice_zombie_spawn_egg.json b/src/main/resources/assets/decisland/models/item/ice_zombie_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/ice_zombie_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/illusion_zombie_spawn_egg.json b/src/main/resources/assets/decisland/models/item/illusion_zombie_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/illusion_zombie_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/illusioner_puppet_spawn_egg.json b/src/main/resources/assets/decisland/models/item/illusioner_puppet_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/illusioner_puppet_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/illusioner_spawn_egg.json b/src/main/resources/assets/decisland/models/item/illusioner_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/illusioner_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/jungle_spider_spawn_egg.json b/src/main/resources/assets/decisland/models/item/jungle_spider_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/jungle_spider_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/king_of_pillager_spawn_egg.json b/src/main/resources/assets/decisland/models/item/king_of_pillager_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/king_of_pillager_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/lava_lizard_spawn_egg.json b/src/main/resources/assets/decisland/models/item/lava_lizard_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/lava_lizard_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/life_insect_spawn_egg.json b/src/main/resources/assets/decisland/models/item/life_insect_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/life_insect_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/little_bat_spawn_egg.json b/src/main/resources/assets/decisland/models/item/little_bat_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/little_bat_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/little_soul_spawn_egg.json b/src/main/resources/assets/decisland/models/item/little_soul_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/little_soul_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/lurk_skeleton_spawn_egg.json b/src/main/resources/assets/decisland/models/item/lurk_skeleton_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/lurk_skeleton_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/lurk_zombie_spawn_egg.json b/src/main/resources/assets/decisland/models/item/lurk_zombie_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/lurk_zombie_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/mummy_skeleton_spawn_egg.json b/src/main/resources/assets/decisland/models/item/mummy_skeleton_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/mummy_skeleton_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/mummy_spawn_egg.json b/src/main/resources/assets/decisland/models/item/mummy_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/mummy_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/murloc_spawn_egg.json b/src/main/resources/assets/decisland/models/item/murloc_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/murloc_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/murloc_wizard_spawn_egg.json b/src/main/resources/assets/decisland/models/item/murloc_wizard_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/murloc_wizard_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/mushroom_monster_spawn_egg.json b/src/main/resources/assets/decisland/models/item/mushroom_monster_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/mushroom_monster_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/mushroom_zombie_spawn_egg.json b/src/main/resources/assets/decisland/models/item/mushroom_zombie_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/mushroom_zombie_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/mystical_skeleton_spawn_egg.json b/src/main/resources/assets/decisland/models/item/mystical_skeleton_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/mystical_skeleton_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/nautilus_spawn_egg.json b/src/main/resources/assets/decisland/models/item/nautilus_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/nautilus_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/nether_creeper_spawn_egg.json b/src/main/resources/assets/decisland/models/item/nether_creeper_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/nether_creeper_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/nether_golem_spawn_egg.json b/src/main/resources/assets/decisland/models/item/nether_golem_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/nether_golem_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/nether_phantom_spawn_egg.json b/src/main/resources/assets/decisland/models/item/nether_phantom_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/nether_phantom_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/nether_skeleton_spawn_egg.json b/src/main/resources/assets/decisland/models/item/nether_skeleton_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/nether_skeleton_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/nether_skeleton_wizard_spawn_egg.json b/src/main/resources/assets/decisland/models/item/nether_skeleton_wizard_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/nether_skeleton_wizard_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/obsidian_golem_spawn_egg.json b/src/main/resources/assets/decisland/models/item/obsidian_golem_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/obsidian_golem_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/pillager_by_boss_spawn_egg.json b/src/main/resources/assets/decisland/models/item/pillager_by_boss_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/pillager_by_boss_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/pirate_spawn_egg.json b/src/main/resources/assets/decisland/models/item/pirate_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/pirate_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/player_ghost_spawn_egg.json b/src/main/resources/assets/decisland/models/item/player_ghost_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/player_ghost_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/polar_wolf_spawn_egg.json b/src/main/resources/assets/decisland/models/item/polar_wolf_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/polar_wolf_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/predators_spawn_egg.json b/src/main/resources/assets/decisland/models/item/predators_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/predators_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/pumpkin_slime_spawn_egg.json b/src/main/resources/assets/decisland/models/item/pumpkin_slime_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/pumpkin_slime_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/radiate_creeper_spawn_egg.json b/src/main/resources/assets/decisland/models/item/radiate_creeper_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/radiate_creeper_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/radiate_enderman_spawn_egg.json b/src/main/resources/assets/decisland/models/item/radiate_enderman_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/radiate_enderman_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/radiate_skeleton_spawn_egg.json b/src/main/resources/assets/decisland/models/item/radiate_skeleton_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/radiate_skeleton_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/radiate_spider_spawn_egg.json b/src/main/resources/assets/decisland/models/item/radiate_spider_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/radiate_spider_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/real_soul_spawn_egg.json b/src/main/resources/assets/decisland/models/item/real_soul_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/real_soul_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/rumorer_spawn_egg.json b/src/main/resources/assets/decisland/models/item/rumorer_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/rumorer_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/sardine_spawn_egg.json b/src/main/resources/assets/decisland/models/item/sardine_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/sardine_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/saucer_spawn_egg.json b/src/main/resources/assets/decisland/models/item/saucer_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/saucer_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/sea_urchin_spawn_egg.json b/src/main/resources/assets/decisland/models/item/sea_urchin_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/sea_urchin_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/shadow_archer_spawn_egg.json b/src/main/resources/assets/decisland/models/item/shadow_archer_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/shadow_archer_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/shadow_creeper_spawn_egg.json b/src/main/resources/assets/decisland/models/item/shadow_creeper_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/shadow_creeper_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/shadow_of_deep_spawn_egg.json b/src/main/resources/assets/decisland/models/item/shadow_of_deep_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/shadow_of_deep_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/shadow_of_sea_spawn_egg.json b/src/main/resources/assets/decisland/models/item/shadow_of_sea_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/shadow_of_sea_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/shadow_skeleton_puppet_spawn_egg.json b/src/main/resources/assets/decisland/models/item/shadow_skeleton_puppet_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/shadow_skeleton_puppet_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/shadow_skeleton_spawn_egg.json b/src/main/resources/assets/decisland/models/item/shadow_skeleton_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/shadow_skeleton_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/shadow_soul_1_spawn_egg.json b/src/main/resources/assets/decisland/models/item/shadow_soul_1_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/shadow_soul_1_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/shadow_soul_2_spawn_egg.json b/src/main/resources/assets/decisland/models/item/shadow_soul_2_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/shadow_soul_2_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/shadow_zombie_puppet_spawn_egg.json b/src/main/resources/assets/decisland/models/item/shadow_zombie_puppet_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/shadow_zombie_puppet_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/shadow_zombie_spawn_egg.json b/src/main/resources/assets/decisland/models/item/shadow_zombie_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/shadow_zombie_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/simple_glider_spawn_egg.json b/src/main/resources/assets/decisland/models/item/simple_glider_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/simple_glider_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/skeleton_assassin_spawn_egg.json b/src/main/resources/assets/decisland/models/item/skeleton_assassin_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/skeleton_assassin_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/skeleton_knight_commander_spawn_egg.json b/src/main/resources/assets/decisland/models/item/skeleton_knight_commander_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/skeleton_knight_commander_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/skeleton_knight_spawn_egg.json b/src/main/resources/assets/decisland/models/item/skeleton_knight_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/skeleton_knight_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/skeleton_warrior_spawn_egg.json b/src/main/resources/assets/decisland/models/item/skeleton_warrior_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/skeleton_warrior_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/skeleton_wizard_spawn_egg.json b/src/main/resources/assets/decisland/models/item/skeleton_wizard_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/skeleton_wizard_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/soldier_spawn_egg.json b/src/main/resources/assets/decisland/models/item/soldier_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/soldier_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/son_of_chaos_spawn_egg.json b/src/main/resources/assets/decisland/models/item/son_of_chaos_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/son_of_chaos_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/son_of_nature_spawn_egg.json b/src/main/resources/assets/decisland/models/item/son_of_nature_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/son_of_nature_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/soul_blaze_spawn_egg.json b/src/main/resources/assets/decisland/models/item/soul_blaze_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/soul_blaze_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/soul_insect_spawn_egg.json b/src/main/resources/assets/decisland/models/item/soul_insect_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/soul_insect_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/soul_skeleton_spawn_egg.json b/src/main/resources/assets/decisland/models/item/soul_skeleton_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/soul_skeleton_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/soul_soldier_spawn_egg.json b/src/main/resources/assets/decisland/models/item/soul_soldier_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/soul_soldier_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/soul_spawn_egg.json b/src/main/resources/assets/decisland/models/item/soul_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/soul_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/soul_zombie_spawn_egg.json b/src/main/resources/assets/decisland/models/item/soul_zombie_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/soul_zombie_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/star_spawn_egg.json b/src/main/resources/assets/decisland/models/item/star_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/star_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/stone_golem_spawn_egg.json b/src/main/resources/assets/decisland/models/item/stone_golem_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/stone_golem_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/swamp_drowned_spawn_egg.json b/src/main/resources/assets/decisland/models/item/swamp_drowned_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/swamp_drowned_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/swamp_golem_spawn_egg.json b/src/main/resources/assets/decisland/models/item/swamp_golem_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/swamp_golem_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/tnt_creeper_spawn_egg.json b/src/main/resources/assets/decisland/models/item/tnt_creeper_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/tnt_creeper_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/tnt_snow_man_spawn_egg.json b/src/main/resources/assets/decisland/models/item/tnt_snow_man_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/tnt_snow_man_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/vampire_bat_by_boss_spawn_egg.json b/src/main/resources/assets/decisland/models/item/vampire_bat_by_boss_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/vampire_bat_by_boss_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/vampire_bat_spawn_egg.json b/src/main/resources/assets/decisland/models/item/vampire_bat_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/vampire_bat_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/vengeful_ghost_spawn_egg.json b/src/main/resources/assets/decisland/models/item/vengeful_ghost_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/vengeful_ghost_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/vindicator_by_boss_spawn_egg.json b/src/main/resources/assets/decisland/models/item/vindicator_by_boss_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/vindicator_by_boss_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/warped_skeleton_spawn_egg.json b/src/main/resources/assets/decisland/models/item/warped_skeleton_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/warped_skeleton_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/watcher_spawn_egg.json b/src/main/resources/assets/decisland/models/item/watcher_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/watcher_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/werewolf_spawn_egg.json b/src/main/resources/assets/decisland/models/item/werewolf_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/werewolf_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/zombie_fish_spawn_egg.json b/src/main/resources/assets/decisland/models/item/zombie_fish_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/zombie_fish_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/src/main/resources/assets/decisland/models/item/zombie_summoner_spawn_egg.json b/src/main/resources/assets/decisland/models/item/zombie_summoner_spawn_egg.json new file mode 100644 index 0000000..ddd1559 --- /dev/null +++ b/src/main/resources/assets/decisland/models/item/zombie_summoner_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/tools/entity_port/generate.mjs b/tools/entity_port/generate.mjs index 9583300..057d26e 100644 --- a/tools/entity_port/generate.mjs +++ b/tools/entity_port/generate.mjs @@ -346,6 +346,89 @@ function convertTexture(srcPath, outName, human64) { return 'convert'; } +// ============ 刷怪蛋颜色:贴图平均色 + 名字哈希兜底 ============ +function decodePNG(buf) { + // 极简 PNG 解码:仅支持 8bit RGB(2)/RGBA(6) + filter 0-4(实体贴图均为此格式) + if (buf.length < 8 || buf.readUInt32BE(0) !== 0x89504e47) return null; + let pos = 8, w = 0, h = 0, bpp = 0; + const idat = []; + while (pos + 8 <= buf.length) { + const len = buf.readUInt32BE(pos), type = buf.toString('ascii', pos + 4, pos + 8); + const data = buf.subarray(pos + 8, pos + 8 + len); + if (type === 'IHDR') { + w = data.readUInt32BE(0); h = data.readUInt32BE(4); + if (data[8] !== 8) return null; + bpp = data[9] === 6 ? 4 : (data[9] === 2 ? 3 : 0); + if (!bpp) return null; + } else if (type === 'IDAT') idat.push(data); + else if (type === 'IEND') break; + pos += 12 + len; + } + if (!w || !h || !idat.length) return null; + let raw; + try { raw = zlib.inflateSync(Buffer.concat(idat)); } catch { return null; } + const stride = w * bpp, out = Buffer.alloc(w * h * 4); + let prev = Buffer.alloc(stride); + for (let y = 0; y < h; y++) { + const f = raw[y * (stride + 1)], line = raw.subarray(y * (stride + 1) + 1, (y + 1) * (stride + 1)); + const cur = Buffer.alloc(stride); + for (let i = 0; i < stride && i < line.length; i++) { + const a = i >= bpp ? cur[i - bpp] : 0, b = prev[i], c = i >= bpp ? prev[i - bpp] : 0; + let v = line[i]; + if (f === 1) v = (v + a) & 0xff; + else if (f === 2) v = (v + b) & 0xff; + else if (f === 3) v = (v + ((a + b) >> 1)) & 0xff; + else if (f === 4) { + const p = a + b - c, pa = Math.abs(p - a), pb = Math.abs(p - b), pc = Math.abs(p - c); + v = (v + (pa <= pb && pa <= pc ? a : pb <= pc ? b : c)) & 0xff; + } + cur[i] = v; + } + prev = cur; + for (let x = 0; x < w; x++) { + const s = x * bpp, d = (y * w + x) * 4; + if (bpp === 4) cur.copy(out, d, s, s + 4); + else { out[d] = cur[s]; out[d + 1] = cur[s + 1]; out[d + 2] = cur[s + 2]; out[d + 3] = 255; } + } + } + return { width: w, height: h, px: out }; +} + +function hslToRgb(hue, sat, lit) { + const f = (n) => { + const k = (n + hue * 12) % 12, a = sat * Math.min(lit, 1 - lit); + return Math.round(255 * (lit - a * Math.max(-1, Math.min(k - 3, 9 - k, 1)))); + }; + return [f(0), f(8), f(4)]; +} + +function eggColorsFor(name, pngPath) { + // 优先取实体贴图平均色(跳过透明像素);无贴图/解码失败 → 名字 FNV 哈希出稳定色相 + let rgb = null; + try { + const img = decodePNG(fs.readFileSync(pngPath)); + if (img) { + let r = 0, g = 0, b = 0, n = 0; + for (let i = 0; i < img.px.length; i += 4) { + if (img.px[i + 3] < 32) continue; + r += img.px[i]; g += img.px[i + 1]; b += img.px[i + 2]; n++; + } + if (n >= 16) rgb = [r / n, g / n, b / n]; + } + } catch { /* 无文件 → 哈希兜底 */ } + if (!rgb) { + let hsh = 2166136261; + for (const ch of name) { hsh ^= ch.charCodeAt(0); hsh = Math.imul(hsh, 16777619) >>> 0; } + rgb = hslToRgb((hsh % 360) / 360, 0.55, 0.45); + } + const [r, g, b] = rgb; + const cl = (v) => Math.min(255, Math.round(v)); + return { + bg: (Math.round(r) << 16) | (Math.round(g) << 8) | Math.round(b), + hi: (cl(r * 1.35 + 18) << 16) | (cl(g * 1.35 + 18) << 8) | cl(b * 1.35 + 18), + }; +} + // ============ 行为解析 ============ function parseBehavior(name) { const p = `${BP}/entities/${name}.json`; @@ -777,6 +860,7 @@ log.info.push(`贴图ID池: dec ${[...ITEM_IDS].filter((i) => !i.startsWith('mc: const results = []; const texOverrideMap = {}; // name → 原版基类实体是否有自定义贴图(决定是否覆写 getTextureLocation) +const eggColors = {}; // name → { bg, hi } 刷怪蛋颜色(贴图平均色/名字哈希兜底) const categorized = fs.existsSync('C:/Users/Administrator/AppData/Local/Temp/bedrock_entity_cats.txt') ? fs.readFileSync('C:/Users/Administrator/AppData/Local/Temp/bedrock_entity_cats.txt', 'utf8') : ''; @@ -831,6 +915,8 @@ for (const name of PORT_LIST) { // 战利品 & 生成条件 const loot = convertLoot(name); const spawn = convertSpawnRule(name); + // 刷怪蛋颜色:优先贴图平均色 + eggColors[name] = eggColorsFor(name, `${RES}/assets/decisland/textures/entity/${name}.png`); results.push({ name, bh, ce, runtime, impl, loot, spawn }); } @@ -880,11 +966,14 @@ import net.minecraft.world.entity.ai.attributes.AttributeSupplier import net.minecraft.world.entity.ai.attributes.Attributes import net.minecraft.world.entity.monster.Monster import net.minecraft.world.entity.Mob +import net.minecraft.world.item.Item import net.minecraft.world.level.levelgen.Heightmap import net.neoforged.bus.api.IEventBus +import net.neoforged.neoforge.common.DeferredSpawnEggItem import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent import net.neoforged.neoforge.event.entity.RegisterSpawnPlacementsEvent import net.neoforged.neoforge.registries.DeferredHolder +import net.neoforged.neoforge.registries.DeferredItem import net.neoforged.neoforge.registries.DeferredRegister import java.util.function.Supplier @@ -894,6 +983,10 @@ object GeneratedMobs { val ENTITY_TYPES: DeferredRegister> = DeferredRegister.create(Registries.ENTITY_TYPE, DecIsland.MOD_ID) + @JvmField + val SPAWN_EGGS: DeferredRegister.Items = + DeferredRegister.createItems(DecIsland.MOD_ID) + private fun registerEntity( name: String, factory: (EntityType, Level2) -> T, @@ -983,6 +1076,15 @@ for (const r of results) { `; attrEntries.push(` ${upper(r.name)} to Supplier { BedrockMob.createAttributes(CFG_${upper(r.name)}) }`); } + // 刷怪蛋:颜色取贴图平均色(兜底名字哈希) + const ec = eggColors[r.name]; + g += ` + @JvmField + val ${upper(r.name)}_EGG: DeferredItem = + SPAWN_EGGS.register("${r.name}_spawn_egg", Supplier { + DeferredSpawnEggItem(Supplier { ${upper(r.name)}.get() }, ${ec.bg}, ${ec.hi}, Item.Properties()) + }) +`; if (r.spawn) { const rule = r.bh.water || r.spawn.water ? 'WATER' : (cat === 'MONSTER' ? 'MONSTER' : 'MOB'); spawnEntries.push(` SpawnEntry(${upper(r.name)}, "${rule}")`); @@ -1019,6 +1121,14 @@ if (undeadTagIds.length) { console.log(`entity_type 标签: undead×5=${undeadTagIds.length}`); } +// ==== 刷怪蛋物品模型(template_spawn_egg 纯色蛋,颜色由物品注册时的 int 决定) ==== +const eggModelDir = `${RES}/assets/decisland/models/item`; +fs.mkdirSync(eggModelDir, { recursive: true }); +for (const r of results) { + fs.writeFileSync(`${eggModelDir}/${r.name}_spawn_egg.json`, `${JSON.stringify({ parent: 'minecraft:item/template_spawn_egg' }, null, 2)}\n`); +} +console.log(`刷怪蛋: ${results.length} 个(物品模型 + 注册)`); + g += ` // ==== 属性 ==== data class SpawnEntry(val type: Supplier>, val rule: String) @@ -1036,6 +1146,7 @@ ${spawnEntries.join(',\n')} @JvmStatic fun register(modEventBus: IEventBus) { ENTITY_TYPES.register(modEventBus) + SPAWN_EGGS.register(modEventBus) } @JvmStatic
  • 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 JTF>L7xBs literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/nether_golem.png b/src/main/resources/assets/decisland/textures/entity/nether_golem.png new file mode 100644 index 0000000000000000000000000000000000000000..038a68189997790440cb62ac3ec0dce09cfabdff GIT binary patch literal 5299 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 PGy*J5?M&Vn!DIgioOnpZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/nether_phantom.png b/src/main/resources/assets/decisland/textures/entity/nether_phantom.png new file mode 100644 index 0000000000000000000000000000000000000000..2cc64a3c0088da11d90437b73c8249251de3d540 GIT binary patch literal 1017 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU_RjK;uumf=WXQ1E)hq8+z-rC zyhVf!4Xj)p&8&JvdQ5DB4NZ+L&zuoE7@(|t_79U`u+P~e4j=4$Ql9dDZZqF%yZLUd zak%v@{;qj1=iXfVeb=hpyUcTxb`*bfO7}lM|MlJV`S)+tRMymfetUHBxq|+Gs!B(! z-pB5{awC5*=H0P)^Yx+JU+*Ie7!+8W8TM>jlKWpsP?TXwUw_!_$E(9O0e+TgZX?mM9B<5{@n?Tf`*pM2aGD^^;0r`+W^1NSmEbr-#Ag`a=_RvD%w zdk8TcNz9M4eZS6gUfXX~C2ghvVFMRdyuH1-?mLhMp&P%Nt}b<(E|wU)*n(-s_bow;vpTPeMEMxbP58KTHiJy9)Vqf> z+#FuY9C$i)@tWcuzfE^qe0v{p1bo^el(F~X)CX^64qsd@@nXKzaxccxO(v{6w%jVZ z?YF^K>Wrd8{&DkyvqC>lHt)WhGUeC2Yy2B!-nlw>$FW}U6q|ouiJ{}>-MQ0t>P*j+ z>5YB=Q0jbx&8-{v7y^$@UHW_8;?R7dB@)FtTMt^TDXn=^^~U&jtd_!Ar|q{pL?jkD zDm&Cy7cmCOC28Egdtam@cdufTZ{tlRg{O+w{_~_-G?j_B@%e8%BeTna!L~!z$adD{ z&pjtuFKl)^dp7ohd4;D*hIY?v~*GCoe$V)$g#?)vWYWKM=AiPUGS;x==1**5>Ve5Z%AfpeYWaWkh$ zwK|K=#W1Y9J154W>bmLmKa7n3Rxo62JaaIZBi%Dwm7}nD#`dPUehrovI25ey@~T1_ z`gYtDGv>PSN!Hn_z#vVuq153Ue+NU<`{cFhUN8J6T>mAn5-sZB!ER@~n_&jW=6Z#e ze;=!=w@Lgy?5gd^mGE5FJIXw3GZ({hZ)JzhB+K53*G(2Oh&Zaps;<4BTk_=h^j``r z8w4jr&1n!gFPePpecQ{6yXB7eOU~EUoHmJd!QwCm*_n#c%JwQuxo@hur=488)X1A5 z!jt9A>|U+|1(yU9C3D=p4wtN)v6t^gc?jbk*$-}_2W~UwQ^Gt}uYVwZfilbV*Rm5E QfLWTs)78&qol`;+006|xj{pDw literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/nether_skeleton.png b/src/main/resources/assets/decisland/textures/entity/nether_skeleton.png new file mode 100644 index 0000000000000000000000000000000000000000..f994d47af4f4d3e62639a072eabb8e8953597f8e GIT binary patch literal 2222 zcmaJ@2~<;O7XA~05D*lE;;`5d5CkPJM3#_-7%(8H5oEB2%90QwW*`emkQfo7Qx&KL zK~$I^TZ`BcJPL|cM5!!c5%;C7XccS)1qmX^VsTyqMrRJrJLmrYefQq)yZ8R@p7&m6 z=!P{WM%G3E0F&S#S{S@jVZj*AgV*w7Y2U&dD&CLo2f&#e<9955jguV|Mh8IV1b`g& zPr@d79{|aC0A4TwAQb>$B`mtQkqkT397ga~Ivu#ex*^aA4^MB9m-kUGMa*W0c}tPHjMP#+osNMsg1NHIW%Ew8TMdV!g+UQw08E=T zf;ha~)CK@#KR28qVbIr;*a9Ao6(@-0;G{gEh8>WlBv|EfBrJ@Sm&g~Bq`p{f1PRtP zW(bSXhDZ{8u?%`BX0<@X!Fb|4aCj`m2!p|pMR8k6VYI+mIDF@e-6oL;Nf4Bhl7dTF zi4%z8A$K1i9|%u?2n07c!cDw`FJVdD_+p0{k`FvIj+iat3ME_tAEV)A#R`%ozF4d# zk?xwUlPAE9S7nxjasYh#Sx4vl1!rRFk34IX{o5!Egyz#)+Gg;G=hz zfedMe;gjK*nLMo(9zBW?e25>$m|}!$-vz%pP%DFJe&O5n9~G2|Ec_Pk8w%U9S8uPe z>#}lly5%KczMtxFqGJ*BV7UI?Ui86bkth5Ol5s95BL3&HtM3P|r{9xouT?hGKU17~ z@v^_TxNv%>Y^zt{23cQAoJi5>He6yFGkLL3NGRMsTK&%kYxCyy8_u^}IW)q*RZm@# z|Ez+QP{AJ!(32Xf9qsd`%6WHwYd~knUjpNpd!C0H&Qg;zjrDBVs!R8gD7#l0BO76d9lOIK=R=U zmu{4rSx9jS*|Z|QgZzS6_v>k;XqD`Tx{1E`(x%_hR?)lXe~UpE@03%nuPQ>6#or`! zxs0`pbwAx_ZTb8+REFV!x^+HpSUljv|k-vAfF;m5kXrZF>YRDo%t}1UlAnQqDeAVvTC8}Qp$DX|t zBu`5!)+6Mp=gZ#~<~XH?4kvN01};r|#dz@L7RB)CrW+$Bhew7$NTQEq&&kOy4|z_> zID%I5{bR36@79{G_yg6l<920|_O$#usNS5>L?e_hc{rA2YwJAe#*6W|?3Vt+Pb+F) zQI9Nj+1XJTA_QftTxDeQXh?M^c`Ey`~<$6Mx2j1!aKS#xZ?uk(KwXAR0@g~s8c-ySGD#W z>TQ=5J$D_Hm$h+TJ3ib9%rLY|r|cImw@FsChUXI}#bbkKJ+mr6Tv< zsX#MKeGfJF@!ve53I>8$vjuRha_%}Y?gI;EWW)ue+F_!qt0>&w2I+%)Se{63eSbft zv9Pt4p&U?NJc$GYBMItVmef5A=z6<&O;~WGvN_%C-!TX$OlRnk?9qQ*>F$x|9L3bx zKZ`mKDUr$T$5Y-3q7X&UiFIBLP3gU+ge+Rd&UV%52T7Txqwn>IIYkp*7n;w>DqjcK z+6AxO5~)ZDitSCk5Owa@N$KO)@=Y)1Sw1KTe##ifUL#B@xFM?fS?sZnmc1t6rlMfw z(Dy=2$)f(s*bKYuW@0qL{6>UtgwDY^H$&F4ZBE6CA r;12&spc$=L`&R#J`gbZ(Rr%A%TLp`<(S`FgpMMY>uz_~UpSkBhuw6DS literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/nether_skeleton_wizard.png b/src/main/resources/assets/decisland/textures/entity/nether_skeleton_wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..4df94affdb2930a7c676ff94e4ab6ad7e6d0d001 GIT binary patch literal 767 zcmV>Bh49UsS@?!I-df80De*whDn0$Brnc0CV}3V zaVmqWr7}cHYW(UkIcSX;$<-+in{yW>x4>LYL=PLyJ^1DLF`6@^f8QahNBd~v`AWV)+%lQE-K{^>i7pSBC{|P_` zMq1|#8vlaggD@3r^8n{@%v3qrf5Qz89e1%kkK~7Aoq_{A2AI8)d$Wga!}-T1vP!hE zh+#!P;DAo@Y%vyqViVK>Q%m(`A95h(F#eVjqvG}vkY5i=Gj-8f3S9E|trf?zXwMfzq5`~Dc)LDq-S&skzP zll;Qdz%y5o_zK`#0pH>Mg4e49;0JF5=lPN`3C6+aRKHf(J_NHq2=x;CW{5HDQV#Ir zHjJ!N9AE>haE*Og0U*Y(#GLsrd_M~_nlqL}pfLiB!{F}shgx5># zo1vy$U0T+~1He<@y;5QcQkq-bzS#cXTd6?(C%38 zGC=Ie@;L?O68H{}HY8g~HQtqjR1Z)+K=lCC15^)CJwWvU)dN%yP(48P0M!Fj4^TZI zAF2na9j9;4Nj8?B;|n+s(8WdNs^I_t002ovPDHLkV1l61W2FE9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/obsidian_golem.png b/src/main/resources/assets/decisland/textures/entity/obsidian_golem.png new file mode 100644 index 0000000000000000000000000000000000000000..85bb7d2b94e921ed45601b8a217bf5807645c338 GIT binary patch literal 975 zcmV;=12FuFP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMF0Q+1_KKK01+Ml4iF3+001E;9z8BKBQiQC zJ10~+MJs4uFpU5z000000000002i_L^Z)<=32;bRa{vGi!T!oAr=&yk65xB|uw_=I z4F+3t9QRvQO#@Bcpt3c`5K7DhkchNNE{XTM1ZK*FxMZC=ao>pcLITq|uG&zgHTKo^ zP!jBg1hvLwfc?fAZGfwWU@s(q%c@Oiu{F+{@W=#vFF;-4?(zk4ACJ}C43rZZOqhxT*(z!*<_ln?4yAMBxhKu|u&M3E0NQRIV66!{<< z)8;;l4>D2UgKUg^kSh1FK1h@MSRbUxeXI}S@}9#7|3p79u|9yp2YGy8gX>{@5RjJt z)JOQhFZnnh)P0-}>SL@Ae5?-)tPc#d53ZLvALjGH&t=Z-d_LgIe2+8x;5y26u$}X( zR@F}FgRfz(eSbUWb7tP9^udVhw`8=PbI&ZN^nu>~5sVDU+syeZrgc;LV8Y4(<;Kls z&bw;uGMx{UIkRTa-Ojl;bZ=7nphr)6cqaKVdyEobufLAaI=i*;8v+b@KOvb`X9}57iIuvHgG} z`@!u1+YcPN!T7kuQsV4NfG1$~^<55@^S;6AAzcnLkgPw+u^l+Xhn{dgZ(Js#f! ztOOs-lv#WaC}Z!12kgBtz}^c6_Fho1J{V!|g~1)t2W6}ep0GZ6z`h^&*!P10_Wht; xydM^d{Fq{fARq#e*iE~-f%+{4nqI{002ovPDHLkV1gOaw-EpU literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/pillager_by_boss.png b/src/main/resources/assets/decisland/textures/entity/pillager_by_boss.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba356f7feecacae4e9168d6788863b2eebe23b4 GIT binary patch literal 1823 zcmV+)2jKXLP)T?Z=+CUZjpoo+G4?7^52qA$cmeSq+wzL;pj3nat@Vu&yD0BU#u z5+E@eBM)Mtf(gMFUuH5BLWo%-40UW78x&TyZtcCjT{r4Od++YQwzs3*?y$dPIp>~# zJ>Pe}^PO|gxpOr%G*F6D=g#E-GP10uHTitt^+GmVvTjC}*|=$w>)kzjcx(6W96(!J z8vr|Y>~OuiXAh4aJu2Bot?}3?WGTFcXf$eBZ`;@~l;5sg z(WSkTn{E#L_f z9_(0vR$!y>nw8-7UAru+@7=q%LB9lxmvAfl$ zs1q~_U{r`zeo3Wi>L?0x0-j>#t4%A`S*<`;^^I*C1$TlHR41tIthUqVzy2D4H{W>& zzuymlBuQMpcoBg2KKQ`YsJ1O92w92-Ns>xBv3NWVz~ze<@isQ%ZERG9SMrP)M_Q63 z-Jg?CeLykO+_!%}0|NtOdfa5^=E%;?k?C@EcVO?CCx6*h(-%&*XMG>MX5{X1CD~qD2#;pXmdUlH7 zb?W4)nFH!;>oC6qXm}`>c9g@3__8=h+i!zQ<<V79*2fn>JQdQqjvwMMrD0AM>L0*-w$)NG#=3UWs=;F` zAf6DoIksR51D>aegqr#Do9_X*J2AmOmwu&rO@R4qYtee~guuOrUgoo{rts$2!ea|; z#Bv|t5(EHpsZ`kpCTC~VB~2Sf(jt?yGXVVjLw?>b6rPoIt9o|AYGSegmmtv8(xS$n zbW9eIOQn!)jJ!f5)NC0xuL-E(NZ}2zE7Yu}m#bea9Jbvvdw3wf+iMB>+1}QoX53Gv zNr*DxfRBVIGo6$e71~V=*qH*ttVkr(tUfzw3V3!3X%N-|d7)v^<4z|f!U3Q9*Tv$J zw;{NO`^hvnr>q+;rWhq$=kr@vTxMKvzpyc<9cANgZ*yx{U4yNbqUq%Fp6m6G%~W+C z;Cgw(8r_CNXlkS-m>(T0g&2|7br#Kg@ZbUK*RL;|RtYz5+^nhsJlgGTOVCd^;8V?8 zNmE8yQH)|Scj5_BHmbaruV zbcE=wAu>OIWqCgF#%HIA-WuZm`O^Sg`s-dv8Ebw!{J2DK4FS-z{W(>5(4SgamA8xI zEkL=sGM-SsB;F}{P6>p<%vBT93V=*4e5|ci^Wq#X~y;EeJ4@f1GCM85~4e{Fh@2PPk zPCDLN3Z71vL4efabE_YQ&U~)R?)C$zyNhKi^de&wcCgZmlS(gA8iKwK+E3A|e z&phre?M$@_x^ToZPik#|XnLBM_mO3oT3dd1=qY!B0dO@o<|3B=?#E8~YTxY4BobIT z>T=W1&h#|x1GFY|H8$qbn$XqQm<#fXP|DSs%-u-<9uz_?UQA58>9Ayr9-4<2;9jCEF${{WIa8UlDd^CAEM N002ovPDHLkV1gWngxCN8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/pirate.png b/src/main/resources/assets/decisland/textures/entity/pirate.png new file mode 100644 index 0000000000000000000000000000000000000000..9433ee5e196b549f0f95d434bd3bd035893ce6eb GIT binary patch literal 1431 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O@DT3-AeXtr8Th7ZdAJR7^@rnmT)S-{i>wVPP40d5sbh`D|>-$;l1k;%&0B z>FMdJs;YIOqOCGAHNwKBJUrDxLM7bXoeBz-0syjJ~|MuAG>bjEJeSRM&(F>*hCFT3KpoX*z1jB{<63 zYYA&e^LXgW+o(xdX-YfjD_Uwu87c_rNb?#iiI}O1o2yBfs)#+map=aWZRvS=Q|HXl zmg3Qq0)oC*dqNn9W z&M!}zoE>JbBIa$Nu0R$qA7i5`($8HuWIHx z4Wx=ng8YJkzNRl=sJVXn1<-cR0*}aI1_r*vAk26?e?MRn^a8Ufs|Nlq5tKMG9lTE#x|8Jei z$%)T*dPghpIcXHUvzZ!`a(rij;=}{-We3eY;!^myrV7p3EFECwkoihTf`^H7=E=tq z9Bj^0_%`!ZnR{FoOx;r6e0mLQ>YDWClBy{}t70;3k5q8D@2KkC&+7Rs;a7;qq`kIo zZFfaxJ?&1J6}Q}E_9Bt*u7~!^Tk&n$XgG_7`CRYED-Dy{JfD>`3s(FW{=k(N)VbAv zvU8-B4X38++>-)UjlY!?75seDG!HI5y~)HueWCa&pAFSw-(8(jICUO84!=4_=XuD~ z|Ed9b?vo1+*G`-;=Zxy51*@KYUS;)Sox@D#N0JT9yO%9Xt*qh_S16Y)+MzG>=-NaT z-~Ch1KQBGIzVE?4j}Erk4oca-aviSUkO`V~Oz+3R+KB?aZ<)JWvL`s~8$6tl+$`pHc2$f7oIEUp9wwUI?CZFZp255@9H_ zg3}=^+;?-3rkHki_M5ygc~_uLfpu}rH)LgwbUk$NWnh}>7_qX#?cdDlUiZ%MUtv*L zlXcW2eDC6lt2czdK8stR=5WM*%8x(hA9&?r)&&$n|11S8qOWUGd=Po*@EPdA(2+P=xZtmkla zT#Zb)rMT_xosGG_|GsOFz5VaTmf2_b`p@70=FP!V$82RbT5{8g?rz{=?m6Ig-B9+vLYEz{%ya(a-<=$h>o?i}GaG}a LtDnm{r-UW|WkQBk literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/player_ghost.png b/src/main/resources/assets/decisland/textures/entity/player_ghost.png new file mode 100644 index 0000000000000000000000000000000000000000..0759ae25f327c6e25cd5635cd16d414aea0afa07 GIT binary patch literal 1172 zcmV;F1Z(?=P)<{97<5HgbW?9;ba!ELWdLwtX>N2bZe?^J zG%hhNHDpIvQUCx15=lfsRA@uxS3xUvQ51du#gqssBBD&p7#b;dnaYcj3}ql9#Y|)% zN)Z$0W?qbBpp^0l%-`2KwQl>ZckaC(-gm#(GgzH-_gUw>z1G?1-1|z^YPFPw-rimV z+S}Vh%RbQ7)@EyKYnjmXnhkXU1qJu__Xl_b0EjG?%eJ$#le9of89?!!ot>!$3=9m^ z0I`-ZfV;29fU%Z0z>7r%0RA}q3Ik%|^9-1pnra;bD7>eqC-iaqs{t{zi~$tx!OHNj zycl%7W<#mFyW0SW>gwtWVuyx?YD&GYuP?OV;UWYVG2RaV=3p+?z&O{XQEA^1no!ZG zF@VA#1nuzfaA*lUPfSb%;2HDC;T*2x4aoYA(1eOc2}yT!bcCcS0*NEW=hxR)`}p{< z&(BYLe}51C`}=zv85s#2a50BQU@gS7N_cdd$^ayevgI!O=fS~2dw6)TmzS5&K0Q6z z-QAtNy}jAxlZNR9x7Bgy^!eLFutxAF1uAii3y+S1aJJw84L z@#rH4Q@{Zib1;{}{Sly89uI#UG@+uA7=XlCwp&|Uc5-rJ2L}g1T%}S8M)36p6RxkX z0}mW<(dTjUCUD19eA5`fvPZkPxM){bS9W%Gmi(bPIywphS65eSaCmrV+uPfL11{!Z zF4pjCQal95z9TfDqEX_%H;TTvxJY&%;#O8xYy#(OBRXjS0000Nn~YUU}gyL32_CACnY8n6ckldRMu8k)z&vnU9fuY>TL@aFI%{3!>aXL)@|Rn zaodjVJ9h5cv-jxn6NgS;I&}8h$t$<7T)lej#*Le|Z{2_R@Y(a{&tAR!|NlSGv{5h` z0z)VS?89^30P_h$NswPKFaeKbz!3bMT@@I0oCO|{#S9F5hd`K7RKu%*fq^N_)5S5w z!~5uz$f9Ng0hhu#XOB(e=~8+Ak6m@W`{YF~50`wJ`mM?2!r3)aVgXw7V}dj-GynIB zICE(}JF<34a9MG?T0mCY{A}I14xSs2wCFL}1l+lE(Dp#f%b;LyLf6a{F6|VaH zN?YTn1NQR+7lha>l{p~bS`w!}jYnrn=e>!FOFz~G&Y1prhRhV!{gb>DG#J)SVfVD$ zdhk?*_1z!0_BqzAXpL#Co0NR2|ImkaDW3!@-@Ob|rZgX2pp?JWB(3BOm`WP+suu%AC&d zqLj3qtIAB~?V4_v)FQWh(q{+#G`HyWYMc=tRdpC;y>EO!ul$)IexXuA(9C3)qt|)1 zd=3zn5GXvx_QWCb0nY>nm!yj)CNqmnVVRHlK5O2aq~%jxO*j3` p^ekIB@&3IB(<6V#{@2~06JP&(T0o@c{wbgm#M9N!Wt~$(695E_dFKEC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/predators.png b/src/main/resources/assets/decisland/textures/entity/predators.png new file mode 100644 index 0000000000000000000000000000000000000000..ea1ded8d4c793fbffb597c35ac62eb1a67a89186 GIT binary patch literal 780 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/radiate_enderman.png b/src/main/resources/assets/decisland/textures/entity/radiate_enderman.png new file mode 100644 index 0000000000000000000000000000000000000000..b86c30c0be8ca284850aceb99e934d1481004615 GIT binary patch literal 513 zcmV+c0{;DpP)z zOK!t33`B!2gP^NkpttNI=SVj_NiUbe3mc9yA5vCq2{mB&C(4>fa-5t_W_$lQ-_`Eo zd)dyPZ};^c4xB_z0rPQv{x1Q{nI8o}DLf5=2_K~ePy*8ckoZw5fB~3~sR_^|yQtW( zp#)X~7|{fohlN{s^v|HJ04ER`ha&3cDbM!=0N<~KqJ=X*P+*R1Ayokj0GCPhJQJhh zj{xw{!YY#}>#7=1hFt~i34peM%I5d)?Q;G3x=crPPk9Hch@${JRX~|R)WfbSSiFMU z1prp!%Ye!kI5X`AKvwXU7b4hgWY(>x$@@3|+e$7tD`-dnQ6EC4i`KUb09Nib0HOvO z0ifn;;z6a+mFHUkC{ty|8kw)D32y}u5$wKHk+JN4QvfwB;L6+ea3(HNG1UNSO%P>> z{bo=GsQ@T2T>(G>oj5fH-G8dkW~Bgxtrx+btNx6LV`E&KEbDrO__atie{_*fT&7~W z1HhbHU6(PDSmq^%1IT7r^>nsEEPx1{h`=m>Rwl?Q;K8Ib0^BuN2bZe?^J zG%hhNHDpIvQUCx04@pEpRA@uxmpyJ9F%X4yGPgNJ+8n_^TJ%^Y@Sa zPO%wpJh_(n8gz=j%03tbcsNna% zKJ5Qtg?*DB0mREw1voYLYLLZaDL{P#Ag7(_c!YVm;95h(d8!CgxYVb|dfvD)&*k|@ zV>#pm6<-(N&(qWJ2KXK@mVKacY}ahfMH)2N`EAe#Y|~A@5PoMHNZ8ZE#_;SQwjUeX(!z(^5%9@5#_)W&_y&P2lD%Mb z59Vs*-13@d!`HZH!)-Qj($O6LX-4;8PFy@cuOi7{>wdV+24cET-ph8l4RGAw6j;}^ z{Lcn~sAkWGTNhkOuO%d5*2eSz#+dWhA#@%4(8l6pTcNZqfWIsLH@{IBh>de#`{8yL z5I~&hmOU8DA~Hp5PxEo@9QhrU)8SB|_n+^i8akiX_CpHD1 zW^{)~kakPBV1F3h0*lhK;Wixzu9>gvHPO1(7cT&t`We7EokMJZMaPb zl_XfthTB!p5_RhIvEjBHc(tW}l}RiMq0N}{d5!B3#PwI4ei7p3f`mz&)AQz#xJ6LB nWBMsp3lZ+gIv3kq2&>g!1we(mpMBUU00000NkvXXu0mjfPjjh6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/radiate_spider.png b/src/main/resources/assets/decisland/textures/entity/radiate_spider.png new file mode 100644 index 0000000000000000000000000000000000000000..bae2811c00bd156b6f91955345e37f76c1c3b28c GIT binary patch literal 1176 zcmV;J1ZVq+P)khN&XqfVIH;DiRW7>M zyJoXeYv;8yUDZ83JzGn`(;0L!8TPvKGS~SHu?OYz<9_NsYPw|z%G_r2Xus9DyzKk3 zPc7;&V78zKoJrB|(Cz_XrLE3mO}O8_XOj3E9$P5^yr=j{Mk$Rok(rho^^b79Xzl*ovTXscQOe-q#><`JMVpz4R$QOmOz;r;evJeQ(d zBA0+D259-F31EOqLIfV~LIg0AYHcst^P*)=hgBa2`0>qbp>At1Xv0y801Z%H)Mrq6 z!i~zN=9#MYf08x@K+r{#U);Py(*%^@g4h>?KhGrc#;!j<~v@zBzmI zJjB{eb9Zvs*9Zh+0}Y`l4Z=k}2GcIbUry; zIA+vEITjSTCqTNp?XpQ2brnen5`g?Z-CSjDxetJC{X9R$FfJ7VC zMj34&!0OPeG6FX5-%9ldx6@W*Ej72+=3a0%?q`;V82H`odkf$UupWicKKGKK7bi!V zzysc2o@VQU6zKD?c_*_vfMb1F9(71%1OO~125_*B$Qvw zC=kN?KrAf$cyBXpx7IU57y%G72)uHf=~>+$sG4`hZ&B@wU~*nlz>P{b?xW^<0;sYKh04L@aE=k zJQ6D5-Rr2gtjrDY;Qlv~MaUK%=_;)u=nEXoq2pDC3S q;N8|#BCC4stIiqS*gUVQ>iGjbGA~XfyB2By0000^`b6$tH#s}iNmM** z^33Nm7rl>oc54#9!|iS1?{;*j`b}Ty$Qdx(XUCb!XOR-wK=$sJ8JrTySFC?}d=mZe z?#x9=JFn{2nm=3}QVhQXpYp4Hp5r>TA$Hlmt=E5rJ#$Y9WLmd4F+FwO<`+T_%zDl% zWHH<+n>Ky#<41dS^Yj*ZACPQ2D1R<~$^q+~*0UzQ|I{Kvr`9)~G@t&eCieO&bI0WL zFJaSEm+sd+{pj|T=WqAA)H7)8)BeVLYf?p)`^vu`kLx`QD&2VI{JHzLe((Ff`FOm4 z>c114jrB9vw;WcT@SEXJHRle#cJ{q%o+;HYoM;(a9<_TvNAAhmmz!72RR9JlDsWg= y_s{6?d6rMi=jNO)dtGzAG}12U`$PXu(WBz4_y4dtQ1NIkNQbAZpUXO@geCx(rOV?0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/rumorer.png b/src/main/resources/assets/decisland/textures/entity/rumorer.png new file mode 100644 index 0000000000000000000000000000000000000000..d398ab572c1fbd3c857b58e9380518d49143f8b2 GIT binary patch literal 1141 zcmV-*1d98KP)hEM5dL6X`2|EPio8TxOq<3fkC3-X8tPD{aqHnloPvxy zRHUWKj81X9I?GxT!tuTNW*C{3wATJ;cO^0epp>%47-+5W`S}R|?zd7301)dp#$+Mh z{|B0;vHZR3x=hl$uFHapR7$yl+wB(9G`ZFo5M$1!}U0m9MyMIc* zfR)c>yRCYZQlWVc<2bqp_-lPmlS-OFYdvGk-<48!sXtW#G;fU(r0~S!(gOJF0aaDa z)*%IMn#OJ}3|(O3)>KNlJxy-U$MAX7&jk(fmC#y8^fmua+IBI1grX>%&|TMM((2vr@reC?f3-N8C+R-EA;Bq@&={XmmK4RoT|Kk~`o7OL zz`p<{@$~eB-EQaJ>G%8lJB%?`^T<*Z2zii54FK1(kI)|-(7;rx9%oiGdoK0ZG1`ud7t7;rkB zTz_aDSu|D`kdUc@k@8YKBNaISe1Ct>h)OBcb&d1+jIu28@bG}==Vz2tL zM|7oBu%D13OsaxzRm_ImZnODU6jJ0q91dvP)@_5fZE-jpW@iE4JZitbzOMRx;Kh}M zEW3U9iC1JiXUp_P;0xemVl)oPm)xIMkz5FIs0z}#A-GJ5vI77%zEhjDl+SV=nhlMO z@gdXv6WI>(VWm42v-WAGLuS8Dtj3%ilt&j3eSb& zioqRz6Oy0pdAk;JeUiTq zG7Y;JAP*a{ONUrykOIdFoX{NKf2CqAuRNA_VzPxE<(rYrK<0S zqwwlmrQC8@OML(`}W^5WXd zhlHyyIPA-e% zvHAZ5_G-v&(N((Dl+e?)=z*)rwi%1$L^-)$t~8O`y;Pms>ELE3?W-}>0!vLRKC|<$ zt@!X@A=}!nPK|jf-uIrg&OLeVoHy6eGw0&eX8uewdS88i&-XOW;#KEAys%yW>ErwP z@fR-JPdK8OQG9*UnfnjzG#KROrzGufu-~@a`M~1`t6e|bLs-BJ9=jwK-VzSbT4zBRcWT z7nV)3ZRDEJDR=Uof+o9TZAquQ)X}=clXtT+~wd#PVeRe(`gg`d(hqtlO6AFXt=MxbkkUP1N(} z^Bub*Sr_lis+HwS?$4|5?c01p_<}}q$Moa_FE^*Nu-5$eHFy5OI~rSNPPD#oYdiP&nc;j*b#?WFmDL1 zz{|Dm|J(BtvJW)YL^EmV%<1AXk@WVXj31mdKI;Vst0O>xy^#A|> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/saucer.png b/src/main/resources/assets/decisland/textures/entity/saucer.png new file mode 100644 index 0000000000000000000000000000000000000000..10a36776db8fe5924019548d1ff3c20a57433fcd GIT binary patch literal 1324 zcmeHFYfqC07=7NhtQVjZK@sR?DeW4@HPbZ=Hv3Ww*pL;Rh+Q1FIG}NXFpxm0gIA)R z6QYi4R8rS&=t>Pv7(*$AQb!=uGOPo;DeWK>5UX6vWk4;%pRnxfKAdwtoaCJ3dCu2q zqGWGM5Cs6dh5H2`Zz=W~q&K#>cWOCZl`3_TX8a*Z7M7W9Oh}aVDN@Z16!DyTFkw^Yiw{&i#^^bEq z&&RpjTG!^A?Cki=BH4>49YY>6gZNo43yN;pem$F)m$zJD?Mn&QOug)SdexmdTj><| zP^n3(p6X!4c>m&cV1+vw(-bVdY8?+69j!60JR zMIB*jY+Hm9#Xkd*L_FT%2GKl@4uE!(&&9u2yUdCU9 zJ7K&?0^mVixCZ7%8TO0gCE1)_)o{3MX_u%f^|G=qs@TVTS%yutd7&eVLvdhkyM3~a zV{CtHT8{sFGy0IqRkEgp4-JIZy?eonhINh?@Yeb)I^y*6yI7|mV^!e;DF&jXE60;K zADqDH-KF28sxDlLcy7QyUOzD3KV{G8ap}63ueaxCgnCif=FU0-`tty{l&{Y%jzxf! z%xxw^O!MAeJ%SZ~*4wc4Ysc=c;D2GX(4g@9GX|cd@t)E}=r0^~Or}VZaaNbBmt!0X zi2ghqKWbQ<>yheYPDiU_eYw3wzT>L%##>PwWPaM+-7M9sR?dSlxT%?GIs!1qZ=8)I zs$JS@gT8zz=aont+DY!eo67i9G)PWE0cL7Hu?*}+)G;c&=_l@4Q5g=32k&pK^bDK! zz9sbN(WsraLpUX5vY!l27C>BAMhLYt*^*b<}@FMP6p z;2Ad78!Z$p((=1MW~F(G2albo#4g@ZY`7WYU$$P6$LoEu#YP()nD&C~9XB{%g*nC- zz8EsGKujMbe^&<)r6*=5B@0b*9p6H38Q?22inL0o z-52N%>gZsF$Fc!Lg`_UP7{@t6C_c7t%mWDD#S3xR!C+i8Fi1AxHc&pLRUnWsEvkpH zVY$&0Nc{480%*8|EI?_U3Kqn+hs@)k#(a&17`5If1AumFmPP(Q`ad7Ulr1fls8%)g QV_W+IVWLRzBR{9+ANl(m%K!iX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/sea_urchin.png b/src/main/resources/assets/decisland/textures/entity/sea_urchin.png new file mode 100644 index 0000000000000000000000000000000000000000..adcd08d3843a5141152241572b8b368b6a40978d GIT binary patch literal 2152 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 P00000NkvXXu0mjf1zjAT literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/shadow_creeper.png b/src/main/resources/assets/decisland/textures/entity/shadow_creeper.png new file mode 100644 index 0000000000000000000000000000000000000000..7b80024c8ce60a1261fca3b86805cf3c4c8f7399 GIT binary patch literal 738 zcmV<80v-K{P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMF0Q*Q7&pn4skgeJ9#;UcQ}E*8q_NQK0pCi zX8^T!7QWO1@J=gGQ8HIYFGv6Y0GRoF3jhEB5Oh*bQ~&?}|NsC0|NsC0|NsC00N^8C z82|tP32;bRa{vGi!T`H_M0nar_2=k2^i^;`AZjF9B!sV(y-EZt;EwxML#Vf2WBA#<%xUe2hUA z3jl2**S=GGSPR3tH|vcKm=%=Bt@j=yi)L%zsR5wmC?U_<6B+bw<62Gt2N9c(QbJW1B%`NktJ~;slvwEcWPuXw*wGF&g!EWh|t(h~oXLtd^tP72wF%gW zKH?`pQ3E}4z3BHEkbF}LF96|@Z~`V_Eq`kZfb!#`;{e9!XgT9w0GON3L5?&H`FJ8S zA|lhN)ksTCg0B5<_HgE&TTG320dN6;`(U7?X?FRywg1f?&F57THGi5y^`2D5sLZ3~ zDp6aD=K#Jn+?4>XkVrd;P%*2N#Ml2(;?Zn3hL8-53!P*HNaVtF?v)w@wev$IfczOk z{vYu0LPQXi%bCLwVQGEsf3w$>_Rna$7|xR7>)!4K7<g#png9R* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/shadow_of_deep.png b/src/main/resources/assets/decisland/textures/entity/shadow_of_deep.png new file mode 100644 index 0000000000000000000000000000000000000000..9389cdf2a3b1d2ae11a91e9779a83c16e15d91fb GIT binary patch literal 1631 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 DdCPyI literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/shadow_soul_1.png b/src/main/resources/assets/decisland/textures/entity/shadow_soul_1.png new file mode 100644 index 0000000000000000000000000000000000000000..03a427db01ef062353ede7f86244c5b268203c82 GIT binary patch literal 1979 zcmbuA`#;l*AICp)84V{V5jyUf<61@*YAzYmatUQ9*PJQ2jgp*cLtp9~ta6aG6++80 zLmanlF*VmNXl{*?G;^IC_w{wY|HAi&=j-)&y?=N=9`DyL@7vymnf$T*57zz~SuYsN$jlU;CFUtf_5nHvGW@$_NGD*s`+2$)h;fx1?IJ zC*snq;wD-)dU3*uF*%z{$Lfy7&I-~ZqsxzTC6Y%rsx$2iIZs5?9~a>wN&8{8pq6Hh z*b&<&K4RQNT<7h_Q1MqJWDn2cTPM`QelXZ&wHDeb>n`_5BUdEbl%O*T_8T7p$akdo z5}bazYG#%=#Y)80l#M8ImKvHix9NXI_WG1K%SIK8f{;$G zLMHo}ur-LSrQ<=_s8lv9{tM_*zhLP&?{`3Y*nqa*#ButNF{iT%UZ}s`&0AM*mE#4NZ1&HO zrp@lo1p>ibzvPELO8ctey9`}nK5>~cR)LSPUXWpJkKeBlm`%@FXxsH%=*XH)EWE*p zqu9kW${1Sh$+6^rUYL8_zb3_OGu68ORJYC)eiJhy9$E#2Zwum8N{=~K%C^y-3^@C4 z<+B^1Uu)tq@=F1P29&PTMD$@q-5iH>bz}AnG=&1@^=wI9ct=G~nINCC)Vx9^D52Se zPL8qExwwI^MbdP?WSAYs^kI^pk3 z4O)JImh-HHvj#H3F2t^0b}rD*r}Kk)oySBi)75Um_pvx_T{YFRSjy^xTTj!xtZ^Zz z6PR_Hdmno_UPE1XFc#P2n0o$m8rtT-T9w~P?;~yF9X?)SJ0%h$QW}LpD`$Hayab^{ zxr;4=Uo%xH{7YSY*G0%~S2@g4swnK;5?J4Ev8v9as^q4ucY!dynI$4B(h-~8@${S& zzAgKUb}i!Z+F61^DQd7^X2T5DhY+CF?)VliEMW;-D=Sr`zy3|lX{ z_WN{6=%AM39;xL|D%3qZD>NcAHQ2L-$$)6;XlqS85!yoD4u;XHa{UgS$|`N~E!Oq* zq9f|+myPTVi2ol+l|mb&l5uSWRF5K@FSe z2{{a$wIkCz4`VB2gS?>vfS0nQSnCj01?~8vO5k?g0daTOb@+;99rG{xmc+C_)W0eH znjGPJ*ooK@LTsQVbPPKTMWYMkIGmFoKwz)E2ofwrYiTID9Oce;UB&|+AB2}Q(}h)M zX>X+Sz66=Cch|%Bl)q+`j}?5j1i%P|tyJGG3NU4F(3pi>0m zfPSX91g9)UwV&yPo_x8bVp*L!L=gq*y)DSb!S{~W`ZbDfWLERh%zuiHr>_}>dsiS; zOf$YUofWfSWA%66^UK^Y)73h66#Ld_e_Il^_Kf;D`0JP|BtO0zXTOeEI`d2oW(L-f zxwrbRMQT!3!Tcg-zdz8sflph>%8#6O_>VkG>&4&-@9!g3KwAYE69_U+-o2ppp`nKD rjRN-mK!^#Tm#OS5|9?wSpF}z^z-XWK!q}VLhYPqPJzc7uL(~5YV(O&R literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/shadow_soul_2.png b/src/main/resources/assets/decisland/textures/entity/shadow_soul_2.png new file mode 100644 index 0000000000000000000000000000000000000000..79a593ac64f479ae2c0cba0399badc3462f472aa GIT binary patch literal 1983 zcmbuA`#;l*1I9lyHrI@nMa->Op>q4WtY%hnS?(ow6~#;(o6=b>b1RplAze<)C6S>i zxkVNy_c5AEuI(s%qGyni{_I9V;c9Z(A zBq6*04s(gU8z8cqEe>FEROfaWPV+e*k!5T?7YYTu;;IT1=@#lpaKB& zoc(F*b2t6@bjMUx8+cc6XWo8wt!6aqXzolaC zPx^p<;kIZZ!BM5)?bk?mVJF^4Z(4IrxKqP0M+jN=O@a-1VU6I}uU~ArJcq9()zyzh zzT4Y8r29pSjqYF3dHE(XxAgzoe*U(k<|s0TcQYqzBrI9(mgYAeF}fjpVAn z7Mzpp;8mcuB_N=2!1%h7SExPVc~LnimxQW0 z7@85eqyRd!Xxl{gk##|T>;Ts6j--H#NI8&JQK6q#I!{mgYv2#0Mlj<$x`8NS+%o~f zC*N3z0(asS4$_)(LJrwk+8DCPW3|aBv-O04F|G+g7dF<+O}GONT3fnL)bn9AAvM%S6~l3mJ%a@6h$C~ggC8){i_g<6 z^i`F_Vw8#u6zv9uy<}$t^zk4+7A4o-{~2g`nT5SjJIifM(mEHAp?f_3Y1D&7S|=P- z*+3xofjlbE%4${6e4h&yUzf}}FptDuZhAvn#iY;JVmCkUJ8g@5sb#rX`KmvsE$^&% zn4$esLkLz`KcFh0ddqc|sBK3_d8o%;G0$1$?guwA;X`dRGi7NYH($n$C5iws%Gq#? zFjD)nd1BL7!y|xAHHi<>hh$lz-1J~cHhU|&Ojk{*Oye{qla`*S`IYPB4`A4Ofsgyt zNN0OGX%yvYKEDYIc{Vp19twUZOFha|%q_R|P4Kg6;fCCbJv^LrW-#fQV>3gJnu6w< zmT7#T)- z>We2oEe$qCzsCZN%yWTN^|KUDlQ#*e9MOE(Q0Vt~0L6~7_WQDmg;&y8MykZX$?Kem zsmg|c^?n^_W*FGaur7hy3{CBS?nsVE+f;>_wFjlISOI%xKf#QIw^6RnQ!5w=U&@xf zvBV>4Kc}aYq&B^BzA*H4ofC*{Rkl!_T*t=>`wQ4zlPfn~h*Skz-WLHfATJ_YNU-mLY;?FE`%&byHb`9HqFZavt4ZA^|Xp${YdU3l!O_tWu$VBZSo zPVp*F{E=&8nF%Sx1ZK$5xaH~eT;6*T(mxxcpvS43spofM7b^k8&3$hMrK~sm=mUKk z0NAN_j5S;R>|k`d7)I~L0GnWTBPR~Ujk0T?$N2+}>;gTU(_dBIbOSf#48hC=v75|fRdA0as z&u9C`Vnw`1k}kiU?f&uTS9S8q$hj(u`NK0Ucl?dJhOAnMcZ(U_(UTuev}py=M@g}( zxLym~f5*#+?en-=g8PBC_xUPOQm=h_i`6f!#k$%E=*{A%(7!u%0&z7D60Y5t?0(@T z!n8Im@pUhTKiu%c%2JJ%AXrXPaMqTTkEybb6=0WNwI4ga5Uq-z~B4|Hxb{C#Rp0C0IPs7rwdCd(*5?Z?Lj>+Bq6=9CC%GVZ`#_ZqrT z=~f6u_B43^xKD^sbfCrJ8w@%E0hFgcEZyw#&qHr7%#!&mBb0|g9X~cyS%Q#N|5~=X}obDmN1NLCxC#t>U0&*F+8fu<+_dns=KUin9=Dd~j zp;VmjY1hO&M9i!qB=sH~oO)lR6;{M<=9F%x>;XB5S%yLn&uUJfmq+j*J%Y4({#TT91i_T`~ zctGBhE5F5FsV8WcR@>5E^j@=qD?eUzj|>EaduthSOpJ#T^GS9@WsLed>b#7yQj)A# z&*tuccoH%OL7wm(ecpUZ*8?U}+IedVYN6t>9hk}+bH$&e{UP&8dXN}OE!~$zGCQ`; vVSD9dmjrL%i%WTcMluX1srmmJ=+#KPb`hdSO|pc(d%A$Vjnio+?qcFUdfcVA literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/shadow_zombie.png b/src/main/resources/assets/decisland/textures/entity/shadow_zombie.png new file mode 100644 index 0000000000000000000000000000000000000000..f41dd417b51a842385790cc3fb5857671b6f1e1a GIT binary patch literal 800 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/simple_glider.png b/src/main/resources/assets/decisland/textures/entity/simple_glider.png new file mode 100644 index 0000000000000000000000000000000000000000..4602894e835030be03248f9dab2486a1846ed3cd GIT binary patch literal 2711 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/skeleton_warrior.png b/src/main/resources/assets/decisland/textures/entity/skeleton_warrior.png new file mode 100644 index 0000000000000000000000000000000000000000..698f256c07716ff7e14e5a8593aa64fd4259dfef GIT binary patch literal 1020 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ941CdEYK~!i%-I%>@ z@-P&JL$(f;n2-=smr95YaS2_y0oGmuGZz4BFQIF1fR%;4>W0`65)%?qJNE12k2gAX z<0KFurH>TZu@l?p`20AjML9e@J$>%0M==}@bLXg%LJDZN+tF^fi*9dkU0bWwidL&t zv|KLTeMm^&{p|{f_hk@-hfb&ClweWcHIu6V%g4uu+x^$q*B{EbRthNqVG+8~Xt=W1 z>p6G$3rfgU077E^2u*#v-R^s$Bqm%lxe7o?0v_N34-XHn{#VG2(9`MErNPZ+<6M9k z08)xFL5N?U247xYoPgGxF?HX(ZJW}d#eau;OWJra7z`>^&<__#6CQz;24w*%1@HJm zTWnv}bC)K@uer1+D?CC<(7U_4RK-|DsGqSkE|;L)3UB+WqW1j!oE&xWae-iq#o~w1 zJ_v+$SeGDP6y@>pv04`(t?5D-f|_1H0>b*N({*BCGFG)a=I& zM_YFOD=wW~%;0;2d+QS7-0Q0`Il+nn)5^SqioXjXUuGUZND6k9GXW(6 z@{HQBk}~VdBT)bob2Qb!x<7ORDTIYf3CyANm=(OR0)Ng^ug}LFgwQrWJYY7PCEAC) zXlpINrcicUM`Y@@-M0d}+v>M%Ksy3U@RKP(rfJXfc9Dms8x$f%Fb=5Bm|5d}9j-oE zgLNOQg7?{Vxrr?gU7t^40cnF%=4sek03f`S$KNA+I<$Qj&BtzY;PS07ZCypzmxoh; z7M4~Xlb_i&-ov`MXGhiM9tfb_wiZCT3k5(*KiD2hj20nO9s|llcoxS+J#FXHklP4+ zJ*zB>I|&j@vdTljFYV4yFXF2x>DW1s<=g*&wCmFNbD|VtNT@7JjGsfOtQrC%YYCNQ zDHT9~)U~fB@GFfSy1&1V-rwI{oyC%BLy#?Wz#$Oo^Sj&amR@5Pr3csPO{ObBrG!u$ qK^9?oR{;&dL4lCIvS}`xDEbHNL?7E@Rp@;H0000^`hjYXeL^3Sm7`8HbqzsD2qdv3ixdiYj4?1xGa%>l zxfMPAoLYQqm9~%$jbFV8z}xNCUVpD$$qEOA`fkDj3^?S3P~Xit;BvXNkH@1c;f!54 zK)?!UIDsQ#^9~S@vg)D$EZ@7{0;xG5*0vg9@KRb1u#Uo^6QUZCu-4h#%Jx=WtR3T8 z<8ymy{2vamjQzXc`y7CLAayY(Xa|JaO5<-NwE0-GfQvq#&wdNAh8%%$F}9`BRvLf9 zhB62ZbVzlwOx4o(8@|)asz?IUp?)|VI>l=9Z$2W?SHBfP;HyZIoUyU;$K%o5zfy0t ziAp^p!8#d252(`kI|qD!ef35HC>xIz*UJBqJ^;^S4ryupjW#rN+{N}hCqEub#vanr z_`#4_yI9Ds58YTQsl3*`X3Ky?&Ou`kI1Fw82)jER1T zD6Sjorz0Si0Au%tWU=-Ymt)49k_7dfyoIcCjD2rX(|g?t>+BBDSKy_t#Fkjs-0b$n z_W#m^g#{|M`c-g>lC`0l9m0PsmPz;H3l5&&(pDB-f*@h?F(`)fU4rZQXyasSvBrz$ zAm;;|4{$!f`2gnwoDXn5!1(~@1Dp?VKEU|^=L4J%NEhb=oDWz=Hp2&umCf)0)!DZ+ zA5fir+27l>+n4>lUAui#`GDNANdg flIr;YmzB#uySPaJ%U-(n00000NkvXXu0mjfTLpjR literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/son_of_chaos.png b/src/main/resources/assets/decisland/textures/entity/son_of_chaos.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca71f407b4f4b96d77823d0ee81e2aa57d2b804 GIT binary patch literal 2351 zcmchYX;c#07RRwN#0dvXOrMw;n)wvX?2;&wnt}t0R&p)J9P_1R8s$KmH#4=&SrmPl zX1N-)US`)J=P_pl%Lzv^2O=>x&;FnNJ1H*Cc5>4Dr2znd z9M;~3Aoe$ZnAC3Z%4I&_i=9Ly!R{pBMZd<9IM@?}al!xq)%RtDzLMg-G8ad8TVn$= zU2P35WsQAc1r*Y*&l=Q)-0SS%&b*^Ln{W8>0%Y>q{;_MSEGpvDMd(DlRxcX3+~UxI z+`D-DVD|~&2V3BvlXR~Ys2c_B$I10r0MA+>=z$uHP<5KW($Zryb`y5xPdiP3{9MlQ zxisB$fd1q)jftDu%;bagi`of(jw{vZK_@WH2l9O`Y<cb600N>EP=7(;sX>OSwig zAC-^cPN7UXO2+fwV7|d>4gAXH8xRdOc!p&c~1_-1^g#s0|upbQH`i;<-ZV^u8Nj zwxj@S6gdl-ZSAh323dYB`8p~0XJfrGqIt>HBNYS*dh9%h^(_%8#5{}rnqI!w|8s{7 z>uYkA-qVlW_P;?d7qzCQsj{|i6_7%Ysbj;%S>h_=Phmtd_YP^j5T4%r4PMn zuPq8KMU!JD9lr@IPy&xS4FGxWhpz@X)0A*3MfVwQ7`SeqI8`qU#E70^A%CA zPo%QIK|L8MBve#$a&|%A#ZtR;yDP#t1V>L{XN>kTt^0venQ8MyMu2ehvob#V8?RL> zKrsewwx}JCH)ce&vC|kq^}e)22dToDuzm<#Wc{TU0pYEHulk)=->935HTIn+W#k(QnHC6zeXjXEIHagSPZ|6N z_O#wV;P#^i7(EAg?0ngcjwW|6vQZDA^)?l6pb~kXozQF?&}D-P*x;2qqNI~(3KW7H z@>aIw^OWUxY1>}e&kf2`avo$bsa=`)xGm)ID}u8)W1F=vK?Ro#A{=v2=*a}ZkWY(^5y!UHB|IY{?!J~A*_IHC z)67R*1*D>5bu38Se2-L5(Jf{TuZg32KGyFF<#nN7m7|)8;{6R)o|p4@zEGBuVwaFX z=_)_`G{iUlOp{gs=Hl#)_<+;V)*BF-gpMI z%Q^=#?^bv`Eq?A);~$LV6*ijC6Tj^VE`MZ#J zI2GgL{5|W-{<;f)krlr>Fy?U*8qD!vh zW*1h^yB7K)p98bD0i&hjtD;%UjR`) zbq|;VS|GENR>Ny{9}rbnY)==6gR_>K9mD=R{R`L0;1$_%JPHCo{qSnOR>HaWF@|C9 z_dGNx`1&Brr1ZXq|{|s6*dBYz?1XdP8P$8cf5`Vz?2kgKoptpAyRSdVtR()N5R6~tVxYOgFf5g~9#7;m z)gA7O>cV~!$OFyJOG$1i)6bSy7DGZS`;fBb6@rDo&zA;rUf+KSw0>&`Z~uSiP7Xti nhhKj|yBL{P|4RY64Fd3#b+d0Qf1E4+Gyzy!XPXx%eG>ly_k@f_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/son_of_nature.png b/src/main/resources/assets/decisland/textures/entity/son_of_nature.png new file mode 100644 index 0000000000000000000000000000000000000000..a3f9173f6c676926eed66af2662a56cf6ebe0bb0 GIT binary patch literal 4126 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/soul_skeleton.png b/src/main/resources/assets/decisland/textures/entity/soul_skeleton.png new file mode 100644 index 0000000000000000000000000000000000000000..ec499812b25f1918af446e9838e9b71869d8ddf8 GIT binary patch literal 2083 zcmd^<`%_Z~7RLiBh+Sk`N-OEgAmTb>RJ3Tj>N*xg1QqBipa@$*+oehyTLUbXrr4%f zuneS&p%`8X5J*B2^1ON7BsaOqy?MV$2oIq}anz!sqd<9W`e*FyXXbmpbIzRK&ZGXr z?BkIeup2NKOk`$8+UcNw5LEp7HNi+Z+6V+KgmC(JDu!qO%fn!@wlpOx1%nYZy|z@c z4ue^P`S4Wkv0(iZCjF{#prQFcEgkKxU7e)vu0}4aLBenArgt)WTiMKJA&)8?{236E z<>K2aS&K%|Diw7AqE4xpDwnh=rCk~&t-r6E#q43TdI#7H&OjfR)6e6wSS;oskIUt< z_=60oq+22FR?2!nIYX^v3-|*<0Y@a{ibXt$co2{<6*7(*|cNN~Kb!QG+0;QmNEIG@4c| zct@wEK_DGcb!*iV-8-t(vXV@F2Au(zNTLPE^-rgj>9J%CL)i*U!*HeFiPf zq^Fw=Jyx{OVPV4%6NNbj9T$NIjRuYxU267h9MNu>-7eM0YMNHMYTp$XEMTOlip%B zSS^UnirQ^PqtRqCnayU4#bR{WZ8n?TZg)5wCZ|K^btA(*G~hS8oEEps>T%n=9{Z5j z;Tv)~ovt8mx5wjg`h8xn*XQ&3{eIW5-yInCj0A?pMt$RB{=4IWKwxBK#6Ed9Fgf9x z`eppyRB)I6=Q!J5W)9v7ru=mFnbrSqFlXk%w*?0n@kK@f0fX5H|Dh1{D)Zyuv!G?B zrQ~Luq)-;CJ-M6EreBvg-iklPS!cixnBzk~CzOcAw7QLUFzfZCKYU0?95SZ{umNgwE#E99>{sr3FIF+0`^Zd&n>)1oS175O})PRE>fA2{phV) zeR9#hG-=x#oA&%`J6IPsl6WDt=5luNo{L{UUE<8i3yBM>6Esc^D+Yh=?XOMqCkde> zd>(niduqNniIqbLT>~%dDy8(DjJSX-F%EpImCe?!l(KUI_fNVmP@^~9d$C-5y>#p! zcf#X8URjDx+tos zd93_iR`8WPan>S_z8H15Ebm6+Zhq@K^=DMy8;O?;WcA{sAC<4_5?;XjuTPSh5G;&i zPZLM(~+>dVS)T{m+^oAw@_d0->5<|f(42Df26 z*!}Tb!noE`&1}Wb1qPj@IN`8!Ue1|CN$Jt3|`CpSaht=n*->et^RDb-* zz1XSb#@cY#R`bj`&Vi!%ZS5(ninbUwv9cLVMVQZ4-UTOH(jyJ_mHSuoLSmN`^Hn93 zbV&|^Gv$WItkpcN-Gv{lu>L-MrDi3fwf1t>G*H5RtlbG1$)&xw4?meN%!A@0UW?+M zS)FkvD!^w;=hdIX%P#8Qi+5xq8?)Aua>F;hNCkVKR`nbI{ zw$(2#Us)k6u`0~8rZVPUvc98?Ua8o1ThmZbo}QBL118f**w>%G-*~Ptb}@?b-X9-0 N^H_EoFSYo){{kzMuI&H- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/soul_soldier.png b/src/main/resources/assets/decisland/textures/entity/soul_soldier.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1d8ddbcf359dd10979ebdf500c4ea014727d68 GIT binary patch literal 1878 zcmV-c2dVgpP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2J1;gK~#8N?V4MN zRb>>%_c>WKI5}CCIFvmp1YHO$d@)GtNrSQrl@KWrPIOa>GGBTzi=wME5>XatQE3nA zlVyYtN(fN~fkKeQh}q3cD2SZqw`TtjYreBDXP>jrgtdS0vDf;(Z|}3$`qp>drxwNR z9cfI9MPtrj?KiHko;caCj1F1R-)FxOK1cZ>tClWq9Qu>an2Y&jU2Y?rEhMu zYZ_nteKOiM{UUqzqQigKZ+cy_sK?i?__lVA{czvfm6njn>lBRt?uP@>uCKo_9r@_d zVJ=VHq_&)O=@AwhwPei>PRf6g29X4SZyx~*IYR(+VMf<)#mPvff_yOp z&mzeIz6&VyaSAM7GhAD8%Ula>85`AM`Yp1M zH7<~ctO)6rI-bRFlDu4$Y5o08C&+m6MAA$`UfK-9dyp6dNXSHl*E@aJkla4h?KGGN z1E^Xb`RZpLZ1#6Qs6wbSKCFFjOGlwEYP~iv4~+KU00zN1pM4qaz5OQ3^RgiC*GHF} z{SKgi`;i{mPkRu~1d4=#fhqsJ2ms$DAWKhL+!UcL2aHZvb{(y2*HG^U!dNX%i$W27 zLLvZz8|OyRYk!Uz{KVA0sCK#>2b>iVzz^w1MN(cTgkt~{(ODUq(jlogKfL&6a|~hT ze^}us(#mIju+^@DRbMQQgVo>cV}F^vf69e+EuwcF0r9m391t2I4%~mMU9-v=!L=8l zmD5_P_Ti_Eh4bf|ynW|RyB5(K_uko+1181S7R-QH4$<_KRnAIn-l*Y_wQ9TX-It?H zPKF|S_US-AJ&S<1wtU{QYfFOPVR;Lz^Pz~&@0ijdJ#zq2(2Kz>{s+?Pg!$xoRGtxkD>c1ZH2z$M_hdj#C?rRqe=M0gQ<^+{{Xl1s`B;-(!tF=w;vA8xq;N^b{TA8x| zk|MzCakaLoYijb4$AG6k?;($}wENnH?%>Z5lTf*bR_1VoqzLeOT&->D>R&$}I%EmR zQ&^6!)os^DLI%q6?!!?&K^W>7o@PAbiBBFG9;+>S5lWc`c|ku=L1>un>vkGs7Kp`C zXn7b8;pO)~@Kl^L#_SC*nGtyg(ApY2)$$Xm7u_AURA!}x@tWEMVU82>zV>j!v+sp> zOy+hYLR7i~()RsA%i+O`2cq5k_FEok3e8)}=6%Y`BmCOcG7S>u7^=ZdNnM~@ zSg!J%k>8KTIpYV;|&JykZ@2^7a$T?zAE&!hL~^%_%E^ogK)sL zjWeb*HQ|7)51wiN55QR%%Sz45EL?Da1~9=u#Kc z0EmDjR1RUt7VQFg|8Z#fE})i@F+zFaH0bLm4TAnz$RM45PZv<@<6ydg#s%t!XMSZn zppF5W>bx;K7cLze#6}acj7h66;{jRq^*tZQA(N1OD`U8iE|u%>vzORjKrJF;)XL%E zr#BedsSnfxe;+XI`Du`HqC)!$^l%z2y$giv09ucbgfvFdO5tcPMW2r4f4W(0bcgU&S`b>>iZVewzi0V$C}N(b->C4KQ{Eu4bQ8^6z-sw zR+(CkZ*49ejsb-o zz%-b)gVPk5Ri3x|EBotj*$$}FO5s`n$fGQ;JP*bN3?U&G)q725>y-h!zfH@YG`ab8 zw}9U5ULY?bdhP($8UAZ76w#Nh+tE`8R8&+{R8&+{R8&+{R8&;_--x1r0Jvi`gDy&Z Q761SM07*qoM6N<$f((w3YXATM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/soul_zombie.png b/src/main/resources/assets/decisland/textures/entity/soul_zombie.png new file mode 100644 index 0000000000000000000000000000000000000000..4939fee21a78087fc96d936ece9af937282b41d2 GIT binary patch literal 2405 zcmd@V`#Tc~dqge~Npb3&lTb;Vl2W?($`t!(#i9o#iVj_zTuRQ7TiS-%*!{kl&1`lb zo7u%SVQ%RZl}N>jO8P#EZce`S{Tt_f-pljep7)3MR(=8;?r6Wx9smG1f+E6V%<_<# zJZzVlISzV><)X5`edz?h_2MksK zhZj~<6jfH{5Q(`Y(ls*qI)#!)rQV>?^6B*78H{9=>by>uu2TKMWERxc7O~maO(rN5 z3WLFl5r~qis!}BK777K2!^_LdD=I1~D=QHQL{(K45{X2iP-WHCw`*#kXfzCifn%}d zI9vrDUr8V!h{P%q2}vfSD3t2z>YADwG#ZV;V6a#$4u`|z@dN^)no6yq(a>}{hQS~b zi6jzxT#jmL z!ZMk-+FCq|MX0MIve_gKhg@Gz;c}@B4KyB)&gU~48*7@IF)c0FmKI!VD_*T8YBWTx zmZZ~>+uE2+W^HXPi^Zy|t7Eg-91e%e2Aa{x?C4;1 zb=8?n?Cx$(PY<`Rk3TTbq}Mka3<{%B+1}oA=Z>nQqqVbB-PNTrnY7*Ax}F}rUT-iM zj7DR7dwW+`mw6=qIWTj?^NM*-0J$+>$kIO>0FaM1o6McJyBZOn0|2ZvekY4HKL0K@ z-;Qxm*x{2AkvQz@ywz#0o#D0PmcFqgsmvogzmhXk@tdFec=}$D?e_MBdsZH^+;orB zm%5phk+ChlEOd?Q;I54zYuwU~$veR>AmI6rGa*x|fv>ucqwg*KDLG`8Uk2#P*zrF@ zkbhmyKhg8A9TRZPCC+m?z0!&&=mlcea|!XHE@D9q%ID+1EbF`6~TM)OF=LC>dtfx3<5@9|!~C1-xzDWPue(FR-(jXyJO zcNLuCu>IIM#=fL8Eg$Sn{eceoUT5Qq2KoChW&hc9^Pq)Gyi+e6B5@oLqn|?c^oI6@NGY$H+=Ct#Oav&pW1&Ea-ii=wqCPG%Zta&O{}N4MsT@pYM3UR|8j#K(_T-*qh- z>U)zd#mc`X0$v@kA179p%|`!daN1atn$Z37VY=djh6wWW_kHu^IwT3wH##E_9Vf_! z{m(@2iB-2*BOX*wJof;vY_}aomEOZe-T$P@NXuNaeguU$Ex4I5Q%m*b21ZSCH7V>N zbYa|(+swBG#}jVlhH#Mcde*{t<_>E7ePy0vFzWAt&^X=N<8j~aP67!-sroMV90e4t zW_@WM*=jEIHazQG*@fW+hvybu9$&JKMhZ@?>zo>rHLt3K4aEA*T<{SreEs2}+oac) z#l2IjIqy)`9}GZ`l`DfcW?Oktfj2y_0fXK+`37GS`mK+Q9%|h{m=E?c<-?h|0Uol| zm%Vq6Jhe^+Kws=x)%V!~Idc$v$dp%}I#+ovdaPlpKRkP}@0veG>%9AYSE*$-`Y-ph z#m-Nbj^=fggxtHm8tnAukj=tgJ2!W*u=n%$N5lAoW09B#r-?$aq@-CMG; zr%tm)x&mX#VOUNv(o=lvF&%g>>A$%#0r(X)kAZUEXUBOjU;$g(cp0h?{F=23_al%GaOR2_orpxlWJ!5D{Po8BkVRaF?pOj z`?&Xqh{arQcN)fL3G3`4zO(8Z&=uI}VYTj;U=z?8+-h*xR{=qzURnlPZp;UUrsKaU cwL@QQ#x0&sPsXgoeSdzSBj7MmXmaWQ0OR4&TL1t6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/star.png b/src/main/resources/assets/decisland/textures/entity/star.png new file mode 100644 index 0000000000000000000000000000000000000000..04c55137ac07caab5a6eca5f5232906b58d783ad GIT binary patch literal 1354 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O@FR4)6(aEh#DS_x3l`F|)CBS67lz5SBS%$tK1x@aIo`XJ@CWnd4b!&fh<4 zZS8zwVqzY2s9%W?{Pm^6&pYJN485BvA~$oS?v_j4C>MX)rt^HR!L4kGD-i;>(j-sY zvtLUWy_qX^r&Rj+T%(Kr0(a^Z9!=4_6wEKJW^~$- z!I$fdEBiTTj%(RU*V1I(AMkv$%l(us`?VB_hrRlbr<&g?le(5E`eL5Z+x?+uTsa?h zsa%N=xsfh*r$OmKyYk&y`Ipo5uOx`RT4H@IQ}~n($LD*=Z#LTBE0cP&#qP;;y$fF4 zhxM4>?R9@X*W~R%uTxH}A5RBAX;S1+C_h1tAhfg z6O)7!r|y@&|Nr$L-2Ggo6TK~6V&5;>-lfN*OSV@>Wo_>i`m^o!F{!eZiDl=cuO~d5 zS2`sjCurKq#T&2v&@^M4UVOW!;JlUBl;BCJo*ZwtZJjpvzTMePZ1)-~PTRiLIH(vf zk7dmfF`L8p-kL---){ZT6bn>c$gMd2_}$H$^UmL^-Bfb=w{K&Gc1(C8Z~G?@BeA71{LbRz*{?me@6uZH z&vc@0l>fY>{tVlq9GlIqg4rMb9Q9tQdTDFV4WOBi&R)~*H&m+83^8_h|TXL(ON>yd_U-EvA^7 zdHqwnBA`3v>%pD;f|f0&W?2h7Uq}Vcd;H+U!?PEf`BqnUunDzH+7LHqFUvuX#%7Vo zv(6?H9^5zeH1JfIr7}ZBz*opes6&nOpS9!ezv98IFDrI49*hL$AqG!ZKbLh*2~7Y% CXQ@;G literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/stone_golem.png b/src/main/resources/assets/decisland/textures/entity/stone_golem.png new file mode 100644 index 0000000000000000000000000000000000000000..99dbff34fc5369ff255c365ac46948f791743054 GIT binary patch literal 1004 zcmVPx#1ZP1_K>z@;j|==^1poj5Fi=cXMIHbSS3odaek@W_Qek0XZf$L4i86GfGK~N# zfnrSm)c}Zxh^D5dwY9YX0000007dp&=l}o!32;bRa{vGi!vFvd!vV){sAK>D14T(h zK~!ko?U+4p(@+$KJoj8Wc4?>QVEY*ho(^|O+zjxK)t z7f8-ZuG+_bA8*kG8cXj8ay;cJMSgjK;?g^U+%^gj9}LVz>Lz=>O76$d!F#SR&r#ZQ zzsig`lbnxy%D<$wITm=SRb$MVCTroV>;O9 zLv|e8=C5Y&NOFjm@$+}T-j0b;Ktrx$bVSjy+$N>T`|q4dh7Wf2z*M`~P^*Q^KCrbm z0r{W-^}!Rc4+bC~q$0})smSs{Dzbc#iYyB*}fG z52Es(!3Y0DKfq8Qpxg&pe9*!{2jT<6tC6z;zz1YVU_P)3%m)n(>H`Ax!4=d8*I*xL z)12$seDHpnb1j<>TGO2CsePb~b8Rf=e4X;Ggg&?lb4|!{&O0dRCiFp5*|GfQa?U$L zJE0H6OWSDLweDih_kDDg&nmGo_I_X);iujQ^@Ag5KhS{vz$!xffePIhZlL=D0qzTx4dA|D zDRKQkkLdwNas8kh(*sD14=T-=9&k#ceITuC(LF$l@j>tBadZ#3hVBa|(0!o@-4|@= zz92$<(1h*_#U9WHHq-}aP#>H??*{~WKPW=)2UdPR$nOXFJu$y0=J&+h2e}V&AN)@~ a2% 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/vampire_bat_by_boss.png b/src/main/resources/assets/decisland/textures/entity/vampire_bat_by_boss.png new file mode 100644 index 0000000000000000000000000000000000000000..13c280fa9a0b889f7b2b16a377c78bae0d2c48f8 GIT binary patch literal 749 zcmVPx#1ZP1_K>z@;j|==^1poj5Gf+%aMKBu@I3pTCF)JSt3L*^&SU@v09~)glH*r-x zQ#>?FHZoB%B=++59t8z82?<0D3;+NCIx&W-0000HbW%=J|NsC0|NsC0|NsC0|NsC0 z041%NVgLXD32;bRa{vGi!TAVU9>)L% z*NB9yCi1O^L*M7@0WugsUpQzf){-d@=l+(FhX)9L66wd%7QkX~yuF4$-U|;9>CpkC zz)sN2@b((0*@K0FC~ZqUcx&J(cz|Hgn8N+5X}|84z`HJZ3LYRFcIoic>7>a-yuC)+ zr2!n^@%Vl`lsy8}uVug)ur%=NXUJl1fYI|gw3_z}v+xSpYhV^$B>TExTskihH{jw= znoOlwZ=T}|8#x5bk`UR zxb$NyEW)wE%Fp%EU1R71XCqe>a`zE*-A~7j_w6_qKEb;bD{%+vc z!^j}vt*qJsWPp#E!h(CXBGmd6HavGcl literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/vengeful_ghost.png b/src/main/resources/assets/decisland/textures/entity/vengeful_ghost.png new file mode 100644 index 0000000000000000000000000000000000000000..ae343b258d85f2b1f102152433874217cb96dafd GIT binary patch literal 1628 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/werewolf.png b/src/main/resources/assets/decisland/textures/entity/werewolf.png new file mode 100644 index 0000000000000000000000000000000000000000..192b077144a622e0d6f699a460a8d4c078f053cf GIT binary patch literal 1606 zcmV-M2D$l(P)u&{7onx?!qvRT>Qb6r+eRub{(O@bg`Z*MPkygk$-edtsbAnM<6qdkw|Mby(^UprfEuNh={*@ z`BFZoI!Hw}o0XZc*K^!nAKOvm(D^1bKt-uk!uNd)!@&3bL_`G&g@Tp|p65}pESdg} z8&45y=B%`cCL^my+8;u5ATU(MagmYe<<6=zHG;wxzwC5|8ie@uP z9O?kaaZ*VN<&S58ZQJbc?_((`4k6LFW{7#8RaOGqwoin(z)%?g$!L_zWdIDrz)%!j zwNvLhKuMYFl}ZIa2&8?QlWp5R3YTMHtl4bJIqrF0>Whe!1hh03qA2Wa+s3ji=@2!| zRj5vCwOS{-?#Gddr)8Y1h;$r|<0MiS(6YfaO?=;%Vi(7!Soh<|s3b%+Cm+E z4~vTc{Jy*lz)!bs0Z65HT{n>x)oQh`P@V>8Q@}J$P4v{_29i2({``6N_xH6GL3OCm z4;Aq-PR$gElZ8m=L<);O@yzP#D%EOLD~)~Mm;Le7S2N+XWI;xd6w8(%v%S5YShhq& zg-y9!#`8Qa>Ol}BhzeaP6be8%Wh~3;TP~j@GV$mNs1ETwPi}Zj)70jq zkyRq?)27g;Mn)7U>Qqp-w?LwT6V4Hl4}w5*5a{~`F;?6Gry&Cp0`%S2Pqo_r->vVp z{ueJ^3>K}YPY)LF-c9XVzIhXF-yZx%ckT=xe`V!>xw){txyiTp?lC(%OQ+KTjxMT0 z?FNsEk(RQ8e7t>3jKl#ahRsa?I-L&reEwKNjKl#Wt?)KCwa8nRC3VYE_8r4wtoFs? z0YKN^C1*@ioYJeo_J3=#577EM?_RU|O;>-p>(}AjIhv0j1CcY9#fi_WSNa>w&O$C1 zU5irM_rve!&(rMFI2 zd_Q_-ax$4wN5q+rdKy4g{GKQQ8nNcXhw1ieTab^ph(y-RH!S&5Ua)d`nqiI^v(`1T(}@>jchjC z_w;#~dL-2W`SF=Z;Cc`mA^N0E3W=q9J#4&v8;T;)Mo6HU%hCMsA-w3>9EKnWFilhb zL#1xQL>8!j&0-6bc2FE??H{TW8Nk25IWwgKgV=BdkK*y~Yn< z2Vp1?Jd%To#l)?pdOek7OFb}ApDPx%YumQ915(#@wPH&ptKRSTe}#(7#Pk{fZ+GVh z8VbA5tNOftKrgjL^i@Hdn246Meo#% zHpq|9u>M&jf@&5BlHwT7vMlE3=h@iUz_x9V!Z07*qoM6N<$ Ef|~UNP5=M^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decisland/textures/entity/zombie_fish.png b/src/main/resources/assets/decisland/textures/entity/zombie_fish.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc3024870762c1f6edc0a9d96cb04c17f086ac5 GIT binary patch literal 1380 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 O0000 { log.warn.push(m); }; + +// 基岩版 JSON 允许注释/尾逗号 → 剥离后再解析 +function readJson(p) { + let t = fs.readFileSync(p, 'utf8'); + let out = ''; + let inStr = false, esc = false; + for (let i = 0; i < t.length; i++) { + const c = t[i], n = t[i + 1]; + if (inStr) { + out += c; + if (esc) esc = false; + else if (c === '\\') esc = true; + else if (c === '"') inStr = false; + continue; + } + if (c === '"') { inStr = true; out += c; continue; } + if (c === '/' && n === '/') { while (i < t.length && t[i] !== '\n') i++; out += '\n'; continue; } + if (c === '/' && n === '*') { i += 2; while (i < t.length && !(t[i] === '*' && t[i + 1] === '/')) i++; i++; continue; } + out += c; + } + out = out.replace(/,(\s*[}\]])/g, '$1'); + return JSON.parse(out); +} + +// ============ 移植清单 ============ +const MOB_SKIP = new Set(['elf_of_leaves', 'zombie_warrior', 'leaves_golem', 'dragon_head', 'host_of_deep_1', 'host_of_deep_2']); +const MOB_SIMPLE_KEEP = new Set([ + 'ash_bomb', 'ash_horse_head', 'ash_knight_head', 'ash_sword', 'ash_sword_phantom', 'bat_charger', + 'blackstone_thorn', 'ender_snake', 'friendly_spider', 'frozen_heart', 'frozen_heart_sleeping', + 'frozen_shadow', 'frozen_spider', 'ghost_diamond_sword', 'ghost_iron_sword', 'ghost_wooden_sword', + 'ice_thorn', 'nether_phantom', 'saucer', 'murloc_wizard', 'everlasting_winter_shadow', +]); +const VANILLA_KEEP = new Set([ + 'angry_chicken', 'ash_pufferfish', 'baby_ender_dragon', 'blood_zombie', 'brown_bear', 'crimson_slime', + 'elf_of_deep', 'enchant_illager', 'enchant_illager_1', 'enchant_illager_2', 'end_stone_golem', + 'everlasting_winter_ghast_1', 'fire_storm', 'frozen_ghast', 'gargoyle', 'ice_bat', 'ice_creeper', + 'jungle_spider', 'little_bat', 'murloc', 'nether_creeper', 'nether_golem', 'nether_skeleton', + 'obsidian_golem', 'polar_wolf', 'predators', 'pumpkin_slime', 'radiate_creeper', 'radiate_enderman', + 'radiate_spider', 'real_soul', 'sardine', 'shadow_archer', 'shadow_creeper', 'shadow_skeleton', + 'shadow_skeleton_puppet', 'simple_glider', 'son_of_chaos', 'son_of_nature', 'soul', 'soul_blaze', + 'star', 'stone_golem', 'swamp_golem', 'vampire_bat', 'vampire_bat_by_boss', 'warped_skeleton', 'watcher', +]); +const SPECIAL_KEEP = new Set(['clam', 'crab', 'zombie_fish', 'mushroom_monster']); +const PORTED = new Set(['elf_of_leaves', 'zombie_warrior', 'leaves_golem', 'pumpkin_bomb']); + +function buildPortList() { + const entsDir = `${BP}/entities`; + const names = fs.readdirSync(entsDir).filter((f) => f.endsWith('.json')).map((f) => f.slice(0, -5)); + const keep = []; + for (const n of names) { + if (PORTED.has(n)) continue; + if (n.endsWith('_tp_anchor') || n.endsWith('_anchor')) continue; + if (/^event_/.test(n)) continue; + if (['group', 'height_judge', 'illusioner_blindness', 'scarecrow', 'shadow_crystal', 'radiate_crystal', + 'everlasting_winter_crystal', 'shadow_fuse', 'shadow_portal', 'village_portal', 'simple_car', + 'escaped_soul', 'escaped_soul_1', 'escaped_soul_2', 'escaped_soul_3', 'empty', 'gravestone', + 'mine', 'snow_energy_fuse', 'storm_energy', 'frozen_laser_small'].includes(n)) continue; + const j = readJson(`${entsDir}/${n}.json`); + const desc = j['minecraft:entity']?.description ?? {}; + if (desc.runtime_identifier?.startsWith('minecraft:') && !desc.runtime_identifier.startsWith('minecraft:') === false) { + // 纯原版覆盖(无 dec: 前缀 identifier)跳过 + if (!String(desc.identifier).startsWith('dec:')) continue; + } + const runtime = desc.runtime_identifier ?? '-'; + const isDec = String(desc.identifier).startsWith('dec:'); + if (!isDec) continue; + // PROJECTILE 组(运行时为投射物且在 PROJECTILE 分类中)跳过 —— 已大多移植 + if (VANILLA_KEEP.has(n) || SPECIAL_KEEP.has(n) || MOB_SIMPLE_KEEP.has(n)) { keep.push(n); continue; } + if (MOB_SKIP.has(n)) continue; + // 投射物特征:runtime snowball/egg/arrow/fireball/llama_spit/eye_of_ender/tnt/fishing_hook/small_fireball/dragon_fireball + if (/^minecraft:(snowball|egg|arrow|fireball|small_fireball|dragon_fireball|llama_spit|eye_of_ender|splash_potion|fishing_hook|tnt|armor_stand|leash_knot|xporb|thrown_trident)$/.test(runtime)) continue; + keep.push(n); + } + return keep.sort(); +} + +// ============ 原版 runtime → Java 类映射 ============ +const VANILLA_MAP = { + 'minecraft:zombie': { cls: 'Zombie', pkg: 'monster', ren: 'ZombieRenderer', rp: 'Zombie', pkgR: 'monster', human64: true }, + 'minecraft:husk': { cls: 'Zombie', pkg: 'monster', ren: 'ZombieRenderer', rp: 'Zombie', pkgR: 'monster', human64: true }, + 'minecraft:drowned': { cls: 'Drowned', pkg: 'monster', ren: 'DrownedRenderer', rp: 'Drowned', pkgR: 'monster', human64: true }, + 'minecraft:skeleton': { cls: 'Skeleton', pkg: 'monster', ren: 'SkeletonRenderer', rp: 'AbstractSkeleton', pkgR: 'monster', human64: true }, + 'minecraft:stray': { cls: 'Stray', pkg: 'monster', ren: 'StrayRenderer', rp: 'Stray', pkgR: 'monster', human64: true }, + 'minecraft:wither_skeleton': { cls: 'WitherSkeleton', pkg: 'monster', ren: 'WitherSkeletonRenderer', rp: 'WitherSkeleton', pkgR: 'monster', human64: true }, + 'minecraft:creeper': { cls: 'Creeper', pkg: 'monster', ren: 'CreeperRenderer', rp: 'Creeper', pkgR: 'monster' }, + 'minecraft:bat': { cls: 'Bat', pkg: 'ambient', ren: 'BatRenderer', rp: 'Bat', pkgR: 'ambient' }, + 'minecraft:ghast': { cls: 'Ghast', pkg: 'monster', ren: 'GhastRenderer', rp: 'Ghast', pkgR: 'monster', flying: true }, + 'minecraft:blaze': { cls: 'Blaze', pkg: 'monster', ren: 'BlazeRenderer', rp: 'Blaze', pkgR: 'monster', fire: true }, + 'minecraft:slime': { cls: 'Slime', pkg: 'monster', ren: 'SlimeRenderer', rp: 'Slime', pkgR: 'monster' }, + 'minecraft:magma_cube': { cls: 'MagmaCube', pkg: 'monster', ren: 'MagmaCubeRenderer', rp: 'MagmaCube', pkgR: 'monster', fire: true }, + 'minecraft:vex': { cls: 'Vex', pkg: 'monster', ren: 'VexRenderer', rp: 'Vex', pkgR: 'monster', flying: true }, + 'minecraft:guardian': { cls: 'Guardian', pkg: 'monster', ren: 'GuardianRenderer', rp: 'Guardian', pkgR: 'monster', water: true }, + 'minecraft:iron_golem': { cls: 'IronGolem', pkg: 'animal', ren: 'IronGolemRenderer', rp: 'IronGolem', pkgR: 'animal' }, + 'minecraft:snow_golem': { cls: 'SnowGolem', pkg: 'animal', ren: 'SnowGolemRenderer', rp: 'SnowGolem', pkgR: 'animal' }, + 'minecraft:polar_bear': { cls: 'PolarBear', pkg: 'animal', ren: 'PolarBearRenderer', rp: 'PolarBear', pkgR: 'animal' }, + 'minecraft:cave_spider': { cls: 'CaveSpider', pkg: 'monster', ren: 'CaveSpiderRenderer', rp: 'CaveSpider', pkgR: 'monster' }, + 'minecraft:spider': { cls: 'Spider', pkg: 'monster', ren: 'SpiderRenderer', rp: 'Spider', pkgR: 'monster' }, + 'minecraft:enderman': { cls: 'EnderMan', pkg: 'monster', ren: 'EndermanRenderer', rp: 'EnderMan', pkgR: 'monster' }, + 'minecraft:cod': { cls: 'Cod', pkg: 'animal', ren: 'CodRenderer', rp: 'Cod', pkgR: 'animal', water: true }, + 'minecraft:chicken': { cls: 'Chicken', pkg: 'animal', ren: 'ChickenRenderer', rp: 'Chicken', pkgR: 'animal' }, + 'minecraft:evocation_illager': { cls: 'Evoker', pkg: 'monster', ren: 'EvokerRenderer', rp: 'SpellcasterIllager', pkgR: 'monster', human64: true }, + 'minecraft:silverfish': { cls: 'Silverfish', pkg: 'monster', ren: 'SilverfishRenderer', rp: 'Silverfish', pkgR: 'monster' }, + 'minecraft:sliverfish': { cls: 'Silverfish', pkg: 'monster', ren: 'SilverfishRenderer', rp: 'Silverfish', pkgR: 'monster' }, + 'minecraft:wolf': { cls: 'Wolf', pkg: 'animal', ren: 'WolfRenderer', rp: 'Wolf', pkgR: 'animal' }, + 'minecraft:pillager': { cls: 'Pillager', pkg: 'monster', ren: 'PillagerRenderer', rp: 'Pillager', pkgR: 'monster', human64: true }, + 'minecraft:vindicator': { cls: 'Vindicator', pkg: 'monster', ren: 'VindicatorRenderer', rp: 'Vindicator', pkgR: 'monster', human64: true }, + 'minecraft:phantom': { cls: 'Phantom', pkg: 'monster', ren: 'PhantomRenderer', rp: 'Phantom', pkgR: 'monster', flying: true }, + 'minecraft:cow': { cls: 'Cow', pkg: 'animal', ren: 'CowRenderer', rp: 'Cow', pkgR: 'animal' }, + 'minecraft:villager': { cls: 'Villager', pkg: 'npc', ren: 'VillagerRenderer', rp: 'Villager', pkgR: 'npc' }, + 'minecraft:witch': { cls: 'Witch', pkg: 'monster', ren: 'WitchRenderer', rp: 'Witch', pkgR: 'monster' }, + 'minecraft:salmon': { cls: 'Salmon', pkg: 'animal', ren: 'SalmonRenderer', rp: 'Salmon', pkgR: 'animal', water: true }, + 'minecraft:illusioner': { cls: 'Illusioner', pkg: 'monster', ren: 'IllusionerRenderer', rp: 'Illusioner', pkgR: 'monster' }, +}; +// 客户端几何体前缀 → 原版模型(无 runtime_identifier 时的回退判断) +// 注意:不能用 \b(下划线是 word 字符);长名在前;rest 仅允许空/点分/特定后缀,防止 everlasting_winter_ghast 被误判为 ghast +const VANILLA_GEO_RE = /^geometry\.(villager\.witch|snowgolem_have_block|wither_skeleton|evocation_illager|polar_bear|polarbear|magma_cube|cave_spider|cavespider|illusioner|villager|silverfish|vindicator|irongolem|iron_golem|snow_golem|snowgolem|drowned|skeleton|husk|zombie|stray|creeper|ghast|blaze|slime|vex|guardian|spider|enderman|chicken|phantom|cow|witch|salmon|cod|wolf|pillager|bat)(.*)$/i; +function matchVanillaGeo(geoId) { + if (!geoId) return null; + const m = VANILLA_GEO_RE.exec(geoId); + if (!m) return null; + const rest = m[2]; + if (rest !== '' && !rest.startsWith('.') && rest !== '_have_block') return null; + return GEO_PREFIX_TO_RUNTIME[m[1].toLowerCase()]; +} +const GEO_PREFIX_TO_RUNTIME = { + zombie: 'minecraft:zombie', husk: 'minecraft:husk', drowned: 'minecraft:drowned', + skeleton: 'minecraft:skeleton', wither_skeleton: 'minecraft:wither_skeleton', stray: 'minecraft:stray', + creeper: 'minecraft:creeper', bat: 'minecraft:bat', ghast: 'minecraft:ghast', blaze: 'minecraft:blaze', + slime: 'minecraft:slime', magma_cube: 'minecraft:magma_cube', vex: 'minecraft:vex', + guardian: 'minecraft:guardian', iron_golem: 'minecraft:iron_golem', irongolem: 'minecraft:iron_golem', + snow_golem: 'minecraft:snow_golem', snowgolem: 'minecraft:snow_golem', snowgolem_have_block: 'minecraft:snow_golem', + polarbear: 'minecraft:polar_bear', polar_bear: 'minecraft:polar_bear', spider: 'minecraft:spider', + cavespider: 'minecraft:cave_spider', cave_spider: 'minecraft:cave_spider', enderman: 'minecraft:enderman', + cod: 'minecraft:cod', salmon: 'minecraft:salmon', chicken: 'minecraft:chicken', evocation_illager: 'minecraft:evocation_illager', + illusioner: 'minecraft:illusioner', silverfish: 'minecraft:silverfish', wolf: 'minecraft:wolf', pillager: 'minecraft:pillager', + vindicator: 'minecraft:vindicator', phantom: 'minecraft:phantom', cow: 'minecraft:cow', + villager: 'minecraft:villager', 'villager.witch': 'minecraft:witch', witch: 'minecraft:witch', +}; +// 泛型渲染器 → 类型参数(用 renParam 实体类) +const GENERIC_REN_PARAM = { SkeletonRenderer: 'AbstractSkeleton', SpiderRenderer: 'Spider', EvokerRenderer: 'SpellcasterIllager' }; +// 原版属性构建器(cls 无自身 createAttributes 时回退) +const ATTR_BUILDER = { + Skeleton: 'net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes()', + Stray: 'net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes()', + WitherSkeleton: 'net.minecraft.world.entity.monster.AbstractSkeleton.createAttributes()', + CaveSpider: 'net.minecraft.world.entity.monster.Spider.createAttributes()', + Cod: 'net.minecraft.world.entity.animal.AbstractFish.createAttributes()', + Salmon: 'net.minecraft.world.entity.animal.AbstractFish.createAttributes()', + Slime: 'net.minecraft.world.entity.monster.Monster.createMonsterAttributes()', + Phantom: 'net.minecraft.world.entity.FlyingMob.createMobAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE, 6.0)', +}; +// 原版默认最大生命(用于判断是否覆盖基岩血量) +const VANILLA_HP = { + Zombie: 20, Drowned: 20, Skeleton: 20, Stray: 20, WitherSkeleton: 20, Creeper: 20, Bat: 6, Ghast: 10, + Blaze: 20, Slime: 16, MagmaCube: 16, Vex: 14, Guardian: 30, IronGolem: 100, SnowGolem: 4, PolarBear: 30, + CaveSpider: 16, Spider: 16, EnderMan: 40, Cod: 3, Chicken: 4, Evoker: 24, Silverfish: 8, Wolf: 8, + Pillager: 24, Vindicator: 24, Phantom: 20, Cow: 10, Villager: 20, Witch: 26, Salmon: 3, Illusioner: 32, +}; + +// ============ 生成群系标签映射 ============ +const TAG_MAP = { + taiga: ['minecraft:taiga', 'minecraft:snowy_taiga', 'minecraft:old_growth_pine_taiga', 'minecraft:old_growth_spruce_taiga'], + mega_taiga: ['minecraft:old_growth_pine_taiga', 'minecraft:old_growth_spruce_taiga'], + forest: ['minecraft:forest', 'minecraft:birch_forest', 'minecraft:dark_forest', 'minecraft:flower_forest', 'minecraft:old_growth_birch_forest'], + plains: ['minecraft:plains', 'minecraft:sunflower_plains'], + desert: ['minecraft:desert'], + jungle: ['minecraft:jungle', 'minecraft:bamboo_jungle', 'minecraft:sparse_jungle'], + savanna: ['minecraft:savanna', 'minecraft:savanna_plateau', 'minecraft:windswept_savanna'], + swamp: ['minecraft:swamp', 'minecraft:mangrove_swamp'], + mountains: ['minecraft:windswept_hills', 'minecraft:windswept_gravelly_hills', 'minecraft:windswept_forest', 'minecraft:jagged_peaks', 'minecraft:frozen_peaks', 'minecraft:stony_peaks', 'minecraft:snowy_slopes', 'minecraft:meadow', 'minecraft:grove'], + mountain: ['minecraft:windswept_hills', 'minecraft:windswept_gravelly_hills', 'minecraft:windswept_forest', 'minecraft:jagged_peaks', 'minecraft:frozen_peaks', 'minecraft:stony_peaks', 'minecraft:snowy_slopes', 'minecraft:meadow', 'minecraft:grove'], + extreme_hills: ['minecraft:windswept_hills', 'minecraft:windswept_gravelly_hills', 'minecraft:windswept_forest'], + snowy: ['minecraft:snowy_plains', 'minecraft:ice_spikes', 'minecraft:snowy_beach', 'minecraft:snowy_taiga', 'minecraft:frozen_river'], + frozen: ['minecraft:frozen_ocean', 'minecraft:deep_frozen_ocean', 'minecraft:frozen_river', 'minecraft:snowy_plains', 'minecraft:ice_spikes', 'minecraft:snowy_taiga', 'minecraft:frozen_peaks', 'minecraft:snowy_slopes'], + cold: ['minecraft:cold_ocean', 'minecraft:deep_cold_ocean', 'minecraft:taiga', 'minecraft:snowy_plains', 'minecraft:snowy_taiga'], + temperate: ['minecraft:plains', 'minecraft:forest', 'minecraft:birch_forest'], + lukewarm: ['minecraft:lukewarm_ocean', 'minecraft:deep_lukewarm_ocean'], + warm: ['minecraft:warm_ocean', 'minecraft:desert', 'minecraft:jungle', 'minecraft:savanna', 'minecraft:lukewarm_ocean', 'minecraft:deep_lukewarm_ocean'], + ocean: ['minecraft:ocean', 'minecraft:deep_ocean', 'minecraft:warm_ocean', 'minecraft:lukewarm_ocean', 'minecraft:deep_lukewarm_ocean', 'minecraft:cold_ocean', 'minecraft:deep_cold_ocean', 'minecraft:frozen_ocean', 'minecraft:deep_frozen_ocean'], + deep_ocean: ['minecraft:deep_ocean', 'minecraft:deep_lukewarm_ocean', 'minecraft:deep_cold_ocean', 'minecraft:deep_frozen_ocean'], + river: ['minecraft:river', 'minecraft:frozen_river'], + beach: ['minecraft:beach', 'minecraft:snowy_beach', 'minecraft:stony_shore'], + nether: ['minecraft:nether_wastes', 'minecraft:crimson_forest', 'minecraft:warped_forest', 'minecraft:soul_sand_valley', 'minecraft:basalt_deltas'], + nether_wastes: ['minecraft:nether_wastes'], + crimson_forest: ['minecraft:crimson_forest'], + warped_forest: ['minecraft:warped_forest'], + soul_sand_valley: ['minecraft:soul_sand_valley'], + soulsand_valley: ['minecraft:soul_sand_valley'], + basalt_deltas: ['minecraft:basalt_deltas'], + the_end: ['minecraft:the_end', 'minecraft:end_highlands', 'minecraft:end_midlands', 'minecraft:small_end_islands', 'minecraft:end_barrens'], + end: ['minecraft:the_end', 'minecraft:end_highlands', 'minecraft:end_midlands', 'minecraft:small_end_islands', 'minecraft:end_barrens'], + mushroom: ['minecraft:mushroom_fields'], + mushroom_island: ['minecraft:mushroom_fields'], + mushroom_fields: ['minecraft:mushroom_fields'], + // 泛化标签(基岩对全体怪物/动物群系)→ 常规主世界群系(getter 延迟求值,避免 TDZ) + get monster() { return DEFAULT_BIOMES; }, + get animal() { return DEFAULT_BIOMES; }, + deep_dark: ['minecraft:deep_dark'], + mesa: ['minecraft:badlands', 'minecraft:wooded_badlands', 'minecraft:eroded_badlands'], + badlands: ['minecraft:badlands', 'minecraft:wooded_badlands', 'minecraft:eroded_badlands'], + flower_forest: ['minecraft:flower_forest'], + birch_forest: ['minecraft:birch_forest'], + dark_forest: ['minecraft:dark_forest'], + sunflower_plains: ['minecraft:sunflower_plains'], + ice_plains: ['minecraft:snowy_plains', 'minecraft:ice_spikes'], + ice: ['minecraft:snowy_plains', 'minecraft:ice_spikes', 'minecraft:frozen_ocean', 'minecraft:frozen_peaks'], +}; +const DEFAULT_BIOMES = ['minecraft:plains', 'minecraft:forest', 'minecraft:birch_forest', 'minecraft:dark_forest', 'minecraft:taiga', 'minecraft:desert', 'minecraft:savanna', 'minecraft:swamp', 'minecraft:snowy_plains', 'minecraft:windswept_hills']; +const OCEAN_BIOMES = ['minecraft:ocean', 'minecraft:deep_ocean', 'minecraft:lukewarm_ocean', 'minecraft:deep_lukewarm_ocean', 'minecraft:cold_ocean', 'minecraft:deep_cold_ocean', 'minecraft:frozen_ocean', 'minecraft:deep_frozen_ocean']; + +// ============ 贴图:TGA 解码 + PNG 编码 ============ +function decodeTGA(buf) { + const idLength = buf[0]; + const imageType = buf[2]; + const width = buf.readUInt16LE(12); + const height = buf.readUInt16LE(14); + const bpp = buf[16]; + const descriptor = buf[17]; + const topDown = (descriptor & 0x20) !== 0; + const bytesPP = bpp / 8; + let off = 18 + idLength; + if (imageType === 1 || imageType === 9) off += buf.readUInt16LE(4) * 2; // 跳过 colormap(罕见) + const px = Buffer.alloc(width * height * 4); + const setPx = (i, b, g, r, a) => { px[i * 4] = r; px[i * 4 + 1] = g; px[i * 4 + 2] = b; px[i * 4 + 3] = a; }; + const bytes = width * height * bytesPP; + const data = buf.subarray(off, off + bytes); + + if (imageType === 2 || imageType === 3) { + let p = 0; + for (let i = 0; i < width * height; i++) { + if (imageType === 3) setPx(i, data[p], data[p], data[p], 255), (p += 1); + else if (bytesPP === 4) setPx(i, data[p], data[p + 1], data[p + 2], data[p + 3]), (p += 4); + else setPx(i, data[p], data[p + 1], data[p + 2], 255), (p += 3); + } + } else if (imageType === 10 || imageType === 11) { + let p = 0, i = 0; + while (i < width * height && p < data.length) { + const h = data[p++]; + const count = (h & 0x7f) + 1; + const read = () => { if (imageType === 11) { const g = data[p]; p += 1; return [g, g, g, 255]; } if (bytesPP === 4) { const v = [data[p], data[p + 1], data[p + 2], data[p + 3]]; p += 4; return v; } const v = [data[p], data[p + 1], data[p + 2], 255]; p += 3; return v; }; + if (h & 0x80) { const c = read(); for (let k = 0; k < count; k++, i++) setPx(i, c[0], c[1], c[2], c[3]); } + else for (let k = 0; k < count; k++, i++) { const c = read(); setPx(i, c[0], c[1], c[2], c[3]); } + } + } else { + return null; + } + // 行序:TGA 默认自底向上 → 翻转为自顶向下 + if (!topDown) { + const row = Buffer.alloc(width * 4); + for (let y = 0; y < height / 2; y++) { + const a = y * width * 4, b = (height - 1 - y) * width * 4; + data.copy ? null : null; + px.copy(row, 0, a, a + width * 4); + px.copy(px, a, b, b + width * 4); + row.copy(px, b); + } + } + return { width, height, px }; +} + +function encodePNG(width, height, rgba) { + const raw = Buffer.alloc((width * 4 + 1) * height); + for (let y = 0; y < height; y++) { + raw[y * (width * 4 + 1)] = 0; + rgba.copy(raw, y * (width * 4 + 1) + 1, y * width * 4, (y + 1) * width * 4); + } + const chunk = (type, data) => { + const len = Buffer.alloc(4); len.writeUInt32BE(data.length); + const body = Buffer.concat([Buffer.from(type), data]); + const crc = Buffer.alloc(4); crc.writeUInt32BE(zlib.crc32(body) >>> 0); + return Buffer.concat([len, body, crc]); + }; + const ihdr = Buffer.alloc(13); + ihdr.writeUInt32BE(width, 0); ihdr.writeUInt32BE(height, 4); + ihdr[8] = 8; ihdr[9] = 6; // 8bit RGBA + return Buffer.concat([ + Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]), + chunk('IHDR', ihdr), chunk('IDAT', zlib.deflateSync(raw)), chunk('IEND', Buffer.alloc(0)), + ]); +} + +// 基岩 64×32 旧布局 → Java 64×64 布局(人形外层 UV 复制到下半区) +function legacyHumanoidTo64(img) { + if (img.width !== 64 || img.height !== 32) return img; + const out = Buffer.alloc(64 * 64 * 4, 0); + img.px.copy(out, 0); // 上半区原样 + const copy = (sx, sy, w, h, dx, dy) => { + for (let y = 0; y < h; y++) { + img.px.copy(out, ((dy + y) * 64 + dx) * 4, ((sy + y) * 64 + sx) * 4, ((sy + y) * 64 + sx + w) * 4); + } + }; + copy(16, 16, 24, 16, 16, 32); // jacket + copy(40, 16, 16, 16, 40, 32); // right sleeve + copy(40, 16, 16, 16, 40, 48); // left sleeve + copy(0, 16, 16, 16, 0, 32); // right pants + copy(0, 16, 16, 16, 0, 48); // left pants + return { width: 64, height: 64, px: out }; +} + +function findTexture(rel) { + if (!rel) return null; + const clean = rel.replace(/^textures\//, ''); + for (const ext of ['.tga', '.png', '.jpg', '.jpeg']) { + const p = `${RP}/textures/${clean}${ext}`; + if (fs.existsSync(p)) return p; + } + // 子目录模糊匹配(末段同名) + const base = path.basename(clean); + const hit = []; + (function walk(d) { + for (const f of fs.readdirSync(d)) { + const p = `${d}/${f}`; + if (fs.statSync(p).isDirectory()) walk(p); + else if (f.startsWith(base + '.')) hit.push(p); + } + })(`${RP}/textures`); + return hit.find((p) => p.endsWith('.tga')) ?? hit[0] ?? null; +} + +function convertTexture(srcPath, outName, human64) { + const outDir = `${RES}/assets/decisland/textures/entity`; + fs.mkdirSync(outDir, { recursive: true }); + const outP = `${outDir}/${outName}.png`; + if (srcPath.endsWith('.png') || srcPath.endsWith('.jpg')) { + fs.copyFileSync(srcPath, outP); + return 'copy'; + } + const img = decodeTGA(fs.readFileSync(srcPath)); + if (!img) { warn(`贴图解码失败: ${srcPath}`); return null; } + const fixed = human64 ? legacyHumanoidTo64(img) : img; + fs.writeFileSync(outP, encodePNG(fixed.width, fixed.height, fixed.px)); + return 'convert'; +} + +// ============ 行为解析 ============ +function parseBehavior(name) { + const p = `${BP}/entities/${name}.json`; + if (!fs.existsSync(p)) return null; + const j = readJson(p); + const e = j['minecraft:entity']; + // 该基岩包部分文件用无前缀键(components/component_groups),兼容两种写法 + const components = e['minecraft:components'] ?? e.components ?? {}; + const groups = e['minecraft:component_groups'] ?? e.component_groups ?? {}; + // 合并 component_groups 中的行为组件(事件触发的组也参与 AI 推断) + const merged = { ...components }; + const goalKeys = (obj) => Object.keys(obj).filter((k) => k.startsWith('minecraft:behavior.')); + const mergeComponent = (k) => { + if (merged[k] !== undefined) return; + for (const g of Object.values(groups)) { + if (g[k] !== undefined) { merged[k] = g[k]; return; } + } + }; + for (const g of Object.values(groups)) for (const k of goalKeys(g)) mergeComponent(k); + + const families = (merged['minecraft:type_family']?.family ?? []).map(String); + // 数值提取:基岩允许区间对象({range_min,range_max} / {min,max})与表达式字符串,取有效值否则回退 + const numOr = (v, def) => { + if (typeof v === 'number' && isFinite(v)) return v; + if (v && typeof v === 'object') { + const hi = [v.range_max, v.max, v.upper].find((x) => typeof x === 'number' && isFinite(x)); + if (hi != null) return hi; + const lo = [v.range_min, v.min, v.lower].find((x) => typeof x === 'number' && isFinite(x)); + if (lo != null) return lo; + } + if (typeof v === 'string') { const n = parseFloat(v); if (isFinite(n)) return n; } + return def; + }; + const health = numOr(merged['minecraft:health']?.max, numOr(merged['minecraft:health']?.value, 20)); + const movement = numOr(merged['minecraft:movement']?.value, 0.25); + const attack = numOr(merged['minecraft:attack']?.damage, 3); + const scale = numOr(merged['minecraft:scale']?.value, 1); + const box = merged['minecraft:collision_box'] ?? {}; + const kb = numOr(merged['minecraft:knockback_resistance']?.value, numOr(merged['minecraft:knockback_resistance'], 0)); + const follow = numOr(merged['minecraft:follow_range']?.value, numOr(merged['minecraft:follow_range'], 32)); + const fireImmune = merged['minecraft:fire_immune'] !== undefined || families.includes('fire_immune'); + + const melee = merged['minecraft:behavior.melee_attack'] !== undefined || merged['minecraft:behavior.melee_box_attack'] !== undefined; + const rangedComp = merged['minecraft:behavior.ranged_attack'] ?? merged['minecraft:shooter'] ?? null; + const projectileDef = merged['minecraft:projectile']?.def ?? merged['minecraft:projectile']?.projectile + ?? merged['minecraft:shooter']?.def ?? null; + const ranged = rangedComp !== undefined && rangedComp !== null; + const rangedInterval = Math.round(1 / (rangedComp?.interval ?? 0.025)); + + // 目标推断 + const targets = new Set(); + const nat = merged['minecraft:behavior.nearest_attackable_target']; + const collectTargets = (obj) => { + if (!obj) return; + for (const et of obj.entity_types ?? []) { + const filters = JSON.stringify(et.filters ?? {}); + if (/player/.test(filters)) targets.add('player'); + if (/villager(?!_)/.test(filters)) targets.add('villager'); + if (/iron_golem|irongolem/.test(filters)) targets.add('iron_golem'); + if (/snow_golem|snowgolem/.test(filters)) targets.add('snow_golem'); + const val = typeof et.filters?.value === 'string' ? et.filters.value : null; + if (val) targets.add(val.replace(/^minecraft:/, '').replace('irongolem', 'iron_golem')); + } + }; + collectTargets(nat); + for (const g of Object.values(groups)) collectTargets(g['minecraft:behavior.nearest_attackable_target']); + if (targets.size === 0 && (melee || ranged)) targets.add('player'); + + const panic = merged['minecraft:behavior.panic'] !== undefined; + const hostile = melee || ranged || nat !== undefined; + const water = families.some((f) => /fish|water|aquatic|clam|crab|nautilus|urchin|sardine/.test(f)) + || merged['minecraft:underwater_movement'] !== undefined + || merged['minecraft:behavior.swim_wander'] !== undefined + || merged['minecraft:navigation.swim'] !== undefined; + const undead = families.includes('undead'); + const flying = merged['minecraft:navigation.fly'] !== undefined || merged['minecraft:movement.fly'] !== undefined + || merged['minecraft:behavior.random_hover'] !== undefined; + + return { + name, components: merged, families, health, movement, attack, scale, box, kb, follow, fireImmune, + melee, ranged, rangedInterval, projectileDef, targets: [...targets], panic, hostile, water, undead, flying, + xp: 5, + }; +} + +// ============ 客户端实体解析 ============ +let animIndex = null; +function buildAnimIndex() { + const idx = {}; + (function walk(d) { + for (const f of fs.readdirSync(d)) { + const p = `${d}/${f}`; + if (fs.statSync(p).isDirectory()) walk(p); + else if (f.endsWith('.json')) { + try { + const j = readJson(p); + const anims = j.animations ?? {}; + for (const id of Object.keys(anims)) idx[id] = { file: p, obj: anims[id] }; + } catch { /* skip */ } + } + } + })(`${RP}/animations`); + return idx; +} + +function parseClientEntity(name) { + for (const cand of [`${RP}/entity/${name}.entity.json`, `${RP}/entity/${name}.json`]) { + if (fs.existsSync(cand)) { + const j = readJson(cand); + const d = j['minecraft:client_entity']?.description ?? {}; + const texField = d.textures?.default ?? Object.values(d.textures ?? {})[0] ?? null; + return { geometryId: d.geometry?.default ?? null, texturePath: texField, animations: d.animations ?? {} }; + } + } + return { geometryId: null, texturePath: null, animations: {} }; +} + +// ============ 物品ID清单(战利品校验) ============ +// 基岩旧版物品名 → 1.21.1 现名 +const ITEM_RENAME = { + fish: 'cod', cooked_fish: 'cooked_cod', skull: 'skeleton_skull', waterlily: 'lily_pad', + quartz_ore: 'nether_quartz_ore', red_flower: 'poppy', magma: 'magma_block', clownfish: 'tropical_fish', + record: 'music_disc_13', + record_13: 'music_disc_13', record_cat: 'music_disc_cat', record_blocks: 'music_disc_blocks', + record_chirp: 'music_disc_chirp', record_far: 'music_disc_far', record_mall: 'music_disc_mall', + record_mellohi: 'music_disc_mellohi', record_stal: 'music_disc_stal', record_strad: 'music_disc_strad', + record_ward: 'music_disc_ward', record_11: 'music_disc_11', record_wait: 'music_disc_wait', +}; + +function collectItemIds() { + const ids = new Set(); + // dec 物品:宽松扫描全部 Kotlin 源码中的引号 snake_case 字符串 + // (物品定义形式多样:registerMaterial("x")、列表元素 "x"、Builder("x")…校验池宁多勿缺) + (function walk(d) { + for (const f of fs.readdirSync(d)) { + const p = `${d}/${f}`; + const s = fs.statSync(p); + if (s.isDirectory()) walk(p); + else if (f.endsWith('.kt')) { + const t = fs.readFileSync(p, 'utf8'); + for (const m of t.matchAll(/"([a-z][a-z0-9_]{2,})"/g)) ids.add(m[1]); + } + } + })(SRC); + // 原版物品:客户端 jar 提取的完整注册表(jar_extract.mjs 产出,含全部方块物品) + const vanillaItems = `${PROJ}/tools/entity_port/vanilla_items.json`; + if (fs.existsSync(vanillaItems)) { + for (const i of JSON.parse(fs.readFileSync(vanillaItems, 'utf8'))) ids.add('mc:' + i); + } else { + throw new Error('缺少 vanilla_items.json —— 先运行 jar_extract.mjs'); + } + return ids; +} + +const EXTRA_VANILLA = new Set(['minecraft:iron_ingot', 'minecraft:gold_ingot', 'minecraft:emerald', 'minecraft:diamond', + 'minecraft:bone', 'minecraft:string', 'minecraft:gunpowder', 'minecraft:rotten_flesh', 'minecraft:arrow', + 'minecraft:torch', 'minecraft:carrot', 'minecraft:potato', 'minecraft:beetroot', 'minecraft:coal', 'minecraft:iron_nugget', + 'minecraft:gold_nugget', 'minecraft:redstone', 'minecraft:lapis_lazuli', 'minecraft:quartz', 'minecraft:leather', + 'minecraft:paper', 'minecraft:book', 'minecraft:glowstone_dust', 'minecraft:blaze_powder', 'minecraft:blaze_rod', + 'minecraft:ender_pearl', 'minecraft:ender_eye', 'minecraft:ghast_tear', 'minecraft:slime_ball', 'minecraft:snowball', + 'minecraft:stick', 'minecraft:apple', 'minecraft:bread', 'minecraft:wheat', 'minecraft:seagrass', 'minecraft:cod', + 'minecraft:salmon', 'minecraft:tropical_fish', 'minecraft:prismarine_shard', 'minecraft:prismarine_crystals', + 'minecraft:spider_eye', 'minecraft:sugar', 'minecraft:egg', 'minecraft:feather', 'minecraft:flint', + 'minecraft: experience_bottle'.trim(), 'minecraft:glass_bottle', 'minecraft:scute', 'minecraft:ink_sac', + 'minecraft:glow_ink_sac', 'minecraft:honeycomb', 'minecraft:cobweb', 'minecraft:clay_ball', 'minecraft:brick', + 'minecraft:nether_wart', 'minecraft:crying_obsidian', 'minecraft:obsidian', 'minecraft:cryingobsidian_placeholder'].map((s) => s.trim())); + +function convertLoot(name) { + const p = `${BP}/loot_tables/entities/${name}.json`; + if (!fs.existsSync(p)) return { written: false }; + const outDir = `${RES}/data/decisland/loot_table/entities`; + fs.mkdirSync(outDir, { recursive: true }); + + const mapId = (id) => { + if (typeof id !== 'string') return null; + if (id.startsWith('dec:')) return `decisland:${id.slice(4)}`; + if (id.startsWith('minecraft:')) { + const short = id.slice(10); + return ITEM_RENAME[short] ? `minecraft:${ITEM_RENAME[short]}` : id; + } + return id; + }; + const itemValid = (javaId) => { + if (!javaId?.startsWith('decisland:')) return ITEM_IDS.has('mc:' + javaId.slice(10)) || EXTRA_VANILLA.has(javaId) || javaId === 'minecraft:air'; + return ITEM_IDS.has(javaId.slice(10)); + }; + const convCount = (c) => { + if (typeof c === 'number') return c; + if (c && typeof c === 'object' && ('min' in c || 'max' in c)) return { min: c.min ?? 1, max: c.max ?? 1 }; + return c; + }; + const dropped = []; + const convFunctions = (fns) => (fns ?? []).map((f) => { + const fn = f.function?.replace(/^minecraft:/, ''); + if (fn === 'set_count') return { function: 'minecraft:set_count', count: convCount(f.count) }; + if (fn === 'set_damage') return { function: 'minecraft:set_damage', damage: f.damage ?? { min: 0, max: 1 } }; + if (fn === 'looting_enchant') return { function: 'minecraft:enchanted_count_increase', enchantment: 'minecraft:looting', count: convCount(f.count ?? 1) }; + if (fn === 'enchant_randomly') return { function: 'minecraft:enchant_randomly' }; + if (fn === 'furnace_smelt') return { function: 'minecraft:furnace_smelt' }; + if (fn === 'set_name') return { function: 'minecraft:set_name', name: f.name }; + dropped.push(fn); + return null; + }).filter(Boolean); + const convConditions = (conds) => (conds ?? []).map((c) => { + const cc = c.condition?.replace(/^minecraft:/, ''); + if (cc === 'killed_by_player') return { condition: 'minecraft:killed_by_player' }; + if (cc === 'random_chance') return { condition: 'minecraft:random_chance', chance: c.chance }; + if (cc === 'random_chance_with_looting') return { condition: 'minecraft:random_chance', chance: c.chance ?? 0.05 }; + if (cc === 'random_regional_difficulty_chance') return null; + dropped.push(cc); + return null; + }).filter(Boolean); + + const convEntry = (e, depth = 0) => { + const type = (e.type ?? 'item').replace(/^minecraft:/, ''); + if (type === 'item') { + const javaId = mapId(e.name); + if (!javaId || !itemValid(javaId)) { dropped.push('item:' + e.name); return null; } + const out = { type: 'minecraft:item', name: javaId }; + if (e.weight != null) out.weight = e.weight; + if (e.quality != null) out.quality = e.quality; + if (e.functions?.length) out.functions = convFunctions(e.functions); + if (e.conditions?.length) out.conditions = convConditions(e.conditions); + if (e.children?.length) { + const kids = (e.children ?? []).map((k) => convEntry(k, depth)).filter(Boolean); + if (kids.length) out.children = kids; + } + return out; + } + if (type === 'empty') return { type: 'minecraft:empty' }; + if (type === 'loot_table') { + // 子表引用:dec 本地表 → 递归内联;原版表 → 映射 minecraft: 命名空间 + const ref = String(e.name ?? ''); + const rel = ref.replace(/^loot_tables\//, '').replace(/\.json$/, ''); + const local = `${BP}/loot_tables/${rel}.json`; + if (depth < 4 && fs.existsSync(local)) { + try { + const sub = readJson(local); + const kids = (sub.pools ?? []).flatMap((pl) => (pl.entries ?? []).map((k) => convEntry(k, depth + 1))).filter(Boolean); + if (kids.length) return { type: 'minecraft:group', children: kids }; + } catch { /* fallthrough */ } + dropped.push('loot_table(空):' + ref); + return null; + } + return { type: 'minecraft:loot_table', name: `minecraft:${rel}` }; + } + dropped.push('type:' + type); + return null; + }; + + const src = readJson(p); + const pools = []; + for (const pool of src.pools ?? []) { + const entries = (pool.entries ?? []).map(convEntry).filter(Boolean); + if (!entries.length) continue; + const out = { rolls: pool.rolls ?? 1 }; + if (pool.conditions?.length) { + const cc = convConditions(pool.conditions); + if (cc.length) out.conditions = cc; + } + out.entries = entries; + pools.push(out); + } + if (!pools.length) { warn(`战利品表转换后为空: ${name}`); return { written: false }; } + fs.writeFileSync(`${outDir}/${name}.json`, JSON.stringify({ type: 'minecraft:entity', pools }, null, 2) + '\n'); + if (dropped.length) log.info.push(`loot[${name}] 丢弃: ${[...new Set(dropped)].join(', ')}`); + return { written: true }; +} + +// ============ 生成规则 → biome modifier ============ +function convertSpawnRule(name) { + const p = `${BP}/spawn_rules/${name}.json`; + if (!fs.existsSync(p)) return null; + const j = readJson(p); + const sr = j['minecraft:spawn_rules']; + const id = sr?.description?.identifier; + if (id !== `dec:${name}`) { warn(`spawn_rules identifier 不匹配: ${name} (${id})`); return null; } + const cond = (sr.conditions ?? [])[0]; + if (!cond) return null; + const water = cond['minecraft:spawns_underwater'] !== undefined || cond['minecraft:spawns_on_medium_surface'] === undefined && cond['minecraft:spawns_underwater'] !== undefined; + const onLand = cond['minecraft:spawns_on_surface'] !== undefined || cond['minecraft:spawns_underground'] !== undefined; + const weight = cond['minecraft:weight']?.default ?? 8; + const herd = cond['minecraft:herd'] ?? {}; + const minCount = Math.max(1, Math.min(4, herd.min_size ?? 1)); + const maxCount = Math.max(minCount, Math.min(4, herd.max_size ?? minCount)); + + // 收集群系标签 + const tags = new Set(); + const scan = (o) => { + if (Array.isArray(o)) { o.forEach(scan); return; } + if (o && typeof o === 'object') { + if (o.test === 'has_biome_tag' && typeof o.value === 'string') tags.add(o.value); + for (const v of Object.values(o)) scan(v); + } + }; + scan(cond['minecraft:biome_filter']); + let biomes = []; + for (const t of tags) { + const mapped = TAG_MAP[t]; + if (mapped) biomes.push(...mapped); + else warn(`未知群系标签: ${t} (${name})`); + } + biomes = [...new Set(biomes)]; + if (!biomes.length) biomes = tags.size === 0 ? DEFAULT_BIOMES : (water ? OCEAN_BIOMES : DEFAULT_BIOMES); + if (tags.size === 0 && water) biomes = OCEAN_BIOMES; + + // 写群系标签 + const tagDir = `${RES}/data/decisland/tags/worldgen/biome`; + fs.mkdirSync(tagDir, { recursive: true }); + fs.writeFileSync(`${tagDir}/spawns_${name}.json`, JSON.stringify({ values: biomes }, null, 2) + '\n'); + const modDir = `${RES}/data/decisland/neoforge/biome_modifier`; + fs.mkdirSync(modDir, { recursive: true }); + fs.writeFileSync(`${modDir}/${name}_spawns.json`, JSON.stringify({ + type: 'neoforge:add_spawns', + biomes: `#decisland:spawns_${name}`, + spawners: { type: `decisland:${name}`, weight, minCount, maxCount }, + }, null, 2) + '\n'); + return { water: !onLand && cond['minecraft:spawns_underwater'] !== undefined, weight, minCount, maxCount, biomes: biomes.length }; +} + +// ============ 几何/动画资源 ============ +// 按几何体 identifier 精确查找(实体常引用其它名字的几何体,如 ash_sword_phantom → geometry.ash_sword) +let geoFileIndex = null; +function buildGeoFileIndex() { + const idx = []; + (function walk(d) { + for (const f of fs.readdirSync(d)) { + const p = `${d}/${f}`; + const s = fs.statSync(p); + if (s.isDirectory()) walk(p); + else if (f.endsWith('.json')) { + try { + const j = readJson(p); + const geos = j['minecraft:geometry'] ?? []; + for (const g of (Array.isArray(geos) ? geos : [])) { + const id = g?.description?.identifier; + if (id) idx.push({ id, p, j }); + } + // legacy 1.8.0 顶层键式几何体:"geometry.xxx": { bones: [...] } + for (const k of Object.keys(j)) { + if (/^geometry\./.test(k) && j[k] && typeof j[k] === 'object' && !Array.isArray(j[k])) idx.push({ id: k, p, j }); + } + } catch { /* skip */ } + } + } + })(`${RP}/models`); + return idx; +} +function loadGeometryFile(geometryId) { + if (!geometryId) return null; + if (!geoFileIndex) geoFileIndex = buildGeoFileIndex(); + return geoFileIndex.find((e) => e.id === geometryId) ?? null; +} + +function extractGeometry(name, geometryId) { + const found = loadGeometryFile(geometryId); + if (!found) return null; + const { p, j } = found; + const outDir = `${RES}/assets/decisland/bedrock/models/entity`; + fs.mkdirSync(outDir, { recursive: true }); + const outP = `${outDir}/${name}.geometry.json`; + const geos = j['minecraft:geometry']; + if (Array.isArray(geos) && geos.length > 0) { + const match = geos.find((g) => g?.description?.identifier === geometryId) ?? geos[0]; + if (!match) return null; + fs.writeFileSync(outP, JSON.stringify({ format_version: j.format_version ?? '1.12.0', 'minecraft:geometry': [match] })); + return outP; + } + // legacy 1.8.0 顶层键式:仅保留目标几何体(加载器取文件内第一个 geometry.* 键) + const legacyKeys = Object.keys(j).filter((k) => /^geometry\./.test(k) && j[k] && typeof j[k] === 'object' && !Array.isArray(j[k])); + if (legacyKeys.length > 1) { + const keep = legacyKeys.find((k) => k === geometryId) ?? legacyKeys[0]; + fs.writeFileSync(outP, JSON.stringify({ format_version: j.format_version ?? '1.8.0', [keep]: j[keep] })); + return outP; + } + fs.copyFileSync(p, outP); + return outP; +} + +function extractAnimations(name) { + if (!animIndex) animIndex = buildAnimIndex(); + const ce = parseClientEntity(name); + const entries = Object.entries(ce.animations); + const pick = (test) => { + for (const [key, id] of entries) if (test(key) || test(id)) return id; + return null; + }; + const idleId = pick((k) => /idle|base_pose|default/i.test(k)) ?? pick((k) => !/walk|move|attack|look/i.test(k)); + const walkId = pick((k) => /walk|move|swim/i.test(k) && !/controller/i.test(k)); + const out = { format_version: '1.8.0', animations: {} }; + const addAnim = (id, outName) => { + if (!id) return false; + const hit = animIndex[id]; + // 基岩内置动画(humanoid.* / controller.animation.*)不在 RP 文件里,属正常缺失 → 仅 info + if (!hit) { + if (/^(animation\.humanoid\.|controller\.animation\.)/.test(id)) log.info.push(`内置动画未内联(忽略): ${id} (${name})`); + else warn(`动画未找到: ${id} (${name})`); + return false; + } + out.animations[outName] = hit.obj; + return true; + }; + const hasIdle = addAnim(idleId, 'idle'); + const hasWalk = addAnim(walkId ?? idleId, 'walk'); + const outDir = `${RES}/assets/decisland/bedrock/animations/entity`; + fs.mkdirSync(outDir, { recursive: true }); + if (!out.animations.idle) out.animations.idle = { loop: true, animation_length: 0 }; + if (!out.animations.walk) out.animations.walk = { loop: true, animation_length: 0 }; + fs.writeFileSync(`${outDir}/${name}.animation.json`, JSON.stringify(out)); + return { hasIdle, hasWalk }; +} + +// ============ ModEntities 弹射物字段索引(远程攻击映射用) ============ +function collectProjectileFields() { + const t = fs.readFileSync(`${SRC}/entity/ModEntities.kt`, 'utf8'); + const map = {}; + for (const m of t.matchAll(/val ([A-Z0-9_]+): Supplier>/g)) { + map[m[1].toLowerCase()] = m[1]; + } + return map; +} + +// ============ 主流程 ============ +const ITEM_IDS = collectItemIds(); +const PROJ_FIELDS = collectProjectileFields(); +const PORT_LIST = buildPortList(); +console.log(`移植清单: ${PORT_LIST.length} 个实体`); +log.info.push(`贴图ID池: dec ${[...ITEM_IDS].filter((i) => !i.startsWith('mc:')).length} / vanilla ${[...ITEM_IDS].filter((i) => i.startsWith('mc:')).length}`); + +const results = []; +const texOverrideMap = {}; // name → 原版基类实体是否有自定义贴图(决定是否覆写 getTextureLocation) +const categorized = fs.existsSync('C:/Users/Administrator/AppData/Local/Temp/bedrock_entity_cats.txt') + ? fs.readFileSync('C:/Users/Administrator/AppData/Local/Temp/bedrock_entity_cats.txt', 'utf8') : ''; + +for (const name of PORT_LIST) { + const bh = parseBehavior(name); + if (!bh) { warn(`行为文件缺失: ${name}`); continue; } + const ce = parseClientEntity(name); + const runtime = (() => { + const j = readJson(`${BP}/entities/${name}.json`); + return j['minecraft:entity'].description.runtime_identifier ?? null; + })(); + + let impl = null; // { kind: 'vanilla'|'custom', ... } + const geoRuntime = matchVanillaGeo(ce.geometryId); + if (runtime && VANILLA_MAP[runtime]) { + impl = { kind: 'vanilla', ...VANILLA_MAP[runtime] }; + } else if (geoRuntime && VANILLA_MAP[geoRuntime]) { + impl = { kind: 'vanilla', ...VANILLA_MAP[geoRuntime] }; + } else if (!ce.geometryId && !runtime) { + // 无几何体也无 runtime → 回退原版人形(Zombie 模型 + AI) + warn(`${name}: 无几何体/runtime → 回退原版 Zombie 人形`); + impl = { kind: 'vanilla', ...VANILLA_MAP['minecraft:zombie'] }; + } + if (!impl) { + const geoP = ce.geometryId ? extractGeometry(name, ce.geometryId) : null; + if (geoP) { + const anims = extractAnimations(name); + impl = { kind: 'custom', hasAnim: anims.hasIdle || anims.hasWalk }; + } else { + warn(`无几何体资源: ${name} (runtime=${runtime}, geo=${ce.geometryId})`); + continue; + } + } + + // 贴图 + let texOk = false; + if (ce.texturePath) { + let src = findTexture(ce.texturePath); + // 基岩引用原版材质(textures/blocks/ice、textures/entity/skeleton/stray 等)→ 用 jar 提取的原版贴图 + if (!src) { + const vp = `${PROJ}/tools/entity_port/vanilla_tex/${path.basename(ce.texturePath)}.png`; + if (fs.existsSync(vp)) src = vp; + } + if (src) texOk = !!convertTexture(src, name, impl.kind === 'vanilla' && impl.human64 === true); + else warn(`贴图未找到: ${ce.texturePath} (${name})`); + } else if (impl.kind === 'vanilla') { + texOk = true; // 无自定义贴图 → 不覆写 getTextureLocation,继承原版贴图 + } + if (!texOk && impl.kind === 'custom') warn(`无贴图: ${name}`); + texOverrideMap[name] = impl.kind === 'vanilla' && !!ce.texturePath && texOk; + + // 战利品 & 生成条件 + const loot = convertLoot(name); + const spawn = convertSpawnRule(name); + + results.push({ name, bh, ce, runtime, impl, loot, spawn }); +} + +// ============ Kotlin 代码生成 ============ +const pascal = (s) => s.split('_').map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(''); +const upper = (s) => s.toUpperCase(); + +// --- GeneratedVanillaEntities.kt --- +const usedImports = new Set(['net.minecraft.world.entity.EntityType', 'net.minecraft.world.level.Level']); +const entityClassNames = {}; +let vtBody = '// 由 tools/entity_port/generate.mjs 生成:基岩版原版基类生物(原版 AI + 自定义贴图)\n'; +for (const r of results.filter((x) => x.impl.kind === 'vanilla')) { + const cn = pascal(r.name); + let sup = r.impl.cls; + const supFqn = `net.minecraft.world.entity.${r.impl.pkg}.${sup}`; + if (cn === sup) { + // 类名与原版基类同名:同文件声明遮蔽导入,需用全限定名引用父类(不导入) + sup = supFqn; + } else { + usedImports.add(supFqn); + } + entityClassNames[r.name] = cn; + let extra = ''; + if (r.impl.fire || r.bh.fireImmune) extra += '\n override fun fireImmune() = true'; + vtBody += `\nclass ${cn}(entityType: EntityType, level: Level) : ${sup}(entityType, level) {${extra}\n}\n`; +} +const vt = `package com.dec.decisland.entity + +import ${[...usedImports].sort().join('\nimport ')} + +${vtBody}`; +fs.writeFileSync(`${SRC}/entity/GeneratedVanillaEntities.kt`, vt); + +// --- GeneratedMobs.kt --- +let g = `package com.dec.decisland.entity + +import com.dec.decisland.DecIsland +import com.dec.decisland.entity.custom.BedrockMob +import com.dec.decisland.entity.custom.MobConfig +import net.minecraft.core.registries.Registries +import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.MobCategory +import net.minecraft.world.entity.SpawnPlacementTypes +import net.minecraft.world.entity.ai.attributes.AttributeSupplier +import net.minecraft.world.entity.ai.attributes.Attributes +import net.minecraft.world.entity.monster.Monster +import net.minecraft.world.entity.Mob +import net.minecraft.world.level.levelgen.Heightmap +import net.neoforged.bus.api.IEventBus +import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent +import net.neoforged.neoforge.event.entity.RegisterSpawnPlacementsEvent +import net.neoforged.neoforge.registries.DeferredHolder +import net.neoforged.neoforge.registries.DeferredRegister +import java.util.function.Supplier + +/** 由 tools/entity_port/generate.mjs 生成:基岩版生物批量移植注册表 */ +object GeneratedMobs { + @JvmField + val ENTITY_TYPES: DeferredRegister> = + DeferredRegister.create(Registries.ENTITY_TYPE, DecIsland.MOD_ID) + + private fun registerEntity( + name: String, + factory: (EntityType, Level2) -> T, + category: MobCategory, + configure: EntityType.Builder.() -> Unit = {}, + ): DeferredHolder, EntityType> = + ENTITY_TYPES.register(name, Supplier { EntityType.Builder.of(factory, category).apply(configure).build(name) }) +`; +// Level2 占位替换为 Level(避免 import 冲突处理复杂) +g = g.replace(/Level2/g, 'Level').replace('import net.minecraft.world.entity.Entity\n', 'import net.minecraft.world.entity.Entity\nimport net.minecraft.world.entity.LivingEntity\nimport net.minecraft.world.level.Level\n'); + +// 客户端渲染器注册表数据(给 GeneratedMobClient 用):写入 JSON sidecar,避免 Kotlin 里重复资源路径 +const clientSpec = []; + +const catOf = (r) => { + const f = r.bh.families.join(','); + if (r.bh.water && !r.bh.hostile) return 'WATER_CREATURE'; + if (r.bh.water && r.bh.hostile) return 'WATER_CREATURE'; + if (/villager|animal|peaceful/.test(f) && !r.bh.hostile) return 'CREATURE'; + if (r.impl.kind === 'vanilla' && ['Bat', 'Cod', 'Chicken', 'PolarBear', 'Wolf', 'IronGolem', 'SnowGolem'].includes(r.impl.cls)) { + return (r.bh.hostile && !['IronGolem', 'SnowGolem', 'Wolf', 'PolarBear'].includes(r.impl.cls)) ? 'MONSTER' : 'CREATURE'; + } + return 'MONSTER'; +}; + +const attrEntries = []; +const spawnEntries = []; +const fqAttr = (r) => { + const cls = `net.minecraft.world.entity.${r.impl.pkg}.${r.impl.cls}`; + return ATTR_BUILDER[r.impl.cls] ?? `${cls}.createAttributes()`; +}; +const ATTRS = 'net.minecraft.world.entity.ai.attributes.Attributes'; +for (const r of results) { + const cn = r.impl.kind === 'vanilla' ? entityClassNames[r.name] : 'BedrockMob'; + const cat = catOf(r); + const w = Math.max(0.3, Math.min(6, +(r.bh.box.width ?? 0.6))); + const h = Math.max(0.3, Math.min(8, +(r.bh.box.height ?? 1.8))); + if (r.impl.kind === 'vanilla') { + const fire = (r.impl.fire || r.bh.fireImmune) ? '.fireImmune()' : ''; + g += ` + @JvmField + val ${upper(r.name)}: Supplier> = + registerEntity("${r.name}", { type, level -> ${cn}(type, level) }, MobCategory.${cat}) { + sized(${w.toFixed(2)}f, ${h.toFixed(2)}f)${fire} + } +`; + // 属性:原版构建器 + 基岩血量/攻击差异覆盖 + let ov = ''; + const defHp = VANILLA_HP[r.impl.cls] ?? 20; + if (Math.abs(r.bh.health - defHp) > 0.01) ov += `.add(${ATTRS}.MAX_HEALTH, ${Math.max(1, r.bh.health).toFixed(1)})`; + if (r.impl.pkg === 'monster' && r.bh.melee) ov += `.add(${ATTRS}.ATTACK_DAMAGE, ${Math.max(0.5, r.bh.attack).toFixed(1)})`; + attrEntries.push(` ${upper(r.name)} to ${fqAttr(r)}${ov}`); + } else { + // custom BedrockMob + const c = r.bh; + const targets = c.targets.filter((t) => ['player', 'villager', 'iron_golem', 'snow_golem'].includes(t)); + const projField = (() => { + const def = String(c.projectileDef ?? '').replace(/^dec:/, '').toLowerCase(); + return def && PROJ_FIELDS[def] ? `ModEntities.${PROJ_FIELDS[def]}` : null; + })(); + const friendly = !c.hostile; + const cfgArgs = [ + `"${r.name}"`, + `health = ${Math.max(1, c.health).toFixed(1)}`, + `speed = ${Math.max(0.08, c.movement > 0 ? c.movement : 0.25).toFixed(3)}`, + `attackDamage = ${Math.max(0.5, c.attack).toFixed(1)}`, + `followRange = ${Math.max(8, Math.min(96, c.follow)).toFixed(1)}`, + `knockbackResistance = ${Math.max(0, Math.min(1, c.kb)).toFixed(2)}`, + `xp = ${c.xp}`, + `fireImmune = ${c.fireImmune || c.families.includes('fire_immune')}`, + `undead = ${c.undead}`, + `water = ${c.water}`, + `friendly = ${friendly}`, + `melee = ${c.melee}`, + `rangedInterval = ${Math.max(8, Math.min(200, c.rangedInterval))}`, + `targets = listOf(${targets.map((t) => `"${t}"`).join(', ') || '"player"'})`, + ]; + if (projField) cfgArgs.push(`rangedProjectile = Supplier { ${projField}.get() }`); + g += ` + private val CFG_${upper(r.name)} = MobConfig(${cfgArgs.join(', ')}) + + @JvmField + val ${upper(r.name)}: Supplier> = + registerEntity("${r.name}", { type, level -> BedrockMob(type, level, CFG_${upper(r.name)}) }, MobCategory.${cat}) { + sized(${w.toFixed(2)}f, ${h.toFixed(2)}f) + } +`; + attrEntries.push(` ${upper(r.name)} to BedrockMob.createAttributes(CFG_${upper(r.name)})`); + } + if (r.spawn) { + const rule = r.bh.water || r.spawn.water ? 'WATER' : (cat === 'MONSTER' ? 'MONSTER' : 'MOB'); + spawnEntries.push(` SpawnEntry(${upper(r.name)}, "${rule}")`); + } + clientSpec.push({ + name: r.name, kind: r.impl.kind, sup: r.impl.kind === 'vanilla' ? r.impl.cls : null, + ren: r.impl.kind === 'vanilla' ? r.impl.ren : null, renParam: r.impl.kind === 'vanilla' ? r.impl.rp : null, + renPkg: r.impl.kind === 'vanilla' ? r.impl.pkgR : null, + renGeneric: r.impl.kind === 'vanilla' ? (GENERIC_REN_PARAM[r.impl.ren] ?? null) : null, + scale: +(r.bh.scale ?? 1).toFixed(2), texOverride: r.impl.kind === 'vanilla' && texOverrideMap[r.name] === true, + }); +} + +// ==== entity_type 标签(1.21.1 数据驱动:水生呼吸 / 亡灵分类) ==== +const waterTagIds = []; +const undeadTagIds = []; +for (const r of results) { + const cat = catOf(r); + const isWater = r.bh.water || cat === 'WATER_CREATURE' || (r.spawn && r.spawn.water); + if (isWater) waterTagIds.push(`decisland:${r.name}`); + const vanillaUndead = r.impl.kind === 'vanilla' && ['Zombie', 'Skeleton', 'WitherSkeleton', 'Phantom'].includes(r.impl.cls); + if (r.bh.undead || vanillaUndead) undeadTagIds.push(`decisland:${r.name}`); +} +const etTagDir = `${RES}/data/minecraft/tags/entity_type`; +fs.mkdirSync(etTagDir, { recursive: true }); +if (waterTagIds.length) { + fs.writeFileSync(`${etTagDir}/can_breathe_under_water.json`, JSON.stringify({ values: waterTagIds }, null, 2) + '\n'); + console.log(`entity_type 标签: can_breathe_under_water=${waterTagIds.length}`); +} +if (undeadTagIds.length) { + for (const t of ['undead', 'ignores_poison_and_regen', 'inverted_healing_and_harm', 'wither_friends', 'sensitive_to_smite']) { + fs.writeFileSync(`${etTagDir}/${t}.json`, JSON.stringify({ values: undeadTagIds }, null, 2) + '\n'); + } + console.log(`entity_type 标签: undead×5=${undeadTagIds.length}`); +} + +g += ` + // ==== 属性 ==== + data class SpawnEntry(val type: Supplier>, val rule: String) + + @JvmStatic + val ATTRIBUTE_ENTRIES: List>, AttributeSupplier.Builder>> = listOf( +${attrEntries.join(',\n')} + ) + + @JvmStatic + val SPAWN_ENTRIES: List = listOf( +${spawnEntries.join(',\n')} + ) + + @JvmStatic + fun register(modEventBus: IEventBus) { + ENTITY_TYPES.register(modEventBus) + } + + @JvmStatic + fun registerAttributes(event: EntityAttributeCreationEvent) { + for ((type, builder) in ATTRIBUTE_ENTRIES) { + event.put(@Suppress("UNCHECKED_CAST") (type.get() as EntityType), builder.build()) + } + } + + @JvmStatic + fun registerSpawnPlacements(event: RegisterSpawnPlacementsEvent) { + for ((type, rule) in SPAWN_ENTRIES) { + if (rule == "MONSTER") { + val t = @Suppress("UNCHECKED_CAST") (type.get() as EntityType) + event.register(t, SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Monster::checkMonsterSpawnRules, RegisterSpawnPlacementsEvent.Operation.REPLACE) + } else { + val t = @Suppress("UNCHECKED_CAST") (type.get() as EntityType) + val placement = if (rule == "WATER") SpawnPlacementTypes.IN_WATER else SpawnPlacementTypes.ON_GROUND + event.register(t, placement, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Mob::checkMobSpawnRules, RegisterSpawnPlacementsEvent.Operation.REPLACE) + } + } + } +} +`; +fs.writeFileSync(`${SRC}/entity/GeneratedMobs.kt`, g); +fs.writeFileSync('f:/DecIslandNeoforge-main/tools/entity_port/client_spec.json', JSON.stringify(clientSpec, null, 1)); + +// --- 客户端渲染器 GeneratedMobClient.kt --- +const vanillaRens = clientSpec.filter((c) => c.kind === 'vanilla'); +const customRens = clientSpec.filter((c) => c.kind === 'custom'); +let rc = `package com.dec.decisland.client.renderer + +import com.dec.decisland.DecIsland +import com.dec.decisland.entity.GeneratedMobs +import com.dec.decisland.entity.custom.BedrockMob +import net.minecraft.client.renderer.entity.EntityRenderers +import net.minecraft.client.renderer.entity.EntityRendererProvider +import net.minecraft.resources.ResourceLocation +`; +const renImports = new Set(); +for (const c of vanillaRens) { + renImports.add(`net.minecraft.client.renderer.entity.${c.ren}`); // 渲染器均在根包(已核验) + renImports.add(`net.minecraft.world.entity.${c.renPkg}.${c.renParam}`); + if (c.sup !== c.renParam) renImports.add(`net.minecraft.world.entity.${c.renPkg}.${c.sup}`); +} +rc += `import ${[...renImports].sort().join('\nimport ')}\n\n`; + +rc += `/** 由 tools/entity_port/generate.mjs 生成:批量实体渲染器(原版模型换贴图 + 基岩模型通用渲染) */\n`; +const renClassNames = {}; +for (const c of vanillaRens) { + const cn = `${pascal(c.name)}GeneratedRenderer`; + renClassNames[c.name] = cn; + const generic = c.renGeneric ? `<${c.renGeneric}>` : ''; + // texOverride=false → 不覆写 getTextureLocation,继承原版贴图 + const override = c.texOverride + ? `\n override fun getTextureLocation(entity: ${c.renParam}): ResourceLocation = TEXTURE` + : ''; + const companion = c.texOverride + ? `\n companion object {\n val TEXTURE: ResourceLocation = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/${c.name}.png")\n }\n` + : '\n'; + rc += `class ${cn}(context: EntityRendererProvider.Context) : ${c.ren}${generic}(context) {${override}${companion}}\n`; +} + +rc += `object GeneratedMobClient { + @JvmStatic + fun registerAll() { +`; +for (const c of vanillaRens) { + rc += ` EntityRenderers.register(GeneratedMobs.${upper(c.name)}.get(), ::${renClassNames[c.name]})\n`; +} +for (const c of customRens) { + rc += ` EntityRenderers.register(GeneratedMobs.${upper(c.name)}.get()) { context -> + BedrockMobRenderer(context, geo("${c.name}"), anim("${c.name}"), "idle", "walk", tex("${c.name}"), ${c.scale}f) + } +`; +} +rc += ` } + + private fun geo(name: String) = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "bedrock/models/entity/$name.geometry.json") + private fun anim(name: String) = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "bedrock/animations/entity/$name.animation.json") + private fun tex(name: String) = ResourceLocation.fromNamespaceAndPath(DecIsland.MOD_ID, "textures/entity/$name.png") +} +`; +fs.writeFileSync(`${SRC}/client/renderer/GeneratedMobClient.kt`, rc); + +// ============ 汇总 ============ +console.log(`\n=== 完成 ${results.length} 个实体 ===`); +console.log(`原版基类: ${results.filter((r) => r.impl.kind === 'vanilla').length}, 自定义模型: ${results.filter((r) => r.impl.kind === 'custom').length}`); +console.log(`战利品表: ${results.filter((r) => r.loot.written).length}, 生成条件: ${results.filter((r) => r.spawn).length}`); +fs.writeFileSync('f:/DecIslandNeoforge-main/tools/entity_port/gen_report.txt', + `WARN (${log.warn.length}):\n${log.warn.map((w) => ' ' + w).join('\n')}\n\nINFO:\n${log.info.map((w) => ' ' + w).join('\n')}\n`); +console.log(`警告 ${log.warn.length} 条 → tools/entity_port/gen_report.txt`); diff --git a/tools/entity_port/jar_extract.mjs b/tools/entity_port/jar_extract.mjs new file mode 100644 index 0000000..092a8d0 --- /dev/null +++ b/tools/entity_port/jar_extract.mjs @@ -0,0 +1,65 @@ +// 从客户端 jar 提取:物品清单(models/item/*)+ 指定贴图。纯 Node 解析 ZIP。 +import fs from 'fs'; +import zlib from 'zlib'; + +const JAR = 'E:/.minecraft/versions/1.21.1-NeoForge_21.1.247/1.21.1-NeoForge_21.1.247.jar'; +const buf = fs.readFileSync(JAR); + +// 定位 EOCD +let eocd = -1; +for (let i = buf.length - 22; i >= Math.max(0, buf.length - 65558); i--) { + if (buf.readUInt32LE(i) === 0x06054b50) { eocd = i; break; } +} +if (eocd < 0) throw new Error('EOCD not found'); +const count = buf.readUInt16LE(eocd + 10); +let off = buf.readUInt32LE(eocd + 16); + +const entries = []; +for (let i = 0; i < count; i++) { + if (buf.readUInt32LE(off) !== 0x02014b50) break; + const method = buf.readUInt16LE(off + 10); + const compSize = buf.readUInt32LE(off + 20); + const nameLen = buf.readUInt16LE(off + 28); + const extraLen = buf.readUInt16LE(off + 30); + const commentLen = buf.readUInt16LE(off + 32); + const lho = buf.readUInt32LE(off + 42); + const name = buf.toString('utf8', off + 46, off + 46 + nameLen); + entries.push({ name, method, compSize, lho }); + off += 46 + nameLen + extraLen + commentLen; +} +console.error(`jar 条目: ${entries.length}`); + +function extract(name) { + const e = entries.find((x) => x.name === name); + if (!e) return null; + const lh = e.lho; + const nameLen = buf.readUInt16LE(lh + 26); + const extraLen = buf.readUInt16LE(lh + 28); + const dataStart = lh + 30 + nameLen + extraLen; + const raw = buf.subarray(dataStart, dataStart + e.compSize); + return e.method === 0 ? Buffer.from(raw) : zlib.inflateRawSync(raw); +} + +// 1) 物品清单 +const items = entries.filter((e) => /^assets\/minecraft\/models\/item\/[a-z0-9_.]+\.json$/.test(e.name)) + .map((e) => e.name.slice('assets/minecraft/models/item/'.length, -5)); +fs.writeFileSync('f:/DecIslandNeoforge-main/tools/entity_port/vanilla_items.json', JSON.stringify(items.sort(), null, 0)); +console.log(`物品数: ${items.length}`); +const check = ['netherrack', 'snow', 'ice', 'tnt', 'sponge', 'music_disc_13', 'cod', 'skeleton_skull', 'lily_pad', + 'nether_quartz_ore', 'poppy', 'sweet_berries', 'amethyst_shard', 'copper_ingot', 'iron_sword', 'bow', 'crossbow', + 'enchanted_book', 'iron_helmet', 'netherite_scrap', 'crimson_fungus', 'nether_wart_block', 'end_stone', 'coal_ore', 'redstone']; +console.log('抽检:', check.map((c) => `${c}=${items.includes(c)}`).join(' ')); + +// 2) 提取贴图(覆盖冰刺贴图等基岩引用原版材质的情况) +const need = { + 'assets/minecraft/textures/block/ice.png': 'f:/DecIslandNeoforge-main/tools/entity_port/vanilla_tex/ice.png', + 'assets/minecraft/textures/block/tnt.png': 'f:/DecIslandNeoforge-main/tools/entity_port/vanilla_tex/tnt.png', + 'assets/minecraft/textures/block/blackstone.png': 'f:/DecIslandNeoforge-main/tools/entity_port/vanilla_tex/blackstone.png', + 'assets/minecraft/textures/entity/skeleton/stray.png': 'f:/DecIslandNeoforge-main/tools/entity_port/vanilla_tex/stray.png', +}; +fs.mkdirSync('f:/DecIslandNeoforge-main/tools/entity_port/vanilla_tex', { recursive: true }); +for (const [src, dst] of Object.entries(need)) { + const d = extract(src); + if (d) { fs.writeFileSync(dst, d); console.log(`提取 ${src} → ${dst} (${d.length}B)`); } + else console.log(`缺失 ${src}`); +} diff --git a/tools/entity_port/recon.mjs b/tools/entity_port/recon.mjs new file mode 100644 index 0000000..000f6a4 --- /dev/null +++ b/tools/entity_port/recon.mjs @@ -0,0 +1,29 @@ +// 勘察脚本:主类注册调用 + 物品ID清单 +import fs from 'fs'; +import path from 'path'; + +const main = fs.readFileSync('f:/DecIslandNeoforge-main/src/main/java/com/dec/decisland/DecIsland.kt', 'utf8'); +console.log('=== DecIsland.kt register calls ==='); +console.log(main.split('\n').filter(l => l.includes('.register(')).map(l => l.trim()).join('\n')); + +const files = []; +(function walk(d) { + for (const f of fs.readdirSync(d)) { + const p = path.join(d, f); + if (fs.statSync(p).isDirectory()) walk(p); + else if (f.endsWith('.kt')) files.push(p); + } +})('f:/DecIslandNeoforge-main/src/main/java/com/dec/decisland/item'); +const itemSrc = files.map(f => fs.readFileSync(f, 'utf8')).join('\n'); +// 常见注册模式: registerItem("name", ...) / "name" to Supplier +const ids = new Set(); +for (const m of itemSrc.matchAll(/register(?:Item)?\(\s*"([a-z0-9_]+)"/g)) ids.add(m[1]); +console.log('=== register() style ids:', ids.size, '==='); +console.log([...ids].slice(0, 20).join(', ')); +// 找到 ModItems 文件里第一段注册示例 +const modItemsPath = files.find(f => f.endsWith('ModItems.kt')); +if (modItemsPath) { + const head = fs.readFileSync(modItemsPath, 'utf8').split('\n').filter(l => l.trim().length && !l.trim().startsWith('import')).slice(0, 40); + console.log('=== ModItems head ==='); + console.log(head.join('\n')); +} diff --git a/tools/entity_port/vanilla_items.json b/tools/entity_port/vanilla_items.json new file mode 100644 index 0000000..b7400fd --- /dev/null +++ b/tools/entity_port/vanilla_items.json @@ -0,0 +1 @@ +["acacia_boat","acacia_button","acacia_chest_boat","acacia_door","acacia_fence","acacia_fence_gate","acacia_hanging_sign","acacia_leaves","acacia_log","acacia_planks","acacia_pressure_plate","acacia_sapling","acacia_sign","acacia_slab","acacia_stairs","acacia_trapdoor","acacia_wood","activator_rail","air","allay_spawn_egg","allium","amethyst_block","amethyst_bud","amethyst_cluster","amethyst_shard","ancient_debris","andesite","andesite_slab","andesite_stairs","andesite_wall","angler_pottery_sherd","anvil","apple","archer_pottery_sherd","armadillo_scute","armadillo_spawn_egg","armor_stand","arms_up_pottery_sherd","arrow","axolotl_bucket","axolotl_spawn_egg","azalea","azalea_leaves","azure_bluet","baked_potato","bamboo","bamboo_block","bamboo_button","bamboo_chest_raft","bamboo_door","bamboo_fence","bamboo_fence_gate","bamboo_hanging_sign","bamboo_mosaic","bamboo_mosaic_slab","bamboo_mosaic_stairs","bamboo_planks","bamboo_pressure_plate","bamboo_raft","bamboo_sign","bamboo_slab","bamboo_stairs","bamboo_trapdoor","barrel","barrier","basalt","bat_spawn_egg","beacon","bedrock","bee_nest","bee_spawn_egg","beef","beehive","beetroot","beetroot_seeds","beetroot_soup","bell","big_dripleaf","birch_boat","birch_button","birch_chest_boat","birch_door","birch_fence","birch_fence_gate","birch_hanging_sign","birch_leaves","birch_log","birch_planks","birch_pressure_plate","birch_sapling","birch_sign","birch_slab","birch_stairs","birch_trapdoor","birch_wood","black_banner","black_bed","black_candle","black_carpet","black_concrete","black_concrete_powder","black_dye","black_glazed_terracotta","black_shulker_box","black_stained_glass","black_stained_glass_pane","black_terracotta","black_wool","blackstone","blackstone_slab","blackstone_stairs","blackstone_wall","blade_pottery_sherd","blast_furnace","blaze_powder","blaze_rod","blaze_spawn_egg","blue_banner","blue_bed","blue_candle","blue_carpet","blue_concrete","blue_concrete_powder","blue_dye","blue_glazed_terracotta","blue_ice","blue_orchid","blue_shulker_box","blue_stained_glass","blue_stained_glass_pane","blue_terracotta","blue_wool","bogged_spawn_egg","bolt_armor_trim_smithing_template","bone","bone_block","bone_meal","book","bookshelf","bow","bow_pulling_0","bow_pulling_1","bow_pulling_2","bowl","brain_coral","brain_coral_block","brain_coral_fan","bread","breeze_rod","breeze_spawn_egg","brewer_pottery_sherd","brewing_stand","brick","brick_slab","brick_stairs","brick_wall","bricks","broken_elytra","brown_banner","brown_bed","brown_candle","brown_carpet","brown_concrete","brown_concrete_powder","brown_dye","brown_glazed_terracotta","brown_mushroom","brown_mushroom_block","brown_shulker_box","brown_stained_glass","brown_stained_glass_pane","brown_terracotta","brown_wool","brush","brush_brushing_0","brush_brushing_1","brush_brushing_2","bubble_coral","bubble_coral_block","bubble_coral_fan","bucket","budding_amethyst","bundle","bundle_filled","burn_pottery_sherd","cactus","cake","calcite","calibrated_sculk_sensor","camel_spawn_egg","campfire","candle","carrot","carrot_on_a_stick","cartography_table","carved_pumpkin","cat_spawn_egg","cauldron","cave_spider_spawn_egg","chain","chain_command_block","chainmail_boots","chainmail_boots_amethyst_trim","chainmail_boots_copper_trim","chainmail_boots_diamond_trim","chainmail_boots_emerald_trim","chainmail_boots_gold_trim","chainmail_boots_iron_trim","chainmail_boots_lapis_trim","chainmail_boots_netherite_trim","chainmail_boots_quartz_trim","chainmail_boots_redstone_trim","chainmail_chestplate","chainmail_chestplate_amethyst_trim","chainmail_chestplate_copper_trim","chainmail_chestplate_diamond_trim","chainmail_chestplate_emerald_trim","chainmail_chestplate_gold_trim","chainmail_chestplate_iron_trim","chainmail_chestplate_lapis_trim","chainmail_chestplate_netherite_trim","chainmail_chestplate_quartz_trim","chainmail_chestplate_redstone_trim","chainmail_helmet","chainmail_helmet_amethyst_trim","chainmail_helmet_copper_trim","chainmail_helmet_diamond_trim","chainmail_helmet_emerald_trim","chainmail_helmet_gold_trim","chainmail_helmet_iron_trim","chainmail_helmet_lapis_trim","chainmail_helmet_netherite_trim","chainmail_helmet_quartz_trim","chainmail_helmet_redstone_trim","chainmail_leggings","chainmail_leggings_amethyst_trim","chainmail_leggings_copper_trim","chainmail_leggings_diamond_trim","chainmail_leggings_emerald_trim","chainmail_leggings_gold_trim","chainmail_leggings_iron_trim","chainmail_leggings_lapis_trim","chainmail_leggings_netherite_trim","chainmail_leggings_quartz_trim","chainmail_leggings_redstone_trim","charcoal","cherry_boat","cherry_button","cherry_chest_boat","cherry_door","cherry_fence","cherry_fence_gate","cherry_hanging_sign","cherry_leaves","cherry_log","cherry_planks","cherry_pressure_plate","cherry_sapling","cherry_sign","cherry_slab","cherry_stairs","cherry_trapdoor","cherry_wood","chest","chest_minecart","chicken","chicken_spawn_egg","chipped_anvil","chiseled_bookshelf","chiseled_copper","chiseled_deepslate","chiseled_nether_bricks","chiseled_polished_blackstone","chiseled_quartz_block","chiseled_red_sandstone","chiseled_sandstone","chiseled_stone_bricks","chiseled_tuff","chiseled_tuff_bricks","chorus_flower","chorus_fruit","chorus_plant","clay","clay_ball","clock","clock_01","clock_02","clock_03","clock_04","clock_05","clock_06","clock_07","clock_08","clock_09","clock_10","clock_11","clock_12","clock_13","clock_14","clock_15","clock_16","clock_17","clock_18","clock_19","clock_20","clock_21","clock_22","clock_23","clock_24","clock_25","clock_26","clock_27","clock_28","clock_29","clock_30","clock_31","clock_32","clock_33","clock_34","clock_35","clock_36","clock_37","clock_38","clock_39","clock_40","clock_41","clock_42","clock_43","clock_44","clock_45","clock_46","clock_47","clock_48","clock_49","clock_50","clock_51","clock_52","clock_53","clock_54","clock_55","clock_56","clock_57","clock_58","clock_59","clock_60","clock_61","clock_62","clock_63","coal","coal_block","coal_ore","coarse_dirt","coast_armor_trim_smithing_template","cobbled_deepslate","cobbled_deepslate_slab","cobbled_deepslate_stairs","cobbled_deepslate_wall","cobblestone","cobblestone_slab","cobblestone_stairs","cobblestone_wall","cobweb","cocoa_beans","cod","cod_bucket","cod_spawn_egg","command_block","command_block_minecart","comparator","compass","compass_00","compass_01","compass_02","compass_03","compass_04","compass_05","compass_06","compass_07","compass_08","compass_09","compass_10","compass_11","compass_12","compass_13","compass_14","compass_15","compass_17","compass_18","compass_19","compass_20","compass_21","compass_22","compass_23","compass_24","compass_25","compass_26","compass_27","compass_28","compass_29","compass_30","compass_31","composter","conduit","cooked_beef","cooked_chicken","cooked_cod","cooked_mutton","cooked_porkchop","cooked_rabbit","cooked_salmon","cookie","copper_block","copper_bulb","copper_door","copper_grate","copper_ingot","copper_ore","copper_trapdoor","cornflower","cow_spawn_egg","cracked_deepslate_bricks","cracked_deepslate_tiles","cracked_nether_bricks","cracked_polished_blackstone_bricks","cracked_stone_bricks","crafter","crafting_table","creeper_banner_pattern","creeper_head","creeper_spawn_egg","crimson_button","crimson_door","crimson_fence","crimson_fence_gate","crimson_fungus","crimson_hanging_sign","crimson_hyphae","crimson_nylium","crimson_planks","crimson_pressure_plate","crimson_roots","crimson_sign","crimson_slab","crimson_stairs","crimson_stem","crimson_trapdoor","crossbow","crossbow_arrow","crossbow_firework","crossbow_pulling_0","crossbow_pulling_1","crossbow_pulling_2","crying_obsidian","cut_copper","cut_copper_slab","cut_copper_stairs","cut_red_sandstone","cut_red_sandstone_slab","cut_sandstone","cut_sandstone_slab","cyan_banner","cyan_bed","cyan_candle","cyan_carpet","cyan_concrete","cyan_concrete_powder","cyan_dye","cyan_glazed_terracotta","cyan_shulker_box","cyan_stained_glass","cyan_stained_glass_pane","cyan_terracotta","cyan_wool","damaged_anvil","dandelion","danger_pottery_sherd","dark_oak_boat","dark_oak_button","dark_oak_chest_boat","dark_oak_door","dark_oak_fence","dark_oak_fence_gate","dark_oak_hanging_sign","dark_oak_leaves","dark_oak_log","dark_oak_planks","dark_oak_pressure_plate","dark_oak_sapling","dark_oak_sign","dark_oak_slab","dark_oak_stairs","dark_oak_trapdoor","dark_oak_wood","dark_prismarine","dark_prismarine_slab","dark_prismarine_stairs","daylight_detector","dead_brain_coral","dead_brain_coral_block","dead_brain_coral_fan","dead_bubble_coral","dead_bubble_coral_block","dead_bubble_coral_fan","dead_bush","dead_fire_coral","dead_fire_coral_block","dead_fire_coral_fan","dead_horn_coral","dead_horn_coral_block","dead_horn_coral_fan","dead_tube_coral","dead_tube_coral_block","dead_tube_coral_fan","debug_stick","decorated_pot","deepslate","deepslate_brick_slab","deepslate_brick_stairs","deepslate_brick_wall","deepslate_bricks","deepslate_coal_ore","deepslate_copper_ore","deepslate_diamond_ore","deepslate_emerald_ore","deepslate_gold_ore","deepslate_iron_ore","deepslate_lapis_ore","deepslate_redstone_ore","deepslate_tile_slab","deepslate_tile_stairs","deepslate_tile_wall","deepslate_tiles","detector_rail","diamond","diamond_axe","diamond_block","diamond_boots","diamond_boots_amethyst_trim","diamond_boots_copper_trim","diamond_boots_diamond_darker_trim","diamond_boots_emerald_trim","diamond_boots_gold_trim","diamond_boots_iron_trim","diamond_boots_lapis_trim","diamond_boots_netherite_trim","diamond_boots_quartz_trim","diamond_boots_redstone_trim","diamond_chestplate","diamond_chestplate_amethyst_trim","diamond_chestplate_copper_trim","diamond_chestplate_diamond_darker_trim","diamond_chestplate_emerald_trim","diamond_chestplate_gold_trim","diamond_chestplate_iron_trim","diamond_chestplate_lapis_trim","diamond_chestplate_netherite_trim","diamond_chestplate_quartz_trim","diamond_chestplate_redstone_trim","diamond_helmet","diamond_helmet_amethyst_trim","diamond_helmet_copper_trim","diamond_helmet_diamond_darker_trim","diamond_helmet_emerald_trim","diamond_helmet_gold_trim","diamond_helmet_iron_trim","diamond_helmet_lapis_trim","diamond_helmet_netherite_trim","diamond_helmet_quartz_trim","diamond_helmet_redstone_trim","diamond_hoe","diamond_horse_armor","diamond_leggings","diamond_leggings_amethyst_trim","diamond_leggings_copper_trim","diamond_leggings_diamond_darker_trim","diamond_leggings_emerald_trim","diamond_leggings_gold_trim","diamond_leggings_iron_trim","diamond_leggings_lapis_trim","diamond_leggings_netherite_trim","diamond_leggings_quartz_trim","diamond_leggings_redstone_trim","diamond_ore","diamond_pickaxe","diamond_shovel","diamond_sword","diorite","diorite_slab","diorite_stairs","diorite_wall","dirt","dirt_path","disc_fragment_5","dispenser","dolphin_spawn_egg","donkey_spawn_egg","dragon_breath","dragon_egg","dragon_head","dried_kelp","dried_kelp_block","dripstone_block","dropper","drowned_spawn_egg","dune_armor_trim_smithing_template","echo_shard","egg","elder_guardian_spawn_egg","elytra","emerald","emerald_block","emerald_ore","enchanted_book","enchanted_golden_apple","enchanting_table","end_crystal","end_portal_frame","end_rod","end_stone","end_stone_brick_slab","end_stone_brick_stairs","end_stone_brick_wall","end_stone_bricks","ender_chest","ender_dragon_spawn_egg","ender_eye","ender_pearl","enderman_spawn_egg","endermite_spawn_egg","evoker_spawn_egg","experience_bottle","explorer_pottery_sherd","exposed_chiseled_copper","exposed_copper","exposed_copper_bulb","exposed_copper_door","exposed_copper_grate","exposed_copper_trapdoor","exposed_cut_copper","exposed_cut_copper_slab","exposed_cut_copper_stairs","eye_armor_trim_smithing_template","farmland","feather","fermented_spider_eye","fern","filled_map","fire_charge","fire_coral","fire_coral_block","fire_coral_fan","firework_rocket","firework_star","fishing_rod","fishing_rod_cast","fletching_table","flint","flint_and_steel","flow_armor_trim_smithing_template","flow_banner_pattern","flow_pottery_sherd","flower_banner_pattern","flower_pot","flowering_azalea","flowering_azalea_leaves","fox_spawn_egg","friend_pottery_sherd","frog_spawn_egg","frogspawn","furnace","furnace_minecart","generated","ghast_spawn_egg","ghast_tear","gilded_blackstone","glass","glass_bottle","glass_pane","glistering_melon_slice","globe_banner_pattern","glow_berries","glow_ink_sac","glow_item_frame","glow_lichen","glow_squid_spawn_egg","glowstone","glowstone_dust","goat_horn","goat_spawn_egg","gold_block","gold_ingot","gold_nugget","gold_ore","golden_apple","golden_axe","golden_boots","golden_boots_amethyst_trim","golden_boots_copper_trim","golden_boots_diamond_trim","golden_boots_emerald_trim","golden_boots_gold_darker_trim","golden_boots_iron_trim","golden_boots_lapis_trim","golden_boots_netherite_trim","golden_boots_quartz_trim","golden_boots_redstone_trim","golden_carrot","golden_chestplate","golden_chestplate_amethyst_trim","golden_chestplate_copper_trim","golden_chestplate_diamond_trim","golden_chestplate_emerald_trim","golden_chestplate_gold_darker_trim","golden_chestplate_iron_trim","golden_chestplate_lapis_trim","golden_chestplate_netherite_trim","golden_chestplate_quartz_trim","golden_chestplate_redstone_trim","golden_helmet","golden_helmet_amethyst_trim","golden_helmet_copper_trim","golden_helmet_diamond_trim","golden_helmet_emerald_trim","golden_helmet_gold_darker_trim","golden_helmet_iron_trim","golden_helmet_lapis_trim","golden_helmet_netherite_trim","golden_helmet_quartz_trim","golden_helmet_redstone_trim","golden_hoe","golden_horse_armor","golden_leggings","golden_leggings_amethyst_trim","golden_leggings_copper_trim","golden_leggings_diamond_trim","golden_leggings_emerald_trim","golden_leggings_gold_darker_trim","golden_leggings_iron_trim","golden_leggings_lapis_trim","golden_leggings_netherite_trim","golden_leggings_quartz_trim","golden_leggings_redstone_trim","golden_pickaxe","golden_shovel","golden_sword","granite","granite_slab","granite_stairs","granite_wall","grass_block","gravel","gray_banner","gray_bed","gray_candle","gray_carpet","gray_concrete","gray_concrete_powder","gray_dye","gray_glazed_terracotta","gray_shulker_box","gray_stained_glass","gray_stained_glass_pane","gray_terracotta","gray_wool","green_banner","green_bed","green_candle","green_carpet","green_concrete","green_concrete_powder","green_dye","green_glazed_terracotta","green_shulker_box","green_stained_glass","green_stained_glass_pane","green_terracotta","green_wool","grindstone","guardian_spawn_egg","gunpowder","guster_banner_pattern","guster_pottery_sherd","handheld","handheld_mace","handheld_rod","hanging_roots","hay_block","heart_of_the_sea","heart_pottery_sherd","heartbreak_pottery_sherd","heavy_core","heavy_weighted_pressure_plate","hoglin_spawn_egg","honey_block","honey_bottle","honeycomb","honeycomb_block","hopper","hopper_minecart","horn_coral","horn_coral_block","horn_coral_fan","horse_spawn_egg","host_armor_trim_smithing_template","howl_pottery_sherd","husk_spawn_egg","ice","infested_chiseled_stone_bricks","infested_cobblestone","infested_cracked_stone_bricks","infested_deepslate","infested_mossy_stone_bricks","infested_stone","infested_stone_bricks","ink_sac","iron_axe","iron_bars","iron_block","iron_boots","iron_boots_amethyst_trim","iron_boots_copper_trim","iron_boots_diamond_trim","iron_boots_emerald_trim","iron_boots_gold_trim","iron_boots_iron_darker_trim","iron_boots_lapis_trim","iron_boots_netherite_trim","iron_boots_quartz_trim","iron_boots_redstone_trim","iron_chestplate","iron_chestplate_amethyst_trim","iron_chestplate_copper_trim","iron_chestplate_diamond_trim","iron_chestplate_emerald_trim","iron_chestplate_gold_trim","iron_chestplate_iron_darker_trim","iron_chestplate_lapis_trim","iron_chestplate_netherite_trim","iron_chestplate_quartz_trim","iron_chestplate_redstone_trim","iron_door","iron_golem_spawn_egg","iron_helmet","iron_helmet_amethyst_trim","iron_helmet_copper_trim","iron_helmet_diamond_trim","iron_helmet_emerald_trim","iron_helmet_gold_trim","iron_helmet_iron_darker_trim","iron_helmet_lapis_trim","iron_helmet_netherite_trim","iron_helmet_quartz_trim","iron_helmet_redstone_trim","iron_hoe","iron_horse_armor","iron_ingot","iron_leggings","iron_leggings_amethyst_trim","iron_leggings_copper_trim","iron_leggings_diamond_trim","iron_leggings_emerald_trim","iron_leggings_gold_trim","iron_leggings_iron_darker_trim","iron_leggings_lapis_trim","iron_leggings_netherite_trim","iron_leggings_quartz_trim","iron_leggings_redstone_trim","iron_nugget","iron_ore","iron_pickaxe","iron_shovel","iron_sword","iron_trapdoor","item_frame","jack_o_lantern","jigsaw","jukebox","jungle_boat","jungle_button","jungle_chest_boat","jungle_door","jungle_fence","jungle_fence_gate","jungle_hanging_sign","jungle_leaves","jungle_log","jungle_planks","jungle_pressure_plate","jungle_sapling","jungle_sign","jungle_slab","jungle_stairs","jungle_trapdoor","jungle_wood","kelp","knowledge_book","ladder","lantern","lapis_block","lapis_lazuli","lapis_ore","large_amethyst_bud","large_fern","lava_bucket","lead","leather","leather_boots","leather_boots_amethyst_trim","leather_boots_copper_trim","leather_boots_diamond_trim","leather_boots_emerald_trim","leather_boots_gold_trim","leather_boots_iron_trim","leather_boots_lapis_trim","leather_boots_netherite_trim","leather_boots_quartz_trim","leather_boots_redstone_trim","leather_chestplate","leather_chestplate_amethyst_trim","leather_chestplate_copper_trim","leather_chestplate_diamond_trim","leather_chestplate_emerald_trim","leather_chestplate_gold_trim","leather_chestplate_iron_trim","leather_chestplate_lapis_trim","leather_chestplate_netherite_trim","leather_chestplate_quartz_trim","leather_chestplate_redstone_trim","leather_helmet","leather_helmet_amethyst_trim","leather_helmet_copper_trim","leather_helmet_diamond_trim","leather_helmet_emerald_trim","leather_helmet_gold_trim","leather_helmet_iron_trim","leather_helmet_lapis_trim","leather_helmet_netherite_trim","leather_helmet_quartz_trim","leather_helmet_redstone_trim","leather_horse_armor","leather_leggings","leather_leggings_amethyst_trim","leather_leggings_copper_trim","leather_leggings_diamond_trim","leather_leggings_emerald_trim","leather_leggings_gold_trim","leather_leggings_iron_trim","leather_leggings_lapis_trim","leather_leggings_netherite_trim","leather_leggings_quartz_trim","leather_leggings_redstone_trim","lectern","lever","light","light_00","light_01","light_02","light_03","light_04","light_05","light_06","light_07","light_08","light_09","light_10","light_11","light_12","light_13","light_14","light_15","light_blue_banner","light_blue_bed","light_blue_candle","light_blue_carpet","light_blue_concrete","light_blue_concrete_powder","light_blue_dye","light_blue_glazed_terracotta","light_blue_shulker_box","light_blue_stained_glass","light_blue_stained_glass_pane","light_blue_terracotta","light_blue_wool","light_gray_banner","light_gray_bed","light_gray_candle","light_gray_carpet","light_gray_concrete","light_gray_concrete_powder","light_gray_dye","light_gray_glazed_terracotta","light_gray_shulker_box","light_gray_stained_glass","light_gray_stained_glass_pane","light_gray_terracotta","light_gray_wool","light_weighted_pressure_plate","lightning_rod","lilac","lily_of_the_valley","lily_pad","lime_banner","lime_bed","lime_candle","lime_carpet","lime_concrete","lime_concrete_powder","lime_dye","lime_glazed_terracotta","lime_shulker_box","lime_stained_glass","lime_stained_glass_pane","lime_terracotta","lime_wool","lingering_potion","llama_spawn_egg","lodestone","loom","mace","magenta_banner","magenta_bed","magenta_candle","magenta_carpet","magenta_concrete","magenta_concrete_powder","magenta_dye","magenta_glazed_terracotta","magenta_shulker_box","magenta_stained_glass","magenta_stained_glass_pane","magenta_terracotta","magenta_wool","magma_block","magma_cream","magma_cube_spawn_egg","mangrove_boat","mangrove_button","mangrove_chest_boat","mangrove_door","mangrove_fence","mangrove_fence_gate","mangrove_hanging_sign","mangrove_leaves","mangrove_log","mangrove_planks","mangrove_pressure_plate","mangrove_propagule","mangrove_roots","mangrove_sign","mangrove_slab","mangrove_stairs","mangrove_trapdoor","mangrove_wood","map","medium_amethyst_bud","melon","melon_seeds","melon_slice","milk_bucket","minecart","miner_pottery_sherd","mojang_banner_pattern","mooshroom_spawn_egg","moss_block","moss_carpet","mossy_cobblestone","mossy_cobblestone_slab","mossy_cobblestone_stairs","mossy_cobblestone_wall","mossy_stone_brick_slab","mossy_stone_brick_stairs","mossy_stone_brick_wall","mossy_stone_bricks","mourner_pottery_sherd","mud","mud_brick_slab","mud_brick_stairs","mud_brick_wall","mud_bricks","muddy_mangrove_roots","mule_spawn_egg","mushroom_stem","mushroom_stew","music_disc_11","music_disc_13","music_disc_5","music_disc_blocks","music_disc_cat","music_disc_chirp","music_disc_creator","music_disc_creator_music_box","music_disc_far","music_disc_mall","music_disc_mellohi","music_disc_otherside","music_disc_pigstep","music_disc_precipice","music_disc_relic","music_disc_stal","music_disc_strad","music_disc_wait","music_disc_ward","mutton","mycelium","name_tag","nautilus_shell","nether_brick","nether_brick_fence","nether_brick_slab","nether_brick_stairs","nether_brick_wall","nether_bricks","nether_gold_ore","nether_quartz_ore","nether_sprouts","nether_star","nether_wart","nether_wart_block","netherite_axe","netherite_block","netherite_boots","netherite_boots_amethyst_trim","netherite_boots_copper_trim","netherite_boots_diamond_trim","netherite_boots_emerald_trim","netherite_boots_gold_trim","netherite_boots_iron_trim","netherite_boots_lapis_trim","netherite_boots_netherite_darker_trim","netherite_boots_quartz_trim","netherite_boots_redstone_trim","netherite_chestplate","netherite_chestplate_amethyst_trim","netherite_chestplate_copper_trim","netherite_chestplate_diamond_trim","netherite_chestplate_emerald_trim","netherite_chestplate_gold_trim","netherite_chestplate_iron_trim","netherite_chestplate_lapis_trim","netherite_chestplate_netherite_darker_trim","netherite_chestplate_quartz_trim","netherite_chestplate_redstone_trim","netherite_helmet","netherite_helmet_amethyst_trim","netherite_helmet_copper_trim","netherite_helmet_diamond_trim","netherite_helmet_emerald_trim","netherite_helmet_gold_trim","netherite_helmet_iron_trim","netherite_helmet_lapis_trim","netherite_helmet_netherite_darker_trim","netherite_helmet_quartz_trim","netherite_helmet_redstone_trim","netherite_hoe","netherite_ingot","netherite_leggings","netherite_leggings_amethyst_trim","netherite_leggings_copper_trim","netherite_leggings_diamond_trim","netherite_leggings_emerald_trim","netherite_leggings_gold_trim","netherite_leggings_iron_trim","netherite_leggings_lapis_trim","netherite_leggings_netherite_darker_trim","netherite_leggings_quartz_trim","netherite_leggings_redstone_trim","netherite_pickaxe","netherite_scrap","netherite_shovel","netherite_sword","netherite_upgrade_smithing_template","netherrack","note_block","oak_boat","oak_button","oak_chest_boat","oak_door","oak_fence","oak_fence_gate","oak_hanging_sign","oak_leaves","oak_log","oak_planks","oak_pressure_plate","oak_sapling","oak_sign","oak_slab","oak_stairs","oak_trapdoor","oak_wood","observer","obsidian","ocelot_spawn_egg","ochre_froglight","ominous_bottle","ominous_trial_key","orange_banner","orange_bed","orange_candle","orange_carpet","orange_concrete","orange_concrete_powder","orange_dye","orange_glazed_terracotta","orange_shulker_box","orange_stained_glass","orange_stained_glass_pane","orange_terracotta","orange_tulip","orange_wool","oxeye_daisy","oxidized_chiseled_copper","oxidized_copper","oxidized_copper_bulb","oxidized_copper_door","oxidized_copper_grate","oxidized_copper_trapdoor","oxidized_cut_copper","oxidized_cut_copper_slab","oxidized_cut_copper_stairs","packed_ice","packed_mud","painting","panda_spawn_egg","paper","parrot_spawn_egg","pearlescent_froglight","peony","petrified_oak_slab","phantom_membrane","phantom_spawn_egg","pig_spawn_egg","piglin_banner_pattern","piglin_brute_spawn_egg","piglin_head","piglin_spawn_egg","pillager_spawn_egg","pink_banner","pink_bed","pink_candle","pink_carpet","pink_concrete","pink_concrete_powder","pink_dye","pink_glazed_terracotta","pink_petals","pink_shulker_box","pink_stained_glass","pink_stained_glass_pane","pink_terracotta","pink_tulip","pink_wool","piston","pitcher_plant","pitcher_pod","player_head","plenty_pottery_sherd","podzol","pointed_dripstone","poisonous_potato","polar_bear_spawn_egg","polished_andesite","polished_andesite_slab","polished_andesite_stairs","polished_basalt","polished_blackstone","polished_blackstone_brick_slab","polished_blackstone_brick_stairs","polished_blackstone_brick_wall","polished_blackstone_bricks","polished_blackstone_button","polished_blackstone_pressure_plate","polished_blackstone_slab","polished_blackstone_stairs","polished_blackstone_wall","polished_deepslate","polished_deepslate_slab","polished_deepslate_stairs","polished_deepslate_wall","polished_diorite","polished_diorite_slab","polished_diorite_stairs","polished_granite","polished_granite_slab","polished_granite_stairs","polished_tuff","polished_tuff_slab","polished_tuff_stairs","polished_tuff_wall","popped_chorus_fruit","poppy","porkchop","potato","potion","powder_snow_bucket","powered_rail","prismarine","prismarine_brick_slab","prismarine_brick_stairs","prismarine_bricks","prismarine_crystals","prismarine_shard","prismarine_slab","prismarine_stairs","prismarine_wall","prize_pottery_sherd","pufferfish","pufferfish_bucket","pufferfish_spawn_egg","pumpkin","pumpkin_pie","pumpkin_seeds","purple_banner","purple_bed","purple_candle","purple_carpet","purple_concrete","purple_concrete_powder","purple_dye","purple_glazed_terracotta","purple_shulker_box","purple_stained_glass","purple_stained_glass_pane","purple_terracotta","purple_wool","purpur_block","purpur_pillar","purpur_slab","purpur_stairs","quartz","quartz_block","quartz_bricks","quartz_pillar","quartz_slab","quartz_stairs","rabbit","rabbit_foot","rabbit_hide","rabbit_spawn_egg","rabbit_stew","rail","raiser_armor_trim_smithing_template","ravager_spawn_egg","raw_copper","raw_copper_block","raw_gold","raw_gold_block","raw_iron","raw_iron_block","recovery_compass","recovery_compass_00","recovery_compass_01","recovery_compass_02","recovery_compass_03","recovery_compass_04","recovery_compass_05","recovery_compass_06","recovery_compass_07","recovery_compass_08","recovery_compass_09","recovery_compass_10","recovery_compass_11","recovery_compass_12","recovery_compass_13","recovery_compass_14","recovery_compass_15","recovery_compass_17","recovery_compass_18","recovery_compass_19","recovery_compass_20","recovery_compass_21","recovery_compass_22","recovery_compass_23","recovery_compass_24","recovery_compass_25","recovery_compass_26","recovery_compass_27","recovery_compass_28","recovery_compass_29","recovery_compass_30","recovery_compass_31","red_banner","red_bed","red_candle","red_carpet","red_concrete","red_concrete_powder","red_dye","red_glazed_terracotta","red_mushroom","red_mushroom_block","red_nether_brick_slab","red_nether_brick_stairs","red_nether_brick_wall","red_nether_bricks","red_sand","red_sandstone","red_sandstone_slab","red_sandstone_stairs","red_sandstone_wall","red_shulker_box","red_stained_glass","red_stained_glass_pane","red_terracotta","red_tulip","red_wool","redstone","redstone_block","redstone_lamp","redstone_ore","redstone_torch","reinforced_deepslate","repeater","repeating_command_block","respawn_anchor","rib_armor_trim_smithing_template","rooted_dirt","rose_bush","rotten_flesh","saddle","salmon","salmon_bucket","salmon_spawn_egg","sand","sandstone","sandstone_slab","sandstone_stairs","sandstone_wall","scaffolding","scrape_pottery_sherd","sculk","sculk_catalyst","sculk_sensor","sculk_shrieker","sculk_vein","sea_lantern","sea_pickle","seagrass","sentry_armor_trim_smithing_template","shaper_armor_trim_smithing_template","sheaf_pottery_sherd","shears","sheep_spawn_egg","shelter_pottery_sherd","shield","shield_blocking","short_grass","shroomlight","shulker_box","shulker_shell","shulker_spawn_egg","silence_armor_trim_smithing_template","silverfish_spawn_egg","skeleton_horse_spawn_egg","skeleton_skull","skeleton_spawn_egg","skull_banner_pattern","skull_pottery_sherd","slime_ball","slime_block","slime_spawn_egg","small_amethyst_bud","small_dripleaf","smithing_table","smoker","smooth_basalt","smooth_quartz","smooth_quartz_slab","smooth_quartz_stairs","smooth_red_sandstone","smooth_red_sandstone_slab","smooth_red_sandstone_stairs","smooth_sandstone","smooth_sandstone_slab","smooth_sandstone_stairs","smooth_stone","smooth_stone_slab","sniffer_egg","sniffer_spawn_egg","snort_pottery_sherd","snout_armor_trim_smithing_template","snow","snow_block","snow_golem_spawn_egg","snowball","soul_campfire","soul_lantern","soul_sand","soul_soil","soul_torch","spawner","spectral_arrow","spider_eye","spider_spawn_egg","spire_armor_trim_smithing_template","splash_potion","sponge","spore_blossom","spruce_boat","spruce_button","spruce_chest_boat","spruce_door","spruce_fence","spruce_fence_gate","spruce_hanging_sign","spruce_leaves","spruce_log","spruce_planks","spruce_pressure_plate","spruce_sapling","spruce_sign","spruce_slab","spruce_stairs","spruce_trapdoor","spruce_wood","spyglass","spyglass_in_hand","squid_spawn_egg","stick","sticky_piston","stone","stone_axe","stone_brick_slab","stone_brick_stairs","stone_brick_wall","stone_bricks","stone_button","stone_hoe","stone_pickaxe","stone_pressure_plate","stone_shovel","stone_slab","stone_stairs","stone_sword","stonecutter","stray_spawn_egg","strider_spawn_egg","string","stripped_acacia_log","stripped_acacia_wood","stripped_bamboo_block","stripped_birch_log","stripped_birch_wood","stripped_cherry_log","stripped_cherry_wood","stripped_crimson_hyphae","stripped_crimson_stem","stripped_dark_oak_log","stripped_dark_oak_wood","stripped_jungle_log","stripped_jungle_wood","stripped_mangrove_log","stripped_mangrove_wood","stripped_oak_log","stripped_oak_wood","stripped_spruce_log","stripped_spruce_wood","stripped_warped_hyphae","stripped_warped_stem","structure_block","structure_void","sugar","sugar_cane","sunflower","suspicious_gravel","suspicious_sand","suspicious_stew","sweet_berries","tadpole_bucket","tadpole_spawn_egg","tall_grass","target","template_banner","template_bed","template_music_disc","template_shulker_box","template_skull","template_spawn_egg","terracotta","tide_armor_trim_smithing_template","tinted_glass","tipped_arrow","tnt","tnt_minecart","tooting_goat_horn","torch","torchflower","torchflower_seeds","totem_of_undying","trader_llama_spawn_egg","trapped_chest","trial_key","trial_spawner","trident","trident_in_hand","trident_throwing","tripwire_hook","tropical_fish","tropical_fish_bucket","tropical_fish_spawn_egg","tube_coral","tube_coral_block","tube_coral_fan","tuff","tuff_brick_slab","tuff_brick_stairs","tuff_brick_wall","tuff_bricks","tuff_slab","tuff_stairs","tuff_wall","turtle_egg","turtle_helmet","turtle_helmet_amethyst_trim","turtle_helmet_copper_trim","turtle_helmet_diamond_trim","turtle_helmet_emerald_trim","turtle_helmet_gold_trim","turtle_helmet_iron_trim","turtle_helmet_lapis_trim","turtle_helmet_netherite_trim","turtle_helmet_quartz_trim","turtle_helmet_redstone_trim","turtle_scute","turtle_spawn_egg","twisting_vines","vault","verdant_froglight","vex_armor_trim_smithing_template","vex_spawn_egg","villager_spawn_egg","vindicator_spawn_egg","vine","wandering_trader_spawn_egg","ward_armor_trim_smithing_template","warden_spawn_egg","warped_button","warped_door","warped_fence","warped_fence_gate","warped_fungus","warped_fungus_on_a_stick","warped_hanging_sign","warped_hyphae","warped_nylium","warped_planks","warped_pressure_plate","warped_roots","warped_sign","warped_slab","warped_stairs","warped_stem","warped_trapdoor","warped_wart_block","water_bucket","waxed_chiseled_copper","waxed_copper_block","waxed_copper_bulb","waxed_copper_door","waxed_copper_grate","waxed_copper_trapdoor","waxed_cut_copper","waxed_cut_copper_slab","waxed_cut_copper_stairs","waxed_exposed_chiseled_copper","waxed_exposed_copper","waxed_exposed_copper_bulb","waxed_exposed_copper_door","waxed_exposed_copper_grate","waxed_exposed_copper_trapdoor","waxed_exposed_cut_copper","waxed_exposed_cut_copper_slab","waxed_exposed_cut_copper_stairs","waxed_oxidized_chiseled_copper","waxed_oxidized_copper","waxed_oxidized_copper_bulb","waxed_oxidized_copper_door","waxed_oxidized_copper_grate","waxed_oxidized_copper_trapdoor","waxed_oxidized_cut_copper","waxed_oxidized_cut_copper_slab","waxed_oxidized_cut_copper_stairs","waxed_weathered_chiseled_copper","waxed_weathered_copper","waxed_weathered_copper_bulb","waxed_weathered_copper_door","waxed_weathered_copper_grate","waxed_weathered_copper_trapdoor","waxed_weathered_cut_copper","waxed_weathered_cut_copper_slab","waxed_weathered_cut_copper_stairs","wayfinder_armor_trim_smithing_template","weathered_chiseled_copper","weathered_copper","weathered_copper_bulb","weathered_copper_door","weathered_copper_grate","weathered_copper_trapdoor","weathered_cut_copper","weathered_cut_copper_slab","weathered_cut_copper_stairs","weeping_vines","wet_sponge","wheat","wheat_seeds","white_banner","white_bed","white_candle","white_carpet","white_concrete","white_concrete_powder","white_dye","white_glazed_terracotta","white_shulker_box","white_stained_glass","white_stained_glass_pane","white_terracotta","white_tulip","white_wool","wild_armor_trim_smithing_template","wind_charge","witch_spawn_egg","wither_rose","wither_skeleton_skull","wither_skeleton_spawn_egg","wither_spawn_egg","wolf_armor","wolf_spawn_egg","wooden_axe","wooden_hoe","wooden_pickaxe","wooden_shovel","wooden_sword","writable_book","written_book","yellow_banner","yellow_bed","yellow_candle","yellow_carpet","yellow_concrete","yellow_concrete_powder","yellow_dye","yellow_glazed_terracotta","yellow_shulker_box","yellow_stained_glass","yellow_stained_glass_pane","yellow_terracotta","yellow_wool","zoglin_spawn_egg","zombie_head","zombie_horse_spawn_egg","zombie_spawn_egg","zombie_villager_spawn_egg","zombified_piglin_spawn_egg"] \ No newline at end of file diff --git a/tools/entity_port/vanilla_tex/blackstone.png b/tools/entity_port/vanilla_tex/blackstone.png new file mode 100644 index 0000000000000000000000000000000000000000..3213cc35181213843c091eb1f4b67abb1b001243 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VW_45v~v2-`oF;iEPQ4p39 z;}^K`Z^A;LY^kSW7co`z&=UF_dPtSv!3m7 z@tbkQB!_QmZwOn8Eqio+#Pm7JzgX?(O?>x_xo4XAd)5MhA3z5%c)I$ztaD0e0sy~u BO5gwh literal 0 HcmV?d00001 diff --git a/tools/entity_port/vanilla_tex/ice.png b/tools/entity_port/vanilla_tex/ice.png new file mode 100644 index 0000000000000000000000000000000000000000..8965cab064af7181bae62aa0611fca17bf8b534f GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWJ#pv%o-6+s9{xXR=f9rK z|Jv65U3hbeBT$yDB*-s#9~iVIo4f~#qVNPl-Y36F;?AJW0Iatk(CpiC);>E|&d0 yY5KIe**~r>;TE#J*T}x<@{Hr&yCt8L|6%mJBlGltLfm?weGHzielF{r5}E*|_g7^A literal 0 HcmV?d00001 diff --git a/tools/entity_port/vanilla_tex/stray.png b/tools/entity_port/vanilla_tex/stray.png new file mode 100644 index 0000000000000000000000000000000000000000..d1bcd79d5c708175c1ea74d36312737406abcb5c GIT binary patch literal 439 zcmV;o0Z9IdP)NklE1l8Q#*|B;f(V!b(#Ek6Xc%_y+s|!+NVaL(rO>|_lMTlFWa}4pq7OP@>^6IxxBwE8;D1EZO6I#JMZ6sFyn*mA6^NM%-84gHE+|IKkuv(mLQ0uxDb^^d hz#*c#)@t%_{{Yh0dsuX6kmLXW002ovPDHLkV1h7c#P