From 79cbc454e6f023dd7809011a3528615c2695b980 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Wed, 15 Jul 2026 11:39:29 -0500 Subject: [PATCH 1/3] Peach blocks and Peach forest Elka, Glimmer, Deer Toned down alpha mantis spawns Increased uranium and titanium spawn by 25% Overhauled red ant nest and pale nyxite texture Fixed Ant Nests not spawning on Fabric Fixed armor trims not working on antarchy armors Fixed antarchy materials not working as armor trims Adding missing hanging sign gui texture files HFCS Root beer Elythia frog Roseate and Lumen froglight --- build.gradle | 1 + common/build.gradle | 7 +- .../infinity/InfinityCompatVersion.java | 56 + .../jei/AmericanizeJeiRecipeCategory.java | 64 + .../compat/jei/AntarchyJeiPlugin.java | 98 + .../antarchy/config/AntarchySettings.java | 93 + .../antarchy/content/AmericanizeRecipe.java | 114 + .../antarchy/content/AntarchyObjects.java | 146 +- .../antarchy/content/AntarchyTags.java | 19 +- .../antarchy/content/CreativeTabOrder.java | 315 ++ .../content/CustomBrewingRecipes.java | 119 + .../antarchy/content/block/BigBushBlock.java | 291 -- .../content/block/BigBushPartBlock.java | 177 - .../content/block/BlushMossBlock.java | 53 + .../content/block/BlushMossCarpetBlock.java | 136 + .../antarchy/content/block/CornCropBlock.java | 179 + .../content/block/HangingPeachBlock.java | 70 + .../content/block/OuranwoodVineBlock.java | 41 - .../block/OuranwoodVinePlantBlock.java | 42 - .../content/block/PeachLeavesBlock.java | 88 + .../content/block/PeachSaplingBlock.java | 134 + .../content/block/TorchflowerBushBlock.java | 18 - .../content/block/VeryShortGrassBlock.java | 52 - .../content/block/VeryTallGrassBlock.java | 170 - .../antarchy/content/block/WildCornBlock.java | 63 + .../content/client/model/ElkaModel.java | 34 + .../content/client/model/GlimmerModel.java | 45 - .../client/model/OuranwoodDeerModel.java | 41 + .../model/glimmer/GlimmerFrogModel.java | 50 + .../client/model/glimmer/GlimmerModel.java | 22 + .../particle}/GlimmerParticles.java | 20 +- .../client/particle/PeachLeavesParticle.java | 69 + .../client/renderer/AppleCowRenderer.java | 2 +- .../content/client/renderer/ElkaRenderer.java | 15 + .../client/renderer/GlimmerRenderer.java | 108 - .../renderer/OuranwoodDeerRenderer.java | 15 + .../client/renderer/PeachBoatRenderer.java | 78 + .../renderer/glimmer/GlimmerRenderer.java | 128 + .../client/screen/DorrieInventoryScreen.java | 69 + .../effect/GlimmersGraceMobEffect.java | 68 - .../antarchy/content/entity/DorrieEntity.java | 158 +- .../antarchy/content/entity/ElkaEntity.java | 448 +++ .../antarchy/content/entity/ElythiaFrog.java | 38 + .../content/entity/GlimmerEntity.java | 430 -- .../content/entity/OuranwoodDeerEntity.java | 303 ++ .../content/entity/PeachBoatEntity.java | 21 + .../content/entity/PeachChestBoatEntity.java | 22 + .../flying_squirrel/FlyingSquirrelEntity.java | 17 +- .../entity/glimmer/GlimmerAntBehavior.java | 124 + .../glimmer/GlimmerAppleCowBehavior.java | 140 + .../glimmer/GlimmerCompanionSavedData.java | 94 + .../entity/glimmer/GlimmerElkaBehavior.java | 148 + .../content/entity/glimmer/GlimmerEntity.java | 551 +++ .../glimmer/GlimmerFollowOwnerGoal.java | 77 + .../entity/glimmer/GlimmerFrogBehavior.java | 172 + .../glimmer/GlimmerOuranwoodDeerBehavior.java | 175 + .../entity/glimmer/GlimmerVariant.java | 54 + .../glimmer/GlimmerVariantBehavior.java | 147 + .../content/entity/kraken/KrakenEntity.java | 91 +- .../content/fluid/LumenLiquidBlock.java | 109 + .../content/item/GlimmerBottleItem.java | 85 + .../item/HighFructoseCornSyrupItem.java | 64 + .../item/MinersDreamCaveGenerator.java | 173 + .../content/item/MinersDreamExcavation.java | 152 + .../item/MinersDreamExcavationManager.java | 81 + .../content/item/MinersDreamItem.java | 79 + .../content/item/MinersDreamTorchPlacer.java | 89 + .../content/item/PeachBoatOnlyItem.java | 31 + .../content/item/PeachChestBoatItem.java | 31 + .../antarchy/content/item/PeachItem.java | 13 + .../antarchy/content/item/RootBeerItem.java | 59 + .../content/item/SpiritAppleItem.java | 21 + .../content/menu/DorrieInventoryMenu.java | 127 + .../worldgen/elythia/ElythiaBiomeSource.java | 76 +- .../worldgen/elythia/ElythiaFloraFeature.java | 66 +- .../worldgen/elythia/LumenLilyPadFeature.java | 52 + .../worldgen/elythia/LumenPoolFeature.java | 191 + .../worldgen/elythia/LumenStreamFeature.java | 340 ++ .../worldgen/elythia/LumenWorldgenHelper.java | 71 + .../PeachForestMossyBoulderFeature.java | 136 + .../elythia/PeachForestPondConfiguration.java | 19 + .../elythia/PeachForestPondFeature.java | 140 + .../elythia/PeachTreeConfiguration.java | 29 + .../worldgen/elythia/PeachTreeFeature.java | 472 +++ .../worldgen/elythia/PeachTreeGrowers.java | 27 + .../worldgen/overworld/CornPatchFeature.java | 61 + .../mixins/AmericanFoodConsumeMixin.java | 35 + .../mixins/AmericanFoodNameMixin.java | 20 + .../mixins/BlockEntityTypeSignMixin.java | 46 +- .../mixins/FrogSpawnVariantMixin.java | 41 + .../mixins/FrogVariantBootstrapMixin.java | 23 + .../mixins/GlowSquidLumenSpawnMixin.java | 36 + .../antarchy/mixins/PotionBrewingMixin.java | 27 + .../antarchy/mixins/VillagerTradesMixin.java | 93 + .../antarchy/mixins/WaterlilyLumenMixin.java | 25 + .../client/FrogRendererElythiaMixin.java | 29 + .../EntityRenderDispatcherGravityMixin.java | 59 +- .../resources/antarchy-common.mixins.json | 9 + .../antarchy/animations/elka.animation.json | 3578 +++++++++++++++++ .../animations/elka_baby.animation.json | 1091 +++++ .../antarchy/animations/kraken.animation.json | 3348 +++++++++++---- ...ion.json => ouranwood_deer.animation.json} | 905 +++++ ...son => ouranwood_deer_baby.animation.json} | 0 .../assets/antarchy/blockstates/big_bush.json | 16 - .../antarchy/blockstates/big_bush_part.json | 6 - .../blockstates/blush_moss_block.json | 7 + .../blockstates/blush_moss_carpet.json | 154 + .../antarchy/blockstates/corn_crop.json | 28 + .../antarchy/blockstates/hanging_peach.json | 7 + .../assets/antarchy/blockstates/lumen.json | 20 + .../antarchy/blockstates/lumen_froglight.json | 7 + .../antarchy/blockstates/ouranwood_vine.json | 7 - .../blockstates/ouranwood_vine_plant.json | 7 - .../antarchy/blockstates/peach_button.json | 119 + .../antarchy/blockstates/peach_door.json | 125 + .../antarchy/blockstates/peach_fence.json | 49 + .../blockstates/peach_fence_gate.json | 81 + .../blockstates/peach_hanging_sign.json | 7 + .../antarchy/blockstates/peach_leaves.json | 6 + .../antarchy/blockstates/peach_log.json | 17 + .../antarchy/blockstates/peach_planks.json | 8 + .../blockstates/peach_pressure_plate.json | 11 + .../antarchy/blockstates/peach_sapling.json | 7 + .../antarchy/blockstates/peach_sign.json | 7 + .../antarchy/blockstates/peach_slab.json | 14 + .../antarchy/blockstates/peach_stairs.json | 210 + .../antarchy/blockstates/peach_trapdoor.json | 70 + .../blockstates/peach_wall_hanging_sign.json | 7 + .../antarchy/blockstates/peach_wall_sign.json | 7 + .../antarchy/blockstates/peach_wood.json | 17 + .../antarchy/blockstates/red_ant_nest.json | 29 +- .../blockstates/roseate_froglight.json | 7 + .../blockstates/stripped_peach_log.json | 17 + .../blockstates/stripped_peach_wood.json | 17 + .../blockstates/torchflower_bush.json | 10 - .../blockstates/very_short_grass.json | 5 - .../antarchy/blockstates/very_tall_grass.json | 7 - .../antarchy/blockstates/wild_corn.json | 28 + .../assets/antarchy/geo/elka.geo.json | 111 + .../assets/antarchy/geo/elka_baby.geo.json | 109 + .../assets/antarchy/geo/kraken.geo.json | 114 +- ...immer.geo.json => ouranwood_deer.geo.json} | 0 ....geo.json => ouranwood_deer_baby.geo.json} | 0 .../resources/assets/antarchy/lang/en_us.json | 106 +- .../antarchy/models/block/big_bush_part.json | 5 - .../models/block/big_bush_stage1.json | 6 - .../models/block/big_bush_stage2.json | 29 - .../models/block/big_bush_stage3_bottom.json | 29 - .../models/block/big_bush_stage3_top.json | 29 - .../models/block/blush_moss_block.json | 6 + .../models/block/blush_moss_carpet.json | 6 + .../block/blush_moss_carpet_side_small.json | 18 + .../block/blush_moss_carpet_side_tall.json | 18 + ...ush_bottom.json => corn_crop_stage_0.json} | 2 +- ...nwood_vine.json => corn_crop_stage_1.json} | 2 +- ...ant.json => corn_crop_stage_2_bottom.json} | 2 +- .../models/block/corn_crop_stage_2_top.json | 6 + .../block/corn_crop_stage_3_bottom.json | 6 + .../models/block/corn_crop_stage_3_top.json | 6 + ...lower_bush_top.json => hanging_peach.json} | 2 +- .../models/block/lumen_froglight.json | 8 + .../big_bush.json => block/peach_button.json} | 5 +- .../models/block/peach_button_inventory.json | 7 + .../models/block/peach_button_pressed.json | 7 + .../models/block/peach_door_bottom_left.json | 8 + .../block/peach_door_bottom_left_open.json | 8 + .../models/block/peach_door_bottom_right.json | 8 + .../block/peach_door_bottom_right_open.json | 8 + .../models/block/peach_door_top_left.json | 8 + .../block/peach_door_top_left_open.json | 8 + .../models/block/peach_door_top_right.json | 8 + .../block/peach_door_top_right_open.json | 8 + .../models/block/peach_fence_gate.json | 7 + .../models/block/peach_fence_gate_open.json | 7 + .../models/block/peach_fence_gate_wall.json | 7 + .../block/peach_fence_gate_wall_open.json | 7 + .../models/block/peach_fence_inventory.json | 7 + .../models/block/peach_fence_post.json | 7 + .../models/block/peach_fence_side.json | 7 + .../antarchy/models/block/peach_leaves.json | 7 + .../antarchy/models/block/peach_log.json | 8 + .../models/block/peach_log_horizontal.json | 8 + .../antarchy/models/block/peach_planks.json | 7 + .../models/block/peach_pressure_plate.json | 7 + .../block/peach_pressure_plate_down.json | 7 + .../antarchy/models/block/peach_sapling.json | 6 + .../antarchy/models/block/peach_slab.json | 9 + .../antarchy/models/block/peach_slab_top.json | 9 + .../antarchy/models/block/peach_stairs.json | 9 + .../models/block/peach_stairs_inner.json | 9 + .../models/block/peach_stairs_outer.json | 9 + .../models/block/peach_trapdoor_bottom.json | 7 + .../models/block/peach_trapdoor_open.json | 7 + .../models/block/peach_trapdoor_top.json | 7 + .../antarchy/models/block/peach_wood.json | 8 + .../antarchy/models/block/red_ant_nest.json | 12 +- .../models/block/roseate_froglight.json | 8 + .../models/block/stripped_peach_log.json | 8 + .../block/stripped_peach_log_horizontal.json | 8 + .../models/block/stripped_peach_wood.json | 8 + .../block/umbral_moss_carpet_side_small.json | 16 +- .../models/block/very_short_grass.json | 6 - .../models/block/very_tall_grass_bottom.json | 6 - .../models/block/very_tall_grass_middle.json | 6 - .../models/block/very_tall_grass_top.json | 6 - .../models/item/blush_moss_block.json | 3 + .../models/item/blush_moss_carpet.json | 3 + ...y_short_grass.json => cooked_corndog.json} | 2 +- ...chflower_bush.json => cooked_venison.json} | 2 +- .../item/{ouranwood_vine.json => corn.json} | 2 +- .../antarchy/models/item/corn_seeds.json | 6 + .../antarchy/models/item/elka_spawn_egg.json | 3 + .../antarchy/models/item/glimmer_bottle.json | 6 + .../models/item/high_fructose_corn_syrup.json | 6 + .../antarchy/models/item/lumen_froglight.json | 3 + .../antarchy/models/item/miners_dream.json | 6 + .../models/item/ouranwood_deer_spawn_egg.json | 3 + .../assets/antarchy/models/item/peach.json | 6 + .../antarchy/models/item/peach_boat.json | 7 + .../antarchy/models/item/peach_button.json | 4 + .../models/item/peach_chest_boat.json | 7 + .../antarchy/models/item/peach_door.json | 7 + .../antarchy/models/item/peach_fence.json | 4 + .../models/item/peach_fence_gate.json | 4 + .../models/item/peach_hanging_sign.json | 7 + .../antarchy/models/item/peach_leaves.json | 4 + .../antarchy/models/item/peach_log.json | 4 + .../antarchy/models/item/peach_planks.json | 4 + .../models/item/peach_pressure_plate.json | 4 + .../antarchy/models/item/peach_sapling.json | 6 + .../antarchy/models/item/peach_sign.json | 7 + .../antarchy/models/item/peach_slab.json | 4 + .../antarchy/models/item/peach_stairs.json | 4 + .../antarchy/models/item/peach_trapdoor.json | 4 + .../antarchy/models/item/peach_wood.json | 4 + .../antarchy/models/item/raw_corndog.json | 6 + .../antarchy/models/item/raw_venison.json | 6 + .../antarchy/models/item/root_beer.json | 6 + .../models/item/roseate_froglight.json | 3 + .../antarchy/models/item/spirit_apple.json | 6 + .../models/item/stripped_peach_log.json | 4 + .../models/item/stripped_peach_wood.json | 4 + .../antarchy/models/item/very_tall_grass.json | 6 - .../particles/peach_leaves_particle.json | 16 + .../block/big_bush/big_bush_stage1.png | Bin 524 -> 0 bytes .../block/big_bush/big_bush_stage2.png | Bin 1135 -> 0 bytes .../block/big_bush/big_bush_stage3.png | Bin 2486 -> 0 bytes .../textures/block/bile/bile_vein.png | Bin 954 -> 1166 bytes .../textures/block/bile/bile_vein.png.mcmeta | 12 +- .../block/blush_moss/blush_moss_block.png | Bin 0 -> 528 bytes .../block/blush_moss/blush_moss_carpet.png | Bin 0 -> 528 bytes .../textures/block/corn/corn_crop_stage_0.png | Bin 0 -> 168 bytes .../textures/block/corn/corn_crop_stage_1.png | Bin 0 -> 301 bytes .../block/corn/corn_crop_stage_2_bottom.png | Bin 0 -> 462 bytes .../block/corn/corn_crop_stage_2_top.png | Bin 0 -> 245 bytes .../block/corn/corn_crop_stage_3_bottom.png | Bin 0 -> 548 bytes .../block/corn/corn_crop_stage_3_top.png | Bin 0 -> 441 bytes .../antarchy/textures/block/lumen_flow.png | Bin 0 -> 27017 bytes .../textures/block/lumen_flow.png.mcmeta | 6 + .../antarchy/textures/block/lumen_flowing.png | Bin 0 -> 27017 bytes .../textures/block/lumen_flowing.png.mcmeta | 6 + .../textures/block/lumen_froglight_side.png | Bin 0 -> 420 bytes .../textures/block/lumen_froglight_top.png | Bin 0 -> 351 bytes .../antarchy/textures/block/lumen_still.png | Bin 0 -> 20564 bytes .../textures/block/lumen_still.png.mcmeta | 6 + .../block/ouranwood/ouranwood_vine.png | Bin 625 -> 0 bytes .../block/ouranwood/ouranwood_vine_plant.png | Bin 511 -> 0 bytes .../antarchy/textures/block/pale_nyxite.png | Bin 425 -> 408 bytes .../block/peach/peach_door_bottom.png | Bin 0 -> 634 bytes .../textures/block/peach/peach_door_top.png | Bin 0 -> 743 bytes .../textures/block/peach/peach_hanging.png | Bin 0 -> 364 bytes .../textures/block/peach/peach_leaves.png | Bin 0 -> 593 bytes .../textures/block/peach/peach_log.png | Bin 0 -> 399 bytes .../textures/block/peach/peach_log_top.png | Bin 0 -> 567 bytes .../textures/block/peach/peach_planks.png | Bin 0 -> 454 bytes .../textures/block/peach/peach_sapling.png | Bin 0 -> 527 bytes .../textures/block/peach/peach_trapdoor.png | Bin 0 -> 674 bytes .../block/peach/stripped_peach_log.png | Bin 0 -> 388 bytes .../block/peach/stripped_peach_log_top.png | Bin 0 -> 474 bytes .../antarchy/textures/block/red_ant_nest.png | Bin 1309 -> 0 bytes .../block/red_ant_nest/red_ant_nest_side.png | Bin 0 -> 1128 bytes .../red_ant_nest/red_ant_nest_side.png.mcmeta | 5 + .../block/red_ant_nest/red_ant_nest_top.png | Bin 0 -> 1305 bytes .../red_ant_nest/red_ant_nest_top.png.mcmeta | 5 + .../textures/block/red_ant_nest_top.png | Bin 626 -> 0 bytes .../textures/block/roseate_froglight_side.png | Bin 0 -> 423 bytes .../textures/block/roseate_froglight_top.png | Bin 0 -> 343 bytes .../block/torchflower_bush_bottom.png | Bin 593 -> 0 bytes .../textures/block/torchflower_bush_top.png | Bin 240 -> 0 bytes .../textures/block/very_short_grass.png | Bin 263 -> 0 bytes .../very_tall_grass_bottom.png | Bin 407 -> 0 bytes .../very_tall_grass_middle.png | Bin 380 -> 0 bytes .../very_tall_grass/very_tall_grass_top.png | Bin 329 -> 0 bytes .../antarchy/textures/entity/boat/peach.png | Bin 0 -> 3705 bytes .../textures/entity/chest_boat/peach.png | Bin 0 -> 6135 bytes .../assets/antarchy/textures/entity/elka.png | Bin 0 -> 8821 bytes .../antarchy/textures/entity/elka_baby.png | Bin 0 -> 4027 bytes .../textures/entity/frog/frog_elythia.png | Bin 0 -> 1638 bytes .../entity/glimmer/apple_cow_glimmer.png | Bin 0 -> 4101 bytes .../glimmer/apple_cow_glimmer_emissive.png | Bin 0 -> 2772 bytes .../glimmer/apple_cow_glimmer_sheared.png | Bin 0 -> 3896 bytes .../apple_cow_glimmer_sheared_emissive.png | Bin 0 -> 2604 bytes .../glimmer/{glimmer.png => deer_glimmer.png} | Bin ...emissive.png => deer_glimmer_emissive.png} | Bin .../textures/entity/glimmer/elka_glimmer.png | Bin 0 -> 8440 bytes .../entity/glimmer/elka_glimmer_emmisive.png | Bin 0 -> 6307 bytes .../textures/entity/glimmer/frog_glimmer.png | Bin 0 -> 1620 bytes .../entity/glimmer/frog_glimmer_emmisive.png | Bin 0 -> 1551 bytes .../textures/entity/glimmer/glimmer_ant.png | Bin 0 -> 1319 bytes .../entity/glimmer/glimmer_ant_emmisive.png | Bin 0 -> 1319 bytes .../textures/entity/glimmer/glimmer_baby.png | Bin 4623 -> 0 bytes .../entity/glimmer/glimmer_baby_day.png | Bin 4648 -> 0 bytes .../entity/glimmer/glimmer_baby_emissive.png | Bin 4575 -> 0 bytes .../entity/glimmer/rabbit_glimmer.png | Bin 0 -> 1247 bytes .../glimmer/rabbit_glimmer_emmisive.png | Bin 0 -> 1247 bytes .../deer_buck.png} | Bin .../entity/ouranwood_deer/deer_doe.png | Bin 0 -> 6082 bytes .../entity/ouranwood_deer/deer_stag.png | Bin 0 -> 4677 bytes .../textures/entity/signs/hanging/peach.png | Bin 0 -> 1279 bytes .../antarchy/textures/entity/signs/peach.png | Bin 0 -> 1292 bytes .../textures/gui/hanging_signs/ouranwood.png | Bin 1086 -> 485 bytes .../textures/gui/hanging_signs/peach.png | Bin 0 -> 480 bytes .../antarchy/textures/item/cooked_corndog.png | Bin 0 -> 417 bytes .../antarchy/textures/item/cooked_venison.png | Bin 0 -> 305 bytes .../assets/antarchy/textures/item/corn.png | Bin 0 -> 492 bytes .../antarchy/textures/item/corn_seeds.png | Bin 0 -> 368 bytes .../antarchy/textures/item/glimmer_bottle.png | Bin 0 -> 414 bytes .../item/high_fructose_corn_syrup.png | Bin 0 -> 377 bytes .../textures/item/kraken_tentacle.png | Bin 0 -> 460 bytes .../antarchy/textures/item/kraken_tooth.png | Bin 410 -> 415 bytes .../antarchy/textures/item/lumen_bucket.png | Bin 0 -> 388 bytes .../antarchy/textures/item/miners_dream.png | Bin 0 -> 425 bytes .../assets/antarchy/textures/item/peach.png | Bin 0 -> 458 bytes .../antarchy/textures/item/peach_boat.png | Bin 0 -> 482 bytes .../textures/item/peach_chest_boat.png | Bin 0 -> 557 bytes .../textures/item/peach_door_icon.png | Bin 0 -> 248 bytes .../textures/item/peach_hanging_sign.png | Bin 0 -> 455 bytes .../antarchy/textures/item/peach_sign.png | Bin 0 -> 425 bytes .../antarchy/textures/item/raw_corndog.png | Bin 0 -> 423 bytes .../antarchy/textures/item/raw_venison.png | Bin 0 -> 305 bytes .../antarchy/textures/item/root_beer.png | Bin 0 -> 517 bytes .../antarchy/textures/item/spirit_apple.png | Bin 0 -> 348 bytes .../textures/mob_effect/bloodglass_ward.png | Bin 200 -> 505 bytes .../textures/mob_effect/glimmers_grace.png | Bin 355 -> 0 bytes .../antarchy/textures/mob_effect/stinky.png | Bin 356 -> 672 bytes .../textures/particle/peach/peach_0.png | Bin 0 -> 112 bytes .../textures/particle/peach/peach_1.png | Bin 0 -> 112 bytes .../textures/particle/peach/peach_10.png | Bin 0 -> 115 bytes .../textures/particle/peach/peach_11.png | Bin 0 -> 114 bytes .../textures/particle/peach/peach_2.png | Bin 0 -> 84 bytes .../textures/particle/peach/peach_3.png | Bin 0 -> 108 bytes .../textures/particle/peach/peach_4.png | Bin 0 -> 108 bytes .../textures/particle/peach/peach_5.png | Bin 0 -> 84 bytes .../textures/particle/peach/peach_6.png | Bin 0 -> 109 bytes .../textures/particle/peach/peach_7.png | Bin 0 -> 110 bytes .../textures/particle/peach/peach_8.png | Bin 0 -> 109 bytes .../textures/particle/peach/peach_9.png | Bin 0 -> 115 bytes .../assets/minecraft/atlases/armor_trims.json | 52 + .../entity/signs/hanging/ouranwood.png | Bin 1086 -> 0 bytes .../textures/entity/signs/ouranwood.png | Bin 965 -> 0 bytes .../antarchy/advancement/apple_of_my_eye.json | 29 + .../antarchy/advancement/deerly_beloved.json | 29 + .../advancement/elkcellent_choice.json | 29 + .../antarchy/advancement/hoppy_together.json | 29 + .../antarchy/advancement/spirant_animal.json | 29 + .../data/antarchy/dimension/elythia.json | 86 +- .../loot_table/blocks/blush_moss_block.json | 20 + .../loot_table/blocks/blush_moss_carpet.json | 29 + .../antarchy/loot_table/blocks/corn_crop.json | 70 + .../loot_table/blocks/hanging_peach.json | 20 + .../loot_table/blocks/ouranwood_vine.json | 25 - .../loot_table/blocks/peach_button.json | 21 + .../loot_table/blocks/peach_door.json | 30 + .../loot_table/blocks/peach_fence.json | 21 + .../loot_table/blocks/peach_fence_gate.json | 21 + .../loot_table/blocks/peach_hanging_sign.json | 21 + .../loot_table/blocks/peach_leaves.json | 138 + .../antarchy/loot_table/blocks/peach_log.json | 21 + .../loot_table/blocks/peach_planks.json | 21 + .../blocks/peach_pressure_plate.json | 21 + .../loot_table/blocks/peach_sapling.json | 15 + .../loot_table/blocks/peach_sign.json | 21 + .../loot_table/blocks/peach_slab.json | 35 + .../loot_table/blocks/peach_stairs.json | 21 + .../loot_table/blocks/peach_trapdoor.json | 21 + .../loot_table/blocks/peach_wood.json | 21 + .../loot_table/blocks/stripped_peach_log.json | 21 + .../blocks/stripped_peach_wood.json | 21 + .../antarchy/loot_table/blocks/wild_corn.json | 24 + .../loot_table/entities/ouranwood_deer.json | 75 + .../data/antarchy/recipe/americanize.json | 4 + .../antarchy/recipe/blush_moss_carpet.json | 17 + .../recipe/cooked_corndog_from_smelting.json | 12 + .../recipe/cooked_corndog_from_smoking.json | 12 + .../data/antarchy/recipe/corn_seeds.json | 13 + .../data/antarchy/recipe/miners_dream.json | 19 + .../antarchy/recipe/peach/peach_boat.json | 18 + .../antarchy/recipe/peach/peach_button.json | 14 + .../recipe/peach/peach_chest_boat.json | 17 + .../antarchy/recipe/peach/peach_door.json | 19 + .../antarchy/recipe/peach/peach_fence.json | 21 + .../recipe/peach/peach_fence_gate.json | 21 + .../recipe/peach/peach_hanging_sign.json | 22 + .../antarchy/recipe/peach/peach_planks.json | 14 + .../recipe/peach/peach_pressure_plate.json | 17 + .../antarchy/recipe/peach/peach_sign.json | 22 + .../antarchy/recipe/peach/peach_slab.json | 17 + .../antarchy/recipe/peach/peach_stairs.json | 19 + .../antarchy/recipe/peach/peach_trapdoor.json | 18 + .../antarchy/recipe/peach/peach_wood.json | 18 + .../recipe/peach/stripped_peach_wood.json | 18 + .../data/antarchy/recipe/raw_corndog.json | 24 + .../tags/block/blush_moss_replaceable.json | 8 + .../tags/block/miners_dream_carvable.json | 36 + .../data/antarchy/tags/block/peach_logs.json | 9 + .../tags/entity_type/basilisk_prey.json | 4 +- .../entity_type/dread_hallucination_mobs.json | 5 +- .../tags/entity_type/frog_glimmer_no_eat.json | 9 + .../data/antarchy/tags/fluids/lumen.json | 7 + .../antarchy/tags/item/corndog_meats.json | 19 + .../tags/item/glimmer_augment_ant.json | 5 + .../tags/item/glimmer_augment_apple_cow.json | 5 + .../tags/item/glimmer_augment_elka.json | 5 + .../tags/item/glimmer_augment_frog.json | 5 + .../item/glimmer_augment_ouranwood_deer.json | 5 + .../tags/item/hfcs_cannot_americanize.json | 3 + ...mer_food.json => ouranwood_deer_food.json} | 0 .../data/antarchy/tags/item/peach_logs.json | 9 + .../data/antarchy/tags/item/roots.json | 8 + .../antarchy/tags/item/venison_foods.json | 7 + .../biome/cloud_shark_spawn_biomes.json | 3 +- .../elythia_firefly_particle_biomes.json | 1 + .../biome/flying_squirrel_spawn_biomes.json | 3 +- .../biome/honeyed_apple_cow_spawn_biomes.json | 10 - .../tags/worldgen/biome/is_elythia.json | 2 + .../biome/wild_corn_spawn_biomes.json | 13 + .../worldgen/biome/elythia_meadow.json | 6 +- .../biome/fungal_ouranwood_forest.json | 12 + .../worldgen/biome/glimmering_pools.json | 94 + .../worldgen/biome/ouranwood_forest.json | 12 + .../antarchy/worldgen/biome/peach_forest.json | 106 + .../biome/sparse_ouranwood_forest.json | 6 + .../configured_feature/blush_moss_patch.json | 27 + .../blush_moss_patch_bonemeal.json | 27 + .../blush_moss_vegetation.json | 23 + .../configured_feature/corn_patch.json | 4 + .../configured_feature/lumen_lily_pads.json | 4 + .../configured_feature/lumen_pools.json | 4 + .../configured_feature/lumen_streams.json | 4 + .../peach_forest_flora.json | 4 + .../peach_forest_mossy_boulder.json | 4 + .../peach_forest_petals.json | 11 + .../peach_forest_pond_large.json | 9 + .../peach_forest_pond_medium.json | 9 + .../peach_forest_pond_small.json | 9 + .../configured_feature/peach_large_tree.json | 43 + .../configured_feature/peach_tree.json | 43 + .../worldgen/noise_settings/elythia.json | 54 + .../placed_feature/blush_moss_patch.json | 44 + .../worldgen/placed_feature/corn_patch.json | 19 + .../placed_feature/lumen_lily_pads.json | 19 + .../worldgen/placed_feature/lumen_pools.json | 19 + .../placed_feature/lumen_streams.json | 19 + .../placed_feature/peach_forest_flora.json | 19 + .../peach_forest_mossy_boulders.json | 19 + .../placed_feature/peach_forest_petals.json | 19 + .../peach_forest_ponds_large.json | 19 + .../peach_forest_ponds_medium.json | 19 + .../peach_forest_ponds_small.json | 19 + .../placed_feature/peach_large_tree.json | 19 + .../worldgen/placed_feature/peach_tree.json | 31 + .../worldgen/placed_feature/titanium_ore.json | 2 +- .../worldgen/placed_feature/uranium_ore.json | 2 +- .../resources/data/c/tags/item/foods.json | 7 +- .../loot_table/entities/magma_cube.json | 161 + .../tags/block/all_hanging_signs.json | 4 +- .../tags/block/ceiling_hanging_signs.json | 3 +- .../data/minecraft/tags/block/dirt.json | 3 +- .../minecraft/tags/block/fence_gates.json | 3 +- .../tags/block/frogs_spawnable_on.json | 7 + .../data/minecraft/tags/block/leaves.json | 3 +- .../data/minecraft/tags/block/logs.json | 6 +- .../minecraft/tags/block/logs_that_burn.json | 6 +- .../minecraft/tags/block/mineable/axe.json | 19 +- .../minecraft/tags/block/mineable/hoe.json | 7 +- .../data/minecraft/tags/block/planks.json | 3 +- .../data/minecraft/tags/block/saplings.json | 3 +- .../minecraft/tags/block/standing_signs.json | 3 +- .../tags/block/wall_hanging_signs.json | 3 +- .../data/minecraft/tags/block/wall_signs.json | 3 +- .../minecraft/tags/block/wooden_buttons.json | 3 +- .../minecraft/tags/block/wooden_doors.json | 3 +- .../minecraft/tags/block/wooden_fences.json | 3 +- .../tags/block/wooden_pressure_plates.json | 3 +- .../minecraft/tags/block/wooden_slabs.json | 3 +- .../minecraft/tags/block/wooden_stairs.json | 3 +- .../tags/block/wooden_trapdoors.json | 3 +- .../data/minecraft/tags/item/boats.json | 3 +- .../data/minecraft/tags/item/chest_boats.json | 3 +- .../data/minecraft/tags/item/fence_gates.json | 3 +- .../minecraft/tags/item/hanging_signs.json | 3 +- .../data/minecraft/tags/item/leaves.json | 3 +- .../data/minecraft/tags/item/logs.json | 6 +- .../minecraft/tags/item/logs_that_burn.json | 6 +- .../data/minecraft/tags/item/planks.json | 3 +- .../data/minecraft/tags/item/saplings.json | 3 +- .../data/minecraft/tags/item/signs.json | 3 +- .../minecraft/tags/item/trimmable_armor.json | 19 + .../minecraft/tags/item/wooden_buttons.json | 3 +- .../minecraft/tags/item/wooden_doors.json | 3 +- .../minecraft/tags/item/wooden_fences.json | 3 +- .../tags/item/wooden_pressure_plates.json | 3 +- .../minecraft/tags/item/wooden_slabs.json | 3 +- .../minecraft/tags/item/wooden_stairs.json | 3 +- .../minecraft/tags/item/wooden_trapdoors.json | 3 +- fabric/build.gradle | 7 +- .../fabric/AntarchyConfigModuleFabric.java | 2 + .../antarchy/fabric/AntarchyFabric.java | 143 + .../fabric/AntarchyFabricContent.java | 421 +- .../antarchy/fabric/AntarchyFabricEvents.java | 9 + ...dWoodTypes.java => AntarchyWoodTypes.java} | 5 +- .../antarchy/fabric/FabricInfinityCompat.java | 3 + .../client/AntarchyFabricClientBootstrap.java | 33 +- .../mixin/infinity/RandomSpringMixin.java | 37 - .../resources/antarchy-fabric.mixins.json | 1 - .../antarchy/models/item/lumen_bucket.json | 6 + .../data/minecraft/tags/fluid/water.json | 4 +- fabric/src/main/resources/fabric.mod.json | 3 + gradle.properties | 1 + neoforge/build.gradle | 7 +- .../AntarchyConfigModuleNeoforge.java | 12 + .../antarchy/neoforge/AntarchyMobsConfig.java | 10 + .../neoforge/AntarchyNeoForgeFluidTypes.java | 11 + .../antarchy/neoforge/AntarchyNeoforge.java | 56 +- .../neoforge/AntarchyToolsConfig.java | 44 + ...dWoodTypes.java => AntarchyWoodTypes.java} | 5 +- .../neoforge/NeoForgeInfinityCompat.java | 3 + .../client/AntarchyNeoForgeClient.java | 71 +- .../neoforge/content/block/WildCornBlock.java | 64 + .../mixins/infinity/RandomSpringMixin.java | 37 - .../registry/AntarchyNeoForgeEvents.java | 72 + .../registry/AntarchyNeoforgeBlocks.java | 67 +- .../AntarchyNeoforgeCreativeModeTabs.java | 187 +- .../registry/AntarchyNeoforgeEntites.java | 43 +- .../AntarchyNeoforgeEntityAttributes.java | 5 +- .../registry/AntarchyNeoforgeItems.java | 102 +- .../registry/AntarchyNeoforgeMisc.java | 66 +- .../AntarchyNeoforgeSpawnPlacements.java | 5 +- .../neoforge/worldgen/CornPatchFeature.java | 62 + .../worldgen/LumenLilyPadFeature.java | 52 + .../resources/META-INF/neoforge.mods.toml | 10 +- .../resources/antarchy-neoforge.mixins.json | 1 - .../antarchy/models/item/lumen_bucket.json | 5 + .../corn_patch_in_spawn_biomes.json | 8 + tmp_extract/Frog.javap.txt | Bin 0 -> 97376 bytes tmp_extract/Frog_full.javap.txt | Bin 0 -> 97376 bytes tmp_extract/ShootTongue.javap.txt | Bin 0 -> 56346 bytes .../FabricBrewingRecipeRegistryBuilder.java | 69 + .../common/brewing/BrewingRecipe.java | 48 + .../common/brewing/IBrewingRecipe.java | 38 + .../brewing/RegisterBrewingRecipesEvent.java | 35 + 561 files changed, 22472 insertions(+), 3149 deletions(-) create mode 100644 common/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatVersion.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/compat/jei/AmericanizeJeiRecipeCategory.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/compat/jei/AntarchyJeiPlugin.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/AmericanizeRecipe.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/CustomBrewingRecipes.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/BigBushBlock.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/BigBushPartBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossCarpetBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/CornCropBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/HangingPeachBlock.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVineBlock.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVinePlantBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/PeachLeavesBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/PeachSaplingBlock.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/TorchflowerBushBlock.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/VeryShortGrassBlock.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/VeryTallGrassBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/WildCornBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/ElkaModel.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/GlimmerModel.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/OuranwoodDeerModel.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerFrogModel.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerModel.java rename common/src/main/java/com/craisinlord/antarchy/content/{ => client/particle}/GlimmerParticles.java (74%) create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/particle/PeachLeavesParticle.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElkaRenderer.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmerRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OuranwoodDeerRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/PeachBoatRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/screen/DorrieInventoryScreen.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/content/effect/GlimmersGraceMobEffect.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/ElkaEntity.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/ElythiaFrog.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/GlimmerEntity.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/PeachBoatEntity.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/PeachChestBoatEntity.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerCompanionSavedData.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFollowOwnerGoal.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariant.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariantBehavior.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/fluid/LumenLiquidBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/HighFructoseCornSyrupItem.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamCaveGenerator.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavation.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavationManager.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamItem.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamTorchPlacer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/PeachBoatOnlyItem.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/PeachChestBoatItem.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/RootBeerItem.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/menu/DorrieInventoryMenu.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenLilyPadFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenStreamFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenWorldgenHelper.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondConfiguration.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeConfiguration.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeGrowers.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/overworld/CornPatchFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodConsumeMixin.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodNameMixin.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/FrogSpawnVariantMixin.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/FrogVariantBootstrapMixin.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/GlowSquidLumenSpawnMixin.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/VillagerTradesMixin.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/WaterlilyLumenMixin.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/client/FrogRendererElythiaMixin.java create mode 100644 common/src/main/resources/assets/antarchy/animations/elka.animation.json create mode 100644 common/src/main/resources/assets/antarchy/animations/elka_baby.animation.json rename common/src/main/resources/assets/antarchy/animations/{glimmer_baby.animation.json => ouranwood_deer.animation.json} (65%) rename common/src/main/resources/assets/antarchy/animations/{glimmer.animation.json => ouranwood_deer_baby.animation.json} (100%) delete mode 100644 common/src/main/resources/assets/antarchy/blockstates/big_bush.json delete mode 100644 common/src/main/resources/assets/antarchy/blockstates/big_bush_part.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/blush_moss_block.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/blush_moss_carpet.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/corn_crop.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/hanging_peach.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/lumen.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/lumen_froglight.json delete mode 100644 common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine.json delete mode 100644 common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine_plant.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_button.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_door.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_fence.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_fence_gate.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_hanging_sign.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_leaves.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_log.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_planks.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_pressure_plate.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_sapling.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_sign.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_slab.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_stairs.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_trapdoor.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_wall_hanging_sign.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_wall_sign.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/peach_wood.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/roseate_froglight.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/stripped_peach_log.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/stripped_peach_wood.json delete mode 100644 common/src/main/resources/assets/antarchy/blockstates/torchflower_bush.json delete mode 100644 common/src/main/resources/assets/antarchy/blockstates/very_short_grass.json delete mode 100644 common/src/main/resources/assets/antarchy/blockstates/very_tall_grass.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/wild_corn.json create mode 100644 common/src/main/resources/assets/antarchy/geo/elka.geo.json create mode 100644 common/src/main/resources/assets/antarchy/geo/elka_baby.geo.json rename common/src/main/resources/assets/antarchy/geo/{glimmer.geo.json => ouranwood_deer.geo.json} (100%) rename common/src/main/resources/assets/antarchy/geo/{glimmer_baby.geo.json => ouranwood_deer_baby.geo.json} (100%) delete mode 100644 common/src/main/resources/assets/antarchy/models/block/big_bush_part.json delete mode 100644 common/src/main/resources/assets/antarchy/models/block/big_bush_stage1.json delete mode 100644 common/src/main/resources/assets/antarchy/models/block/big_bush_stage2.json delete mode 100644 common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_bottom.json delete mode 100644 common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_top.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/blush_moss_block.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_small.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_tall.json rename common/src/main/resources/assets/antarchy/models/block/{torchflower_bush_bottom.json => corn_crop_stage_0.json} (53%) rename common/src/main/resources/assets/antarchy/models/block/{ouranwood_vine.json => corn_crop_stage_1.json} (52%) rename common/src/main/resources/assets/antarchy/models/block/{ouranwood_vine_plant.json => corn_crop_stage_2_bottom.json} (50%) create mode 100644 common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_top.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_bottom.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_top.json rename common/src/main/resources/assets/antarchy/models/block/{torchflower_bush_top.json => hanging_peach.json} (54%) create mode 100644 common/src/main/resources/assets/antarchy/models/block/lumen_froglight.json rename common/src/main/resources/assets/antarchy/models/{item/big_bush.json => block/peach_button.json} (57%) create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_button_inventory.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_button_pressed.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left_open.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right_open.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_door_top_left.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_door_top_left_open.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_door_top_right.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_door_top_right_open.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_fence_gate.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_open.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall_open.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_fence_inventory.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_fence_post.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_fence_side.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_leaves.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_log.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_log_horizontal.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_planks.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_pressure_plate.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_pressure_plate_down.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_sapling.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_slab.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_slab_top.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_stairs.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_stairs_inner.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_stairs_outer.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_bottom.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_open.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_top.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_wood.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/roseate_froglight.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/stripped_peach_log.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/stripped_peach_log_horizontal.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/stripped_peach_wood.json delete mode 100644 common/src/main/resources/assets/antarchy/models/block/very_short_grass.json delete mode 100644 common/src/main/resources/assets/antarchy/models/block/very_tall_grass_bottom.json delete mode 100644 common/src/main/resources/assets/antarchy/models/block/very_tall_grass_middle.json delete mode 100644 common/src/main/resources/assets/antarchy/models/block/very_tall_grass_top.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/blush_moss_block.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/blush_moss_carpet.json rename common/src/main/resources/assets/antarchy/models/item/{very_short_grass.json => cooked_corndog.json} (57%) rename common/src/main/resources/assets/antarchy/models/item/{torchflower_bush.json => cooked_venison.json} (55%) rename common/src/main/resources/assets/antarchy/models/item/{ouranwood_vine.json => corn.json} (53%) create mode 100644 common/src/main/resources/assets/antarchy/models/item/corn_seeds.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/elka_spawn_egg.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/glimmer_bottle.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/high_fructose_corn_syrup.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/lumen_froglight.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/miners_dream.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/ouranwood_deer_spawn_egg.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_boat.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_button.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_chest_boat.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_door.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_fence.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_fence_gate.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_hanging_sign.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_leaves.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_log.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_planks.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_pressure_plate.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_sapling.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_sign.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_slab.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_stairs.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_trapdoor.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_wood.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/raw_corndog.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/raw_venison.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/root_beer.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/roseate_froglight.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/spirit_apple.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/stripped_peach_log.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/stripped_peach_wood.json delete mode 100644 common/src/main/resources/assets/antarchy/models/item/very_tall_grass.json create mode 100644 common/src/main/resources/assets/antarchy/particles/peach_leaves_particle.json delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage1.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage2.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage3.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_block.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/blush_moss/blush_moss_carpet.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_0.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_1.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_bottom.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_top.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_3_bottom.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_3_top.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/lumen_flow.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/lumen_flow.png.mcmeta create mode 100644 common/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png.mcmeta create mode 100644 common/src/main/resources/assets/antarchy/textures/block/lumen_froglight_side.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/lumen_froglight_top.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/lumen_still.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/lumen_still.png.mcmeta delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine_plant.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/peach/peach_door_bottom.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/peach/peach_door_top.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/peach/peach_hanging.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/peach/peach_leaves.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/peach/peach_log.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/peach/peach_log_top.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/peach/peach_planks.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/peach/peach_sapling.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/peach/peach_trapdoor.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/peach/stripped_peach_log.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/peach/stripped_peach_log_top.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/red_ant_nest.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png.mcmeta create mode 100644 common/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png.mcmeta delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/red_ant_nest_top.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/roseate_froglight_side.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/roseate_froglight_top.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/torchflower_bush_bottom.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/torchflower_bush_top.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/very_short_grass.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_bottom.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_middle.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_top.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/boat/peach.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/chest_boat/peach.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/elka.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/elka_baby.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/frog/frog_elythia.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_emissive.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_sheared.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_sheared_emissive.png rename common/src/main/resources/assets/antarchy/textures/entity/glimmer/{glimmer.png => deer_glimmer.png} (100%) rename common/src/main/resources/assets/antarchy/textures/entity/glimmer/{glimmer_emissive.png => deer_glimmer_emissive.png} (100%) create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer_emmisive.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/frog_glimmer_emmisive.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_ant_emmisive.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby_day.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby_emissive.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer_emmisive.png rename common/src/main/resources/assets/antarchy/textures/entity/{glimmer/glimmer_day.png => ouranwood_deer/deer_buck.png} (100%) create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_doe.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_stag.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/signs/hanging/peach.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/signs/peach.png create mode 100644 common/src/main/resources/assets/antarchy/textures/gui/hanging_signs/peach.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/cooked_corndog.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/cooked_venison.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/corn.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/corn_seeds.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/high_fructose_corn_syrup.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/kraken_tentacle.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/lumen_bucket.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/miners_dream.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/peach.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/peach_boat.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/peach_chest_boat.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/peach_door_icon.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/peach_hanging_sign.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/peach_sign.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/raw_corndog.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/raw_venison.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/root_beer.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/spirit_apple.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/mob_effect/glimmers_grace.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/peach/peach_0.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/peach/peach_1.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/peach/peach_10.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/peach/peach_11.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/peach/peach_2.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/peach/peach_3.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/peach/peach_4.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/peach/peach_5.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/peach/peach_6.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/peach/peach_7.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/peach/peach_8.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/peach/peach_9.png create mode 100644 common/src/main/resources/assets/minecraft/atlases/armor_trims.json delete mode 100644 common/src/main/resources/assets/minecraft/textures/entity/signs/hanging/ouranwood.png delete mode 100644 common/src/main/resources/assets/minecraft/textures/entity/signs/ouranwood.png create mode 100644 common/src/main/resources/data/antarchy/advancement/apple_of_my_eye.json create mode 100644 common/src/main/resources/data/antarchy/advancement/deerly_beloved.json create mode 100644 common/src/main/resources/data/antarchy/advancement/elkcellent_choice.json create mode 100644 common/src/main/resources/data/antarchy/advancement/hoppy_together.json create mode 100644 common/src/main/resources/data/antarchy/advancement/spirant_animal.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_block.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_carpet.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/hanging_peach.json delete mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_vine.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_button.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_door.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_fence.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_fence_gate.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_hanging_sign.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_leaves.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_log.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_planks.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_pressure_plate.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_sapling.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_sign.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_slab.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_stairs.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_trapdoor.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/peach_wood.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_log.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_wood.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/wild_corn.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/entities/ouranwood_deer.json create mode 100644 common/src/main/resources/data/antarchy/recipe/americanize.json create mode 100644 common/src/main/resources/data/antarchy/recipe/blush_moss_carpet.json create mode 100644 common/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smelting.json create mode 100644 common/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smoking.json create mode 100644 common/src/main/resources/data/antarchy/recipe/corn_seeds.json create mode 100644 common/src/main/resources/data/antarchy/recipe/miners_dream.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_boat.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_button.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_chest_boat.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_door.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_fence.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_fence_gate.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_hanging_sign.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_planks.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_pressure_plate.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_sign.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_slab.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_stairs.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_trapdoor.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/peach_wood.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach/stripped_peach_wood.json create mode 100644 common/src/main/resources/data/antarchy/recipe/raw_corndog.json create mode 100644 common/src/main/resources/data/antarchy/tags/block/blush_moss_replaceable.json create mode 100644 common/src/main/resources/data/antarchy/tags/block/miners_dream_carvable.json create mode 100644 common/src/main/resources/data/antarchy/tags/block/peach_logs.json create mode 100644 common/src/main/resources/data/antarchy/tags/entity_type/frog_glimmer_no_eat.json create mode 100644 common/src/main/resources/data/antarchy/tags/fluids/lumen.json create mode 100644 common/src/main/resources/data/antarchy/tags/item/corndog_meats.json create mode 100644 common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ant.json create mode 100644 common/src/main/resources/data/antarchy/tags/item/glimmer_augment_apple_cow.json create mode 100644 common/src/main/resources/data/antarchy/tags/item/glimmer_augment_elka.json create mode 100644 common/src/main/resources/data/antarchy/tags/item/glimmer_augment_frog.json create mode 100644 common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ouranwood_deer.json create mode 100644 common/src/main/resources/data/antarchy/tags/item/hfcs_cannot_americanize.json rename common/src/main/resources/data/antarchy/tags/item/{glimmer_food.json => ouranwood_deer_food.json} (100%) create mode 100644 common/src/main/resources/data/antarchy/tags/item/peach_logs.json create mode 100644 common/src/main/resources/data/antarchy/tags/item/roots.json create mode 100644 common/src/main/resources/data/antarchy/tags/item/venison_foods.json delete mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/honeyed_apple_cow_spawn_biomes.json create mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/wild_corn_spawn_biomes.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch_bonemeal.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_vegetation.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/corn_patch.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_lily_pads.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_pools.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_streams.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_flora.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_mossy_boulder.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_petals.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_large.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_medium.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_small.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_large_tree.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_tree.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/blush_moss_patch.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/corn_patch.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_lily_pads.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_pools.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_streams.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_flora.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_mossy_boulders.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_large.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_medium.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_small.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_large_tree.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_tree.json create mode 100644 common/src/main/resources/data/minecraft/loot_table/entities/magma_cube.json create mode 100644 common/src/main/resources/data/minecraft/tags/block/frogs_spawnable_on.json create mode 100644 common/src/main/resources/data/minecraft/tags/item/trimmable_armor.json rename fabric/src/main/java/com/craisinlord/antarchy/fabric/{OuranwoodWoodTypes.java => AntarchyWoodTypes.java} (80%) delete mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/RandomSpringMixin.java create mode 100644 fabric/src/main/resources/assets/antarchy/models/item/lumen_bucket.json rename neoforge/src/main/java/com/craisinlord/antarchy/neoforge/{OuranwoodWoodTypes.java => AntarchyWoodTypes.java} (77%) create mode 100644 neoforge/src/main/java/com/craisinlord/antarchy/neoforge/content/block/WildCornBlock.java delete mode 100644 neoforge/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/RandomSpringMixin.java create mode 100644 neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/CornPatchFeature.java create mode 100644 neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/LumenLilyPadFeature.java create mode 100644 neoforge/src/main/resources/assets/antarchy/models/item/lumen_bucket.json create mode 100644 neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/corn_patch_in_spawn_biomes.json create mode 100644 tmp_extract/Frog.javap.txt create mode 100644 tmp_extract/Frog_full.javap.txt create mode 100644 tmp_extract/ShootTongue.javap.txt create mode 100644 tmp_extract/net/fabricmc/fabric/api/registry/FabricBrewingRecipeRegistryBuilder.java create mode 100644 tmp_extract/net/neoforged/neoforge/common/brewing/BrewingRecipe.java create mode 100644 tmp_extract/net/neoforged/neoforge/common/brewing/IBrewingRecipe.java create mode 100644 tmp_extract/net/neoforged/neoforge/event/brewing/RegisterBrewingRecipesEvent.java diff --git a/build.gradle b/build.gradle index 1ca1690f..f68e5510 100644 --- a/build.gradle +++ b/build.gradle @@ -65,6 +65,7 @@ allprojects { maven { url "https://jitpack.io" } maven { url "https://www.cursemaven.com" } maven { url "https://api.modrinth.com/maven/" } + maven { url "https://maven.blamejared.com" } } tasks.withType(JavaCompile) { diff --git a/common/build.gradle b/common/build.gradle index 26b5e534..78625d87 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -17,9 +17,9 @@ dependencies { // compileOnly("curse.maven:backpack-${project.backpack_curseforge_id}:${project.backpack_curseforge_file_id}") // compileOnly("curse.maven:regions_unexplored-${project.regions_unexplored_curseforge_id}:${project.regions_unexplored_curseforge_file_id}") // compileOnly("curse.maven:geckolib-${project.geckolib_curseforge_id}:${project.geckolib_curseforge_file_id}") - compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-fabric.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge-sources.jar")) + compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.2+1.21.1-neoforge.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-fabric.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge-sources.jar")) compileOnly(files("$rootDir/infinite_dimensions_jars/gravity-api-1.0.7-1.20.1.jar")) // compileOnly(files("$rootDir/infinite_dimensions_jars/Cloro's Gravity Gun Mod (Release 1.3.1).jar")) // compileOnly(files("$rootDir/infinite_dimensions_jars/antarchy-1.0.0+1.21.1-neoforge.jar")) @@ -34,6 +34,7 @@ dependencies { // names throughout, so this is the one common can safely compile against. compileOnly(files("$rootDir/sizeable_foliage_jars/sizeable_foliage-neoforge-1.21.1-1.0.0.jar")) compileOnly("software.bernie.geckolib:geckolib-neoforge-${minecraft_version}:${geckolib_version}") + compileOnly("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}") // // compileOnly group: 'org.ow2.asm', name: 'asm-tree', version: '9.4' // implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2' diff --git a/common/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatVersion.java b/common/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatVersion.java new file mode 100644 index 00000000..00a52abb --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/compat/infinity/InfinityCompatVersion.java @@ -0,0 +1,56 @@ +package com.craisinlord.antarchy.compat.infinity; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public final class InfinityCompatVersion { + private static final Pattern VERSION_PARTS = Pattern.compile("(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?"); + private static final int REQUIRED_MAJOR = 2; + private static final int REQUIRED_MINOR = 7; + private static final int REQUIRED_PATCH = 2; + + private InfinityCompatVersion() { + } + + public static boolean isSupported(String version) { + int[] parsed = parse(version); + if (parsed == null) { + return false; + } + if (parsed[0] != REQUIRED_MAJOR) { + return parsed[0] > REQUIRED_MAJOR; + } + if (parsed[1] != REQUIRED_MINOR) { + return parsed[1] > REQUIRED_MINOR; + } + return parsed[2] >= REQUIRED_PATCH; + } + + public static String requiredVersion() { + return REQUIRED_MAJOR + "." + REQUIRED_MINOR + "." + REQUIRED_PATCH; + } + + private static int[] parse(String version) { + if (version == null || version.isBlank()) { + return null; + } + + Matcher matcher = VERSION_PARTS.matcher(version); + if (!matcher.find()) { + return null; + } + + return new int[]{ + parsePart(matcher.group(1)), + parsePart(matcher.group(2)), + parsePart(matcher.group(3)) + }; + } + + private static int parsePart(String value) { + if (value == null || value.isBlank()) { + return 0; + } + return Integer.parseInt(value); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/compat/jei/AmericanizeJeiRecipeCategory.java b/common/src/main/java/com/craisinlord/antarchy/compat/jei/AmericanizeJeiRecipeCategory.java new file mode 100644 index 00000000..94efc7fc --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/compat/jei/AmericanizeJeiRecipeCategory.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.compat.jei; + +import com.craisinlord.antarchy.Antarchy; +import java.util.List; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; + +public final class AmericanizeJeiRecipeCategory implements IRecipeCategory { + public static final RecipeType TYPE = RecipeType.create(Antarchy.MODID, "americanize", Recipe.class); + + private final IDrawable icon; + + public record Recipe(List foods, ItemStack hfcs, List results) { + } + + public AmericanizeJeiRecipeCategory(IGuiHelper guiHelper, ItemStack hfcsIcon) { + this.icon = guiHelper.createDrawableItemStack(hfcsIcon); + } + + @Override + public RecipeType getRecipeType() { + return TYPE; + } + + @Override + public Component getTitle() { + return Component.translatable("jei.antarchy.americanize"); + } + + @Override + public int getWidth() { + return 78; + } + + @Override + public int getHeight() { + return 18; + } + + @Override + public IDrawable getIcon() { + return this.icon; + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, Recipe recipe, IFocusGroup focuses) { + builder.addSlot(RecipeIngredientRole.RENDER_ONLY, 1, 1) + .setStandardSlotBackground() + .addItemStacks(recipe.foods()); + builder.addSlot(RecipeIngredientRole.INPUT, 30, 1) + .setStandardSlotBackground() + .addItemStack(recipe.hfcs()); + builder.addSlot(RecipeIngredientRole.RENDER_ONLY, 59, 1) + .setStandardSlotBackground() + .addItemStacks(recipe.results()); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/compat/jei/AntarchyJeiPlugin.java b/common/src/main/java/com/craisinlord/antarchy/compat/jei/AntarchyJeiPlugin.java new file mode 100644 index 00000000..dbe6a041 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/compat/jei/AntarchyJeiPlugin.java @@ -0,0 +1,98 @@ +package com.craisinlord.antarchy.compat.jei; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AmericanizeRecipe; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.CustomBrewingRecipes; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; +import com.craisinlord.antarchy.content.item.GlimmerBottleItem; +import java.util.ArrayList; +import java.util.List; +import mezz.jei.api.IModPlugin; +import mezz.jei.api.JeiPlugin; +import mezz.jei.api.constants.RecipeTypes; +import mezz.jei.api.recipe.vanilla.IJeiBrewingRecipe; +import mezz.jei.api.recipe.vanilla.IVanillaRecipeFactory; +import mezz.jei.api.registration.IRecipeCategoryRegistration; +import mezz.jei.api.registration.IRecipeRegistration; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.util.Unit; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; + +@JeiPlugin +public class AntarchyJeiPlugin implements IModPlugin { + private static final ResourceLocation UID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jei_plugin"); + + @Override + public ResourceLocation getPluginUid() { + return UID; + } + + @Override + public void registerCategories(IRecipeCategoryRegistration registration) { + ItemStack hfcs = new ItemStack(CustomBrewingRecipes.highFructoseCornSyrupItem()); + registration.addRecipeCategories(new AmericanizeJeiRecipeCategory(registration.getJeiHelpers().getGuiHelper(), hfcs)); + } + + @Override + public void registerRecipes(IRecipeRegistration registration) { + IVanillaRecipeFactory factory = registration.getVanillaRecipeFactory(); + List recipes = new ArrayList<>(); + + recipes.add(factory.createBrewingRecipe( + List.of(new ItemStack(CustomBrewingRecipes.cornItem())), + CustomBrewingRecipes.waterBottleStack(), + new ItemStack(CustomBrewingRecipes.highFructoseCornSyrupItem()))); + + recipes.add(factory.createBrewingRecipe( + tagItems(CustomBrewingRecipes.rootsTag()), + new ItemStack(CustomBrewingRecipes.highFructoseCornSyrupItem()), + new ItemStack(CustomBrewingRecipes.rootBeerItem()))); + + ItemStack glimmerBottleInput = GlimmerBottleItem.create(GlimmerVariant.APPLE_COW); + recipes.add(factory.createBrewingRecipe(tagItems(AntarchyTags.Items.GLIMMER_AUGMENT_OURANWOOD_DEER), + glimmerBottleInput, GlimmerBottleItem.create(GlimmerVariant.OURANWOOD_DEER))); + recipes.add(factory.createBrewingRecipe(tagItems(AntarchyTags.Items.GLIMMER_AUGMENT_FROG), + glimmerBottleInput, GlimmerBottleItem.create(GlimmerVariant.FROG))); + recipes.add(factory.createBrewingRecipe(tagItems(AntarchyTags.Items.GLIMMER_AUGMENT_ANT), + glimmerBottleInput, GlimmerBottleItem.create(GlimmerVariant.ANT))); + recipes.add(factory.createBrewingRecipe(tagItems(AntarchyTags.Items.GLIMMER_AUGMENT_ELKA), + glimmerBottleInput, GlimmerBottleItem.create(GlimmerVariant.ELKA))); + + ItemStack glimmerBottleDeer = GlimmerBottleItem.create(GlimmerVariant.OURANWOOD_DEER); + recipes.add(factory.createBrewingRecipe(tagItems(AntarchyTags.Items.GLIMMER_AUGMENT_APPLE_COW), + glimmerBottleDeer, GlimmerBottleItem.create(GlimmerVariant.APPLE_COW))); + + registration.addRecipes(RecipeTypes.BREWING, recipes); + if (AntarchySettings.americanizingEnabled()) { + registration.addRecipes(AmericanizeJeiRecipeCategory.TYPE, List.of(americanizeDisplay())); + } + } + + private static AmericanizeJeiRecipeCategory.Recipe americanizeDisplay() { + List foods = new ArrayList<>(); + List results = new ArrayList<>(); + for (Item item : BuiltInRegistries.ITEM) { + ItemStack stack = new ItemStack(item); + if (AmericanizeRecipe.isEligibleFood(stack)) { + foods.add(stack); + ItemStack result = stack.copyWithCount(1); + result.set(AntarchyObjects.AMERICAN_COMPONENT.get(), Unit.INSTANCE); + results.add(result); + } + } + + ItemStack hfcs = new ItemStack(CustomBrewingRecipes.highFructoseCornSyrupItem()); + return new AmericanizeJeiRecipeCategory.Recipe(foods, hfcs, results); + } + + private static List tagItems(TagKey tag) { + return List.of(Ingredient.of(tag).getItems()); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index 1af8f10f..62426b0e 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -127,9 +127,19 @@ public final class AntarchySettings { private static double gravityGunBlastStrength = 1.4D; private static double gravityGunCooldownSeconds = 0.35D; private static double gravityGunMaxHoldDistance = 10.0D; + private static boolean minersDreamEnabled = true; + private static int minersDreamMinimumRange = 48; + private static int minersDreamMaximumRange = 96; + private static int minersDreamTorchSpacing = 10; + private static int minersDreamBlocksPerTick = 150; private static double lucidAttackRange = 9.0D; private static double lucidPearlInvertedDurationSeconds = 6.0D; private static int corneaEarNightVisionSeconds = 15; + private static boolean americanizingEnabled = true; + private static int americanBonusNutrition = 2; + private static double americanBonusSaturation = 1.0D; + private static int americanRegenerationDurationTicks = 60; + private static int americanRegenerationAmplifier = 0; private static int mogglesVisionRadius = 2; private static int mogglesVisionMaxLight = 7; private static float mogglesVisionAlpha = 0.35f; @@ -490,6 +500,7 @@ public final class AntarchySettings { private static double herculesBeetleHealth = 500.0D; private static double herculesBeetleAttackDamage = 30.0D; private static double herculesBeetleChargeDamage = 40.0D; + private static double ouranwoodDeerHealth = 20.0D; private static double glimmerHealth = 20.0D; private AntarchySettings() { @@ -947,6 +958,26 @@ public final class AntarchySettings { return gravityGunMaxHoldDistance; } + public static boolean minersDreamEnabled() { + return minersDreamEnabled; + } + + public static int minersDreamMinimumRange() { + return minersDreamMinimumRange; + } + + public static int minersDreamMaximumRange() { + return minersDreamMaximumRange; + } + + public static int minersDreamTorchSpacing() { + return minersDreamTorchSpacing; + } + + public static int minersDreamBlocksPerTick() { + return minersDreamBlocksPerTick; + } + public static void setDisableInfinityBookPortalCreation(boolean value) { disableInfinityBookPortalCreation = value; } @@ -1393,6 +1424,26 @@ public final class AntarchySettings { gravityGunMaxHoldDistance = value; } + public static void setMinersDreamEnabled(boolean value) { + minersDreamEnabled = value; + } + + public static void setMinersDreamMinimumRange(int value) { + minersDreamMinimumRange = value; + } + + public static void setMinersDreamMaximumRange(int value) { + minersDreamMaximumRange = value; + } + + public static void setMinersDreamTorchSpacing(int value) { + minersDreamTorchSpacing = value; + } + + public static void setMinersDreamBlocksPerTick(int value) { + minersDreamBlocksPerTick = value; + } + public static double lucidAttackRange() { return lucidAttackRange; } @@ -1417,6 +1468,46 @@ public final class AntarchySettings { corneaEarNightVisionSeconds = value; } + public static boolean americanizingEnabled() { + return americanizingEnabled; + } + + public static void setAmericanizingEnabled(boolean value) { + americanizingEnabled = value; + } + + public static int americanBonusNutrition() { + return americanBonusNutrition; + } + + public static void setAmericanBonusNutrition(int value) { + americanBonusNutrition = value; + } + + public static double americanBonusSaturation() { + return americanBonusSaturation; + } + + public static void setAmericanBonusSaturation(double value) { + americanBonusSaturation = value; + } + + public static int americanRegenerationDurationTicks() { + return americanRegenerationDurationTicks; + } + + public static void setAmericanRegenerationDurationTicks(int value) { + americanRegenerationDurationTicks = value; + } + + public static int americanRegenerationAmplifier() { + return americanRegenerationAmplifier; + } + + public static void setAmericanRegenerationAmplifier(int value) { + americanRegenerationAmplifier = value; + } + public static int mogglesVisionRadius() { return mogglesVisionRadius; } @@ -2548,6 +2639,8 @@ public final class AntarchySettings { public static double herculesBeetleChargeDamage() { return herculesBeetleChargeDamage; } public static void setHerculesBeetleChargeDamage(double v) { herculesBeetleChargeDamage = v; } public static void setDorrieHealth(double v) { dorrieHealth = v; } + public static double ouranwoodDeerHealth() { return ouranwoodDeerHealth; } + public static void setOuranwoodDeerHealth(double v) { ouranwoodDeerHealth = v; } public static double glimmerHealth() { return glimmerHealth; } public static void setGlimmerHealth(double v) { glimmerHealth = v; } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AmericanizeRecipe.java b/common/src/main/java/com/craisinlord/antarchy/content/AmericanizeRecipe.java new file mode 100644 index 00000000..f8cf9dfb --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/AmericanizeRecipe.java @@ -0,0 +1,114 @@ +package com.craisinlord.antarchy.content; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.NonNullList; +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Unit; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; +import net.minecraft.world.item.crafting.CraftingInput; +import net.minecraft.world.item.crafting.CustomRecipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; +import net.minecraft.world.level.Level; + +public class AmericanizeRecipe extends CustomRecipe { + private static final ResourceLocation HIGH_FRUCTOSE_CORN_SYRUP_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "high_fructose_corn_syrup"); + + public static final RecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>(AmericanizeRecipe::new); + + public AmericanizeRecipe(CraftingBookCategory category) { + super(category); + } + + @Override + public boolean matches(CraftingInput input, Level level) { + return findFood(input) != null; + } + + @Override + public ItemStack assemble(CraftingInput input, HolderLookup.Provider registries) { + ItemStack food = findFood(input); + if (food == null) { + return ItemStack.EMPTY; + } + + ItemStack result = food.copyWithCount(1); + result.set(AntarchyObjects.AMERICAN_COMPONENT.get(), Unit.INSTANCE); + return result; + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return width * height >= 2; + } + + @Override + public NonNullList getRemainingItems(CraftingInput input) { + NonNullList remaining = NonNullList.withSize(input.size(), ItemStack.EMPTY); + for (int i = 0; i < input.size(); i++) { + if (isHighFructoseCornSyrup(input.getItem(i))) { + remaining.set(i, new ItemStack(Items.GLASS_BOTTLE)); + } + } + return remaining; + } + + @Override + public RecipeSerializer getSerializer() { + return SERIALIZER; + } + + private static ItemStack findFood(CraftingInput input) { + ItemStack food = ItemStack.EMPTY; + ItemStack hfcs = ItemStack.EMPTY; + for (int i = 0; i < input.size(); i++) { + ItemStack stack = input.getItem(i); + if (stack.isEmpty()) { + continue; + } + + if (isHighFructoseCornSyrup(stack)) { + if (!hfcs.isEmpty()) { + return null; + } + hfcs = stack; + } else { + if (!food.isEmpty()) { + return null; + } + food = stack; + } + } + + if (food.isEmpty() || hfcs.isEmpty() || !isEligibleFood(food)) { + return null; + } + + return food; + } + + public static boolean isEligibleFood(ItemStack stack) { + if (!AntarchySettings.americanizingEnabled()) { + return false; + } + if (stack.isEmpty() || isHighFructoseCornSyrup(stack)) { + return false; + } + if (stack.has(AntarchyObjects.AMERICAN_COMPONENT.get())) { + return false; + } + if (stack.is(AntarchyTags.Items.HFCS_CANNOT_AMERICANIZE)) { + return false; + } + return stack.get(DataComponents.FOOD) != null; + } + + public static boolean isHighFructoseCornSyrup(ItemStack stack) { + return !stack.isEmpty() && stack.is(BuiltInRegistries.ITEM.get(HIGH_FRUCTOSE_CORN_SYRUP_ID)); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index 20caefd9..e660342a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -34,12 +34,14 @@ import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluid; public final class AntarchyObjects { private static final Supplier UNBOUND = () -> { @@ -99,9 +101,34 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> HERCULES_BEETLE = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier> GLIMMER = (Supplier>) UNBOUND; + public static Supplier> OURANWOOD_DEER = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier> GLIMMERS_GRACE = (Supplier>) UNBOUND; + public static Supplier> GLIMMER = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier SPIRIT_APPLE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> ELKA = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier PEACH = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CORN = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CORN_SEEDS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier WILD_CORN = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier RAW_VENISON = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier COOKED_VENISON = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier COOKED_CORNDOG = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier GLIMMER_BOTTLE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> GLIMMER_VARIANT_COMPONENT = + (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> DORRIE_INVENTORY_MENU = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier CHEEP_ITEM = (Supplier) UNBOUND; @SuppressWarnings("unchecked") @@ -205,6 +232,16 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> STINKY_EFFECT = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier LUMEN = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier FLOWING_LUMEN = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LUMEN_BUCKET = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LUMEN_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LUMEN_FROGLIGHT = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier OURANWOOD_ACORN_BLOCK = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier MOSSY_OURANWOOD_LOG = (Supplier) UNBOUND; @@ -223,6 +260,14 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier WASP_NEST = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier UMBRAL_MOSS_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier UMBRAL_MOSS_CARPET = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier BLUSH_MOSS_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier BLUSH_MOSS_CARPET = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier HUSHWEED = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier SQUIRREL_NEST_BLOCK = (Supplier) UNBOUND; @@ -240,6 +285,11 @@ public final class AntarchyObjects { public static Supplier STINKY_GAS = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier STINKY_FLY = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier PEACH_LEAVES_PARTICLE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> AMERICAN_COMPONENT = + (Supplier>) UNBOUND; private AntarchyObjects() { } @@ -319,6 +369,10 @@ public final class AntarchyObjects { Supplier ouranwoodAcornBlock, Supplier mossyOuranwoodLog, Supplier mossyOuranwoodWood, + Supplier umbralMossBlock, + Supplier umbralMossCarpet, + Supplier blushMossBlock, + Supplier blushMossCarpet, Supplier orangeMilkweed, Supplier pinkMilkweed, Supplier bedBugEggs, @@ -334,6 +388,7 @@ public final class AntarchyObjects { Supplier> hushweedBlockEntity, Supplier stinkyGas, Supplier stinkyFly, + Supplier peachLeaves, Supplier> doubleDamageChance, Supplier> bloodglassMaxHearts, Supplier> bloodglassWard @@ -412,6 +467,10 @@ public final class AntarchyObjects { OURANWOOD_ACORN_BLOCK = ouranwoodAcornBlock; MOSSY_OURANWOOD_LOG = mossyOuranwoodLog; MOSSY_OURANWOOD_WOOD = mossyOuranwoodWood; + UMBRAL_MOSS_BLOCK = umbralMossBlock; + UMBRAL_MOSS_CARPET = umbralMossCarpet; + BLUSH_MOSS_BLOCK = blushMossBlock; + BLUSH_MOSS_CARPET = blushMossCarpet; ORANGE_MILKWEED = orangeMilkweed; PINK_MILKWEED = pinkMilkweed; BED_BUG_EGG = bedBugEggs; @@ -427,6 +486,7 @@ public final class AntarchyObjects { HUSHWEED_BLOCK_ENTITY = hushweedBlockEntity; STINKY_GAS = stinkyGas; STINKY_FLY = stinkyFly; + PEACH_LEAVES_PARTICLE = peachLeaves; DOUBLE_DAMAGE_CHANCE = doubleDamageChance; BLOODGLASS_MAX_HEARTS = bloodglassMaxHearts; BLOODGLASS_WARD = bloodglassWard; @@ -444,12 +504,88 @@ public final class AntarchyObjects { HERCULES_BEETLE = supplier; } - public static void setGlimmer(Supplier> supplier) { + public static void setOuranwoodDeer(Supplier> supplier) { + OURANWOOD_DEER = supplier; + } + + public static void setGlimmer(Supplier> supplier) { GLIMMER = supplier; } - public static void setGlimmersGrace(Supplier> supplier) { - GLIMMERS_GRACE = supplier; + public static void setLumen(Supplier supplier) { + LUMEN = supplier; + } + + public static void setFlowingLumen(Supplier supplier) { + FLOWING_LUMEN = supplier; + } + + public static void setLumenBucket(Supplier supplier) { + LUMEN_BUCKET = supplier; + } + + public static void setLumenBlock(Supplier supplier) { + LUMEN_BLOCK = supplier; + } + + public static void setLumenFroglight(Supplier supplier) { + LUMEN_FROGLIGHT = supplier; + } + + public static void setSpiritApple(Supplier supplier) { + SPIRIT_APPLE = supplier; + } + + public static void setElka(Supplier> supplier) { + ELKA = supplier; + } + + public static void setPeach(Supplier supplier) { + PEACH = supplier; + } + + public static void setCorn(Supplier supplier) { + CORN = supplier; + } + + public static void setCornSeeds(Supplier supplier) { + CORN_SEEDS = supplier; + } + + public static void setWildCorn(Supplier supplier) { + WILD_CORN = supplier; + } + + public static void setRawVenison(Supplier supplier) { + RAW_VENISON = supplier; + } + + public static void setCookedVenison(Supplier supplier) { + COOKED_VENISON = supplier; + } + + public static void setCookedCorndog(Supplier supplier) { + COOKED_CORNDOG = supplier; + } + + public static void setGlimmerBottle(Supplier supplier) { + GLIMMER_BOTTLE = supplier; + } + + public static void setPeachLeavesParticle(Supplier supplier) { + PEACH_LEAVES_PARTICLE = supplier; + } + + public static void setGlimmerVariantComponent(Supplier> supplier) { + GLIMMER_VARIANT_COMPONENT = supplier; + } + + public static void setDorrieInventoryMenu(Supplier> supplier) { + DORRIE_INVENTORY_MENU = supplier; + } + + public static void setAmericanComponent(Supplier> supplier) { + AMERICAN_COMPONENT = supplier; } public static BlockBehaviour.Properties shellstoneProperties() { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index ae5cd781..ac89e719 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -10,6 +10,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.material.Fluid; public final class AntarchyTags { private AntarchyTags() { @@ -30,10 +31,12 @@ public final class AntarchyTags { public static final TagKey MOLEVORE_SEE_THROUGH_BLOCKS = TagKey.create(Registries.BLOCK, id("molevore_see_through_blocks")); public static final TagKey TERMITE_FOODS = TagKey.create(Registries.BLOCK, id("termite_foods")); public static final TagKey UMBRAL_MOSS_REPLACEABLE = TagKey.create(Registries.BLOCK, id("umbral_moss_replaceable")); + public static final TagKey BLUSH_MOSS_REPLACEABLE = TagKey.create(Registries.BLOCK, id("blush_moss_replaceable")); public static final TagKey HERCULES_BEETLE_CHARGE_IMMUNE_BLOCKS = TagKey.create(Registries.BLOCK, id("hercules_beetle_charge_immune_blocks")); public static final TagKey ELYTHIA_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("elythia_portal_frames")); public static final TagKey THORAXIS_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("thoraxis_portal_frames")); public static final TagKey CAVARYN_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("cavaryn_portal_frames")); + public static final TagKey MINERS_DREAM_CARVABLE = TagKey.create(Registries.BLOCK, id("miners_dream_carvable")); private Blocks() { } @@ -94,16 +97,30 @@ public final class AntarchyTags { public static final TagKey REVERIE_DUPLICATION_ITEMS = TagKey.create(Registries.ITEM, id("reverie_duplication_items")); public static final TagKey HERCULES_BEETLE_FOOD = TagKey.create(Registries.ITEM, id("hercules_beetle_food")); public static final TagKey ROLLY_POLLY_FOOD = TagKey.create(Registries.ITEM, id("rolly_polly_food")); - public static final TagKey GLIMMER_FOOD = TagKey.create(Registries.ITEM, id("glimmer_food")); + public static final TagKey OURANWOOD_DEER_FOOD = TagKey.create(Registries.ITEM, id("ouranwood_deer_food")); + public static final TagKey GLIMMER_AUGMENT_APPLE_COW = TagKey.create(Registries.ITEM, id("glimmer_augment_apple_cow")); + public static final TagKey GLIMMER_AUGMENT_OURANWOOD_DEER = TagKey.create(Registries.ITEM, id("glimmer_augment_ouranwood_deer")); + public static final TagKey GLIMMER_AUGMENT_FROG = TagKey.create(Registries.ITEM, id("glimmer_augment_frog")); + public static final TagKey GLIMMER_AUGMENT_ANT = TagKey.create(Registries.ITEM, id("glimmer_augment_ant")); + public static final TagKey GLIMMER_AUGMENT_ELKA = TagKey.create(Registries.ITEM, id("glimmer_augment_elka")); + public static final TagKey HFCS_CANNOT_AMERICANIZE = TagKey.create(Registries.ITEM, id("hfcs_cannot_americanize")); private Items() { } } + public static final class Fluids { + public static final TagKey LUMEN = TagKey.create(Registries.FLUID, id("lumen")); + + private Fluids() { + } + } + public static final class Biomes { public static final TagKey MANTIS_SPAWN_BIOMES = TagKey.create(Registries.BIOME, id("mantis_spawn_biomes")); public static final TagKey MANTIS_OVERWORLD_SPAWN_BIOMES = TagKey.create(Registries.BIOME, id("mantis_overworld_spawn_biomes")); public static final TagKey ELYTHIA_FIREFLY_PARTICLE_BIOMES = TagKey.create(Registries.BIOME, id("elythia_firefly_particle_biomes")); + public static final TagKey WILD_CORN_SPAWN_BIOMES = TagKey.create(Registries.BIOME, id("wild_corn_spawn_biomes")); private Biomes() { } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java b/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java new file mode 100644 index 00000000..b5e6464c --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java @@ -0,0 +1,315 @@ +package com.craisinlord.antarchy.content; + +import java.util.Comparator; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.item.Item; + +public final class CreativeTabOrder { + private CreativeTabOrder() {} + + public static final Comparator COMPARATOR = + Comparator.comparingInt(CreativeTabOrder::group) + .thenComparingInt(CreativeTabOrder::subOrder); + + public static int group(Item item) { + String path = BuiltInRegistries.ITEM.getKey(item).getPath(); + return switch (path) { + case "glimmer_bottle" -> -1; + case "ouranwood_log", "ouranwood_wood", "mossy_ouranwood_log", "mossy_ouranwood_wood", + "stripped_ouranwood_log", "stripped_ouranwood_wood", "duplicator_log", + "ouranwood_planks", "ouranwood_stairs", "ouranwood_slab", + "ouranwood_fence", "ouranwood_fence_gate", + "ouranwood_door", "ouranwood_trapdoor", + "ouranwood_pressure_plate", "ouranwood_button", + "ouranwood_sign", "ouranwood_hanging_sign", + "ouranwood_boat", "ouranwood_chest_boat", + "peach_log", "peach_wood", "stripped_peach_log", "stripped_peach_wood", + "peach_planks", "peach_stairs", "peach_slab", "peach_fence", "peach_fence_gate", + "peach_door", "peach_trapdoor", "peach_pressure_plate", "peach_button", + "peach_sign", "peach_hanging_sign", "peach_boat", "peach_chest_boat" -> 0; + case "nyxite", "polished_nyxite", "chiseled_nyxite", "nyxite_bricks", + "nyxite_stairs", "nyxite_slab", "nyxite_wall", + "polished_nyxite_stairs", "polished_nyxite_slab", "polished_nyxite_wall", + "nyxite_brick_stairs", "nyxite_brick_slab", "nyxite_brick_wall", + "pale_nyxite", "nyxite_spike", "potent_nyxite" -> 1; + case "shellstone", "polished_shellstone", "shellstone_bricks", "chiseled_shellstone", + "mossy_shellstone_bricks", "cracked_shellstone_bricks", + "shellstone_stairs", "shellstone_slab", "shellstone_wall", + "polished_shellstone_stairs", "polished_shellstone_slab", "polished_shellstone_wall", + "shellstone_brick_stairs", "shellstone_brick_slab", "shellstone_brick_wall", + "mossy_shellstone_brick_stairs", "mossy_shellstone_brick_slab", "mossy_shellstone_brick_wall" -> 2; + case "antimetal", "polished_antimetal" -> 3; + case "dream_sand", "dream_sandstone", "chiseled_dream_sandstone", + "cut_dream_sandstone", "smooth_dream_sandstone", + "dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall", + "smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab", + "cut_dream_sandstone_slab" -> 4; + case "umbral_moss_block", "umbral_moss_carpet", + "blush_moss_block", "blush_moss_carpet" -> 4; + case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", + "uranium_block", "titanium_block", + "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", + "cut_uranium_stairs", "cut_titanium_stairs", + "chiseled_uranium", "chiseled_titanium", + "uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor", + "uranium_bars", "titanium_bars", "uranium_bulb", "titanium_bulb" -> 6; + case "raw_uranium", "raw_titanium", "raw_uranium_scrap", "raw_titanium_scrap", + "raw_uranium_block", "raw_titanium_block" -> 7; + case "blood_crystal_block", "small_blood_crystal_bud", "medium_blood_crystal_bud", + "large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster", + "myrmite", "broodstone", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8; + case "ouranwood_leaves", "peach_leaves" -> 9; + case "duplicator_sapling", "ouranwood_acorn", "peach_sapling", "corn_seeds" -> 10; + case "orange_milkweed", "pink_milkweed", "hushweed", "amber_lichen", "creepvine", + "triffid_goo_block", "cloud_block", "wasp_nest", + "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest", "termite_nest" -> 11; + case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling", + "lumen_froglight", "roseate_froglight" -> 12; + case "antimetal_scaffolding" -> 13; + case "infested_rooted_dirt", "infested_coarse_dirt", "bed_bug_egg", + "creeping_horror_egg", "lurking_terror_egg" -> 14; + case "ultimate_pickaxe", "ultimate_axe", "ultimate_shovel", "ultimate_hoe", + "duct_tape", "diamond_minecart", "gravity_sculk_sensor", "miners_dream" -> 15; + case "bile_bucket", "ichor_bucket", "antiwater_bucket", "cloud_bucket", "lumen_bucket" -> 16; + case "moggles", "brutalfly_elytra", "fallen_king_crown", "jumpy_boots" -> 17; + case "battle_axe", "basilisk_dagger", "squidzooka", "shrink_ray", "growth_ray", + "gravity_gun", "water_cannon", "nightmare_sword", "lucid_pearl", "scorpion_whip", "blood_crystal_katana", + "big_bertha", "big_bertha_blade", "big_bertha_handle", "big_bertha_hilt", + "ultimate_sword", "ultimate_mace" -> 18; + case "primordial_helmet", "primordial_chestplate", + "primordial_leggings", "primordial_boots", + "blood_crystal_helmet", "blood_crystal_chestplate", + "blood_crystal_leggings", "blood_crystal_boots", + "nightmare_helmet", "nightmare_chestplate", + "nightmare_leggings", "nightmare_boots", + "ultimate_helmet", "ultimate_chestplate", + "ultimate_leggings", "ultimate_boots" -> 19; + case "ultimate_bow", "ultimate_crossbow" -> 20; + case "cloud_shark_fin_soup", "mud_pie", "rainbow_sugar", + "blood_crystal_apple", "spirit_apple", "peach", "raw_corndog", "cooked_corndog", + "raw_venison", "cooked_venison" -> 21; + case "blood_crystal_shard", "cloud_shark_fin", "basilisk_fang", "kraken_tooth", + "emperor_scorpion_stinger", "nightmare_scale", "molevore_nose", + "moleworm", "uranium_nugget", "titanium_nugget", + "uranium_ingot", "titanium_ingot", "lucid_eye", + "mantis_claw", "jumpy_bug_leg", "brutalfly_wing", "cornea_ear", + "primordial_scute", "triffid_goo", "vortex_eye", + "king_scale", "queen_scale", "chiten", "stink_bug", "corn", "high_fructose_corn_syrup" -> 22; + case "reverie_bottle", "root_beer" -> 24; + case "easter_bunny_spawn_egg", "flying_squirrel_spawn_egg", "caterpillar_spawn_egg", + "butterfly_spawn_egg", "reverie_spawn_egg", "brutalfly_spawn_egg", + "red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", "termite_spawn_egg", + "moleworm_spawn_egg", "mantis_spawn_egg", "alpha_mantis_spawn_egg", "rolly_polly_spawn_egg", + "molevore_spawn_egg", "triffid_spawn_egg", "apple_cow_spawn_egg", "golden_apple_cow_spawn_egg", + "enchanted_golden_apple_cow_spawn_egg", "dr_trayaurus_spawn_egg", "wasp_spawn_egg", + "bomber_spawn_egg", "jumpy_bug_spawn_egg", "stink_bug_spawn_egg", "cloud_shark_spawn_egg", + "kraken_spawn_egg", "missile_squid_spawn_egg", "octopus_bomb_spawn_egg", + "nightmare_spawn_egg", "bed_bug_spawn_egg", "lucid_spawn_egg", "scorpion_spawn_egg", + "basilisk_spawn_egg", "emperor_scorpion_spawn_egg", "toreterror_spawn_egg", + "dorrie_spawn_egg", "glimmer_spawn_egg", "ouranwood_deer_spawn_egg", "elka_spawn_egg", + "hercules_beetle_spawn_egg", "creeping_horror_spawn_egg", "lurking_terror_spawn_egg" -> 25; + default -> 99; + }; + } + + public static int subOrder(Item item) { + String path = BuiltInRegistries.ITEM.getKey(item).getPath(); + return switch (path) { + case "ouranwood_log" -> 0; + case "ouranwood_wood" -> 1; + case "mossy_ouranwood_log" -> 2; + case "mossy_ouranwood_wood" -> 3; + case "stripped_ouranwood_log" -> 4; + case "stripped_ouranwood_wood" -> 5; + case "duplicator_log" -> 6; + case "ouranwood_planks" -> 7; + case "ouranwood_stairs" -> 8; + case "ouranwood_slab" -> 9; + case "ouranwood_fence" -> 10; + case "ouranwood_fence_gate" -> 11; + case "ouranwood_door" -> 12; + case "ouranwood_trapdoor" -> 13; + case "ouranwood_pressure_plate" -> 14; + case "ouranwood_button" -> 15; + case "ouranwood_sign" -> 16; + case "ouranwood_hanging_sign" -> 17; + case "ouranwood_boat" -> 18; + case "ouranwood_chest_boat" -> 19; + case "peach_log" -> 20; + case "peach_wood" -> 21; + case "stripped_peach_log" -> 22; + case "stripped_peach_wood" -> 23; + case "peach_planks" -> 24; + case "peach_stairs" -> 25; + case "peach_slab" -> 26; + case "peach_fence" -> 27; + case "peach_fence_gate" -> 28; + case "peach_door" -> 29; + case "peach_trapdoor" -> 30; + case "peach_pressure_plate" -> 31; + case "peach_button" -> 32; + case "peach_sign" -> 33; + case "peach_hanging_sign" -> 34; + case "peach_boat" -> 35; + case "peach_chest_boat" -> 36; + case "ouranwood_leaves" -> 0; + case "peach_leaves" -> 1; + case "duplicator_sapling" -> 0; + case "ouranwood_acorn" -> 1; + case "peach_sapling" -> 2; + case "corn_seeds" -> 3; + case "orange_milkweed" -> 0; + case "pink_milkweed" -> 1; + case "hushweed" -> 2; + case "amber_lichen" -> 3; + case "creepvine" -> 4; + case "triffid_goo_block" -> 5; + case "cloud_block" -> 6; + case "wasp_nest" -> 7; + case "red_ant_nest" -> 8; + case "brown_ant_nest" -> 9; + case "rainbow_ant_nest" -> 10; + case "termite_nest" -> 11; + case "blood_crystal_block" -> 0; + case "small_blood_crystal_bud" -> 1; + case "medium_blood_crystal_bud" -> 2; + case "large_blood_crystal_bud" -> 3; + case "budding_blood_crystal" -> 4; + case "blood_crystal_cluster" -> 5; + case "myrmite" -> 6; + case "broodstone" -> 7; + case "chiten_block" -> 8; + case "chiten_spike" -> 9; + case "amber_moss_block" -> 10; + case "amber_moss_carpet" -> 11; + case "uranium_ore" -> 0; + case "deepslate_uranium_ore" -> 1; + case "titanium_ore" -> 2; + case "deepslate_titanium_ore" -> 3; + case "uranium_block" -> 4; + case "titanium_block" -> 5; + case "cut_uranium" -> 6; + case "cut_titanium" -> 7; + case "cut_uranium_slab" -> 8; + case "cut_titanium_slab" -> 9; + case "cut_uranium_stairs" -> 10; + case "cut_titanium_stairs" -> 11; + case "chiseled_uranium" -> 12; + case "chiseled_titanium" -> 13; + case "uranium_door" -> 14; + case "titanium_door" -> 15; + case "uranium_trapdoor" -> 16; + case "titanium_trapdoor" -> 17; + case "uranium_bars" -> 18; + case "titanium_bars" -> 19; + case "uranium_bulb" -> 20; + case "titanium_bulb" -> 21; + case "raw_uranium" -> 0; + case "raw_titanium" -> 1; + case "raw_uranium_scrap" -> 2; + case "raw_titanium_scrap" -> 3; + case "raw_uranium_block" -> 4; + case "raw_titanium_block" -> 5; + case "dream_torch" -> 0; + case "dream_lantern" -> 1; + case "dream_campfire" -> 2; + case "dream_fire" -> 3; + case "dream_fire_ceiling" -> 4; + case "lumen_froglight" -> 5; + case "roseate_froglight" -> 6; + case "infested_rooted_dirt" -> 0; + case "infested_coarse_dirt" -> 1; + case "bed_bug_egg" -> 2; + case "creeping_horror_egg" -> 3; + case "lurking_terror_egg" -> 4; + case "ultimate_pickaxe" -> 0; + case "ultimate_axe" -> 1; + case "ultimate_shovel" -> 2; + case "ultimate_hoe" -> 3; + case "duct_tape" -> 4; + case "diamond_minecart" -> 5; + case "gravity_sculk_sensor" -> 6; + case "miners_dream" -> 7; + case "bile_bucket" -> 0; + case "ichor_bucket" -> 1; + case "antiwater_bucket" -> 2; + case "cloud_bucket" -> 3; + case "lumen_bucket" -> 4; + case "moggles" -> 0; + case "brutalfly_elytra" -> 1; + case "fallen_king_crown" -> 2; + case "jumpy_boots" -> 3; + case "battle_axe" -> 0; + case "basilisk_dagger" -> 1; + case "squidzooka" -> 2; + case "shrink_ray" -> 3; + case "growth_ray" -> 4; + case "gravity_gun" -> 5; + case "water_cannon" -> 6; + case "nightmare_sword" -> 7; + case "lucid_pearl" -> 8; + case "scorpion_whip" -> 9; + case "blood_crystal_katana" -> 10; + case "big_bertha" -> 11; + case "big_bertha_blade" -> 12; + case "big_bertha_handle" -> 13; + case "big_bertha_hilt" -> 14; + case "ultimate_sword" -> 15; + case "ultimate_mace" -> 16; + case "primordial_helmet" -> 0; + case "primordial_chestplate" -> 1; + case "primordial_leggings" -> 2; + case "primordial_boots" -> 3; + case "blood_crystal_helmet" -> 4; + case "blood_crystal_chestplate" -> 5; + case "blood_crystal_leggings" -> 6; + case "blood_crystal_boots" -> 7; + case "nightmare_helmet" -> 8; + case "nightmare_chestplate" -> 9; + case "nightmare_leggings" -> 10; + case "nightmare_boots" -> 11; + case "ultimate_helmet" -> 12; + case "ultimate_chestplate" -> 13; + case "ultimate_leggings" -> 14; + case "ultimate_boots" -> 15; + case "ultimate_bow" -> 0; + case "ultimate_crossbow" -> 1; + case "blood_crystal_apple" -> 0; + case "spirit_apple" -> 1; + case "peach" -> 2; + case "raw_corndog" -> 3; + case "cooked_corndog" -> 4; + case "raw_venison" -> 5; + case "cooked_venison" -> 6; + case "reverie_bottle" -> 0; + case "root_beer" -> 1; + case "blood_crystal_shard" -> 0; + case "cloud_shark_fin" -> 1; + case "basilisk_fang" -> 2; + case "kraken_tooth" -> 3; + case "emperor_scorpion_stinger" -> 4; + case "nightmare_scale" -> 5; + case "molevore_nose" -> 6; + case "moleworm" -> 7; + case "uranium_nugget" -> 8; + case "titanium_nugget" -> 9; + case "uranium_ingot" -> 10; + case "titanium_ingot" -> 11; + case "lucid_eye" -> 12; + case "mantis_claw" -> 13; + case "jumpy_bug_leg" -> 14; + case "brutalfly_wing" -> 15; + case "cornea_ear" -> 16; + case "primordial_scute" -> 17; + case "triffid_goo" -> 18; + case "vortex_eye" -> 19; + case "king_scale" -> 20; + case "queen_scale" -> 21; + case "chiten" -> 22; + case "stink_bug" -> 23; + case "corn" -> 24; + case "high_fructose_corn_syrup" -> 25; + default -> 0; + }; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/CustomBrewingRecipes.java b/common/src/main/java/com/craisinlord/antarchy/content/CustomBrewingRecipes.java new file mode 100644 index 00000000..8f4ea530 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/CustomBrewingRecipes.java @@ -0,0 +1,119 @@ +package com.craisinlord.antarchy.content; + +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; +import com.craisinlord.antarchy.content.item.GlimmerBottleItem; +import net.minecraft.core.Holder; +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.item.alchemy.Potions; + +public final class CustomBrewingRecipes { + private static final ResourceLocation CORN_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "corn"); + private static final ResourceLocation HIGH_FRUCTOSE_CORN_SYRUP_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "high_fructose_corn_syrup"); + private static final ResourceLocation ROOT_BEER_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "root_beer"); + private static final TagKey ROOTS = TagKey.create(net.minecraft.core.registries.Registries.ITEM, ResourceLocation.fromNamespaceAndPath("antarchy", "roots")); + + private CustomBrewingRecipes() { + } + + public static boolean hasMix(ItemStack input, ItemStack ingredient) { + return !getOutput(input, ingredient).isEmpty(); + } + + public static ItemStack getOutput(ItemStack input, ItemStack ingredient) { + if (input.isEmpty() || ingredient.isEmpty()) { + return ItemStack.EMPTY; + } + + if (matchesCornToSyrup(input, ingredient) || matchesCornToSyrup(ingredient, input)) { + return new ItemStack(highFructoseCornSyrupItem()); + } + + if (matchesSyrupToRootBeer(input, ingredient) || matchesSyrupToRootBeer(ingredient, input)) { + return new ItemStack(rootBeerItem()); + } + + ItemStack glimmerAugment = getGlimmerAugmentOutput(input, ingredient); + if (!glimmerAugment.isEmpty()) { + return glimmerAugment; + } + + return ItemStack.EMPTY; + } + + private static ItemStack getGlimmerAugmentOutput(ItemStack input, ItemStack ingredient) { + if (!input.is(AntarchyObjects.GLIMMER_BOTTLE.get())) { + return ItemStack.EMPTY; + } + + GlimmerVariant target = glimmerAugmentTarget(ingredient); + if (target == null || target == GlimmerBottleItem.getVariant(input)) { + return ItemStack.EMPTY; + } + + return GlimmerBottleItem.create(target); + } + + private static GlimmerVariant glimmerAugmentTarget(ItemStack ingredient) { + if (ingredient.is(AntarchyTags.Items.GLIMMER_AUGMENT_APPLE_COW)) { + return GlimmerVariant.APPLE_COW; + } + if (ingredient.is(AntarchyTags.Items.GLIMMER_AUGMENT_OURANWOOD_DEER)) { + return GlimmerVariant.OURANWOOD_DEER; + } + if (ingredient.is(AntarchyTags.Items.GLIMMER_AUGMENT_FROG)) { + return GlimmerVariant.FROG; + } + if (ingredient.is(AntarchyTags.Items.GLIMMER_AUGMENT_ANT)) { + return GlimmerVariant.ANT; + } + if (ingredient.is(AntarchyTags.Items.GLIMMER_AUGMENT_ELKA)) { + return GlimmerVariant.ELKA; + } + return null; + } + + private static boolean matchesCornToSyrup(ItemStack base, ItemStack ingredient) { + return isWaterBottle(base) && ingredient.is(cornItem()); + } + + private static boolean matchesSyrupToRootBeer(ItemStack base, ItemStack ingredient) { + return base.is(highFructoseCornSyrupItem()) && ingredient.is(ROOTS); + } + + private static boolean isWaterBottle(ItemStack stack) { + if (!stack.is(Items.POTION)) { + return false; + } + PotionContents contents = stack.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY); + return contents.is(Potions.WATER); + } + + public static Item cornItem() { + return BuiltInRegistries.ITEM.get(CORN_ID); + } + + public static Item highFructoseCornSyrupItem() { + return BuiltInRegistries.ITEM.get(HIGH_FRUCTOSE_CORN_SYRUP_ID); + } + + public static Item rootBeerItem() { + return BuiltInRegistries.ITEM.get(ROOT_BEER_ID); + } + + public static TagKey rootsTag() { + return ROOTS; + } + + public static ItemStack waterBottleStack() { + ItemStack stack = new ItemStack(Items.POTION); + stack.set(DataComponents.POTION_CONTENTS, new PotionContents(Potions.WATER)); + return stack; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushBlock.java deleted file mode 100644 index 8d4264e8..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushBlock.java +++ /dev/null @@ -1,291 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import com.craisinlord.antarchy.Antarchy; -import com.mojang.serialization.MapCodec; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.BonemealableBlock; -import net.minecraft.world.level.block.BushBlock; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.DirectionProperty; -import net.minecraft.world.level.block.state.properties.IntegerProperty; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * Multiblock bush grown with bonemeal. The origin block carries the - * loot/age; the rest of the footprint is filled with invisible - * {@link BigBushPartBlock}s. - * - * age 0: single block (1x1x1) - * age 1: 2x2x2 footprint; FACING + FACING.getClockWise() pick the horizontal quadrant - * age 2: 3x3x3 footprint centered on the origin column - * - * Grown stages require a sturdy support block under every column of their - * footprint. Growing from 2x2 to 3x3 may relocate the origin to any of the four - * occupied columns to find room. - */ -public class BigBushBlock extends BushBlock implements BonemealableBlock { - public static final MapCodec CODEC = Block.simpleCodec(BigBushBlock::new); - - public static final IntegerProperty AGE = BlockStateProperties.AGE_2; - public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; - - private static final VoxelShape SMALL_SHAPE = Block.box(2.0, 0.0, 2.0, 14.0, 13.0, 14.0); - - public BigBushBlock(BlockBehaviour.Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition.any() - .setValue(AGE, 0) - .setValue(FACING, Direction.EAST)); - } - - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(AGE, FACING); - } - - @Override - protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return state.getValue(AGE) == 0 ? SMALL_SHAPE : Shapes.block(); - } - - /** All part positions belonging to a bush with the given origin state/pos */ - public static List partPositions(BlockState state, BlockPos origin) { - List positions = new ArrayList<>(); - int age = state.getValue(AGE); - if (age == 1) { - Direction forward = state.getValue(FACING); - Direction side = forward.getClockWise(); - for (int dy = 0; dy <= 1; dy++) { - for (BlockPos column : new BlockPos[]{ - origin, origin.relative(forward), origin.relative(side), origin.relative(forward).relative(side)}) { - BlockPos pos = column.above(dy); - if (!pos.equals(origin)) { - positions.add(pos); - } - } - } - } else if (age == 2) { - for (int dx = -1; dx <= 1; dx++) { - for (int dy = 0; dy <= 2; dy++) { - for (int dz = -1; dz <= 1; dz++) { - if (dx == 0 && dy == 0 && dz == 0) { - continue; - } - positions.add(origin.offset(dx, dy, dz)); - } - } - } - } - return positions; - } - - /** Ground columns of the footprint, each needs a sturdy block below it. */ - public static List supportColumns(BlockState state, BlockPos origin) { - List columns = new ArrayList<>(); - int age = state.getValue(AGE); - if (age == 1) { - Direction forward = state.getValue(FACING); - Direction side = forward.getClockWise(); - columns.add(origin); - columns.add(origin.relative(forward)); - columns.add(origin.relative(side)); - columns.add(origin.relative(forward).relative(side)); - } else if (age == 2) { - for (int dx = -1; dx <= 1; dx++) { - for (int dz = -1; dz <= 1; dz++) { - columns.add(origin.offset(dx, 0, dz)); - } - } - } else { - columns.add(origin); - } - return columns; - } - - public static boolean hasFullSupport(BlockState state, LevelReader level, BlockPos origin) { - for (BlockPos column : supportColumns(state, origin)) { - BlockPos below = column.below(); - if (!level.getBlockState(below).isFaceSturdy(level, below, Direction.UP)) { - return false; - } - } - return true; - } - - @Override - protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { - if (state.getValue(AGE) == 0) { - return super.canSurvive(state, level, pos); - } - return hasFullSupport(state, level, pos); - } - - private static Block partBlock() { - return BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "big_bush_part")); - } - - private record GrowthTarget(BlockPos origin, BlockState state) {} - - @Nullable - private GrowthTarget findGrowthTarget(LevelReader level, BlockPos pos, BlockState state, RandomSource random) { - int age = state.getValue(AGE); - if (age == 0) { - List facings = new ArrayList<>(Direction.Plane.HORIZONTAL.stream().toList()); - for (int i = facings.size() - 1; i > 0; i--) { - Direction swap = facings.set(random.nextInt(i + 1), facings.get(i)); - facings.set(i, swap); - } - for (Direction facing : facings) { - BlockState grown = state.setValue(AGE, 1).setValue(FACING, facing); - if (canGrowTo(level, pos, grown, Set.of(pos))) { - return new GrowthTarget(pos, grown); - } - } - return null; - } - if (age == 1) { - Direction forward = state.getValue(FACING); - Direction side = forward.getClockWise(); - Set owned = new HashSet<>(partPositions(state, pos)); - owned.add(pos); - BlockState grown = state.setValue(AGE, 2); - // Any of the four occupied columns can become the new center of the 3x3. - for (BlockPos candidate : new BlockPos[]{ - pos, pos.relative(forward).relative(side), pos.relative(forward), pos.relative(side)}) { - if (canGrowTo(level, candidate, grown, owned)) { - return new GrowthTarget(candidate, grown); - } - } - } - return null; - } - - private boolean canGrowTo(LevelReader level, BlockPos newOrigin, BlockState grownState, Set owned) { - if (!hasFullSupport(grownState, level, newOrigin)) { - return false; - } - List positions = new ArrayList<>(partPositions(grownState, newOrigin)); - positions.add(newOrigin); - for (BlockPos pos : positions) { - if (owned.contains(pos)) { - continue; - } - if (!level.getBlockState(pos).canBeReplaced()) { - return false; - } - } - return true; - } - - public static void placeBushBlocks(LevelAccessor level, BlockPos origin, BlockState grownState, int flags) { - level.setBlock(origin, grownState, flags); - Block part = partBlock(); - BlockPos capPos = grownState.getValue(AGE) == 2 ? origin.above(2) : null; - for (BlockPos pos : partPositions(grownState, origin)) { - level.setBlock(pos, part.defaultBlockState() - .setValue(BigBushPartBlock.CAP, pos.equals(capPos)), flags); - } - } - - private void placeStage(ServerLevel level, BlockPos origin, BlockState grownState) { - placeBushBlocks(level, origin, grownState, 3); - } - - @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - if (!state.is(newState.getBlock())) { - for (BlockPos partPos : partPositions(state, pos)) { - if (level.getBlockState(partPos).getBlock() instanceof BigBushPartBlock) { - level.setBlock(partPos, Blocks.AIR.defaultBlockState(), 35); - } - } - } - super.onRemove(state, level, pos, newState, movedByPiston); - } - - @Override - public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { - return state.getValue(AGE) < 2; - } - - @Override - public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { - return findGrowthTarget(level, pos, state, random) != null; - } - - @Override - public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { - GrowthTarget target = findGrowthTarget(level, pos, state, random); - if (target == null) { - return; - } - if (!target.origin().equals(pos)) { - level.removeBlock(pos, false); - } - placeStage(level, target.origin(), target.state()); - } - - /** Pops a bonus item when bone meal is used on a fully-grown (age 2) bush; shared with {@link BigBushPartBlock}. */ - public static boolean grantBonemealBonus(Level level, BlockPos originPos, BlockState originState, Player player, ItemStack stack) { - if (!(originState.getBlock() instanceof BigBushBlock bigBush) || originState.getValue(AGE) != 2) { - return false; - } - if (!level.isClientSide) { - bigBush.popResource(level, originPos, new ItemStack(bigBush, 1)); - if (!player.getAbilities().instabuild) { - stack.shrink(1); - } - level.levelEvent(1505, originPos, 15); - } - return true; - } - - @Override - protected ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - if (stack.is(Items.BONE_MEAL) && grantBonemealBonus(level, pos, state, player, stack)) { - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - return super.useItemOn(stack, state, level, pos, player, hand, hitResult); - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushPartBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushPartBlock.java deleted file mode 100644 index 56a0731e..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushPartBlock.java +++ /dev/null @@ -1,177 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import com.mojang.serialization.MapCodec; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.BonemealableBlock; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; - -/** - * Invisible filler block for the grown {@link BigBushBlock} footprint. Breaking a - * part destroys the whole bush (drops come from the origin's loot table). The one - * part directly two above the origin of a stage-3 bush renders the top slice of - * the oversized cross model - */ -public class BigBushPartBlock extends Block implements BonemealableBlock { - public static final MapCodec CODEC = Block.simpleCodec(BigBushPartBlock::new); - - public static final BooleanProperty CAP = BooleanProperty.create("cap"); - - public BigBushPartBlock(BlockBehaviour.Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition.any().setValue(CAP, false)); - } - - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(CAP); - } - - @Override - protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return Shapes.block(); - } - - /** Finds the origin bush this part belongs to, or null if orphaned. */ - @Nullable - public static BlockPos findOrigin(LevelReader level, BlockPos partPos) { - for (int dx = -1; dx <= 1; dx++) { - for (int dy = -2; dy <= 0; dy++) { - for (int dz = -1; dz <= 1; dz++) { - if (dx == 0 && dy == 0 && dz == 0) { - continue; - } - BlockPos candidate = partPos.offset(dx, dy, dz); - BlockState state = level.getBlockState(candidate); - if (state.getBlock() instanceof BigBushBlock - && BigBushBlock.partPositions(state, candidate).contains(partPos)) { - return candidate; - } - } - } - } - return null; - } - - @Override - public BlockState playerWillDestroy(Level level, BlockPos pos, BlockState state, Player player) { - if (!level.isClientSide) { - BlockPos origin = findOrigin(level, pos); - if (origin != null) { - BlockState originState = level.getBlockState(origin); - if (!player.getAbilities().instabuild) { - Block.dropResources(originState, level, origin, null, player, player.getMainHandItem()); - } - level.destroyBlock(origin, false); - } - } - return super.playerWillDestroy(level, pos, state, player); - } - - @Override - protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { - if (!state.is(newState.getBlock()) && !level.isClientSide) { - BlockPos origin = findOrigin(level, pos); - if (origin != null) { - level.destroyBlock(origin, true); - } - } - super.onRemove(state, level, pos, newState, movedByPiston); - } - - @Override - protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, - LevelAccessor level, BlockPos pos, BlockPos neighborPos) { - level.scheduleTick(pos, this, 1); - return super.updateShape(state, direction, neighborState, level, pos, neighborPos); - } - - @Override - protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - BlockPos origin = findOrigin(level, pos); - if (origin == null) { - level.removeBlock(pos, false); - return; - } - BlockState originState = level.getBlockState(origin); - if (!originState.canSurvive(level, origin)) { - level.destroyBlock(origin, true); - } - } - - /** Bonemeal applied to any part of a growing bush grows the whole thing, same as clicking the origin. */ - @Override - public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { - BlockPos origin = findOrigin(level, pos); - return origin != null && level.getBlockState(origin).getBlock() instanceof BigBushBlock bigBush - && bigBush.isValidBonemealTarget(level, origin, level.getBlockState(origin)); - } - - @Override - public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { - BlockPos origin = findOrigin(level, pos); - return origin != null && level.getBlockState(origin).getBlock() instanceof BigBushBlock bigBush - && bigBush.isBonemealSuccess(level, random, origin, level.getBlockState(origin)); - } - - @Override - public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { - BlockPos origin = findOrigin(level, pos); - if (origin != null && level.getBlockState(origin).getBlock() instanceof BigBushBlock bigBush) { - bigBush.performBonemeal(level, random, origin, level.getBlockState(origin)); - } - } - - @Override - protected ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - if (stack.is(Items.BONE_MEAL)) { - BlockPos origin = findOrigin(level, pos); - if (origin != null && BigBushBlock.grantBonemealBonus(level, origin, level.getBlockState(origin), player, stack)) { - return ItemInteractionResult.sidedSuccess(level.isClientSide); - } - } - return super.useItemOn(stack, state, level, pos, player, hand, hitResult); - } - - @Override - public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state) { - BlockPos origin = findOrigin(level, pos); - if (origin != null) { - return new ItemStack(level.getBlockState(origin).getBlock()); - } - return ItemStack.EMPTY; - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossBlock.java new file mode 100644 index 00000000..03ac77bc --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossBlock.java @@ -0,0 +1,53 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +public class BlushMossBlock extends Block implements BonemealableBlock { + public static final MapCodec CODEC = Block.simpleCodec(BlushMossBlock::new); + private static final ResourceKey> BLUSH_MOSS_PATCH_BONEMEAL = ResourceKey.create( + Registries.CONFIGURED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blush_moss_patch_bonemeal") + ); + + public BlushMossBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + return level.getBlockState(pos.above()).isAir(); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + Holder.Reference> feature = level.registryAccess() + .lookupOrThrow(Registries.CONFIGURED_FEATURE) + .getOrThrow(BLUSH_MOSS_PATCH_BONEMEAL); + feature.value().place(level, level.getChunkSource().getGenerator(), random, pos); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossCarpetBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossCarpetBlock.java new file mode 100644 index 00000000..17dd3464 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/BlushMossCarpetBlock.java @@ -0,0 +1,136 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +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.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.WallSide; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class BlushMossCarpetBlock extends Block { + public static final MapCodec CODEC = Block.simpleCodec(BlushMossCarpetBlock::new); + public static final BooleanProperty BOTTOM = BlockStateProperties.BOTTOM; + public static final net.minecraft.world.level.block.state.properties.EnumProperty NORTH_WALL = BlockStateProperties.NORTH_WALL; + public static final net.minecraft.world.level.block.state.properties.EnumProperty EAST_WALL = BlockStateProperties.EAST_WALL; + public static final net.minecraft.world.level.block.state.properties.EnumProperty SOUTH_WALL = BlockStateProperties.SOUTH_WALL; + public static final net.minecraft.world.level.block.state.properties.EnumProperty WEST_WALL = BlockStateProperties.WEST_WALL; + + private static final VoxelShape FLOOR_SHAPE = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D); + private static final VoxelShape NORTH_LOW = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 6.0D, 1.0D); + private static final VoxelShape NORTH_TALL = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 1.0D); + private static final VoxelShape EAST_LOW = Block.box(15.0D, 0.0D, 0.0D, 16.0D, 6.0D, 16.0D); + private static final VoxelShape EAST_TALL = Block.box(15.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D); + private static final VoxelShape SOUTH_LOW = Block.box(0.0D, 0.0D, 15.0D, 16.0D, 6.0D, 16.0D); + private static final VoxelShape SOUTH_TALL = Block.box(0.0D, 0.0D, 15.0D, 16.0D, 16.0D, 16.0D); + private static final VoxelShape WEST_LOW = Block.box(0.0D, 0.0D, 0.0D, 1.0D, 6.0D, 16.0D); + private static final VoxelShape WEST_TALL = Block.box(0.0D, 0.0D, 0.0D, 1.0D, 16.0D, 16.0D); + + public BlushMossCarpetBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(BOTTOM, true) + .setValue(NORTH_WALL, WallSide.NONE) + .setValue(EAST_WALL, WallSide.NONE) + .setValue(SOUTH_WALL, WallSide.NONE) + .setValue(WEST_WALL, WallSide.NONE)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(BOTTOM, NORTH_WALL, EAST_WALL, SOUTH_WALL, WEST_WALL); + } + + @Override + public BlockState getStateForPlacement(net.minecraft.world.item.context.BlockPlaceContext context) { + BlockPos pos = context.getClickedPos(); + Direction face = context.getClickedFace(); + BlockState state = this.defaultBlockState() + .setValue(BOTTOM, face == Direction.UP) + .setValue(NORTH_WALL, WallSide.NONE) + .setValue(EAST_WALL, WallSide.NONE) + .setValue(SOUTH_WALL, WallSide.NONE) + .setValue(WEST_WALL, WallSide.NONE); + if (!state.getValue(BOTTOM)) { + state = switch (face) { + case NORTH -> state.setValue(NORTH_WALL, WallSide.TALL); + case EAST -> state.setValue(EAST_WALL, WallSide.TALL); + case SOUTH -> state.setValue(SOUTH_WALL, WallSide.TALL); + case WEST -> state.setValue(WEST_WALL, WallSide.TALL); + default -> state; + }; + } + return state; + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + if (state.getValue(BOTTOM)) { + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + if (supportsWall(level, pos, Direction.NORTH, state.getValue(NORTH_WALL))) { + return true; + } + if (supportsWall(level, pos, Direction.EAST, state.getValue(EAST_WALL))) { + return true; + } + if (supportsWall(level, pos, Direction.SOUTH, state.getValue(SOUTH_WALL))) { + return true; + } + if (supportsWall(level, pos, Direction.WEST, state.getValue(WEST_WALL))) { + return true; + } + + return level.getBlockState(pos.above()).isFaceSturdy(level, pos.above(), Direction.DOWN); + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + return state.canSurvive(level, pos) ? state : net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + if (state.getValue(BOTTOM)) { + return FLOOR_SHAPE; + } + + VoxelShape shape = Shapes.empty(); + shape = combine(shape, state.getValue(NORTH_WALL), NORTH_LOW, NORTH_TALL); + shape = combine(shape, state.getValue(EAST_WALL), EAST_LOW, EAST_TALL); + shape = combine(shape, state.getValue(SOUTH_WALL), SOUTH_LOW, SOUTH_TALL); + shape = combine(shape, state.getValue(WEST_WALL), WEST_LOW, WEST_TALL); + return shape.isEmpty() ? FLOOR_SHAPE : shape; + } + + private static boolean supportsWall(LevelReader level, BlockPos pos, Direction direction, WallSide side) { + if (side == WallSide.NONE) { + return false; + } + BlockPos supportPos = pos.relative(direction); + return level.getBlockState(supportPos).isFaceSturdy(level, supportPos, direction.getOpposite()); + } + + private static VoxelShape combine(VoxelShape current, WallSide side, VoxelShape lowShape, VoxelShape tallShape) { + if (side == WallSide.NONE) { + return current; + } + return Shapes.or(current, side == WallSide.TALL ? tallShape : lowShape); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/CornCropBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/CornCropBlock.java new file mode 100644 index 00000000..b5d5cbe4 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/CornCropBlock.java @@ -0,0 +1,179 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.BushBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class CornCropBlock extends BushBlock implements BonemealableBlock { + public static final MapCodec CODEC = Block.simpleCodec(CornCropBlock::new); + public static final IntegerProperty AGE = BlockStateProperties.AGE_3; + public static final EnumProperty HALF = BlockStateProperties.DOUBLE_BLOCK_HALF; + private static final int MAX_AGE = 3; + private static final int TALL_AGE = 2; + private static final VoxelShape[] LOWER_SHAPES = new VoxelShape[] { + Block.box(4.0D, 0.0D, 4.0D, 12.0D, 6.0D, 12.0D), + Block.box(3.0D, 0.0D, 3.0D, 13.0D, 11.0D, 13.0D), + Block.box(2.0D, 0.0D, 2.0D, 14.0D, 14.0D, 14.0D), + Block.box(1.0D, 0.0D, 1.0D, 15.0D, 16.0D, 15.0D) + }; + private static final VoxelShape[] UPPER_SHAPES = new VoxelShape[] { + Block.box(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D), + Block.box(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D), + Block.box(2.0D, 0.0D, 2.0D, 14.0D, 16.0D, 14.0D), + Block.box(1.0D, 0.0D, 1.0D, 15.0D, 16.0D, 15.0D) + }; + private static final ResourceLocation CORN_SEEDS_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "corn_seeds"); + + public CornCropBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(AGE, 0).setValue(HALF, DoubleBlockHalf.LOWER)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + int age = state.getValue(AGE); + return state.getValue(HALF) == DoubleBlockHalf.UPPER ? UPPER_SHAPES[age] : LOWER_SHAPES[age]; + } + + @Override + protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(Blocks.FARMLAND); + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + DoubleBlockHalf half = state.getValue(HALF); + int age = state.getValue(AGE); + if (half == DoubleBlockHalf.UPPER) { + BlockState below = level.getBlockState(pos.below()); + return below.is(this) && below.getValue(HALF) == DoubleBlockHalf.LOWER && below.getValue(AGE) >= TALL_AGE; + } + + if (!super.canSurvive(state, level, pos)) { + return false; + } + + return age < TALL_AGE || level.getBlockState(pos.above()).is(this) + && level.getBlockState(pos.above()).getValue(HALF) == DoubleBlockHalf.UPPER + && level.getBlockState(pos.above()).getValue(AGE) == age; + } + + @Override + protected BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + if (!state.canSurvive(level, pos)) { + return Blocks.AIR.defaultBlockState(); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + protected boolean isRandomlyTicking(BlockState state) { + return state.getValue(HALF) == DoubleBlockHalf.LOWER && state.getValue(AGE) < MAX_AGE; + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (level.getRawBrightness(pos, 0) < 9 || random.nextInt(5) != 0) { + return; + } + + this.grow(level, pos, state); + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + BlockPos lowerPos = state.getValue(HALF) == DoubleBlockHalf.UPPER ? pos.below() : pos; + BlockState lowerState = level.getBlockState(lowerPos); + if (!lowerState.is(this) || lowerState.getValue(HALF) != DoubleBlockHalf.LOWER) { + return false; + } + + int age = lowerState.getValue(AGE); + return age < MAX_AGE && (age >= TALL_AGE || level.getBlockState(lowerPos.above()).canBeReplaced()); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + BlockPos lowerPos = state.getValue(HALF) == DoubleBlockHalf.UPPER ? pos.below() : pos; + BlockState lowerState = level.getBlockState(lowerPos); + if (lowerState.is(this)) { + this.grow(level, lowerPos, lowerState); + } + } + + private void grow(ServerLevel level, BlockPos lowerPos, BlockState lowerState) { + int age = lowerState.getValue(AGE); + if (age >= MAX_AGE) { + return; + } + + if (age + 1 >= TALL_AGE) { + BlockPos upperPos = lowerPos.above(); + if (!level.getBlockState(upperPos).canBeReplaced() && !level.getBlockState(upperPos).is(this)) { + return; + } + } + + int newAge = age + 1; + level.setBlock(lowerPos, lowerState.setValue(AGE, newAge), Block.UPDATE_ALL); + if (newAge >= TALL_AGE) { + level.setBlock(lowerPos.above(), this.defaultBlockState().setValue(HALF, DoubleBlockHalf.UPPER).setValue(AGE, newAge), Block.UPDATE_ALL); + } + } + + @Override + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state) { + return new ItemStack(this.getBaseSeedId()); + } + + protected ItemLike getBaseSeedId() { + Optional item = BuiltInRegistries.ITEM.getOptional(CORN_SEEDS_ID); + return item.orElse(Blocks.AIR.asItem()); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(AGE, HALF); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/HangingPeachBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/HangingPeachBlock.java new file mode 100644 index 00000000..6eead20a --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/HangingPeachBlock.java @@ -0,0 +1,70 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BushBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class HangingPeachBlock extends BushBlock { + public static final MapCodec CODEC = Block.simpleCodec(HangingPeachBlock::new); + private static final ResourceLocation PEACH_LEAVES_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_leaves"); + private static final ResourceLocation PEACH_ITEM_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach"); + private static final VoxelShape SHAPE = Block.box(4.0D, 2.0D, 4.0D, 12.0D, 16.0D, 12.0D); + + public HangingPeachBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } + + @Override + protected VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.empty(); + } + + @Override + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state) { + return new ItemStack(BuiltInRegistries.ITEM.getOptional(PEACH_ITEM_ID).orElse(Blocks.AIR.asItem())); + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + BlockState above = level.getBlockState(pos.above()); + return above.is(BuiltInRegistries.BLOCK.getOptional(PEACH_LEAVES_ID).orElse(Blocks.AIR)); + } + + @Override + protected BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVineBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVineBlock.java deleted file mode 100644 index a8c023c9..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVineBlock.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import com.mojang.serialization.MapCodec; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.WeepingVinesBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; - -@SuppressWarnings({"rawtypes", "unchecked"}) -public class OuranwoodVineBlock extends WeepingVinesBlock { - public static final MapCodec CODEC = simpleCodec(OuranwoodVineBlock::new); - private static Block bodyBlock; - - public OuranwoodVineBlock(BlockBehaviour.Properties properties) { - super(properties); - } - - @Override - public MapCodec codec() { - return (MapCodec) CODEC; - } - - @Override - protected Block getBodyBlock() { - return bodyBlock; - } - - @Override - protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return Shapes.block(); - } - - public static void bindBodyBlock(Block block) { - bodyBlock = block; - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVinePlantBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVinePlantBlock.java deleted file mode 100644 index 4d663c0b..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVinePlantBlock.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import com.mojang.serialization.MapCodec; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.block.GrowingPlantHeadBlock; -import net.minecraft.world.level.block.WeepingVinesBlock; -import net.minecraft.world.level.block.WeepingVinesPlantBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; - -@SuppressWarnings({"rawtypes", "unchecked"}) -public class OuranwoodVinePlantBlock extends WeepingVinesPlantBlock { - public static final MapCodec CODEC = simpleCodec(OuranwoodVinePlantBlock::new); - private static GrowingPlantHeadBlock headBlock; - - public OuranwoodVinePlantBlock(BlockBehaviour.Properties properties) { - super(properties); - } - - @Override - public MapCodec codec() { - return (MapCodec) CODEC; - } - - @Override - protected GrowingPlantHeadBlock getHeadBlock() { - return headBlock; - } - - @Override - protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return Shapes.block(); - } - - public static void bindHeadBlock(WeepingVinesBlock block) { - headBlock = block; - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/PeachLeavesBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/PeachLeavesBlock.java new file mode 100644 index 00000000..1ac4bc33 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/PeachLeavesBlock.java @@ -0,0 +1,88 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; + +public class PeachLeavesBlock extends LeavesBlock implements BonemealableBlock { + public static final MapCodec CODEC = Block.simpleCodec(PeachLeavesBlock::new); + private static final ResourceLocation HANGING_PEACH_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "hanging_peach"); + + public PeachLeavesBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.defaultBlockState() + .setValue(DISTANCE, DECAY_DISTANCE) + .setValue(PERSISTENT, false) + .setValue(WATERLOGGED, false)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + FluidState fluidState = context.getLevel().getFluidState(context.getClickedPos()); + return this.defaultBlockState() + .setValue(PERSISTENT, true) + .setValue(WATERLOGGED, fluidState.getType() == Fluids.WATER); + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + if (random.nextInt(18) != 0) { + return; + } + + level.addParticle( + AntarchyObjects.PEACH_LEAVES_PARTICLE.get(), + pos.getX() + random.nextDouble(), + pos.getY() + random.nextDouble(), + pos.getZ() + random.nextDouble(), + 0.0D, + -0.02D, + 0.0D + ); + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + return level.getBlockState(pos.below()).isAir(); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + if (!level.getBlockState(pos.below()).isAir()) { + return; + } + + level.setBlock(pos.below(), createHangingPeachState(), Block.UPDATE_ALL); + } + + public static BlockState createHangingPeachState() { + return BuiltInRegistries.BLOCK.getOptional(HANGING_PEACH_ID) + .map(Block::defaultBlockState) + .orElseThrow(() -> new IllegalStateException("Missing hanging peach block: " + HANGING_PEACH_ID)); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/PeachSaplingBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/PeachSaplingBlock.java new file mode 100644 index 00000000..d6363788 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/PeachSaplingBlock.java @@ -0,0 +1,134 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeGrowers; +import com.mojang.serialization.MapCodec; +import java.util.LinkedHashMap; +import java.util.Map; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.BushBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +public class PeachSaplingBlock extends BushBlock implements BonemealableBlock { + public static final MapCodec CODEC = Block.simpleCodec(PeachSaplingBlock::new); + + public PeachSaplingBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (level.getMaxLocalRawBrightness(pos.above()) >= 9 && random.nextInt(7) == 0) { + this.growConfiguredTree(level, pos, state, random); + } + } + + @Override + protected BlockState updateShape( + BlockState state, + net.minecraft.core.Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + return state.canSurvive(level, pos) + ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) + : Blocks.AIR.defaultBlockState(); + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + return true; + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return random.nextFloat() < 0.45F; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + this.growConfiguredTree(level, pos, state, random); + } + + private void growConfiguredTree(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + Footprint largeFootprint = this.findFootprint(level, pos); + if (largeFootprint != null) { + this.placeConfiguredTree(level, largeFootprint, PeachTreeGrowers.PEACH_LARGE_TREE, random); + return; + } + + this.placeConfiguredTree(level, new Footprint(pos, Map.of(pos, state)), PeachTreeGrowers.PEACH_TREE, random); + } + + private Footprint findFootprint(ServerLevel level, BlockPos pos) { + for (int offsetX = 0; offsetX < 2; offsetX++) { + for (int offsetZ = 0; offsetZ < 2; offsetZ++) { + BlockPos origin = pos.offset(-offsetX, 0, -offsetZ); + Map blocks = new LinkedHashMap<>(); + boolean matches = true; + + for (int x = 0; x < 2 && matches; x++) { + for (int z = 0; z < 2; z++) { + BlockPos checkPos = origin.offset(x, 0, z); + BlockState checkState = level.getBlockState(checkPos); + if (!checkState.is(this)) { + matches = false; + break; + } + blocks.put(checkPos, checkState); + } + } + + if (matches) { + return new Footprint(origin, blocks); + } + } + } + + return null; + } + + private void placeConfiguredTree( + ServerLevel level, + Footprint footprint, + net.minecraft.resources.ResourceKey> featureKey, + RandomSource random + ) { + Holder.Reference> feature = level.registryAccess() + .lookupOrThrow(Registries.CONFIGURED_FEATURE) + .getOrThrow(featureKey); + + for (BlockPos saplingPos : footprint.blocks().keySet()) { + level.removeBlock(saplingPos, false); + } + + if (feature.value().place(level, level.getChunkSource().getGenerator(), random, footprint.origin())) { + return; + } + + for (Map.Entry entry : footprint.blocks().entrySet()) { + level.setBlock(entry.getKey(), entry.getValue(), Block.UPDATE_ALL); + } + } + + private record Footprint(BlockPos origin, Map blocks) { + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/TorchflowerBushBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/TorchflowerBushBlock.java deleted file mode 100644 index 00cf1a0d..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/TorchflowerBushBlock.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import com.mojang.serialization.MapCodec; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; - -public class TorchflowerBushBlock extends MilkweedBlock { - public static final MapCodec CODEC = Block.simpleCodec(TorchflowerBushBlock::new); - - public TorchflowerBushBlock(BlockBehaviour.Properties properties) { - super(properties); - } - - @Override - public MapCodec codec() { - return (MapCodec) (MapCodec) CODEC; - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/VeryShortGrassBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/VeryShortGrassBlock.java deleted file mode 100644 index eca0a8e4..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/VeryShortGrassBlock.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import com.mojang.serialization.MapCodec; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.BonemealableBlock; -import net.minecraft.world.level.block.BushBlock; -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; - -public class VeryShortGrassBlock extends BushBlock implements BonemealableBlock { - public static final MapCodec CODEC = Block.simpleCodec(VeryShortGrassBlock::new); - - private static final VoxelShape SHAPE = Block.box(2.0, 0.0, 2.0, 14.0, 8.0, 14.0); - - public VeryShortGrassBlock(BlockBehaviour.Properties properties) { - super(properties); - } - - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return SHAPE; - } - - @Override - public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { - return true; - } - - @Override - public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { - return true; - } - - @Override - public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { - level.setBlock(pos, Blocks.SHORT_GRASS.defaultBlockState(), 3); - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/VeryTallGrassBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/VeryTallGrassBlock.java deleted file mode 100644 index 1bf0808a..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/VeryTallGrassBlock.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.craisinlord.antarchy.content.block; - -import com.mojang.serialization.MapCodec; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.RandomSource; -import net.minecraft.util.StringRepresentable; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.BonemealableBlock; -import net.minecraft.world.level.block.BushBlock; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.EnumProperty; -import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; - -public class VeryTallGrassBlock extends BushBlock implements BonemealableBlock { - public static final MapCodec CODEC = Block.simpleCodec(VeryTallGrassBlock::new); - public static final EnumProperty PART = EnumProperty.create("part", Part.class); - - public VeryTallGrassBlock(BlockBehaviour.Properties properties) { - super(properties); - this.registerDefaultState(this.stateDefinition.any().setValue(PART, Part.LOWER)); - } - - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(PART); - } - - @Override - protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { - return switch (state.getValue(PART)) { - case LOWER -> super.canSurvive(state, level, pos); - case MIDDLE -> level.getBlockState(pos.below()).is(this) - && level.getBlockState(pos.below()).getValue(PART) == Part.LOWER - && level.getBlockState(pos.above()).is(this) - && level.getBlockState(pos.above()).getValue(PART) == Part.UPPER; - case UPPER -> level.getBlockState(pos.below()).is(this) - && level.getBlockState(pos.below()).getValue(PART) == Part.MIDDLE; - }; - } - - @Override - protected BlockState updateShape( - BlockState state, - Direction direction, - BlockState neighborState, - LevelAccessor level, - BlockPos pos, - BlockPos neighborPos - ) { - Part part = state.getValue(PART); - if (part == Part.LOWER && direction == Direction.UP && (!neighborState.is(this) || neighborState.getValue(PART) != Part.MIDDLE)) { - return Blocks.AIR.defaultBlockState(); - } - if (part == Part.MIDDLE) { - if (direction == Direction.DOWN && (!neighborState.is(this) || neighborState.getValue(PART) != Part.LOWER)) { - return Blocks.AIR.defaultBlockState(); - } - if (direction == Direction.UP && (!neighborState.is(this) || neighborState.getValue(PART) != Part.UPPER)) { - return Blocks.AIR.defaultBlockState(); - } - } - if (part == Part.UPPER && direction == Direction.DOWN && (!neighborState.is(this) || neighborState.getValue(PART) != Part.MIDDLE)) { - return Blocks.AIR.defaultBlockState(); - } - return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); - } - - @Override - protected ItemInteractionResult useItemOn( - ItemStack stack, - BlockState state, - Level level, - BlockPos pos, - Player player, - InteractionHand hand, - BlockHitResult hitResult - ) { - if (player.getItemInHand(hand).is(Items.BONE_MEAL)) { - popResource(level, pos, new ItemStack(state.getBlock().asItem(), 1)); - return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; - } - - return super.useItemOn(stack, state, level, pos, player, hand, hitResult); - } - - @Override - public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { - return false; - } - - @Override - public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { - return false; - } - - @Override - public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { - } - - @Override - protected boolean canBeReplaced(BlockState state, BlockPlaceContext context) { - return false; - } - - @Nullable - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - BlockPos pos = context.getClickedPos(); - Level level = context.getLevel(); - if (!level.getBlockState(pos.above()).canBeReplaced(context) || !level.getBlockState(pos.above(2)).canBeReplaced(context)) { - return null; - } - return super.getStateForPlacement(context); - } - - @Override - public void setPlacedBy(Level level, BlockPos pos, BlockState state, @Nullable net.minecraft.world.entity.LivingEntity placer, ItemStack stack) { - placeAt(level, pos, Block.UPDATE_ALL); - } - - public static void placeAt(LevelAccessor level, BlockPos pos, int flags) { - level.setBlock(pos, defaultState(Part.LOWER), flags); - level.setBlock(pos.above(), defaultState(Part.MIDDLE), flags); - level.setBlock(pos.above(2), defaultState(Part.UPPER), flags); - } - - private static BlockState defaultState(Part part) { - return net.minecraft.core.registries.BuiltInRegistries.BLOCK - .get(net.minecraft.resources.ResourceLocation.fromNamespaceAndPath("antarchy", "very_tall_grass")) - .defaultBlockState() - .setValue(PART, part); - } - - public enum Part implements StringRepresentable { - LOWER("lower"), - MIDDLE("middle"), - UPPER("upper"); - - private final String name; - - Part(String name) { - this.name = name; - } - - @Override - public String getSerializedName() { - return this.name; - } - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/WildCornBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/WildCornBlock.java new file mode 100644 index 00000000..4c87b9dc --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/WildCornBlock.java @@ -0,0 +1,63 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; + +public final class WildCornBlock extends CornCropBlock { + public static final MapCodec CODEC = Block.simpleCodec(WildCornBlock::new); + + public WildCornBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(AGE, 3).setValue(HALF, DoubleBlockHalf.LOWER)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(Blocks.GRASS_BLOCK); + } + + @Override + protected boolean isRandomlyTicking(BlockState state) { + return false; + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + return false; + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return false; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + } + + @Override + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state) { + return new ItemStack(AntarchyObjects.CORN.get()); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/ElkaModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/ElkaModel.java new file mode 100644 index 00000000..7b08e13e --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/ElkaModel.java @@ -0,0 +1,34 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.ElkaEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class ElkaModel extends GeoModel { + private static final ResourceLocation ADULT_GEO = rl("geo/elka.geo.json"); + private static final ResourceLocation BABY_GEO = rl("geo/elka_baby.geo.json"); + private static final ResourceLocation ADULT_ANIM = rl("animations/elka.animation.json"); + private static final ResourceLocation BABY_ANIM = rl("animations/elka_baby.animation.json"); + private static final ResourceLocation ADULT_TEXTURE = rl("textures/entity/elka.png"); + private static final ResourceLocation BABY_TEXTURE = rl("textures/entity/elka_baby.png"); + + private static ResourceLocation rl(String path) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); + } + + @Override + public ResourceLocation getModelResource(ElkaEntity animatable) { + return animatable.isBaby() ? BABY_GEO : ADULT_GEO; + } + + @Override + public ResourceLocation getAnimationResource(ElkaEntity animatable) { + return animatable.isBaby() ? BABY_ANIM : ADULT_ANIM; + } + + @Override + public ResourceLocation getTextureResource(ElkaEntity animatable) { + return animatable.isBaby() ? BABY_TEXTURE : ADULT_TEXTURE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/GlimmerModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/GlimmerModel.java deleted file mode 100644 index b17874e3..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/model/GlimmerModel.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.craisinlord.antarchy.content.client.model; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.entity.GlimmerEntity; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.model.GeoModel; - -public class GlimmerModel extends GeoModel { - private static final ResourceLocation ADULT_GEO = rl("geo/glimmer.geo.json"); - private static final ResourceLocation BABY_GEO = rl("geo/glimmer_baby.geo.json"); - private static final ResourceLocation ADULT_ANIM = rl("animations/glimmer.animation.json"); - private static final ResourceLocation BABY_ANIM = rl("animations/glimmer_baby.animation.json"); - private static final ResourceLocation ADULT_DAY = rl("textures/entity/glimmer/glimmer_day.png"); - private static final ResourceLocation ADULT_NIGHT = rl("textures/entity/glimmer/glimmer.png"); - private static final ResourceLocation BABY_DAY = rl("textures/entity/glimmer/glimmer_baby_day.png"); - private static final ResourceLocation BABY_NIGHT = rl("textures/entity/glimmer/glimmer_baby.png"); - public static final ResourceLocation ADULT_EMISSIVE = rl("textures/entity/glimmer/glimmer_emissive.png"); - public static final ResourceLocation BABY_EMISSIVE = rl("textures/entity/glimmer/glimmer_baby_emissive.png"); - - private static ResourceLocation rl(String path) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); - } - - @Override - public ResourceLocation getModelResource(GlimmerEntity animatable) { - return animatable.isBaby() ? BABY_GEO : ADULT_GEO; - } - - @Override - public ResourceLocation getAnimationResource(GlimmerEntity animatable) { - return animatable.isBaby() ? BABY_ANIM : ADULT_ANIM; - } - - @Override - public ResourceLocation getTextureResource(GlimmerEntity animatable) { - return textureFor(animatable, animatable.getGlowBlend(0.0F) >= 0.5F); - } - - public static ResourceLocation textureFor(GlimmerEntity animatable, boolean glowing) { - if (animatable.isBaby()) { - return glowing ? BABY_NIGHT : BABY_DAY; - } - return glowing ? ADULT_NIGHT : ADULT_DAY; - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/OuranwoodDeerModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/OuranwoodDeerModel.java new file mode 100644 index 00000000..cfedeb41 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/OuranwoodDeerModel.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class OuranwoodDeerModel extends GeoModel { + private static final ResourceLocation ADULT_GEO = rl("geo/ouranwood_deer.geo.json"); + private static final ResourceLocation BABY_GEO = rl("geo/ouranwood_deer_baby.geo.json"); + private static final ResourceLocation ADULT_ANIM = rl("animations/ouranwood_deer.animation.json"); + private static final ResourceLocation BABY_ANIM = rl("animations/ouranwood_deer_baby.animation.json"); + private static final ResourceLocation BUCK_TEXTURE = rl("textures/entity/ouranwood_deer/deer_buck.png"); + private static final ResourceLocation DOE_TEXTURE = rl("textures/entity/ouranwood_deer/deer_doe.png"); + private static final ResourceLocation STAG_TEXTURE = rl("textures/entity/ouranwood_deer/deer_stag.png"); + + private static ResourceLocation rl(String path) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); + } + + @Override + public ResourceLocation getModelResource(OuranwoodDeerEntity animatable) { + return animatable.isBaby() ? BABY_GEO : ADULT_GEO; + } + + @Override + public ResourceLocation getAnimationResource(OuranwoodDeerEntity animatable) { + return animatable.isBaby() ? BABY_ANIM : ADULT_ANIM; + } + + @Override + public ResourceLocation getTextureResource(OuranwoodDeerEntity animatable) { + if (animatable.isBaby()) { + return STAG_TEXTURE; + } + return switch (animatable.getVariant()) { + case BUCK -> BUCK_TEXTURE; + case DOE -> DOE_TEXTURE; + }; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerFrogModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerFrogModel.java new file mode 100644 index 00000000..a71dfd60 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerFrogModel.java @@ -0,0 +1,50 @@ +package com.craisinlord.antarchy.content.client.model.glimmer; + +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.FrogModel; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.util.Mth; + +/** + * Reuses vanilla Frog geometry ({@link FrogModel}/{@code ModelLayers.FROG}) for the Frog + * Glimmer variant instead of an ill-fitting GeckoLib placeholder mesh, with a simplified + * walk/idle animation (GlimmerEntity has no Frog-specific jump/tongue state). + */ +public class GlimmerFrogModel extends EntityModel { + private final ModelPart root; + private final ModelPart head; + private final ModelPart leftArm; + private final ModelPart rightArm; + private final ModelPart leftLeg; + private final ModelPart rightLeg; + + public GlimmerFrogModel(ModelPart bakeRoot) { + this.root = bakeRoot.getChild("root"); + ModelPart body = this.root.getChild("body"); + this.head = body.getChild("head"); + this.leftArm = body.getChild("left_arm"); + this.rightArm = body.getChild("right_arm"); + this.leftLeg = this.root.getChild("left_leg"); + this.rightLeg = this.root.getChild("right_leg"); + } + + @Override + public void setupAnim(GlimmerEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + this.head.yRot = netHeadYaw * ((float) Math.PI / 180F); + this.head.xRot = headPitch * ((float) Math.PI / 180F); + + float legSwing = Mth.sin(limbSwing * 0.6662F) * limbSwingAmount; + this.leftLeg.xRot = legSwing; + this.rightLeg.xRot = -legSwing; + this.leftArm.xRot = -legSwing; + this.rightArm.xRot = legSwing; + } + + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, int color) { + this.root.render(poseStack, buffer, packedLight, packedOverlay, color); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerModel.java new file mode 100644 index 00000000..82bf3761 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/glimmer/GlimmerModel.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.client.model.glimmer; + +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class GlimmerModel extends GeoModel { + @Override + public ResourceLocation getModelResource(GlimmerEntity animatable) { + return animatable.getVariant().getBehavior().modelGeo(); + } + + @Override + public ResourceLocation getAnimationResource(GlimmerEntity animatable) { + return animatable.getVariant().getBehavior().animationFile(); + } + + @Override + public ResourceLocation getTextureResource(GlimmerEntity animatable) { + return animatable.getVariant().getBehavior().texture(animatable); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/GlimmerParticles.java b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/GlimmerParticles.java similarity index 74% rename from common/src/main/java/com/craisinlord/antarchy/content/GlimmerParticles.java rename to common/src/main/java/com/craisinlord/antarchy/content/client/particle/GlimmerParticles.java index 4be4e240..0b5d6400 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/GlimmerParticles.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/GlimmerParticles.java @@ -1,4 +1,4 @@ -package com.craisinlord.antarchy.content; +package com.craisinlord.antarchy.content.client.particle; import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.server.level.ServerLevel; @@ -42,4 +42,22 @@ public final class GlimmerParticles { serverLevel.sendParticles(TRAIL, behind.x, behind.y, behind.z, 1, 0.05D, 0.05D, 0.05D, 0.0D); } } + + public static void tickBurst(LivingEntity entity) { + if (!(entity.level() instanceof ServerLevel serverLevel) || !entity.isAlive()) { + return; + } + + serverLevel.sendParticles( + TRAIL, + entity.getRandomX(0.4D), + entity.getY(0.1D) + entity.getBbHeight() * 0.4D, + entity.getRandomZ(0.4D), + 3, + 0.12D, + 0.12D, + 0.12D, + 0.0D + ); + } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/particle/PeachLeavesParticle.java b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/PeachLeavesParticle.java new file mode 100644 index 00000000..3a578435 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/PeachLeavesParticle.java @@ -0,0 +1,69 @@ +package com.craisinlord.antarchy.content.client.particle; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleProvider; +import net.minecraft.client.particle.ParticleRenderType; +import net.minecraft.client.particle.SpriteSet; +import net.minecraft.client.particle.TextureSheetParticle; +import net.minecraft.core.particles.SimpleParticleType; + +public final class PeachLeavesParticle extends TextureSheetParticle { + private final SpriteSet sprites; + private final float gravity; + + private PeachLeavesParticle(ClientLevel level, double x, double y, double z, SpriteSet sprites) { + super(level, x, y, z, 0.0D, 0.0D, 0.0D); + this.sprites = sprites; + this.gravity = 0.02F + this.random.nextFloat() * 0.01F; + this.lifetime = 28 + this.random.nextInt(26); + this.quadSize = 0.14F + this.random.nextFloat() * 0.05F; + this.xd = (this.random.nextDouble() - 0.5D) * 0.04D; + this.yd = -0.015D - this.random.nextDouble() * 0.02D; + this.zd = (this.random.nextDouble() - 0.5D) * 0.04D; + this.hasPhysics = true; + this.setSpriteFromAge(sprites); + } + + @Override + public void tick() { + this.xo = this.x; + this.yo = this.y; + this.zo = this.z; + + if (this.age++ >= this.lifetime) { + this.remove(); + return; + } + + double sway = Math.sin((this.age + this.x) * 0.22D) * 0.0035D; + this.xd += sway; + this.zd -= sway; + this.yd -= this.gravity * 0.015D; + + this.xd *= 0.91D; + this.yd *= 0.92D; + this.zd *= 0.91D; + + this.move(this.xd, this.yd, this.zd); + this.setSpriteFromAge(this.sprites); + } + + @Override + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; + } + + public static final class Provider implements ParticleProvider { + private final SpriteSet sprites; + + public Provider(SpriteSet sprites) { + this.sprites = sprites; + } + + @Override + public Particle createParticle(SimpleParticleType type, ClientLevel level, double x, double y, double z, double xd, double yd, double zd) { + return new PeachLeavesParticle(level, x, y, z, this.sprites); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AppleCowRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AppleCowRenderer.java index a46c13aa..90dee763 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AppleCowRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AppleCowRenderer.java @@ -53,7 +53,7 @@ public class AppleCowRenderer extends GeoEntityRenderer { public void render(PoseStack poseStack, AppleCowEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) { - if (!(animatable instanceof EnchantedGoldenAppleCow)) { + if (!(animatable instanceof EnchantedGoldenAppleCow) || animatable.isBaby()) { return; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElkaRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElkaRenderer.java new file mode 100644 index 00000000..80a42c0d --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ElkaRenderer.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.ElkaModel; +import com.craisinlord.antarchy.content.entity.ElkaEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class ElkaRenderer extends GeoEntityRenderer { + private static final float SHADOW_RADIUS = 0.9F; + + public ElkaRenderer(EntityRendererProvider.Context context) { + super(context, new ElkaModel()); + this.shadowRadius = SHADOW_RADIUS; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmerRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmerRenderer.java deleted file mode 100644 index 65e3344c..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/GlimmerRenderer.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.client.model.GlimmerModel; -import com.craisinlord.antarchy.content.entity.GlimmerEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.Nullable; -import software.bernie.geckolib.cache.object.BakedGeoModel; -import software.bernie.geckolib.renderer.GeoEntityRenderer; -import software.bernie.geckolib.renderer.layer.GeoRenderLayer; - -public class GlimmerRenderer extends GeoEntityRenderer { - private static final float SHADOW_RADIUS = 0.5F; - - public GlimmerRenderer(EntityRendererProvider.Context context) { - super(context, new GlimmerModel()); - this.shadowRadius = SHADOW_RADIUS; - this.addRenderLayer(new GlimmerCrossfadeLayer(this)); - this.addRenderLayer(new GlimmerEmissiveLayer(this)); - } - - @Override - public RenderType getRenderType(GlimmerEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { - return RenderType.entityTranslucent(texture); - } - - @Override - public void preRender(PoseStack poseStack, GlimmerEntity animatable, BakedGeoModel model, @Nullable MultiBufferSource bufferSource, - @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int colour) { - super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, colour); - this.shadowRadius = SHADOW_RADIUS; - } - - private static final class GlimmerCrossfadeLayer extends GeoRenderLayer { - private GlimmerCrossfadeLayer(GeoEntityRenderer renderer) { - super(renderer); - } - - @Override - public void render(PoseStack poseStack, GlimmerEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, - MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, - int packedLight, int packedOverlay) { - float glowBlend = animatable.getGlowBlend(partialTick); - if (glowBlend <= 0.0F || glowBlend >= 1.0F) { - return; - } - - boolean baseGlowing = glowBlend >= 0.5F; - float overlayAlpha = baseGlowing ? 1.0F - glowBlend : glowBlend; - if (overlayAlpha <= 0.0F) { - return; - } - - ResourceLocation overlayTexture = GlimmerModel.textureFor(animatable, !baseGlowing); - RenderType overlayType = RenderType.entityTranslucent(overlayTexture); - VertexConsumer overlayBuffer = bufferSource.getBuffer(overlayType); - int color = ((Math.max(0, Math.min(255, Math.round(overlayAlpha * 255.0F))) & 0xFF) << 24) | 0x00FFFFFF; - this.getRenderer().reRender( - bakedModel, - poseStack, - bufferSource, - animatable, - overlayType, - overlayBuffer, - partialTick, - packedLight, - packedOverlay, - color - ); - } - } - - private static final class GlimmerEmissiveLayer extends GeoRenderLayer { - private GlimmerEmissiveLayer(GeoEntityRenderer renderer) { - super(renderer); - } - - @Override - public void render(PoseStack poseStack, GlimmerEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, - MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, - int packedLight, int packedOverlay) { - if (!animatable.isGlowingState()) { - return; - } - - ResourceLocation texture = animatable.isBaby() ? GlimmerModel.BABY_EMISSIVE : GlimmerModel.ADULT_EMISSIVE; - RenderType emissiveType = RenderType.eyes(texture); - VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); - this.getRenderer().reRender( - bakedModel, - poseStack, - bufferSource, - animatable, - emissiveType, - emissiveBuffer, - partialTick, - 0xF000F0, - OverlayTexture.NO_OVERLAY, - 0xFFFFFFFF - ); - } - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OuranwoodDeerRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OuranwoodDeerRenderer.java new file mode 100644 index 00000000..c1a1e6ce --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OuranwoodDeerRenderer.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.OuranwoodDeerModel; +import com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class OuranwoodDeerRenderer extends GeoEntityRenderer { + private static final float SHADOW_RADIUS = 0.5F; + + public OuranwoodDeerRenderer(EntityRendererProvider.Context context) { + super(context, new OuranwoodDeerModel()); + this.shadowRadius = SHADOW_RADIUS; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/PeachBoatRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/PeachBoatRenderer.java new file mode 100644 index 00000000..ecd6111a --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/PeachBoatRenderer.java @@ -0,0 +1,78 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.model.BoatModel; +import net.minecraft.client.model.ChestBoatModel; +import net.minecraft.client.model.ListModel; +import net.minecraft.client.model.WaterPatchModel; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.vehicle.Boat; +import org.joml.Quaternionf; + +public class PeachBoatRenderer extends EntityRenderer { + private static final String MAIN_LAYER = "main"; + private final ResourceLocation texture; + private final ListModel model; + + public PeachBoatRenderer(EntityRendererProvider.Context context, ResourceLocation texture, boolean chest) { + super(context); + this.shadowRadius = 0.8F; + this.texture = texture; + this.model = chest + ? new ChestBoatModel(context.bakeLayer(chestBoatLayer())) + : new BoatModel(context.bakeLayer(boatLayer())); + } + + public static ModelLayerLocation boatLayer() { + return new ModelLayerLocation(ResourceLocation.fromNamespaceAndPath("antarchy", "boat/peach"), MAIN_LAYER); + } + + public static ModelLayerLocation chestBoatLayer() { + return new ModelLayerLocation(ResourceLocation.fromNamespaceAndPath("antarchy", "chest_boat/peach"), MAIN_LAYER); + } + + @Override + public void render(T boat, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { + poseStack.pushPose(); + poseStack.translate(0.0F, 0.375F, 0.0F); + poseStack.mulPose(Axis.YP.rotationDegrees(180.0F - entityYaw)); + + float hurtTime = boat.getHurtTime() - partialTick; + float damage = Math.max(boat.getDamage() - partialTick, 0.0F); + if (hurtTime > 0.0F) { + poseStack.mulPose(Axis.XP.rotationDegrees(Mth.sin(hurtTime) * hurtTime * damage / 10.0F * boat.getHurtDir())); + } + + float bubbleAngle = boat.getBubbleAngle(partialTick); + if (!Mth.equal(bubbleAngle, 0.0F)) { + poseStack.mulPose(new Quaternionf().setAngleAxis(boat.getBubbleAngle(partialTick) * ((float) Math.PI / 180.0F), 1.0F, 0.0F, 1.0F)); + } + + poseStack.scale(-1.0F, -1.0F, 1.0F); + poseStack.mulPose(Axis.YP.rotationDegrees(90.0F)); + this.model.setupAnim(boat, partialTick, 0.0F, -0.1F, 0.0F, 0.0F); + VertexConsumer consumer = buffer.getBuffer(this.model.renderType(this.texture)); + this.model.renderToBuffer(poseStack, consumer, packedLight, OverlayTexture.NO_OVERLAY); + if (!boat.isUnderWater() && this.model instanceof WaterPatchModel waterPatchModel) { + VertexConsumer waterConsumer = buffer.getBuffer(RenderType.waterMask()); + waterPatchModel.waterPatch().render(poseStack, waterConsumer, packedLight, OverlayTexture.NO_OVERLAY); + } + + poseStack.popPose(); + super.render(boat, entityYaw, partialTick, poseStack, buffer, packedLight); + } + + @Override + public ResourceLocation getTextureLocation(T boat) { + return this.texture; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java new file mode 100644 index 00000000..f32df558 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java @@ -0,0 +1,128 @@ +package com.craisinlord.antarchy.content.client.renderer.glimmer; + +import com.craisinlord.antarchy.content.client.model.glimmer.GlimmerFrogModel; +import com.craisinlord.antarchy.content.client.model.glimmer.GlimmerModel; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.ModelLayers; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoEntityRenderer; +import software.bernie.geckolib.renderer.layer.GeoRenderLayer; + +public class GlimmerRenderer extends GeoEntityRenderer { + private static final float SHADOW_RADIUS = 0.0F; + private static final float COOLDOWN_DIM_MIN = 0.35F; + + private final GlimmerFrogModel frogModel; + + public GlimmerRenderer(EntityRendererProvider.Context context) { + super(context, new GlimmerModel()); + this.shadowRadius = SHADOW_RADIUS; + this.addRenderLayer(new GlimmerEmissiveLayer(this)); + this.frogModel = new GlimmerFrogModel(context.bakeLayer(ModelLayers.FROG)); + } + + @Override + public void render(GlimmerEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + if (entity.getVariant() == GlimmerVariant.FROG) { + this.renderVanillaModel(this.frogModel, entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); + return; + } + super.render(entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); + } + + private void renderVanillaModel(EntityModel model, GlimmerEntity entity, float entityYaw, float partialTick, + PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + poseStack.pushPose(); + poseStack.mulPose(Axis.YP.rotationDegrees(180.0F - entityYaw)); + poseStack.scale(-1.0F, -1.0F, 1.0F); + poseStack.translate(0.0F, -1.501F, 0.0F); + + float limbSwing = entity.walkAnimation.position(partialTick); + float limbSwingAmount = entity.walkAnimation.speed(partialTick); + float ageInTicks = entity.tickCount + partialTick; + float netHeadYaw = Mth.rotLerp(partialTick, entity.yHeadRotO, entity.yHeadRot) - entityYaw; + float headPitch = Mth.lerp(partialTick, entity.xRotO, entity.getXRot()); + + model.setupAnim(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); + + int color = packColor(entity.getFadeAlpha(partialTick), brightnessFor(entity, partialTick)); + + ResourceLocation texture = entity.getVariant().getBehavior().texture(entity); + VertexConsumer buffer = bufferSource.getBuffer(RenderType.entityCutoutNoCull(texture)); + model.renderToBuffer(poseStack, buffer, packedLight, OverlayTexture.NO_OVERLAY, color); + + ResourceLocation emissiveTexture = entity.getVariant().getBehavior().emissiveTexture(entity); + VertexConsumer emissiveBuffer = bufferSource.getBuffer(RenderType.eyes(emissiveTexture)); + model.renderToBuffer(poseStack, emissiveBuffer, 0xF000F0, OverlayTexture.NO_OVERLAY, color); + + poseStack.popPose(); + } + + private static int packColor(float alpha, float brightness) { + int alphaByte = Mth.clamp(Math.round(alpha * 255.0F), 0, 255); + int colorByte = Mth.clamp(Math.round(brightness * 255.0F), 0, 255); + return (alphaByte << 24) | (colorByte << 16) | (colorByte << 8) | colorByte; + } + + private static float brightnessFor(GlimmerEntity entity, float partialTick) { + float cooldownFraction = entity.getAbilityCooldownFraction(partialTick); + return Mth.lerp(cooldownFraction, 1.0F, COOLDOWN_DIM_MIN); + } + + @Override + public RenderType getRenderType(GlimmerEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityTranslucent(texture); + } + + @Override + public software.bernie.geckolib.util.Color getRenderColor(GlimmerEntity animatable, float partialTick, int packedLight) { + float brightness = brightnessFor(animatable, partialTick); + return software.bernie.geckolib.util.Color.ofRGBA(brightness, brightness, brightness, animatable.getFadeAlpha(partialTick)); + } + + @Override + public void preRender(PoseStack poseStack, GlimmerEntity animatable, BakedGeoModel model, @Nullable MultiBufferSource bufferSource, + @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int colour) { + super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, colour); + this.shadowRadius = SHADOW_RADIUS; + } + + private static final class GlimmerEmissiveLayer extends GeoRenderLayer { + private GlimmerEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, GlimmerEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + ResourceLocation texture = animatable.getVariant().getBehavior().emissiveTexture(animatable); + RenderType emissiveType = RenderType.eyes(texture); + VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + emissiveType, + emissiveBuffer, + partialTick, + 0xF000F0, + OverlayTexture.NO_OVERLAY, + packColor(animatable.getFadeAlpha(partialTick), brightnessFor(animatable, partialTick)) + ); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/screen/DorrieInventoryScreen.java b/common/src/main/java/com/craisinlord/antarchy/content/client/screen/DorrieInventoryScreen.java new file mode 100644 index 00000000..d9dfd3a9 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/screen/DorrieInventoryScreen.java @@ -0,0 +1,69 @@ +package com.craisinlord.antarchy.content.client.screen; + +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import com.craisinlord.antarchy.content.menu.DorrieInventoryMenu; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.gui.screens.inventory.InventoryScreen; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + +public class DorrieInventoryScreen extends AbstractContainerScreen { + private static final ResourceLocation HORSE_INVENTORY_TEXTURE = + ResourceLocation.withDefaultNamespace("textures/gui/container/horse.png"); + private static final ResourceLocation CHEST_SLOTS_SPRITE = + ResourceLocation.withDefaultNamespace("container/horse/chest_slots"); + + private static final int CHEST_SLOTS_TEX_WIDTH = 90; + private static final int CHEST_SLOTS_TEX_HEIGHT = 54; + + private float xMouse; + private float yMouse; + + public DorrieInventoryScreen(DorrieInventoryMenu menu, Inventory playerInventory, Component title) { + super(menu, playerInventory, title); + this.imageWidth = 176; + this.imageHeight = 166; + this.inventoryLabelY = this.imageHeight - 94; + } + + @Override + protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, int mouseY) { + int left = this.leftPos; + int top = this.topPos; + + guiGraphics.blit(HORSE_INVENTORY_TEXTURE, left, top, 0, 0, this.imageWidth, this.imageHeight); + + int storageWidth = DorrieInventoryMenu.STORAGE_COLUMNS * 18; + guiGraphics.blitSprite(CHEST_SLOTS_SPRITE, CHEST_SLOTS_TEX_WIDTH, CHEST_SLOTS_TEX_HEIGHT, 0, 0, + left + 79, top + 17, storageWidth, CHEST_SLOTS_TEX_HEIGHT); + guiGraphics.blitSprite(CHEST_SLOTS_SPRITE, CHEST_SLOTS_TEX_WIDTH, CHEST_SLOTS_TEX_HEIGHT, 0, 0, + left + 7, top + 17, 18, 18); + + DorrieEntity dorrie = this.menu.dorrie(); + if (dorrie != null) { + InventoryScreen.renderEntityInInventoryFollowsMouse( + guiGraphics, + left + 8, + top + 18, + left + 71, + top + 70, + 24, + 0.25F, + this.xMouse, + this.yMouse, + dorrie + ); + } + } + + @Override + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + this.xMouse = mouseX; + this.yMouse = mouseY; + this.renderBackground(guiGraphics, mouseX, mouseY, partialTick); + super.render(guiGraphics, mouseX, mouseY, partialTick); + this.renderTooltip(guiGraphics, mouseX, mouseY); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/effect/GlimmersGraceMobEffect.java b/common/src/main/java/com/craisinlord/antarchy/content/effect/GlimmersGraceMobEffect.java deleted file mode 100644 index 4a44f095..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/effect/GlimmersGraceMobEffect.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.craisinlord.antarchy.content.effect; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.GlimmerParticles; -import net.minecraft.core.Holder; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectCategory; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.ai.attributes.Attribute; -import net.minecraft.world.entity.ai.attributes.AttributeInstance; -import net.minecraft.world.entity.ai.attributes.AttributeMap; -import net.minecraft.world.entity.ai.attributes.AttributeModifier; -import net.minecraft.world.entity.ai.attributes.Attributes; - -public final class GlimmersGraceMobEffect extends MobEffect { - private static final ResourceLocation SPEED_MODIFIER_ID = - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmers_grace_speed"); - private static final ResourceLocation JUMP_MODIFIER_ID = - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmers_grace_jump"); - private static final ResourceLocation FALL_DAMAGE_MODIFIER_ID = - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmers_grace_fall_damage"); - - public GlimmersGraceMobEffect() { - super(MobEffectCategory.BENEFICIAL, 0x7FDBFF); - } - - @Override - public void addAttributeModifiers(AttributeMap attributeMap, int amplifier) { - addModifier(attributeMap, Attributes.MOVEMENT_SPEED, SPEED_MODIFIER_ID, 0.35D * (amplifier + 1)); - addModifier(attributeMap, Attributes.JUMP_STRENGTH, JUMP_MODIFIER_ID, 0.5D * (amplifier + 1)); - addModifier(attributeMap, Attributes.FALL_DAMAGE_MULTIPLIER, FALL_DAMAGE_MODIFIER_ID, -0.6D * (amplifier + 1)); - } - - @Override - public void removeAttributeModifiers(AttributeMap attributeMap) { - removeModifier(attributeMap, Attributes.MOVEMENT_SPEED, SPEED_MODIFIER_ID); - removeModifier(attributeMap, Attributes.JUMP_STRENGTH, JUMP_MODIFIER_ID); - removeModifier(attributeMap, Attributes.FALL_DAMAGE_MULTIPLIER, FALL_DAMAGE_MODIFIER_ID); - } - - @Override - public boolean shouldApplyEffectTickThisTick(int duration, int amplifier) { - return true; - } - - @Override - public boolean applyEffectTick(LivingEntity livingEntity, int amplifier) { - GlimmerParticles.tickAmbient(livingEntity, livingEntity.getDeltaMovement().horizontalDistanceSqr() > 0.01D); - return true; - } - - private static void addModifier(AttributeMap attributeMap, Holder attribute, ResourceLocation id, double amount) { - AttributeInstance instance = attributeMap.getInstance(attribute); - if (instance == null) { - return; - } - instance.addTransientModifier(new AttributeModifier(id, amount, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); - } - - private static void removeModifier(AttributeMap attributeMap, Holder attribute, ResourceLocation id) { - AttributeInstance instance = attributeMap.getInstance(attribute); - if (instance == null) { - return; - } - instance.removeModifier(id); - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java index 67a28023..00b629fb 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java @@ -6,6 +6,7 @@ import java.util.List; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; @@ -42,6 +43,8 @@ import net.minecraft.world.entity.animal.Animal; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.SimpleMenuProvider; import net.minecraft.world.level.Level; import net.minecraft.world.level.pathfinder.PathType; import net.minecraft.world.phys.Vec3; @@ -57,6 +60,9 @@ import software.bernie.geckolib.util.GeckoLibUtil; public class DorrieEntity extends Animal implements GeoEntity { private static final ResourceLocation CHEEP_ITEM_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "cheep"); + private static final String INVENTORY_TAG = "Inventory"; + private static final int SADDLE_SLOT = 0; + private static final int INVENTORY_SIZE = 17; private static final EntityDataAccessor HAS_SADDLE = SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.BOOLEAN); @@ -67,12 +73,13 @@ public class DorrieEntity extends Animal implements GeoEntity { private static final EntityDataAccessor QUIRK_TICKS = SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.INT); - private static final int MAX_CHARGE_TICKS = 40; - private static final float WATER_RIDE_SPEED = 0.78F; - private static final float LAND_BEACH_SPEED = 0.10F; + private static final int MAX_CHARGE_TICKS = 90; + private static final float WATER_RIDE_SPEED = 0.42F; + private static final float LAND_BEACH_SPEED = 0.07F; + private static final double ASCEND_SPEED = 0.06D; private static final int QUIRK_DURATION_TICKS = 65; - private static final int MIN_QUIRK_COOLDOWN_TICKS = 140; - private static final int MAX_QUIRK_COOLDOWN_TICKS = 260; + private static final int MIN_QUIRK_COOLDOWN_TICKS = 260; + private static final int MAX_QUIRK_COOLDOWN_TICKS = 420; private static final double MOVING_ANIM_THRESHOLD_SQ = 0.0025D; private static final RawAnimation IDLE_GROUND_ANIM = RawAnimation.begin().thenLoop("idle_ground"); @@ -87,6 +94,13 @@ public class DorrieEntity extends Animal implements GeoEntity { private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private final MoveControl landMoveControl; private final MoveControl waterMoveControl; + private final SimpleContainer inventory = new SimpleContainer(INVENTORY_SIZE) { + @Override + public void setChanged() { + super.setChanged(); + DorrieEntity.this.onInventoryChanged(); + } + }; private static final int RIDES_TO_TAME = 4; private static final int BUCK_DELAY_TICKS = 60; @@ -101,6 +115,7 @@ public class DorrieEntity extends Animal implements GeoEntity { private int swimForwardTicks = 0; private int quirkCooldownTicks = MIN_QUIRK_COOLDOWN_TICKS; private boolean usingLandNavigation = true; + private boolean pressingJump = false; public DorrieEntity(EntityType entityType, Level level) { super(entityType, level); @@ -131,8 +146,8 @@ public class DorrieEntity extends Animal implements GeoEntity { this.goalSelector.addGoal(0, new TryFindWaterGoal(this)); this.goalSelector.addGoal(1, new HuntCheepGoal(this)); this.goalSelector.addGoal(2, new DolphinSwimGoal()); - this.goalSelector.addGoal(3, new RandomSwimmingGoal(this, 1.35D, 8)); - this.goalSelector.addGoal(4, new WaterAvoidingRandomStrollGoal(this, 0.72D, 40)); + this.goalSelector.addGoal(3, new RandomSwimmingGoal(this, 1.45D, 4)); + this.goalSelector.addGoal(4, new WaterAvoidingRandomStrollGoal(this, 0.9D, 10)); this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); } @@ -153,6 +168,10 @@ public class DorrieEntity extends Animal implements GeoEntity { this.entityData.set(HAS_SADDLE, saddle); } + public SimpleContainer inventory() { + return this.inventory; + } + public boolean isTamed() { return this.entityData.get(TAMED); } @@ -181,16 +200,38 @@ public class DorrieEntity extends Animal implements GeoEntity { public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); tag.putBoolean("Tamed", this.isTamed()); - tag.putBoolean("HasSaddle", this.hasSaddle()); tag.putInt("RideAttempts", this.rideAttempts); + ListTag inventoryTag = new ListTag(); + for (int slot = 0; slot < this.inventory.getContainerSize(); slot++) { + ItemStack stack = this.inventory.getItem(slot); + if (stack.isEmpty()) { + continue; + } + + CompoundTag stackTag = new CompoundTag(); + stackTag.putByte("Slot", (byte) slot); + stackTag.put("Item", stack.save(this.registryAccess())); + inventoryTag.add(stackTag); + } + tag.put(INVENTORY_TAG, inventoryTag); } @Override public void readAdditionalSaveData(CompoundTag tag) { super.readAdditionalSaveData(tag); this.setTamed(tag.getBoolean("Tamed")); - this.setSaddle(tag.getBoolean("HasSaddle")); this.rideAttempts = tag.getInt("RideAttempts"); + this.inventory.clearContent(); + ListTag inventoryTag = tag.getList(INVENTORY_TAG, 10); + for (int i = 0; i < inventoryTag.size(); i++) { + CompoundTag stackTag = inventoryTag.getCompound(i); + int slot = stackTag.getByte("Slot") & 255; + if (slot < 0 || slot >= this.inventory.getContainerSize()) { + continue; + } + this.inventory.setItem(slot, ItemStack.parseOptional(this.registryAccess(), stackTag.getCompound("Item"))); + } + this.syncSaddleState(); } @Override @@ -204,38 +245,24 @@ public class DorrieEntity extends Animal implements GeoEntity { return InteractionResult.sidedSuccess(this.level().isClientSide); } - if (this.hasSaddle() && !player.isPassengerOfSameVehicle(this)) { - if (!stack.isEmpty()) { - return super.mobInteract(player, hand); - } - - if (!player.isShiftKeyDown()) { - if (!this.level().isClientSide) { - player.startRiding(this); - } - return InteractionResult.sidedSuccess(this.level().isClientSide); - } + if (player.isSecondaryUseActive()) { + this.openInventory(player); + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + if (this.hasSaddle() && stack.isEmpty() && !player.isPassengerOfSameVehicle(this)) { if (!this.level().isClientSide) { - this.setSaddle(false); - this.spawnAtLocation(new ItemStack(Items.SADDLE)); - this.playSound(SoundEvents.HORSE_SADDLE, 1.0F, 1.0F); + player.startRiding(this); } return InteractionResult.sidedSuccess(this.level().isClientSide); } - if (!this.hasSaddle() && stack.is(Items.SADDLE)) { - if (!this.level().isClientSide) { - this.setSaddle(true); - if (!player.getAbilities().instabuild) { - stack.shrink(1); - } - this.playSound(SoundEvents.HORSE_SADDLE, 1.0F, 1.0F); - } - return InteractionResult.sidedSuccess(this.level().isClientSide); + if (!stack.isEmpty() && this.isFood(stack)) { + return super.mobInteract(player, hand); } - return super.mobInteract(player, hand); + this.openInventory(player); + return InteractionResult.sidedSuccess(this.level().isClientSide); } @Override @@ -268,7 +295,7 @@ public class DorrieEntity extends Animal implements GeoEntity { @Override protected float getRiddenSpeed(Player player) { float speed = (this.isInWater() || this.isInLava()) - ? WATER_RIDE_SPEED * (1.0F + Math.min(this.swimForwardTicks, 60) * 0.03F) + ? WATER_RIDE_SPEED * (1.0F + Math.min(this.swimForwardTicks, 60) * 0.0125F) : LAND_BEACH_SPEED; return (float) this.getAttributeValue(Attributes.MOVEMENT_SPEED) * speed; } @@ -300,6 +327,10 @@ public class DorrieEntity extends Animal implements GeoEntity { this.swimForwardTicks = 0; } + if (this.isVehicle() && this.getQuirkTicks() > 0) { + this.setQuirkTicks(0); + } + if (!this.level().isClientSide && !this.isTamed() && this.getFirstPassenger() instanceof Player rider) { buckTimer++; if (buckTimer >= BUCK_DELAY_TICKS) { @@ -338,7 +369,9 @@ public class DorrieEntity extends Animal implements GeoEntity { wasInAir = inAirNow; } - public void setPressingJump(boolean pressing) {} + public void setPressingJump(boolean pressing) { + this.pressingJump = pressing; + } public void startJumpCharge() { if (!this.level().isClientSide) { @@ -365,16 +398,22 @@ public class DorrieEntity extends Animal implements GeoEntity { Vec3 riddenInput = this.getRiddenInput(rider, travelVector); this.setSpeed(this.getRiddenSpeed(rider)); + if (this.isLeaping) { + super.travel(travelVector); + return; + } + if (this.isInWater() || this.isInLava()) { this.moveRelative(this.getSpeed(), new Vec3(riddenInput.x, 0.0D, riddenInput.z)); Vec3 motion = this.getDeltaMovement(); double vertical = 0.0D; - if (!this.isLeaping) { - if (this.isUnderWater()) { - vertical = riddenInput.y * 0.025D; - } else if (riddenInput.y < 0.0D) { - vertical = riddenInput.y * 0.02D; - } + if (this.isUnderWater()) { + vertical = riddenInput.y * 0.025D; + } else if (riddenInput.y < 0.0D) { + vertical = riddenInput.y * 0.02D; + } + if (this.pressingJump) { + vertical += ASCEND_SPEED; } this.setDeltaMovement( motion.x * 0.92D, @@ -396,7 +435,7 @@ public class DorrieEntity extends Animal implements GeoEntity { Vec3 look = this.getLookAngle(); Vec3 current = this.getDeltaMovement(); double forwardAdd = 0.18D + power * 0.42D; - double vertical = 0.28D + power * 0.62D; + double vertical = 0.85D + power * 1.35D; this.setDeltaMovement( current.x + look.x * forwardAdd, current.y + vertical, @@ -429,9 +468,34 @@ public class DorrieEntity extends Animal implements GeoEntity { @Override protected void dropEquipment() { super.dropEquipment(); - if (this.hasSaddle()) { - this.spawnAtLocation(new ItemStack(Items.SADDLE)); + if (this.level().isClientSide) { + return; } + for (int slot = 0; slot < this.inventory.getContainerSize(); slot++) { + ItemStack stack = this.inventory.removeItemNoUpdate(slot); + if (!stack.isEmpty()) { + this.spawnAtLocation(stack); + } + } + } + + private void onInventoryChanged() { + this.syncSaddleState(); + } + + private void syncSaddleState() { + ItemStack saddleStack = this.inventory.getItem(SADDLE_SLOT); + this.setSaddle(!saddleStack.isEmpty() && saddleStack.is(Items.SADDLE)); + } + + private void openInventory(Player player) { + if (this.level().isClientSide) { + return; + } + player.openMenu(new SimpleMenuProvider( + (containerId, playerInventory, ignored) -> new com.craisinlord.antarchy.content.menu.DorrieInventoryMenu(containerId, playerInventory, this.inventory, this), + this.getDisplayName() + )); } @Override @@ -567,7 +631,7 @@ public class DorrieEntity extends Animal implements GeoEntity { private boolean canUseQuirkAnimation() { return this.isInWater() && !this.isUnderWater() - && this.getControllingPassenger() == null + && !this.isVehicle() && !this.isLeaping && this.landAnimTicks <= 0 && !this.isCharging @@ -653,7 +717,7 @@ public class DorrieEntity extends Animal implements GeoEntity { private class DolphinSwimGoal extends Goal { private static final int COOLDOWN_MIN_TICKS = 120; - private static final int COOLDOWN_MAX_TICKS = 240; + private static final int COOLDOWN_MAX_TICKS = 180; private static final int DIVE_MIN_TICKS = 50; private static final int DIVE_MAX_TICKS = 110; private static final int ROAM_MIN_TICKS = 70; @@ -691,7 +755,7 @@ public class DorrieEntity extends Animal implements GeoEntity { this.cooldownTicks--; return false; } - if (DorrieEntity.this.random.nextInt(6) != 0) { + if (DorrieEntity.this.random.nextInt(3) != 0) { return false; } this.targetPos = DorrieEntity.this.isUnderWater() diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ElkaEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ElkaEntity.java new file mode 100644 index 00000000..0a3ea56e --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ElkaEntity.java @@ -0,0 +1,448 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.Mth; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.BreedGoal; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.TemptGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.core.BlockPos; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class ElkaEntity extends Animal implements GeoEntity { + private static final EntityDataAccessor SITTING = + SynchedEntityData.defineId(ElkaEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor QUIRK_TICKS = + SynchedEntityData.defineId(ElkaEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor QUIRK_VARIANT = + SynchedEntityData.defineId(ElkaEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ATTACK_TICKS = + SynchedEntityData.defineId(ElkaEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor CRY_TICKS = + SynchedEntityData.defineId(ElkaEntity.class, EntityDataSerializers.INT); + + private static final String SITTING_KEY = "Sitting"; + private static final String SIT_TICKS_KEY = "SitTicks"; + private static final String SIT_COOLDOWN_KEY = "SitCooldown"; + private static final String QUIRK_TICKS_KEY = "QuirkTicks"; + private static final String QUIRK_VARIANT_KEY = "QuirkVariant"; + + private static final String MAIN_CONTROLLER = "main_controller"; + private static final String SIT_TRANSITION_CONTROLLER = "sit_transition_controller"; + private static final String START_SIT_TRIGGER = "start_sit"; + private static final String GET_UP_TRIGGER = "get_up"; + + private static final int IDLE_ANIMATION_CYCLE_TICKS = 60; + private static final int QUIRK_ANIMATION_TICKS = 40; + private static final int QUIRK_CHANCE = 60; + private static final int SIT_MIN_TICKS = 20 * 60; + private static final int SIT_MAX_TICKS = 20 * 60 * 3; + private static final int SIT_COOLDOWN_TICKS = 20 * 60 * 6; + private static final int SIT_CHECK_CHANCE_SHADE = 300; + private static final int SIT_CHECK_CHANCE_OPEN = 1200; + private static final int ATTACK_ANIM_TICKS = 20; + private static final int CRY_ANIM_TICKS = 60; + + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation SIT_IDLE_ANIM = RawAnimation.begin().thenLoop("sit_idle"); + private static final RawAnimation QUIRK_ANIM = RawAnimation.begin().thenPlay("quirk"); + private static final RawAnimation QUIRK_2_ANIM = RawAnimation.begin().thenPlay("quirk_2"); + private static final RawAnimation QUIRK_3_ANIM = RawAnimation.begin().thenPlay("quirk_3"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + private static final RawAnimation CRY_ANIM = RawAnimation.begin().thenPlay("cry"); + private static final RawAnimation START_SIT_ANIM = RawAnimation.begin().thenPlay("sit"); + private static final RawAnimation GET_UP_ANIM = RawAnimation.begin().thenPlay("get_up"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int sitTicksRemaining; + private int sitCooldownTicks; + private int idleAnimationCycleTicks; + + public ElkaEntity(EntityType entityType, net.minecraft.world.level.Level level) { + super(entityType, level); + this.sitCooldownTicks = SIT_COOLDOWN_TICKS; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 34.0D) + .add(Attributes.MOVEMENT_SPEED, 0.22D) + .add(Attributes.ATTACK_DAMAGE, 7.0D) + .add(Attributes.FOLLOW_RANGE, 24.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.3D); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(SITTING, false); + builder.define(QUIRK_TICKS, 0); + builder.define(QUIRK_VARIANT, 0); + builder.define(ATTACK_TICKS, 0); + builder.define(CRY_TICKS, 0); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + if (!this.isBaby()) { + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.2D, true)); + } + this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); + this.goalSelector.addGoal(3, new TemptGoal(this, 1.1D, Ingredient.of(AntarchyObjects.PEACH.get()), false)); + this.goalSelector.addGoal(4, new ElkaSitGoal()); + this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new ElkaHurtByTargetGoal(this)); + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(AntarchyObjects.PEACH.get()); + } + + @Override + public ElkaEntity getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return AntarchyObjects.ELKA.get().create(level); + } + + @Override + public boolean requiresCustomPersistence() { + return true; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + public boolean isSitting() { + return this.entityData.get(SITTING); + } + + private void startSitting() { + this.entityData.set(SITTING, true); + this.sitTicksRemaining = Mth.nextInt(this.random, SIT_MIN_TICKS, SIT_MAX_TICKS); + this.getNavigation().stop(); + if (!this.level().isClientSide) { + this.triggerAnim(SIT_TRANSITION_CONTROLLER, START_SIT_TRIGGER); + } + } + + private void stopSitting() { + if (!this.isSitting()) { + return; + } + this.entityData.set(SITTING, false); + this.sitTicksRemaining = 0; + this.sitCooldownTicks = SIT_COOLDOWN_TICKS; + if (!this.level().isClientSide) { + this.triggerAnim(SIT_TRANSITION_CONTROLLER, GET_UP_TRIGGER); + } + } + + private boolean isEligibleToSit() { + return this.onGround() + && !this.isInWaterOrBubble() + && !this.isOnFire() + && !this.isLeashed() + && !this.isPassenger() + && !this.isVehicle() + && !this.isInLove() + && !this.isBaby() + && this.getTarget() == null + && this.getDeltaMovement().horizontalDistanceSqr() < 1.0E-4D + && this.getNavigation().isDone(); + } + + private boolean isNearShade() { + BlockPos base = this.blockPosition(); + for (BlockPos pos : BlockPos.betweenClosed(base.offset(-3, -1, -3), base.offset(3, 3, 3))) { + if (this.level().getBlockState(pos).is(BlockTags.LEAVES)) { + return true; + } + } + return false; + } + + private void tickSitDecision() { + if (this.isSitting()) { + if (this.getTarget() != null || this.isInWaterOrBubble() || this.isOnFire() || this.hurtTime > 0 + || this.isLeashed() || this.isPassenger() || this.isVehicle() || this.isInLove() || !this.onGround()) { + this.stopSitting(); + return; + } + if (this.sitTicksRemaining > 0) { + this.sitTicksRemaining--; + if (this.sitTicksRemaining <= 0) { + this.stopSitting(); + } + } + return; + } + + if (this.sitCooldownTicks > 0) { + this.sitCooldownTicks--; + return; + } + + if (!this.isEligibleToSit()) { + return; + } + + int chance = this.isNearShade() ? SIT_CHECK_CHANCE_SHADE : SIT_CHECK_CHANCE_OPEN; + if (this.random.nextInt(chance) == 0) { + this.startSitting(); + } + } + + private void tickIdleQuirk() { + if (this.entityData.get(QUIRK_TICKS) > 0 || this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D + || this.getTarget() != null) { + this.idleAnimationCycleTicks = 0; + return; + } + + this.idleAnimationCycleTicks++; + if (this.idleAnimationCycleTicks < IDLE_ANIMATION_CYCLE_TICKS) { + return; + } + this.idleAnimationCycleTicks = 0; + + if (this.random.nextInt(QUIRK_CHANCE) != 0) { + return; + } + + this.entityData.set(QUIRK_TICKS, QUIRK_ANIMATION_TICKS); + if (this.isBaby()) { + this.entityData.set(QUIRK_VARIANT, 0); + } else if (this.isSitting()) { + this.entityData.set(QUIRK_VARIANT, 2); + } else { + this.entityData.set(QUIRK_VARIANT, this.random.nextBoolean() ? 0 : 1); + } + } + + public void triggerCry() { + this.entityData.set(CRY_TICKS, CRY_ANIM_TICKS); + } + + public void triggerAttackAnim() { + this.entityData.set(ATTACK_TICKS, ATTACK_ANIM_TICKS); + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + boolean hurt = super.doHurtTarget(target); + if (hurt) { + this.triggerAttackAnim(); + } + return hurt; + } + + @Override + public void tick() { + super.tick(); + + if (this.level().isClientSide) { + return; + } + + int quirkTicks = this.entityData.get(QUIRK_TICKS); + if (quirkTicks > 0) { + this.entityData.set(QUIRK_TICKS, quirkTicks - 1); + } + + int attackTicks = this.entityData.get(ATTACK_TICKS); + if (attackTicks > 0) { + this.entityData.set(ATTACK_TICKS, attackTicks - 1); + } + + int cryTicks = this.entityData.get(CRY_TICKS); + if (cryTicks > 0) { + this.entityData.set(CRY_TICKS, cryTicks - 1); + } + + this.tickSitDecision(); + this.tickIdleQuirk(); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + this.stopSitting(); + return super.hurt(source, amount); + } + + @Override + public EntityDimensions getDefaultDimensions(Pose pose) { + return this.isBaby() + ? EntityDimensions.scalable(1.0F, 1.5F) + : EntityDimensions.scalable(2.2F, 2.75F); + } + + @Override + protected void ageBoundaryReached() { + super.ageBoundaryReached(); + this.refreshDimensions(); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean(SITTING_KEY, this.isSitting()); + tag.putInt(SIT_TICKS_KEY, this.sitTicksRemaining); + tag.putInt(SIT_COOLDOWN_KEY, this.sitCooldownTicks); + tag.putInt(QUIRK_TICKS_KEY, this.entityData.get(QUIRK_TICKS)); + tag.putInt(QUIRK_VARIANT_KEY, this.entityData.get(QUIRK_VARIANT)); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.entityData.set(SITTING, tag.getBoolean(SITTING_KEY)); + this.sitTicksRemaining = tag.getInt(SIT_TICKS_KEY); + this.sitCooldownTicks = tag.contains(SIT_COOLDOWN_KEY) ? tag.getInt(SIT_COOLDOWN_KEY) : SIT_COOLDOWN_TICKS; + this.entityData.set(QUIRK_TICKS, tag.getInt(QUIRK_TICKS_KEY)); + this.entityData.set(QUIRK_VARIANT, tag.getInt(QUIRK_VARIANT_KEY)); + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.PANDA_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.PANDA_BITE; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.PANDA_DEATH; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, MAIN_CONTROLLER, 0, this::mainAnimController)); + if (!this.isBaby()) { + controllers.add(new AnimationController<>(this, SIT_TRANSITION_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(START_SIT_TRIGGER, START_SIT_ANIM) + .triggerableAnim(GET_UP_TRIGGER, GET_UP_ANIM)); + } + } + + private PlayState mainAnimController(AnimationState state) { + if (this.entityData.get(ATTACK_TICKS) > 0) { + return state.setAndContinue(ATTACK_ANIM); + } + if (this.entityData.get(CRY_TICKS) > 0) { + return state.setAndContinue(CRY_ANIM); + } + if (state.isMoving()) { + return state.setAndContinue(WALK_ANIM); + } + if (this.entityData.get(QUIRK_TICKS) > 0) { + return switch (this.entityData.get(QUIRK_VARIANT)) { + case 1 -> state.setAndContinue(QUIRK_2_ANIM); + case 2 -> state.setAndContinue(QUIRK_3_ANIM); + default -> state.setAndContinue(QUIRK_ANIM); + }; + } + if (this.isSitting()) { + return state.setAndContinue(SIT_IDLE_ANIM); + } + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + private final class ElkaSitGoal extends Goal { + private ElkaSitGoal() { + this.setFlags(java.util.EnumSet.of(Flag.MOVE, Flag.JUMP, Flag.LOOK)); + } + + @Override + public boolean canUse() { + return ElkaEntity.this.isSitting(); + } + + @Override + public boolean canContinueToUse() { + return ElkaEntity.this.isSitting(); + } + + @Override + public void start() { + ElkaEntity.this.getNavigation().stop(); + ElkaEntity.this.setDeltaMovement(0.0D, ElkaEntity.this.getDeltaMovement().y, 0.0D); + } + + @Override + public void tick() { + ElkaEntity.this.getNavigation().stop(); + ElkaEntity.this.setZza(0.0F); + ElkaEntity.this.setXxa(0.0F); + } + } + + private static final class ElkaHurtByTargetGoal extends HurtByTargetGoal { + private ElkaHurtByTargetGoal(ElkaEntity elka) { + super(elka); + } + + @Override + public void start() { + super.start(); + if (this.mob instanceof ElkaEntity elka && elka.isBaby()) { + this.alertOthers(); + this.stop(); + } + } + + @Override + protected void alertOther(Mob mob, LivingEntity target) { + if (mob instanceof ElkaEntity elka && !elka.isBaby()) { + elka.triggerCry(); + super.alertOther(mob, target); + } + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ElythiaFrog.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ElythiaFrog.java new file mode 100644 index 00000000..5a1a130b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ElythiaFrog.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.animal.FrogVariant; +import net.minecraft.world.entity.animal.frog.Frog; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; + +public final class ElythiaFrog { + public static final ResourceKey ELYTHIA = ResourceKey.create( + net.minecraft.core.registries.Registries.DIMENSION, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia") + ); + public static final ResourceKey VARIANT = ResourceKey.create( + net.minecraft.core.registries.Registries.FROG_VARIANT, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia") + ); + public static final ResourceLocation TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/frog/frog_elythia.png"); + + private ElythiaFrog() { + } + + public static boolean shouldBecomeElythiaFrog(ServerLevelAccessor level) { + return level.getLevel().dimension().equals(ELYTHIA); + } + + public static void applyVariant(Frog frog) { + BuiltInRegistries.FROG_VARIANT.getHolder(VARIANT).ifPresent(frog::setVariant); + } + + public static boolean isElythiaFrog(Frog frog) { + return frog.getVariant().unwrapKey().filter(VARIANT::equals).isPresent(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/GlimmerEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/GlimmerEntity.java deleted file mode 100644 index 79732784..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/GlimmerEntity.java +++ /dev/null @@ -1,430 +0,0 @@ -package com.craisinlord.antarchy.content.entity; - -import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.AntarchyTags; -import com.craisinlord.antarchy.content.GlimmerParticles; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; -import net.minecraft.core.BlockPos; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.network.syncher.EntityDataSerializers; -import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.world.DifficultyInstance; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.entity.AgeableMob; -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.ai.goal.FloatGoal; -import net.minecraft.world.entity.ai.goal.FollowParentGoal; -import net.minecraft.world.entity.ai.goal.Goal; -import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; -import net.minecraft.world.entity.ai.goal.PanicGoal; -import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; -import net.minecraft.world.entity.ai.goal.TemptGoal; -import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; -import net.minecraft.world.entity.ai.util.DefaultRandomPos; -import net.minecraft.world.entity.animal.Animal; -import net.minecraft.world.entity.monster.Monster; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.util.Mth; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraft.world.level.pathfinder.Path; -import net.minecraft.world.phys.Vec3; -import net.minecraft.server.level.ServerLevel; -import org.jetbrains.annotations.Nullable; -import software.bernie.geckolib.animatable.GeoEntity; -import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.animation.AnimatableManager; -import software.bernie.geckolib.animation.AnimationController; -import software.bernie.geckolib.animation.AnimationState; -import software.bernie.geckolib.animation.PlayState; -import software.bernie.geckolib.animation.RawAnimation; -import software.bernie.geckolib.util.GeckoLibUtil; - -public class GlimmerEntity extends Animal implements GeoEntity { - private static final EntityDataAccessor GLOW_TICKS = - SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); - private static final RawAnimation RUN_ANIM = RawAnimation.begin().thenLoop("run"); - private static final String QUIRK_CONTROLLER = "quirk_controller"; - private static final String QUIRK_TRIGGER = "quirk"; - - private static final int TRUST_REQUIRED_FEEDS = 3; - private static final int GRACE_DURATION_TICKS = 2400; - private static final int GRACE_COOLDOWN_TICKS = 6000; - private static final int GLOW_LIGHT_THRESHOLD = 7; - private static final int GLOW_CHECK_INTERVAL_TICKS = 20; - private static final int GLOW_TRANSITION_TICKS = 10; - private static final double WALK_SPEED_THRESHOLD_SQR = 0.0009D; - private static final double RUN_SPEED_THRESHOLD_SQR = 0.0035D; - - private static final int MIN_QUIRK_COOLDOWN = 20 * 8; - private static final int MAX_QUIRK_COOLDOWN = 20 * 25; - - private static final String TRUST_KEY = "GlimmerTrust"; - private static final String TRUST_PLAYER_KEY = "Player"; - private static final String TRUST_FEED_COUNT_KEY = "FeedCount"; - private static final String TRUST_TRUSTED_KEY = "Trusted"; - private static final String TRUST_COOLDOWN_KEY = "GraceCooldown"; - private static final String GLOWING_SAVE_KEY = "Glowing"; - - private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - private final Map trustByPlayer = new HashMap<>(); - - private boolean glowing; - private int quirkCooldown = createQuirkCooldown(); - - public GlimmerEntity(EntityType entityType, Level level) { - super(entityType, level); - } - - public static AttributeSupplier.Builder createAttributes() { - return net.minecraft.world.entity.Mob.createMobAttributes() - .add(Attributes.MAX_HEALTH, AntarchySettings.glimmerHealth()) - .add(Attributes.MOVEMENT_SPEED, 0.3D) - .add(Attributes.FOLLOW_RANGE, 24.0D); - } - - @Override - protected void defineSynchedData(SynchedEntityData.Builder builder) { - super.defineSynchedData(builder); - builder.define(GLOW_TICKS, 0); - } - - @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); - this.goalSelector.addGoal(1, new PanicGoal(this, 1.6D)); - this.goalSelector.addGoal(2, new TemptGoal(this, 1.1D, Ingredient.of(AntarchyTags.Items.GLIMMER_FOOD), false)); - this.goalSelector.addGoal(3, new AvoidUntrustedPlayerGoal(10.0F, 1.15D)); - this.goalSelector.addGoal(4, new net.minecraft.world.entity.ai.goal.AvoidEntityGoal<>(this, Monster.class, 8.0F, 1.0D, 1.2D)); - this.goalSelector.addGoal(5, new FollowParentGoal(this, 1.25D)); - this.goalSelector.addGoal(6, new WaterAvoidingRandomStrollGoal(this, 1.0D)); - this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 8.0F)); - this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); - } - - @Override - public boolean isFood(ItemStack stack) { - return stack.is(AntarchyTags.Items.GLIMMER_FOOD); - } - - @Override - public GlimmerEntity getBreedOffspring(ServerLevel level, AgeableMob otherParent) { - return null; - } - - @Override - public InteractionResult mobInteract(Player player, InteractionHand hand) { - ItemStack stack = player.getItemInHand(hand); - if (stack.is(AntarchyTags.Items.GLIMMER_FOOD)) { - return this.feedGlimmerFood(player, stack, hand); - } - return super.mobInteract(player, hand); - } - - private InteractionResult feedGlimmerFood(Player player, ItemStack stack, InteractionHand hand) { - if (this.level().isClientSide) { - return InteractionResult.CONSUME; - } - - this.usePlayerItem(player, hand, stack); - this.playSound(SoundEvents.GENERIC_EAT, 1.0F, 1.0F + (this.random.nextFloat() - 0.5F) * 0.2F); - - if (!this.isBaby()) { - TrustEntry entry = this.trustByPlayer.computeIfAbsent(player.getUUID(), id -> new TrustEntry()); - if (!entry.trusted) { - entry.feedCount++; - if (entry.feedCount >= TRUST_REQUIRED_FEEDS) { - entry.trusted = true; - } - } else if (this.glowing && entry.graceCooldown <= 0) { - player.addEffect(new MobEffectInstance(AntarchyObjects.GLIMMERS_GRACE.get(), GRACE_DURATION_TICKS, 0, false, true, true)); - entry.graceCooldown = GRACE_COOLDOWN_TICKS; - } - } - - return InteractionResult.SUCCESS; - } - - public boolean isTrusted(UUID playerId) { - TrustEntry entry = this.trustByPlayer.get(playerId); - return entry != null && entry.trusted; - } - - private boolean hasAnyTrustProgress() { - for (TrustEntry entry : this.trustByPlayer.values()) { - if (entry.trusted || entry.feedCount > 0) { - return true; - } - } - return false; - } - - @Override - public boolean isPersistenceRequired() { - return super.isPersistenceRequired() || (!this.isBaby() && this.hasAnyTrustProgress()); - } - - public boolean isGlowingState() { - return this.getGlowTicks() > 0; - } - - public float getGlowBlend(float partialTick) { - return Mth.clamp((this.getGlowTicks() + partialTick) / (float) GLOW_TRANSITION_TICKS, 0.0F, 1.0F); - } - - @Override - public void tick() { - super.tick(); - - if (this.quirkCooldown > 0) { - this.quirkCooldown--; - } - - if (!this.level().isClientSide && this.tickCount % GLOW_CHECK_INTERVAL_TICKS == 0) { - this.glowing = this.level().getMaxLocalRawBrightness(this.blockPosition()) <= GLOW_LIGHT_THRESHOLD; - } - - if (!this.level().isClientSide) { - int glowTicks = this.getGlowTicks(); - if (this.glowing && glowTicks < GLOW_TRANSITION_TICKS) { - this.setGlowTicks(glowTicks + 1); - } else if (!this.glowing && glowTicks > 0) { - this.setGlowTicks(glowTicks - 1); - } - } - - if (this.isGlowingState()) { - GlimmerParticles.tickAmbient(this, this.getDeltaMovement().horizontalDistanceSqr() > RUN_SPEED_THRESHOLD_SQR); - } - - if (this.level().isClientSide) { - return; - } - - for (TrustEntry entry : this.trustByPlayer.values()) { - if (entry.graceCooldown > 0) { - entry.graceCooldown--; - } - } - } - - @Override - public void addAdditionalSaveData(CompoundTag tag) { - super.addAdditionalSaveData(tag); - tag.putBoolean(GLOWING_SAVE_KEY, this.glowing); - - ListTag trustList = new ListTag(); - for (Map.Entry entry : this.trustByPlayer.entrySet()) { - CompoundTag entryTag = new CompoundTag(); - entryTag.putUUID(TRUST_PLAYER_KEY, entry.getKey()); - entryTag.putInt(TRUST_FEED_COUNT_KEY, entry.getValue().feedCount); - entryTag.putBoolean(TRUST_TRUSTED_KEY, entry.getValue().trusted); - entryTag.putInt(TRUST_COOLDOWN_KEY, entry.getValue().graceCooldown); - trustList.add(entryTag); - } - tag.put(TRUST_KEY, trustList); - } - - @Override - public void readAdditionalSaveData(CompoundTag tag) { - super.readAdditionalSaveData(tag); - this.glowing = tag.getBoolean(GLOWING_SAVE_KEY); - this.setGlowTicks(this.glowing ? GLOW_TRANSITION_TICKS : 0); - - this.trustByPlayer.clear(); - for (net.minecraft.nbt.Tag rawEntry : tag.getList(TRUST_KEY, net.minecraft.nbt.Tag.TAG_COMPOUND)) { - CompoundTag entryTag = (CompoundTag) rawEntry; - TrustEntry entry = new TrustEntry(); - entry.feedCount = entryTag.getInt(TRUST_FEED_COUNT_KEY); - entry.trusted = entryTag.getBoolean(TRUST_TRUSTED_KEY); - entry.graceCooldown = entryTag.getInt(TRUST_COOLDOWN_KEY); - this.trustByPlayer.put(entryTag.getUUID(TRUST_PLAYER_KEY), entry); - } - } - - @Override - @Nullable - public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { - GlimmerSpawnData glimmerSpawnData = spawnGroupData instanceof GlimmerSpawnData data ? data : new GlimmerSpawnData(); - SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); - - if ((spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION)) { - if (glimmerSpawnData.adultSpawned) { - this.setAge(-24000); - } else { - glimmerSpawnData.adultSpawned = true; - } - } - - return result != null ? result : glimmerSpawnData; - } - - @Override - public net.minecraft.world.entity.EntityDimensions getDefaultDimensions(net.minecraft.world.entity.Pose pose) { - net.minecraft.world.entity.EntityDimensions dimensions = super.getDefaultDimensions(pose); - if (this.isBaby()) { - return dimensions; - } - return net.minecraft.world.entity.EntityDimensions.scalable(dimensions.width() * 2.0F, dimensions.height() * 2.0F); - } - - @Override - protected void ageBoundaryReached() { - super.ageBoundaryReached(); - this.refreshDimensions(); - } - - @Override - protected SoundEvent getAmbientSound() { - return SoundEvents.FOX_AMBIENT; - } - - @Override - protected SoundEvent getHurtSound(DamageSource damageSource) { - return SoundEvents.FOX_HURT; - } - - @Override - protected SoundEvent getDeathSound() { - return SoundEvents.FOX_DEATH; - } - - @Override - protected float getSoundVolume() { - return 0.8F; - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); - controllers.add(new AnimationController<>(this, QUIRK_CONTROLLER, 0, state -> PlayState.STOP) - .triggerableAnim(QUIRK_TRIGGER, RawAnimation.begin().thenPlay("quirk"))); - } - - private PlayState mainAnimController(AnimationState state) { - double speedSqr = this.getDeltaMovement().horizontalDistanceSqr(); - if (speedSqr > RUN_SPEED_THRESHOLD_SQR) { - return state.setAndContinue(RUN_ANIM); - } - if (speedSqr > WALK_SPEED_THRESHOLD_SQR) { - return state.setAndContinue(WALK_ANIM); - } - - if (this.quirkCooldown <= 0) { - this.quirkCooldown = this.createQuirkCooldown(); - this.triggerAnim(QUIRK_CONTROLLER, QUIRK_TRIGGER); - } - - return state.setAndContinue(IDLE_ANIM); - } - - private int createQuirkCooldown() { - return MIN_QUIRK_COOLDOWN + this.random.nextInt(MAX_QUIRK_COOLDOWN - MIN_QUIRK_COOLDOWN + 1); - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.geoCache; - } - - private int getGlowTicks() { - return this.entityData.get(GLOW_TICKS); - } - - private void setGlowTicks(int glowTicks) { - this.entityData.set(GLOW_TICKS, Mth.clamp(glowTicks, 0, GLOW_TRANSITION_TICKS)); - } - - private static final class TrustEntry { - int feedCount; - boolean trusted; - int graceCooldown; - } - - private static final class GlimmerSpawnData implements SpawnGroupData { - private boolean adultSpawned; - } - - private final class AvoidUntrustedPlayerGoal extends Goal { - private final float maxDistance; - private final double speedModifier; - private Player avoidTarget; - private Path path; - - AvoidUntrustedPlayerGoal(float maxDistance, double speedModifier) { - this.maxDistance = maxDistance; - this.speedModifier = speedModifier; - this.setFlags(EnumSet.of(Flag.MOVE)); - } - - @Override - public boolean canUse() { - if (GlimmerEntity.this.isBaby()) { - return false; - } - - Player nearest = GlimmerEntity.this.level().getNearestPlayer(GlimmerEntity.this, this.maxDistance); - if (nearest == null || nearest.isSpectator() || nearest.isCreative() - || GlimmerEntity.this.isTrusted(nearest.getUUID()) - || GlimmerEntity.this.distanceToSqr(nearest) > (double) (this.maxDistance * this.maxDistance)) { - return false; - } - - Path escapePath = this.findEscapePath(nearest); - if (escapePath == null) { - return false; - } - - this.avoidTarget = nearest; - this.path = escapePath; - return true; - } - - @Override - public boolean canContinueToUse() { - return this.avoidTarget != null - && this.avoidTarget.isAlive() - && !GlimmerEntity.this.isTrusted(this.avoidTarget.getUUID()) - && !GlimmerEntity.this.getNavigation().isDone(); - } - - @Override - public void start() { - GlimmerEntity.this.getNavigation().moveTo(this.path, this.speedModifier); - } - - @Override - public void stop() { - this.avoidTarget = null; - this.path = null; - } - - @Nullable - private Path findEscapePath(Player toAvoid) { - Vec3 escapeVec = DefaultRandomPos.getPosAway(GlimmerEntity.this, 16, 7, toAvoid.position()); - if (escapeVec == null) { - return null; - } - return GlimmerEntity.this.getNavigation().createPath(BlockPos.containing(escapeVec), 0); - } - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java new file mode 100644 index 00000000..777b6f21 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java @@ -0,0 +1,303 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import java.util.EnumSet; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.AgeableMob; +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.ai.goal.BreedGoal; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.FollowParentGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.PanicGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.TemptGoal; +import net.minecraft.world.entity.ai.util.DefaultRandomPos; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.phys.Vec3; +import net.minecraft.server.level.ServerLevel; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class OuranwoodDeerEntity extends Animal implements GeoEntity { + public enum Variant { BUCK, DOE } + + private static final EntityDataAccessor VARIANT = + SynchedEntityData.defineId(OuranwoodDeerEntity.class, EntityDataSerializers.INT); + private static final String VARIANT_KEY = "Variant"; + + private static final float ADULT_HITBOX_SCALE = 1.5F; + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation RUN_ANIM = RawAnimation.begin().thenLoop("run"); + private static final String QUIRK_CONTROLLER = "quirk_controller"; + private static final String QUIRK_TRIGGER = "quirk"; + + private static final double WALK_SPEED_THRESHOLD_SQR = 0.0009D; + private static final double RUN_SPEED_THRESHOLD_SQR = 0.0035D; + private static final double WALK_STROLL_SPEED = 1.0D; + private static final double RUN_STROLL_SPEED = 1.45D; + + private static final int MIN_QUIRK_COOLDOWN = 20 * 8; + private static final int MAX_QUIRK_COOLDOWN = 20 * 25; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int quirkCooldown = createQuirkCooldown(); + + public OuranwoodDeerEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + public static AttributeSupplier.Builder createAttributes() { + return net.minecraft.world.entity.Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.ouranwoodDeerHealth()) + .add(Attributes.MOVEMENT_SPEED, 0.3D) + .add(Attributes.FOLLOW_RANGE, 24.0D); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(VARIANT, Variant.DOE.ordinal()); + } + + public Variant getVariant() { + return Variant.values()[Mth.clamp(this.entityData.get(VARIANT), 0, Variant.values().length - 1)]; + } + + public void setVariant(Variant variant) { + this.entityData.set(VARIANT, variant.ordinal()); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new PanicGoal(this, 1.8D)); + this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); + this.goalSelector.addGoal(3, new TemptGoal(this, 1.1D, Ingredient.of(AntarchyTags.Items.OURANWOOD_DEER_FOOD), false)); + this.goalSelector.addGoal(4, new net.minecraft.world.entity.ai.goal.AvoidEntityGoal<>(this, Monster.class, 8.0F, 1.1D, 1.5D)); + this.goalSelector.addGoal(5, new FollowParentGoal(this, 1.25D)); + this.goalSelector.addGoal(6, new OuranwoodDeerStrollGoal()); + this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(AntarchyTags.Items.OURANWOOD_DEER_FOOD); + } + + @Override + public OuranwoodDeerEntity getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return AntarchyObjects.OURANWOOD_DEER.get().create(level); + } + + @Override + public void tick() { + super.tick(); + + if (this.quirkCooldown > 0) { + this.quirkCooldown--; + } + + if (this.level().isClientSide) { + return; + } + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putString(VARIANT_KEY, this.getVariant().name()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.contains(VARIANT_KEY)) { + try { + this.setVariant(Variant.valueOf(tag.getString(VARIANT_KEY))); + } catch (IllegalArgumentException ignored) { + this.setVariant(Variant.DOE); + } + } + } + + @Override + @Nullable + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { + DeerSpawnData deerSpawnData = spawnGroupData instanceof DeerSpawnData data ? data : new DeerSpawnData(); + SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + + if (spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION || spawnReason == MobSpawnType.SPAWN_EGG) { + this.setVariant(Variant.values()[this.random.nextInt(Variant.values().length)]); + } + + if ((spawnReason == MobSpawnType.NATURAL || spawnReason == MobSpawnType.CHUNK_GENERATION)) { + if (deerSpawnData.adultSpawned) { + this.setAge(-24000); + } else { + deerSpawnData.adultSpawned = true; + } + } + + return result != null ? result : deerSpawnData; + } + + @Override + public net.minecraft.world.entity.EntityDimensions getDefaultDimensions(net.minecraft.world.entity.Pose pose) { + net.minecraft.world.entity.EntityDimensions dimensions = super.getDefaultDimensions(pose); + if (this.isBaby()) { + return dimensions; + } + return net.minecraft.world.entity.EntityDimensions.scalable( + dimensions.width() * ADULT_HITBOX_SCALE, + dimensions.height() * ADULT_HITBOX_SCALE + ); + } + + @Override + protected void ageBoundaryReached() { + super.ageBoundaryReached(); + this.refreshDimensions(); + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.FOX_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.FOX_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.FOX_DEATH; + } + + @Override + protected float getSoundVolume() { + return 0.8F; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); + controllers.add(new AnimationController<>(this, QUIRK_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(QUIRK_TRIGGER, RawAnimation.begin().thenPlay("quirk"))); + } + + private PlayState mainAnimController(AnimationState state) { + double speedSqr = this.getDeltaMovement().horizontalDistanceSqr(); + if (this.hurtTime > 0 || speedSqr > RUN_SPEED_THRESHOLD_SQR) { + return state.setAndContinue(RUN_ANIM); + } + if (speedSqr > WALK_SPEED_THRESHOLD_SQR) { + return state.setAndContinue(WALK_ANIM); + } + + if (this.quirkCooldown <= 0) { + this.quirkCooldown = this.createQuirkCooldown(); + this.triggerAnim(QUIRK_CONTROLLER, QUIRK_TRIGGER); + } + + return state.setAndContinue(IDLE_ANIM); + } + + private int createQuirkCooldown() { + return MIN_QUIRK_COOLDOWN + this.random.nextInt(MAX_QUIRK_COOLDOWN - MIN_QUIRK_COOLDOWN + 1); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + private static final class DeerSpawnData implements SpawnGroupData { + private boolean adultSpawned; + } + + private final class OuranwoodDeerStrollGoal extends Goal { + private static final int RUN_CHANCE = 5; + @Nullable + private Vec3 targetPos; + private double speedModifier; + + private OuranwoodDeerStrollGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + public boolean canUse() { + if (OuranwoodDeerEntity.this.isVehicle() || !OuranwoodDeerEntity.this.getNavigation().isDone()) { + return false; + } + if (OuranwoodDeerEntity.this.getRandom().nextInt(reducedTickDelay(60)) != 0) { + return false; + } + + this.targetPos = DefaultRandomPos.getPos(OuranwoodDeerEntity.this, 10, 7); + if (this.targetPos == null) { + return false; + } + + this.speedModifier = this.pickSpeed(); + return true; + } + + @Override + public boolean canContinueToUse() { + return this.targetPos != null && !OuranwoodDeerEntity.this.getNavigation().isDone(); + } + + @Override + public void start() { + if (this.targetPos != null) { + OuranwoodDeerEntity.this.getNavigation().moveTo(this.targetPos.x, this.targetPos.y, this.targetPos.z, this.speedModifier); + } + } + + @Override + public void stop() { + this.targetPos = null; + } + + private double pickSpeed() { + if (OuranwoodDeerEntity.this.hurtTime > 0) { + return RUN_STROLL_SPEED; + } + return OuranwoodDeerEntity.this.random.nextInt(RUN_CHANCE) == 0 ? RUN_STROLL_SPEED : WALK_STROLL_SPEED; + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/PeachBoatEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/PeachBoatEntity.java new file mode 100644 index 00000000..287f0148 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/PeachBoatEntity.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; + +public class PeachBoatEntity extends Boat { + public PeachBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_boat")); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/PeachChestBoatEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/PeachChestBoatEntity.java new file mode 100644 index 00000000..27779150 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/PeachChestBoatEntity.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.entity.vehicle.ChestBoat; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; + +public class PeachChestBoatEntity extends ChestBoat { + public PeachChestBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_chest_boat")); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java index 1c7dcc9f..6b12ca98 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java @@ -370,7 +370,7 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { Player shoulderPlayer = this.shoulderPlayerId != null ? this.level().getPlayerByUUID(this.shoulderPlayerId) : null; - if (shoulderPlayer == null || !shoulderPlayer.isAlive()) { + if (shoulderPlayer == null || !shoulderPlayer.isAlive() || shoulderPlayer.isSpectator()) { this.dismountShoulder(); } else { this.tickClimbingToShoulder(shoulderPlayer); @@ -381,7 +381,7 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { if (this.isOnShoulder()) { Player shoulderPlayer = this.getShoulderPlayer(); - if (shoulderPlayer == null || !shoulderPlayer.isAlive()) { + if (shoulderPlayer == null || !shoulderPlayer.isAlive() || shoulderPlayer.isSpectator()) { this.dismountShoulder(); } else if (this.shoulderSneakGraceTicks <= 0 && shoulderPlayer.isShiftKeyDown()) { this.glideOffShoulder(); @@ -555,6 +555,10 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { return false; } + if (player.isSpectator()) { + return true; + } + if (this.isOnShoulder()) { if (!this.level().isClientSide) { this.glideOffShoulder(); @@ -629,6 +633,12 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { this.pickupAnimTicks = 0; return finalized; } + + @Override + public boolean shouldBeSaved() { + return super.shouldBeSaved() && !this.isOnShoulder() && !this.isClimbingToShoulder(); + } + @Override protected SoundEvent getAmbientSound() { return AntarchySoundEvents.FLYING_SQUIRREL_IDLE.get(); @@ -731,6 +741,9 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { } private void startShoulderMountSequence(Player player) { + if (player.isSpectator()) { + return; + } this.shoulderPlayerId = player.getUUID(); this.shoulderClimbStartPos = this.position(); this.climbingToShoulderTicks = SHOULDER_CLIMB_TICKS; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java new file mode 100644 index 00000000..85ea61a6 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java @@ -0,0 +1,124 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.entity.player.Player; + +public class GlimmerAntBehavior implements GlimmerVariantBehavior { + private static final ResourceLocation REACH_BOOST_ID = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmer_ant_reach_boost"); + private static final double REACH_BOOST_AMOUNT = 0.5D; + private static final float LARGE_ENEMY_MIN_HEALTH = 40.0F; + private static final int ABILITY_COOLDOWN_TICKS = 20 * 120; + private static final int STRENGTH_BURST_DURATION = 20 * 12; + + private static ResourceLocation rl(String path) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); + } + + @Override + public void registerGoals(GlimmerEntity entity) { + entity.addGoal(0, new FloatGoal(entity)); + entity.addGoal(5, new WaterAvoidingRandomStrollGoal(entity, 1.1D)); + entity.addGoal(6, new LookAtPlayerGoal(entity, Player.class, 8.0F)); + entity.addGoal(7, new RandomLookAroundGoal(entity)); + } + + @Override + public ResourceLocation modelGeo() { + return rl("geo/ant.geo.json"); + } + + @Override + public ResourceLocation animationFile() { + return rl("animations/ant.animation.json"); + } + + @Override + public ResourceLocation texture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/glimmer_ant.png"); + } + + @Override + public ResourceLocation emissiveTexture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/glimmer_ant_emmisive.png"); + } + + @Override + public SoundEvent ambientSound() { + return AntarchySoundEvents.ANT_AMBIENT.get(); + } + + @Override + public SoundEvent hurtSound() { + return AntarchySoundEvents.ANT_HURT.get(); + } + + @Override + public SoundEvent deathSound() { + return AntarchySoundEvents.ANT_HURT.get(); + } + + @Override + public EntityDimensions adultDimensions() { + // Matches the real ant's hitbox. + return EntityDimensions.scalable(0.6375F, 0.2125F); + } + + @Override + public void tickPassiveEveryTick(GlimmerEntity entity, Player owner) { + AttributeInstance instance = owner.getAttribute(Attributes.ENTITY_INTERACTION_RANGE); + if (instance == null) { + return; + } + if (instance.getModifier(REACH_BOOST_ID) == null) { + instance.addTransientModifier(new AttributeModifier(REACH_BOOST_ID, REACH_BOOST_AMOUNT, AttributeModifier.Operation.ADD_VALUE)); + } + } + + @Override + public void clearPassive(GlimmerEntity entity, Player owner) { + AttributeInstance instance = owner.getAttribute(Attributes.ENTITY_INTERACTION_RANGE); + if (instance != null) { + instance.removeModifier(REACH_BOOST_ID); + } + } + + @Override + public int abilityCooldownTicks() { + return ABILITY_COOLDOWN_TICKS; + } + + @Override + public void tickAbilityCheck(GlimmerEntity entity, Player owner) { + if (owner.getLastHurtMobTimestamp() != owner.tickCount) { + return; + } + + LivingEntity target = owner.getLastHurtMob(); + if (!(target instanceof Enemy) || target.getMaxHealth() < LARGE_ENEMY_MIN_HEALTH) { + return; + } + + owner.addEffect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, STRENGTH_BURST_DURATION, 1, false, true, true)); + owner.level().playSound(null, owner.blockPosition(), SoundEvents.PLAYER_ATTACK_STRONG, owner.getSoundSource(), 1.0F, 0.8F); + this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.ant", target.getDisplayName())); + entity.startAbilityCooldown(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java new file mode 100644 index 00000000..0c8ec870 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java @@ -0,0 +1,140 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.food.FoodData; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import org.jetbrains.annotations.Nullable; + +public class GlimmerAppleCowBehavior implements GlimmerVariantBehavior { + private static final int SHEAR_REGROW_TICKS = 20 * 60 * 3; + private static final float EXHAUSTION_REDUCTION = 0.25F; + private static final int LOW_FOOD_THRESHOLD = 16; + private static final int ABILITY_COOLDOWN_TICKS = 20 * 120; + + private static ResourceLocation rl(String path) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); + } + + @Override + public void registerGoals(GlimmerEntity entity) { + entity.addGoal(0, new FloatGoal(entity)); + entity.addGoal(5, new WaterAvoidingRandomStrollGoal(entity, 1.0D)); + entity.addGoal(6, new LookAtPlayerGoal(entity, Player.class, 8.0F)); + entity.addGoal(7, new RandomLookAroundGoal(entity)); + } + + @Override + public ResourceLocation modelGeo() { + return rl("geo/apple_cow.geo.json"); + } + + @Override + public ResourceLocation animationFile() { + return rl("animations/apple_cow.animation.json"); + } + + @Override + public ResourceLocation texture(GlimmerEntity entity) { + return entity.isShearCooldownActive() + ? rl("textures/entity/glimmer/apple_cow_glimmer_sheared.png") + : rl("textures/entity/glimmer/apple_cow_glimmer.png"); + } + + @Override + public ResourceLocation emissiveTexture(GlimmerEntity entity) { + return entity.isShearCooldownActive() + ? rl("textures/entity/glimmer/apple_cow_glimmer_sheared_emissive.png") + : rl("textures/entity/glimmer/apple_cow_glimmer_emissive.png"); + } + + @Override + public SoundEvent ambientSound() { + return SoundEvents.COW_AMBIENT; + } + + @Override + public SoundEvent hurtSound() { + return SoundEvents.COW_HURT; + } + + @Override + public SoundEvent deathSound() { + return SoundEvents.COW_DEATH; + } + + @Override + public EntityDimensions adultDimensions() { + // Matches the real Apple Cow's hitbox (extends vanilla Cow). + return EntityDimensions.scalable(0.9F, 1.4F); + } + + @Override + @Nullable + public InteractionResult onInteract(GlimmerEntity entity, Player player, ItemStack stack, InteractionHand hand) { + if (entity.isTame() || entity.isShearCooldownActive() || !stack.is(Items.SHEARS)) { + return null; + } + + if (entity.level().isClientSide) { + return InteractionResult.CONSUME; + } + + entity.startShearCooldown(SHEAR_REGROW_TICKS); + entity.playSound(SoundEvents.SHEEP_SHEAR, 1.0F, 1.0F); + stack.hurtAndBreak(1, player, hand == InteractionHand.MAIN_HAND + ? net.minecraft.world.entity.EquipmentSlot.MAINHAND + : net.minecraft.world.entity.EquipmentSlot.OFFHAND); + entity.spawnAtLocation(new net.minecraft.world.item.ItemStack(AntarchyObjects.SPIRIT_APPLE.get()), entity.getBbHeight() * 0.6F); + return InteractionResult.SUCCESS; + } + + @Override + public void tickPassiveEveryTick(GlimmerEntity entity, Player owner) { + FoodData food = owner.getFoodData(); + float current = food.getExhaustionLevel(); + float last = entity.getLastOwnerExhaustion(); + if (last >= 0.0F && current > last) { + owner.causeFoodExhaustion(-(current - last) * EXHAUSTION_REDUCTION); + } + entity.setLastOwnerExhaustion(food.getExhaustionLevel()); + } + + @Override + public void clearPassive(GlimmerEntity entity, Player owner) { + entity.setLastOwnerExhaustion(-1.0F); + } + + @Override + public int abilityCooldownTicks() { + return ABILITY_COOLDOWN_TICKS; + } + + @Override + public void tickAbilityCheck(GlimmerEntity entity, Player owner) { + if (owner.getFoodData().getFoodLevel() > LOW_FOOD_THRESHOLD) { + return; + } + + owner.addEffect(new MobEffectInstance(MobEffects.SATURATION, 20, 1, false, false, true)); + owner.addEffect(new MobEffectInstance(MobEffects.REGENERATION, 20 * 8, 1, false, true, true)); + entity.playSound(SoundEvents.COW_AMBIENT, 1.2F, 0.8F); + this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.apple_cow")); + entity.startAbilityCooldown(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerCompanionSavedData.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerCompanionSavedData.java new file mode 100644 index 00000000..ef75fe86 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerCompanionSavedData.java @@ -0,0 +1,94 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.saveddata.SavedData; + +/** + * Tracks each player's current Glimmer companion so taming a new one despawns the old, + * even if the old companion is in a different loaded dimension. + */ +public class GlimmerCompanionSavedData extends SavedData { + private static final String ID = "antarchy_glimmer_companions"; + private static final String ENTRIES_KEY = "Entries"; + private static final String OWNER_KEY = "Owner"; + private static final String COMPANION_KEY = "Companion"; + + private final Map companionByOwner = new HashMap<>(); + + public static GlimmerCompanionSavedData create() { + return new GlimmerCompanionSavedData(); + } + + public static GlimmerCompanionSavedData load(CompoundTag tag, HolderLookup.Provider registries) { + GlimmerCompanionSavedData data = new GlimmerCompanionSavedData(); + for (net.minecraft.nbt.Tag rawEntry : tag.getList(ENTRIES_KEY, net.minecraft.nbt.Tag.TAG_COMPOUND)) { + CompoundTag entryTag = (CompoundTag) rawEntry; + data.companionByOwner.put(entryTag.getUUID(OWNER_KEY), entryTag.getUUID(COMPANION_KEY)); + } + return data; + } + + @Override + public CompoundTag save(CompoundTag tag, HolderLookup.Provider registries) { + ListTag entries = new ListTag(); + for (Map.Entry entry : this.companionByOwner.entrySet()) { + CompoundTag entryTag = new CompoundTag(); + entryTag.putUUID(OWNER_KEY, entry.getKey()); + entryTag.putUUID(COMPANION_KEY, entry.getValue()); + entries.add(entryTag); + } + tag.put(ENTRIES_KEY, entries); + return tag; + } + + private static GlimmerCompanionSavedData get(MinecraftServer server) { + return server.overworld().getDataStorage().computeIfAbsent( + new SavedData.Factory(GlimmerCompanionSavedData::create, GlimmerCompanionSavedData::load, null), + ID + ); + } + + /** + * Records {@code newCompanion} as {@code owner}'s current Glimmer. Any previous + * companion found in a currently loaded dimension isn't removed - it just loses + * its owner and becomes a wild, re-tameable Glimmer again. + */ + public static void replaceCompanion(MinecraftServer server, UUID owner, UUID newCompanion) { + GlimmerCompanionSavedData data = get(server); + UUID previous = data.companionByOwner.put(owner, newCompanion); + data.setDirty(); + + if (previous == null || previous.equals(newCompanion)) { + return; + } + + for (ServerLevel level : server.getAllLevels()) { + Entity entity = level.getEntity(previous); + if (entity instanceof GlimmerEntity glimmer) { + glimmer.setTame(false, true); + glimmer.setOwnerUUID(null); + return; + } + } + } + + /** + * Removes {@code owner}'s companion record if it currently points at {@code companion}, + * used when that Glimmer is captured into a bottle rather than replaced by a new one. + */ + public static void clearCompanion(MinecraftServer server, UUID owner, UUID companion) { + GlimmerCompanionSavedData data = get(server); + if (companion.equals(data.companionByOwner.get(owner))) { + data.companionByOwner.remove(owner); + data.setDirty(); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java new file mode 100644 index 00000000..60292e1b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java @@ -0,0 +1,148 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.bloodglass.BloodglassAccess; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +public class GlimmerElkaBehavior implements GlimmerVariantBehavior { + private static final int PASSIVE_REFRESH_DURATION = 20 * 4; + private static final int WARD_AMPLIFIER = 1; + private static final int ABILITY_COOLDOWN_TICKS = 20 * 60; + private static final int CRY_ANIM_TICKS = 40; + private static final double SHOCKWAVE_RADIUS = 6.0D; + private static final double SHOCKWAVE_KNOCKBACK = 1.3D; + + private static ResourceLocation rl(String path) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); + } + + @Override + public void registerGoals(GlimmerEntity entity) { + entity.addGoal(0, new FloatGoal(entity)); + entity.addGoal(5, new WaterAvoidingRandomStrollGoal(entity, 1.0D)); + entity.addGoal(6, new LookAtPlayerGoal(entity, Player.class, 8.0F)); + entity.addGoal(7, new RandomLookAroundGoal(entity)); + } + + @Override + public ResourceLocation modelGeo() { + return rl("geo/elka.geo.json"); + } + + @Override + public ResourceLocation animationFile() { + return rl("animations/elka.animation.json"); + } + + @Override + public ResourceLocation texture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/elka_glimmer.png"); + } + + @Override + public ResourceLocation emissiveTexture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/elka_glimmer_emmisive.png"); + } + + @Override + public SoundEvent ambientSound() { + return SoundEvents.PANDA_AMBIENT; + } + + @Override + public SoundEvent hurtSound() { + return SoundEvents.PANDA_BITE; + } + + @Override + public SoundEvent deathSound() { + return SoundEvents.PANDA_DEATH; + } + + @Override + public EntityDimensions adultDimensions() { + return EntityDimensions.scalable(2.2F, 3.5F); + } + + @Override + public EntityDimensions babyDimensions() { + return EntityDimensions.scalable(1.0F, 1.5F); + } + + @Override + public void tickPassive(GlimmerEntity entity, Player owner) { + owner.addEffect(new MobEffectInstance(AntarchyObjects.BLOODGLASS_WARD.get(), PASSIVE_REFRESH_DURATION, WARD_AMPLIFIER, false, false, true)); + } + + @Override + public void tickPassiveEveryTick(GlimmerEntity entity, Player owner) { + if (!(owner instanceof BloodglassAccess access)) { + return; + } + + long lostNow = access.antarchy$getArmorShieldLostCount() + access.antarchy$getAppleShieldLostCount(); + long lastLost = entity.getLastOwnerShieldLostCount(); + if (lastLost >= 0L && lostNow > lastLost && !entity.isAbilityOnCooldown()) { + this.shatterWard(entity, owner); + } + entity.setLastOwnerShieldLostCount(lostNow); + } + + @Override + public void clearPassive(GlimmerEntity entity, Player owner) { + entity.setLastOwnerShieldLostCount(-1L); + } + + @Override + public int abilityCooldownTicks() { + return ABILITY_COOLDOWN_TICKS; + } + + @Override + @Nullable + public software.bernie.geckolib.animation.RawAnimation abilityAnimation() { + return software.bernie.geckolib.animation.RawAnimation.begin().thenPlay("cry"); + } + + private void shatterWard(GlimmerEntity entity, Player owner) { + entity.playAbilityAnimation(CRY_ANIM_TICKS); + entity.playSound(SoundEvents.PANDA_CANT_BREED, 1.2F, 0.7F); + entity.level().playSound(null, entity.blockPosition(), SoundEvents.GLASS_BREAK, entity.getSoundSource(), 1.0F, 0.6F); + + AABB area = owner.getBoundingBox().inflate(SHOCKWAVE_RADIUS); + for (Entity nearby : owner.level().getEntities(owner, area)) { + if (nearby instanceof Projectile projectile) { + Vec3 away = projectile.position().subtract(owner.position()).normalize(); + projectile.setDeltaMovement(away.scale(1.5D)); + continue; + } + + if (nearby instanceof LivingEntity living && (nearby instanceof Enemy || living.getLastHurtByMob() == owner)) { + Vec3 away = living.position().subtract(owner.position()); + double horizontalDistance = Math.max(0.1D, away.horizontalDistance()); + living.knockback(SHOCKWAVE_KNOCKBACK, -away.x / horizontalDistance, -away.z / horizontalDistance); + } + } + + this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.elka")); + entity.startAbilityCooldown(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java new file mode 100644 index 00000000..f907feef --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java @@ -0,0 +1,551 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.client.particle.GlimmerParticles; +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.network.chat.Component; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.Mth; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.SpawnGroupData; +import net.minecraft.world.entity.TamableAnimal; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class GlimmerEntity extends TamableAnimal implements GeoEntity { + private static final ResourceKey GLIMMERING_POOLS = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmering_pools") + ); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + + private static final EntityDataAccessor VARIANT = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor SHEAR_COOLDOWN = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor FADE_TICKS = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor FOLLOWING = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor ABILITY_COOLDOWN = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor GROWTH_SCALE = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.FLOAT); + private static final EntityDataAccessor ABILITY_ANIM_TICKS = + SynchedEntityData.defineId(GlimmerEntity.class, EntityDataSerializers.INT); + + public static final int FADE_DURATION_TICKS = 40; + private static final int PASSIVE_RANGE = 16; + private static final int PASSIVE_EFFECT_REFRESH_TICKS = 60; + + private static final String VARIANT_KEY = "GlimmerVariant"; + private static final String SHEAR_COOLDOWN_KEY = "ShearCooldown"; + private static final String VARIANT_LOCKED_KEY = "VariantLocked"; + private static final String FOLLOWING_KEY = "GlimmerFollowing"; + private static final String ABILITY_COOLDOWN_KEY = "AbilityCooldown"; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private boolean variantLocked; + private float lastOwnerExhaustion = -1.0F; + private long lastOwnerShieldLostCount = -1L; + + public GlimmerEntity(EntityType entityType, Level level) { + super(entityType, level); + this.noPhysics = true; + this.setInvulnerable(true); + } + + public static AttributeSupplier.Builder createAttributes() { + return TamableAnimal.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.glimmerHealth()) + .add(Attributes.MOVEMENT_SPEED, 0.3D) + .add(Attributes.FOLLOW_RANGE, 24.0D); + } + + @Override + public boolean isPushable() { + return false; + } + + @Override + public void push(Entity entity) { + // no-op: Glimmers pass through other entities + } + + @Override + public boolean isInvulnerableTo(DamageSource damageSource) { + return true; + } + + @Override + public int getMaxHeadYRot() { + return this.getVariant() == GlimmerVariant.FROG ? 5 : super.getMaxHeadYRot(); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(VARIANT, GlimmerVariant.APPLE_COW.ordinal()); + builder.define(SHEAR_COOLDOWN, 0); + builder.define(FADE_TICKS, 0); + builder.define(FOLLOWING, true); + builder.define(ABILITY_COOLDOWN, 0); + builder.define(GROWTH_SCALE, 1.0F); + builder.define(ABILITY_ANIM_TICKS, 0); + } + + public void playAbilityAnimation(int ticks) { + this.entityData.set(ABILITY_ANIM_TICKS, ticks); + } + + /** + * Ticks remaining in the daytime despawn fade-out, or 0 if not currently fading. + * Used client-side to fade the render alpha to nothing before the entity is removed. + */ + public int getFadeTicks() { + return this.entityData.get(FADE_TICKS); + } + + public float getFadeAlpha(float partialTick) { + int ticks = this.getFadeTicks(); + if (ticks <= 0) { + return 1.0F; + } + return Mth.clamp((ticks - partialTick) / (float) FADE_DURATION_TICKS, 0.0F, 1.0F); + } + + public boolean isFollowingOwner() { + return this.entityData.get(FOLLOWING); + } + + public boolean isAbilityOnCooldown() { + return this.entityData.get(ABILITY_COOLDOWN) > 0; + } + + public void startAbilityCooldown() { + this.entityData.set(ABILITY_COOLDOWN, this.getVariant().getBehavior().abilityCooldownTicks()); + } + + public float getAbilityCooldownFraction(float partialTick) { + int max = this.getVariant().getBehavior().abilityCooldownTicks(); + if (max <= 0) { + return 0.0F; + } + int ticks = this.entityData.get(ABILITY_COOLDOWN); + return Mth.clamp((ticks - partialTick) / (float) max, 0.0F, 1.0F); + } + + public float getLastOwnerExhaustion() { + return this.lastOwnerExhaustion; + } + + public void setLastOwnerExhaustion(float value) { + this.lastOwnerExhaustion = value; + } + + public long getLastOwnerShieldLostCount() { + return this.lastOwnerShieldLostCount; + } + + public void setLastOwnerShieldLostCount(long value) { + this.lastOwnerShieldLostCount = value; + } + + public float getGrowthScale() { + return this.entityData.get(GROWTH_SCALE); + } + + public void setGrowthScale(float scale) { + this.entityData.set(GROWTH_SCALE, scale); + this.refreshDimensions(); + } + + private void cycleMovementState(Player player) { + if (this.isOrderedToSit()) { + this.setOrderedToSit(false); + this.entityData.set(FOLLOWING, true); + player.displayClientMessage(Component.translatable("entity.antarchy.glimmer.set_follow"), true); + } else if (this.isFollowingOwner()) { + this.entityData.set(FOLLOWING, false); + player.displayClientMessage(Component.translatable("entity.antarchy.glimmer.set_wander"), true); + } else { + this.setOrderedToSit(true); + this.getNavigation().stop(); + player.displayClientMessage(Component.translatable("entity.antarchy.glimmer.set_sit"), true); + } + } + + public GlimmerVariant getVariant() { + int ordinal = Mth.clamp(this.entityData.get(VARIANT), 0, GlimmerVariant.values().length - 1); + return GlimmerVariant.values()[ordinal]; + } + + public void setVariant(GlimmerVariant variant) { + this.entityData.set(VARIANT, variant.ordinal()); + } + + public void lockVariant(GlimmerVariant variant) { + this.setVariant(variant); + this.variantLocked = true; + } + + @Override + public void onSyncedDataUpdated(EntityDataAccessor key) { + super.onSyncedDataUpdated(key); + if (VARIANT.equals(key)) { + this.refreshDimensions(); + if (!this.level().isClientSide) { + this.goalSelector.removeAllGoals(goal -> true); + this.targetSelector.removeAllGoals(goal -> true); + this.registerGoals(); + } + } + } + + @Override + public EntityDimensions getDefaultDimensions(Pose pose) { + GlimmerVariantBehavior behavior = this.getVariant().getBehavior(); + EntityDimensions base = this.isBaby() ? behavior.babyDimensions() : behavior.adultDimensions(); + float growth = this.getGrowthScale(); + return growth == 1.0F ? base : base.scale(growth); + } + + @Override + protected void ageBoundaryReached() { + super.ageBoundaryReached(); + this.refreshDimensions(); + } + + public boolean isShearCooldownActive() { + return this.entityData.get(SHEAR_COOLDOWN) > 0; + } + + public void startShearCooldown(int ticks) { + this.entityData.set(SHEAR_COOLDOWN, ticks); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new net.minecraft.world.entity.ai.goal.SitWhenOrderedToGoal(this)); + this.goalSelector.addGoal(3, new GlimmerFollowOwnerGoal(this, this.getVariant().getBehavior().followSpeedModifier())); + this.getVariant().getBehavior().registerGoals(this); + } + + public void addGoal(int priority, Goal goal) { + this.goalSelector.addGoal(priority, goal); + } + + public void addTargetGoal(int priority, Goal goal) { + this.targetSelector.addGoal(priority, goal); + } + + @Override + @Nullable + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return null; + } + + @Override + public boolean isFood(ItemStack stack) { + return false; + } + + @Override + public boolean doHurtTarget(Entity target) { + boolean hurt = super.doHurtTarget(target); + if (hurt) { + this.getVariant().getBehavior().onHurtTarget(this, target); + } + return hurt; + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + + if (!this.isTame() && stack.is(AntarchyObjects.SPIRIT_APPLE.get())) { + return this.tameWithSpiritApple(player, hand, stack); + } + + if (this.isTame() && this.isOwnedBy(player) && stack.is(net.minecraft.world.item.Items.GLASS_BOTTLE)) { + return this.captureInBottle(player, hand, stack); + } + + if (this.isTame() && this.isOwnedBy(player) && stack.isEmpty() && !player.isSecondaryUseActive()) { + if (!this.level().isClientSide) { + this.cycleMovementState(player); + } + return InteractionResult.SUCCESS; + } + + InteractionResult variantResult = this.getVariant().getBehavior().onInteract(this, player, stack, hand); + if (variantResult != null) { + return variantResult; + } + + return super.mobInteract(player, hand); + } + + private InteractionResult tameWithSpiritApple(Player player, InteractionHand hand, ItemStack stack) { + if (this.level().isClientSide) { + return InteractionResult.CONSUME; + } + + this.usePlayerItem(player, hand, stack); + this.tame(player); + this.setOrderedToSit(false); + this.level().broadcastEntityEvent(this, (byte) 7); + GlimmerParticles.tickBurst(this); + + if (this.level() instanceof ServerLevel serverLevel) { + GlimmerCompanionSavedData.replaceCompanion(serverLevel.getServer(), player.getUUID(), this.getUUID()); + } + + if (player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { + com.craisinlord.antarchy.content.AntarchyAdvancements.award(serverPlayer, this.getVariant().tameAdvancementId()); + } + + return InteractionResult.SUCCESS; + } + + private InteractionResult captureInBottle(Player player, InteractionHand hand, ItemStack stack) { + if (this.level().isClientSide) { + return InteractionResult.CONSUME; + } + + ItemStack filled = com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(this.getVariant()); + ItemStack result = net.minecraft.world.item.ItemUtils.createFilledResult(stack, player, filled); + player.setItemInHand(hand, result); + this.playSound(net.minecraft.sounds.SoundEvents.BOTTLE_FILL, 1.0F, 1.0F); + + if (this.level() instanceof ServerLevel serverLevel) { + GlimmerCompanionSavedData.clearCompanion(serverLevel.getServer(), player.getUUID(), this.getUUID()); + } + + this.discard(); + return InteractionResult.SUCCESS; + } + + @Override + @Nullable + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { + SpawnGroupData result = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + if (!this.variantLocked) { + this.setVariant(selectNaturalVariant(level, this.blockPosition())); + this.variantLocked = true; + } + return result; + } + + private GlimmerVariant selectNaturalVariant(ServerLevelAccessor level, BlockPos pos) { + Holder biome = level.getBiome(pos); + if (biome.is(GLIMMERING_POOLS)) { + GlimmerVariant[] poolVariants = new GlimmerVariant[] { + GlimmerVariant.FROG, + GlimmerVariant.OURANWOOD_DEER, + GlimmerVariant.APPLE_COW + }; + return poolVariants[this.random.nextInt(poolVariants.length)]; + } + return GlimmerVariant.random(this.random); + } + + @Override + public void tick() { + super.tick(); + + GlimmerParticles.tickAmbient(this, this.getDeltaMovement().horizontalDistanceSqr() > 0.01D); + + if (!this.level().isClientSide) { + int fadeTicks = this.entityData.get(FADE_TICKS); + if (this.isTame()) { + if (fadeTicks > 0) { + this.entityData.set(FADE_TICKS, 0); + } + } else if (fadeTicks > 0 || this.level().isDay()) { + if (fadeTicks <= 0) { + fadeTicks = FADE_DURATION_TICKS; + } + fadeTicks--; + this.entityData.set(FADE_TICKS, fadeTicks); + if (fadeTicks <= 0) { + this.discard(); + return; + } + } + + int shearCooldown = this.entityData.get(SHEAR_COOLDOWN); + if (shearCooldown > 0) { + this.entityData.set(SHEAR_COOLDOWN, shearCooldown - 1); + } + + this.applyGroundSupport(); + this.getVariant().getBehavior().customTick(this); + this.tickAbilitiesAndPassive(); + this.tickGrowthDecay(); + } + } + + private void tickAbilitiesAndPassive() { + int cooldown = this.entityData.get(ABILITY_COOLDOWN); + if (cooldown > 0) { + this.entityData.set(ABILITY_COOLDOWN, cooldown - 1); + } + + int animTicks = this.entityData.get(ABILITY_ANIM_TICKS); + if (animTicks > 0) { + this.entityData.set(ABILITY_ANIM_TICKS, animTicks - 1); + } + + if (!this.isTame() || !(this.getOwner() instanceof Player owner)) { + return; + } + + boolean nearby = owner.level() == this.level() + && this.distanceToSqr(owner) <= (double) (PASSIVE_RANGE * PASSIVE_RANGE); + if (!nearby) { + this.getVariant().getBehavior().clearPassive(this, owner); + return; + } + + if (this.tickCount % PASSIVE_EFFECT_REFRESH_TICKS == 0) { + this.getVariant().getBehavior().tickPassive(this, owner); + } + this.getVariant().getBehavior().tickPassiveEveryTick(this, owner); + + if (cooldown <= 0) { + this.getVariant().getBehavior().tickAbilityCheck(this, owner); + } + } + + private void tickGrowthDecay() { + float scale = this.getGrowthScale(); + if (scale == 1.0F) { + return; + } + double decayPerTick = this.getVariant().getBehavior().growthDecayPerTick(); + if (decayPerTick <= 0.0D) { + return; + } + float next = scale > 1.0F + ? (float) Math.max(1.0D, scale - decayPerTick) + : (float) Math.min(1.0D, scale + decayPerTick); + if (next != scale) { + this.setGrowthScale(next); + } + } + + private void applyGroundSupport() { + BlockPos below = BlockPos.containing(this.getX(), this.getY() - 0.05D, this.getZ()); + VoxelShape shape = this.level().getBlockState(below).getCollisionShape(this.level(), below); + if (!shape.isEmpty()) { + double top = below.getY() + shape.max(Direction.Axis.Y); + if (this.getY() <= top + 0.2D && this.getDeltaMovement().y <= 0.0D) { + this.setPos(this.getX(), top, this.getZ()); + this.setDeltaMovement(this.getDeltaMovement().x, 0.0D, this.getDeltaMovement().z); + this.setOnGround(true); + return; + } + } + this.setOnGround(false); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putString(VARIANT_KEY, this.getVariant().name()); + tag.putInt(SHEAR_COOLDOWN_KEY, this.entityData.get(SHEAR_COOLDOWN)); + tag.putBoolean(VARIANT_LOCKED_KEY, this.variantLocked); + tag.putBoolean(FOLLOWING_KEY, this.isFollowingOwner()); + tag.putInt(ABILITY_COOLDOWN_KEY, this.entityData.get(ABILITY_COOLDOWN)); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.contains(VARIANT_KEY)) { + this.setVariant(GlimmerVariant.byName(tag.getString(VARIANT_KEY))); + } + this.entityData.set(SHEAR_COOLDOWN, tag.getInt(SHEAR_COOLDOWN_KEY)); + this.variantLocked = tag.getBoolean(VARIANT_LOCKED_KEY); + this.entityData.set(FOLLOWING, !tag.contains(FOLLOWING_KEY) || tag.getBoolean(FOLLOWING_KEY)); + this.entityData.set(ABILITY_COOLDOWN, tag.getInt(ABILITY_COOLDOWN_KEY)); + } + + @Override + protected SoundEvent getAmbientSound() { + return this.getVariant().getBehavior().ambientSound(); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return this.getVariant().getBehavior().hurtSound(); + } + + @Override + protected SoundEvent getDeathSound() { + return this.getVariant().getBehavior().deathSound(); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + if (this.entityData.get(ABILITY_ANIM_TICKS) > 0) { + RawAnimation abilityAnim = this.getVariant().getBehavior().abilityAnimation(); + if (abilityAnim != null) { + return state.setAndContinue(abilityAnim); + } + } + if (state.isMoving()) { + RawAnimation movingAnim = this.getVariant().getBehavior().movingAnimation(this); + return state.setAndContinue(movingAnim != null ? movingAnim : WALK_ANIM); + } + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFollowOwnerGoal.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFollowOwnerGoal.java new file mode 100644 index 00000000..69a3e73e --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFollowOwnerGoal.java @@ -0,0 +1,77 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.goal.Goal; + +import java.util.EnumSet; + +public class GlimmerFollowOwnerGoal extends Goal { + private static final float START_DISTANCE = 8.0F; + private static final float STOP_DISTANCE = 3.0F; + private static final float TELEPORT_DISTANCE = 20.0F; + + private final GlimmerEntity glimmer; + private final double speedModifier; + private LivingEntity owner; + + public GlimmerFollowOwnerGoal(GlimmerEntity glimmer, double speedModifier) { + this.glimmer = glimmer; + this.speedModifier = speedModifier; + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + if (!this.glimmer.isTame() || this.glimmer.isOrderedToSit() || !this.glimmer.isFollowingOwner()) { + return false; + } + + LivingEntity owner = this.glimmer.getOwner(); + if (owner == null || owner.isSpectator()) { + return false; + } + + if (this.glimmer.distanceToSqr(owner) < START_DISTANCE * START_DISTANCE) { + return false; + } + + this.owner = owner; + return true; + } + + @Override + public boolean canContinueToUse() { + if (this.owner == null || !this.glimmer.isTame() || this.glimmer.isOrderedToSit() || !this.glimmer.isFollowingOwner()) { + return false; + } + return this.glimmer.distanceToSqr(this.owner) > STOP_DISTANCE * STOP_DISTANCE; + } + + @Override + public void start() { + this.glimmer.getNavigation().stop(); + } + + @Override + public void stop() { + this.owner = null; + this.glimmer.getNavigation().stop(); + } + + @Override + public void tick() { + if (this.owner == null) { + return; + } + + this.glimmer.getLookControl().setLookAt(this.owner, 10.0F, this.glimmer.getMaxHeadXRot()); + + double distanceSq = this.glimmer.distanceToSqr(this.owner); + if (distanceSq > TELEPORT_DISTANCE * TELEPORT_DISTANCE) { + this.glimmer.teleportTo(this.owner.getX(), this.owner.getY(), this.owner.getZ()); + return; + } + + this.glimmer.getNavigation().moveTo(this.owner, this.speedModifier); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java new file mode 100644 index 00000000..b563d363 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java @@ -0,0 +1,172 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.tags.TagKey; +import net.minecraft.util.Mth; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +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.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.boss.enderdragon.EnderDragon; +import net.minecraft.world.entity.boss.wither.WitherBoss; +import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.entity.monster.MagmaCube; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; + +public class GlimmerFrogBehavior implements GlimmerVariantBehavior { + private static final int SMALL_SLIME_SIZE = 1; + private static final TagKey> NO_EAT_TAG = + TagKey.create(Registries.ENTITY_TYPE, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "frog_glimmer_no_eat")); + private static final int PASSIVE_REFRESH_DURATION = 20 * 4; + private static final int ABILITY_COOLDOWN_TICKS = 20 * 120; + private static final double EAT_RANGE = 8.0D; + private static final float GROWTH_PER_EAT_MIN = 0.05F; + private static final float GROWTH_PER_EAT_MAX = 0.6F; + private static final float GROWTH_MAX_SCALE = 2.2F; + private static final double GROWTH_DECAY_PER_TICK = 0.0006D; + + private static ResourceLocation rl(String path) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); + } + + @Override + public void registerGoals(GlimmerEntity entity) { + entity.addGoal(0, new FloatGoal(entity)); + entity.addGoal(1, new MeleeAttackGoal(entity, 1.1D, true)); + entity.addGoal(5, new WaterAvoidingRandomStrollGoal(entity, 1.0D)); + entity.addGoal(6, new LookAtPlayerGoal(entity, Player.class, 8.0F)); + entity.addGoal(7, new RandomLookAroundGoal(entity)); + entity.addTargetGoal(2, new NearestAttackableTargetGoal<>(entity, MagmaCube.class, 10, true, false, + magmaCube -> ((MagmaCube) magmaCube).getSize() == SMALL_SLIME_SIZE)); + } + + @Override + public void onHurtTarget(GlimmerEntity entity, Entity target) { + if (!(target instanceof MagmaCube magmaCube) || magmaCube.isAlive() || magmaCube.getSize() != SMALL_SLIME_SIZE) { + return; + } + + entity.spawnAtLocation(AntarchyObjects.LUMEN_FROGLIGHT.get()); + } + + @Override + public ResourceLocation modelGeo() { + return rl("geo/apple_cow.geo.json"); + } + + @Override + public ResourceLocation animationFile() { + return rl("animations/apple_cow.animation.json"); + } + + @Override + public ResourceLocation texture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/frog_glimmer.png"); + } + + @Override + public ResourceLocation emissiveTexture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/frog_glimmer_emmisive.png"); + } + + @Override + public SoundEvent ambientSound() { + return SoundEvents.FROG_AMBIENT; + } + + @Override + public SoundEvent hurtSound() { + return SoundEvents.FROG_HURT; + } + + @Override + public SoundEvent deathSound() { + return SoundEvents.FROG_DEATH; + } + + @Override + public EntityDimensions adultDimensions() { + // Matches vanilla Frog's real hitbox. + return EntityDimensions.scalable(0.5F, 0.5F); + } + + @Override + public void tickPassive(GlimmerEntity entity, Player owner) { + owner.addEffect(new MobEffectInstance(MobEffects.JUMP, PASSIVE_REFRESH_DURATION, 0, false, false, true)); + } + + @Override + public int abilityCooldownTicks() { + return ABILITY_COOLDOWN_TICKS; + } + + @Override + public double growthDecayPerTick() { + return GROWTH_DECAY_PER_TICK; + } + + @Override + public void tickAbilityCheck(GlimmerEntity entity, Player owner) { + LivingEntity target = findEdibleTarget(entity, owner); + if (target != null) { + this.eatTarget(entity, owner, target); + } + } + + private static LivingEntity findEdibleTarget(GlimmerEntity entity, Player owner) { + AABB area = owner.getBoundingBox().inflate(EAT_RANGE); + LivingEntity best = null; + double bestDistSq = EAT_RANGE * EAT_RANGE; + for (Entity candidate : owner.level().getEntities(entity, area)) { + if (!(candidate instanceof Enemy) || !(candidate instanceof LivingEntity living) || !living.isAlive()) { + continue; + } + if (isExcluded(living)) { + continue; + } + double distSq = candidate.distanceToSqr(owner); + if (distSq > bestDistSq) { + continue; + } + bestDistSq = distSq; + best = living; + } + return best; + } + + private static boolean isExcluded(LivingEntity target) { + if (target instanceof MultipartEntityOwner || target instanceof EnderDragon || target instanceof WitherBoss) { + return true; + } + return target.getType().is(NO_EAT_TAG); + } + + private void eatTarget(GlimmerEntity entity, Player owner, LivingEntity target) { + float growthAdd = Mth.clamp(target.getMaxHealth() / 40.0F, GROWTH_PER_EAT_MIN, GROWTH_PER_EAT_MAX); + entity.setGrowthScale(Math.min(GROWTH_MAX_SCALE, entity.getGrowthScale() + growthAdd)); + + Component targetName = target.getDisplayName(); + entity.playSound(SoundEvents.FROG_EAT, 1.2F, 0.9F); + target.teleportTo(entity.getX(), entity.getY() + entity.getBbHeight() * 0.5D, entity.getZ()); + target.remove(Entity.RemovalReason.DISCARDED); + + this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.frog", targetName)); + entity.startAbilityCooldown(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java new file mode 100644 index 00000000..e607c230 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java @@ -0,0 +1,175 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animation.RawAnimation; + +public class GlimmerOuranwoodDeerBehavior implements GlimmerVariantBehavior { + private static final int PASSIVE_REFRESH_DURATION = 20 * 4; + private static final int ABILITY_COOLDOWN_TICKS = 20 * 10; + private static final double FOLLOW_SPEED_MODIFIER = 1.75D; + private static final RawAnimation RUN_ANIM = RawAnimation.begin().thenLoop("run"); + private static final double CHARGE_RANGE = 12.0D; + private static final double CHARGE_CONE_DOT = 0.5D; + private static final double CHARGE_CORRIDOR_WIDTH = 1.75D; + private static final float CHARGE_DAMAGE = 9.0F; + private static final double CHARGE_KNOCKBACK = 1.6D; + private static final int CHARGE_ANIM_TICKS = 45; + + private static ResourceLocation rl(String path) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); + } + + @Override + public void registerGoals(GlimmerEntity entity) { + entity.addGoal(0, new FloatGoal(entity)); + entity.addGoal(5, new WaterAvoidingRandomStrollGoal(entity, 1.15D)); + entity.addGoal(6, new LookAtPlayerGoal(entity, Player.class, 8.0F)); + entity.addGoal(7, new RandomLookAroundGoal(entity)); + } + + @Override + public ResourceLocation modelGeo() { + return rl("geo/ouranwood_deer.geo.json"); + } + + @Override + public ResourceLocation animationFile() { + return rl("animations/ouranwood_deer.animation.json"); + } + + @Override + public ResourceLocation texture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/deer_glimmer.png"); + } + + @Override + public ResourceLocation emissiveTexture(GlimmerEntity entity) { + return rl("textures/entity/glimmer/deer_glimmer_emissive.png"); + } + + @Override + public SoundEvent ambientSound() { + return SoundEvents.FOX_AMBIENT; + } + + @Override + public SoundEvent hurtSound() { + return SoundEvents.FOX_HURT; + } + + @Override + public SoundEvent deathSound() { + return SoundEvents.FOX_DEATH; + } + + @Override + public EntityDimensions adultDimensions() { + return EntityDimensions.scalable(1.35F, 2.1F); + } + + @Override + public EntityDimensions babyDimensions() { + return EntityDimensions.scalable(0.9F, 1.4F); + } + + @Override + public void tickPassive(GlimmerEntity entity, Player owner) { + owner.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, PASSIVE_REFRESH_DURATION, 0, false, false, true)); + } + + @Override + public double followSpeedModifier() { + return FOLLOW_SPEED_MODIFIER; + } + + @Override + @Nullable + public RawAnimation movingAnimation(GlimmerEntity entity) { + return entity.isFollowingOwner() ? RUN_ANIM : null; + } + + @Override + public int abilityCooldownTicks() { + return ABILITY_COOLDOWN_TICKS; + } + + @Override + @Nullable + public RawAnimation abilityAnimation() { + return RawAnimation.begin().thenPlay("charge_start").thenPlay("charge_loop").thenPlay("charge_end"); + } + + @Override + public void tickAbilityCheck(GlimmerEntity entity, Player owner) { + if (!owner.isSprinting()) { + return; + } + + Vec3 look = owner.getLookAngle(); + LivingEntity bestTarget = null; + double bestDistSq = CHARGE_RANGE * CHARGE_RANGE; + for (Entity candidate : owner.level().getEntities(owner, owner.getBoundingBox().inflate(CHARGE_RANGE))) { + if (!(candidate instanceof Enemy) || !(candidate instanceof LivingEntity living) || !living.isAlive()) { + continue; + } + Vec3 toTarget = candidate.position().subtract(owner.position()); + double distSq = toTarget.lengthSqr(); + if (distSq > bestDistSq) { + continue; + } + if (toTarget.normalize().dot(look) < CHARGE_CONE_DOT) { + continue; + } + bestDistSq = distSq; + bestTarget = living; + } + + if (bestTarget != null) { + this.performCharge(entity, owner, bestTarget); + } + } + + private void performCharge(GlimmerEntity entity, Player owner, LivingEntity target) { + Vec3 from = entity.position(); + Vec3 direction = target.position().subtract(from); + double horizontalDistance = Math.max(1.0D, direction.horizontalDistance()); + double dirX = direction.x / horizontalDistance; + double dirZ = direction.z / horizontalDistance; + + entity.setDeltaMovement(dirX * 1.4D, entity.getDeltaMovement().y, dirZ * 1.4D); + entity.playAbilityAnimation(CHARGE_ANIM_TICKS); + entity.playSound(SoundEvents.RAVAGER_ROAR, 1.0F, 1.3F); + + AABB corridor = new AABB(from, target.position()).inflate(CHARGE_CORRIDOR_WIDTH, 1.5D, CHARGE_CORRIDOR_WIDTH); + for (Entity candidate : owner.level().getEntities(entity, corridor)) { + if (!(candidate instanceof Enemy) || !(candidate instanceof LivingEntity living) || !living.isAlive()) { + continue; + } + living.hurt(owner.damageSources().mobAttack(entity), CHARGE_DAMAGE); + Vec3 away = living.position().subtract(from); + double awayDistance = Math.max(0.1D, away.horizontalDistance()); + living.knockback(CHARGE_KNOCKBACK, -away.x / awayDistance, -away.z / awayDistance); + } + + this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.deer")); + entity.startAbilityCooldown(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariant.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariant.java new file mode 100644 index 00000000..345f2f64 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariant.java @@ -0,0 +1,54 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import java.util.Locale; +import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.resources.ResourceLocation; + +public enum GlimmerVariant { + APPLE_COW(new GlimmerAppleCowBehavior(), "apple_of_my_eye"), + OURANWOOD_DEER(new GlimmerOuranwoodDeerBehavior(), "deerly_beloved"), + FROG(new GlimmerFrogBehavior(), "hoppy_together"), + ANT(new GlimmerAntBehavior(), "spirant_animal"), + ELKA(new GlimmerElkaBehavior(), "elkcellent_choice"); + + public static final Codec CODEC = Codec.STRING.xmap(GlimmerVariant::byName, GlimmerVariant::name); + public static final StreamCodec STREAM_CODEC = + ByteBufCodecs.STRING_UTF8.map(GlimmerVariant::byName, GlimmerVariant::name); + + private final GlimmerVariantBehavior behavior; + private final ResourceLocation tameAdvancementId; + + GlimmerVariant(GlimmerVariantBehavior behavior, String tameAdvancementPath) { + this.behavior = behavior; + this.tameAdvancementId = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, tameAdvancementPath); + } + + public GlimmerVariantBehavior getBehavior() { + return this.behavior; + } + + public ResourceLocation tameAdvancementId() { + return this.tameAdvancementId; + } + + public Component displayName() { + return Component.translatable("glimmer_variant.antarchy." + this.name().toLowerCase(Locale.ROOT)); + } + + public static GlimmerVariant random(net.minecraft.util.RandomSource random) { + GlimmerVariant[] values = values(); + return values[random.nextInt(values.length)]; + } + + public static GlimmerVariant byName(String name) { + try { + return GlimmerVariant.valueOf(name); + } catch (IllegalArgumentException ignored) { + return APPLE_COW; + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariantBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariantBehavior.java new file mode 100644 index 00000000..58d673f0 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerVariantBehavior.java @@ -0,0 +1,147 @@ +package com.craisinlord.antarchy.content.entity.glimmer; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; + +/** + * Per-variant behavior for the composite {@link GlimmerEntity}: AI, model/texture selection, and sounds. + * One concrete implementation per {@link GlimmerVariant}, chosen via composition rather than subclassing + * so a single EntityType can be reliably reconstructed across save/load. + */ +public interface GlimmerVariantBehavior { + void registerGoals(GlimmerEntity entity); + + ResourceLocation modelGeo(); + + ResourceLocation animationFile(); + + ResourceLocation texture(GlimmerEntity entity); + + ResourceLocation emissiveTexture(GlimmerEntity entity); + + SoundEvent ambientSound(); + + SoundEvent hurtSound(); + + SoundEvent deathSound(); + + /** + * Optional variant-specific interaction (e.g. shearing the Apple Cow variant for a Spirit Apple). + * Return null to fall through to the entity's default interaction handling. + */ + @Nullable + default InteractionResult onInteract(GlimmerEntity entity, Player player, ItemStack stack, InteractionHand hand) { + return null; + } + + /** + * Optional per-tick hook for variant-specific server logic (e.g. the Basilisk's petrify gaze). + */ + default void customTick(GlimmerEntity entity) { + } + + /** + * Optional hook fired after {@code entity} lands a successful hit on {@code target} + * (e.g. the Frog variant dropping Lumen Froglight when it kills a small Magma Cube). + */ + default void onHurtTarget(GlimmerEntity entity, Entity target) { + } + + /** + * Called periodically (roughly once a second) while this Glimmer is tamed and its + * owner is nearby and loaded. Should (re)apply the variant's passive effect with a + * short duration so it naturally lapses if the owner leaves range. + */ + default void tickPassive(GlimmerEntity entity, Player owner) { + } + + /** + * Called every server tick (not just the coarse refresh interval) while nearby, for + * passives that need finer-grained bookkeeping than a periodic effect refresh (e.g. + * the Apple Cow's exhaustion dampening). + */ + default void tickPassiveEveryTick(GlimmerEntity entity, Player owner) { + } + + /** + * Called once the tick the owner leaves range (or the companion is otherwise no + * longer eligible) so any directly-applied (non-MobEffect) passive state can be undone. + */ + default void clearPassive(GlimmerEntity entity, Player owner) { + } + + /** + * Animation (from this variant's own animation file) to play while + * {@link GlimmerEntity#playAbilityAnimation(int)} is active. Null plays no override. + */ + @Nullable + default software.bernie.geckolib.animation.RawAnimation abilityAnimation() { + return null; + } + + /** + * Animation to play in place of the default walk loop while moving. Null uses the + * default walk animation (e.g. the Deer switches to its run clip while following its owner). + */ + @Nullable + default software.bernie.geckolib.animation.RawAnimation movingAnimation(GlimmerEntity entity) { + return null; + } + + /** + * Navigation speed multiplier used while following the owner (see {@link GlimmerFollowOwnerGoal}). + */ + default double followSpeedModifier() { + return 1.15D; + } + + /** + * Shared action-bar feedback helper for ability-use messages. + */ + default void sendAbilityMessage(Player owner, net.minecraft.network.chat.Component message) { + owner.displayClientMessage(message, true); + } + + /** + * Called every server tick while the owner is nearby and the ability is off cooldown. + * Implementations should check their own trigger condition and, if it fires, perform + * the ability and call {@link GlimmerEntity#startAbilityCooldown()}. + */ + default void tickAbilityCheck(GlimmerEntity entity, Player owner) { + } + + /** + * Cooldown duration for this variant's active ability, in ticks. + */ + default int abilityCooldownTicks() { + return 20 * 120; + } + + /** + * Per-tick shrink/growth-recovery rate used to decay {@link GlimmerEntity#getGrowthScale()} + * back toward 1.0 after an ability temporarily changes it. 0 means the variant never changes scale. + */ + default double growthDecayPerTick() { + return 0.0D; + } + + /** + * Hitbox size matching the real creature this variant is a "spirit" of, rather than + * a single hitbox shared by every variant. + */ + EntityDimensions adultDimensions(); + + /** + * Defaults to half the adult size, matching vanilla's typical baby scaling. + */ + default EntityDimensions babyDimensions() { + return this.adultDimensions().scale(0.5F); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java index 3d754405..327fa364 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java @@ -80,6 +80,7 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO private static final int ATTACK_GRAB = 1; private static final int ATTACK_SWING_LEFT = 2; private static final int ATTACK_SWING_RIGHT = 3; + private static final int ATTACK_SLAM = 4; // Synced animation state values private static final int ANIM_NONE = 0; @@ -87,7 +88,8 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO private static final int ANIM_GRAB = 2; private static final int ANIM_SWING_LEFT = 3; private static final int ANIM_SWING_RIGHT = 4; - private static final int ANIM_DEATH = 5; + private static final int ANIM_SLAM = 5; + private static final int ANIM_DEATH = 6; private static final int DEATH_ANIM_TICKS = 60; @@ -105,8 +107,11 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO private static final RawAnimation GRAB_ANIM = RawAnimation.begin().thenPlay("grab"); private static final RawAnimation SWING_LEFT_ANIM = RawAnimation.begin().thenPlay("swing_left"); private static final RawAnimation SWING_RIGHT_ANIM = RawAnimation.begin().thenPlay("swing_right"); + private static final RawAnimation SLAM_ANIM = RawAnimation.begin().thenPlay("attack"); private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); + private static final Vec3 GRAB_ANCHOR_LOCAL = new Vec3(22.0D / 16.0D, 223.5D / 16.0D, -12.5D / 16.0D); + private final ServerBossEvent bossEvent = new ServerBossEvent(Component.literal("The Kraken"), BossEvent.BossBarColor.BLUE, BossEvent.BossBarOverlay.PROGRESS); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -208,6 +213,7 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO case ANIM_GRAB -> state.setAndContinue(GRAB_ANIM); case ANIM_SWING_LEFT -> state.setAndContinue(SWING_LEFT_ANIM); case ANIM_SWING_RIGHT -> state.setAndContinue(SWING_RIGHT_ANIM); + case ANIM_SLAM -> state.setAndContinue(SLAM_ANIM); case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); default -> PlayState.STOP; }; @@ -551,6 +557,7 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO case ATTACK_GRAB -> this.tickGrabAttack(target); case ATTACK_SWING_LEFT -> this.tickSwingAttack(false); case ATTACK_SWING_RIGHT -> this.tickSwingAttack(true); + case ATTACK_SLAM -> this.tickSlamAttack(); default -> this.finishAttack(); } } @@ -562,6 +569,9 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO if (attackState == ATTACK_GRAB) { this.actionTicks = 55; this.playSound(AntarchySoundEvents.KRAKEN_ATTACK.get(), 1.45F, 0.9F); + } else if (attackState == ATTACK_SLAM) { + this.actionTicks = 40; + this.playSound(AntarchySoundEvents.KRAKEN_ATTACK.get(), 1.55F, this.isPhaseTwo() ? 0.78F : 0.84F); } else if (attackState == ATTACK_SWING_LEFT || attackState == ATTACK_SWING_RIGHT) { this.actionTicks = 40; this.playSound(AntarchySoundEvents.KRAKEN_SPIN.get(), 1.3F, 0.95F); @@ -603,6 +613,16 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO } } + private void tickSlamAttack() { + if (this.actionTicks == 20) { + this.performSlam(); + } + + if (--this.actionTicks <= 0) { + this.finishAttack(); + } + } + private void finishAttack() { int finished = this.getAttackState(); this.setAttackState(ATTACK_NONE); @@ -652,14 +672,16 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO double distSqr = this.distanceToSqr(target); boolean canGrab = distSqr <= 64.0D; boolean canSwing = distSqr <= 81.0D; + boolean canSlam = distSqr <= 121.0D; - if (!canGrab && !canSwing) { + if (!canGrab && !canSwing && !canSlam) { return ATTACK_NONE; } int grabWeight = canGrab ? (this.lastAttackState == ATTACK_GRAB ? 1 : 4) : 0; int swingWeight = canSwing ? (this.isSwingAttack(this.lastAttackState) ? 1 : 5) : 0; - int total = grabWeight + swingWeight; + int slamWeight = canSlam ? (this.lastAttackState == ATTACK_SLAM ? 1 : 3) : 0; + int total = grabWeight + swingWeight + slamWeight; if (total == 0) { return ATTACK_NONE; } @@ -668,6 +690,10 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO if (roll < grabWeight) { return ATTACK_GRAB; } + roll -= grabWeight; + if (roll < slamWeight) { + return ATTACK_SLAM; + } return this.resolveSwingDirection(target); } @@ -675,6 +701,10 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO return attackState == ATTACK_SWING_LEFT || attackState == ATTACK_SWING_RIGHT; } + private boolean isSlamAttack(int attackState) { + return attackState == ATTACK_SLAM; + } + // Determines left vs right based on which side the target is on relative to the Kraken. // Kraken's right vector is forward x world-up. If target is on the Kraken's right side, // use swing_right (which knocks them left). If on the left, use swing_left (knocks them right). @@ -707,10 +737,28 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO } } + private void performSlam() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + AABB hitBox = this.getBoundingBox().inflate(9.0D, 4.0D, 9.0D); + List players = this.level().getEntitiesOfClass(Player.class, hitBox, LivingEntity::isAlive); + float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE) * 1.4F; + + for (Player player : players) { + if (!player.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), damage)) { + continue; + } + this.knockAway(player, 3.2D, 0.75D); + } + + serverLevel.sendParticles(ParticleTypes.SPLASH, this.getX(), this.getY() + 0.8D, this.getZ(), 40, 2.0D, 0.8D, 2.0D, 0.12D); + serverLevel.sendParticles(ParticleTypes.BUBBLE, this.getX(), this.getY() + 0.6D, this.getZ(), 30, 1.8D, 0.6D, 1.8D, 0.05D); + } + private void holdGrabbedTarget(LivingEntity target) { - Vec3 anchor = this.position() - .add(this.getViewVector(1.0F).normalize().scale(this.getBbWidth() * 0.65D)) - .add(0.0D, this.getBbHeight() * 0.28D, 0.0D); + Vec3 anchor = this.getGrabAnchorWorldPos(); target.setDeltaMovement(anchor.subtract(target.position()).scale(0.35D)); target.resetFallDistance(); if (target instanceof ServerPlayer serverPlayer) { @@ -721,6 +769,33 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO target.hurtMarked = true; } + private Vec3 getGrabAnchorWorldPos() { + Vec3 localAnchor = this.getGrabAnchorOffset(); + Vec3 rotatedAnchor = localToWorldOffset(localAnchor); + return this.position().add(rotatedAnchor); + } + + private Vec3 getGrabAnchorOffset() { + if (this.getAttackState() != ATTACK_GRAB) { + return new Vec3(this.getBbWidth() * 0.65D, this.getBbHeight() * 0.28D, 0.0D); + } + + double progress = 1.0D - (this.actionTicks / 55.0D); + double forward = Mth.lerp(progress, this.getBbWidth() * 0.45D, GRAB_ANCHOR_LOCAL.z); + double vertical = Mth.lerp(progress, this.getBbHeight() * 0.18D, GRAB_ANCHOR_LOCAL.y); + double lateral = Mth.lerp(progress, this.getBbWidth() * 0.18D, GRAB_ANCHOR_LOCAL.x); + return new Vec3(lateral, vertical, forward); + } + + private Vec3 localToWorldOffset(Vec3 localOffset) { + float bodyYawRadians = this.yBodyRot * Mth.DEG_TO_RAD; + double cos = Math.cos(bodyYawRadians); + double sin = Math.sin(bodyYawRadians); + double worldX = localOffset.x * cos - localOffset.z * sin; + double worldZ = localOffset.z * cos + localOffset.x * sin; + return new Vec3(worldX, localOffset.y, worldZ); + } + private void knockAway(LivingEntity target, double horizontalStrength, double verticalStrength) { Vec3 direction = target.position().subtract(this.position()); Vec3 horizontal = new Vec3(direction.x, 0.0D, direction.z); @@ -1123,6 +1198,10 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO this.setAnimationState(ANIM_SWING_RIGHT); return; } + case ATTACK_SLAM -> { + this.setAnimationState(ANIM_SLAM); + return; + } default -> { } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/fluid/LumenLiquidBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/fluid/LumenLiquidBlock.java new file mode 100644 index 00000000..a8a7d724 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/fluid/LumenLiquidBlock.java @@ -0,0 +1,109 @@ +package com.craisinlord.antarchy.content.fluid; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FlowingFluid; + +public class LumenLiquidBlock extends LiquidBlock { + private static final int SOURCE_PARTICLE_INTERVAL = 8; + private static final int FLOW_PARTICLE_INTERVAL = 20; + + public LumenLiquidBlock(FlowingFluid fluid, BlockBehaviour.Properties properties) { + super(fluid, properties); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + scheduleCurrentLumenTick(level, pos); + } + + @Override + protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { + super.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston); + scheduleCurrentLumenTick(level, pos); + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + scheduleCurrentLumenTick(level, pos); + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!state.is(newState.getBlock())) { + scheduleDependentLumenTicks(level, pos); + } + super.onRemove(state, level, pos, newState, movedByPiston); + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + super.animateTick(state, level, pos, random); + if (!isSurfaceExposed(level, pos)) { + return; + } + + int chance = state.getValue(LEVEL) == 0 ? SOURCE_PARTICLE_INTERVAL : FLOW_PARTICLE_INTERVAL; + if (random.nextInt(chance) != 0) { + return; + } + + double x = pos.getX() + 0.15D + random.nextDouble() * 0.7D; + double y = pos.getY() + 0.76D + random.nextDouble() * 0.18D; + double z = pos.getZ() + 0.15D + random.nextDouble() * 0.7D; + level.addParticle(ParticleTypes.GLOW, x, y, z, 0.0D, 0.02D, 0.0D); + + if (random.nextInt(4) == 0) { + level.addParticle(ParticleTypes.ENCHANT, x, y + 0.02D, z, 0.0D, 0.015D, 0.0D); + } + } + + @Override + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + super.entityInside(state, level, pos, entity); + if (!level.isClientSide || !(entity instanceof LivingEntity) || !isSurfaceExposed(level, pos)) { + return; + } + + RandomSource random = level.getRandom(); + if (random.nextInt(10) != 0) { + return; + } + + double x = entity.getX() + (random.nextDouble() - 0.5D) * entity.getBbWidth(); + double y = entity.getY() + 0.1D + random.nextDouble() * Math.max(0.2D, entity.getBbHeight() * 0.2D); + double z = entity.getZ() + (random.nextDouble() - 0.5D) * entity.getBbWidth(); + level.addParticle(ParticleTypes.GLOW, x, y, z, 0.0D, 0.03D, 0.0D); + if (random.nextBoolean()) { + level.addParticle(ParticleTypes.ENCHANT, x, y + 0.05D, z, 0.0D, 0.04D, 0.0D); + } + } + + private static boolean isSurfaceExposed(Level level, BlockPos pos) { + BlockState above = level.getBlockState(pos.above()); + return above.isAir() || !above.canOcclude(); + } + + private void scheduleCurrentLumenTick(LevelAccessor level, BlockPos pos) { + level.scheduleTick(pos, this.fluid, this.fluid.getTickDelay(level)); + } + + private void scheduleDependentLumenTicks(LevelAccessor level, BlockPos pos) { + level.scheduleTick(pos.above(), this.fluid, this.fluid.getTickDelay(level)); + for (Direction direction : Direction.Plane.HORIZONTAL) { + level.scheduleTick(pos.relative(direction), this.fluid, this.fluid.getTickDelay(level)); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java new file mode 100644 index 00000000..596c3c1b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java @@ -0,0 +1,85 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.client.particle.GlimmerParticles; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerCompanionSavedData; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; +import java.util.List; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +public class GlimmerBottleItem extends Item { + public GlimmerBottleItem() { + super(new Item.Properties().stacksTo(1)); + } + + public static ItemStack create(GlimmerVariant variant) { + ItemStack stack = new ItemStack(AntarchyObjects.GLIMMER_BOTTLE.get()); + stack.set(AntarchyObjects.GLIMMER_VARIANT_COMPONENT.get(), variant); + return stack; + } + + @Nullable + public static GlimmerVariant getVariant(ItemStack stack) { + return stack.get(AntarchyObjects.GLIMMER_VARIANT_COMPONENT.get()); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + GlimmerVariant variant = getVariant(stack); + if (variant == null) { + return InteractionResultHolder.fail(stack); + } + + if (level.isClientSide) { + return InteractionResultHolder.consume(stack); + } + + GlimmerEntity glimmer = AntarchyObjects.GLIMMER.get().create(level); + if (glimmer == null) { + return InteractionResultHolder.fail(stack); + } + + glimmer.moveTo(player.getX(), player.getY(), player.getZ(), player.getYRot(), 0.0F); + glimmer.lockVariant(variant); + glimmer.tame(player); + glimmer.setOrderedToSit(false); + level.addFreshEntity(glimmer); + GlimmerCompanionSavedData.replaceCompanion(((ServerLevel) level).getServer(), player.getUUID(), glimmer.getUUID()); + GlimmerParticles.tickBurst(glimmer); + level.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.BOTTLE_EMPTY, SoundSource.PLAYERS, 1.0F, 1.0F); + + if (player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { + com.craisinlord.antarchy.content.AntarchyAdvancements.award(serverPlayer, variant.tameAdvancementId()); + } + + ItemStack result = ItemUtils.createFilledResult(stack, player, new ItemStack(Items.GLASS_BOTTLE)); + return InteractionResultHolder.success(result); + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag flag) { + super.appendHoverText(stack, context, tooltip, flag); + GlimmerVariant variant = getVariant(stack); + if (variant != null) { + tooltip.add(Component.translatable("item.antarchy.glimmer_bottle.contains", variant.displayName())); + String key = variant.name().toLowerCase(java.util.Locale.ROOT); + tooltip.add(Component.translatable("item.antarchy.glimmer_bottle.passive." + key).withStyle(net.minecraft.ChatFormatting.GRAY)); + tooltip.add(Component.translatable("item.antarchy.glimmer_bottle.ability." + key).withStyle(net.minecraft.ChatFormatting.DARK_GRAY)); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/HighFructoseCornSyrupItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/HighFructoseCornSyrupItem.java new file mode 100644 index 00000000..4686339a --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/HighFructoseCornSyrupItem.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.level.Level; + +public class HighFructoseCornSyrupItem extends Item { + public HighFructoseCornSyrupItem(Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livingEntity) { + ItemStack result = super.finishUsingItem(stack, level, livingEntity); + if (!level.isClientSide) { + livingEntity.addEffect(new MobEffectInstance(MobEffects.CONFUSION, 80, 0)); + } + + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.GLASS_BOTTLE); + } + + if (livingEntity instanceof Player player && !player.getAbilities().instabuild) { + ItemStack bottle = new ItemStack(Items.GLASS_BOTTLE); + if (!player.getInventory().add(bottle)) { + player.drop(bottle, false); + } + } + + return result; + } + + @Override + public int getUseDuration(ItemStack stack, LivingEntity entity) { + return 32; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamCaveGenerator.java b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamCaveGenerator.java new file mode 100644 index 00000000..4aa42bac --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamCaveGenerator.java @@ -0,0 +1,173 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.AntarchyTags; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.state.BlockState; + +public final class MinersDreamCaveGenerator { + private static final double MIN_HORIZONTAL_RADIUS = 2.0D; + private static final double MAX_HORIZONTAL_RADIUS = 5.0D; + private static final double MIN_VERTICAL_RADIUS = 1.5D; + private static final double MAX_VERTICAL_RADIUS = 4.0D; + private static final double MAX_VERTICAL_DEVIATION = 8.0D; + private static final double SOFT_VERTICAL_DEVIATION = 4.0D; + private static final int WORLD_MARGIN = 3; + + private MinersDreamCaveGenerator() { + } + + public record CaveNode(BlockPos center, double horizontalRadius, double verticalRadius) { + } + + public record CaveGenerationResult(List nodes, Set torchCheckpoints) { + } + + public static CaveGenerationResult generate(BlockPos start, Direction initialDirection, int length, + int torchSpacing, int minBuildHeight, int maxBuildHeight, RandomSource random) { + List nodes = new ArrayList<>(length); + Set torchCheckpoints = new HashSet<>(); + + double x = start.getX() + 0.5D; + double y = start.getY() + 0.5D; + double z = start.getZ() + 0.5D; + double startY = y; + + double headingX = initialDirection.getStepX(); + double headingZ = initialDirection.getStepZ(); + if (headingX == 0.0D && headingZ == 0.0D) { + headingX = 1.0D; + } + + double verticalVelocity = 0.0D; + double horizontalRadius = 3.0D; + double verticalRadius = 2.0D; + int minY = minBuildHeight + WORLD_MARGIN; + int maxY = maxBuildHeight - WORLD_MARGIN; + + int spacing = Math.max(4, torchSpacing); + int traveledSinceTorch = 0; + int nextTorchDistance = spacing + random.nextInt(5) - 2; + + for (int i = 0; i < length; i++) { + BlockPos center = BlockPos.containing(x, Mth.clamp(y, minY, maxY), z); + nodes.add(new CaveNode(center, horizontalRadius, verticalRadius)); + + traveledSinceTorch++; + if (traveledSinceTorch >= Math.max(1, nextTorchDistance)) { + torchCheckpoints.add(i); + traveledSinceTorch = 0; + nextTorchDistance = spacing + random.nextInt(5) - 2; + } + + double turnDegrees = random.nextGaussian() * 8.0D; + if (random.nextFloat() < 0.1F) { + turnDegrees = random.nextGaussian() * 15.0D; + } + turnDegrees = Mth.clamp(turnDegrees, -25.0D, 25.0D); + double turnRadians = Math.toRadians(turnDegrees); + double cos = Math.cos(turnRadians); + double sin = Math.sin(turnRadians); + double newHeadingX = headingX * cos - headingZ * sin; + double newHeadingZ = headingX * sin + headingZ * cos; + double headingLength = Math.sqrt(newHeadingX * newHeadingX + newHeadingZ * newHeadingZ); + headingX = newHeadingX / headingLength; + headingZ = newHeadingZ / headingLength; + + verticalVelocity += random.nextGaussian() * 0.15D; + double deviation = y - startY; + verticalVelocity -= deviation * 0.06D; + if (deviation > SOFT_VERTICAL_DEVIATION) { + verticalVelocity -= 0.08D; + } else if (deviation < -SOFT_VERTICAL_DEVIATION) { + verticalVelocity += 0.08D; + } + verticalVelocity = Mth.clamp(verticalVelocity, -0.6D, 0.6D); + + x += headingX; + z += headingZ; + y = Mth.clamp(y + verticalVelocity, startY - MAX_VERTICAL_DEVIATION, startY + MAX_VERTICAL_DEVIATION); + + horizontalRadius = Mth.clamp(horizontalRadius + random.nextGaussian() * 0.15D, MIN_HORIZONTAL_RADIUS, MAX_HORIZONTAL_RADIUS); + verticalRadius = Mth.clamp(verticalRadius + random.nextGaussian() * 0.12D, MIN_VERTICAL_RADIUS, MAX_VERTICAL_RADIUS); + if (random.nextFloat() < 0.05F) { + horizontalRadius = Mth.clamp(horizontalRadius + 0.6D, MIN_HORIZONTAL_RADIUS, MAX_HORIZONTAL_RADIUS); + verticalRadius = Mth.clamp(verticalRadius + 0.5D, MIN_VERTICAL_RADIUS, MAX_VERTICAL_RADIUS); + } + } + + return new CaveGenerationResult(nodes, torchCheckpoints); + } + + public static void collectNodeCandidates(ServerLevel level, CaveNode node, LongOpenHashSet visited, RandomSource random, List out) { + BlockPos center = node.center(); + int hr = Mth.ceil(node.horizontalRadius()); + double upExtent = node.verticalRadius() * 1.25D; + double downExtent = node.verticalRadius() * 0.65D; + int upR = Mth.ceil(upExtent); + int downR = Mth.ceil(downExtent); + int minBuildHeight = level.getMinBuildHeight(); + int maxBuildHeight = level.getMaxBuildHeight(); + + for (int dy = -downR; dy <= upR; dy++) { + double vExtent = dy >= 0 ? upExtent : downExtent; + if (vExtent <= 0.0D) { + continue; + } + double vTerm = (dy * dy) / (vExtent * vExtent); + if (vTerm > 1.05D) { + continue; + } + + for (int dx = -hr; dx <= hr; dx++) { + double hxTerm = (dx * dx) / (node.horizontalRadius() * node.horizontalRadius()); + for (int dz = -hr; dz <= hr; dz++) { + double hzTerm = (dz * dz) / (node.horizontalRadius() * node.horizontalRadius()); + double distance = hxTerm + vTerm + hzTerm; + if (distance > 1.0D) { + continue; + } + if (distance > 0.7D) { + double edgeChance = (1.0D - distance) / 0.3D * 0.85D; + if (random.nextFloat() > edgeChance) { + continue; + } + } + + BlockPos pos = center.offset(dx, dy, dz); + if (pos.getY() < minBuildHeight || pos.getY() >= maxBuildHeight) { + continue; + } + + long packed = pos.asLong(); + if (visited.contains(packed)) { + continue; + } + + BlockState state = level.getBlockState(pos); + if (!state.is(AntarchyTags.Blocks.MINERS_DREAM_CARVABLE)) { + continue; + } + if (level.getBlockEntity(pos) != null) { + continue; + } + + visited.add(packed); + out.add(pos); + } + } + } + } + + public static boolean isChunkLoaded(ServerLevel level, BlockPos pos) { + return level.isLoaded(pos); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavation.java b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavation.java new file mode 100644 index 00000000..6d7e01a0 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavation.java @@ -0,0 +1,152 @@ +package com.craisinlord.antarchy.content.item; + +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.BlockParticleOption; +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import org.joml.Vector3f; + +public final class MinersDreamExcavation { + private static final Vector3f TRIFFID_GOO_COLOR = new Vector3f(0.35F, 0.85F, 0.4F); + private static final int SLICES_BETWEEN_RUMBLE = 4; + + private final UUID owner; + private final ResourceKey dimension; + private final List nodes; + private final Set torchCheckpoints; + private final LongOpenHashSet visited = new LongOpenHashSet(); + + private int nodeIndex = 0; + private List currentNodePositions = null; + private int positionCursor = 0; + private int slicesSinceRumble = 0; + private boolean finished = false; + + public MinersDreamExcavation(UUID owner, ResourceKey dimension, List nodes, Set torchCheckpoints) { + this.owner = owner; + this.dimension = dimension; + this.nodes = nodes; + this.torchCheckpoints = torchCheckpoints; + } + + public UUID owner() { + return owner; + } + + public ResourceKey dimension() { + return dimension; + } + + public boolean isFinished() { + return finished; + } + + public void tick(ServerLevel level, int blockBudget) { + RandomSource random = level.getRandom(); + int remaining = blockBudget; + + while (remaining > 0 && !finished) { + if (currentNodePositions == null) { + if (nodeIndex >= nodes.size()) { + finished = true; + playCompletionSound(level); + return; + } + + MinersDreamCaveGenerator.CaveNode node = nodes.get(nodeIndex); + if (!MinersDreamCaveGenerator.isChunkLoaded(level, node.center())) { + advanceNode(level, node); + continue; + } + + currentNodePositions = new ArrayList<>(); + MinersDreamCaveGenerator.collectNodeCandidates(level, node, visited, random, currentNodePositions); + positionCursor = 0; + } + + if (currentNodePositions.isEmpty()) { + MinersDreamCaveGenerator.CaveNode node = nodes.get(nodeIndex); + advanceNode(level, node); + continue; + } + + int endIndex = Math.min(currentNodePositions.size(), positionCursor + remaining); + for (; positionCursor < endIndex; positionCursor++) { + BlockPos pos = currentNodePositions.get(positionCursor); + BlockState removedState = level.getBlockState(pos); + if (removedState.isAir()) { + continue; + } + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 3); + remaining--; + if (random.nextFloat() < 0.12F) { + spawnBreakParticles(level, pos, removedState, random); + } + } + + if (positionCursor >= currentNodePositions.size()) { + MinersDreamCaveGenerator.CaveNode node = nodes.get(nodeIndex); + advanceNode(level, node); + } + } + } + + private void advanceNode(ServerLevel level, MinersDreamCaveGenerator.CaveNode node) { + RandomSource random = level.getRandom(); + spawnFrontDust(level, node, random); + slicesSinceRumble++; + if (slicesSinceRumble >= SLICES_BETWEEN_RUMBLE) { + slicesSinceRumble = 0; + playRumble(level, node); + } + + if (torchCheckpoints.contains(nodeIndex)) { + MinersDreamTorchPlacer.tryPlaceTorch(level, node.center(), random); + } + + currentNodePositions = null; + positionCursor = 0; + nodeIndex++; + } + + private void spawnBreakParticles(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + level.sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, state), + pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, 2, 0.25D, 0.25D, 0.25D, 0.02D); + if (random.nextFloat() < 0.2F) { + level.sendParticles(new DustParticleOptions(TRIFFID_GOO_COLOR, 1.0F), + pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, 1, 0.2D, 0.2D, 0.2D, 0.0D); + } + } + + private void spawnFrontDust(ServerLevel level, MinersDreamCaveGenerator.CaveNode node, RandomSource random) { + BlockPos center = node.center(); + level.sendParticles(ParticleTypes.CLOUD, center.getX() + 0.5D, center.getY() + 0.5D, center.getZ() + 0.5D, + 3, node.horizontalRadius() * 0.4D, node.verticalRadius() * 0.3D, node.horizontalRadius() * 0.4D, 0.01D); + } + + private void playRumble(ServerLevel level, MinersDreamCaveGenerator.CaveNode node) { + BlockPos center = node.center(); + level.playSound(null, center, SoundEvents.STONE_BREAK, SoundSource.BLOCKS, 0.5F, 0.7F); + } + + private void playCompletionSound(ServerLevel level) { + if (nodes.isEmpty()) { + return; + } + BlockPos center = nodes.get(nodes.size() - 1).center(); + level.playSound(null, center, SoundEvents.BEACON_ACTIVATE, SoundSource.PLAYERS, 0.4F, 1.4F); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavationManager.java b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavationManager.java new file mode 100644 index 00000000..4effa987 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamExcavationManager.java @@ -0,0 +1,81 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.Iterator; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; + +public final class MinersDreamExcavationManager { + private static final int MAX_ACTIVE_TASKS = 8; + private static final int SAFE_MIN_RANGE = 8; + private static final int SAFE_MAX_RANGE = 256; + private static final Map ACTIVE = new ConcurrentHashMap<>(); + + private MinersDreamExcavationManager() { + } + + public static boolean hasActiveExcavation(UUID owner) { + return ACTIVE.containsKey(owner); + } + + public static MinersDreamExcavation tryStart(ServerLevel level, UUID owner, BlockPos startPos, Direction direction) { + if (ACTIVE.containsKey(owner) || ACTIVE.size() >= MAX_ACTIVE_TASKS) { + return null; + } + + int minRange = Mth.clamp(AntarchySettings.minersDreamMinimumRange(), SAFE_MIN_RANGE, SAFE_MAX_RANGE); + int maxRange = Mth.clamp(AntarchySettings.minersDreamMaximumRange(), SAFE_MIN_RANGE, SAFE_MAX_RANGE); + if (minRange > maxRange) { + int swap = minRange; + minRange = maxRange; + maxRange = swap; + } + + RandomSource random = level.getRandom(); + int length = minRange == maxRange ? minRange : minRange + random.nextInt(maxRange - minRange + 1); + + MinersDreamCaveGenerator.CaveGenerationResult result = MinersDreamCaveGenerator.generate( + startPos, + direction, + length, + AntarchySettings.minersDreamTorchSpacing(), + level.getMinBuildHeight(), + level.getMaxBuildHeight(), + random + ); + + if (result.nodes().isEmpty()) { + return null; + } + + MinersDreamExcavation excavation = new MinersDreamExcavation(owner, level.dimension(), result.nodes(), result.torchCheckpoints()); + ACTIVE.put(owner, excavation); + return excavation; + } + + public static void tick(ServerLevel level) { + if (ACTIVE.isEmpty()) { + return; + } + + int budget = Math.max(1, AntarchySettings.minersDreamBlocksPerTick()); + Iterator> iterator = ACTIVE.entrySet().iterator(); + while (iterator.hasNext()) { + MinersDreamExcavation excavation = iterator.next().getValue(); + if (!excavation.dimension().equals(level.dimension())) { + continue; + } + + excavation.tick(level, budget); + if (excavation.isFinished()) { + iterator.remove(); + } + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamItem.java new file mode 100644 index 00000000..d0ec451f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamItem.java @@ -0,0 +1,79 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.List; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; + +public final class MinersDreamItem extends Item { + public MinersDreamItem(Properties properties) { + super(properties); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + Player player = context.getPlayer(); + if (player == null) { + return InteractionResult.PASS; + } + + if (!AntarchySettings.minersDreamEnabled()) { + if (!level.isClientSide()) { + player.displayClientMessage(Component.translatable("message.antarchy.miners_dream_disabled"), true); + } + return InteractionResult.FAIL; + } + + if (level.isClientSide()) { + return InteractionResult.SUCCESS; + } + + ServerLevel serverLevel = (ServerLevel) level; + BlockPos clickedPos = context.getClickedPos(); + Direction clickedFace = context.getClickedFace(); + Direction travelDirection = clickedFace.getAxis().isHorizontal() ? clickedFace : player.getDirection(); + BlockPos startPos = clickedPos.relative(travelDirection); + + if (!serverLevel.isInWorldBounds(startPos) || !MinersDreamCaveGenerator.isChunkLoaded(serverLevel, startPos)) { + return InteractionResult.FAIL; + } + + if (MinersDreamExcavationManager.hasActiveExcavation(player.getUUID())) { + player.displayClientMessage(Component.translatable("message.antarchy.miners_dream_busy"), true); + return InteractionResult.FAIL; + } + + MinersDreamExcavation excavation = MinersDreamExcavationManager.tryStart(serverLevel, player.getUUID(), startPos, travelDirection); + if (excavation == null) { + return InteractionResult.FAIL; + } + + serverLevel.playSound(null, clickedPos, SoundEvents.TNT_PRIMED, SoundSource.PLAYERS, 0.8F, 1.1F); + + if (!player.getAbilities().instabuild) { + context.getItemInHand().shrink(1); + } + + return InteractionResult.CONSUME; + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.miners_dream.line1").withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.miners_dream.line2").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamTorchPlacer.java b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamTorchPlacer.java new file mode 100644 index 00000000..08e8f78b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/MinersDreamTorchPlacer.java @@ -0,0 +1,89 @@ +package com.craisinlord.antarchy.content.item; + +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; + +public final class MinersDreamTorchPlacer { + private MinersDreamTorchPlacer() { + } + + public static void tryPlaceTorch(ServerLevel level, BlockPos center, RandomSource random) { + BlockPos floorSpot = findFloorSpot(level, center); + boolean floorFirst = random.nextBoolean(); + + if (floorFirst) { + if (floorSpot != null && placeFloorTorch(level, floorSpot)) { + return; + } + placeWallTorch(level, center, random); + return; + } + + if (placeWallTorch(level, center, random)) { + return; + } + if (floorSpot != null) { + placeFloorTorch(level, floorSpot); + } + } + + private static BlockPos findFloorSpot(ServerLevel level, BlockPos center) { + for (int dy = -2; dy <= 1; dy++) { + BlockPos candidate = center.offset(0, dy, 0); + if (!isOpenForTorch(level, candidate)) { + continue; + } + BlockState below = level.getBlockState(candidate.below()); + if (below.isFaceSturdy(level, candidate.below(), Direction.UP)) { + return candidate; + } + } + return null; + } + + private static boolean placeFloorTorch(ServerLevel level, BlockPos pos) { + if (!isOpenForTorch(level, pos)) { + return false; + } + BlockState state = Blocks.TORCH.defaultBlockState(); + if (!state.canSurvive(level, pos)) { + return false; + } + level.setBlock(pos, state, 3); + level.playSound(null, pos, state.getSoundType().getPlaceSound(), SoundSource.BLOCKS, 1.0F, 1.0F); + return true; + } + + private static boolean placeWallTorch(ServerLevel level, BlockPos center, RandomSource random) { + List order = Direction.Plane.HORIZONTAL.shuffledCopy(random); + for (int dy = -1; dy <= 1; dy++) { + BlockPos candidate = center.offset(0, dy, 0); + if (!isOpenForTorch(level, candidate)) { + continue; + } + for (Direction wallSide : order) { + Direction facing = wallSide.getOpposite(); + BlockState state = Blocks.WALL_TORCH.defaultBlockState().setValue(BlockStateProperties.HORIZONTAL_FACING, facing); + if (!state.canSurvive(level, candidate)) { + continue; + } + level.setBlock(candidate, state, 3); + level.playSound(null, candidate, state.getSoundType().getPlaceSound(), SoundSource.BLOCKS, 1.0F, 1.0F); + return true; + } + } + return false; + } + + private static boolean isOpenForTorch(ServerLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return (state.isAir() || state.canBeReplaced()) && level.getFluidState(pos).isEmpty(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/PeachBoatOnlyItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/PeachBoatOnlyItem.java new file mode 100644 index 00000000..eeab43ca --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/PeachBoatOnlyItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.PeachBoatEntity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +public class PeachBoatOnlyItem extends OuranwoodBoatItem { + private final EntityType entityType; + + public PeachBoatOnlyItem(EntityType entityType, Properties properties) { + super(properties); + this.entityType = entityType; + } + + @Override + protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { + Vec3 pos = hitResult.getLocation(); + PeachBoatEntity boat = new PeachBoatEntity(this.entityType, level); + boat.setPos(pos.x, pos.y, pos.z); + boat.xo = pos.x; + boat.yo = pos.y; + boat.zo = pos.z; + this.applyDefaultStackConfig(level, stack, player, boat); + return boat; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/PeachChestBoatItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/PeachChestBoatItem.java new file mode 100644 index 00000000..66a0ea72 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/PeachChestBoatItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.PeachChestBoatEntity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; + +public class PeachChestBoatItem extends OuranwoodBoatItem { + private final EntityType entityType; + + public PeachChestBoatItem(EntityType entityType, Properties properties) { + super(properties); + this.entityType = entityType; + } + + @Override + protected Boat createBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { + Vec3 pos = hitResult.getLocation(); + PeachChestBoatEntity boat = new PeachChestBoatEntity(this.entityType, level); + boat.setPos(pos.x, pos.y, pos.z); + boat.xo = pos.x; + boat.yo = pos.y; + boat.zo = pos.z; + this.applyDefaultStackConfig(level, stack, player, boat); + return boat; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java new file mode 100644 index 00000000..f75e2631 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/PeachItem.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Item; + +public class PeachItem extends Item { + public PeachItem() { + super(new Item.Properties().food(new FoodProperties.Builder() + .nutrition(4) + .saturationModifier(2.4F) + .build())); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/RootBeerItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/RootBeerItem.java new file mode 100644 index 00000000..39df6034 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/RootBeerItem.java @@ -0,0 +1,59 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.level.Level; + +public class RootBeerItem extends Item { + public RootBeerItem(Properties properties) { + super(properties); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livingEntity) { + ItemStack result = super.finishUsingItem(stack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.GLASS_BOTTLE); + } + + if (livingEntity instanceof Player player && !player.getAbilities().instabuild) { + ItemStack bottle = new ItemStack(Items.GLASS_BOTTLE); + if (!player.getInventory().add(bottle)) { + player.drop(bottle, false); + } + } + + return result; + } + + @Override + public int getUseDuration(ItemStack stack, LivingEntity entity) { + return 32; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + return ItemUtils.startUsingInstantly(level, player, usedHand); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java new file mode 100644 index 00000000..3e0e3a22 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/SpiritAppleItem.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; + +import java.util.List; + +public class SpiritAppleItem extends Item { + public SpiritAppleItem(Properties properties) { + super(properties); + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.spirit_apple").withStyle(ChatFormatting.GRAY)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/menu/DorrieInventoryMenu.java b/common/src/main/java/com/craisinlord/antarchy/content/menu/DorrieInventoryMenu.java new file mode 100644 index 00000000..7fe61a7d --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/menu/DorrieInventoryMenu.java @@ -0,0 +1,127 @@ +package com.craisinlord.antarchy.content.menu; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import net.minecraft.world.Container; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import org.jetbrains.annotations.Nullable; + +public class DorrieInventoryMenu extends AbstractContainerMenu { + public static final int SADDLE_SLOT = 0; + public static final int STORAGE_COLUMNS = 5; + public static final int STORAGE_ROWS = 3; + public static final int DORRIE_SLOT_COUNT = 1 + STORAGE_COLUMNS * STORAGE_ROWS; + private static final int PLAYER_INV_Y = 84; + private static final int PLAYER_HOTBAR_Y = 142; + + private final Container dorrieInventory; + @Nullable + private final DorrieEntity dorrie; + + public DorrieInventoryMenu(int containerId, Inventory playerInventory) { + this(containerId, playerInventory, new SimpleContainer(DORRIE_SLOT_COUNT), null); + } + + public DorrieInventoryMenu(int containerId, Inventory playerInventory, Container dorrieInventory, @Nullable DorrieEntity dorrie) { + super(AntarchyObjects.DORRIE_INVENTORY_MENU.get(), containerId); + checkContainerSize(dorrieInventory, DORRIE_SLOT_COUNT); + this.dorrieInventory = dorrieInventory; + this.dorrie = dorrie; + dorrieInventory.startOpen(playerInventory.player); + + this.addSlot(new Slot(dorrieInventory, SADDLE_SLOT, 8, 18) { + @Override + public boolean mayPlace(ItemStack stack) { + return stack.is(Items.SADDLE) && !this.hasItem(); + } + + @Override + public int getMaxStackSize() { + return 1; + } + }); + + for (int row = 0; row < STORAGE_ROWS; row++) { + for (int col = 0; col < STORAGE_COLUMNS; col++) { + this.addSlot(new Slot(dorrieInventory, 1 + col + row * STORAGE_COLUMNS, 80 + col * 18, 18 + row * 18)); + } + } + + for (int row = 0; row < 3; row++) { + for (int col = 0; col < 9; col++) { + this.addSlot(new Slot(playerInventory, col + row * 9 + 9, 8 + col * 18, PLAYER_INV_Y + row * 18)); + } + } + + for (int col = 0; col < 9; col++) { + this.addSlot(new Slot(playerInventory, col, 8 + col * 18, PLAYER_HOTBAR_Y)); + } + } + + public Container dorrieInventory() { + return this.dorrieInventory; + } + + @Nullable + public DorrieEntity dorrie() { + return this.dorrie; + } + + @Override + public boolean stillValid(Player player) { + return this.dorrieInventory.stillValid(player) + && (this.dorrie == null || this.dorrie.isAlive() && this.dorrie.distanceTo(player) < 8.0F); + } + + @Override + public ItemStack quickMoveStack(Player player, int index) { + ItemStack quickMoved = ItemStack.EMPTY; + Slot slot = this.slots.get(index); + if (!slot.hasItem()) { + return ItemStack.EMPTY; + } + + ItemStack stack = slot.getItem(); + quickMoved = stack.copy(); + int dorrieEnd = DORRIE_SLOT_COUNT; + int playerStart = dorrieEnd; + int playerEnd = this.slots.size(); + + if (index < dorrieEnd) { + if (!this.moveItemStackTo(stack, playerStart, playerEnd, true)) { + return ItemStack.EMPTY; + } + } else if (stack.is(Items.SADDLE)) { + if (!this.moveItemStackTo(stack, SADDLE_SLOT, SADDLE_SLOT + 1, false)) { + return ItemStack.EMPTY; + } + } else if (!this.moveItemStackTo(stack, 1, dorrieEnd, false)) { + return ItemStack.EMPTY; + } + + if (stack.isEmpty()) { + slot.setByPlayer(ItemStack.EMPTY); + } else { + slot.setChanged(); + } + + if (stack.getCount() == quickMoved.getCount()) { + return ItemStack.EMPTY; + } + + slot.onTake(player, stack); + return quickMoved; + } + + @Override + public void removed(Player player) { + super.removed(player); + this.dorrieInventory.stopOpen(player); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java index 90eb49c8..bf7750b7 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -37,6 +37,26 @@ public class ElythiaBiomeSource extends BiomeSource { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_beach") ); + private static final ResourceKey OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ouranwood_forest") + ); + private static final ResourceKey SPARSE_OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "sparse_ouranwood_forest") + ); + private static final ResourceKey PEACH_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_forest") + ); + private static final ResourceKey FUNGAL_OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "fungal_ouranwood_forest") + ); + private static final ResourceKey GLIMMERING_POOLS = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmering_pools") + ); private static final int[] SURFACE_FALLBACK_BLOCK_YS = new int[]{192, 160, 128, 96, 64, 32, 0}; public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( @@ -58,6 +78,7 @@ public class ElythiaBiomeSource extends BiomeSource { private final int seaLevelQuartY; private final Holder oceanHolder; private final Holder defaultLandHolder; + private final Holder glimmeringPoolsHolder; public ElythiaBiomeSource(Climate.ParameterList> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY, int oceanMaxY, int seaLevel) { this.parameters = parameters; @@ -74,10 +95,16 @@ public class ElythiaBiomeSource extends BiomeSource { .filter(h -> h.is(ELYTHIA_OCEAN)) .findFirst() .orElse(null); + this.glimmeringPoolsHolder = parameters.values().stream() + .map(Pair::getSecond) + .filter(h -> h.is(GLIMMERING_POOLS)) + .findFirst() + .orElse(null); this.defaultLandHolder = parameters.values().stream() .map(Pair::getSecond) .filter(h -> !isOceanBiome(h) && !h.is(ELYTHIA_BEACH) - && !h.is(MOLEWORM_CAVES) && !h.is(ELYTHIA_LUSH_CAVES)) + && !h.is(MOLEWORM_CAVES) && !h.is(ELYTHIA_LUSH_CAVES) + && !h.is(GLIMMERING_POOLS)) .findFirst() .orElse(null); } @@ -110,7 +137,7 @@ public class ElythiaBiomeSource extends BiomeSource { // Cap moleworm caves below their max Y — replace with surface biome above it if (biome.is(MOLEWORM_CAVES) && y > this.molewormCavesMaxQuartY) { - return resolveSurfaceFallback(x, y, z, sampler, MOLEWORM_CAVES); + return resolveSurfaceFallback(x, y, z, sampler, MOLEWORM_CAVES, GLIMMERING_POOLS); } // Use continentalness (XZ-only noise) to classify the column. @@ -138,6 +165,10 @@ public class ElythiaBiomeSource extends BiomeSource { return resolveLandFallback(x, z, sampler); } + if (isGlimmeringPoolsCandidate(biome, target, x, z)) { + return this.glimmeringPoolsHolder != null ? this.glimmeringPoolsHolder : biome; + } + return biome; } @@ -150,6 +181,44 @@ public class ElythiaBiomeSource extends BiomeSource { return biome.is(ELYTHIA_OCEAN) || biome.is(ELYTHIA_CORAL_SPIKES); } + private static boolean isOuranwoodBiome(Holder biome) { + return biome.is(OURANWOOD_FOREST) || biome.is(SPARSE_OURANWOOD_FOREST) + || biome.is(PEACH_FOREST) || biome.is(FUNGAL_OURANWOOD_FOREST); + } + + private static boolean isGlimmeringPoolsCandidate(Holder biome, Climate.TargetPoint target, int x, int z) { + if (!isOuranwoodBiome(biome)) { + return false; + } + + long humidity = target.humidity(); + long continentalness = target.continentalness(); + long weirdness = target.weirdness(); + long depth = target.depth(); + + if (humidity < Climate.quantizeCoord(0.68F) || humidity > Climate.quantizeCoord(1.0F)) { + return false; + } + if (continentalness < Climate.quantizeCoord(0.32F) || continentalness > Climate.quantizeCoord(0.88F)) { + return false; + } + if (weirdness < Climate.quantizeCoord(-0.84F) || weirdness > Climate.quantizeCoord(0.29F)) { + return false; + } + if (depth < Climate.quantizeCoord(0.0F) || depth > Climate.quantizeCoord(0.80F)) { + return false; + } + + // Hash on coarse cells (not raw per-quart coords) so eligible columns + // clump into contiguous patches instead of speckling per-quart. + // Cell size bumped from 6 to 8 blocks so patches (and the pools/streams + // they host) run slightly larger than before. + long cellX = Math.floorDiv(x, 8); + long cellZ = Math.floorDiv(z, 8); + long gate = Math.floorMod(cellX * 73428767L + cellZ * 912931L, 5L); + return gate <= 2L; + } + // Used for moleworm caves — returns best Y-sample, falls back to whatever the delegate gives @SafeVarargs private Holder resolveSurfaceFallback(int x, int y, int z, Climate.Sampler sampler, ResourceKey... excluded) { @@ -191,7 +260,8 @@ public class ElythiaBiomeSource extends BiomeSource { private static boolean isOceanOrCave(Holder biome) { return isOceanBiome(biome) || biome.is(ELYTHIA_BEACH) - || biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES); + || biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES) + || biome.is(GLIMMERING_POOLS); } @Override diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java index c7517782..7917e702 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java @@ -39,13 +39,14 @@ public class ElythiaFloraFeature extends Feature { int attempts = switch (this.variant) { case FOREST -> 185; case MEADOW -> 95; + case PEACH_FOREST -> 120; case TORCHFLOWER_FIELDS -> 60; case BUTTERFLY_FIELDS -> 150; case FLOWER_FOREST_MILKWEED -> 14; }; int radius = switch (this.variant) { case FOREST -> 8; - case MEADOW, TORCHFLOWER_FIELDS -> 14; + case MEADOW, PEACH_FOREST, TORCHFLOWER_FIELDS -> 14; case BUTTERFLY_FIELDS -> 18; case FLOWER_FOREST_MILKWEED -> 8; }; @@ -54,6 +55,7 @@ public class ElythiaFloraFeature extends Feature { int torchflowerPatchRolls = switch (this.variant) { case TORCHFLOWER_FIELDS -> 3 + random.nextInt(3); case BUTTERFLY_FIELDS -> 2 + random.nextInt(3); + case PEACH_FOREST -> 1; case FLOWER_FOREST_MILKWEED -> 0; default -> 1; }; @@ -61,6 +63,7 @@ public class ElythiaFloraFeature extends Feature { float torchflowerChance = switch (this.variant) { case FOREST -> 0.24F; case MEADOW -> 0.42F; + case PEACH_FOREST -> 0.08F; case TORCHFLOWER_FIELDS -> 0.95F; case BUTTERFLY_FIELDS -> 0.24F; case FLOWER_FOREST_MILKWEED -> 0.0F; @@ -72,6 +75,7 @@ public class ElythiaFloraFeature extends Feature { if (random.nextFloat() < switch (this.variant) { case MEADOW -> 0.1F; + case PEACH_FOREST -> 0.0F; case TORCHFLOWER_FIELDS -> 0.04F; case BUTTERFLY_FIELDS -> 0.12F; case FOREST -> 0.05F; @@ -81,6 +85,7 @@ public class ElythiaFloraFeature extends Feature { } if (random.nextFloat() < switch (this.variant) { case MEADOW -> 0.16F; + case PEACH_FOREST -> 0.0F; case TORCHFLOWER_FIELDS -> 0.08F; case BUTTERFLY_FIELDS -> 0.95F; case FOREST -> 0.06F; @@ -90,6 +95,7 @@ public class ElythiaFloraFeature extends Feature { } if (random.nextFloat() < switch (this.variant) { case MEADOW -> 0.16F; + case PEACH_FOREST -> 0.0F; case TORCHFLOWER_FIELDS -> 0.08F; case BUTTERFLY_FIELDS -> 0.95F; case FOREST -> 0.06F; @@ -98,7 +104,7 @@ public class ElythiaFloraFeature extends Feature { placedAny |= this.placeMilkweedPatch(level, origin, random, AntarchyObjects.PINK_MILKWEED.get()); } - if (this.variant == Variant.FOREST) { + if (this.variant == Variant.FOREST || this.variant == Variant.PEACH_FOREST) { placedAny |= this.placeBigBushes(level, origin, random, radius); } @@ -113,7 +119,8 @@ public class ElythiaFloraFeature extends Feature { continue; } - maybeOvergrowGround(level, groundPos, random, this.variant != Variant.FOREST); + normalizePeachForestGround(level, groundPos, this.variant); + maybeOvergrowGround(level, groundPos, random, this.variant); if (placeSelectedPlant(level, plantPos, groundPos, random)) { placedAny = true; } @@ -170,6 +177,14 @@ public class ElythiaFloraFeature extends Feature { return placeDouble(level, plantPos, Blocks.LARGE_FERN.defaultBlockState()); } + if (this.variant == Variant.PEACH_FOREST) { + float roll = random.nextFloat(); + if (roll < 0.58F) { + return placeSingle(level, plantPos, Blocks.SHORT_GRASS); + } + return placeSingle(level, plantPos, veryShortGrass()); + } + float roll = random.nextFloat(); if (this.variant == Variant.MEADOW) { if (roll < 0.34F) { @@ -223,7 +238,10 @@ public class ElythiaFloraFeature extends Feature { } boolean placed = false; - int bushAttempts = 12 + random.nextInt(7); + int bushAttempts = switch (this.variant) { + case PEACH_FOREST -> 1 + random.nextInt(2); + default -> 12 + random.nextInt(7); + }; for (int i = 0; i < bushAttempts; i++) { int x = origin.getX() + random.nextInt(radius * 2 + 1) - radius; int z = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; @@ -402,6 +420,7 @@ public class ElythiaFloraFeature extends Feature { int attempts = switch (this.variant) { case FOREST -> 3; case MEADOW -> 5; + case PEACH_FOREST -> 3; case TORCHFLOWER_FIELDS -> 2; case BUTTERFLY_FIELDS -> 3; case FLOWER_FOREST_MILKWEED -> 2; @@ -451,18 +470,42 @@ public class ElythiaFloraFeature extends Feature { return isOpenPlantSpot(level, plantPos) ? plantPos : null; } - private static void maybeOvergrowGround(WorldGenLevel level, BlockPos groundPos, RandomSource random, boolean meadow) { - if (!isValidGround(level, groundPos) || random.nextFloat() > (meadow ? 0.45F : 0.24F)) { + private static void normalizePeachForestGround(WorldGenLevel level, BlockPos groundPos, Variant variant) { + if (variant != Variant.PEACH_FOREST) { return; } - BlockState replacement = random.nextFloat() < 0.35F + BlockState state = level.getBlockState(groundPos); + if (state.is(Blocks.MOSS_BLOCK) || state.is(Blocks.ROOTED_DIRT)) { + level.setBlock(groundPos, AntarchyObjects.BLUSH_MOSS_BLOCK.get().defaultBlockState(), 2); + } + } + + private static void maybeOvergrowGround(WorldGenLevel level, BlockPos groundPos, RandomSource random, Variant variant) { + boolean meadow = variant != Variant.FOREST; + float overgrowChance = switch (variant) { + case PEACH_FOREST -> 0.20F; + case FOREST -> 0.24F; + default -> 0.45F; + }; + if (!isValidGround(level, groundPos) || random.nextFloat() > overgrowChance) { + return; + } + + BlockState replacement = variant == Variant.PEACH_FOREST + ? AntarchyObjects.BLUSH_MOSS_BLOCK.get().defaultBlockState() + : random.nextFloat() < 0.35F ? Blocks.ROOTED_DIRT.defaultBlockState() : Blocks.MOSS_BLOCK.defaultBlockState(); level.setBlock(groundPos, replacement, 2); for (DirectionHolder direction : DirectionHolder.HORIZONTAL) { - if (random.nextFloat() > (meadow ? 0.22F : 0.1F)) { + float spreadChance = switch (variant) { + case PEACH_FOREST -> 0.07F; + case FOREST -> 0.1F; + default -> 0.22F; + }; + if (random.nextFloat() > spreadChance) { continue; } BlockPos spreadPos = groundPos.offset(direction.stepX, 0, direction.stepZ); @@ -492,7 +535,11 @@ public class ElythiaFloraFeature extends Feature { } private static boolean isIntendedGround(BlockState state) { - return state.is(BlockTags.DIRT) || state.is(Blocks.GRASS_BLOCK) || state.is(Blocks.MOSS_BLOCK) || state.is(Blocks.ROOTED_DIRT); + return state.is(BlockTags.DIRT) + || state.is(Blocks.GRASS_BLOCK) + || state.is(Blocks.MOSS_BLOCK) + || state.is(Blocks.ROOTED_DIRT) + || state.is(AntarchyObjects.BLUSH_MOSS_BLOCK.get()); } private static boolean isUnderwaterGround(WorldGenLevel level, BlockPos pos) { @@ -533,6 +580,7 @@ public class ElythiaFloraFeature extends Feature { public enum Variant { FOREST, MEADOW, + PEACH_FOREST, TORCHFLOWER_FIELDS, BUTTERFLY_FIELDS, FLOWER_FOREST_MILKWEED diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenLilyPadFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenLilyPadFeature.java new file mode 100644 index 00000000..2fa0badd --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenLilyPadFeature.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class LumenLilyPadFeature extends Feature { + public LumenLilyPadFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + boolean placedAny = false; + + for (int i = 0; i < 24; i++) { + int x = origin.getX() + random.nextInt(17) - 8; + int z = origin.getZ() + random.nextInt(17) - 8; + int surfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + BlockPos fluidPos = new BlockPos(x, surfaceY, z); + if (!level.getFluidState(fluidPos).is(AntarchyTags.Fluids.LUMEN) || !level.getFluidState(fluidPos).isSource()) { + continue; + } + + BlockPos padPos = fluidPos.above(); + if (!level.isEmptyBlock(padPos)) { + continue; + } + + BlockState lilyPad = Blocks.LILY_PAD.defaultBlockState(); + if (!lilyPad.canSurvive(level, padPos)) { + continue; + } + + level.setBlock(padPos, lilyPad, 2); + placedAny = true; + } + + return placedAny; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java new file mode 100644 index 00000000..08d7a2f4 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java @@ -0,0 +1,191 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class LumenPoolFeature extends Feature { + private static final int SMALL_RADIUS_MIN = 2; + private static final int SMALL_RADIUS_MAX = 4; + private static final int LARGE_RADIUS_MIN = 5; + private static final int LARGE_RADIUS_MAX = 6; + private static final int HUGE_RADIUS_MIN = 11; + private static final int HUGE_RADIUS_MAX = 17; + + public LumenPoolFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + BlockPos center = findSurfaceCenter(level, origin); + if (center == null) { + return false; + } + + int radius; + int maxDepth; + if (random.nextInt(20) == 0) { + radius = randomBetween(random, HUGE_RADIUS_MIN, HUGE_RADIUS_MAX); + maxDepth = randomBetween(random, 9, 13); + } else if (random.nextInt(8) == 0) { + radius = randomBetween(random, LARGE_RADIUS_MIN, LARGE_RADIUS_MAX); + maxDepth = randomBetween(random, 4, 6); + } else { + radius = randomBetween(random, SMALL_RADIUS_MIN, SMALL_RADIUS_MAX); + maxDepth = randomBetween(random, 3, 4); + } + BlockState lumenBlockState = AntarchyObjects.LUMEN_BLOCK.get().defaultBlockState(); + BlockState shellstoneState = AntarchyObjects.SHELLSTONE.get().defaultBlockState(); + BlockState tuffState = Blocks.TUFF.defaultBlockState(); + BlockState mossState = Blocks.MOSS_BLOCK.defaultBlockState(); + int waterlineY = center.getY() - 1; + + int floorY = waterlineY - maxDepth; + if (floorY <= level.getMinBuildHeight() + 2) { + return false; + } + + if (!hasSolidSubstrate(level, center.getX(), center.getZ(), floorY)) { + return false; + } + + boolean placedAny = false; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + + for (int dx = -radius - 2; dx <= radius + 2; dx++) { + for (int dz = -radius - 2; dz <= radius + 2; dz++) { + double distance = warpedDistance(dx, dz, random, radius); + if (distance > radius + 0.7D) { + continue; + } + + int worldX = center.getX() + dx; + int worldZ = center.getZ() + dz; + int localSurfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, worldX, worldZ) - 1; + if (localSurfaceY < center.getY() - 2 || localSurfaceY > center.getY() + 1) { + continue; + } + + double normalized = Mth.clamp((float) (distance / Math.max(radius, 1)), 0.0F, 1.25F); + int basinDepth = Math.max(2, Mth.floor((1.0D - (normalized * normalized)) * maxDepth)); + if (distance <= radius * 0.45D) { + basinDepth = Math.max(basinDepth, maxDepth - 1); + } + int localWaterlineY = Math.min(waterlineY, localSurfaceY - 1); + int localFloorY = localWaterlineY - basinDepth; + if (localFloorY <= level.getMinBuildHeight() + 1) { + continue; + } + if (!hasSolidSubstrate(level, worldX, worldZ, localFloorY)) { + continue; + } + + boolean edge = distance >= radius - 0.55D; + boolean shoulder = !edge && distance >= radius - 1.2D; + boolean innerWall = !edge && distance >= radius - 0.9D; + int bankTopY = Math.max(localWaterlineY + 1, Math.min(localSurfaceY, center.getY())); + + for (int y = localSurfaceY; y > localFloorY; y--) { + mutable.set(worldX, y, worldZ); + if (y > localWaterlineY) { + level.setBlock(mutable, y <= bankTopY && (edge || shoulder) ? pickWallState(random, shellstoneState, tuffState) : Blocks.AIR.defaultBlockState(), 2); + placedAny = true; + continue; + } + + if (edge || (innerWall && y >= localFloorY + 1)) { + level.setBlock(mutable, pickWallState(random, shellstoneState, tuffState), 2); + placedAny = true; + continue; + } + + level.setBlock(mutable, LumenWorldgenHelper.lumenState(lumenBlockState, 0), 2); + LumenWorldgenHelper.scheduleFluidTick(level, mutable.immutable()); + placedAny = true; + } + + mutable.set(worldX, localFloorY, worldZ); + BlockState floorState = pickFloorState(random, shellstoneState, tuffState, mossState, edge); + level.setBlock(mutable, floorState, 2); + placedAny = true; + } + } + + return placedAny; + } + + private static BlockPos findSurfaceCenter(WorldGenLevel level, BlockPos origin) { + int bestY = Integer.MIN_VALUE; + BlockPos bestPos = null; + for (int dx = -4; dx <= 4; dx++) { + for (int dz = -4; dz <= 4; dz++) { + int x = origin.getX() + dx; + int z = origin.getZ() + dz; + int topY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + BlockPos pos = LumenWorldgenHelper.findNaturalFloor(level, x, z, topY, level.getMinBuildHeight() + 1); + if (pos != null && pos.getY() > bestY) { + bestY = pos.getY(); + bestPos = pos; + } + } + } + return bestPos; + } + + private static boolean hasSolidSubstrate(WorldGenLevel level, int x, int z, int floorY) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int y = floorY - 1; y >= floorY - 3; y--) { + mutable.set(x, y, z); + if (LumenWorldgenHelper.isSolidSupport(level.getBlockState(mutable))) { + return true; + } + } + return false; + } + + private static BlockState pickWallState(RandomSource random, BlockState shellstoneState, BlockState tuffState) { + return random.nextFloat() < 0.72F ? shellstoneState : tuffState; + } + + private static BlockState pickFloorState(RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState, boolean edge) { + int roll = random.nextInt(100); + if (roll < 65) { + return shellstoneState; + } + if (roll < 95) { + return tuffState; + } + return edge ? mossState : shellstoneState; + } + + private static double warpedDistance(int dx, int dz, RandomSource random, int radius) { + double scaleX = 1.0D + random.nextDouble() * 0.18D; + double scaleZ = 0.85D + random.nextDouble() * 0.22D; + double warpX = Math.sin((dz * 0.42D) + random.nextDouble() * Math.PI * 2.0D) * 0.18D; + double warpZ = Math.cos((dx * 0.48D) + random.nextDouble() * Math.PI * 2.0D) * 0.18D; + double warpedX = (dx / scaleX) + warpX; + double warpedZ = (dz / scaleZ) + warpZ; + return Mth.sqrt((float) ((warpedX * warpedX) + (warpedZ * warpedZ))); + } + + private static int randomBetween(RandomSource random, int minInclusive, int maxInclusive) { + int min = Math.min(minInclusive, maxInclusive); + int max = Math.max(minInclusive, maxInclusive); + return min >= max ? min : min + random.nextInt(max - min + 1); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenStreamFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenStreamFeature.java new file mode 100644 index 00000000..0c2477f7 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenStreamFeature.java @@ -0,0 +1,340 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class LumenStreamFeature extends Feature { + private static final int MAX_LENGTH = 160; + private static final int MIN_LENGTH = 60; + private static final int MAX_WIDTH = 4; + + public LumenStreamFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + StreamStart start = findStart(level, origin); + if (start == null) { + return false; + } + + BlockState lumenBlockState = AntarchyObjects.LUMEN_BLOCK.get().defaultBlockState(); + BlockState shellstoneState = AntarchyObjects.SHELLSTONE.get().defaultBlockState(); + BlockState tuffState = Blocks.TUFF.defaultBlockState(); + + Direction direction = pickDownhillDirection(level, start.x(), start.z(), start.surfaceY(), random); + if (direction == null) { + return false; + } + + int length = randomBetween(random, MIN_LENGTH, MAX_LENGTH); + int x = start.x(); + int z = start.z(); + int previousSurfaceY = start.surfaceY(); + boolean placedAny = false; + + for (int step = 0; step < length; step++) { + int surfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + if (surfaceY <= level.getMinBuildHeight() + 4) { + break; + } + + if (step > 0 && surfaceY - previousSurfaceY > 2) { + break; + } + + int channelDepth = step == 0 ? 4 : 3 + random.nextInt(2); + int waterlineY = surfaceY - 1; + int floorY = waterlineY - channelDepth; + if (!hasSolidSubstrate(level, x, z, floorY)) { + break; + } + + placedAny |= carveChannelSegment(level, random, x, z, surfaceY, waterlineY, floorY, lumenBlockState, shellstoneState, tuffState, step); + + Direction nextDirection = chooseNextDirection(level, x, z, direction, random); + if (nextDirection == null) { + break; + } + + direction = nextDirection; + previousSurfaceY = surfaceY; + x += direction.getStepX(); + z += direction.getStepZ(); + } + + if (placedAny) { + placedAny |= createTerminalBasin(level, random, x, z, lumenBlockState, shellstoneState, tuffState); + } + + return placedAny; + } + + private static boolean carveChannelSegment( + WorldGenLevel level, + RandomSource random, + int centerX, + int centerZ, + int surfaceY, + int waterlineY, + int floorY, + BlockState lumenBlockState, + BlockState shellstoneState, + BlockState tuffState, + int step + ) { + boolean placedAny = false; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + int width = 1 + random.nextInt(MAX_WIDTH); + + for (int dx = -width; dx <= width; dx++) { + for (int dz = -width; dz <= width; dz++) { + double distance = Math.sqrt(dx * dx + dz * dz); + if (distance > width + 0.4D) { + continue; + } + + int worldX = centerX + dx; + int worldZ = centerZ + dz; + int localSurfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, worldX, worldZ) - 1; + if (localSurfaceY < floorY + 1) { + continue; + } + + double normalized = Mth.clamp((float) (distance / Math.max(width, 1)), 0.0F, 1.25F); + int localDepth = Math.max(2, Mth.floor((1.0D - (normalized * normalized)) * (waterlineY - floorY))); + if (distance <= width * 0.45D) { + localDepth = Math.max(localDepth, waterlineY - floorY - 1); + } + int localWaterlineY = Math.min(waterlineY, localSurfaceY - 1); + int localFloorY = localWaterlineY - localDepth; + if (!hasSolidSubstrate(level, worldX, worldZ, localFloorY)) { + continue; + } + + boolean edge = distance >= width - 0.45D; + boolean innerWall = !edge && distance >= width - 0.8D; + int bankTopY = Math.max(localWaterlineY + 1, Math.min(localSurfaceY, surfaceY)); + for (int y = localSurfaceY; y > localFloorY; y--) { + mutable.set(worldX, y, worldZ); + if (y > localWaterlineY) { + level.setBlock(mutable, y <= bankTopY && (edge || innerWall) ? pickWallState(random, shellstoneState, tuffState) : Blocks.AIR.defaultBlockState(), 2); + placedAny = true; + continue; + } + + if (edge || (innerWall && y >= localFloorY + 1)) { + level.setBlock(mutable, pickWallState(random, shellstoneState, tuffState), 2); + placedAny = true; + continue; + } + + level.setBlock(mutable, LumenWorldgenHelper.lumenState(lumenBlockState, 0), 2); + LumenWorldgenHelper.scheduleFluidTick(level, mutable.immutable()); + placedAny = true; + } + + mutable.set(worldX, localFloorY, worldZ); + level.setBlock(mutable, random.nextFloat() < 0.65F ? shellstoneState : tuffState, 2); + placedAny = true; + } + } + + return placedAny; + } + + private static boolean createTerminalBasin( + WorldGenLevel level, + RandomSource random, + int centerX, + int centerZ, + BlockState lumenBlockState, + BlockState shellstoneState, + BlockState tuffState + ) { + int surfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, centerX, centerZ) - 1; + int radius = 3 + random.nextInt(2); + int waterlineY = surfaceY - 1; + int maxDepth = 3 + random.nextInt(2); + int floorY = waterlineY - maxDepth; + if (!hasSolidSubstrate(level, centerX, centerZ, floorY)) { + return false; + } + + boolean placedAny = false; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int dx = -radius; dx <= radius; dx++) { + for (int dz = -radius; dz <= radius; dz++) { + double distance = Math.sqrt(dx * dx + dz * dz); + if (distance > radius + 0.6D) { + continue; + } + + int worldX = centerX + dx; + int worldZ = centerZ + dz; + int localSurfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, worldX, worldZ) - 1; + if (localSurfaceY < floorY + 1) { + continue; + } + + double normalized = Mth.clamp((float) (distance / Math.max(radius, 1)), 0.0F, 1.25F); + int localDepth = Math.max(2, Mth.floor((1.0D - (normalized * normalized)) * maxDepth)); + int localWaterlineY = Math.min(waterlineY, localSurfaceY - 1); + int localFloorY = localWaterlineY - localDepth; + boolean edge = distance >= radius - 0.45D; + boolean innerWall = !edge && distance >= radius - 0.85D; + int bankTopY = Math.max(localWaterlineY + 1, Math.min(localSurfaceY, surfaceY)); + for (int y = localSurfaceY; y > localFloorY; y--) { + mutable.set(worldX, y, worldZ); + if (y > localWaterlineY) { + level.setBlock(mutable, y <= bankTopY && (edge || innerWall) ? pickWallState(random, shellstoneState, tuffState) : Blocks.AIR.defaultBlockState(), 2); + placedAny = true; + continue; + } + + if (edge || (innerWall && y >= localFloorY + 1)) { + level.setBlock(mutable, pickWallState(random, shellstoneState, tuffState), 2); + placedAny = true; + continue; + } + + level.setBlock(mutable, lumenBlockState, 2); + LumenWorldgenHelper.scheduleFluidTick(level, mutable.immutable()); + placedAny = true; + } + + mutable.set(worldX, localFloorY, worldZ); + level.setBlock(mutable, random.nextFloat() < 0.75F ? shellstoneState : tuffState, 2); + placedAny = true; + } + } + + return placedAny; + } + + private static StreamStart findStart(WorldGenLevel level, BlockPos origin) { + int bestY = Integer.MIN_VALUE; + StreamStart best = null; + for (int dx = -4; dx <= 4; dx++) { + for (int dz = -4; dz <= 4; dz++) { + int x = origin.getX() + dx; + int z = origin.getZ() + dz; + int topY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + BlockPos floor = LumenWorldgenHelper.findNaturalFloor(level, x, z, topY, level.getMinBuildHeight() + 1); + if (floor != null && floor.getY() > bestY) { + bestY = floor.getY(); + best = new StreamStart(x, z, floor.getY()); + } + } + } + return best; + } + + private static BlockState pickWallState(RandomSource random, BlockState shellstoneState, BlockState tuffState) { + return random.nextFloat() < 0.7F ? shellstoneState : tuffState; + } + + private static Direction pickDownhillDirection(WorldGenLevel level, int x, int z, int surfaceY, RandomSource random) { + Direction bestDirection = null; + int bestDrop = Integer.MIN_VALUE; + for (Direction direction : Direction.Plane.HORIZONTAL) { + int nextX = x + direction.getStepX() * 3; + int nextZ = z + direction.getStepZ() * 3; + int nextY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, nextX, nextZ) - 1; + int drop = surfaceY - nextY; + if (drop > bestDrop) { + bestDrop = drop; + bestDirection = direction; + } + } + + if (bestDirection == null) { + return null; + } + + if (bestDrop < -1 && random.nextInt(4) != 0) { + return null; + } + + return bestDirection; + } + + private static Direction chooseNextDirection(WorldGenLevel level, int x, int z, Direction current, RandomSource random) { + Direction[] candidates = new Direction[] { + current, + turnLeft(current), + turnRight(current) + }; + + Direction best = null; + int bestScore = Integer.MAX_VALUE; + for (Direction candidate : candidates) { + int nextX = x + candidate.getStepX() * 2; + int nextZ = z + candidate.getStepZ() * 2; + int nextY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, nextX, nextZ) - 1; + int score = nextY * 8 + random.nextInt(3); + if (score < bestScore) { + bestScore = score; + best = candidate; + } + } + + return best; + } + + private static Direction turnLeft(Direction direction) { + return switch (direction) { + case NORTH -> Direction.WEST; + case WEST -> Direction.SOUTH; + case SOUTH -> Direction.EAST; + case EAST -> Direction.NORTH; + default -> direction; + }; + } + + private static Direction turnRight(Direction direction) { + return switch (direction) { + case NORTH -> Direction.EAST; + case EAST -> Direction.SOUTH; + case SOUTH -> Direction.WEST; + case WEST -> Direction.NORTH; + default -> direction; + }; + } + + private static boolean hasSolidSubstrate(WorldGenLevel level, int x, int z, int floorY) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int y = floorY - 1; y >= floorY - 4; y--) { + mutable.set(x, y, z); + if (LumenWorldgenHelper.isSolidSupport(level.getBlockState(mutable))) { + return true; + } + } + return false; + } + + private static int randomBetween(RandomSource random, int minInclusive, int maxInclusive) { + int min = Math.min(minInclusive, maxInclusive); + int max = Math.max(minInclusive, maxInclusive); + return min >= max ? min : min + random.nextInt(max - min + 1); + } + + private record StreamStart(int x, int z, int surfaceY) { + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenWorldgenHelper.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenWorldgenHelper.java new file mode 100644 index 00000000..dd527123 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenWorldgenHelper.java @@ -0,0 +1,71 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; + +final class LumenWorldgenHelper { + private LumenWorldgenHelper() { + } + + static boolean isNaturalFloor(BlockState state) { + return state.is(net.minecraft.tags.BlockTags.DIRT) + || state.is(net.minecraft.world.level.block.Blocks.GRASS_BLOCK) + || state.is(net.minecraft.world.level.block.Blocks.MOSS_BLOCK) + || state.is(net.minecraft.world.level.block.Blocks.ROOTED_DIRT) + || state.is(AntarchyObjects.SHELLSTONE.get()) + || state.is(net.minecraft.world.level.block.Blocks.TUFF); + } + + static boolean isSolidSupport(BlockState state) { + return !state.isAir() + && state.blocksMotion() + && state.getFluidState().isEmpty() + && !state.is(BlockTags.LOGS) + && !state.is(BlockTags.LEAVES); + } + + static BlockPos findNaturalFloor(WorldGenLevel level, int x, int z, int topY, int minY) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int y = topY; y >= minY; y--) { + mutable.set(x, y, z); + BlockState state = level.getBlockState(mutable); + if (isNaturalFloor(state)) { + return mutable.immutable(); + } + if (state.is(BlockTags.LOGS) || state.is(BlockTags.LEAVES)) { + continue; + } + if (!state.isAir() && state.blocksMotion()) { + break; + } + } + return null; + } + + static BlockState lumenState(BlockState lumenBlockState, boolean source) { + if (source || !lumenBlockState.hasProperty(LiquidBlock.LEVEL)) { + return source ? lumenBlockState.setValue(LiquidBlock.LEVEL, 0) : lumenBlockState; + } + + return lumenBlockState.setValue(LiquidBlock.LEVEL, 7); + } + + static BlockState lumenState(BlockState lumenBlockState, int level) { + if (!lumenBlockState.hasProperty(LiquidBlock.LEVEL)) { + return lumenBlockState; + } + return lumenBlockState.setValue(LiquidBlock.LEVEL, net.minecraft.util.Mth.clamp(level, 0, 15)); + } + + static void scheduleFluidTick(WorldGenLevel level, BlockPos pos) { + FluidState fluidState = level.getFluidState(pos); + if (!fluidState.isEmpty()) { + level.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(level)); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java new file mode 100644 index 00000000..4448150e --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java @@ -0,0 +1,136 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.SlabType; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public class PeachForestMossyBoulderFeature extends Feature { + public PeachForestMossyBoulderFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + BlockPos surfacePos = new BlockPos(origin.getX(), level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, origin.getX(), origin.getZ()) - 1, origin.getZ()); + if (!isSoil(level.getBlockState(surfacePos))) { + return false; + } + + BlockPos base = surfacePos.below(random.nextInt(2)); + int height = 6 + random.nextInt(5); + int baseRadius = 2 * (2 + random.nextInt(2)); + boolean placed = false; + + int driftX = 0; + int driftZ = 0; + int topRadius = 1; + BlockPos topCenter = base; + for (int y = 0; y < height; y++) { + double heightFraction = (double) y / (height - 1); + double taper = 1.0D - heightFraction * 0.7D; + int radius = Math.max(1, Math.round((float) (baseRadius * taper))); + + driftX = Mth.clamp(driftX + random.nextInt(3) - 1, -1, 1); + driftZ = Mth.clamp(driftZ + random.nextInt(3) - 1, -1, 1); + BlockPos levelCenter = base.above(y).offset(driftX, 0, driftZ); + + placed |= this.placeDisk(level, levelCenter, radius, heightFraction, random); + topCenter = levelCenter; + topRadius = radius; + } + + if (placed) { + this.softCapWithSlabs(level, topCenter, topRadius, random); + } + + return placed; + } + + private boolean placeDisk(WorldGenLevel level, BlockPos center, int radius, double heightFraction, RandomSource random) { + boolean placed = false; + double rr = radius * radius; + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + double distance = (x * x + z * z) / Math.max(1.0D, rr); + if (distance > 1.0D + random.nextDouble() * 0.3D) { + continue; + } + + BlockPos targetPos = center.offset(x, 0, z); + BlockState targetState = level.getBlockState(targetPos); + if (targetState.isAir() || targetState.canBeReplaced() || isSoil(targetState)) { + level.setBlock(targetPos, pickBlockState(heightFraction, random), 2); + placed = true; + } + } + } + return placed; + } + + private void softCapWithSlabs(WorldGenLevel level, BlockPos center, int radius, RandomSource random) { + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + BlockPos topPos = center.offset(x, 0, z); + while (topPos.getY() < level.getMaxBuildHeight() - 1 && isBoulderBlock(level.getBlockState(topPos.above()))) { + topPos = topPos.above(); + } + + BlockState topState = level.getBlockState(topPos); + if (!isBoulderBlock(topState)) { + continue; + } + + BlockPos slabPos = topPos.above(); + if (!level.isEmptyBlock(slabPos) || random.nextFloat() > 0.25F) { + continue; + } + + int openSides = 0; + for (Direction direction : Direction.Plane.HORIZONTAL) { + if (!isBoulderBlock(level.getBlockState(topPos.relative(direction)))) { + openSides++; + } + } + + if (openSides == 0) { + continue; + } + + BlockState slabState = (random.nextFloat() < 0.55F ? Blocks.MOSSY_COBBLESTONE_SLAB : Blocks.COBBLESTONE_SLAB) + .defaultBlockState().setValue(SlabBlock.TYPE, SlabType.BOTTOM); + level.setBlock(slabPos, slabState, 2); + } + } + } + + private static BlockState pickBlockState(double heightFraction, RandomSource random) { + if (heightFraction < 0.35D) { + return Blocks.TUFF.defaultBlockState(); + } + + return random.nextFloat() < 0.55F ? Blocks.MOSSY_COBBLESTONE.defaultBlockState() : Blocks.COBBLESTONE.defaultBlockState(); + } + + private static boolean isBoulderBlock(BlockState state) { + return state.is(Blocks.TUFF) || state.is(Blocks.COBBLESTONE) || state.is(Blocks.MOSSY_COBBLESTONE); + } + + private static boolean isSoil(BlockState state) { + return state.is(BlockTags.DIRT) || state.is(Blocks.GRASS_BLOCK) || state.is(Blocks.MOSS_BLOCK) || state.is(Blocks.ROOTED_DIRT); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondConfiguration.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondConfiguration.java new file mode 100644 index 00000000..e8b13b34 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondConfiguration.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; + +public record PeachForestPondConfiguration( + int minRadius, + int maxRadius, + int minDepth, + int maxDepth +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.intRange(1, 32).fieldOf("min_radius").forGetter(PeachForestPondConfiguration::minRadius), + Codec.intRange(1, 32).fieldOf("max_radius").forGetter(PeachForestPondConfiguration::maxRadius), + Codec.intRange(1, 16).fieldOf("min_depth").forGetter(PeachForestPondConfiguration::minDepth), + Codec.intRange(1, 16).fieldOf("max_depth").forGetter(PeachForestPondConfiguration::maxDepth) + ).apply(instance, PeachForestPondConfiguration::new)); +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java new file mode 100644 index 00000000..6f3b6049 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java @@ -0,0 +1,140 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +public class PeachForestPondFeature extends Feature { + private static final int NOISE_SAMPLES = 12; + + public PeachForestPondFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + PeachForestPondConfiguration config = context.config(); + + int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, origin.getX(), origin.getZ()) - 1; + BlockPos center = new BlockPos(origin.getX(), surfaceY, origin.getZ()); + if (!isSoil(level.getBlockState(center))) { + return false; + } + + int radiusX = Mth.nextInt(random, config.minRadius(), config.maxRadius()); + int radiusZ = Mth.clamp(radiusX + random.nextInt(3) - 1, config.minRadius(), config.maxRadius()); + int depth = Mth.nextInt(random, config.minDepth(), config.maxDepth()); + double[] edgeNoise = generateEdgeNoise(random); + boolean placed = false; + + for (int x = -radiusX - 2; x <= radiusX + 2; x++) { + for (int z = -radiusZ - 2; z <= radiusZ + 2; z++) { + double noiseFactor = sampleEdgeNoise(edgeNoise, x, z); + double distance = ((x * x) / (double) (radiusX * radiusX) + (z * z) / (double) (radiusZ * radiusZ)) / (noiseFactor * noiseFactor); + BlockPos topPos = center.offset(x, 0, z); + + if (distance <= 1.0D) { + int floorY = center.getY() - (distance < 0.4D ? depth + 1 : depth); + for (int y = center.getY(); y > floorY; y--) { + level.setBlock(new BlockPos(topPos.getX(), y, topPos.getZ()), Blocks.WATER.defaultBlockState(), 2); + } + level.setBlock(new BlockPos(topPos.getX(), floorY, topPos.getZ()), Blocks.TUFF.defaultBlockState(), 2); + clearFloatingVegetation(level, topPos, center.getY()); + placed = true; + } else if (distance <= 1.2D) { + int floorY = center.getY() - depth; + for (int y = center.getY(); y >= floorY; y--) { + level.setBlock(new BlockPos(topPos.getX(), y, topPos.getZ()), Blocks.TUFF.defaultBlockState(), 2); + } + clearFloatingVegetation(level, topPos, center.getY()); + placed = true; + } else if (distance <= 1.45D && isSoil(level.getBlockState(topPos))) { + level.setBlock(topPos, Blocks.TUFF.defaultBlockState(), 2); + } + } + } + + if (placed) { + this.placeLilyPads(level, center, radiusX, radiusZ, edgeNoise, random); + } + + return placed; + } + + private static double[] generateEdgeNoise(RandomSource random) { + double[] noise = new double[NOISE_SAMPLES]; + for (int i = 0; i < NOISE_SAMPLES; i++) { + noise[i] = 0.72D + random.nextDouble() * 0.56D; + } + return noise; + } + + private static double sampleEdgeNoise(double[] edgeNoise, int x, int z) { + if (x == 0 && z == 0) { + return 1.0D; + } + + double angle = Math.atan2(z, x); + double normalized = (angle / (Math.PI * 2.0D) + 1.0D) * NOISE_SAMPLES; + int index0 = ((int) Math.floor(normalized)) % NOISE_SAMPLES; + int index1 = (index0 + 1) % NOISE_SAMPLES; + double t = normalized - Math.floor(normalized); + return Mth.lerp(t, edgeNoise[index0], edgeNoise[index1]); + } + + private static void clearFloatingVegetation(WorldGenLevel level, BlockPos topPos, int surfaceY) { + int topOfDebris = Math.max(surfaceY, level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, topPos.getX(), topPos.getZ()) - 1); + int airStreak = 0; + for (int offset = 1; offset <= 24 && airStreak < 3; offset++) { + BlockPos abovePos = new BlockPos(topPos.getX(), topOfDebris + offset, topPos.getZ()); + BlockState aboveState = level.getBlockState(abovePos); + if (aboveState.isAir()) { + airStreak++; + continue; + } + airStreak = 0; + level.setBlock(abovePos, Blocks.AIR.defaultBlockState(), 2); + } + } + + private void placeLilyPads(WorldGenLevel level, BlockPos center, int radiusX, int radiusZ, double[] edgeNoise, RandomSource random) { + int attempts = 6 + (radiusX + radiusZ) * 2; + for (int i = 0; i < attempts; i++) { + int x = random.nextInt(radiusX * 2 + 1) - radiusX; + int z = random.nextInt(radiusZ * 2 + 1) - radiusZ; + double noiseFactor = sampleEdgeNoise(edgeNoise, x, z); + double distance = ((x * x) / (double) (radiusX * radiusX) + (z * z) / (double) (radiusZ * radiusZ)) / (noiseFactor * noiseFactor); + if (distance > 0.85D || random.nextFloat() > 0.55F) { + continue; + } + + BlockPos padPos = center.offset(x, 1, z); + if (!level.getFluidState(padPos.below()).is(FluidTags.WATER) || !level.isEmptyBlock(padPos)) { + continue; + } + + BlockState lilyPad = Blocks.LILY_PAD.defaultBlockState(); + if (!lilyPad.canSurvive(level, padPos)) { + continue; + } + + level.setBlock(padPos, lilyPad, 2); + } + } + + private static boolean isSoil(BlockState state) { + return state.is(BlockTags.DIRT) || state.is(Blocks.GRASS_BLOCK) || state.is(Blocks.MOSS_BLOCK) || state.is(Blocks.ROOTED_DIRT); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeConfiguration.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeConfiguration.java new file mode 100644 index 00000000..5bd8efdb --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeConfiguration.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.util.valueproviders.IntProvider; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; + +public record PeachTreeConfiguration( + BlockStateProvider trunkProvider, + BlockStateProvider foliageProvider, + IntProvider height, + IntProvider canopyRadius, + IntProvider branchCount, + int trunkWidth, + float fruitChance, + float topCanopyScale +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + BlockStateProvider.CODEC.fieldOf("trunk_provider").forGetter(PeachTreeConfiguration::trunkProvider), + BlockStateProvider.CODEC.fieldOf("foliage_provider").forGetter(PeachTreeConfiguration::foliageProvider), + IntProvider.codec(4, 64).fieldOf("height").forGetter(PeachTreeConfiguration::height), + IntProvider.codec(2, 16).fieldOf("canopy_radius").forGetter(PeachTreeConfiguration::canopyRadius), + IntProvider.codec(1, 12).fieldOf("branch_count").forGetter(PeachTreeConfiguration::branchCount), + Codec.intRange(1, 2).optionalFieldOf("trunk_width", 1).forGetter(PeachTreeConfiguration::trunkWidth), + Codec.floatRange(0.0F, 1.0F).optionalFieldOf("fruit_chance", 0.45F).forGetter(PeachTreeConfiguration::fruitChance), + Codec.floatRange(0.2F, 1.2F).optionalFieldOf("top_canopy_scale", 0.8F).forGetter(PeachTreeConfiguration::topCanopyScale) + ).apply(instance, PeachTreeConfiguration::new)); +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeFeature.java new file mode 100644 index 00000000..35bf2e73 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeFeature.java @@ -0,0 +1,472 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.PeachLeavesBlock; +import com.mojang.serialization.Codec; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.block.state.properties.IntegerProperty; + +public class PeachTreeFeature extends Feature { + private static final ResourceLocation PEACH_LOG_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_log"); + private static final ResourceLocation PEACH_LEAVES_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_leaves"); + + public PeachTreeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + PeachTreeConfiguration config = context.config(); + int height = config.height().sample(random); + int canopyRadius = config.canopyRadius().sample(random); + int trunkWidth = config.trunkWidth(); + + if (!canGrowOn(level, origin.below())) { + return false; + } + + List trunkPath = buildTrunkPath(origin, height, random); + Set logPositions = new LinkedHashSet<>(); + Set leafPositions = new LinkedHashSet<>(); + + placeTrunk(level, trunkPath, logPositions, height, trunkWidth, random, config); + + int branchStart = Math.max(6, height - 5); + List branchTips = buildBranches(level, trunkPath, branchStart, logPositions, leafPositions, canopyRadius, trunkWidth, random, config); + BlockPos canopyCenter = trunkPath.get(trunkPath.size() - 1).offset(trunkWidth - 1, 1, trunkWidth - 1); + placeCentralCanopy(level, canopyCenter, canopyRadius, logPositions, leafPositions, random, config); + for (BranchTip tip : branchTips) { + placeBranchCanopy(level, tip, canopyCenter, canopyRadius, logPositions, leafPositions, random, config); + } + if (trunkWidth == 2) { + reinforceLargeCanopy(level, canopyCenter, branchTips, logPositions, leafPositions, random, config); + } + connectCanopy(level, canopyCenter, branchTips, logPositions, leafPositions, random); + refreshLeafDistances(level, leafPositions, logPositions); + placeHangingPeaches(level, canopyCenter, canopyRadius, leafPositions, random, config); + + return !logPositions.isEmpty() || !leafPositions.isEmpty(); + } + + private List buildTrunkPath(BlockPos origin, int height, RandomSource random) { + List trunkPath = new ArrayList<>(height); + Direction leanDirection = Direction.Plane.HORIZONTAL.getRandomDirection(random); + double driftX = leanDirection.getStepX() * (0.12D + random.nextDouble() * 0.05D); + double driftZ = leanDirection.getStepZ() * (0.12D + random.nextDouble() * 0.05D); + double wobbleX = (random.nextDouble() - 0.5D) * 0.04D; + double wobbleZ = (random.nextDouble() - 0.5D) * 0.04D; + double offsetX = 0.0D; + double offsetZ = 0.0D; + + for (int y = 0; y < height; y++) { + double progress = y / (double) Math.max(1, height - 1); + double bend = progress < 0.35D ? 0.0D : (progress - 0.35D) / 0.65D; + offsetX += (driftX + wobbleX) * bend; + offsetZ += (driftZ + wobbleZ) * bend; + trunkPath.add(origin.offset(Mth.floor(offsetX), y, Mth.floor(offsetZ))); + } + + return trunkPath; + } + + private void placeTrunk(WorldGenLevel level, List trunkPath, Set logPositions, int height, int trunkWidth, RandomSource random, PeachTreeConfiguration config) { + Direction leanDirection = Direction.NORTH; + if (trunkPath.size() >= 2) { + BlockPos base = trunkPath.get(0); + BlockPos next = trunkPath.get(1); + leanDirection = directionFromDelta(next.getX() - base.getX(), next.getZ() - base.getZ()); + } + + for (int i = 0; i < trunkPath.size(); i++) { + BlockPos pos = trunkPath.get(i); + placeTrunkColumn(level, pos, trunkWidth, Direction.Axis.Y, logPositions, config, random); + + if (trunkWidth == 1 && height >= 13 && i < 2) { + placeLog(level, pos.relative(leanDirection.getOpposite()), Direction.Axis.Y, logPositions, config, random); + } + if (trunkWidth == 1 && height >= 15 && i == 0) { + placeLog(level, pos.relative(leanDirection.getClockWise()), Direction.Axis.Y, logPositions, config, random); + } + } + } + + private List buildBranches( + WorldGenLevel level, + List trunkPath, + int branchStart, + Set logPositions, + Set leafPositions, + int canopyRadius, + int trunkWidth, + RandomSource random + , PeachTreeConfiguration config + ) { + int branchCount = config.branchCount().sample(random); + double baseAngle = random.nextDouble() * Math.PI * 2.0D; + List tips = new ArrayList<>(branchCount); + + for (int i = 0; i < branchCount; i++) { + int attachIndex = Math.min(trunkPath.size() - 1, branchStart + random.nextInt(Math.max(1, trunkPath.size() - branchStart))); + BlockPos anchor = trunkPath.get(attachIndex).offset(trunkWidth - 1, 0, trunkWidth - 1); + double angle = baseAngle + (Math.PI * 2.0D * i / branchCount) + (random.nextDouble() - 0.5D) * 0.55D; + int length = trunkWidth == 2 ? 6 + random.nextInt(5) : 3 + random.nextInt(4); + int rise = trunkWidth == 2 ? 2 + random.nextInt(3) : 1 + random.nextInt(2); + BlockPos tip = placeBranch(level, anchor, angle, length, rise, logPositions, leafPositions, random, config); + tips.add(new BranchTip(anchor, tip, angle)); + + if (random.nextFloat() < 0.30F) { + double forkAngle = angle + (random.nextBoolean() ? Math.PI / 3.0D : -Math.PI / 3.0D); + placeBranch(level, tip, forkAngle, trunkWidth == 2 ? 2 + random.nextInt(3) : 1 + random.nextInt(3), random.nextInt(2), logPositions, leafPositions, random, config); + } + } + + return tips; + } + + private BlockPos placeBranch( + WorldGenLevel level, + BlockPos start, + double angle, + int length, + int rise, + Set logPositions, + Set leafPositions, + RandomSource random, + PeachTreeConfiguration config + ) { + double dirX = Math.cos(angle); + double dirZ = Math.sin(angle); + double perpX = -dirZ; + double perpZ = dirX; + double curveStrength = 0.75D + random.nextDouble() * 0.55D; + BlockPos tip = start; + + for (int step = 1; step <= length; step++) { + double t = step / (double) length; + double curve = Math.sin(t * Math.PI) * curveStrength; + int x = Mth.floor(Mth.lerp(t, start.getX(), start.getX() + dirX * length) + perpX * curve); + int y = Mth.floor(Mth.lerp(t, start.getY(), start.getY() + rise) + Math.sin(t * Math.PI) * 0.35D); + int z = Mth.floor(Mth.lerp(t, start.getZ(), start.getZ() + dirZ * length) + perpZ * curve); + BlockPos current = new BlockPos(x, y, z); + BlockPos previous = tip; + tip = current; + + Direction.Axis axis = axisForSegment(previous, current); + placeLog(level, current, axis, logPositions, config, random); + if (step >= length - 1) { + placeLeafCluster(level, current.above(), 2 + random.nextInt(2), leafPositions, random); + } + } + + return tip; + } + + private void placeCentralCanopy(WorldGenLevel level, BlockPos center, int canopyRadius, Set logPositions, Set leafPositions, RandomSource random, PeachTreeConfiguration config) { + placeCanopyLobe(level, center.below(), canopyRadius + 1, 1, canopyRadius, 0.35D, leafPositions, random); + placeCanopyLobe(level, center, canopyRadius + 1, 2, canopyRadius + 1, 0.42D, leafPositions, random); + int topRadius = Math.max(2, Mth.floor(canopyRadius * config.topCanopyScale())); + placeCanopyLobe(level, center.above(), topRadius, 1, topRadius, 0.24D, leafPositions, random); + placeLeafCluster(level, center.above(2), Math.max(2, topRadius - 1), leafPositions, random); + placeLog(level, center.below(), Direction.Axis.Y, logPositions, config, random); + } + + private void placeBranchCanopy( + WorldGenLevel level, + BranchTip tip, + BlockPos canopyCenter, + int canopyRadius, + Set logPositions, + Set leafPositions, + RandomSource random, + PeachTreeConfiguration config + ) { + int lobeRadius = Math.max(3, canopyRadius - 1 + random.nextInt(2)); + BlockPos lobeCenter = tip.tip().above(random.nextInt(2)); + placeCanopyLobe(level, lobeCenter, lobeRadius, 2, lobeRadius, 0.36D, leafPositions, random); + placeCanopyLobe(level, lobeCenter.above(), Math.max(2, lobeRadius - 1), 1, Math.max(2, lobeRadius - 1), 0.22D, leafPositions, random); + + BlockPos bridgeCenter = tip.tip().offset( + Mth.floor(Math.cos(tip.angle()) * 2.0D), + 0, + Mth.floor(Math.sin(tip.angle()) * 2.0D) + ).above(1); + placeLeafCluster(level, bridgeCenter, Math.max(2, canopyRadius - 2), leafPositions, random); + placeLog(level, canopyCenter, Direction.Axis.Y, logPositions, config, random); + } + + private void reinforceLargeCanopy( + WorldGenLevel level, + BlockPos canopyCenter, + List branchTips, + Set logPositions, + Set leafPositions, + RandomSource random, + PeachTreeConfiguration config + ) { + placeLog(level, canopyCenter.above(), Direction.Axis.Y, logPositions, config, random); + placeLog(level, canopyCenter.above(2), Direction.Axis.Y, logPositions, config, random); + placeLog(level, canopyCenter.below(), Direction.Axis.Y, logPositions, config, random); + + for (BranchTip tip : branchTips) { + BlockPos mid = interpolate(tip.tip(), canopyCenter, 0.5D, 0.0D).above(1); + placeLog(level, mid, axisForSegment(tip.tip(), mid), logPositions, config, random); + + BlockPos nearTip = interpolate(tip.tip(), canopyCenter, 0.25D, 0.0D); + placeLog(level, nearTip.above(), axisForSegment(nearTip, canopyCenter), logPositions, config, random); + + BlockPos supportStart = tip.anchor().above(1); + BlockPos supportEnd = tip.tip().above(1); + placeLog(level, supportStart, axisForSegment(supportStart, supportEnd), logPositions, config, random); + placeLog(level, supportEnd, axisForSegment(supportStart, supportEnd), logPositions, config, random); + } + + placeLeafCluster(level, canopyCenter.above(1), Math.max(2, config.canopyRadius().sample(random) - 1), leafPositions, random); + } + + private void connectCanopy( + WorldGenLevel level, + BlockPos canopyCenter, + List branchTips, + Set logPositions, + Set leafPositions, + RandomSource random + ) { + for (BranchTip tip : branchTips) { + BlockPos start = tip.tip(); + int steps = 2 + random.nextInt(2); + for (int i = 1; i <= steps; i++) { + double t = i / (double) (steps + 1); + BlockPos pos = interpolate(start, canopyCenter, t, 0.0D).above(random.nextInt(2)); + placeLeaf(level, pos, leafPositions); + } + } + } + + private void placeCanopyLobe( + WorldGenLevel level, + BlockPos center, + int radiusX, + int radiusY, + int radiusZ, + double edgeNoise, + Set leafPositions, + RandomSource random + ) { + int minY = -radiusY; + int maxY = radiusY; + for (int dy = minY; dy <= maxY; dy++) { + double vertical = dy / (double) Math.max(1, radiusY); + for (int dx = -radiusX; dx <= radiusX; dx++) { + for (int dz = -radiusZ; dz <= radiusZ; dz++) { + double nx = dx / (double) Math.max(1, radiusX); + double nz = dz / (double) Math.max(1, radiusZ); + double normalized = nx * nx + (vertical * vertical * 1.2D) + nz * nz; + if (normalized > 1.0D + edgeNoise + random.nextDouble() * 0.04D) { + continue; + } + if (dy < 0 && normalized > 0.65D && random.nextFloat() < 0.55F) { + continue; + } + if (dy > 0 && normalized < 0.25D && random.nextFloat() < 0.18F) { + continue; + } + + BlockPos pos = center.offset(dx, dy, dz); + placeLeaf(level, pos, leafPositions); + } + } + } + } + + private void placeLeafCluster(WorldGenLevel level, BlockPos center, int radius, Set leafPositions, RandomSource random) { + int radiusSq = radius * radius; + for (int x = -radius; x <= radius; x++) { + for (int y = -1; y <= 1; y++) { + for (int z = -radius; z <= radius; z++) { + int distanceSq = x * x + z * z + y * y; + if (distanceSq > radiusSq) { + continue; + } + if (distanceSq > radiusSq - radius && random.nextFloat() < 0.20F) { + continue; + } + placeLeaf(level, center.offset(x, y, z), leafPositions); + } + } + } + } + + private void placeHangingPeaches(WorldGenLevel level, BlockPos canopyCenter, int canopyRadius, Set leafPositions, RandomSource random, PeachTreeConfiguration config) { + int fruitAttempts = 12 + random.nextInt(10); + List candidates = new ArrayList<>(leafPositions); + for (int i = 0; i < fruitAttempts && !candidates.isEmpty(); i++) { + BlockPos leafPos = candidates.get(random.nextInt(candidates.size())); + int dx = Math.abs(leafPos.getX() - canopyCenter.getX()); + int dz = Math.abs(leafPos.getZ() - canopyCenter.getZ()); + int horizontal = dx + dz; + if (horizontal < Math.max(2, canopyRadius - 2)) { + continue; + } + BlockPos fruitPos = leafPos.below(); + if (!level.getBlockState(fruitPos).isAir()) { + continue; + } + if (random.nextFloat() > config.fruitChance()) { + continue; + } + setBlock(level, fruitPos, PeachLeavesBlock.createHangingPeachState()); + } + } + + private void refreshLeafDistances(WorldGenLevel level, Set leafPositions, Set logPositions) { + ArrayDeque queue = new ArrayDeque<>(logPositions); + java.util.Map distances = new java.util.HashMap<>(); + for (BlockPos logPos : logPositions) { + distances.put(logPos, 0); + } + + while (!queue.isEmpty()) { + BlockPos current = queue.removeFirst(); + int currentDistance = distances.getOrDefault(current, 0); + if (currentDistance >= 6) { + continue; + } + + for (Direction direction : Direction.values()) { + BlockPos next = current.relative(direction); + if (distances.containsKey(next)) { + continue; + } + BlockState state = level.getBlockState(next); + if (!(state.getBlock() instanceof LeavesBlock)) { + continue; + } + distances.put(next, currentDistance + 1); + queue.addLast(next); + } + } + + for (BlockPos pos : leafPositions) { + BlockState state = level.getBlockState(pos); + if (!(state.getBlock() instanceof LeavesBlock)) { + continue; + } + + IntegerProperty property = state.getBlock() instanceof PeachLeavesBlock ? LeavesBlock.DISTANCE : null; + if (property == null) { + continue; + } + + int distance = Math.min(6, distances.getOrDefault(pos, 6)); + if (state.getValue(property) != distance) { + setBlock(level, pos, state.setValue(property, distance)); + } + } + } + + private void placeTrunkColumn(WorldGenLevel level, BlockPos pos, int trunkWidth, Direction.Axis axis, Set logPositions, PeachTreeConfiguration config, RandomSource random) { + for (int dx = 0; dx < trunkWidth; dx++) { + for (int dz = 0; dz < trunkWidth; dz++) { + placeLog(level, pos.offset(dx, 0, dz), axis, logPositions, config, random); + } + } + } + + private boolean placeLog(WorldGenLevel level, BlockPos pos, Direction.Axis axis, Set logPositions, PeachTreeConfiguration config, RandomSource random) { + if (!canReplace(level, pos)) { + return false; + } + BlockState state = config.trunkProvider().getState(random, pos); + if (state.hasProperty(RotatedPillarBlock.AXIS)) { + state = state.setValue(RotatedPillarBlock.AXIS, axis); + } + setBlock(level, pos, state); + logPositions.add(pos); + return true; + } + + private boolean placeLeaf(WorldGenLevel level, BlockPos pos, Set leafPositions) { + if (!canReplace(level, pos)) { + return false; + } + setBlock(level, pos, leafState()); + leafPositions.add(pos); + return true; + } + + private BlockState leafState() { + return peachBlock(PEACH_LEAVES_ID).defaultBlockState(); + } + + private static Block peachBlock(ResourceLocation id) { + return BuiltInRegistries.BLOCK.getOptional(id) + .orElseThrow(() -> new IllegalStateException("Missing peach block: " + id)); + } + + private static boolean canGrowOn(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.isFaceSturdy(level, pos, Direction.UP); + } + + private static boolean canReplace(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.isAir() || state.canBeReplaced() || state.getBlock() instanceof LeavesBlock; + } + + private static Direction.Axis axisForSegment(BlockPos from, BlockPos to) { + int dx = Math.abs(to.getX() - from.getX()); + int dy = Math.abs(to.getY() - from.getY()); + int dz = Math.abs(to.getZ() - from.getZ()); + if (dy > dx && dy > dz) { + return Direction.Axis.Y; + } + return dx >= dz ? Direction.Axis.X : Direction.Axis.Z; + } + + private static Direction directionFromDelta(int dx, int dz) { + if (Math.abs(dx) >= Math.abs(dz)) { + return dx >= 0 ? Direction.EAST : Direction.WEST; + } + return dz >= 0 ? Direction.SOUTH : Direction.NORTH; + } + + private static BlockPos interpolate(BlockPos start, BlockPos end, double t, double sidewaysOffset) { + double x = Mth.lerp(t, start.getX(), end.getX()); + double y = Mth.lerp(t, start.getY(), end.getY()); + double z = Mth.lerp(t, start.getZ(), end.getZ()); + if (sidewaysOffset != 0.0D) { + double dx = end.getX() - start.getX(); + double dz = end.getZ() - start.getZ(); + double length = Math.sqrt(dx * dx + dz * dz); + if (length > 0.0D) { + x += (-dz / length) * sidewaysOffset; + z += (dx / length) * sidewaysOffset; + } + } + return new BlockPos(Mth.floor(x), Mth.floor(y), Mth.floor(z)); + } + + private record BranchTip(BlockPos anchor, BlockPos tip, double angle) { + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeGrowers.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeGrowers.java new file mode 100644 index 00000000..55653217 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachTreeGrowers.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.Antarchy; +import java.util.Optional; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.grower.TreeGrower; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +public final class PeachTreeGrowers { + public static final ResourceKey> PEACH_LARGE_TREE = featureKey("peach_large_tree"); + public static final ResourceKey> PEACH_TREE = featureKey("peach_tree"); + public static final TreeGrower PEACH = new TreeGrower( + "peach", + Optional.of(PEACH_LARGE_TREE), + Optional.of(PEACH_TREE), + Optional.empty() + ); + + private PeachTreeGrowers() { + } + + private static ResourceKey> featureKey(String path) { + return ResourceKey.create(Registries.CONFIGURED_FEATURE, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/overworld/CornPatchFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/overworld/CornPatchFeature.java new file mode 100644 index 00000000..c9014b00 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/overworld/CornPatchFeature.java @@ -0,0 +1,61 @@ +package com.craisinlord.antarchy.content.worldgen.overworld; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.CornCropBlock; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class CornPatchFeature extends Feature { + public CornPatchFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + Block wildCorn = AntarchyObjects.WILD_CORN.get(); + int radius = 4 + random.nextInt(3); + int targetPlacements = 10 + random.nextInt(11); + int attempts = targetPlacements * 4; + int placed = 0; + + for (int i = 0; i < attempts && placed < targetPlacements; i++) { + int x = origin.getX() + random.nextInt(radius * 2 + 1) - radius; + int z = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; + int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z); + BlockPos lowerPos = new BlockPos(x, surfaceY, z); + BlockPos upperPos = lowerPos.above(); + + if (!level.getBlockState(lowerPos.below()).is(net.minecraft.world.level.block.Blocks.GRASS_BLOCK)) { + continue; + } + if (!level.getBlockState(lowerPos).canBeReplaced() || !level.getBlockState(upperPos).canBeReplaced()) { + continue; + } + + BlockState lowerState = wildCorn.defaultBlockState() + .setValue(CornCropBlock.AGE, 3) + .setValue(CornCropBlock.HALF, DoubleBlockHalf.LOWER); + BlockState upperState = wildCorn.defaultBlockState() + .setValue(CornCropBlock.AGE, 3) + .setValue(CornCropBlock.HALF, DoubleBlockHalf.UPPER); + + level.setBlock(lowerPos, lowerState, 2); + level.setBlock(upperPos, upperState, 2); + placed++; + } + + return placed > 0; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodConsumeMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodConsumeMixin.java new file mode 100644 index 00000000..416e3aa1 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodConsumeMixin.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Player.class) +public abstract class AmericanFoodConsumeMixin { + @Inject( + method = "eat(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/food/FoodProperties;)Lnet/minecraft/world/item/ItemStack;", + at = @At("RETURN") + ) + private void antarchy$applyAmericanBonus(Level level, ItemStack stack, FoodProperties foodProperties, CallbackInfoReturnable cir) { + if (level.isClientSide || !stack.has(AntarchyObjects.AMERICAN_COMPONENT.get())) { + return; + } + + Player self = (Player) (Object) this; + self.getFoodData().eat(AntarchySettings.americanBonusNutrition(), (float) AntarchySettings.americanBonusSaturation()); + + int duration = AntarchySettings.americanRegenerationDurationTicks(); + if (duration > 0) { + self.addEffect(new MobEffectInstance(MobEffects.REGENERATION, duration, AntarchySettings.americanRegenerationAmplifier())); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodNameMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodNameMixin.java new file mode 100644 index 00000000..95dc1dd6 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/AmericanFoodNameMixin.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ItemStack.class) +public abstract class AmericanFoodNameMixin { + @Inject(method = "getHoverName", at = @At("RETURN"), cancellable = true) + private void antarchy$prefixAmericanName(CallbackInfoReturnable cir) { + ItemStack self = (ItemStack) (Object) this; + if (self.has(AntarchyObjects.AMERICAN_COMPONENT.get())) { + cir.setReturnValue(Component.translatable("item.antarchy.american_name", cir.getReturnValue())); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java index de6f8f78..8943dd41 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java @@ -22,16 +22,26 @@ public abstract class BlockEntityTypeSignMixin { private static Block antarchy$ouranwoodHangingSign; @Unique private static Block antarchy$ouranwoodWallHangingSign; + @Unique + private static Block antarchy$peachSign; + @Unique + private static Block antarchy$peachWallSign; + @Unique + private static Block antarchy$peachHangingSign; + @Unique + private static Block antarchy$peachWallHangingSign; @Inject(method = "isValid", at = @At("HEAD"), cancellable = true) private void antarchy$allowOuranwoodSigns(BlockState state, CallbackInfoReturnable cir) { Object self = this; if (self == BlockEntityType.SIGN) { - if (state.is(antarchy$sign()) || state.is(antarchy$wallSign())) { + if (state.is(antarchy$sign()) || state.is(antarchy$wallSign()) + || state.is(antarchy$peachSign()) || state.is(antarchy$peachWallSign())) { cir.setReturnValue(true); } } else if (self == BlockEntityType.HANGING_SIGN) { - if (state.is(antarchy$hangingSign()) || state.is(antarchy$wallHangingSign())) { + if (state.is(antarchy$hangingSign()) || state.is(antarchy$wallHangingSign()) + || state.is(antarchy$peachHangingSign()) || state.is(antarchy$peachWallHangingSign())) { cir.setReturnValue(true); } } @@ -69,6 +79,38 @@ public abstract class BlockEntityTypeSignMixin { return antarchy$ouranwoodWallHangingSign; } + @Unique + private static Block antarchy$peachSign() { + if (antarchy$peachSign == null) { + antarchy$peachSign = antarchy$resolve("peach_sign"); + } + return antarchy$peachSign; + } + + @Unique + private static Block antarchy$peachWallSign() { + if (antarchy$peachWallSign == null) { + antarchy$peachWallSign = antarchy$resolve("peach_wall_sign"); + } + return antarchy$peachWallSign; + } + + @Unique + private static Block antarchy$peachHangingSign() { + if (antarchy$peachHangingSign == null) { + antarchy$peachHangingSign = antarchy$resolve("peach_hanging_sign"); + } + return antarchy$peachHangingSign; + } + + @Unique + private static Block antarchy$peachWallHangingSign() { + if (antarchy$peachWallHangingSign == null) { + antarchy$peachWallHangingSign = antarchy$resolve("peach_wall_hanging_sign"); + } + return antarchy$peachWallHangingSign; + } + @Unique private static Block antarchy$resolve(String path) { return BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/FrogSpawnVariantMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/FrogSpawnVariantMixin.java new file mode 100644 index 00000000..16198b8e --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/FrogSpawnVariantMixin.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.entity.ElythiaFrog; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; +import net.minecraft.world.entity.animal.frog.Frog; +import net.minecraft.world.level.ServerLevelAccessor; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Frog.class) +public abstract class FrogSpawnVariantMixin { + @Inject(method = "finalizeSpawn", at = @At("TAIL")) + private void antarchy$setElythiaSpawnVariant( + ServerLevelAccessor level, + DifficultyInstance difficulty, + MobSpawnType spawnType, + SpawnGroupData spawnGroupData, + CallbackInfoReturnable cir + ) { + if (spawnType == MobSpawnType.BUCKET || !ElythiaFrog.shouldBecomeElythiaFrog(level)) { + return; + } + + ElythiaFrog.applyVariant((Frog) (Object) this); + } + + @Inject(method = "getBreedOffspring", at = @At("RETURN")) + private void antarchy$setElythiaOffspringVariant(ServerLevel level, AgeableMob otherParent, CallbackInfoReturnable cir) { + if (!(cir.getReturnValue() instanceof Frog frog) || !ElythiaFrog.shouldBecomeElythiaFrog(level)) { + return; + } + + ElythiaFrog.applyVariant(frog); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/FrogVariantBootstrapMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/FrogVariantBootstrapMixin.java new file mode 100644 index 00000000..852735ba --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/FrogVariantBootstrapMixin.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.entity.ElythiaFrog; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.animal.FrogVariant; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(FrogVariant.class) +public abstract class FrogVariantBootstrapMixin { + @Inject(method = "bootstrap", at = @At("TAIL")) + private static void antarchy$registerElythiaVariant(Registry registry, CallbackInfoReturnable cir) { + ResourceLocation id = ElythiaFrog.VARIANT.location(); + if (registry.containsKey(id)) { + return; + } + + Registry.register(registry, id, new FrogVariant(ElythiaFrog.TEXTURE)); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/GlowSquidLumenSpawnMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/GlowSquidLumenSpawnMixin.java new file mode 100644 index 00000000..fb1eb786 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/GlowSquidLumenSpawnMixin.java @@ -0,0 +1,36 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.GlowSquid; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Blocks; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(GlowSquid.class) +public abstract class GlowSquidLumenSpawnMixin { + @Inject(method = "checkGlowSquidSpawnRules", at = @At("HEAD"), cancellable = true) + private static void antarchy$allowGlowSquidsInLumen( + EntityType entityType, + ServerLevelAccessor level, + MobSpawnType spawnType, + BlockPos pos, + RandomSource random, + CallbackInfoReturnable cir + ) { + if (pos.getY() > level.getSeaLevel() - 33 || level.getRawBrightness(pos, 0) != 0) { + return; + } + + if (level.getBlockState(pos).is(Blocks.WATER) || level.getFluidState(pos).is(AntarchyTags.Fluids.LUMEN)) { + cir.setReturnValue(true); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java new file mode 100644 index 00000000..a5510c83 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/PotionBrewingMixin.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.CustomBrewingRecipes; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.alchemy.PotionBrewing; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(PotionBrewing.class) +public abstract class PotionBrewingMixin { + @Inject(method = "hasMix", at = @At("HEAD"), cancellable = true) + private void antarchy$hasCustomMix(ItemStack input, ItemStack ingredient, CallbackInfoReturnable cir) { + if (CustomBrewingRecipes.hasMix(input, ingredient)) { + cir.setReturnValue(true); + } + } + + @Inject(method = "mix", at = @At("HEAD"), cancellable = true) + private void antarchy$mixCustomRecipe(ItemStack ingredient, ItemStack input, CallbackInfoReturnable cir) { + ItemStack output = CustomBrewingRecipes.getOutput(input, ingredient); + if (!output.isEmpty()) { + cir.setReturnValue(output); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/VillagerTradesMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/VillagerTradesMixin.java new file mode 100644 index 00000000..cb788cc9 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/VillagerTradesMixin.java @@ -0,0 +1,93 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import net.minecraft.world.entity.npc.VillagerProfession; +import net.minecraft.world.entity.npc.VillagerTrades; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.trading.ItemCost; +import net.minecraft.world.item.trading.MerchantOffer; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(VillagerTrades.class) +public abstract class VillagerTradesMixin { + @Shadow @Mutable @Final private static Map TRADES; + @Shadow @Mutable @Final private static Int2ObjectMap WANDERING_TRADER_TRADES; + + @Inject(method = "", at = @At("TAIL")) + private static void antarchy$appendTrades(CallbackInfo ci) { + appendVillagerTrade(VillagerProfession.FARMER, 1, + emeraldForItems(AntarchyObjects.CORN.get(), 20, 16, 2)); + appendVillagerTrade(VillagerProfession.BUTCHER, 1, + emeraldForItems(AntarchyObjects.COOKED_CORNDOG.get(), 5, 16, 2)); + appendWanderingTrade(0, + itemsForEmerald(AntarchyObjects.CORN_SEEDS.get(), 1, 3, 12, 2)); + } + + private static VillagerTrades.ItemListing emeraldForItems(net.minecraft.world.item.Item item, int count, int maxUses, int villagerXp) { + return (trader, random) -> new MerchantOffer(new ItemCost(item, count), new ItemStack(Items.EMERALD), maxUses, villagerXp, 0.05F); + } + + private static VillagerTrades.ItemListing itemsForEmerald(net.minecraft.world.item.Item item, int emeraldCost, int count, int maxUses, int villagerXp) { + return (trader, random) -> new MerchantOffer(new ItemCost(Items.EMERALD, emeraldCost), new ItemStack(item, count), maxUses, villagerXp, 0.05F); + } + + @SuppressWarnings("unchecked") + private static void appendVillagerTrade(VillagerProfession profession, int level, VillagerTrades.ItemListing listing) { + Object tradeValue = TRADES.get(profession); + if (!(tradeValue instanceof Map tradeMap)) { + return; + } + + Int2ObjectOpenHashMap copy = new Int2ObjectOpenHashMap<>(); + for (Map.Entry entry : tradeMap.entrySet()) { + if (entry.getKey() instanceof Integer key && entry.getValue() instanceof VillagerTrades.ItemListing[] listings) { + copy.put(key, listings); + } + } + + VillagerTrades.ItemListing[] existing = copy.get(level); + VillagerTrades.ItemListing[] merged = Arrays.copyOf(existing == null ? new VillagerTrades.ItemListing[0] : existing, + (existing == null ? 0 : existing.length) + 1); + merged[merged.length - 1] = listing; + copy.put(level, merged); + Map rebuilt = new HashMap<>(); + for (Object entryObject : TRADES.entrySet()) { + Map.Entry entry = (Map.Entry) entryObject; + if (entry.getKey() != profession) { + rebuilt.put(entry.getKey(), entry.getValue()); + } + } + rebuilt.put(profession, copy); + TRADES = rebuilt; + } + + @SuppressWarnings("unchecked") + private static void appendWanderingTrade(int group, VillagerTrades.ItemListing listing) { + Int2ObjectOpenHashMap copy = new Int2ObjectOpenHashMap<>(); + for (Object entryObject : ((Map) WANDERING_TRADER_TRADES).entrySet()) { + Map.Entry entry = (Map.Entry) entryObject; + if (entry.getKey() instanceof Integer key && entry.getValue() instanceof VillagerTrades.ItemListing[] listings) { + copy.put((int) key, listings); + } + } + + VillagerTrades.ItemListing[] existing = copy.get(group); + VillagerTrades.ItemListing[] merged = Arrays.copyOf(existing == null ? new VillagerTrades.ItemListing[0] : existing, + (existing == null ? 0 : existing.length) + 1); + merged[merged.length - 1] = listing; + copy.put(group, merged); + WANDERING_TRADER_TRADES = copy; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/WaterlilyLumenMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/WaterlilyLumenMixin.java new file mode 100644 index 00000000..0ac9787b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/WaterlilyLumenMixin.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.WaterlilyBlock; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(WaterlilyBlock.class) +public abstract class WaterlilyLumenMixin { + @Inject( + method = "mayPlaceOn(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;)Z", + at = @At("HEAD"), + cancellable = true + ) + private void antarchy$allowLumenSupport(BlockState state, BlockGetter level, BlockPos pos, CallbackInfoReturnable cir) { + if (level.getFluidState(pos).is(AntarchyTags.Fluids.LUMEN)) { + cir.setReturnValue(true); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/client/FrogRendererElythiaMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/client/FrogRendererElythiaMixin.java new file mode 100644 index 00000000..899a3a71 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/client/FrogRendererElythiaMixin.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.entity.ElythiaFrog; +import net.minecraft.client.model.FrogModel; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.client.renderer.entity.FrogRenderer; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.animal.frog.Frog; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(FrogRenderer.class) +public abstract class FrogRendererElythiaMixin extends MobRenderer> { + protected FrogRendererElythiaMixin(EntityRendererProvider.Context context, FrogModel model, float shadowRadius) { + super(context, model, shadowRadius); + } + + @Inject(method = "getTextureLocation(Lnet/minecraft/world/entity/animal/frog/Frog;)Lnet/minecraft/resources/ResourceLocation;", at = @At("HEAD"), cancellable = true) + private void antarchy$useElythiaTexture(Frog frog, CallbackInfoReturnable cir) { + if (!ElythiaFrog.isElythiaFrog(frog)) { + return; + } + + cir.setReturnValue(ElythiaFrog.TEXTURE); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java index aedd87d7..057577a5 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.mixins.gravity.client; +import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; @@ -22,6 +23,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; * Rotates entity rendering for inverted gravity. */ public abstract class EntityRenderDispatcherGravityMixin { + @org.spongepowered.asm.mixin.Unique + private static boolean antarchy$loggedGravityRenderFailure; @Inject( method = "render", @@ -39,12 +42,16 @@ public abstract class EntityRenderDispatcherGravityMixin { int packedLight, CallbackInfo ci ) { - float flipProgress = AntarchyGravityApi.getGravityFlipProgress(entity, partialTick); - if (!AntarchyGravityApi.isGravityInverted(entity) && flipProgress <= 0.0F) { - return; - } + try { + float flipProgress = AntarchyGravityApi.getGravityFlipProgress(entity, partialTick); + if (!AntarchyGravityApi.isGravityInverted(entity) && flipProgress <= 0.0F) { + return; + } - poseStack.mulPose(AntarchyGravityRotationUtil.getCameraRotationQuaternion(entity, partialTick)); + poseStack.mulPose(AntarchyGravityRotationUtil.getCameraRotationQuaternion(entity, partialTick)); + } catch (Throwable throwable) { + antarchy$logGravityRenderFailure(entity, throwable); + } } @ModifyVariable( @@ -62,14 +69,19 @@ public abstract class EntityRenderDispatcherGravityMixin { float blue, float partialTick ) { - if (!AntarchyGravityApi.isGravityInverted(entity)) { + try { + if (!AntarchyGravityApi.isGravityInverted(entity)) { + return box; + } + + return AntarchyGravityRotationUtil.boxWorldToPlayer( + box, + AntarchyGravityApi.getGravityDirection(entity) + ); + } catch (Throwable throwable) { + antarchy$logGravityRenderFailure(entity, throwable); return box; } - - return AntarchyGravityRotationUtil.boxWorldToPlayer( - box, - AntarchyGravityApi.getGravityDirection(entity) - ); } @WrapOperation( @@ -78,13 +90,28 @@ public abstract class EntityRenderDispatcherGravityMixin { ) private static Vec3 antarchy$rotateRenderedHitboxViewVector(Entity entity, float partialTick, Operation original) { Vec3 viewVector = original.call(entity, partialTick); - if (!AntarchyGravityApi.isGravityInverted(entity)) { + try { + if (!AntarchyGravityApi.isGravityInverted(entity)) { + return viewVector; + } + + return AntarchyGravityRotationUtil.vecWorldToPlayer( + viewVector, + AntarchyGravityApi.getGravityDirection(entity) + ); + } catch (Throwable throwable) { + antarchy$logGravityRenderFailure(entity, throwable); return viewVector; } + } - return AntarchyGravityRotationUtil.vecWorldToPlayer( - viewVector, - AntarchyGravityApi.getGravityDirection(entity) - ); + @org.spongepowered.asm.mixin.Unique + private static void antarchy$logGravityRenderFailure(Entity entity, Throwable throwable) { + if (antarchy$loggedGravityRenderFailure) { + return; + } + + antarchy$loggedGravityRenderFailure = true; + Antarchy.LOGGER.error("Disabling Antarchy gravity render adjustments after a client render failure on entity {}", entity, throwable); } } diff --git a/common/src/main/resources/antarchy-common.mixins.json b/common/src/main/resources/antarchy-common.mixins.json index c8baf76c..63429f3f 100644 --- a/common/src/main/resources/antarchy-common.mixins.json +++ b/common/src/main/resources/antarchy-common.mixins.json @@ -5,6 +5,8 @@ "compatibilityLevel": "JAVA_21", "mixins": [ "AccessorRangedAttribute", + "AmericanFoodConsumeMixin", + "AmericanFoodNameMixin", "BlockEntityTypeSignMixin", "BloodglassMixin", "DreamFireBlockMixin", @@ -12,8 +14,14 @@ "FireVisualBaseFireBlockMixin", "FireVisualEntityMixin", "FlintAndSteelPortalIgnitionMixin", + "FrogSpawnVariantMixin", + "FrogVariantBootstrapMixin", + "GlowSquidLumenSpawnMixin", "GlowVinesUnderLeavesMixin", "NightmareSwordDamageMixin", + "PotionBrewingMixin", + "VillagerTradesMixin", + "WaterlilyLumenMixin", "ServerPlayerGameModeMixin", "SquidzookaEnchantMixin", "SquidzookaMultishotMixin", @@ -50,6 +58,7 @@ "client": [ "client.ElythiaSkyMixin", "client.ElytraModelAccessor", + "client.FrogRendererElythiaMixin", "client.GameRendererSwingThroughGrassMixin", "client.LightningBoltRendererMixin", "client.MountedVehicleCameraMixin", diff --git a/common/src/main/resources/assets/antarchy/animations/elka.animation.json b/common/src/main/resources/assets/antarchy/animations/elka.animation.json new file mode 100644 index 00000000..9c7b5e9b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/elka.animation.json @@ -0,0 +1,3578 @@ +{ + "format_version": "1.8.0", + "animations": { + "walk": { + "loop": true, + "animation_length": 3, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [27.5, 0, 0] + }, + "0.7083": { + "pre": { + "vector": [31.53, 0, 0] + }, + "post": { + "vector": [31.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-27.5, 0, 0] + }, + "3.0": { + "vector": [27.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -0.25, 4] + }, + "0.375": { + "pre": { + "vector": [0, -0.25, 3] + }, + "post": { + "vector": [0, -0.25, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -0.25, -2.83] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [0, -0.25, -2] + }, + "1.7917": { + "vector": [0, 0.5, -0.83] + }, + "2.25": { + "vector": [0, -0.25, 1] + }, + "3.0": { + "vector": [0, -0.25, 4] + } + } + }, + "torso": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "pre": { + "vector": [0, 0, 5] + }, + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [0, 0, 0] + }, + "1.75": { + "pre": { + "vector": [0, 0, 5] + }, + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0.95, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [-27.5, 0, 0] + }, + "1.5": { + "vector": [27.5, 0, 0] + }, + "2.2083": { + "pre": { + "vector": [31.53, 0, 0] + }, + "post": { + "vector": [31.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [-27.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -0.25, -2] + }, + "0.2917": { + "vector": [0, 0.5, -0.83] + }, + "0.75": { + "vector": [0, -0.25, 1] + }, + "1.5": { + "vector": [0, -0.25, 4] + }, + "1.875": { + "pre": { + "vector": [0, -0.25, 3] + }, + "post": { + "vector": [0, -0.25, 3] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [0, -0.25, -2.83] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, -0.25, -2] + } + } + }, + "right_back_leg": { + "rotation": { + "0.0": { + "vector": [-18.5, 0, 0] + }, + "0.2083": { + "vector": [-27.5, 0, 0] + }, + "1.7083": { + "vector": [27.5, 0, 0] + }, + "2.4167": { + "pre": { + "vector": [31.53, 0, 0] + }, + "post": { + "vector": [31.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [-18.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -0.31, -2.59] + }, + "0.2083": { + "vector": [0, -0.25, -2] + }, + "0.5": { + "vector": [0, 0.5, -0.83] + }, + "0.9583": { + "vector": [0, -0.25, 1] + }, + "1.7083": { + "vector": [0, -0.25, 4] + }, + "2.0833": { + "pre": { + "vector": [0, -0.25, 3] + }, + "post": { + "vector": [0, -0.25, 3] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, -0.25, -2.83] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, -0.31, -2.59] + } + } + }, + "left_back_leg": { + "rotation": { + "0.0": { + "vector": [19.86, 0, 0] + }, + "0.2083": { + "vector": [27.5, 0, 0] + }, + "0.9167": { + "pre": { + "vector": [31.53, 0, 0] + }, + "post": { + "vector": [31.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-18.5, 0, 0] + }, + "1.7083": { + "vector": [-27.5, 0, 0] + }, + "3.0": { + "vector": [19.86, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, -0.25, 3.17] + }, + "0.2083": { + "vector": [0, -0.25, 4] + }, + "0.5833": { + "pre": { + "vector": [0, -0.25, 3] + }, + "post": { + "vector": [0, -0.25, 3] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, -0.25, -2.83] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [0, -0.31, -2.59] + }, + "1.7083": { + "vector": [0, -0.25, -2] + }, + "2.0": { + "vector": [0, 0.5, -0.83] + }, + "2.4583": { + "vector": [0, -0.25, 1] + }, + "3.0": { + "vector": [0, -0.25, 3.17] + } + } + }, + "panda": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, -1, 0] + }, + "0.375": { + "vector": [0, 0, 0] + }, + "1.5": { + "vector": [0, 0, 0] + }, + "1.625": { + "vector": [0, 0, 0] + }, + "1.75": { + "vector": [0, -1, 0] + }, + "1.875": { + "vector": [0, 0, 0] + } + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [1.40491, -0.06133, 2.49925] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [1.45366, 0.00412, -0.16804] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "sit": { + "animation_length": 1, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [15, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 2, 3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "panda": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "sit_idle": { + "loop": true, + "animation_length": 4, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [33.6659, -3.12234, 4.68136] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [33.41527, 2.75839, -4.1719] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "position": { + "0.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-17.48436, 0.75155, 2.38443] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-17.48246, -0.84288, -2.67423] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "position": { + "0.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "panda": { + "position": { + "0.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "cry": { + "animation_length": 1.25, + "bones": { + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "get_up": { + "animation_length": 1, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.5, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "position": { + "0.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-62.91, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0.43, 2.68] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "panda": { + "position": { + "0.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "animation_length": 1, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [37.5, 0, 0] + }, + "0.7083": { + "vector": [37.5, 0, 0] + }, + "0.875": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [-20, 0, 27.5] + }, + "0.7083": { + "vector": [-20, 0, 27.5] + }, + "0.875": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 1, 2.67] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3, 6, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-3, 6, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [-20, 0, -27.5] + }, + "0.7083": { + "vector": [-20, 0, -27.5] + }, + "0.875": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [3, 6, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [3, 6, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [3, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [3, 0, -2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_back_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -22.5, 0] + }, + "0.7083": { + "vector": [0, -22.5, 0] + }, + "0.875": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 3, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.5": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.3333": { + "vector": [1, 1, 1] + }, + "0.375": { + "pre": { + "vector": [1.1, 1, 1] + }, + "post": { + "vector": [1.1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [1.1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "vector": [1.1, 1, 1] + }, + "0.5833": { + "vector": [1, 1, 1] + } + } + }, + "panda": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [0, -2, 2] + }, + "0.4167": { + "vector": [0, 0.33, 1] + }, + "0.625": { + "vector": [0, 0, -4] + }, + "0.7917": { + "vector": [0, 0, -4] + }, + "0.875": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, -2, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + } + } + }, + "quirk": { + "loop": true, + "animation_length": 4, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [28.72, 0, -4.2] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [-15.85903, 0, 0.31062] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [43.72, 0, 4.2] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [-24.4684, 0, -0.31062] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3.42004, -17.47073, -1.02787] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [3.42004, -17.47073, -1.02787] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [3.05502, 16.23765, 0.86455] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [27.76497, 14.69599, 0.78246] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [-4.99339, 14.21392, 0.7568] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [15.62466, 6.79132, 0.36159] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.2917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [1.40491, -0.06133, 2.49925] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [2.37983, -0.63438, 14.84347] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [-5.56124, -0.29927, 6.95604] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [1.45366, 0.00412, -0.16804] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "quirk_2": { + "animation_length": 3, + "bones": { + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [87.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-29.28825, 19.9034, 31.25201] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-29.28825, 19.9034, 31.25201] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, 24, 11] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-1, 23, 11] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-1, 21, 11] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-46.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, -0.75, 3.25] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 9, 13] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 6.11, 16.11] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-29.28825, -19.9034, -31.25201] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-29.28825, -19.9034, -31.25201] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 24, 11] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 23, 11] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [1, 21, 11] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "panda": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "2.5": { + "vector": [0, 0, 0] + }, + "2.625": { + "vector": [0, -3, 0] + }, + "2.75": { + "vector": [0, 0, 0] + } + } + } + } + }, + "quirk_3": { + "animation_length": 4, + "bones": { + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [55, 0, -12.38251] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-24.72222, 0, -8.70491] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [28.29653, 0, -6.18874] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [55, 0, 12.38251] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-24.72222, 0, 8.70491] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [18.29653, 0, 6.18874] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [70, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [33.6659, -3.12234, 4.68136] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [49.00148, -1.52623, 2.29092] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [54.16098, 0.30871, -0.4661] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [54.16098, 0.30871, -0.4661] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [1.15437, 1.89129, -2.86005] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [33.41527, 2.75839, -4.1719] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-41.9978, -43.69869, -37.50059] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-14, 10, -4] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-11.55, 5.86, -3.81] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [-7.97, 7.38, -2.85] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-7.97, 7.38, -2.85] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-17.48436, 0.75155, 2.38443] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-11.54439, 0.89972, 2.85453] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-17.183, 0.76913, 2.4402] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-12.62965, 0.30631, 0.97183] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-7.85386, -0.32245, -1.02305] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-29.59683, -0.77679, -2.46453] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-17.48246, -0.84288, -2.67423] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [-14.46631, -0.78707, -2.49717] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [-17.48246, -0.84288, -2.67423] + }, + "lerp_mode": "catmullrom" + }, + "3.4583": { + "post": { + "vector": [-10.10109, -0.79418, -2.51972] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "position": { + "0.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_back_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-90, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -4, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "panda": { + "position": { + "0.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -8, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/elka_baby.animation.json b/common/src/main/resources/assets/antarchy/animations/elka_baby.animation.json new file mode 100644 index 00000000..e97b0151 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/elka_baby.animation.json @@ -0,0 +1,1091 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.28, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.28, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 8.75] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, -4.45] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [2.5, 0, 3.96] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "vector": [0, 0, 10] + }, + "0.5": { + "vector": [0, 0, 8.75] + } + } + }, + "right_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_ear": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-1.5, 0, -2.4074] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1.5, 0, 2.08] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-1.5, 0, 2.4074] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1.5, 0, -2.08] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "vector": [0, -0.42, 0] + }, + "0.125": { + "vector": [0, -0.5, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0.58, 0] + }, + "post": { + "vector": [0, 0.58, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 1.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, -0.42, 0] + }, + "0.375": { + "vector": [0, -0.5, 0] + }, + "0.4167": { + "pre": { + "vector": [0, 0.58, 0] + }, + "post": { + "vector": [0, 0.58, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1.25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-30, 0, 0] + }, + "0.375": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0.25, 1, -0.25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0.5, 1, -1] + }, + "0.3333": { + "vector": [0, 0, 1.11] + }, + "0.4167": { + "pre": { + "vector": [0, 0, 2] + }, + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [-30, 0, 0] + }, + "0.125": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-30, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [-0.5, 1, -1] + }, + "0.0833": { + "vector": [0, 0, 1.11] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 2] + }, + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-0.25, 1, -0.25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-0.5, 1, -1] + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-31.2, 0, 0] + }, + "0.2917": { + "vector": [-30, 0, 0] + }, + "0.4167": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.06, 2.76] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0.25, 0.79, 0.47] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0.25, 1, -0.25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0.25, 1.13, -0.96] + }, + "0.2917": { + "vector": [0.25, 1, -1] + }, + "0.375": { + "vector": [0, 0, 1.11] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 2] + }, + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.06, 2.76] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "vector": [-31.2, 0, 0] + }, + "0.0417": { + "vector": [-30, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-31.2, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [-0.25, 1.13, -0.96] + }, + "0.0417": { + "vector": [-0.25, 1, -1] + }, + "0.125": { + "vector": [0, 0, 1.11] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 2] + }, + "post": { + "vector": [0, 0, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -0.06, 2.76] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-0.25, 0.79, 0.47] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-0.25, 1, -0.25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-0.25, 1.13, -0.96] + } + } + } + } + }, + "quirk": { + "animation_length": 0.8333, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.8, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-2.5, 0, 0] + }, + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0.45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [0, 2, 0] + }, + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 1.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.4167": { + "pre": { + "vector": [0, 2, 0] + }, + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 1.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -0.36, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-45, 7.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-45, 7.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [0, 0, 0] + }, + "0.8333": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-45, -7.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-45, -7.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "vector": [0, 0, 0] + }, + "0.8333": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-27.5, 7.5, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-27.5, 7.5, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [22.5, 0, 0] + }, + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-27.5, -7.5, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-27.5, -7.5, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json index 95d60f28..f60646db 100644 --- a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json @@ -4,12 +4,87 @@ "idle": { "loop": true, "animation_length": 4, - "sound_effects": { - "0.0": { - "effect": "antarchy:kraken_flying_loop|0.45|1.0" - } - }, "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [1.3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1.3, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 218.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 214, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 254, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 218.48, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, "l_shoulder": { "rotation": { "0.0": { @@ -902,19 +977,19 @@ "rotation": { "0.0": { "post": { - "vector": [-85, -10, -90] + "vector": [-17.5, -10, 0] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [-90, -15, -90] + "vector": [-5, -15, 0] }, "lerp_mode": "catmullrom" }, "4.0": { "post": { - "vector": [-85, -10, -90] + "vector": [-17.5, -10, 0] }, "lerp_mode": "catmullrom" } @@ -1226,19 +1301,19 @@ "rotation": { "0.0": { "post": { - "vector": [90, 37.5, -90] + "vector": [17.5, -10, 0] }, "lerp_mode": "catmullrom" }, - "2.5": { + "2.0": { "post": { - "vector": [89.99992, 1.25, -89.99992] + "vector": [5, 15, 0] }, "lerp_mode": "catmullrom" }, "4.0": { "post": { - "vector": [90, 37.5, -90] + "vector": [17.5, -10, 0] }, "lerp_mode": "catmullrom" } @@ -1377,8 +1452,13 @@ "lerp_mode": "catmullrom" } } - }, - "Kraken": { + } + } + }, + "death": { + "animation_length": 3, + "bones": { + "body": { "rotation": { "0.0": { "post": { @@ -1386,19 +1466,31 @@ }, "lerp_mode": "catmullrom" }, - "0.875": { + "0.25": { "post": { - "vector": [0, 0, 0] + "vector": [1.28919, 0.1664, -7.35346] }, "lerp_mode": "catmullrom" }, - "2.875": { + "0.6667": { "post": { - "vector": [5, 0, 0] + "vector": [1.2985, -0.05997, 2.64399] }, "lerp_mode": "catmullrom" }, - "4.0": { + "1.1667": { + "post": { + "vector": [1.28919, 0.1664, -7.35346] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [1.2985, -0.05997, 2.64399] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { "post": { "vector": [1.3, 0, 0] }, @@ -1412,21 +1504,39 @@ }, "lerp_mode": "catmullrom" }, - "0.625": { + "0.5": { "post": { - "vector": [0, 214, 0] + "vector": [0, 179.48, 0] }, "lerp_mode": "catmullrom" }, - "2.625": { + "1.0": { "post": { - "vector": [0, 254, 0] + "vector": [0, 120.48, 0] }, "lerp_mode": "catmullrom" }, - "4.0": { + "1.5": { "post": { - "vector": [0, 218.48, 0] + "vector": [0, 41.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, -19.52, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -36.52, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -19.52, 0] }, "lerp_mode": "catmullrom" } @@ -1438,31 +1548,68 @@ }, "lerp_mode": "catmullrom" }, + "0.25": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, "2.0": { "post": { - "vector": [1, 1.1, 1] + "vector": [1, 0.7, 1] }, "lerp_mode": "catmullrom" }, - "3.0": { - "post": { - "vector": [1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { + "2.5": { "post": { "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" } } - } - } - }, - "death": { - "animation_length": 3, - "bones": { + }, "right_eye": { "scale": { "0.0": { @@ -2633,13 +2780,13 @@ "rotation": { "0.0": { "post": { - "vector": [-85, -10, -90] + "vector": [0, -10, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [-88.86743, -49.96822, -94.19588] + "vector": [0, -49.96822, 0] }, "lerp_mode": "catmullrom" } @@ -2963,25 +3110,25 @@ "rotation": { "0.0": { "post": { - "vector": [90, 37.5, -90] + "vector": [0, 37.5, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [90, 42.5, -90] + "vector": [0, 42.5, 0] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [90, 50, -90] + "vector": [0, 50, 0] }, "lerp_mode": "catmullrom" }, "3.0": { "post": { - "vector": [90, 50, -90] + "vector": [0, 50, 0] }, "lerp_mode": "catmullrom" } @@ -3132,158 +3279,6 @@ "lerp_mode": "catmullrom" } } - }, - "Kraken": { - "rotation": { - "0.0": { - "post": { - "vector": [1.3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [1.28919, 0.1664, -7.35346] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [1.2985, -0.05997, 2.64399] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [1.28919, 0.1664, -7.35346] - }, - "lerp_mode": "catmullrom" - }, - "1.5417": { - "post": { - "vector": [1.2985, -0.05997, 2.64399] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1.3, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 218.48, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 179.48, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 120.48, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 41.48, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0, -19.52, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -36.52, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, -19.52, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [1, 0.9, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [1, 0.9, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [1, 0.9, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [1, 0.9, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [1, 0.9, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 0.7, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } } } }, @@ -3782,7 +3777,7 @@ }, "0.875": { "post": { - "vector": [-38.70323, -17.28727, -18.81969] + "vector": [-38.7, -17.29, -18.82] }, "lerp_mode": "catmullrom" }, @@ -4284,6 +4279,2159 @@ } } }, + "attack": { + "animation_length": 2, + "bones": { + "jaw": { + "rotation": { + "0.6667": { + "vector": [0, 0, 0] + }, + "0.9167": { + "pre": { + "vector": [40, 0, 0] + }, + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "pre": { + "vector": [-18.33, 0, 0] + }, + "post": { + "vector": [-18.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-23.92, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-49.13, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-3.22, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 279, 0] + }, + "0.0833": { + "pre": { + "vector": [0, 290, 15] + }, + "post": { + "vector": [0, 290, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 330.19, 27.44] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 302, 101] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 173, 91] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 144, -61] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 134, -100] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 220.31, -39.81] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 262.74, -9.25] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 269, 6] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 279, 0] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.25": { + "pre": { + "vector": [0.9, 1.2, 0.9] + }, + "post": { + "vector": [0.9, 1.2, 0.9] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1, 1, 1] + }, + "0.7917": { + "vector": [1, 1, 1] + }, + "0.9583": { + "pre": { + "vector": [1.2, 0.6, 1.2] + }, + "post": { + "vector": [1.2, 0.6, 1.2] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_shoulder": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -8.75] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -51.27] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 3.31] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -10.53] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "l_arm2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [0, 0, 15] + }, + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, -11.94] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "l_arm3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -39.75] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 20.95] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -8.24] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_shoulder": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 8.75] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 51.27] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, -3.31] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 10.53] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "r_arm2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [0, 0, -15] + }, + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 11.94] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "r_arm3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 39.75] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -20.95] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule": { + "rotation": { + "0.0": { + "vector": [0, 45, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 45, 0] + }, + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-8.75, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-51.27, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-57.5, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [5, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [15, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [3.31, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 45, 0] + } + } + }, + "r_tentacule2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-10.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "r_tentacule3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [15, 0, 0] + }, + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-11.94, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "r_tentacule4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule": { + "rotation": { + "0.0": { + "vector": [0, 45, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 45, 0] + }, + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [8.75, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [51.27, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [57.5, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-5, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-15, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-3.31, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 45, 0] + } + } + }, + "l_back_tentacule2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [10.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "l_back_tentacule3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [-15, 0, 0] + }, + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [11.94, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "l_back_tentacule4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule": { + "rotation": { + "0.0": { + "vector": [0, -45, 0] + }, + "0.1667": { + "pre": { + "vector": [0, -45, 0] + }, + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [8.75, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [51.27, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [57.5, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-5, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-15, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-3.31, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, -45, 0] + } + } + }, + "r_back_tentacule2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [10.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "r_back_tentacule3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [-15, 0, 0] + }, + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [11.94, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "r_back_tentacule4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-51.27, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [3.31, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "center_tentacule2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-10.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "center_tentacule3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [15, 0, 0] + }, + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-11.94, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "center_tentacule4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule": { + "rotation": { + "0.0": { + "vector": [0, -45, 0] + }, + "0.1667": { + "pre": { + "vector": [0, -45, 0] + }, + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-8.75, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-51.27, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-57.5, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [5, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [15, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [3.31, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, -45, 0] + } + } + }, + "l_tentacule2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-10.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "l_tentacule3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [15, 0, 0] + }, + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-11.94, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "l_tentacule4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [8.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [51.27, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [-3.31, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "center_tentacule_back2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [10.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] + } + } + }, + "center_tentacule_back3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.625": { + "pre": { + "vector": [-15, 0, 0] + }, + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [11.94, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "vector": [0, 0, 0] + } + } + }, + "center_tentacule_back4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, "cry": { "animation_length": 3, "bones": { @@ -4343,6 +6491,120 @@ } } }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [4.93, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-22.82, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-27.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-27.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-22.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [-16.23, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 27, 0] + }, + "0.5417": { + "vector": [0, -33, 0] + }, + "0.5833": { + "vector": [0, 14, 0] + }, + "0.6667": { + "vector": [0, -19, 0] + }, + "0.75": { + "pre": { + "vector": [0, 5, 0] + }, + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, "l_shoulder": { "rotation": { "0.0": { @@ -4505,6 +6767,12 @@ }, "lerp_mode": "catmullrom" }, + "2.3333": { + "post": { + "vector": [0, 0, -6.67] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { "vector": [0, 0, 0] @@ -4539,6 +6807,12 @@ }, "lerp_mode": "catmullrom" }, + "2.4167": { + "post": { + "vector": [0, 0, -35.38] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { "vector": [0, 0, 0] @@ -4573,6 +6847,12 @@ }, "lerp_mode": "catmullrom" }, + "2.5417": { + "post": { + "vector": [0, 0, -39.58] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { "vector": [0, 0, 0] @@ -4777,6 +7057,12 @@ }, "lerp_mode": "catmullrom" }, + "2.3333": { + "post": { + "vector": [0, 0, 6.67] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { "vector": [0, 0, 0] @@ -4811,6 +7097,12 @@ }, "lerp_mode": "catmullrom" }, + "2.4167": { + "post": { + "vector": [0, 0, 35.38] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { "vector": [0, 0, 0] @@ -4845,6 +7137,12 @@ }, "lerp_mode": "catmullrom" }, + "2.5417": { + "post": { + "vector": [0, 0, 39.58] + }, + "lerp_mode": "catmullrom" + }, "3.0": { "post": { "vector": [0, 0, 0] @@ -4886,660 +7184,6 @@ "lerp_mode": "catmullrom" } } - }, - "Kraken": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.125": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.2083": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.2917": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.4583": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5417": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5833": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.625": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.9167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.9583": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0417": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0833": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.125": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.2083": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.2917": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.3333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.375": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.4167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.4583": { - "post": { - "vector": [3, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "scale": { - "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.125": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.2083": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.2917": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.4583": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.5417": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.5833": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.625": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.75": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.875": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.9167": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.9583": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.0417": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.0833": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.125": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.1667": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.2083": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.2917": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.3333": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.375": { - "post": { - "vector": [1.1, 1.1, 1] - }, - "lerp_mode": "catmullrom" - }, - "2.4167": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Kraken": { - "position": { - "0.0": { - "post": { - "vector": [0, 218.48, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 218.48, 0] - }, - "lerp_mode": "catmullrom" - } - } } } } diff --git a/common/src/main/resources/assets/antarchy/animations/glimmer_baby.animation.json b/common/src/main/resources/assets/antarchy/animations/ouranwood_deer.animation.json similarity index 65% rename from common/src/main/resources/assets/antarchy/animations/glimmer_baby.animation.json rename to common/src/main/resources/assets/antarchy/animations/ouranwood_deer.animation.json index 9084e98c..786efc3d 100644 --- a/common/src/main/resources/assets/antarchy/animations/glimmer_baby.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/ouranwood_deer.animation.json @@ -1664,6 +1664,911 @@ } } } + }, + "charge_start": { + "animation_length": 0.375, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [25, 0, 0] + }, + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-13, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-10, 0, 0] + }, + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [62.66, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [10, 0, 0] + }, + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [50.62, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-3.51, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15.98, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [37.5, 0, 0] + }, + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-37.5, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15.19, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [47.5, 0, 10] + }, + "post": { + "vector": [47.5, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [50, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [71.42, 0, 3.76] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [30, -7.5, -12.5] + }, + "post": { + "vector": [30, -7.5, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [37.5, -10, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [76.44, 0, -6.24] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [-35, 0, 0] + }, + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-12.81, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, 2, 2] + }, + "0.0833": { + "pre": { + "vector": [0, 3, 4] + }, + "post": { + "vector": [0, 3, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 4.04, 5.93] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 4, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "vector": [0, 0, 0] + } + } + } + } + }, + "charge_loop": { + "loop": true, + "animation_length": 0.25, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-13, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-8, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-13, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [77.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "vector": [10, 0, 0] + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.98, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0208": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "vector": [-15.19, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [32.5, 0, 0] + }, + "0.1875": { + "pre": { + "vector": [52.5, 0, 0] + }, + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15.98, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0.5, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "vector": [0, 0.19, -0.72] + }, + "0.0833": { + "vector": [0, 0, 0] + }, + "0.1042": { + "vector": [0, -0.5, 1] + }, + "0.125": { + "vector": [0, -2, 2] + }, + "0.1875": { + "pre": { + "vector": [0, 1, 0] + }, + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [-15.19, 0, 0] + }, + "0.0208": { + "vector": [0, 0, 0] + }, + "0.0625": { + "vector": [32.5, 0, 0] + }, + "0.125": { + "pre": { + "vector": [52.5, 0, 0] + }, + "post": { + "vector": [52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-15.19, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0.19, -0.72] + }, + "0.0208": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [0, -0.5, 1] + }, + "0.0625": { + "vector": [0, -2, 2] + }, + "0.125": { + "pre": { + "vector": [0, 1, 0] + }, + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.2292": { + "post": { + "vector": [0, 0.5, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0.19, -0.72] + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "vector": [0, 0, 0] + }, + "0.1042": { + "vector": [40, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [35.83, 0, 0] + }, + "post": { + "vector": [35.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.01, -2.12] + }, + "lerp_mode": "catmullrom" + }, + "0.0208": { + "post": { + "vector": [0, 0.69, -1.44] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, -1, 2] + }, + "0.1042": { + "vector": [0, -0.33, 2.33] + }, + "0.1458": { + "pre": { + "vector": [0, 1, 3] + }, + "post": { + "vector": [0, 1, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.2292": { + "post": { + "vector": [0, 3, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 2.01, -2.12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [40, 0, 0] + }, + "0.1042": { + "pre": { + "vector": [35.83, 0, 0] + }, + "post": { + "vector": [35.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0208": { + "vector": [0, -1, 2] + }, + "0.0417": { + "vector": [0, -0.33, 2.33] + }, + "0.0833": { + "pre": { + "vector": [0, 1, 3] + }, + "post": { + "vector": [0, 1, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 3, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0.69, -1.44] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "vector": [2.5, 0, 0] + }, + "0.1042": { + "pre": { + "vector": [5, 0, 0] + }, + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 2] + }, + "0.0417": { + "vector": [0, -1, 4] + }, + "0.1042": { + "pre": { + "vector": [0, 0.5, 5.25] + }, + "post": { + "vector": [0, 0.5, 5.25] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 2, 3.75] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 2] + } + } + } + } + }, + "charge_end": { + "loop": "hold_on_last_frame", + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [-13, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [4.5, 0, 0] + }, + "post": { + "vector": [4.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [72.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [80, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "vector": [10, 0, 0] + }, + "0.125": { + "pre": { + "vector": [12.5, 0, 0] + }, + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.98, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 1.68, -0.77] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "vector": [0, 0, 0] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [-15.19, 0, 0] + }, + "0.2917": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0.19, -0.72] + }, + "0.125": { + "pre": { + "vector": [0, 1.19, -0.47] + }, + "post": { + "vector": [0, 1.19, -0.47] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "back_right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.01, -2.12] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "back_left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, 0, 0] + } + } + } } } } \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/glimmer.animation.json b/common/src/main/resources/assets/antarchy/animations/ouranwood_deer_baby.animation.json similarity index 100% rename from common/src/main/resources/assets/antarchy/animations/glimmer.animation.json rename to common/src/main/resources/assets/antarchy/animations/ouranwood_deer_baby.animation.json diff --git a/common/src/main/resources/assets/antarchy/blockstates/big_bush.json b/common/src/main/resources/assets/antarchy/blockstates/big_bush.json deleted file mode 100644 index 7ea0c8aa..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/big_bush.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "variants": { - "age=0,facing=north": { "model": "antarchy:block/big_bush_stage1" }, - "age=0,facing=east": { "model": "antarchy:block/big_bush_stage1" }, - "age=0,facing=south": { "model": "antarchy:block/big_bush_stage1" }, - "age=0,facing=west": { "model": "antarchy:block/big_bush_stage1" }, - "age=1,facing=east": { "model": "antarchy:block/big_bush_stage2" }, - "age=1,facing=south": { "model": "antarchy:block/big_bush_stage2", "y": 90 }, - "age=1,facing=west": { "model": "antarchy:block/big_bush_stage2", "y": 180 }, - "age=1,facing=north": { "model": "antarchy:block/big_bush_stage2", "y": 270 }, - "age=2,facing=north": { "model": "antarchy:block/big_bush_stage3_bottom" }, - "age=2,facing=east": { "model": "antarchy:block/big_bush_stage3_bottom" }, - "age=2,facing=south": { "model": "antarchy:block/big_bush_stage3_bottom" }, - "age=2,facing=west": { "model": "antarchy:block/big_bush_stage3_bottom" } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/big_bush_part.json b/common/src/main/resources/assets/antarchy/blockstates/big_bush_part.json deleted file mode 100644 index ea083469..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/big_bush_part.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "cap=false": { "model": "antarchy:block/big_bush_part" }, - "cap=true": { "model": "antarchy:block/big_bush_stage3_top" } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/blush_moss_block.json b/common/src/main/resources/assets/antarchy/blockstates/blush_moss_block.json new file mode 100644 index 00000000..fd0dbfdd --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/blush_moss_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/blush_moss_block" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/blush_moss_carpet.json b/common/src/main/resources/assets/antarchy/blockstates/blush_moss_carpet.json new file mode 100644 index 00000000..fa1bd926 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/blush_moss_carpet.json @@ -0,0 +1,154 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/blush_moss_carpet" + }, + "when": { + "bottom": "true" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet" + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall" + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_small" + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall" + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_small", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_small", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_small", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "antarchy:block/blush_moss_carpet_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/corn_crop.json b/common/src/main/resources/assets/antarchy/blockstates/corn_crop.json new file mode 100644 index 00000000..ecdc71fe --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/corn_crop.json @@ -0,0 +1,28 @@ +{ + "variants": { + "age=0,half=lower": { + "model": "antarchy:block/corn_crop_stage_0" + }, + "age=0,half=upper": { + "model": "antarchy:block/corn_crop_stage_0" + }, + "age=1,half=lower": { + "model": "antarchy:block/corn_crop_stage_1" + }, + "age=1,half=upper": { + "model": "antarchy:block/corn_crop_stage_1" + }, + "age=2,half=lower": { + "model": "antarchy:block/corn_crop_stage_2_bottom" + }, + "age=2,half=upper": { + "model": "antarchy:block/corn_crop_stage_2_top" + }, + "age=3,half=lower": { + "model": "antarchy:block/corn_crop_stage_3_bottom" + }, + "age=3,half=upper": { + "model": "antarchy:block/corn_crop_stage_3_top" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/hanging_peach.json b/common/src/main/resources/assets/antarchy/blockstates/hanging_peach.json new file mode 100644 index 00000000..48e7f45e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/hanging_peach.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/hanging_peach" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/lumen.json b/common/src/main/resources/assets/antarchy/blockstates/lumen.json new file mode 100644 index 00000000..777d6ac3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/lumen.json @@ -0,0 +1,20 @@ +{ + "variants": { + "level=0": { "model": "minecraft:block/water" }, + "level=1": { "model": "minecraft:block/water" }, + "level=2": { "model": "minecraft:block/water" }, + "level=3": { "model": "minecraft:block/water" }, + "level=4": { "model": "minecraft:block/water" }, + "level=5": { "model": "minecraft:block/water" }, + "level=6": { "model": "minecraft:block/water" }, + "level=7": { "model": "minecraft:block/water" }, + "level=8": { "model": "minecraft:block/water" }, + "level=9": { "model": "minecraft:block/water" }, + "level=10": { "model": "minecraft:block/water" }, + "level=11": { "model": "minecraft:block/water" }, + "level=12": { "model": "minecraft:block/water" }, + "level=13": { "model": "minecraft:block/water" }, + "level=14": { "model": "minecraft:block/water" }, + "level=15": { "model": "minecraft:block/water" } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/lumen_froglight.json b/common/src/main/resources/assets/antarchy/blockstates/lumen_froglight.json new file mode 100644 index 00000000..e69294a3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/lumen_froglight.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/lumen_froglight" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine.json b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine.json deleted file mode 100644 index dace25bd..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "antarchy:block/ouranwood_vine" - } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine_plant.json b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine_plant.json deleted file mode 100644 index ab51785b..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine_plant.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "antarchy:block/ouranwood_vine_plant" - } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_button.json b/common/src/main/resources/assets/antarchy/blockstates/peach_button.json new file mode 100644 index 00000000..cccef879 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_button.json @@ -0,0 +1,119 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "antarchy:block/peach_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,powered=false": { + "model": "antarchy:block/peach_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "antarchy:block/peach_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "antarchy:block/peach_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "antarchy:block/peach_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "antarchy:block/peach_button" + }, + "face=floor,facing=north,powered=true": { + "model": "antarchy:block/peach_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "antarchy:block/peach_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "antarchy:block/peach_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "antarchy:block/peach_button", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=north,powered=false": { + "model": "antarchy:block/peach_button", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=north,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=south,powered=false": { + "model": "antarchy:block/peach_button", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=west,powered=false": { + "model": "antarchy:block/peach_button", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "antarchy:block/peach_button_pressed", + "uvlock": true, + "x": 90, + "y": 270 + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_door.json b/common/src/main/resources/assets/antarchy/blockstates/peach_door.json new file mode 100644 index 00000000..f2b86d87 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_door.json @@ -0,0 +1,125 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "antarchy:block/peach_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "antarchy:block/peach_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "antarchy:block/peach_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "antarchy:block/peach_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "antarchy:block/peach_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "antarchy:block/peach_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "antarchy:block/peach_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "antarchy:block/peach_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "antarchy:block/peach_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "antarchy:block/peach_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "antarchy:block/peach_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "antarchy:block/peach_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "antarchy:block/peach_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "antarchy:block/peach_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "antarchy:block/peach_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "antarchy:block/peach_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "antarchy:block/peach_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "antarchy:block/peach_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "antarchy:block/peach_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "antarchy:block/peach_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "antarchy:block/peach_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "antarchy:block/peach_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "antarchy:block/peach_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "antarchy:block/peach_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "antarchy:block/peach_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "antarchy:block/peach_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "antarchy:block/peach_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "antarchy:block/peach_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "antarchy:block/peach_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "antarchy:block/peach_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "antarchy:block/peach_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "antarchy:block/peach_door_top_right_open", + "y": 90 + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_fence.json b/common/src/main/resources/assets/antarchy/blockstates/peach_fence.json new file mode 100644 index 00000000..d337b1a2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_fence.json @@ -0,0 +1,49 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/peach_fence_post" + } + }, + { + "apply": { + "model": "antarchy:block/peach_fence_side", + "uvlock": true + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/peach_fence_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/peach_fence_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/peach_fence_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + } + ] +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_fence_gate.json b/common/src/main/resources/assets/antarchy/blockstates/peach_fence_gate.json new file mode 100644 index 00000000..56353c76 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_fence_gate.json @@ -0,0 +1,81 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "model": "antarchy:block/peach_fence_gate", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=false,open=true": { + "model": "antarchy:block/peach_fence_gate_open", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=false": { + "model": "antarchy:block/peach_fence_gate_wall", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=true": { + "model": "antarchy:block/peach_fence_gate_wall_open", + "uvlock": true, + "y": 270 + }, + "facing=north,in_wall=false,open=false": { + "model": "antarchy:block/peach_fence_gate", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=false,open=true": { + "model": "antarchy:block/peach_fence_gate_open", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=false": { + "model": "antarchy:block/peach_fence_gate_wall", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=true": { + "model": "antarchy:block/peach_fence_gate_wall_open", + "uvlock": true, + "y": 180 + }, + "facing=south,in_wall=false,open=false": { + "model": "antarchy:block/peach_fence_gate", + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "antarchy:block/peach_fence_gate_open", + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "antarchy:block/peach_fence_gate_wall", + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "antarchy:block/peach_fence_gate_wall_open", + "uvlock": true + }, + "facing=west,in_wall=false,open=false": { + "model": "antarchy:block/peach_fence_gate", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=false,open=true": { + "model": "antarchy:block/peach_fence_gate_open", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=false": { + "model": "antarchy:block/peach_fence_gate_wall", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=true": { + "model": "antarchy:block/peach_fence_gate_wall_open", + "uvlock": true, + "y": 90 + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_hanging_sign.json b/common/src/main/resources/assets/antarchy/blockstates/peach_hanging_sign.json new file mode 100644 index 00000000..55e63aa2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/jungle_hanging_sign" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_leaves.json b/common/src/main/resources/assets/antarchy/blockstates/peach_leaves.json new file mode 100644 index 00000000..e7645105 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_leaves.json @@ -0,0 +1,6 @@ +{ + "variants": { + "": { "model": "antarchy:block/peach_leaves" } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_log.json b/common/src/main/resources/assets/antarchy/blockstates/peach_log.json new file mode 100644 index 00000000..36f25917 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_log.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/peach_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/peach_log" + }, + "axis=z": { + "model": "antarchy:block/peach_log_horizontal", + "x": 90 + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_planks.json b/common/src/main/resources/assets/antarchy/blockstates/peach_planks.json new file mode 100644 index 00000000..0477ebee --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_planks.json @@ -0,0 +1,8 @@ +{ + "variants": { + "": { + "model": "antarchy:block/peach_planks" + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_pressure_plate.json b/common/src/main/resources/assets/antarchy/blockstates/peach_pressure_plate.json new file mode 100644 index 00000000..47b689b7 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_pressure_plate.json @@ -0,0 +1,11 @@ +{ + "variants": { + "powered=false": { + "model": "antarchy:block/peach_pressure_plate" + }, + "powered=true": { + "model": "antarchy:block/peach_pressure_plate_down" + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_sapling.json b/common/src/main/resources/assets/antarchy/blockstates/peach_sapling.json new file mode 100644 index 00000000..1d4e00c9 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/peach_sapling" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_sign.json b/common/src/main/resources/assets/antarchy/blockstates/peach_sign.json new file mode 100644 index 00000000..dae0a1fd --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/jungle_sign" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_slab.json b/common/src/main/resources/assets/antarchy/blockstates/peach_slab.json new file mode 100644 index 00000000..f2d21f55 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_slab.json @@ -0,0 +1,14 @@ +{ + "variants": { + "type=bottom": { + "model": "antarchy:block/peach_slab" + }, + "type=double": { + "model": "antarchy:block/peach_planks" + }, + "type=top": { + "model": "antarchy:block/peach_slab_top" + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_stairs.json b/common/src/main/resources/assets/antarchy/blockstates/peach_stairs.json new file mode 100644 index 00000000..eb8c244d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_stairs.json @@ -0,0 +1,210 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/peach_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/peach_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/peach_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/peach_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_trapdoor.json b/common/src/main/resources/assets/antarchy/blockstates/peach_trapdoor.json new file mode 100644 index 00000000..6ef25c2b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_trapdoor.json @@ -0,0 +1,70 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "antarchy:block/peach_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "antarchy:block/peach_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "antarchy:block/peach_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "antarchy:block/peach_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "antarchy:block/peach_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "antarchy:block/peach_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "antarchy:block/peach_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "antarchy:block/peach_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "antarchy:block/peach_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "antarchy:block/peach_trapdoor_open", + "x": 180, + "y": 90 + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_wall_hanging_sign.json b/common/src/main/resources/assets/antarchy/blockstates/peach_wall_hanging_sign.json new file mode 100644 index 00000000..55e63aa2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_wall_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/jungle_hanging_sign" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_wall_sign.json b/common/src/main/resources/assets/antarchy/blockstates/peach_wall_sign.json new file mode 100644 index 00000000..dae0a1fd --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "minecraft:block/jungle_sign" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/peach_wood.json b/common/src/main/resources/assets/antarchy/blockstates/peach_wood.json new file mode 100644 index 00000000..18f45dfd --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/peach_wood.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/peach_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/peach_wood" + }, + "axis=z": { + "model": "antarchy:block/peach_wood", + "x": 90 + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/red_ant_nest.json b/common/src/main/resources/assets/antarchy/blockstates/red_ant_nest.json index a8412942..b75a3e29 100644 --- a/common/src/main/resources/assets/antarchy/blockstates/red_ant_nest.json +++ b/common/src/main/resources/assets/antarchy/blockstates/red_ant_nest.json @@ -1,7 +1,28 @@ { "variants": { - "": { - "model": "antarchy:block/red_ant_nest" - } + "facing=north": [ + {"model": "antarchy:block/red_ant_nest"}, + {"model": "antarchy:block/red_ant_nest", "y": 90}, + {"model": "antarchy:block/red_ant_nest", "y": 180}, + {"model": "antarchy:block/red_ant_nest", "y": 270} + ], + "facing=east": [ + {"model": "antarchy:block/red_ant_nest", "y": 90}, + {"model": "antarchy:block/red_ant_nest", "y": 180}, + {"model": "antarchy:block/red_ant_nest", "y": 270}, + {"model": "antarchy:block/red_ant_nest"} + ], + "facing=south": [ + {"model": "antarchy:block/red_ant_nest", "y": 180}, + {"model": "antarchy:block/red_ant_nest", "y": 270}, + {"model": "antarchy:block/red_ant_nest"}, + {"model": "antarchy:block/red_ant_nest", "y": 90} + ], + "facing=west": [ + {"model": "antarchy:block/red_ant_nest", "y": 270}, + {"model": "antarchy:block/red_ant_nest"}, + {"model": "antarchy:block/red_ant_nest", "y": 90}, + {"model": "antarchy:block/red_ant_nest", "y": 180} + ] } -} \ No newline at end of file +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/roseate_froglight.json b/common/src/main/resources/assets/antarchy/blockstates/roseate_froglight.json new file mode 100644 index 00000000..8b93d9c2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/roseate_froglight.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/roseate_froglight" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/stripped_peach_log.json b/common/src/main/resources/assets/antarchy/blockstates/stripped_peach_log.json new file mode 100644 index 00000000..e7bf00d4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/stripped_peach_log.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/stripped_peach_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/stripped_peach_log" + }, + "axis=z": { + "model": "antarchy:block/stripped_peach_log_horizontal", + "x": 90 + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/stripped_peach_wood.json b/common/src/main/resources/assets/antarchy/blockstates/stripped_peach_wood.json new file mode 100644 index 00000000..7e0dea68 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/stripped_peach_wood.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/stripped_peach_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/stripped_peach_wood" + }, + "axis=z": { + "model": "antarchy:block/stripped_peach_wood", + "x": 90 + } + } +} + diff --git a/common/src/main/resources/assets/antarchy/blockstates/torchflower_bush.json b/common/src/main/resources/assets/antarchy/blockstates/torchflower_bush.json deleted file mode 100644 index b743846f..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/torchflower_bush.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "half=lower": { - "model": "antarchy:block/torchflower_bush_bottom" - }, - "half=upper": { - "model": "antarchy:block/torchflower_bush_top" - } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/very_short_grass.json b/common/src/main/resources/assets/antarchy/blockstates/very_short_grass.json deleted file mode 100644 index c25b3915..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/very_short_grass.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "": { "model": "antarchy:block/very_short_grass" } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/very_tall_grass.json b/common/src/main/resources/assets/antarchy/blockstates/very_tall_grass.json deleted file mode 100644 index 65ddba9e..00000000 --- a/common/src/main/resources/assets/antarchy/blockstates/very_tall_grass.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "part=lower": { "model": "antarchy:block/very_tall_grass_bottom" }, - "part=middle": { "model": "antarchy:block/very_tall_grass_middle" }, - "part=upper": { "model": "antarchy:block/very_tall_grass_top" } - } -} diff --git a/common/src/main/resources/assets/antarchy/blockstates/wild_corn.json b/common/src/main/resources/assets/antarchy/blockstates/wild_corn.json new file mode 100644 index 00000000..aa33127a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/wild_corn.json @@ -0,0 +1,28 @@ +{ + "variants": { + "age=0,half=lower": { + "model": "antarchy:block/corn_crop_stage_3_bottom" + }, + "age=0,half=upper": { + "model": "antarchy:block/corn_crop_stage_3_top" + }, + "age=1,half=lower": { + "model": "antarchy:block/corn_crop_stage_3_bottom" + }, + "age=1,half=upper": { + "model": "antarchy:block/corn_crop_stage_3_top" + }, + "age=2,half=lower": { + "model": "antarchy:block/corn_crop_stage_3_bottom" + }, + "age=2,half=upper": { + "model": "antarchy:block/corn_crop_stage_3_top" + }, + "age=3,half=lower": { + "model": "antarchy:block/corn_crop_stage_3_bottom" + }, + "age=3,half=upper": { + "model": "antarchy:block/corn_crop_stage_3_top" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/geo/elka.geo.json b/common/src/main/resources/assets/antarchy/geo/elka.geo.json new file mode 100644 index 00000000..83bf0d6c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/elka.geo.json @@ -0,0 +1,111 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "panda", + "pivot": [0, 19.6, -0.4] + }, + { + "name": "body", + "parent": "panda", + "pivot": [0, 19.6, -0.4] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-6.5, 18, -12.5], + "cubes": [ + {"origin": [-10.5, 0, -17], "size": [8, 18, 9], "inflate": 0.01, "uv": [72, 73]} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [6.5, 18, -12.5], + "cubes": [ + {"origin": [2.5, 0, -17], "size": [8, 18, 9], "inflate": 0.01, "uv": [72, 73], "mirror": true} + ] + }, + { + "name": "right_back_leg", + "parent": "body", + "pivot": [-6.5, 17, 12.5], + "cubes": [ + {"origin": [-10.5, 0, 8], "size": [8, 17, 9], "uv": [64, 47]} + ] + }, + { + "name": "left_back_leg", + "parent": "body", + "pivot": [6.5, 17, 12.5], + "cubes": [ + {"origin": [2.5, 0, 8], "size": [8, 17, 9], "uv": [64, 47], "mirror": true} + ] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 28, -2], + "cubes": [ + {"origin": [-10.5, 16, -17], "size": [21, 24, 15], "inflate": 0.1, "uv": [0, 76]} + ] + }, + { + "name": "head", + "parent": "torso", + "pivot": [4.5, 23, -23], + "cubes": [ + {"origin": [-5.5, 16, -34], "size": [11, 7, 6], "uv": [0, 25]}, + {"origin": [-8.5, 16, -28], "size": [17, 14, 11], "uv": [0, 0]}, + {"origin": [-21.5, 28, -21], "size": [13, 10, 0], "uv": [101, 66]}, + {"origin": [8.5, 28, -21], "size": [13, 10, 0], "uv": [101, 66], "mirror": true}, + {"origin": [-4.5, 28, -29], "size": [2, 5, 2], "uv": [0, 0]}, + {"origin": [2.5, 28, -29], "size": [2, 5, 2], "uv": [0, 0], "mirror": true} + ] + }, + { + "name": "jaw", + "parent": "head", + "pivot": [0, 17, -27.5], + "cubes": [ + {"origin": [-5.5, 15, -33.5], "size": [11, 2, 6], "inflate": -0.1, "uv": [0, 59]} + ] + }, + { + "name": "right_ear", + "parent": "head", + "pivot": [-6.5, 29, -24], + "cubes": [ + {"origin": [-10.5, 29, -25], "size": [8, 6, 2], "uv": [0, 38]} + ] + }, + { + "name": "left_ear", + "parent": "head", + "pivot": [6.5, 29, -24], + "cubes": [ + {"origin": [2.5, 29, -25], "size": [8, 6, 2], "uv": [0, 38], "mirror": true} + ] + }, + { + "name": "back", + "parent": "torso", + "pivot": [0, 25, -2], + "cubes": [ + {"origin": [-10.5, 14, -2], "size": [21, 22, 19], "inflate": 0.05, "uv": [48, 6]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/elka_baby.geo.json b/common/src/main/resources/assets/antarchy/geo/elka_baby.geo.json new file mode 100644 index 00000000..23efa651 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/elka_baby.geo.json @@ -0,0 +1,109 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "baby_elka", + "pivot": [0, 0, -7] + }, + { + "name": "body", + "parent": "baby_elka", + "pivot": [0, 11, 1] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 6, -2.5], + "cubes": [ + {"origin": [-6, 6, -7], "size": [12, 12, 9], "inflate": 0.1, "uv": [0, 0]} + ] + }, + { + "name": "head", + "parent": "torso", + "pivot": [-0.8, 10.3, -7.05], + "cubes": [ + {"origin": [-5, 6, -15], "size": [10, 9, 8], "uv": [40, 23]}, + {"origin": [-3, 6.5, -18], "size": [6, 4, 3], "uv": [0, 46]}, + {"origin": [-3, 14, -16], "size": [2, 4, 2], "uv": [14, 40]}, + {"origin": [1, 14, -16], "size": [2, 4, 2], "uv": [14, 40], "mirror": true} + ] + }, + { + "name": "jaw", + "parent": "head", + "pivot": [0, 6.75, -15], + "cubes": [ + {"origin": [-3, 5.75, -18], "size": [6, 1, 3], "inflate": -0.05, "uv": [41, 19]} + ] + }, + { + "name": "right_ear", + "parent": "head", + "pivot": [-4, 13, -11.5], + "cubes": [ + {"origin": [-7, 13, -12], "size": [6, 5, 1], "uv": [0, 40]} + ] + }, + { + "name": "left_ear", + "parent": "head", + "pivot": [4, 13, -11.5], + "cubes": [ + {"origin": [1, 13, -12], "size": [6, 5, 1], "uv": [0, 40], "mirror": true} + ] + }, + { + "name": "back", + "parent": "torso", + "pivot": [0, 10.5, 2], + "cubes": [ + {"origin": [-6, 5, 2], "size": [12, 11, 8], "uv": [0, 21]} + ] + }, + { + "name": "back_left_leg", + "parent": "body", + "pivot": [4, 5, 6], + "cubes": [ + {"origin": [2, 0, 4], "size": [4, 8, 4], "inflate": -0.05, "uv": [42, 0], "mirror": true} + ] + }, + { + "name": "back_right_leg", + "parent": "body", + "pivot": [-4, 5, 6], + "cubes": [ + {"origin": [-6, 0, 4], "size": [4, 8, 4], "inflate": -0.05, "uv": [42, 0]} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [4, 6, -5], + "cubes": [ + {"origin": [2, 0, -7], "size": [4, 8, 4], "uv": [56, 10], "mirror": true} + ] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-4, 6, -5], + "cubes": [ + {"origin": [-6, 0, -7], "size": [4, 8, 4], "uv": [56, 10]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/kraken.geo.json b/common/src/main/resources/assets/antarchy/geo/kraken.geo.json index eba7b341..2138a567 100644 --- a/common/src/main/resources/assets/antarchy/geo/kraken.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/kraken.geo.json @@ -13,10 +13,10 @@ "bones": [ { "name": "Kraken", - "pivot": [0, 51, -8] + "pivot": [0, 0, 0] }, { - "name": "head", + "name": "body", "parent": "Kraken", "pivot": [0, 51, -8], "cubes": [ @@ -26,7 +26,7 @@ }, { "name": "mouth", - "parent": "head", + "parent": "body", "pivot": [0, 51, -23.9], "cubes": [ {"origin": [-6.5, 20, -44.4], "size": [13, 33, 24], "uv": [169, 296]} @@ -44,7 +44,7 @@ }, { "name": "head_top", - "parent": "head", + "parent": "body", "pivot": [0, 79.25, -6.25], "cubes": [ {"origin": [-42.5, 79, -49], "size": [85, 99, 85], "uv": [0, 0]}, @@ -55,7 +55,7 @@ }, { "name": "right_eye", - "parent": "head", + "parent": "body", "pivot": [-53, 73, -41], "cubes": [ {"origin": [-59.5, 58, -56], "size": [13, 30, 30], "uv": [0, 296]} @@ -63,7 +63,7 @@ }, { "name": "left_eye", - "parent": "head", + "parent": "body", "pivot": [53, 73, -41], "cubes": [ {"origin": [46.5, 58, -56], "size": [13, 30, 30], "uv": [0, 296], "mirror": true} @@ -71,7 +71,7 @@ }, { "name": "l_shoulder", - "parent": "head", + "parent": "body", "pivot": [31.1875, 61.375, -12.5], "cubes": [ {"origin": [25, 14, -29], "size": [17, 47, 33], "uv": [0, 356]} @@ -133,13 +133,20 @@ {"origin": [25, -265, -26], "size": [8, 21, 27], "uv": [172, 468]} ] }, + { + "name": "Grab", + "parent": "l_hand2", + "pivot": [22, -223.5, -12.5], + "locators": { + "grab": [22, -223.5, -12.5] + } + }, { "name": "center_tentacule", - "parent": "head", + "parent": "body", "pivot": [0, 58.375, -52.5], - "rotation": [0, 90, 0], "cubes": [ - {"origin": [-6.1875, 11, -69], "size": [17, 47, 33], "uv": [0, 436]} + {"origin": [-6.1875, 11, -69], "size": [17, 47, 33], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [0, 436]} ] }, { @@ -147,7 +154,7 @@ "parent": "center_tentacule", "pivot": [1.48214, 10.92857, -52.5], "cubes": [ - {"origin": [-6.1875, -37, -66], "size": [14, 48, 27], "uv": [86, 296]} + {"origin": [-6.1875, -37, -66], "size": [14, 48, 27], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [86, 296]} ] }, { @@ -155,7 +162,7 @@ "parent": "center_tentacule2", "pivot": [1.29167, -37.00833, -52.5], "cubes": [ - {"origin": [-6.1875, -85, -63], "size": [14, 48, 21], "uv": [100, 371]} + {"origin": [-6.1875, -85, -63], "size": [14, 48, 21], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [100, 371]} ] }, { @@ -163,7 +170,7 @@ "parent": "center_tentacule3", "pivot": [1.025, -85, -52.5], "cubes": [ - {"origin": [-6.1875, -133, -63], "size": [14, 48, 21], "uv": [170, 371]} + {"origin": [-6.1875, -133, -63], "size": [14, 48, 21], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [170, 371]} ] }, { @@ -171,7 +178,7 @@ "parent": "center_tentacule4", "pivot": [-0.375, -132.975, -52.5], "cubes": [ - {"origin": [-6.1875, -181, -61], "size": [12, 48, 17], "uv": [243, 330]} + {"origin": [-6.1875, -181, -61], "size": [12, 48, 17], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [243, 330]} ] }, { @@ -179,16 +186,15 @@ "parent": "center_tentacule5", "pivot": [-0.70833, -180.99167, -52.5], "cubes": [ - {"origin": [-6.1875, -206, -59], "size": [9, 25, 13], "uv": [242, 398]} + {"origin": [-6.1875, -206, -59], "size": [9, 25, 13], "pivot": [0.3125, -79.5, -52.5], "rotation": [0, 90, 0], "uv": [242, 398]} ] }, { "name": "center_tentacule_back", - "parent": "head", + "parent": "body", "pivot": [0, 58.375, 24.5], - "rotation": [0, -90, 0], "cubes": [ - {"origin": [-6.1875, 11, 8], "size": [17, 47, 33], "uv": [0, 436]} + {"origin": [-6.1875, 11, 8], "size": [17, 47, 33], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [0, 436]} ] }, { @@ -196,7 +202,7 @@ "parent": "center_tentacule_back", "pivot": [1.48214, 10.92857, 24.5], "cubes": [ - {"origin": [-6.1875, -37, 11], "size": [14, 48, 27], "uv": [86, 296]} + {"origin": [-6.1875, -37, 11], "size": [14, 48, 27], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [86, 296]} ] }, { @@ -204,7 +210,7 @@ "parent": "center_tentacule_back2", "pivot": [1.29167, -37.00833, 24.5], "cubes": [ - {"origin": [-6.1875, -85, 14], "size": [14, 48, 21], "uv": [100, 371]} + {"origin": [-6.1875, -85, 14], "size": [14, 48, 21], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [100, 371]} ] }, { @@ -212,7 +218,7 @@ "parent": "center_tentacule_back3", "pivot": [1.025, -85, 24.5], "cubes": [ - {"origin": [-6.1875, -133, 14], "size": [14, 48, 21], "uv": [170, 371]} + {"origin": [-6.1875, -133, 14], "size": [14, 48, 21], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [170, 371]} ] }, { @@ -220,7 +226,7 @@ "parent": "center_tentacule_back4", "pivot": [-0.375, -132.975, 24.5], "cubes": [ - {"origin": [-6.1875, -181, 16], "size": [12, 48, 17], "uv": [243, 330]} + {"origin": [-6.1875, -181, 16], "size": [12, 48, 17], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [243, 330]} ] }, { @@ -228,16 +234,15 @@ "parent": "center_tentacule_back5", "pivot": [-0.70833, -180.99167, 24.5], "cubes": [ - {"origin": [-6.1875, -206, 18], "size": [9, 25, 13], "uv": [242, 398]} + {"origin": [-6.1875, -206, 18], "size": [9, 25, 13], "pivot": [0.3125, -79.5, 24.5], "rotation": [0, -90, 0], "uv": [242, 398]} ] }, { "name": "l_back_tentacule", - "parent": "head", + "parent": "body", "pivot": [22.1875, 58.375, 14.5], - "rotation": [0, -90, 0], "cubes": [ - {"origin": [16, 11, -2], "size": [17, 47, 33], "uv": [0, 356]} + {"origin": [16, 11, -2], "size": [17, 47, 33], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [0, 356]} ] }, { @@ -245,7 +250,7 @@ "parent": "l_back_tentacule", "pivot": [21.85714, 10.92857, 14.5], "cubes": [ - {"origin": [16, -37, 1], "size": [14, 48, 27], "uv": [86, 296]} + {"origin": [16, -37, 1], "size": [14, 48, 27], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [86, 296]} ] }, { @@ -253,7 +258,7 @@ "parent": "l_back_tentacule2", "pivot": [21.66667, -37.00833, 14.5], "cubes": [ - {"origin": [16, -85, 4], "size": [14, 48, 21], "uv": [100, 371]} + {"origin": [16, -85, 4], "size": [14, 48, 21], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [100, 371]} ] }, { @@ -261,7 +266,7 @@ "parent": "l_back_tentacule3", "pivot": [21.4, -85, 14.5], "cubes": [ - {"origin": [16, -133, 4], "size": [14, 48, 21], "uv": [170, 371]} + {"origin": [16, -133, 4], "size": [14, 48, 21], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [170, 371]} ] }, { @@ -269,7 +274,7 @@ "parent": "l_back_tentacule4", "pivot": [21, -132.975, 14.5], "cubes": [ - {"origin": [16, -181, 6], "size": [12, 48, 17], "uv": [243, 330]} + {"origin": [16, -181, 6], "size": [12, 48, 17], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [243, 330]} ] }, { @@ -277,16 +282,15 @@ "parent": "l_back_tentacule5", "pivot": [20.66667, -180.99167, 14.5], "cubes": [ - {"origin": [16, -206, 8], "size": [9, 25, 13], "uv": [242, 398]} + {"origin": [16, -206, 8], "size": [9, 25, 13], "pivot": [22.5, -79.5, 14.5], "rotation": [0, -90, 0], "uv": [242, 398]} ] }, { "name": "r_back_tentacule", - "parent": "head", + "parent": "body", "pivot": [-22.1875, 58.375, 14.5], - "rotation": [0, 90, 0], "cubes": [ - {"origin": [-33, 11, -2], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} + {"origin": [-33, 11, -2], "size": [17, 47, 33], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [0, 356], "mirror": true} ] }, { @@ -294,7 +298,7 @@ "parent": "r_back_tentacule", "pivot": [-21.85714, 10.92857, 14.5], "cubes": [ - {"origin": [-30, -37, 1], "size": [14, 48, 27], "uv": [86, 296], "mirror": true} + {"origin": [-30, -37, 1], "size": [14, 48, 27], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [86, 296], "mirror": true} ] }, { @@ -302,7 +306,7 @@ "parent": "r_back_tentacule2", "pivot": [-21.66667, -37.00833, 14.5], "cubes": [ - {"origin": [-30, -85, 4], "size": [14, 48, 21], "uv": [100, 371], "mirror": true} + {"origin": [-30, -85, 4], "size": [14, 48, 21], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [100, 371], "mirror": true} ] }, { @@ -310,7 +314,7 @@ "parent": "r_back_tentacule3", "pivot": [-21.4, -85, 14.5], "cubes": [ - {"origin": [-30, -133, 4], "size": [14, 48, 21], "uv": [170, 371], "mirror": true} + {"origin": [-30, -133, 4], "size": [14, 48, 21], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [170, 371], "mirror": true} ] }, { @@ -318,7 +322,7 @@ "parent": "r_back_tentacule4", "pivot": [-21, -132.975, 14.5], "cubes": [ - {"origin": [-28, -181, 6], "size": [12, 48, 17], "uv": [243, 330], "mirror": true} + {"origin": [-28, -181, 6], "size": [12, 48, 17], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [243, 330], "mirror": true} ] }, { @@ -326,16 +330,15 @@ "parent": "r_back_tentacule5", "pivot": [-20.66667, -180.99167, 14.5], "cubes": [ - {"origin": [-25, -206, 8], "size": [9, 25, 13], "uv": [242, 398], "mirror": true} + {"origin": [-25, -206, 8], "size": [9, 25, 13], "pivot": [-22.5, -79.5, 14.5], "rotation": [0, 90, 0], "uv": [242, 398], "mirror": true} ] }, { "name": "r_tentacule", - "parent": "head", + "parent": "body", "pivot": [-28.1875, 58.375, -42.5], - "rotation": [0, -90, 0], "cubes": [ - {"origin": [-39, 11, -59], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} + {"origin": [-39, 11, -59], "size": [17, 47, 33], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [0, 356], "mirror": true} ] }, { @@ -343,7 +346,7 @@ "parent": "r_tentacule", "pivot": [-27.85714, 10.92857, -42.5], "cubes": [ - {"origin": [-36, -37, -56], "size": [14, 48, 27], "uv": [86, 296], "mirror": true} + {"origin": [-36, -37, -56], "size": [14, 48, 27], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [86, 296], "mirror": true} ] }, { @@ -351,7 +354,7 @@ "parent": "r_tentacule2", "pivot": [-27.66667, -37.00833, -42.5], "cubes": [ - {"origin": [-36, -85, -53], "size": [14, 48, 21], "uv": [100, 371], "mirror": true} + {"origin": [-36, -85, -53], "size": [14, 48, 21], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [100, 371], "mirror": true} ] }, { @@ -359,7 +362,7 @@ "parent": "r_tentacule3", "pivot": [-27.4, -85, -42.5], "cubes": [ - {"origin": [-36, -133, -53], "size": [14, 48, 21], "uv": [170, 371], "mirror": true} + {"origin": [-36, -133, -53], "size": [14, 48, 21], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [170, 371], "mirror": true} ] }, { @@ -367,7 +370,7 @@ "parent": "r_tentacule4", "pivot": [-27, -132.975, -42.5], "cubes": [ - {"origin": [-34, -181, -51], "size": [12, 48, 17], "uv": [243, 330], "mirror": true} + {"origin": [-34, -181, -51], "size": [12, 48, 17], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [243, 330], "mirror": true} ] }, { @@ -375,16 +378,15 @@ "parent": "r_tentacule5", "pivot": [-26.66667, -180.99167, -42.5], "cubes": [ - {"origin": [-31, -206, -49], "size": [9, 25, 13], "uv": [242, 398], "mirror": true} + {"origin": [-31, -206, -49], "size": [9, 25, 13], "pivot": [-28.5, -79.5, -42.5], "rotation": [0, -90, 0], "uv": [242, 398], "mirror": true} ] }, { "name": "l_tentacule", - "parent": "head", + "parent": "body", "pivot": [28.1875, 58.375, -42.5], - "rotation": [0, 90, 0], "cubes": [ - {"origin": [22, 11, -59], "size": [17, 47, 33], "uv": [0, 356]} + {"origin": [22, 11, -59], "size": [17, 47, 33], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [0, 356]} ] }, { @@ -392,7 +394,7 @@ "parent": "l_tentacule", "pivot": [27.85714, 10.92857, -42.5], "cubes": [ - {"origin": [22, -37, -56], "size": [14, 48, 27], "uv": [86, 296]} + {"origin": [22, -37, -56], "size": [14, 48, 27], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [86, 296]} ] }, { @@ -400,7 +402,7 @@ "parent": "l_tentacule2", "pivot": [27.66667, -37.00833, -42.5], "cubes": [ - {"origin": [22, -85, -53], "size": [14, 48, 21], "uv": [100, 371]} + {"origin": [22, -85, -53], "size": [14, 48, 21], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [100, 371]} ] }, { @@ -408,7 +410,7 @@ "parent": "l_tentacule3", "pivot": [27.4, -85, -42.5], "cubes": [ - {"origin": [22, -133, -53], "size": [14, 48, 21], "uv": [170, 371]} + {"origin": [22, -133, -53], "size": [14, 48, 21], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [170, 371]} ] }, { @@ -416,7 +418,7 @@ "parent": "l_tentacule4", "pivot": [27, -132.975, -42.5], "cubes": [ - {"origin": [22, -181, -51], "size": [12, 48, 17], "uv": [243, 330]} + {"origin": [22, -181, -51], "size": [12, 48, 17], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [243, 330]} ] }, { @@ -424,12 +426,12 @@ "parent": "l_tentacule5", "pivot": [26.66667, -180.99167, -42.5], "cubes": [ - {"origin": [22, -206, -49], "size": [9, 25, 13], "uv": [242, 398]} + {"origin": [22, -206, -49], "size": [9, 25, 13], "pivot": [28.5, -79.5, -42.5], "rotation": [0, 90, 0], "uv": [242, 398]} ] }, { "name": "r_shoulder", - "parent": "head", + "parent": "body", "pivot": [-31.1875, 61.375, -12.5], "cubes": [ {"origin": [-42, 14, -29], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} diff --git a/common/src/main/resources/assets/antarchy/geo/glimmer.geo.json b/common/src/main/resources/assets/antarchy/geo/ouranwood_deer.geo.json similarity index 100% rename from common/src/main/resources/assets/antarchy/geo/glimmer.geo.json rename to common/src/main/resources/assets/antarchy/geo/ouranwood_deer.geo.json diff --git a/common/src/main/resources/assets/antarchy/geo/glimmer_baby.geo.json b/common/src/main/resources/assets/antarchy/geo/ouranwood_deer_baby.geo.json similarity index 100% rename from common/src/main/resources/assets/antarchy/geo/glimmer_baby.geo.json rename to common/src/main/resources/assets/antarchy/geo/ouranwood_deer_baby.geo.json diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index ef4967c6..7bbad3f6 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -17,18 +17,33 @@ "block.antarchy.ouranwood_button": "Ouranwood Button", "block.antarchy.ouranwood_leaves": "Ouranwood Leaves", "block.antarchy.ouranwood_acorn": "Ouranwood Acorn", - "block.antarchy.ouranwood_vine": "Ouranwood Vine", "block.antarchy.ouranwood_sign": "Ouranwood Sign", "block.antarchy.ouranwood_hanging_sign": "Ouranwood Hanging Sign", + "block.antarchy.peach_log": "Peach Log", + "block.antarchy.peach_wood": "Peach Wood", + "block.antarchy.stripped_peach_log": "Stripped Peach Log", + "block.antarchy.stripped_peach_wood": "Stripped Peach Wood", + "block.antarchy.peach_planks": "Peach Planks", + "block.antarchy.peach_stairs": "Peach Stairs", + "block.antarchy.peach_slab": "Peach Slab", + "block.antarchy.peach_fence": "Peach Fence", + "block.antarchy.peach_fence_gate": "Peach Fence Gate", + "block.antarchy.peach_door": "Peach Door", + "block.antarchy.peach_trapdoor": "Peach Trapdoor", + "block.antarchy.peach_pressure_plate": "Peach Pressure Plate", + "block.antarchy.peach_button": "Peach Button", + "block.antarchy.peach_leaves": "Peach Leaves", + "block.antarchy.hanging_peach": "Hanging Peach", + "block.antarchy.peach_sapling": "Peach Sapling", + "block.antarchy.peach_sign": "Peach Sign", + "block.antarchy.peach_hanging_sign": "Peach Hanging Sign", "block.antarchy.orange_milkweed": "Orange Milkweed", "block.antarchy.pink_milkweed": "Pink Milkweed", "block.antarchy.hushweed": "Hushweed", - "block.antarchy.big_bush": "Big Bush", - "block.antarchy.big_bush_part": "Big Bush", - "block.antarchy.very_short_grass": "Very Short Grass", - "block.antarchy.very_tall_grass": "Very Tall Grass", "block.antarchy.umbral_moss_block": "Umbral Moss Block", "block.antarchy.umbral_moss_carpet": "Umbral Moss Carpet", + "block.antarchy.blush_moss_block": "Blush Moss Block", + "block.antarchy.blush_moss_carpet": "Blush Moss Carpet", "block.antarchy.duplicator_sapling": "Duplicator Sapling", "block.antarchy.duct_tape": "Duct Tape", "block.antarchy.infested_rooted_dirt": "Infested Rooted Dirt", @@ -75,6 +90,7 @@ "block.antarchy.polished_antimetal": "Polished Antimetal", "block.antarchy.antimetal_scaffolding": "Antimetal Scaffolding", "block.antarchy.cornea_stalk": "Cornea Stalk", + "block.antarchy.corn_crop": "Corn Crop", "block.antarchy.dream_torch": "Dream Torch", "block.antarchy.dream_wall_torch": "Dream Wall Torch", "block.antarchy.dream_lantern": "Dream Lantern", @@ -131,11 +147,17 @@ "block.antarchy.bile": "Bile", "block.antarchy.ichor": "Ichor", "block.antarchy.antiwater": "Antiwater", + "block.antarchy.lumen": "Lumen", + "block.antarchy.lumen_froglight": "Lumen Froglight", + "block.antarchy.roseate_froglight": "Roseate Froglight", "entity.antarchy.apple_cow": "Apple Cow", "entity.antarchy.golden_apple_cow": "Golden Apple Cow", "entity.antarchy.enchanted_golden_apple_cow": "Enchanted Golden Apple Cow", "entity.antarchy.easter_bunny": "Easter Bunny", "entity.antarchy.glimmer": "Glimmer", + "entity.antarchy.ouranwood_deer": "Ouranwood Deer", + "entity.antarchy.elka": "Elka", + "entity.antarchy.dorrie": "Dorrie", "entity.antarchy.flying_squirrel": "Flying Squirrel", "entity.antarchy.caterpillar": "Caterpillar", "entity.antarchy.butterfly": "Butterfly", @@ -254,20 +276,23 @@ "item.antarchy.polished_antimetal": "Polished Antimetal", "item.antarchy.antimetal_scaffolding": "Antimetal Scaffolding", "item.antarchy.ouranwood_acorn": "Ouranwood Acorn", - "item.antarchy.ouranwood_vine": "Ouranwood Vine", "item.antarchy.ouranwood_boat": "Ouranwood Boat", "item.antarchy.ouranwood_chest_boat": "Ouranwood Chest Boat", - "item.antarchy.big_bush": "Big Bush", - "item.antarchy.big_bush.tooltip": "Can be bonemealed", - "item.antarchy.very_short_grass": "Very Short Grass", - "item.antarchy.very_tall_grass": "Very Tall Grass", + "item.antarchy.raw_venison": "Raw Venison", + "item.antarchy.cooked_venison": "Cooked Venison", + "item.antarchy.peach_sapling": "Peach Sapling", + "item.antarchy.peach": "Peach", + "item.antarchy.peach_sign": "Peach Sign", + "item.antarchy.peach_hanging_sign": "Peach Hanging Sign", + "item.antarchy.peach_boat": "Peach Boat", + "item.antarchy.peach_chest_boat": "Peach Chest Boat", "item.antarchy.orange_milkweed": "Orange Milkweed", "item.antarchy.pink_milkweed": "Pink Milkweed", "item.antarchy.hushweed": "Hushweed", "item.antarchy.umbral_moss_block": "Umbral Moss Block", "item.antarchy.umbral_moss_carpet": "Umbral Moss Carpet", - "item.antarchy.torchflower_bush": "Torchflower Bush", - "block.antarchy.torchflower_bush": "Torchflower Bush", + "item.antarchy.blush_moss_block": "Blush Moss Block", + "item.antarchy.blush_moss_carpet": "Blush Moss Carpet", "item.antarchy.mud_pie": "Mud Pie", "item.antarchy.duct_tape": "Duct Tape", "item.antarchy.duct_tape.tooltip": "Place down and right-click to repair tools", @@ -302,12 +327,21 @@ "item.antarchy.brutalfly_elytra": "Brutalfly Elytra", "tooltip.antarchy.brutalfly_elytra.flap": "While flying, hold %s to flap your wings", "item.antarchy.cornea_ear": "Ear of Cornea", + "item.antarchy.corn": "Corn", + "item.antarchy.corn_seeds": "Corn Seeds", + "item.antarchy.raw_corndog": "Raw Corndog", + "item.antarchy.cooked_corndog": "Cooked Corndog", + "item.antarchy.high_fructose_corn_syrup": "High Fructose Corn Syrup", + "jei.antarchy.americanize": "Americanize", + "item.antarchy.american_name": "American %s", + "item.antarchy.root_beer": "Root Beer", "item.antarchy.primordial_scute": "Primordial Scute", "item.antarchy.triffid_goo": "Triffid Goo", "item.antarchy.triffid_goo_block": "Triffid Goo Block", "tooltip.antarchy.triffid_goo_block": "At high velocity bounce up, otherwise sink through.", "item.antarchy.cloud_bucket": "Cloud Bucket", "tooltip.antarchy.cloud_bucket.midair": "Can be placed midair", + "item.antarchy.lumen_bucket": "Lumen Bucket", "item.antarchy.scorpion_whip": "Emperor Scorpion Whip", "tooltip.antarchy.scorpion_whip.lash": "Lashes prey from afar and embeds a venomous tether.", "tooltip.antarchy.scorpion_whip.reel": "Right-click to reel tethered prey.", @@ -343,6 +377,11 @@ "tooltip.antarchy.reverie_bottle.capture": "Right click a Reverie with a glass bottle to store it.", "tooltip.antarchy.reverie_bottle.release": "Right click to release the Reverie.", "item.antarchy.gravity_gun": "Gravity Gun", + "item.antarchy.miners_dream": "Miner's Dream", + "tooltip.antarchy.miners_dream.line1": "Right-click to carve a winding cave.", + "tooltip.antarchy.miners_dream.line2": "Leaves valuable blocks untouched.", + "message.antarchy.miners_dream_disabled": "The Miner's Dream is disabled.", + "message.antarchy.miners_dream_busy": "Your previous dream is still unfolding.", "item.antarchy.diamond_minecart": "The Diamond Minecart", "item.antarchy.cogwheel_pet": "Cogwheel Pet", "item.antarchy.fire_dragon_pet": "Fire Dragon Pet", @@ -358,6 +397,45 @@ "item.antarchy.dr_trayaurus_spawn_egg": "Dr. Trayaurus Spawn Egg", "item.antarchy.easter_bunny_spawn_egg": "Easter Bunny Spawn Egg", "item.antarchy.glimmer_spawn_egg": "Glimmer Spawn Egg", + "item.antarchy.ouranwood_deer_spawn_egg": "Ouranwood Deer Spawn Egg", + "item.antarchy.spirit_apple": "Spirit Apple", + "item.antarchy.elka_spawn_egg": "Elka Spawn Egg", + "item.antarchy.glimmer_bottle": "Bottle of Glimmer", + "item.antarchy.glimmer_bottle.contains": "Contains: %s", + "glimmer_variant.antarchy.apple_cow": "Apple Cow", + "glimmer_variant.antarchy.ouranwood_deer": "Ouranwood Deer", + "glimmer_variant.antarchy.frog": "Frog", + "glimmer_variant.antarchy.ant": "Ant", + "glimmer_variant.antarchy.elka": "Elka", + "entity.antarchy.glimmer.set_sit": "Glimmer set to sit.", + "entity.antarchy.glimmer.set_follow": "Glimmer set to follow.", + "entity.antarchy.glimmer.set_wander": "Glimmer set to wander.", + "entity.antarchy.glimmer.ability.ant": "Your Ant riles you up against the %s!", + "entity.antarchy.glimmer.ability.apple_cow": "Your Apple Cow moos and nourishes you!", + "entity.antarchy.glimmer.ability.elka": "Your Elka cries out and shatters the ward!", + "entity.antarchy.glimmer.ability.deer": "Your Ouranwood Deer charges through the enemy!", + "entity.antarchy.glimmer.ability.frog": "Your Frog devoured a %s!", + "item.antarchy.glimmer_bottle.passive.apple_cow": "Passive: Hunger drains 25% slower", + "item.antarchy.glimmer_bottle.ability.apple_cow": "Ability: Moos for a burst of Saturation and Regeneration when you're low on food", + "item.antarchy.glimmer_bottle.passive.ouranwood_deer": "Passive: Speed I", + "item.antarchy.glimmer_bottle.ability.ouranwood_deer": "Ability: Charges through hostile mobs when you sprint at them, knocking them flying", + "item.antarchy.glimmer_bottle.passive.frog": "Passive: Jump Boost I", + "item.antarchy.glimmer_bottle.ability.frog": "Ability: Devours a nearby hostile mob, growing bigger and stronger for a while", + "item.antarchy.glimmer_bottle.passive.ant": "Passive: Slightly further attack reach", + "item.antarchy.glimmer_bottle.ability.ant": "Ability: Landing a hit on a large enemy grants you a burst of Strength II", + "item.antarchy.glimmer_bottle.passive.elka": "Passive: Bloodglass Ward II", + "item.antarchy.glimmer_bottle.ability.elka": "Ability: Cries and shatters into a shockwave when one of your ward hearts breaks", + "advancements.antarchy.spirant_animal.title": "SpirANT Animal", + "advancements.antarchy.spirant_animal.description": "Tame an Ant Glimmer", + "advancements.antarchy.hoppy_together.title": "Hoppy Together", + "advancements.antarchy.hoppy_together.description": "Tame a Frog Glimmer", + "advancements.antarchy.deerly_beloved.title": "Deerly Beloved", + "advancements.antarchy.deerly_beloved.description": "Tame an Ouranwood Deer Glimmer", + "advancements.antarchy.elkcellent_choice.title": "ELKcellent Choice", + "advancements.antarchy.elkcellent_choice.description": "Tame an Elka Glimmer", + "advancements.antarchy.apple_of_my_eye.title": "Apple of my Eye", + "advancements.antarchy.apple_of_my_eye.description": "Tame an Apple Cow Glimmer", + "item.antarchy.dorrie_spawn_egg": "Dorrie Spawn Egg", "item.antarchy.flying_squirrel_spawn_egg": "Flying Squirrel Spawn Egg", "item.antarchy.caterpillar_spawn_egg": "Caterpillar Spawn Egg", "item.antarchy.butterfly_spawn_egg": "Butterfly Spawn Egg", @@ -383,6 +461,8 @@ "biome.antarchy.butterfly_fields": "Butterfly Fields", "biome.antarchy.torchflower_fields": "Torchflower Fields", "biome.antarchy.ouranwood_forest": "Ouranwood Forest", + "biome.antarchy.glimmering_pools": "Glimmering Pools", + "biome.antarchy.peach_forest": "Peach Forest", "biome.antarchy.fungal_ouranwood_forest": "Fungal Ouranwood Forest", "message.antarchy.brown_ant_activated": "The brown ant is ready to open its destination.", "message.antarchy.brown_ant_needs_reagent": "This brown ant needs a reagent before it can open its destination.", @@ -413,7 +493,6 @@ "effect.antarchy.paralyzed": "Paralyzed", "effect.antarchy.inverted": "Inverted", "effect.antarchy.stinky": "Stinky", - "effect.antarchy.glimmers_grace": "Glimmer's Grace", "effect.antarchy.shrinking": "Shrinking", "effect.antarchy.growth": "Growth", "effect.antarchy.bloodglass_ward": "Bloodglass Ward", @@ -723,6 +802,7 @@ "biome.antarchy.lucid_pools": "Lucid Pools", "biome.antarchy.dream_dunes": "Dream Dunes", "biome.antarchy.cloud_sea": "Cloud Sea", + "block.antarchy.wild_corn": "Wild Corn", "trim_material.antarchy.blood_crystal": "Blood Crystal", "trim_material.antarchy.nightmare_scale": "Nightmare Scale", "trim_material.antarchy.uranium": "Uranium", diff --git a/common/src/main/resources/assets/antarchy/models/block/big_bush_part.json b/common/src/main/resources/assets/antarchy/models/block/big_bush_part.json deleted file mode 100644 index 906b6240..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/big_bush_part.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "textures": { - "particle": "antarchy:block/big_bush/big_bush_stage3" - } -} diff --git a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage1.json b/common/src/main/resources/assets/antarchy/models/block/big_bush_stage1.json deleted file mode 100644 index dc28fa4f..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/tinted_cross", - "textures": { - "cross": "antarchy:block/big_bush/big_bush_stage1" - } -} diff --git a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage2.json b/common/src/main/resources/assets/antarchy/models/block/big_bush_stage2.json deleted file mode 100644 index 05dd9750..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage2.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "antarchy:block/big_bush/big_bush_stage2", - "cross": "antarchy:block/big_bush/big_bush_stage2" - }, - "elements": [ - { - "from": [1.6, 0, 16], - "to": [30.4, 32, 16], - "rotation": { "origin": [16, 16, 16], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "north": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 }, - "south": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 } - } - }, - { - "from": [16, 0, 1.6], - "to": [16, 32, 30.4], - "rotation": { "origin": [16, 16, 16], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "west": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 }, - "east": { "uv": [0, 0, 16, 16], "texture": "#cross", "tintindex": 0 } - } - } - ] -} diff --git a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_bottom.json b/common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_bottom.json deleted file mode 100644 index ac5a27de..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_bottom.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "antarchy:block/big_bush/big_bush_stage3", - "cross": "antarchy:block/big_bush/big_bush_stage3" - }, - "elements": [ - { - "from": [-13.6, 0, 8], - "to": [29.6, 32, 8], - "rotation": { "origin": [8, 16, 8], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "north": { "uv": [0, 5.3333, 16, 16], "texture": "#cross", "tintindex": 0 }, - "south": { "uv": [0, 5.3333, 16, 16], "texture": "#cross", "tintindex": 0 } - } - }, - { - "from": [8, 0, -13.6], - "to": [8, 32, 29.6], - "rotation": { "origin": [8, 16, 8], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "west": { "uv": [0, 5.3333, 16, 16], "texture": "#cross", "tintindex": 0 }, - "east": { "uv": [0, 5.3333, 16, 16], "texture": "#cross", "tintindex": 0 } - } - } - ] -} diff --git a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_top.json b/common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_top.json deleted file mode 100644 index fb49b817..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/big_bush_stage3_top.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "antarchy:block/big_bush/big_bush_stage3", - "cross": "antarchy:block/big_bush/big_bush_stage3" - }, - "elements": [ - { - "from": [-13.6, 0, 8], - "to": [29.6, 16, 8], - "rotation": { "origin": [8, 8, 8], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "north": { "uv": [0, 0, 16, 5.3333], "texture": "#cross", "tintindex": 0 }, - "south": { "uv": [0, 0, 16, 5.3333], "texture": "#cross", "tintindex": 0 } - } - }, - { - "from": [8, 0, -13.6], - "to": [8, 16, 29.6], - "rotation": { "origin": [8, 8, 8], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "west": { "uv": [0, 0, 16, 5.3333], "texture": "#cross", "tintindex": 0 }, - "east": { "uv": [0, 0, 16, 5.3333], "texture": "#cross", "tintindex": 0 } - } - } - ] -} diff --git a/common/src/main/resources/assets/antarchy/models/block/blush_moss_block.json b/common/src/main/resources/assets/antarchy/models/block/blush_moss_block.json new file mode 100644 index 00000000..df917fb8 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/blush_moss_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/blush_moss/blush_moss_block" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet.json b/common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet.json new file mode 100644 index 00000000..d5f159f3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "antarchy:block/blush_moss/blush_moss_carpet" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_small.json b/common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_small.json new file mode 100644 index 00000000..993f37b4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_small.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": true, + "textures": { + "particle": "#side", + "side": "antarchy:block/blush_moss/blush_moss_carpet" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 6, 0.1], + "shade": true, + "faces": { + "north": {"uv": [16, 0, 0, 6], "texture": "#side"}, + "south": {"uv": [0, 0, 16, 6], "texture": "#side"} + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_tall.json b/common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_tall.json new file mode 100644 index 00000000..533a670a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/blush_moss_carpet_side_tall.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": true, + "textures": { + "particle": "#side", + "side": "antarchy:block/blush_moss/blush_moss_carpet" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 16, 0.1], + "shade": true, + "faces": { + "north": {"uv": [16, 0, 0, 16], "texture": "#side"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#side"} + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/torchflower_bush_bottom.json b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_0.json similarity index 53% rename from common/src/main/resources/assets/antarchy/models/block/torchflower_bush_bottom.json rename to common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_0.json index b39440d2..7c935ae4 100644 --- a/common/src/main/resources/assets/antarchy/models/block/torchflower_bush_bottom.json +++ b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_0.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cross", "textures": { - "cross": "antarchy:block/torchflower_bush_bottom" + "cross": "antarchy:block/corn/corn_crop_stage_0" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine.json b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_1.json similarity index 52% rename from common/src/main/resources/assets/antarchy/models/block/ouranwood_vine.json rename to common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_1.json index dcfef446..c7a8fbfc 100644 --- a/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine.json +++ b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_1.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cross", "textures": { - "cross": "antarchy:block/ouranwood/ouranwood_vine" + "cross": "antarchy:block/corn/corn_crop_stage_1" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine_plant.json b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_bottom.json similarity index 50% rename from common/src/main/resources/assets/antarchy/models/block/ouranwood_vine_plant.json rename to common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_bottom.json index e5543ea7..cb9cdbd2 100644 --- a/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine_plant.json +++ b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_bottom.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cross", "textures": { - "cross": "antarchy:block/ouranwood/ouranwood_vine_plant" + "cross": "antarchy:block/corn/corn_crop_stage_2_bottom" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_top.json b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_top.json new file mode 100644 index 00000000..ada37860 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_2_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/corn/corn_crop_stage_2_top" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_bottom.json b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_bottom.json new file mode 100644 index 00000000..a2148ba9 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/corn/corn_crop_stage_3_bottom" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_top.json b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_top.json new file mode 100644 index 00000000..d38872f2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/corn_crop_stage_3_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/corn/corn_crop_stage_3_top" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/torchflower_bush_top.json b/common/src/main/resources/assets/antarchy/models/block/hanging_peach.json similarity index 54% rename from common/src/main/resources/assets/antarchy/models/block/torchflower_bush_top.json rename to common/src/main/resources/assets/antarchy/models/block/hanging_peach.json index f50f0a28..240e552a 100644 --- a/common/src/main/resources/assets/antarchy/models/block/torchflower_bush_top.json +++ b/common/src/main/resources/assets/antarchy/models/block/hanging_peach.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cross", "textures": { - "cross": "antarchy:block/torchflower_bush_top" + "cross": "antarchy:block/peach/peach_hanging" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/lumen_froglight.json b/common/src/main/resources/assets/antarchy/models/block/lumen_froglight.json new file mode 100644 index 00000000..14e41e27 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/lumen_froglight.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "antarchy:block/lumen_froglight_side", + "top": "antarchy:block/lumen_froglight_top", + "side": "antarchy:block/lumen_froglight_side" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/big_bush.json b/common/src/main/resources/assets/antarchy/models/block/peach_button.json similarity index 57% rename from common/src/main/resources/assets/antarchy/models/item/big_bush.json rename to common/src/main/resources/assets/antarchy/models/block/peach_button.json index 0b62849a..77f042f7 100644 --- a/common/src/main/resources/assets/antarchy/models/item/big_bush.json +++ b/common/src/main/resources/assets/antarchy/models/block/peach_button.json @@ -1,6 +1,7 @@ { - "parent": "minecraft:item/generated", + "parent": "minecraft:block/jungle_button", "textures": { - "layer0": "antarchy:block/big_bush/big_bush_stage1" + "texture": "antarchy:block/peach/peach_planks" } } + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_button_inventory.json b/common/src/main/resources/assets/antarchy/models/block/peach_button_inventory.json new file mode 100644 index 00000000..c2a473ed --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_button_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button_inventory", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_button_pressed.json b/common/src/main/resources/assets/antarchy/models/block/peach_button_pressed.json new file mode 100644 index 00000000..886dde0f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_button_pressed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button_pressed", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left.json new file mode 100644 index 00000000..6750e6ce --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left_open.json new file mode 100644 index 00000000..79bf6df4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left_open", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right.json new file mode 100644 index 00000000..ecc2ea76 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right_open.json new file mode 100644 index 00000000..1c9317d4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_door_bottom_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right_open", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_door_top_left.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_top_left.json new file mode 100644 index 00000000..77956de2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_door_top_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_left", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_door_top_left_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_top_left_open.json new file mode 100644 index 00000000..ad865d33 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_door_top_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_left_open", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_door_top_right.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_top_right.json new file mode 100644 index 00000000..3a5d342f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_door_top_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_right", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_door_top_right_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_door_top_right_open.json new file mode 100644 index 00000000..a3772f2c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_door_top_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_right_open", + "textures": { + "bottom": "antarchy:block/peach/peach_door_bottom", + "top": "antarchy:block/peach/peach_door_top" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate.json new file mode 100644 index 00000000..0e6d3ad5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_open.json new file mode 100644 index 00000000..7e9432ad --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_open", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall.json new file mode 100644 index 00000000..296b5a69 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall_open.json new file mode 100644 index 00000000..8bd8170c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_fence_gate_wall_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall_open", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_fence_inventory.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_inventory.json new file mode 100644 index 00000000..318d6270 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_fence_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_inventory", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_fence_post.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_post.json new file mode 100644 index 00000000..72b4d302 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_fence_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_post", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_fence_side.json b/common/src/main/resources/assets/antarchy/models/block/peach_fence_side.json new file mode 100644 index 00000000..9ee46975 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_fence_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_side", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_leaves.json b/common/src/main/resources/assets/antarchy/models/block/peach_leaves.json new file mode 100644 index 00000000..4b357a8e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_leaves.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/peach/peach_leaves" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_log.json b/common/src/main/resources/assets/antarchy/models/block/peach_log.json new file mode 100644 index 00000000..c20762cc --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_log.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_log", + "textures": { + "end": "antarchy:block/peach/peach_log_top", + "side": "antarchy:block/peach/peach_log" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_log_horizontal.json b/common/src/main/resources/assets/antarchy/models/block/peach_log_horizontal.json new file mode 100644 index 00000000..2d279990 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_log_horizontal.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_log_horizontal", + "textures": { + "end": "antarchy:block/peach/peach_log_top", + "side": "antarchy:block/peach/peach_log" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_planks.json b/common/src/main/resources/assets/antarchy/models/block/peach_planks.json new file mode 100644 index 00000000..db7c1f01 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_planks.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_pressure_plate.json b/common/src/main/resources/assets/antarchy/models/block/peach_pressure_plate.json new file mode 100644 index 00000000..fe224f3f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_pressure_plate.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_pressure_plate_down.json b/common/src/main/resources/assets/antarchy/models/block/peach_pressure_plate_down.json new file mode 100644 index 00000000..2af87b5f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_pressure_plate_down.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate_down", + "textures": { + "texture": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_sapling.json b/common/src/main/resources/assets/antarchy/models/block/peach_sapling.json new file mode 100644 index 00000000..11f97b6f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/peach/peach_sapling" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_slab.json b/common/src/main/resources/assets/antarchy/models/block/peach_slab.json new file mode 100644 index 00000000..81588d4d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_slab.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_slab", + "textures": { + "bottom": "antarchy:block/peach/peach_planks", + "side": "antarchy:block/peach/peach_planks", + "top": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_slab_top.json b/common/src/main/resources/assets/antarchy/models/block/peach_slab_top.json new file mode 100644 index 00000000..01ee38e4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_slab_top.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_slab_top", + "textures": { + "bottom": "antarchy:block/peach/peach_planks", + "side": "antarchy:block/peach/peach_planks", + "top": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_stairs.json b/common/src/main/resources/assets/antarchy/models/block/peach_stairs.json new file mode 100644 index 00000000..d4a28a68 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_stairs.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs", + "textures": { + "bottom": "antarchy:block/peach/peach_planks", + "side": "antarchy:block/peach/peach_planks", + "top": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_stairs_inner.json b/common/src/main/resources/assets/antarchy/models/block/peach_stairs_inner.json new file mode 100644 index 00000000..843cafd6 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_stairs_inner.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs_inner", + "textures": { + "bottom": "antarchy:block/peach/peach_planks", + "side": "antarchy:block/peach/peach_planks", + "top": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_stairs_outer.json b/common/src/main/resources/assets/antarchy/models/block/peach_stairs_outer.json new file mode 100644 index 00000000..545c33ba --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_stairs_outer.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs_outer", + "textures": { + "bottom": "antarchy:block/peach/peach_planks", + "side": "antarchy:block/peach/peach_planks", + "top": "antarchy:block/peach/peach_planks" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_bottom.json b/common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_bottom.json new file mode 100644 index 00000000..17f6d21a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_bottom", + "textures": { + "texture": "antarchy:block/peach/peach_trapdoor" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_open.json b/common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_open.json new file mode 100644 index 00000000..d29de2f6 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_open", + "textures": { + "texture": "antarchy:block/peach/peach_trapdoor" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_top.json b/common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_top.json new file mode 100644 index 00000000..822ea421 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_trapdoor_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_top", + "textures": { + "texture": "antarchy:block/peach/peach_trapdoor" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/peach_wood.json b/common/src/main/resources/assets/antarchy/models/block/peach_wood.json new file mode 100644 index 00000000..092ff7fc --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/peach_wood.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_wood", + "textures": { + "end": "antarchy:block/peach/peach_log", + "side": "antarchy:block/peach/peach_log" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/red_ant_nest.json b/common/src/main/resources/assets/antarchy/models/block/red_ant_nest.json index b8200917..178432bd 100644 --- a/common/src/main/resources/assets/antarchy/models/block/red_ant_nest.json +++ b/common/src/main/resources/assets/antarchy/models/block/red_ant_nest.json @@ -1,12 +1,12 @@ { "parent": "minecraft:block/cube", "textures": { - "particle": "minecraft:block/magma", + "particle": "antarchy:block/red_ant_nest/red_ant_nest_side", "down": "minecraft:block/magma", - "up": "antarchy:block/red_ant_nest_top", - "north": "minecraft:block/magma", - "south": "minecraft:block/magma", - "west": "minecraft:block/magma", - "east": "minecraft:block/magma" + "up": "antarchy:block/red_ant_nest/red_ant_nest_top", + "north": "antarchy:block/red_ant_nest/red_ant_nest_side", + "south": "antarchy:block/red_ant_nest/red_ant_nest_side", + "west": "antarchy:block/red_ant_nest/red_ant_nest_side", + "east": "antarchy:block/red_ant_nest/red_ant_nest_side" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/roseate_froglight.json b/common/src/main/resources/assets/antarchy/models/block/roseate_froglight.json new file mode 100644 index 00000000..116f3137 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/roseate_froglight.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "antarchy:block/roseate_froglight_side", + "top": "antarchy:block/roseate_froglight_top", + "side": "antarchy:block/roseate_froglight_side" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/stripped_peach_log.json b/common/src/main/resources/assets/antarchy/models/block/stripped_peach_log.json new file mode 100644 index 00000000..b0ade65e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/stripped_peach_log.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stripped_jungle_log", + "textures": { + "end": "antarchy:block/peach/stripped_peach_log_top", + "side": "antarchy:block/peach/stripped_peach_log" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/stripped_peach_log_horizontal.json b/common/src/main/resources/assets/antarchy/models/block/stripped_peach_log_horizontal.json new file mode 100644 index 00000000..98b68ebf --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/stripped_peach_log_horizontal.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stripped_jungle_log_horizontal", + "textures": { + "end": "antarchy:block/peach/stripped_peach_log_top", + "side": "antarchy:block/peach/stripped_peach_log" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/stripped_peach_wood.json b/common/src/main/resources/assets/antarchy/models/block/stripped_peach_wood.json new file mode 100644 index 00000000..03406fca --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/stripped_peach_wood.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stripped_jungle_wood", + "textures": { + "end": "antarchy:block/peach/stripped_peach_log", + "side": "antarchy:block/peach/stripped_peach_log" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_small.json b/common/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_small.json index e943626d..7ab3586f 100644 --- a/common/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_small.json +++ b/common/src/main/resources/assets/antarchy/models/block/umbral_moss_carpet_side_small.json @@ -1,6 +1,18 @@ { - "parent": "minecraft:block/mossy_carpet_side", + "ambientocclusion": true, "textures": { + "particle": "#side", "side": "antarchy:block/umbral_moss/umbral_moss_carpet_side_small" - } + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 6, 0.1], + "shade": true, + "faces": { + "north": {"uv": [16, 0, 0, 6], "texture": "#side"}, + "south": {"uv": [0, 0, 16, 6], "texture": "#side"} + } + } + ] } diff --git a/common/src/main/resources/assets/antarchy/models/block/very_short_grass.json b/common/src/main/resources/assets/antarchy/models/block/very_short_grass.json deleted file mode 100644 index c1f1d394..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/very_short_grass.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/tinted_cross", - "textures": { - "cross": "antarchy:block/very_short_grass" - } -} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_bottom.json b/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_bottom.json deleted file mode 100644 index c571f76e..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_bottom.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/tinted_cross", - "textures": { - "cross": "antarchy:block/very_tall_grass/very_tall_grass_bottom" - } -} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_middle.json b/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_middle.json deleted file mode 100644 index 5854e53a..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_middle.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/tinted_cross", - "textures": { - "cross": "antarchy:block/very_tall_grass/very_tall_grass_middle" - } -} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_top.json b/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_top.json deleted file mode 100644 index 44d2ee41..00000000 --- a/common/src/main/resources/assets/antarchy/models/block/very_tall_grass_top.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/tinted_cross", - "textures": { - "cross": "antarchy:block/very_tall_grass/very_tall_grass_top" - } -} diff --git a/common/src/main/resources/assets/antarchy/models/item/blush_moss_block.json b/common/src/main/resources/assets/antarchy/models/item/blush_moss_block.json new file mode 100644 index 00000000..2d078db7 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/blush_moss_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/blush_moss_block" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/blush_moss_carpet.json b/common/src/main/resources/assets/antarchy/models/item/blush_moss_carpet.json new file mode 100644 index 00000000..3a315ab2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/blush_moss_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/blush_moss_carpet" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/very_short_grass.json b/common/src/main/resources/assets/antarchy/models/item/cooked_corndog.json similarity index 57% rename from common/src/main/resources/assets/antarchy/models/item/very_short_grass.json rename to common/src/main/resources/assets/antarchy/models/item/cooked_corndog.json index 0929ced1..1cea5262 100644 --- a/common/src/main/resources/assets/antarchy/models/item/very_short_grass.json +++ b/common/src/main/resources/assets/antarchy/models/item/cooked_corndog.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:block/very_short_grass" + "layer0": "antarchy:item/cooked_corndog" } } diff --git a/common/src/main/resources/assets/antarchy/models/item/torchflower_bush.json b/common/src/main/resources/assets/antarchy/models/item/cooked_venison.json similarity index 55% rename from common/src/main/resources/assets/antarchy/models/item/torchflower_bush.json rename to common/src/main/resources/assets/antarchy/models/item/cooked_venison.json index ed844f3a..de553e83 100644 --- a/common/src/main/resources/assets/antarchy/models/item/torchflower_bush.json +++ b/common/src/main/resources/assets/antarchy/models/item/cooked_venison.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:block/torchflower_bush_top" + "layer0": "antarchy:item/cooked_venison" } } diff --git a/common/src/main/resources/assets/antarchy/models/item/ouranwood_vine.json b/common/src/main/resources/assets/antarchy/models/item/corn.json similarity index 53% rename from common/src/main/resources/assets/antarchy/models/item/ouranwood_vine.json rename to common/src/main/resources/assets/antarchy/models/item/corn.json index dbd3bb74..c8ff373d 100644 --- a/common/src/main/resources/assets/antarchy/models/item/ouranwood_vine.json +++ b/common/src/main/resources/assets/antarchy/models/item/corn.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:block/ouranwood/ouranwood_vine" + "layer0": "antarchy:item/corn" } } diff --git a/common/src/main/resources/assets/antarchy/models/item/corn_seeds.json b/common/src/main/resources/assets/antarchy/models/item/corn_seeds.json new file mode 100644 index 00000000..20bee2b7 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/corn_seeds.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/corn_seeds" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/elka_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/elka_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/elka_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/glimmer_bottle.json b/common/src/main/resources/assets/antarchy/models/item/glimmer_bottle.json new file mode 100644 index 00000000..eb725288 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/glimmer_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/glimmer_bottle" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/high_fructose_corn_syrup.json b/common/src/main/resources/assets/antarchy/models/item/high_fructose_corn_syrup.json new file mode 100644 index 00000000..b719b3f0 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/high_fructose_corn_syrup.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/high_fructose_corn_syrup" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/lumen_froglight.json b/common/src/main/resources/assets/antarchy/models/item/lumen_froglight.json new file mode 100644 index 00000000..6ba41b3b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/lumen_froglight.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/lumen_froglight" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/miners_dream.json b/common/src/main/resources/assets/antarchy/models/item/miners_dream.json new file mode 100644 index 00000000..c7a0f166 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/miners_dream.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/miners_dream" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/ouranwood_deer_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/ouranwood_deer_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/ouranwood_deer_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/peach.json b/common/src/main/resources/assets/antarchy/models/item/peach.json new file mode 100644 index 00000000..1f1914ef --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_boat.json b/common/src/main/resources/assets/antarchy/models/item/peach_boat.json new file mode 100644 index 00000000..ce8a29a3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_boat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach_boat" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_button.json b/common/src/main/resources/assets/antarchy/models/item/peach_button.json new file mode 100644 index 00000000..b6539669 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_button.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_button_inventory" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_chest_boat.json b/common/src/main/resources/assets/antarchy/models/item/peach_chest_boat.json new file mode 100644 index 00000000..4aa30319 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_chest_boat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach_chest_boat" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_door.json b/common/src/main/resources/assets/antarchy/models/item/peach_door.json new file mode 100644 index 00000000..7f6da626 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_door.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach_door_icon" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_fence.json b/common/src/main/resources/assets/antarchy/models/item/peach_fence.json new file mode 100644 index 00000000..38f63661 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_fence.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_fence_inventory" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_fence_gate.json b/common/src/main/resources/assets/antarchy/models/item/peach_fence_gate.json new file mode 100644 index 00000000..8601b7e8 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_fence_gate.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_fence_gate" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_hanging_sign.json b/common/src/main/resources/assets/antarchy/models/item/peach_hanging_sign.json new file mode 100644 index 00000000..adc4be1f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach_hanging_sign" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_leaves.json b/common/src/main/resources/assets/antarchy/models/item/peach_leaves.json new file mode 100644 index 00000000..bbadf8b9 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_leaves.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_leaves" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_log.json b/common/src/main/resources/assets/antarchy/models/item/peach_log.json new file mode 100644 index 00000000..cc668db3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_log" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_planks.json b/common/src/main/resources/assets/antarchy/models/item/peach_planks.json new file mode 100644 index 00000000..712b1147 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_planks.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_planks" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_pressure_plate.json b/common/src/main/resources/assets/antarchy/models/item/peach_pressure_plate.json new file mode 100644 index 00000000..0f392d10 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_pressure_plate.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_pressure_plate" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_sapling.json b/common/src/main/resources/assets/antarchy/models/item/peach_sapling.json new file mode 100644 index 00000000..1aeac284 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/peach/peach_sapling" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_sign.json b/common/src/main/resources/assets/antarchy/models/item/peach_sign.json new file mode 100644 index 00000000..977817ee --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/peach_sign" + } +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_slab.json b/common/src/main/resources/assets/antarchy/models/item/peach_slab.json new file mode 100644 index 00000000..69cec5cf --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_slab.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_slab" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_stairs.json b/common/src/main/resources/assets/antarchy/models/item/peach_stairs.json new file mode 100644 index 00000000..da2ce419 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_stairs.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_stairs" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_trapdoor.json b/common/src/main/resources/assets/antarchy/models/item/peach_trapdoor.json new file mode 100644 index 00000000..991cc7ab --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_trapdoor.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_trapdoor_bottom" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/peach_wood.json b/common/src/main/resources/assets/antarchy/models/item/peach_wood.json new file mode 100644 index 00000000..e4b6c7c0 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/peach_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/peach_wood" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/raw_corndog.json b/common/src/main/resources/assets/antarchy/models/item/raw_corndog.json new file mode 100644 index 00000000..837b733d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/raw_corndog.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/raw_corndog" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/raw_venison.json b/common/src/main/resources/assets/antarchy/models/item/raw_venison.json new file mode 100644 index 00000000..7d4db7cd --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/raw_venison.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/raw_venison" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/root_beer.json b/common/src/main/resources/assets/antarchy/models/item/root_beer.json new file mode 100644 index 00000000..f02e8fba --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/root_beer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/root_beer" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/roseate_froglight.json b/common/src/main/resources/assets/antarchy/models/item/roseate_froglight.json new file mode 100644 index 00000000..e9d680ab --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/roseate_froglight.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/roseate_froglight" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/spirit_apple.json b/common/src/main/resources/assets/antarchy/models/item/spirit_apple.json new file mode 100644 index 00000000..34602711 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/spirit_apple.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/spirit_apple" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/stripped_peach_log.json b/common/src/main/resources/assets/antarchy/models/item/stripped_peach_log.json new file mode 100644 index 00000000..5ab747f0 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/stripped_peach_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/stripped_peach_log" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/stripped_peach_wood.json b/common/src/main/resources/assets/antarchy/models/item/stripped_peach_wood.json new file mode 100644 index 00000000..908f1210 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/stripped_peach_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/stripped_peach_wood" +} + diff --git a/common/src/main/resources/assets/antarchy/models/item/very_tall_grass.json b/common/src/main/resources/assets/antarchy/models/item/very_tall_grass.json deleted file mode 100644 index 541bc2be..00000000 --- a/common/src/main/resources/assets/antarchy/models/item/very_tall_grass.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "antarchy:block/very_tall_grass/very_tall_grass_bottom" - } -} diff --git a/common/src/main/resources/assets/antarchy/particles/peach_leaves_particle.json b/common/src/main/resources/assets/antarchy/particles/peach_leaves_particle.json new file mode 100644 index 00000000..2c124f3e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/particles/peach_leaves_particle.json @@ -0,0 +1,16 @@ +{ + "textures": [ + "antarchy:peach/peach_0", + "antarchy:peach/peach_1", + "antarchy:peach/peach_2", + "antarchy:peach/peach_3", + "antarchy:peach/peach_4", + "antarchy:peach/peach_5", + "antarchy:peach/peach_6", + "antarchy:peach/peach_7", + "antarchy:peach/peach_8", + "antarchy:peach/peach_9", + "antarchy:peach/peach_10", + "antarchy:peach/peach_11" + ] +} diff --git a/common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage1.png b/common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage1.png deleted file mode 100644 index 21da10877c32c20b235e2b42443a66eb2c60e28c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)LQZY+HQ4~H`ovcBTAfZJvL3m5z(BN(j?%H2aYLGUy z!mV@&`~i}v;Lze=?jj9Bi{KJClo;g0M?|{a_)Z;ph+79P_dD-?_dDM??<%b|{VVjE z0P^%%T4T=@aypqxGA`Yec;6_X|CW$ML~;?ts^8aFLfDlg<=e8hzATCz#W?Rh^(Y(+ zGwu)iT9wS1$z)s{y^JVvoL~+LbUR(Hn7_=k6PF~| zi`PY!InQWZf|J4XfGZD&Lw3{dv{~4knHpSnq0xu>b%mkLtvTbsUVse4p!Q>%F{FeIPUWtm9Izx42LX0b)xYcKR>Zmluy7EL_(@zfY7H%l>;0P_CRauPqZPCS4vM>Q z03tr5PE*>q<70J@5y*kDfWd_zit!9`g`CE~FntgZVowGaJ&bZoz;+IV6#7RCuxzht zADocoJa`b~9e=_Z+7IdJ`;?SJk#Z_pd@sno4)h%+S{ADPw?k5xKA~Xb%i>C4dkon=aT}Kr|aoetkdW(Lpmb2N$0J O0000`6atC}QY;9q;-C|;4t#(F z1Ro&aKsuCC97+ZSA3zZF0Wz@8C3FzzK*2%-0S#5uU?`%_ZuyR`+nr;K(o&=w!u>gC z|E<0DJ~vSu$L>BQb+6vt{}w=Dv5?ejb!9cq=CZNgZ>(>`|2%+dt?K4K%zH<<>0FfV zPW$JcXFYCWaw1YdNPaedr+}inkdO@L-p@rc+|}9T-=8#2{B`Qxl&c@t-A-l4jlCK3 z!GH+w2=uQIC@dD@#%aSlCd2ws-BrF<{Et9*E`Bb$Qn}>cZEtUTz2%iWKD$uEPPyu$QXkdfM^4~1Ktp1qpos_GladY zv3F{6$_EGntg{9J3Yv1+Zi>PZkTt|12r|MbnOb-U2L~@}+@1DWBX*zAApin`AJzs* zwhSPf%X+AkQE|PPtYL^}9ElH`UpBqbFbMQRl(c4@Un>D5Q3is4_|>p?u4nN9=Q2*v z{0Izvf>#N`wNN4<0O_c;;6fRPmTVSYp+sQlAq1v(;s!!6*2dDOrKl|jO65}0LP+^* zImy%p2J|2lIzX2oRC6Jrpw*g9B~W`%Tfr8DrlBK*L^h!#TXw%jH6@3TDLZ^bGMg2{hZ-~QRnMFHpG?sMAq}1| zSe+BYE7OQ0(QPyh7 zcKxq2LhDvQhJ;BRG!hOlgfI?CRDUr(oP^?vZAWzu!%E$vDX5O}<+>VR8qtvuu!aS* z&B9JXvD>zvIAO`FlT)pUK0HytAnr-XW;t)wYT+cr3H4NPIM#usiDyqvos6=Na|9$F zjJzI++1&BC!(Cil_^5VkyRQ35x9jigcU#}K-09h=S74o=pht(`4-XGr?V#qJ4ZR$4 zN5@Al^CIKU&(7W6k3AQqBEP@!v*GW@-;Vn|aN!}01d>MOG9#YZECMP^-GdIBegVVm9tQjzE!zM9002ovPDHLkV1gu3 B2&@1A diff --git a/common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage3.png b/common/src/main/resources/assets/antarchy/textures/block/big_bush/big_bush_stage3.png deleted file mode 100644 index e4e92e5d0071faa96d9a19d452c6981c27a01e8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2486 zcmV;n2}$;eP)WkwQf}(p}X>LHANo!9_O#Q@d!DicKX@Z3C7X9WXJ9W-_A&P5sd+pOg8% zo;+Ws>5LbK_ujqt+hI$v+y=V6%4Zv_mXGf~__119Uiv#8C{A}PS=IP51tQ80u(j)U~xM(mKy2?<}$YY)dv2`-;(A80T3m6~oc5k4Bn5a_C4|mJs9D2Cjuy zCIE{{duaFcsnZb*&~o>8-J!p~zg!wC1u+N%8(KDmOmikQ&u%tt>q(!4EsPW*OR#p^ zs{$@vu zkFXbgSVVjMm!DL%z@58yY;&~S(b-||UmpB2vOwRjeTHuu4A3t1T?$wRS}~7S(d6+H z#|>hh>C!+cVxGD30}r!mt*Qmo&<2ZRer*C%FiWF<>5`?PyQkZ}5sGoXVOUl}FlZLP zu{eTLv9d06mM>p!LIP6{-Txhhz^IP|XkD8D1%7CZJ{tXK7)`>k#t{U;&^XMiVL50A zt`C@?JP`<=*tuh;Sr>YR;F>KUC%V{s(KG}TEbO%n!!RHy!MyKF(lYDeSA~%YLH)RV zW4d`_k_F=N7aWt2U>FUt8H@=UIHMp1EMNkreIK+4r9L1czq;naC4FL^y?9r`!zUDm zs|oEFUe0aqVlR|4%A3#z}jYhBn zT2@rCB-Yby%u6_rc~2w%P~_5B9>=ZtjA&@`Gp`KhCWTfLz^8CYDo6EU5c49C!k{3; zxPVI-v2J_-}e;xJMb z09_;iNh6MLuL0p*_)XHLAR^|ljxt%CBl~ctI02)bLlqV-S&5%Bnl<92SKI*u$LiCBaMg;N%TaWN@}f&u0T zLd+$SP$s~%99r0C4K%FvU>-$fE9*iJt&|1h&?~9QTFUxDO(XylabhHt)-bt_i-Lik zs_6wQ1SbsAj}_>HR&@|-`p8qQlI_~sWoz+7FdMIgYgv}PK@EyezbL;b&v3tN)I(pWloozWyeavn zPJVOJZUFowf6|gU6|?mnKjhPt0Cje*hn}V~TuF>3MU$Zs!iqT^)yRa(lBzo6p5T?K;&c@{5|M=a)AQ&VxfQXo^wHZVi1B13~Ki8-#?Lw&wP6(SFN1D}lr{ZLa?;`4)9XfJy7bL1 z>d49CjrCNCa^*kiOss>9qQX@7n>q&iaF}%86OU+CE>y1Br=st!2(3%4BzoP|MrUFl zMrB?f>f#4`9oBvLQ`}ac4mkcW{wnC(R<%U}gP3$KmkZCvpGD;ajj-oK9rXxi7anm^ z@Q5?wsBDa*f_3P?^Rw}1QRNB4iafd$tCc=8H)ElhMpSChU!uaQPGQn|(!pM)helPQ zaIIr$yz-1^)mrIGVDRAaZ#j#wPc<4j@pSyaUy~=LdGFlulHpa+XDR_j5i`0M!j%4!NjC|q zSAY}msv>pABN%wW>!DYhie7>PFCY~COG$@k08Qyc#isebfA4F2iOU=`p^!&|K{lN( zeId4Ywf%*C&6@-vf3Kf(_vvA!#o~9H_0kt&&`pAos#OGuAjF5H)<5ea@SE!|B>n$I zZ1#trTIlnY+dds&G{>JOuqb1^b3dwV|I+ok*M^))j6`sYU9bDhSr7dZcNrX~Q|OKV zbD8)T6Log{$QM8Ud2`2~aYk#Q_d-ZWkA1a&00M$MIfyo#CjbBd07*qoM6N<$g0e@u AoB#j- diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png index 2a99d09cf9fbf26bcf71d372d542d3d95e9ade50..fbade520c09779ab6ea2eca3e27be4b0f7136a0e 100644 GIT binary patch delta 1158 zcmV;11bO?q2aXAl7k@wq1^@s66MgrV000C-NklMT@qH3lUTtxL#-Q6?}tHd{+ih z=Q^L?!+E@37;#3IBb+(Em+$$W@9#Y4`90S%KJjjU(?=7n?SI%c)wjmBeKFbJyron3 z%-Pl-q7Ng+yu`r27e<~Nm^H(fMn~e_{6d|q9Vu~f-$WfJw*3C{eon>&BkvS|ySoUUPgh z%G&9vxViUXFn{I^uZ+go|2j1Y*cwtsy5Q3nuGIYkV1eA*SMJ97GdIH6?*FG2f+G6@ z*;^aOLd>1{`*p7X0B50c3~=bOSz}Z*qo{%K5|%G_Pv?5|WHQ+tO-37343d2PeJ?zK zvhD3sB?$sd0~X}0vnMYFqn3Po|NPmh#c%sS;RKV$Gk;)5vBpTw`XEv0l7$j5s6sYt zNo<_^xrd}ElmWTGK+Z29fv>%}-n2HGrc1n-LIxnY76g+`F0&^ZiDbrbS(^gHoDB(f zB!JW)Ln27iS%CO@Y8oQ@#8nW*z(y5?}I;j3&Ca&K76HR zdi9fTC6@WI_rciQRJa%botI<{b^Y)&xDO7Td&>J@<~m)CQPzxx?t_oFE`1+3nqCm- z*$@>HGfhzk#&ufT}q8Ymn@V3kB?`b2%p5p zxu1JTib5GUBQQ{QWCFcd2sE3fOT3su1|Yc>1d~lJvnLpdWX5pb&e_Gga#{C*rb8f^ zB^G_rbxF5K%wC zMt{YhG;(vCo&tpClH5KvbRX>Ac{Fx?ek3M7SpI$R;`@ug5B@#T4|eg)qxZqO@opuS zd8zwg^y=d8gE#I^g#n-b^z9lfh%4enZfMCS-cz^qn z@T~YaFdqs3>n%9}a`fJ^nnXP`E)w403$UMH)uXA&Csf?!KSHI59 z{}a{13&ykhI%^zefqCd3WqrGXMYp07*qoM6N<$f~#;dJOBUy delta 945 zcmV;i15W&o3AzW67k@Aa1^@s67+?BV000ATNklv|9-@sS!sof|jf{GMD&=%~b{$GZpbE_3jC&`?XNoLaDj;GJ-B6#)subtTA zXLS)IW_|H;a>uo!`t$Gon`w#x@BFL^*uT!Jf-j$|aE1-Wihtu{(Mi}X2h8aFdHqJ! z&niZh@EsE>jY=7D7}V@U>}A8-sYi zjVFPNhFT`|Leh(1x8Y+=Q-$eEtVC@zd39!KpBLh2?*ju?h2ZDf@)dli_4feEQ z1$$kAQh)WE(?Yg_)3pI?NkEdG10+cV*)|XfAc>u5Ps~1UR}jY~A@C#OM`&JvZy&Fp z(X)70^B{@LNUPYG=XD6l3ZPz~6F@PD#)3vpajY+{1IA+fEhvi2M>zz5Ts zO}0A$wj_a9!|MtdE7l9t67gjiJXLlAhCTyNDJH4uL{0)NipB3iQkF7T7%mABO&<|R zDoz9c{T>j3gvg#$TdLxV15UTV(5s*|K3j}P5-0NQ2R#QNT5V)qZ53!Cds({z8+Yy= z{(tdA9Jn|YTuwsQbCBMYDo8+Vg1~0pEq<_Z={to{M1|KUn|JTV(fvu-*Ky~ zd}8Ihv{WJy*uy5q?>UHLLy#zTdmAqW@RrxaaisxqN<2 zckit<&{a+C_FKAbx4yF9-^uRoh{uQe(%wZQxvNa|*Ww%mBme)U!)7xb-8YkSy{9*b z0FPf@(%f)8nk$vRY5U|{I`#EdBbTXiFj%QZv+7XSpHS7{j07=v)3sWHMWgu zU}<7ZDx7J&dH?tkm>sQ$E4WOh6whuRVh;cmFc`;9kcc^ccx)xE#JLm%7&+3+ss)xh z(y}MbYQ)1qN}ddLOXLnIA8ZFAzLJ zLYbA{ML9)z8%OSp*fP1`R-Cb!S)iyHc=xLD^Ev~=6(_KE0UQ5?(#Rs9%OgWv#sZ$H z55(iPA2Fc}q(OjLfszFoLynrdf1{eG!xh0#00030|7*@%$p8QV21!IgR09BKSx&@( S4b{m20000mAqW@RrxaaisxqN<2 zckit<&{a+C_FKAbx4yF9-^uRoh{uQe(%wZQxvNa|*Ww%mBme)U!)7xb-8YkSy{9*b z0FPf@(%f)8nk$vRY5U|{I`#EdBbTXiFj%QZv+7XSpHS7{j07=v)3sWHMWgu zU}<7ZDx7J&dH?tkm>sQ$E4WOh6whuRVh;cmFc`;9kcc^ccx)xE#JLm%7&+3+ss)xh z(y}MbYQ)1qN}ddLOXLnIA8ZFAzLJ zLYbA{ML9)z8%OSp*fP1`R-Cb!S)iyHc=xLD^Ev~=6(_KE0UQ5?(#Rs9%OgWv#sZ$H z55(iPA2Fc}q(OjLfszFoLynrdf1{eG!xh0#00030|7*@%$p8QV21!IgR09BKSx&@( S4b{m20000M<%Dnc!Gw^te_oKV7{ds!5V;{6VFq$AZ|7Bxf->kMmGF`#|2yFKJo#Yr7I)`z-BExb!ITc%e$wxrj O7(8A5T-G@yGywo0BRjwV literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_1.png b/common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9eb94b8cccdaa5106312fc6250ea50fabddf9904 GIT binary patch literal 301 zcmV+|0n+}7P)Px#=Sf6CR5*?0k*^MdP!z^LYy^~tp!x(Sz>4V>T0w-~&)4xfx6h zf<)%#_!DkC7GWxvE8VZ$a(}LmGx=x9hrlp3+HFqK^?ZZn>r_{aJJqQ14O1g0Sdd|A z9l(QoE3^r{OacH!l{+|33-JoyEp^4vlnj=y)8k%uQlVhCIZ5vlMU|1K1rFP54<1}0 zPYbl?Yf8p#779WylbW)B0bT~pcwItKW#JT04105O3?ihk00000NkvXXu0mjf%9nNq literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_bottom.png b/common/src/main/resources/assets/antarchy/textures/block/corn/corn_crop_stage_2_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..3635e3a34e7dd600aa782ad6d2ae11fe260468fa GIT binary patch literal 462 zcmV;<0WtoGP)Px$h)G02R5*=|Q!#78U=V$ubg|UbrWGMjgc3)Wu9=ELCpTAzK&Nh!9}ogvi*(5( zq)^FKNQ0OjXD8*1rONF3DNs5lwDIwaJdfVN-d)#~XeLy7oy(-<`o>7o1xXIOr1>@$tEU|Bn<<=FY(aCvCLY{C8;Vi{29Pduxtucz#ioEhYS+DZ|~F?e_Q5ABa9k sIiYdqK*xE3ISUF`p8h|Px$-bqA3R5*=&ld)^tP!NZIuM~=cGIgscUj zKfs7Cflh+Dqo&f;*^(}WlnO$NUkEl-)X0{F9b`ORhw>h>?DS0%yzkxJcXtehb8@;* z0Pu?ag!beCJ}qqUs~Eab1puVU6oDJDBD3@Z0EfpG)f+Vl=tdQ~Q31b-5x5a^Je!J- z$d8lLebS8z(&QHX-Vmy$Nci&N8llfuf&sui0jJ3nmlxL(7E#J@{%w!WzPzQS2l~As z0ykoz&spemHp}L4Je#Ty6{wmbqtVT4S}bNbcpBlu`sXdA1}cx8I(oV8#O7heUKyjy}<69@%lCv+jDqqk*X=M zcFZOCBRvNIw2#guCrc>yR)|cKTd0~MVcn>peRR&m!2MSuN<*a^6`XyJu(`E?$tXv+ z^UuTmyUYh}#8gc|zc)nabJlE`w7Inb0NA!3q1gg;J28_PG+QQhJ27)So2(sE?tmDq z0Uyh##rtbZa6Fre3pC5-caHK(2>>wQW6ZKS>W!L&#kiNZQFfu(G6{ebG#TYclPM;n m9FAwx_pdhy+=z*L;`{|WLknc*NA_p{0000Px$b4f%&R5*>5kv&L4Q547jF9Hc(4lkaDi;zWARI`)N91d-|1P#>?h#+m@<`U8( zHnsTnS2Ri=gAyc2_lEGELS-PRs8JC(ou>EjeQ0@?`*H67cmC%bz_!Z86lv8A+25yH zsuFiVv}%UR#ng0QL!ebNq$=^h#fJUS?4w!jF^70Gi*Yt~1EeZ(ODV!6NBL}&7JVXo z{s0))v7b;K|7YEVhRt5D55{%){BRWmz>J%Cb@N!by?a2X-9oYX490c*YXbH@ogijnf-mU^fwFnJLA);D@ z0AM%0Mmve+iQP9#2yV9ocF*AP%%j=RFerrx0D>!iBy-`h5K9x+4|+oV@g3fUIW*Y^ jB-sl|7IAu58f*U-N`%Qx5(42e00000NkvXXu0mjfLa@ZB literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/lumen_flow.png b/common/src/main/resources/assets/antarchy/textures/block/lumen_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe95180ddc03e73aa8214d1c6429c3493eeae2d GIT binary patch literal 27017 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/lumen_flow.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/lumen_flow.png.mcmeta new file mode 100644 index 00000000..3479f1d8 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/textures/block/lumen_flow.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 1, + "interpolate": true + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png b/common/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe95180ddc03e73aa8214d1c6429c3493eeae2d GIT binary patch literal 27017 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png.mcmeta new file mode 100644 index 00000000..cb44715a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/textures/block/lumen_flowing.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 5, + "interpolate": true + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/textures/block/lumen_froglight_side.png b/common/src/main/resources/assets/antarchy/textures/block/lumen_froglight_side.png new file mode 100644 index 0000000000000000000000000000000000000000..4a01510a27da79fec892137dfc86ca2aac48188f GIT binary patch literal 420 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�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 LNkvXXu0mjfskIeN diff --git a/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine_plant.png b/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine_plant.png deleted file mode 100644 index 75b6fa3077b32e02f29e38ef4f0ece0849b79eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 511 zcmVNXxT%9_gq+ExKM*2$f(yY+GYQsWj~;Q zR)3(6RkW%ITnItwLXy%z#gwOIFmbM&$7pxq%s6w-z4zSnbiQ0PKjBy{xCyn|{8FwP zSD%5e5V7l~nv@E%9}apdnetSo@vgePQ2Cy#t{&dBgG+)D1P|&X0mmyfIRnf9`241- zv3F{hFFM~HO|u+kA}|4o#kgdxT-~ngod8v=kix1_%|fGH8M`z|>985ERn}4+xZYHgh6iD!=rPL^M!yU|e8D z=^&zjXbtgulvQ`tmWJqP!HG(?O2f)grJfsd4_!!du(e`95>*fs)AEN`??_)HZ0FXb z1)C%`)DekHVXxrJhGj!xtcbcl?R(xpe1la(L{z{FDxSP;OLp6ZFclNg3l4rBUpv|c zqgR0ET?jB*1sJ}WG1AW2wrp${l7ORSl@xGhj0Dq#=otXp7j$61-;Xd60o1j@5R68` zM}@2$^X^GtNFps1jyDXyMhavbi#lMOJmWoD`2!NC7gMvpr|JLz002ovPDHLkV1jEv B*P{Rc diff --git a/common/src/main/resources/assets/antarchy/textures/block/pale_nyxite.png b/common/src/main/resources/assets/antarchy/textures/block/pale_nyxite.png index 387c9a6ac79541aa0efa5abd85679f05454ddcf9..2c6a2834b597ab18411010fff5ad87fa05a85a86 100644 GIT binary patch delta 382 zcmV-^0fGLh1DFGlBYyw^b5ch_0Itp)=>Px$Qb|NXR5*=olfiDnFc3svkrA=1gp?K) z!J&u#MKAr0{(KKTfT$WE5LtG_p*^5+ov15Cx$Jo7&DwWwukSy7jLeFH)nbDWEzZ`= zt0@5I%M~A5y5Lb?X&nI0)|k>d`WWeBWPjXJT89rUP?J|aB!54A(gn|~D3}!meT;O$ z1K>lO8k^H0O&&WlrFA%ao3=l0>0<<7wb-O40QK#@zHzorSSIK7!6nO|yAOcmPOfq> zfD!M!nkFa061z(I%l9{ cG5Z+#1$~<$l`15GYXATM07*qoM6N<$g6HtCQ~&?~ delta 400 zcmV;B0dM}81E~X$BYy#2Nkl{(CbvsWgqqJZr*0f)oQ3D{{32t%(WYv0)%VfTs5M z1|-OcSl;5`5&$H;`vlDDn^cLzC0IV6wh*TLDl9wiqOaMmHkj6f!7aVboX u%7p0_00960SSuxp00006NklPx%GD$>1R5*=&l22>YKp4hL(t2b|H zxh_jH4o;;?Unu}?TwbK*x_Ch}FgR6luuZ|*R)crzUud*;+3`BOe0Yz$c7fIUHyW*7 z*0vfHE8{fXU6vPT0nh+?p~~A>m_CEFBtaPbSJQ;RktT&WRP>cX69X36MQKR@9BJnJ z?Avl(RvK*}W#C7O;t0%gsSJQ&3A`XeH*^4kFu$jYX-VR6koMV~>%#<^5cEQYBTbSx;k1-_0!Ny80^QItEJ0r>{Agfa=(YFq@c?;l$RE^J zH|pG+pTdt6lXDBhNmzn79BSosN*Tn?fj2OCeC+~#r6`phG9G@UuuXv`ME;K)HHUfz z5I`$d#u){v2|+0>%wDlm-A?--HPMcm-`Ux7b4M?Tj`i+HlWzC$AN|Kc2Y|mhWdTuN Uy$fyt0000?P)Px%pGibPR5*=olR-!naTLaXVxkWPy`z2$%Ea5AUcFDc!@o9P$CgM zBwgkb%w^FIx@G_G4&zKN_%84N;PKw~ zegE%Cf0thgoY4GsE)_U0s-{&_A8r3a2B_w99Od@_kQD`h2G!0L)8fRkD3&dJUIkfE zII%2bMIoKbA}@Sir>~_ESy5P8S#_tkHU-W_5!AdyTEaG9RYMM3zCwd^M8&jdZ3^)8 z=dRsZ*d-DQlHT2OGr-*ayHxTyPAr>F-TL<*HIM;rJh_yNgn}e`W5!(jZ3AHV&7EW< z6vT7dS1j8DD0+D9CpFXn0cXG2&bA^^BQiQtdG&hSqdP$P>%fglZwrt7Vyr%Sc2Tix)lxVc?}pZf6Z4DFDSt*E zJKoTjK7NWG%pMOn2mG$NeBM(ns;5PRsu0w?ARsZn7?mVxK?o5AaNhCpkrbNW6zm~F3*3|r?Q3+L6~5NVjH*yIEj;Q~8_t;%zt?@0s%f#jvPvWrgjSV* Zj3zMM`#<|A00000NkvXXu0mjf4GKs?QBeQ@ literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_hanging.png b/common/src/main/resources/assets/antarchy/textures/block/peach/peach_hanging.png new file mode 100644 index 0000000000000000000000000000000000000000..cae2364ac80e9e4c43238931ac018d2c0705a43a GIT binary patch literal 364 zcmV-y0h9iTP)Px$BuPX;R5*=eV88<|@7nx-QCIVSd}{E5oeO7?uNekjoIior5GHhiuSJVdG_Y}U z;UH%MR=e?(u0@)!;RN zfq{YHZfnthVP0+qPC)^NCy$;od_OC|ps1k8z}*+ih|_>8K~4XK_yrlhtK4T$(otn# zU|?YQ`0yFrkVkv|F{mpjGf2(Ph3i8J14RWzhEwOyGFUmuLIk9g8Tc6(817xU%^)Ku z&7i!$7{kTzSbznb=2c;R?UM|A5u2a2Fu^?d|8U48jZy4E*v^ z48J~oV-V)$X1M?G5ov*VzBvBBumC^Azz-i840{*ijg65E0A8VDV^|KtlK=n!07*qo KM6N<$f(;7puApQ9 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_leaves.png b/common/src/main/resources/assets/antarchy/textures/block/peach/peach_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..f71691f473a04b7051cc6abd2099904ed1aebe0c GIT binary patch literal 593 zcmV-X0Px%2}wjjR5*=wQ$1_jP!v5^c!~!32}(d@knrHag_1a!3|$1pbMb0S&<`*e&8CCN zYz+DV#t3&Tp<@WVC6kCT0cXfy?4fA1tU>ebV6ITx^ezwGk9W>J?}&;p=G}e=&-EZ@ zo*m)LhXerCda_;t0Ge(C0Pwco!T^BQ)eX$)faDTO)gf_apTl!K0D!M&)VXZqkY}(| z9lo9ss~0UcWx0={ArC5z9qJvR=V4Rf(8qM`(YJdrfXYMb7KZA;<% z&n5cFf{HNanxLE%I#HBC8IZcz`|IZ~(57MlAZa?}89x5_MxupSTP!U8IJ3_|<1Q^b fx7<$_^c&wgQeh$0WXb>l002ovPDHLkV1f+_j(iC9 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_log.png b/common/src/main/resources/assets/antarchy/textures/block/peach/peach_log.png new file mode 100644 index 0000000000000000000000000000000000000000..519ec0fb0ac1231f068ea2ea286365c32079c7d1 GIT binary patch literal 399 zcmV;A0dW3_P)Px$M@d9MR5*=&Qn5~iKoET-6j$ud2P^{14{#rA=VxeVb!uX+u>fr}F?ZYvnwVHD z6n0pU*~|iQo0&{z-t4^hqUYP2k%*v`0s!>G0DfGPb=l{fLks}UImk#vKIb~uWKKkg z562^#)7dv4K3WtP3GysOVJ(O#0F=3N4zV20v()F!>5SduegVeAyg0hPx*P#uTb9sD zq3yb$fqws_ThiYf;tpLaw=is=D@s z=2<#%AQ|4>KLolK^7zqI0-(CR#i7|nE tJd_v{5E=cvJdM0bN+{nN2-p7rae@_4S}J$O00000NkvXXu0mjf4GJePx$?@2^KR5*==lg(-yF%*SAhat$4MjjUu>=;rnl2E$nrhS7xKcjIs^lHx;XsI_7_hFVi4DuEOucK{+?zI}5X(4) zuAio0UC&Zol48Kr6V~h16U==MhOn7>Qj}D+*8ha(Z-C9TK}eM$Dp?e?ceh!==|Qtu zUO>nb5lUwNdvIcZ>tMImI*+ky+mf*V#rQB-JMXEiwN%@V^YfR*<8b?7oQK{3y4!Y0 zpxSIUymPx$en~_@R5*=&lh01VKoEyNlMR$MP%ga?LpZ2ME_(Lj)A0HBUA7=j(lni!cINl>w`bLg!l*Evv9EB=Q=I42i0Em(pt29ozNd$G&HWIq@QJb27wf-6{D-mS_06|GVF4J)v8)m zE3`2nB~hT?ad9$*)ylu*q1Ae|G1UfjgwtJ!Jb!O!ZAEQ%cF$lXmyP;ij~HLy{HgI= z4-lilzdl$?S^2;&7Y%Iy7R}dmQZ-BIxwt!kHU>eG5}nZJSTuZ4*IiybKRtSl-Uk7L zu(q>X?+Ho)-EYMB_O9~4!T$!1eBiwja1nO7*socG30HJJ@i_;&mMolZ2dJNA{;-5T waJfT9;_dZi@AtqHj>kODJ(KV(xcCL~M-B7+v8u@c0000Px$$4Nv%R5*>bQ$1+gKotJ2V*-`r4ncv~5*ie!JEYA}LI(|{6hfEo88iz+@sOc} z45d>CFCt5ZBw#|f3=vvX3hopwl?TOO2g1qyQOP1%H17I36d!SAms04r+`W7Eeeb*X zIN*OHwO#sC{?@F+^XIQL=f3CeD@*8&iAXVEM4YdQpfj@8jV106gIUAjk`qB}j^lIPi!k9FijA-QyQj z>OpF|Bq=fu7Gl(@D_B1RBt=Fi3bCfIA}ey#Pj;DaIkef?W2GLbh6$cu0|v zz!Q$m&K~RXK6Fh-9C(6Uf^RuAS;x&b`IbX*;L*6*ra16sjJonzrguAm%wdx8U zZET=YfADv9Zz2vn`jK2vcK(r0_y6HD-FxzkU0w|E{rVcZror9Wo-6Vba;NK(5?1jc R00000NkvXXu0mjf4GIZv>=FO~ literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/peach/peach_trapdoor.png b/common/src/main/resources/assets/antarchy/textures/block/peach/peach_trapdoor.png new file mode 100644 index 0000000000000000000000000000000000000000..50cf8b956f490498f89af134c7c417442b75341a GIT binary patch literal 674 zcmV;T0$u%yP)Px%T1iAfR5*=YlTT|CQ5400Q=)0!kfceIU}ICoiXg2>7ve^67P@njg>fM+Tv?ES zpFnW!u0hmgcO@bT{Q#0s7fQh*R$bUso3v@kOj4URlMIAB7xSlycQf3_d1uZ&_dI2= zx-0?SZ|zgrsq$ntPWa*_+_E|*epLW)^kt`mBx(7*_== zAIkh+=O?28?0s7I`Wx4;dCGi#Re&ix*5YA*gdlZhK&@erO2nu&3|1c8 z?%E>^OG+hT6iaIwK(Vx@PYsaRUm6h$cmNGY{! zCS7u|?XF35GDa*IuobxGxbx=n1x-nR>x#q z6`tF}G98jdr@gvcuVXnIb4M5(HY^ql0Fce3OGAHuBc*(i&7@y1%+KLhZM8ljY!m&e z7%|Zu!68|cQZ8mQ>F2q8LDO4@BYpv+N!<8VVYNMAI+-LMjj*x#orU>1Lct)FohrNa zI!lkzG=FU36N2@x-|Qf{$%_R8yu5P@0KY1Dyl@4A5df^IFn;ysX{_Dtxl&q9gVebs zJ^g^bY0?{taws6Y)%DHO-Xrh{LC9f#x8ETijeylB6r7}Ookib2Bp!{RS9I=AC>$OA zB^;ixJ^1qMp&T~QIPUUlt1+_9TEjN^>E#3fd(9R&@8Tbp>MaunL;3yy0000Px$JV``BR5*=olRS8Ua7edl2CJ@mP}a|Bu1v&1i<|<)8NKdR{(+}YA*X`8mT1{ zB>AJXp#z|~Kjyws=ZAiz`M7=>zGeuL zAdUOQT#y)zLg}`;{?|Zd_yaz(>eoOA31@uE^mIVwD4k}vBB~ZYj6&r+XYYi>xYywR zn9)8^pM4RP!Ut_bXHpI>oU2ST(H&q#*(>_pA3`rFXiYvlYEbgm^s ip3TDZP}>3i0J+iDsC2bPx$l1W5CR5*==ld)>uFcgNrh73Z&wmc-?v~zVn~|e0qGi|I6{zRl_uU>Z$?2wiY)!0H)b*-sE!%aB*>o z(gtNTQ3A?nFb#;uo}B>@B>g=C8(<=RRq4> z-j&LjV-oR&pflG1{QU8q-F{D9HHjeO0mRoAVh|Vxlr~E|2r&q@yDEfB3r3e<46+E< zA2zMreEC{_+;JqZtp$_%Ta(zqZ Q0000*XNP)0vEN*jT9wBiBM6IXao|4o0b^} zB?K+pO9VwFSQLdmK_33+p^h`+=rGRbz!qE|U_1H7+MDq0iEcOc4<3tiv$JvW+O_bn=1a$iwsH6B)j3a$ zkH=jPbaD+pIWZA!_x6Xw*gG>9$ecdd>BPs+osPlT`6LE(w)4$SytemheDi-V;Px2ft-*0cqovG{?X6V@z1Y=XwvVWIU{hgcc;cP zGUozr`*tjLd_4?jfJ$@*(-;g!>}o^`z;<*v%rXQKRocpdg=w?%^C=#oh;-Y1y(k;v z^9u`cY;G;u-krSYq^Zeps7}jit)Crs#Jo-#G zkQD38_9Fp&;>wkDdxMV|>-B+{=zOHuP%P2x7x% zZ{}cF*C=8^zIv}4f;Vg>9w0J;0vkx~U$Z8x*g?J zrX1|9P?pu^jfgv*Iu}T!1PK5vRfGq3Js#g}S_lDjBs{%{pCWS7+rYHg|LG&4Mh;*6 z*~>2E;5!)p^84uHa}z0|>u|3?vQUm1KRmEDGdnyOWH-tR&NpN2Mp8r>V3RsymGkbC z{rq^G6Wd&a@I=k`VDiP8j8GsmK!E{kEn5N#B8w)9L#<34_N`S)5vG9)Y2@! zM(=?~#h@&ueN;4{I7b7aKuD3$qxnxduWmaOhHMB(NOsx)yA7nym59V=pBXSXkg6I* z=FCo1V0)xWQ;tm7nh2b0NYeqb5)Y9vyZm+#P&tT{*K9Cy5D8HU(=(u+jnLgiy(cXt|S5CATxHNS|df?F!_8L z0o7$)U?R%Sl_7V1#1>4(jc^=Y8G~B@P$Oq*S9ZPw-N;7}B#lu1=E;P?;DCs;bK-Gu zov?_l*;7O*aspyBBa*ICWLSb~9wh1~YI7x(5>SE7(lrB`jj{=XJX_gk{QaKi^Y;Nl zg9aiMkj*=}`GbE)zYmC-U!(WHr>r(YIuK16C1??fid4xk`7IF2!D9a}w)}md%L-_1 z&Vb@gRAu{S*nTGOG z#9~y6esJi|J%BSrT9`&MmZ5S4OA$Fpje{O1o*^}7($y38)m+N4Zx((Z*jRI>KiA||qIB;o-us0(3%Wd-cb(2e$5njY5qsHzbO#jWe{aBV&` zV8i1p8*4#ioFb~x0l{j>Mp=NwGt0_5A+ojGx&Z(H|Nr|TgyH}I00v1!K~w_(6vh?) Tk&Ad+00000NkvXXu0mjfo|$96 diff --git a/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png b/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_side.png new file mode 100644 index 0000000000000000000000000000000000000000..2307b61338e8b80730dce696fcc8e36413d8d603 GIT binary patch literal 1128 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 P00000NkvXXu0mjfqfvvH literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png.mcmeta new file mode 100644 index 00000000..1fd02729 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest/red_ant_nest_top.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 9 + } +} diff --git a/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest_top.png b/common/src/main/resources/assets/antarchy/textures/block/red_ant_nest_top.png deleted file mode 100644 index f14da6136ff8416256a2849a0c1cee4b8e9dfd14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmV-&0*(ENP)J^H9ebaa2Zs2d?OY!@c+1?|kQ+@1EygWisW7rbM~9zP|jXuCC0P zmGi;x(ERu?d}|-8ui)LYAkaYcMBDki_KuIm=hyv}n4@l0R@$0MCUx^(+VfZVlzO6z_1k$M(Gf&crVBsbGHsIMIhY8k$vpKo{7 z*|2*Nd>Kga?9hlHBm4K!tmelfIm*v%Zj#v8gG|yg6YPPXdlPEwip3p3TI3Fl!-3(1 zogN_tfNv>|tqqcpm9l9EEEtzB7EL^aLZoYVLU|v=JEfAA3kAbK_WIv}-UV~kW?##7 zx#kBsAzD~lYk>p-WF@$GdMb=PK8(^4*feEsy}rlaP$kAwd&| zK zj6rg@s!HtfgTYSLb1dhRcs@8h5%0_sF@c^0L_;>qVuqh5q)I>L4iVd)ZwnGi0to;x zr9wE|@l^dyC6R!M1dm>bZz2-JYy(D%fnSeAj|BXg4s8kv;6I4RCNF+IUcyA=Ie1q< zR6#rR_-(M-Dw~NSn?|Yv$3MfK7dZm}0RR7aF-?>J000I_L_t&o054xz*vg^-Z~y=R M07*qoM6N<$f@ba&fdBvi diff --git a/common/src/main/resources/assets/antarchy/textures/block/roseate_froglight_side.png b/common/src/main/resources/assets/antarchy/textures/block/roseate_froglight_side.png new file mode 100644 index 0000000000000000000000000000000000000000..699b9a0db36bde757dc82f188ab4c79c93d045d7 GIT binary patch literal 423 zcmV;Y0a*TtP)S$L%*W zyR+Z!UAaDfY(7uFBAT-wY%ZIoxpg=f*wOfBCwC3KWq)s^;Yb=D45Xt$a8QS8pNaF^ zEsYb8z2nJPTRR^rGz-(N%NT7CXct>)qaFBp!9!+>dhL`1Z zlD|c_5uTTU_O}~Qu!wh22+ol@kz9s9qloXxL}Ho~`}x%FZ8zu}(~$U{q=z$geqyht zznaK15Ohzw0fM9xE4|a&8+eUq;*uaf{^L)JI%wK%un^XY)l=t1=;UGY;lcA){(;x9 zlrTX+7op2s2p?GkEqM#KC>y#{Fp=*f9T^_{@>Z#E$RaK|uN8>K2+mAE!?NaF40f(O zKdh;mR;sSm&Is(JTs7{Iol1BGp{)W9) zs5+g|osX#%18h}gn~bZ|>AoC+1Tf?L4J-bz5vWebXD*Rn*mnfPXjEv}2(-`GdW~*s zPx%3rR#lR5*=&l21q!aTLctv&G;NvBWIX!M&s`Vz{yHL1>XcY>!@q2wI|pt$3>S zB6N~YfnH> z`@vZpt@g>$YM=c5_E0z%OLMcqzB(9}+SG(p2jjt6#819|Iz{bI<9(^JKc5Vl_>tbV zm5ui+q<3wl(>?q1NjX~WliJjTT&&)SC`178`%ROdZ-?8A3#np9B7mzG5nms!$dj+X zLWrq&<}!Vl03h=8d5~9H%~18FxmkHU^D<=KW<cSrmYKS8nj`&JLSN>(VwNob~97 zDy=4_ZBQCnluE0~apMH-qsPYmJpdBIvH3E?(o45{^!5HG|5#en@$hby^bU*J%NP&u&Aa+Pg4e

u-5}s@-lC~0 luNrf2?e;{VX&icN42Q&nSN0uQ%K>yXgQu&X%Q~loCIDPEVwnH{ diff --git a/common/src/main/resources/assets/antarchy/textures/block/very_short_grass.png b/common/src/main/resources/assets/antarchy/textures/block/very_short_grass.png deleted file mode 100644 index 2b9c84331ba9c48e85ae3688ad2ba80f16e054db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP;jTG zi(`mI@7q2@uEPdAuDSOYrf}_T=@&i!Qh>|1hH*0Yjqe{-y_Q{As$#Obi^Xi6=fa~U zs}Femnl{glogqwUQO0lnABGO!rMeitZv1zz@!Yz)M@~zc@9up3GU(MI%kBKk3{{6y z8O~gbI+Zy$+xPO3xHpdXBl&+>^vP@v;^JsTmE{(47(`E;#f!<0$uLff^z9SmI6IeD$$v#rMlhDSeGOYqOVGBy6Gr ziv%65Ki7IL&i{nOl3*)Tvsk__8xerR1d}bvHjW-fN~LQYv3Bfay5f$>(XnG4AH2LRqR1Z!P;=#}ke>n&$l=53M` zULxvn0}Sp4e-1!`dVa`T4Ln9TkU9QNgui|IKKY3_9|%QRbgsdL7zW{G{8xq=Hh4LN zU89a>34jghr*-`2zyLv`CgKoxFT`vu+7?&eJ(iIV^T002ovPDHLkV1n2i Bt6Ts8 diff --git a/common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_middle.png b/common/src/main/resources/assets/antarchy/textures/block/very_tall_grass/very_tall_grass_middle.png deleted file mode 100644 index 20d8e01d74921737abf309e67a97a30a69cc684f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmV-?0fYXDP)sG z!)Ms%`;nlkMG#Np0CTcPf@lz_;#asc?l%acL1Y)R`OHOx-R?K_dcUlax~{E?Jj)H? z8w&C)H>2Um`W$dRodaA9!%*$EyMU{71Tov-c@rU`<1&IkRc8&7MdFCK5+ahU=WqCh zqdh3&sbP)!Xuoh>2Cz?z`sm4cB7(b~%}+;5Ad*NvFo?!eAYYeNX~B=@qeX(EQm$R5 z*PC^t@|2qdrYFR6Is$y4g3IL+VQ8Y|YH2UgQ&aDVKa+3Nfl@zMf~u}mKkSQ_xe{L` aTHp^~#=bOtI@#U;0000 zi(`mIZ}N}-|LvWNlRwuB`0}MS7$&qmFv>Z*$~5BWOoO;@s)9nB7&nT`D{cJS>tuXIp)ET$pm$k|jPc zz4GDo

o|QBz{6RV>Bbl5g=`$(Ymi#N>+!!zNL&9SQ~iPu7Ys&vanX;8n2x z`s?d!mcz_P8D`Wc=EM~86>)B|5@B|D@Z;rU3A1LCg}Vh<5`Hq~F!VI%Sy?qm_RW!J Z(As&ZMo>uo9WWReJYD@<);T3K0RRnDeT@JB diff --git a/common/src/main/resources/assets/antarchy/textures/entity/boat/peach.png b/common/src/main/resources/assets/antarchy/textures/entity/boat/peach.png new file mode 100644 index 0000000000000000000000000000000000000000..8dabe8cecc00d56ce51110776ec0397f02fba40b GIT binary patch literal 3705 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/elka_baby.png b/common/src/main/resources/assets/antarchy/textures/entity/elka_baby.png new file mode 100644 index 0000000000000000000000000000000000000000..23c415a8ceeed3a73a2a0817a5c818ecbf6533a6 GIT binary patch literal 4027 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/frog/frog_elythia.png b/common/src/main/resources/assets/antarchy/textures/entity/frog/frog_elythia.png new file mode 100644 index 0000000000000000000000000000000000000000..f32b311ed802ac807eff4bb57e543b137834e618 GIT binary patch literal 1638 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 Ux9%;k_9FmCJ6GE`r~U5y2Z@smH2?qr literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_emissive.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/apple_cow_glimmer_emissive.png new file mode 100644 index 0000000000000000000000000000000000000000..d18c587d2306b3d6327a95d69ce126078f75a31b GIT binary patch literal 2772 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 CBr3uH literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer.png similarity index 100% rename from common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer.png rename to common/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer.png diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_emissive.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer_emissive.png similarity index 100% rename from common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_emissive.png rename to common/src/main/resources/assets/antarchy/textures/entity/glimmer/deer_glimmer_emissive.png diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer.png new file mode 100644 index 0000000000000000000000000000000000000000..0d83677c1cc43d505bdca9adf0152541062c1ed3 GIT binary patch literal 8440 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer_emmisive.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/elka_glimmer_emmisive.png new file mode 100644 index 0000000000000000000000000000000000000000..8bdbbeafb843cfebe5fa08c52da989780c016edf GIT binary patch literal 6307 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 dNkl&4VO} zgoXG6AqSBajG_ibq6eAmr^#z7o$j9M-N{VP&V4mvs+wUpij2Q!FMlwt zG zR79X@eCWC?0`~v<^N!N5_lF*2*ZxWZ+~Mx?i(h^_h1d43O;dDDVC?2U{}o`4n2T&K zAk(uQ8cG7v6J0sCZBpi;KA!rdbGbghy77JS$M44mdrg)E*dW+&ar;k3b8y?d;A@UL zVw^tYA+;p|u_2rM;^)2M>c5xDfI{Ea3Ysk+zD;&%MKp~sTUQeB%Y|1bDZV@V#za8M zw+rd!Q~y*p*UsiMg*QWLKNPtnpldTt8Ki?QzxtR;sq2Q&ZzVv0GUtJ#)em?P28_=N zN@?<$JHkTM3B3y!s&e(WVo0+gc%ONy>wWD^7wFh?Cta|j$%gE^XP7O5)qvkcpGDY| z1h}`|*B@=4nFK6u)7l_G*1(k}c!wX~Ht-F&3CwLB2%i{VR$CI#w74v%dVQILRKMzS zD*^Suq6*vuO1VD1s{K|1B4B~VAt-o#Q2yFgM=Jq>R`&G(Ll-zk29zZeQ(Ao|6xogdp2R5i} zLpsinKi$0X+v~4Px-hTxHr(gnRVEmLYnv9Jk8$?=pviVsbQ|#?ajM5DuN5G8zyv&C z$lCC0YU{!K8Vq%P^o>FE7unu*2nrf(Vjhnk=L5oE`-e}b=1n1RW56~YTZCK@AZSnt z0hKUo6Q|#PcY5W={ksC=Cmo}?t4zj1jgaAUxh4|!ggHBUu=Z)=Q^0OVX; ze1A9Bv^a6{WM%v7_3M?qETJO6;kI+|<7EH|Fl%G`@4PjES#~l0`R3Wl`Gd@ZiU|F( z+KPbKfS^Ht=YSCHVWFg(e31Z6V{JZ7w)4_JnEu($o87rVKW9w!=R=~Ptv~N6P1@vWX-R#E-SoMq^b^o^j00960KIpRF00006 dNklNZbdX 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 YfYrd0p2Ax=Am0Nx?ci!(XB(LQKMaL6xc~qF diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby_emissive.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/glimmer_baby_emissive.png deleted file mode 100644 index 4c406021797bac141e67c47febd1b01f96545ff7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4575 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 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer.png b/common/src/main/resources/assets/antarchy/textures/entity/glimmer/rabbit_glimmer.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba7dade3145724c716a1c38443032932ee68caf GIT binary patch literal 1247 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_stag.png b/common/src/main/resources/assets/antarchy/textures/entity/ouranwood_deer/deer_stag.png new file mode 100644 index 0000000000000000000000000000000000000000..651c3e49a0b3bc51f1285fc9a02f42be2d4c4477 GIT binary patch literal 4677 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 D9g|B^ literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/signs/hanging/peach.png b/common/src/main/resources/assets/antarchy/textures/entity/signs/hanging/peach.png new file mode 100644 index 0000000000000000000000000000000000000000..3c735251f0578adde3691a5d18448882cd36a538 GIT binary patch literal 1279 zcmVFe<=nz3+P^S=t zrNBd{{+vXJ{y;5g76omn;kxUZ%$T-VvMkA9$&8@$CcGfexDe_=u%H_1ZIy`)#YCd@}*3tYxRV`Wngt$H?%&DjNFz6*9<0Wa$rNl55LrycL0h4iPY+~obXMRo742v zg>-geA~_&fd+WN?ziJh?#7}XG%!-yj3RU#X#hGkz2-eI()1TP4N!4+7-T~;Y;x7O7 zchZ?ke>IWmVQ^?DCsm)VWg312ehx*)*H$Z32@eECD-s+CeX}2*rAFbo1UW-m#;xXLK~bhrCy;-$@ivSai=-2iMvSu(_hZK}eELH_`C(2(UpM z61y0&;pfoE_FxM*XtwF{y)sq5lK8M$qmwB19r-k^dHG=9uD6b+jr-s1yW`+H8J~@R z*Z1u&r~9@XdOyqb?0^Th@O$B-6A7%R)9ic!AAVxUz!so~W8>p}$A3DV_hjp2@zySM z*+-FUOcC%A=%Wxq*N*Zz_SK2L=(1w1+0MV0^o1^iq?;4_ZE7mfIiO~JE3f!!rJ5AX z-&zjOfzq}5_nKU^OGp9jY@t`YqR9$J!EHe4_~3gLg>Fd_T9eelb_XGjKc6U=9B?qr zKB4b5T6k_H+j`aMbP#Qq^g_0X;nVIA!>60Hke~#{_U%q)b2GbnVD9MQM$89jmP;KQ zzt^`9C;XAU59K&IGMMS%@Dn=|`rhLYW?wdbV9#E_b?*QptLZE!R=bo(U%b!tv!}*W z{rtH+6*l|f0~aRG=Q-c!c{5CXY!JTI?FC$&1k28D+A^B9KD;ZL;_#9)`eu|iI$wk; z>o;EWGdyj*e_NKtg80q%Zp-UrzMKllY|XxI)ly7)>R1Rxs;*8+x62OaE*phQxn5G8 z&y!-=dEF8)5Ofk1jesFVej~S8qVM zzb`B$Nl`rByl*DQo6E^&eLNjG-+)rM;rKGPoBs>fSy2krVaec8dNc}VX9IdzY`itP ziNclkonI0<8azFnm!RJO6s^k+fj$m}U&P!DKegaF|e5U z*rQvtP>{`oDn>`6U~hZfrsJnz)QvzRF6e)aw?;RS2O&j)q7<%Rd?bbsok2#C{P29l z0zdljWdr)qiD`}J(=8OHGn-2+ijZ*dD1^?WNcIz$xW&d>qnjumcy}!S>J!v2HQ?8o zpshTae;{O33bKMB$g{(xdH$8&i`9|{{R30 p|NpB^|GoeK00v1!K~w_(jQ~}BKq;XZ00000NkvXXu0mjf4GOzij$i-) literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/signs/peach.png b/common/src/main/resources/assets/antarchy/textures/entity/signs/peach.png new file mode 100644 index 0000000000000000000000000000000000000000..46c2e786135ed3b5ba6605b593f18402af9e2729 GIT binary patch literal 1292 zcmV+n1@roeP)> z-ET~56vo%Qap7q72&X3}bxw^O8j3*>LeNAa5+AoD68`{y198VC2@#37kRWmAAt#$+O?}uC<;ud%b%f*2qUo*md5=Q9T$XH0UjC-dQl3x1}i^P@IW5Ag!L>F<}19|om(_m1>F z?vbAUM`geVh=alR193j{y8PR{((~}?kD6*zuUGxW?tAvTgU>%sUQ_dG@l$sm5dtgE z6KZR37f@KSQb1?>LL0Fi9Sb@Ic+B&eV*}5{=eCVq%cOJB{PCI_Hc4UYMzcFsbqKJ0 z&9NF9XWq7OiGYI63mU7%rw4k8`f7NvH(*L@lZ+0J$k_YgcpUilA)XVX;?$;T0zBXS zKCi_m7S|kjE2D}@YYu-FtEo9-eQzwcQ9d=(AW)b_Xl!g+&bU5u6Zio+fP64zq$B_v zKRM3xG0Csyg9oSqs0Xm|*Q-emARoZB22xxCT1SiMm^}a+pmBT-e1NA2Ckg!I)#R&& z(YWb7(mXs6*VKK%bgm=*vYHL@Q}k}B!SosFe&(#dOyj1x$d`;`n?^N;Mwus3laJeRruCbic8=X@_b%7fIfMp9OPj8h|N=jhmR4!1=aZG zQ$53tb*=NHKd!0T7u^RY)YSY&`0yG*ZDsKrmyJh_1jV8`VN0-ij+ETXcf@ZjpD(#u=dN+avG$Ul4b z8L;sYt0ZJ?9!{S^oo(&C?0+S`825`s^RW+ zp2h+DLY5o%-fRz`S(*me1hE;jj?jJmhE#s{ITYbPa^hsx`xkoyI0Vr&CqkO$96;xO zF2K$zf**od1e&C2&H?y;i_f4n9UX!=2+=g>0Q|qhJ`k2{-kt+97q7^HIcqlN06xG% zWEr*xWVyk5y?qA&0RR8KhVD)P000I_L_t&o0K~@DjOhbaUjP6A07*qoM6N<$f(;6* C&3}CW literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/gui/hanging_signs/ouranwood.png b/common/src/main/resources/assets/antarchy/textures/gui/hanging_signs/ouranwood.png index 7903f08310565ff94bd87416e34a2a13fecdbfbd..030fada5337cfa7ce8a89e4ab8c588e017b1c9ad 100644 GIT binary patch literal 485 zcmVzI?E2!T=N8JP`>EJ3lb#YN}bCH6hle&qU;Nqm4gM+glqxcH8VAB`d zq{SiTcW@yV+QP%#bI;xLzvQ1fx5p3B_0e6lxwaLpuWV=zr#=koJFB}FII-6Fl6DZk^@cBg3^);xCkBvC(1S~6($yh|)yM&y>m@Jb z3Ix#&$QFw8gk%_!^QQE^$+>fQHk;M&gBnl+ihN9*K#`nCoyaf|9Sy*N8o2S=5Kge% zR$VMEN#2{)P1q6>dd*Y~XhyITEz$^hp;qG%dww)EAVDBv#uhff3+6Ox=p00}$4~=` zfFgqokkbgrt=9bs^p8d#ni`NGm@00000NkvXXu0mjf+1%O* literal 1086 zcmV-E1i|}>P)Px&_(?=TRA_`dt7_)6~3=-};ofyg{qIhpz&D z+WDSEtH?XA-=u$_wCwzXg>4n^RRA!?bDc7`zPXW^)afFTn|$G^9susb^Y~8`z6$VF zz)O`En9CagRGej6?LERU)Vv3O{0_j1yQB^7D3AVu(ng!63BZ2)F~BjN>s*%EM>yty zFbosVeO#wZ7=~j}2PoMkqCup2)$7;BWRnm>eHGw3W&O=$W=#I~W#O0uD$X*8g9!hL zqN6;Fyn&H7bo3czi5M?D5>A<4uvoN;bd<;Zf~DnbtDueaRq#~aWg@q=xg7(v+Is*T zjtm1>w2J)Q`WM$J6AdDayrDBeYFK!?fBnOXy9B_iFTR57d;x%wH;4uiKkxiN820(3 zIeagD<+FFc)Zd8)5jWrbF!sV8H{QO5kvI70>-R3SC*(ZU!^j&tdSYN0_H|^FscD)f zVHoO0CcNtPYnmg@G)r9YxBGDJTut(>xcWLF2sn;6u&i#9t)#_UO zVE4Ckd%L;55i@cez|Q@9m)gzGi)=@EtX9|JMXNZr&|Ke$>$OH)uQlS+K2onW;=8~8 zl94EjLoZVC3x^nRnj!UCBW|v5#7Ukw?|eizd;^?2O%yOahc{p_oNwbj?Al2031QC^gp%NzPgJgK0s0zE3rEI+M$ z+Q>>ux=tAq_W?|t-l9RI&-8KMrVE7D(GiP)rzxB(Ryxp`{R_gkx`Fuw50L0@@XT-L?n`z7-EDdEBAO^Yq-5V+i_@%07*qoM6N<$ Eg4VVjwEzGB diff --git a/common/src/main/resources/assets/antarchy/textures/gui/hanging_signs/peach.png b/common/src/main/resources/assets/antarchy/textures/gui/hanging_signs/peach.png new file mode 100644 index 0000000000000000000000000000000000000000..5e5d565ee5467b31b2c12d07c71c8da946169e81 GIT binary patch literal 480 zcmV<60U!Q}P)=bb+XdQfNVAWkIZ@u(szJEG{3V0g}U20y;XHHtLO!qW2O7`-L|!INK!j7#sVr0R@c=#00KZU#3nv)2t8P}S zQmRz+Cft$`hAmVB7{;&@tuhGsLrvol`~7$t0KuRV#w~1tKbX_d@HvQTKSKi$0V0bm zz!?N^)4sk(!XeDzX#fPnLRc_P1*R=8tq6S(ys{?000030|7ap1{{R3021!IgR09Br W8&ck98hI`N0000Px$TS-JgR5*>j(lJW{VI0Tt??r>rArf2{los7ki$%e6xI`@t5*$JAprtKnYv~0< zq%WYkF{;7IrD)M?I0!<@3X0&)I@EBuAb1+W!%EG`-}vx+e*B+55A-T0TXA`^6_>xy zm2Ppu6aeHd3#_KE1K0N-PFb2vm;%3$!!P7Wn1bd>Iu@iXO->pk=%X>pu0tfO1|=y= zlN}2h*of+!XETV6O>XZ>lwIe?y_P#@#*KKD8jH&-xGzua>>qM)^`QXtx0}F->UfnJ z6R|Pun-UQ<#Od)75BE-hTTYO&G&w&zLACB`GZ>)WF1%wzXS00`cA(1y|h;N&l8fSCdWqxII}$#hCe&PM*5oZ(%cYd zw#Vl7o-((dR%~UatDj2J)a35Ql$?$YN&q1QLWr&`0MoI-0QWp!FG`0{0QC$D00000 LNkvXXu0mjfk`uRB literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/cooked_venison.png b/common/src/main/resources/assets/antarchy/textures/item/cooked_venison.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a7a31f00ff75365478f465830ee1a0805b5d77 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}T0G|-oY%Q%hVIhm-qH6RFI~<&wtn7l6H*HX#>RWY hPx$rb$FWR5*>jlCeu0VHn1LR;lFh^t{l6vlzi#q3O^J4LBSQI*4P7{SWjnXb1(D z&eFk5Sxb=?N)1AxC0#m{HiJhHA{QVXT;`tf_7=Y78i z{`a^Wx^%LN{AS4A6- z;eOgepG=Z})#A~Mi{zJ9Nat*6m?~DWKx%e^?&(h^rZrkMfj*g}`1V6TdO#qZv!#_V zG2U%nf<5N|V_FM1hpym@F1PPSIjRXp#)k2n1C(ea0IzK=_IuF(#*?;>l`yIA2&Qgn z9MuF$G{XDBF-_ZM?V&0GD&;1R9~1@x0=)#4{a=9K_23=!>!VmJCKj;$u?oPmC%fS{ zc=>!;mcCawY5V9mMlnp4p5r(1gUxj>v@=6JI5u^YX0c6O90E|^J4DqY0mo2*FMD6{ i{Vti+H-BvAKc6$bKdb|Pt|CtW0000Px$DoI2^R5*>zQ87!yKp1@$>0pn8mZOPV@VLdn%(@iaGiu20;Noux{R?LCAKd65 zh*N?~U0f6bg`$H9HgdFDGIco@6DoJcwQo8e-}mml?*VIzEMYpALjO0n@z-*nbpdC9 zR0fSAR)MKnf`|~F$H9f)=wQ=EM#DvGwELjH=G!RCvgUIs^oN?`@LaVju72d{sV3CL z%l+lAfeNV%wBtBHafelrIs&0CSg(Vf{WHjz8o9af;dvZHgqW(O8R2>Ii1OzLm$i*p zZ?9v_)D}J`H;9G{!yy1b##CnsvtB(*n6^2yD#@5?m$mDhtF;zIfurcU-ZN@UWuW&4 zC+M>-DmP8F8Z~m^gY`O4)Wy^I0%)k!8ew#GtO+3~XYV)&Z|%ogD|`brD|h&nH&hG& O00007;r9 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png b/common/src/main/resources/assets/antarchy/textures/item/glimmer_bottle.png new file mode 100644 index 0000000000000000000000000000000000000000..f9c4da5c9d8121c6e9743f4a531906a7aec1fce3 GIT binary patch literal 414 zcmV;P0b%}$P)NRFRzUgpk zgdr%DoHpdld#_!jbANW0FU5hJ_|8C(aSVu&lg1ERH_wDQNHMYkz#<^w{VM^%-ARU! zQG3Pc^#x!fb+FD5$Uu#CZ!`b^0RR8Iw_+jy000I_L_t&o0EsAxA+|-f+W-In07*qo IM6N<$f)u&6od5s; literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/high_fructose_corn_syrup.png b/common/src/main/resources/assets/antarchy/textures/item/high_fructose_corn_syrup.png new file mode 100644 index 0000000000000000000000000000000000000000..1e0da1b2140e08763fc99150ba28971d260784c6 GIT binary patch literal 377 zcmV-<0fzpGP)Px$Gf6~2R5*>rlRZeoP!xqff2TsV6?7;V2So@D9XbiF;!ui{le>$9?n1#`aVxIw zDr6Eeh@%FIn3iG-K};~zCN$6*F+&{GK*^6ki)Xv<-Fwct=kegbF_d(vZm;{nzW$pneioDdwj_{iAUNTD#9nr3`@Gb;wofNoJ!VRXaYw=HZne*E9SR zqWoOu_v)(Q4yYcStFbP=9sWYpDxp+W!}Vt$OQZx50M9ZR%g*3gCXU`OQ&Pp&B znL$br@hlUj%Q$+2&g~_JB9qQ7hVlqKqt@=TF#e&IW($CxsmHDxa?pG*12sdD>6tqE z^Ba@GJcc4u)$HU9_)NUeT4t#r24{CSHI7H5f&F6%0E&BO{zN7l)Lq*`+FwunJAcAE XA(?hg43C%)00000NkvXXu0mjf$*824 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/kraken_tentacle.png b/common/src/main/resources/assets/antarchy/textures/item/kraken_tentacle.png new file mode 100644 index 0000000000000000000000000000000000000000..25ff588090909461c962cb641b7f609b59f58130 GIT binary patch literal 460 zcmV;-0WPx$hDk(0R5*>5lD|s=VHn3hR|i3;-Cz>S z8swBqM3Yifw8-V+k8{wvTLSAEj`#HR2>nhkchBehJkR%iB?5GHe&S4jd+S-=`SQ9d ziL)F8?rkgqkVr>(e)uAhjsOalVR2C%`i!MX_$awdSPk?1@Wo5_m!sseS6FHM@Yb_@ z-93XzSjaNmk&TYSOZS)j`wDlpyblJD1Z;F1-`D_!r%&pGC_o_WWe`@w&~e9B4U59l zC-)!U06f-%LC?TVS0Ry(pc)oux0{%)9*_0fzo2gdv2UgEgV}1#z?tLh%(a$FISD|n z5292W?zlJh0Z?QbmgAbA?)J$XXPt5>CrJQ@`l%CAV#uLgMs^c>XaW#YV#sj~x_#QO zW8>AeEtKtjMs{=j4z!f+h#vrKtb5(suSMTlqBf+&m5k|k6m*4JN_S#AN&iy@ z=1yN|p<*GCnLRWYGY}wvJv6zi<)yg{L@tvOtNsCU+^T7>fl4R<0000 C`_2&n literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/kraken_tooth.png b/common/src/main/resources/assets/antarchy/textures/item/kraken_tooth.png index 200ab73185a8734d84896a33d92b24e8b7d64df0..c1a119d32ae16925826bf4cfb8e5c1949cdf830f 100644 GIT binary patch delta 375 zcmV--0f_#Z1D^wsF@IS}L_t(Ijm?qGN&;aNh9AqY!f?PE%rqrIh@c(BZJ1t>A6cOSJ2ezm$xl#aM?g>EXdD1T*D;zcp5G!rUywfbRKXie6$neI{Owi1p zZ=o6{< VduFcy%P0T<002ovPDHLkV1iYMvxfix delta 370 zcmV-&0ge8j1DXSnF@ID^L_t(Ijm?qGN&-A{XTy z*uJF~kaGbo+t(#@2SJOVLL4{M5HT@{!@%(eEO67bFvXuC+SR){-}{~S`OXjgwOpNr zlFQn?jg!+0mt$f;p57uJOAv}gF?0$E2oXLN--kA@EnequH#zqmo@%&x!NpS*<3>s(WmoD|;5kuFy-rjbK^Rfk-Yc?M>znR)g^l&3y|c1QNGt$g$TF&4a11*FIuPOYBbzk<$Ke0b7o9?Y$-dXu QjsO4v07*qoM6N<$f^U(qcK`qY diff --git a/common/src/main/resources/assets/antarchy/textures/item/lumen_bucket.png b/common/src/main/resources/assets/antarchy/textures/item/lumen_bucket.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfd1f2a3b06af66c78ea38cad71fbe45f2ef9c1 GIT binary patch literal 388 zcmV-~0ek+5P)d^+vtZV@7SJMF7gOM3!X=!XO8fl521uh9Qz9nMTJV0Brfb4}vJdC=PL$zNrHM z1D@xxSmij5=nFvGw!-|&MgZ!%{&i*;29cQoP177z)%fSTt`i}>aa|WhQGi+9n*q9E zUc)?5=X4bSlJh)=3F-SDw$lj_05&uvj$;tUPv+HF=`pj^0e~ihHqkTn4FCZD|G`5h i-v9sr21!IgR09CA_K+cscz9U=0000NS%Li60G|+7qdIyEN zISXjRt$ER%KuW$O$S?RmUchixvJB*U&H|6fVg?3oVGw3ym^DWNC@4|l8c`CQpH@G`{S%?doM4-T<(-_TT0n*8x! zf94Ov$Z2cE&syFO<^GxdK%ZgD4YT9}KNqKI^zu4!Xs&ihQ`RzkIdfj9!sb***DbHq zSbL5-icZ|qyzzxuRQjWR&4twgOY$vxZZm1kl6qpX%T}VhD~`8_=b=G*RrUMdOF#N( i9{W-F>uz0bHDhmx$h0#rOFsc!#Ng@b=d#Wzp$P!~ait~z literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/peach.png b/common/src/main/resources/assets/antarchy/textures/item/peach.png new file mode 100644 index 0000000000000000000000000000000000000000..104920f7f331a07bec5f30b42e2ea07e9b605113 GIT binary patch literal 458 zcmV;*0X6=KP)3{55S2|vA*mVE5GbvU;SxnrQ$e&j6hTWZMN6w&P)jW>5@BQE&>uA<1_??M zrTvgu6i5cvg=o3?9yphKlpqMa@Sg8G-_LX33%3UUe5wP`=RyW$1S3Yd;a?rhcDuwd z7mI~=G_=^EEevXZ1}tAZX@ummk8pH#;Pv{hd{^8n9PCf{4Jl5zJ#9#zC$V<5f~B5L z;fi%B1;9n0*N5KzA)!?M0~?7TJ{@r^&P-!!WS|0K0_1X&yIsI*Jx&~i*D)Cgpw;OT zHTDQu^?OYxCV&$hVB|6*#oSuA*=%q$*0Uv~09g4dBi7aA0&dt`QW9?15s=I>i~Q zDgd&{VXI`lJpKRx0RR7r7)Z+i000I_L_t&o0B#VeAwm&f&;S4c07*qoM6N<$f-O0@ Aj{pDw literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/peach_boat.png b/common/src/main/resources/assets/antarchy/textures/item/peach_boat.png new file mode 100644 index 0000000000000000000000000000000000000000..320204cfea3034b470b40d6d1886cb5912bee6f6 GIT binary patch literal 482 zcmV<80UiE{P)Mv59TLM<(GvJfVp zFOH2PLD0Z^e&(F_Iq&&6mi+UZ09+sJ`RH_a+y4uD0)Q!3D9}lDf5#6?7Xr-~fRpDJ zGIHzGBsn`L%jukIDW4ZK6`NLQz%L^J=Fk3zJl5-K!d!8yf}E?0AmCw$g^`$;F(FKd z6eyEj6a*Z|Sc2b-Y+5O<(up09t2mt>uiY0qmBnOWM>Hy@Azc|Zmlx-H_fESroQXno z5NNapQO}o+%`N@SDXDZyBNLmuQ$QdyVrz}08`Zru3SiLhc|v63GB2#k zG(qX;IO3c+3NQ_3#*OzU;m*{8VjBo+NC6BCgcC`@NhE9CJPT_iHISH{kiOT$_VW^% zu@Mt#+;aWfI84VHG7vzndnY`BQ35s~AV$o?0ut0000030|L$z{R{#J221!IgR09Cq YfaM`nwP82_0000zQTF1&7{->uQ6=HRo zZ4*m(=4#zECPKI;q-|mK2Shs=>5V_$2GLZLi_!ToVv#2VA0BWS{Y2HLSHwLJU|&vd zo^{Iis=XU;vOT*>QxGQV9d#%vE9Dk6^8g9V<>~p+T&-JUu;KF|YFxmE(7^KE&Nd2* zi!s;QDmCU(CGWtg$FbBmoCIlKT*hQ@6aJ$Efs8dZVykBWm!S~w>{J{9Fft-~5`;NU zG_<~~Ai?_!fn}Osigii>7$ia%&v$oWw$q2a`~rb^vOVCmd@TEOYToe~$HD$F`$aZn zcVrl`n}`^~H`geus6+-_c!4fC8zK{Ur=}hLEk6=3ni*fe-pVucUBp}t1!0X605>*- zBXSC!#L2>^cVLZ^+K_aY8-^aC4GO@BjWltZz<$Uwn$xjH*${#PfphQ|NCHTcX&{JV voGL;R^#uR`|NkRL$Y=ln00v1!K~w_(v}+77>YVAq00000NkvXXu0mjfUw!h} literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/peach_door_icon.png b/common/src/main/resources/assets/antarchy/textures/item/peach_door_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a734788f1470ea39873b981b2a5aba90c1d51473 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Hh8)?hFJ6_ zCrD%*=s2@8Zr-PON8hOn)XqIA+F>Ua)1?+y)uA|Ty?Vdmv6k~{cioOgN`9}5E|C^Z ze;Cw!o#FKk^Ys%lC-Kf$_+uyAOtqT~AQi?U_SY4v8EtbuNEPh-S0`n3wn0^)@EFrJ zf#YJv7Q7V&ugwl0lg}yGXMbFujg8H$t;V*pjVoy{!^M^bpT9owgTe~DWQp%3jnIVUS|LR literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/peach_hanging_sign.png b/common/src/main/resources/assets/antarchy/textures/item/peach_hanging_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f0f03e5f4ee0f3c7de789e76bea785861c15df GIT binary patch literal 455 zcmV;&0XY7NP)-|P%vxaPC;Ov>1vvcm;dpAAu&z~AZXUB1LT8g(;*W#V^jd*i$S#zytXu32X=R`D`_S+{L$Qj+X9IJ z1rAIaU(yLZWOtxe59@VaSF{aWqc`kH&G%J+xfxB|1I==~0ayOL1p*lu5-*>ZsX{?h zczU*&#Aud}jE-rYM|%P?2U`UOuB6{Ynp@2VsiJM*w!qkoiqhNPC&ZW#TMf?K0;4f% ztI-sT8Jq3UXpBY!B_wQ literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/peach_sign.png b/common/src/main/resources/assets/antarchy/textures/item/peach_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..17d927dc457e3eb1f01329530bfe968f62b8bba6 GIT binary patch literal 425 zcmV;a0apHrP)@MN!g_25lB2rBp!qW@4uP%xMvZQ7J* zlPZOnS;(4AH3+sanfKU=1Mw>rJ@+HUNRPCT^^f+Va$siit(N_pvY*Z`OH$>#v9pCXU&_*)chbIeJ9`( zI&KGy$OGg!c3S7jU!TC}yot=%d002ovPDHLkV1f+_F0sI) literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/raw_corndog.png b/common/src/main/resources/assets/antarchy/textures/item/raw_corndog.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e5749ea2e77a61d9a88f5f7a7faada7499f08d GIT binary patch literal 423 zcmV;Y0a*TtP)Px$VM#TlFv#4Q51*2$%0JfYAH=>8U$suh&Hxp)7EuFkI=G5Fqgf6&?0&O zA0Vhr5J8{|Lxv>KRHmCq;YhX2+rk_Q%?9c$FZcWXIUM-oXih)oGMh@*bpV>pCOhdX z&9T7c(Y6ZA%;FaUfO@Thln?Brue5Qea5Ng__2mVx&xZ&E>2}`%82c@D9|rLHe3+(b z*BB{~%WSHZ)iwM=*pN{w0?=tcAsZGy?%*rjcQ#5zL?GCMKl_hN;1>d`(*eLVP2vlS zblOi8t_>Roa1C=0ha;f5@C!k`R$ z?+4(a3A70gmgXkV!}ByBP0r5>NNJJDRfg{C+hZyjQgPkQMe&*4jo#J$1P)9p8B&LP z%PJA`sBAXth_NfAk|DLVKF!IgNxAW+wOTDAkqA;sXDW%9MNS%G}T0G|-owR)b9GV5M6P2QvAc-J8KqMGM4X_H4$CGKoOeUipNRf~K+H3KQ` zk|4j}|8T(I<KW>pcVGK%2~-p3>Ealo5j^$WZJ`DQ4weh4PnG`tXEzVb`g(1jLiz;8$HIRY zuT(R)yyaZ5k0B&Do`JPx$zez+vR5*>bk}+sgQ51&1h^3_T5h$;Q+uFS4fxe{(C1@9yVkrd&CmmeG;X!qC zl_E}dGhzyz+#R$~Oe&hez9E(@u>n&N!5h=wyfhTTLq!~}Q?Chm1&8`icR2rd{&UWS z|D~|9p>@>OI%?~%vZ0TwOB`oDbN(U#QAc6ff~cba_}OWY&R#XXQ?Y=iq`kXM?d@|c zTNtBd3zBw*-bAP40D0wtf;$4*yW50K3BYn?h=~exiZw(%mAEmi`?q&k?LGEtmyenf90*OVQo`Orca}ac&lX>1%ffmnaV+;@%S@!`!-k4}e0c z48YFIr+NU;D`(sS;LT3mKmeSnG;kDi$l}~Ab*bX7a0Dr?_=&ny_|M+4ci1)N>;;dhn~w&@ zjs401{_3Xo9KrmIi#&+<)ChUK^`7F2pZF(0F9e7+pNRedNS%G|m0G|+7hM0VY@^*&Bs~LJ%Gu->nu=grMQ71!rXY&95@n60$w9H|soy3se zz>wd_klhH>)NeTDHINc03Gxg6j|vzbD91_y*AN9$JwrY7?rYyIfoe)UT^vI+f@Avv`3@U!I5QqMQOz#; zf7`Ed?Wc)_-#H;iF1zYHH6*9zmZ;|Eq-Jz=tKn|+SSGlbXrda}{;IpNRFznPx$vq?ljR5*>zlRr<}Kp2OgBY&9Vi4dtF)I-exLQ&K)OOW^ybS5)=jCM|!Ec8oM z3JW9hP=z7(a41bA*PU!JmD*~KA>7$ch}x=4f78A1>3#0r_jd>Xo5X5jvfoyE9jJ(t z=~MuWS}oNO)>>Yxyb5vNpDqJ$j^l=mK*>dk-q9X(>Hs)y$Y4=Y{h2f{u?F$x;D)4r zj7-2etdaULH$Nj9!osdXEVGw> znjjN6Ki&gS{h1VH-LvD(2~_&h*Li{HCq63Q35w4?+V_W)X$1G9asQq*;Ncox1eS6x!A5|v2ktC zwAJ}>X0e7{kMEal9lg%>+z_DPTH#TRS}oPxwv6q1xR4E6yLj{Kf&4ovw01I`is6q3 z>?-Ca-d$|g8Zvwg3J_j$tv{23rmecA+~A+v(U1?{zOQ|)t<{8v4IhJolfXvEZ#8Jz vDtXgZll`{3*xgZoP_kJUyF335`5Qd}GmP9Leh$F600000NkvXXu0mjfBS7k8 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VwVp1HAr*{0J-Y=R97J68V>2Ar zF|%s8Ge!mUarL+;P3D?n_9Ky`7t& diff --git a/common/src/main/resources/assets/antarchy/textures/mob_effect/glimmers_grace.png b/common/src/main/resources/assets/antarchy/textures/mob_effect/glimmers_grace.png deleted file mode 100644 index b0214de7a2e2ae7a1ba5a3d9fba0ad98105a361a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355 zcmV-p0i6DcP)q7Adk<7|#i6`&^p2Q1y0`XSjYJ!SC=)y_M(^?@)XC)4Nq*C?OTV3hN z>5sqv1>Ahx7rJ^G3bhWqcmjjOa!qC2szPjZw18E zFxio1W_H;IW3_fle@m@Ge6 zz|`vrBwCs`EybSz00960^(*CB00006NklPx%T1iAfR5*=wls`yYQ5431H+k(4I;6`hFCh>7gF=nfXhB;93oZ0tO4oMk?jY1r zrAv*Yg$!<0oHCVC+StK5RMaZiYBUs-f|8H~vLu5@hi7hwmwWr7$(i1L=icvp_q*RY zf_lu&4@-cFu`NN1SV)aX^BKNCTDHmnI0Hq=GRZIZgz5zF);vo`^uaY0{W0)g#n1zXXJB1 z%|u1uc$B#h*Wh>*r~Xd>j88=+z_TZ3JQ!MbGyd-8ik}|>Q2hG_fZv%NJ}(DcM#)50 ztZcMP#pHhHP^*UnVD-pgnCxZXp2c1f@Mqd~@}qH=e4S3DIyA-rY-xYxGEm&sT9z}Fx906e~PtD(rZ z%?|Rp5Y>wF-`Ps&F4MZCN36pl)?sOFR2Wv6h+QOj-Idv>RvaR>>j%RM6S5B*4y0B$ zFAH^k=oU3C^0}f5q+TFm7ja4jup$0-68zo7XPc;9H>7g9ngZI{sy!~!?=r0h^Lh33 zcE27M3hc&U<)%ZA${2J347QIrROu>agK1rW zg%O~Kt*eZJ^(aHT01IM<<*A`Dndyj`)&&?CT!`Ki=n?vC-wR-{dAKN0#m4qP$;7## z7cl()&cqU0z=-nv4*&rF|D!qaIRF3v21!IgR09C%s>vartHCn>0000=OG9&7*r literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_1.png b/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_1.png new file mode 100644 index 0000000000000000000000000000000000000000..961d31f0b8c7ec0e3a3975f1aee2325c90e45341 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~s-7;6Ar*{CNeoTvUAzC=d(ZhZ zpYsUAC&?eItP%%|6!^;Hb(DeX{{QcK_3Q$W!3NR*H0CRpzopr E0P@xk+OV;KG%)=C|DMI@Cy>Dg(!Ygr+Ar*{Cx86s5`0o{Pxt>iS zK}b}DDTs$hfl+O4X=zV_95XXW+yDPpe?>O}8Ehae%nYv^I78>WTJaPp!rcxAr*{CNeoT@b$9=3HW2P$ z_;j%2+|^5wM9S?22WQ%mvv4FO#r#m BAA|q^ literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_4.png b/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_4.png new file mode 100644 index 0000000000000000000000000000000000000000..62f51e915f4ef4361d2263d2dcdd0d594ed3941b GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~ik>cxAr*{CNeoTvUAzA`8whtW zd^*_i^6_u}1h(>c9c7@J|NrBsO~?Z>*g%Sz8I;0!UM}SJ<^+l`c)I$ztaD0e0swb6 B9LWFx literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_5.png b/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_5.png new file mode 100644 index 0000000000000000000000000000000000000000..fba2d3c6f7f4e01aa241d2409fca635ac071b2ae GIT binary patch literal 84 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~(w;7kAr-fh85-GBU;k@1n8A41 hXaBx`2@Onc3~iePf6eGVtPNDg;OXk;vd$@?2>>ml7w`Z8 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_6.png b/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_6.png new file mode 100644 index 0000000000000000000000000000000000000000..bb9a54654f7560c2e7dce0fae6b54e8b91f7a9ca GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~N}eu`Ar*{CzoNGMu;(ylU=$W; z7W8Q7+^s)N@W}5U|Cm8K{{N3JTbu}Fuz^%FGYI$byv$Cl3^tH*W(L*@o^}@V-_{^GPgg&ebxsLQ03Y=l A_W%F@ literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_8.png b/common/src/main/resources/assets/antarchy/textures/particle/peach/peach_8.png new file mode 100644 index 0000000000000000000000000000000000000000..e9085c2b31f32b0fe72ebe05fee37f63969db03c GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~N}eu`Ar*{CyM(TMk#CV~XyEKP z$f0sz$>w!^f=8P)Px&_(?=TRA_`dt7_)6~3=-};ofyg{qIhpz&D z+WDSEtH?XA-=u$_wCwzXg>4n^RRA!?bDc7`zPXW^)afFTn|$G^9susb^Y~8`z6$VF zz)O`En9CagRGej6?LERU)Vv3O{0_j1yQB^7D3AVu(ng!63BZ2)F~BjN>s*%EM>yty zFbosVeO#wZ7=~j}2PoMkqCup2)$7;BWRnm>eHGw3W&O=$W=#I~W#O0uD$X*8g9!hL zqN6;Fyn&H7bo3czi5M?D5>A<4uvoN;bd<;Zf~DnbtDueaRq#~aWg@q=xg7(v+Is*T zjtm1>w2J)Q`WM$J6AdDayrDBeYFK!?fBnOXy9B_iFTR57d;x%wH;4uiKkxiN820(3 zIeagD<+FFc)Zd8)5jWrbF!sV8H{QO5kvI70>-R3SC*(ZU!^j&tdSYN0_H|^FscD)f zVHoO0CcNtPYnmg@G)r9YxBGDJTut(>xcWLF2sn;6u&i#9t)#_UO zVE4Ckd%L;55i@cez|Q@9m)gzGi)=@EtX9|JMXNZr&|Ke$>$OH)uQlS+K2onW;=8~8 zl94EjLoZVC3x^nRnj!UCBW|v5#7Ukw?|eizd;^?2O%yOahc{p_oNwbj?Al2031QC^gp%NzPgJgK0s0zE3rEI+M$ z+Q>>ux=tAq_W?|t-l9RI&-8KMrVE7D(GiP)rzxB(Ryxp`{R_gkx`Fuw50L0@@XT-L?n`z7-EDdEBAO^Yq-5V+i_@%07*qoM6N<$ Eg4VVjwEzGB diff --git a/common/src/main/resources/assets/minecraft/textures/entity/signs/ouranwood.png b/common/src/main/resources/assets/minecraft/textures/entity/signs/ouranwood.png deleted file mode 100644 index b134ba8c26352682388744c96bb81286af569f87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 965 zcmV;$13LVPP)Px&e@R3^RA_-AbH-}SqGjb>yaX>KSy008GavX+%kbGjbh zobU5Qo4RhGv%iDZo%@pO`#cjrZzN~{FxP0x5Tj6a1}+c_GYU-#NqWx0&tsGJ^s8@A zwWnMTICN|nh7r-7VHj`*ZsZ14PphB}p2Y|7&uvcP=W@XJA6+@9*J}|CZ}dK$BE;WG zTT}U@)lPR0P_(S_R6Wyrd@UAb=>RG-P|DHo{$V7nNP}uAqj1d1kC(ADo4@+@)O*ScO-&w?>MUY) zT%FI#PvR!oq}x5uo^m;0<4dU1v^s9pX5bEnax8)XtXxJsf28qu5B5*SW-VgV^#))S z9b)9;^X8^}C#erOi=W#85AH2SwcHAS;u=rVeB%5B{^JJ^PidTLeO%X_{hd>}0116W z693Km>wFGSL+8-30VSN&L(p8j)@J1sFK&|(oobi(GO?xXDT$xU0i1K0Ow@+P8Mt`V zT9TWm_u_}o!@mfd=jj0u?*j;=y>@3i_qV|$eta&imsk6J#PUHFejdoa`R&X1W3}^| z_Ur1ZL4FN(e;%B=t?Pi&v*o*Eiy5dHW$3JoTTK&3Zh#{(f-eHR`|z#Mk)SOt%mM(a ztOCdN(B2BOE;*#=(5kG0s#V6`ZVx&O5ABNp10JC3^e=mV7Y^;~&K@jgz!e;-6dIO^ zBVphpb}xI67Yc2$aZ?`F7Xbjk7Xf?`Tnh=@&{-Ld8+K6*%S6L6<-y4zMTT~(Y2uIV z!50B+hr<JeVP$DckZgibKY=_G{P-PYQ zOLIkrwzM!S!+pR5)Qpqte;pz~qZ?0ZfGjrM-%M8tn&W!MeZc6r1dh;R^+-M_GBg0_ n9P}cUpvo%pqv${WquBThxRx4C3SoQX00000NkvXXu0mjfIPJll diff --git a/common/src/main/resources/data/antarchy/advancement/apple_of_my_eye.json b/common/src/main/resources/data/antarchy/advancement/apple_of_my_eye.json new file mode 100644 index 00000000..da282d0d --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/apple_of_my_eye.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "impossible": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.apple_of_my_eye.description" + }, + "frame": "task", + "icon": { + "count": 1, + "id": "antarchy:glimmer_bottle" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.apple_of_my_eye.title" + } + }, + "requirements": [ + [ + "impossible" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/deerly_beloved.json b/common/src/main/resources/data/antarchy/advancement/deerly_beloved.json new file mode 100644 index 00000000..f0c07944 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/deerly_beloved.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "impossible": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.deerly_beloved.description" + }, + "frame": "task", + "icon": { + "count": 1, + "id": "antarchy:glimmer_bottle" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.deerly_beloved.title" + } + }, + "requirements": [ + [ + "impossible" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/elkcellent_choice.json b/common/src/main/resources/data/antarchy/advancement/elkcellent_choice.json new file mode 100644 index 00000000..924d3655 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/elkcellent_choice.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "impossible": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.elkcellent_choice.description" + }, + "frame": "task", + "icon": { + "count": 1, + "id": "antarchy:glimmer_bottle" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.elkcellent_choice.title" + } + }, + "requirements": [ + [ + "impossible" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/hoppy_together.json b/common/src/main/resources/data/antarchy/advancement/hoppy_together.json new file mode 100644 index 00000000..db152869 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/hoppy_together.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "impossible": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.hoppy_together.description" + }, + "frame": "task", + "icon": { + "count": 1, + "id": "antarchy:glimmer_bottle" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.hoppy_together.title" + } + }, + "requirements": [ + [ + "impossible" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/spirant_animal.json b/common/src/main/resources/data/antarchy/advancement/spirant_animal.json new file mode 100644 index 00000000..87c986a6 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/spirant_animal.json @@ -0,0 +1,29 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "impossible": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.spirant_animal.description" + }, + "frame": "task", + "icon": { + "count": 1, + "id": "antarchy:glimmer_bottle" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.spirant_animal.title" + } + }, + "requirements": [ + [ + "impossible" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/dimension/elythia.json b/common/src/main/resources/data/antarchy/dimension/elythia.json index 551c88de..71c4dcb8 100644 --- a/common/src/main/resources/data/antarchy/dimension/elythia.json +++ b/common/src/main/resources/data/antarchy/dimension/elythia.json @@ -95,7 +95,7 @@ } }, { - "biome": "antarchy:ouranwood_forest", + "biome": "antarchy:peach_forest", "parameters": { "temperature": 0.67, "humidity": 0.93, @@ -106,6 +106,30 @@ "offset": 0.0 } }, + { + "biome": "antarchy:peach_forest", + "parameters": { + "temperature": 0.66, + "humidity": 0.89, + "continentalness": 0.54, + "erosion": 0.29, + "weirdness": -0.58, + "depth": 0.45, + "offset": 0.0 + } + }, + { + "biome": "antarchy:glimmering_pools", + "parameters": { + "temperature": 0.67, + "humidity": 0.95, + "continentalness": 0.54, + "erosion": 0.23, + "weirdness": -0.46, + "depth": 0.45, + "offset": 0.0 + } + }, { "biome": "antarchy:sparse_ouranwood_forest", "parameters": { @@ -118,18 +142,6 @@ "offset": 0.0 } }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.45, - "humidity": 0.85, - "continentalness": 0.55, - "erosion": -0.15, - "weirdness": -0.75, - "depth": 0.3, - "offset": 0.0 - } - }, { "biome": "antarchy:ouranwood_forest", "parameters": { @@ -166,30 +178,6 @@ "offset": 0.0 } }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.45, - "humidity": 0.85, - "continentalness": 0.55, - "erosion": -0.15, - "weirdness": -0.75, - "depth": 0.0, - "offset": 0.0 - } - }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.45, - "humidity": 0.85, - "continentalness": 0.75, - "erosion": 0.0, - "weirdness": 0.7, - "depth": 0.0, - "offset": 0.0 - } - }, { "biome": "antarchy:ouranwood_forest", "parameters": { @@ -310,18 +298,6 @@ "offset": 0.0 } }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.45, - "humidity": 0.85, - "continentalness": 0.55, - "erosion": -0.15, - "weirdness": -0.75, - "depth": 0.5, - "offset": 0.0 - } - }, { "biome": "antarchy:ouranwood_forest", "parameters": { @@ -346,18 +322,6 @@ "offset": 0.0 } }, - { - "biome": "antarchy:ouranwood_forest", - "parameters": { - "temperature": 0.50, - "humidity": 0.87, - "continentalness": 0.70, - "erosion": -0.05, - "weirdness": 0.0, - "depth": 0.85, - "offset": 0.0 - } - }, { "biome": "antarchy:butterfly_fields", "parameters": { diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_block.json b/common/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_block.json new file mode 100644 index 00000000..566101fa --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:blush_moss_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/moss_block" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_carpet.json b/common/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_carpet.json new file mode 100644 index 00000000..2c408c83 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/blush_moss_carpet.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "antarchy:blush_moss_carpet", + "condition": "minecraft:block_state_property", + "properties": { + "bottom": "true" + } + } + ], + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ], + "name": "antarchy:blush_moss_carpet" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/moss_carpet" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json b/common/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json new file mode 100644 index 00000000..90a0d86e --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/corn_crop.json @@ -0,0 +1,70 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "antarchy:corn_crop", + "properties": { + "half": "lower" + } + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:corn" + } + ] + }, + { + "rolls": 1.0, + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "antarchy:corn_crop", + "properties": { + "half": "lower", + "age": "3" + } + }, + { + "condition": "minecraft:random_chance", + "chance": 0.5 + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:corn" + } + ] + }, + { + "rolls": 1.0, + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "antarchy:corn_crop", + "properties": { + "half": "lower", + "age": "3" + } + }, + { + "condition": "minecraft:random_chance", + "chance": 0.5 + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:corn" + } + ] + } + ], + "random_sequence": "antarchy:blocks/corn_crop" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/hanging_peach.json b/common/src/main/resources/data/antarchy/loot_table/blocks/hanging_peach.json new file mode 100644 index 00000000..96e05f39 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/hanging_peach.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/hanging_peach" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_vine.json b/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_vine.json deleted file mode 100644 index 193598c4..00000000 --- a/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_vine.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": [ - "minecraft:shears" - ] - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "antarchy:ouranwood_vine" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "antarchy:blocks/ouranwood_vine" -} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_button.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_button.json new file mode 100644 index 00000000..74410c74 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_button.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_button" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_button" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_door.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_door.json new file mode 100644 index 00000000..c8b63c95 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_door.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "antarchy:peach_door", + "condition": "minecraft:block_state_property", + "properties": { + "half": "lower" + } + } + ], + "name": "antarchy:peach_door" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_door" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_fence.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_fence.json new file mode 100644 index 00000000..31c7edd6 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_fence.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_fence" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_fence" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_fence_gate.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_fence_gate.json new file mode 100644 index 00000000..fd509861 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_fence_gate.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_fence_gate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_fence_gate" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_hanging_sign.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_hanging_sign.json new file mode 100644 index 00000000..511868c3 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_hanging_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_hanging_sign" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_hanging_sign" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_leaves.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_leaves.json new file mode 100644 index 00000000..f1a2b349 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_leaves.json @@ -0,0 +1,138 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ] + } + ], + "name": "antarchy:peach_leaves" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "chances": [ + 0.025, + 0.027777778, + 0.03125, + 0.041666668, + 0.1 + ], + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune" + } + ], + "name": "antarchy:peach_sapling" + } + ] + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ] + } + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "chances": [ + 0.02, + 0.022222223, + 0.025, + 0.033333335, + 0.1 + ], + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune" + } + ], + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:stick" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/peach_leaves" +} + diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_log.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_log.json new file mode 100644 index 00000000..35a91254 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_log.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_log" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_log" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_planks.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_planks.json new file mode 100644 index 00000000..1bd313c7 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_planks.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_planks" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_planks" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_pressure_plate.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_pressure_plate.json new file mode 100644 index 00000000..7f9121ef --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_pressure_plate.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_pressure_plate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_pressure_plate" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_sapling.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_sapling.json new file mode 100644 index 00000000..7d35a420 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_sapling.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_sapling" + } + ] + } + ], + "random_sequence": "antarchy:blocks/peach_sapling" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_sign.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_sign.json new file mode 100644 index 00000000..610ea19d --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_sign" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_sign" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_slab.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_slab.json new file mode 100644 index 00000000..53e759d0 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "antarchy:peach_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "antarchy:peach_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_slab" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_stairs.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_stairs.json new file mode 100644 index 00000000..3f81f57e --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_stairs.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_stairs" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_stairs" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_trapdoor.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_trapdoor.json new file mode 100644 index 00000000..ee2c8580 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_trapdoor.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_trapdoor" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_trapdoor" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/peach_wood.json b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_wood.json new file mode 100644 index 00000000..f1787698 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/peach_wood.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:peach_wood" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/jungle_wood" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_log.json b/common/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_log.json new file mode 100644 index 00000000..514158bb --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_log.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:stripped_peach_log" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/stripped_jungle_log" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_wood.json b/common/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_wood.json new file mode 100644 index 00000000..91106444 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/stripped_peach_wood.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:stripped_peach_wood" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:blocks/stripped_jungle_wood" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/wild_corn.json b/common/src/main/resources/data/antarchy/loot_table/blocks/wild_corn.json new file mode 100644 index 00000000..46f29bdc --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/wild_corn.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "conditions": [ + { + "condition": "minecraft:block_state_property", + "block": "antarchy:wild_corn", + "properties": { + "half": "lower" + } + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:corn" + } + ] + } + ], + "random_sequence": "antarchy:blocks/wild_corn" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/ouranwood_deer.json b/common/src/main/resources/data/antarchy/loot_table/entities/ouranwood_deer.json new file mode 100644 index 00000000..5bd5aaec --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/entities/ouranwood_deer.json @@ -0,0 +1,75 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 2.0 + } + }, + { + "function": "minecraft:enchanted_count_increase", + "enchantment": "minecraft:looting", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 1.0 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:raw_venison", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + } + }, + { + "function": "minecraft:furnace_smelt", + "conditions": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "flags": { + "is_on_fire": true + } + } + } + ] + }, + { + "function": "minecraft:enchanted_count_increase", + "enchantment": "minecraft:looting", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 1.0 + } + } + ] + } + ] + } + ] +} diff --git a/common/src/main/resources/data/antarchy/recipe/americanize.json b/common/src/main/resources/data/antarchy/recipe/americanize.json new file mode 100644 index 00000000..ebddb8ef --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/americanize.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:americanize", + "category": "misc" +} diff --git a/common/src/main/resources/data/antarchy/recipe/blush_moss_carpet.json b/common/src/main/resources/data/antarchy/recipe/blush_moss_carpet.json new file mode 100644 index 00000000..0a73f660 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/blush_moss_carpet.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:blush_moss_block" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "count": 3, + "id": "antarchy:blush_moss_carpet" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smelting.json b/common/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smelting.json new file mode 100644 index 00000000..8e6950c1 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smelting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smelting", + "category": "food", + "cookingtime": 200, + "experience": 0.35, + "ingredient": { + "item": "antarchy:raw_corndog" + }, + "result": { + "id": "antarchy:cooked_corndog" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smoking.json b/common/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smoking.json new file mode 100644 index 00000000..b34b2896 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/cooked_corndog_from_smoking.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:smoking", + "category": "food", + "cookingtime": 100, + "experience": 0.35, + "ingredient": { + "item": "antarchy:raw_corndog" + }, + "result": { + "id": "antarchy:cooked_corndog" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/corn_seeds.json b/common/src/main/resources/data/antarchy/recipe/corn_seeds.json new file mode 100644 index 00000000..2afe7c63 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/corn_seeds.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:corn" + } + ], + "result": { + "count": 3, + "id": "antarchy:corn_seeds" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/miners_dream.json b/common/src/main/resources/data/antarchy/recipe/miners_dream.json new file mode 100644 index 00000000..b35b1c80 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/miners_dream.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "GGG", + "RDR", + "TTT" + ], + "key": { + "G": { "item": "antarchy:triffid_goo" }, + "R": { "item": "minecraft:redstone_block" }, + "D": { "item": "minecraft:diamond_pickaxe" }, + "T": { "item": "minecraft:tnt" } + }, + "result": { + "id": "antarchy:miners_dream", + "count": 1 + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_boat.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_boat.json new file mode 100644 index 00000000..9007e56b --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_boat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "# #", + "###" + ], + "result": { + "count": 1, + "id": "antarchy:peach_boat" + } +} + diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_button.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_button.json new file mode 100644 index 00000000..385fea05 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_button.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "redstone", + "group": "wooden_button", + "ingredients": [ + { + "item": "antarchy:peach_planks" + } + ], + "result": { + "count": 1, + "id": "antarchy:peach_button" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_chest_boat.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_chest_boat.json new file mode 100644 index 00000000..c865282a --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_chest_boat.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "equipment", + "ingredients": [ + { + "item": "antarchy:peach_boat" + }, + { + "item": "minecraft:chest" + } + ], + "result": { + "count": 1, + "id": "antarchy:peach_chest_boat" + } +} + diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_door.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_door.json new file mode 100644 index 00000000..d912173b --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_door.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "group": "wooden_door", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "##", + "##", + "##" + ], + "result": { + "count": 3, + "id": "antarchy:peach_door" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_fence.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_fence.json new file mode 100644 index 00000000..f86ace23 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_fence.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "wooden_fence", + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "W#W", + "W#W" + ], + "result": { + "count": 3, + "id": "antarchy:peach_fence" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_fence_gate.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_fence_gate.json new file mode 100644 index 00000000..7954228f --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_fence_gate.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "group": "wooden_fence_gate", + "key": { + "#": { + "item": "minecraft:stick" + }, + "W": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "#W#", + "#W#" + ], + "result": { + "count": 1, + "id": "antarchy:peach_fence_gate" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_hanging_sign.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_hanging_sign.json new file mode 100644 index 00000000..8fcc4847 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_hanging_sign.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "hanging_sign", + "key": { + "#": { + "item": "antarchy:stripped_peach_log" + }, + "X": { + "item": "minecraft:chain" + } + }, + "pattern": [ + "X X", + "###", + "###" + ], + "result": { + "count": 6, + "id": "antarchy:peach_hanging_sign" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_planks.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_planks.json new file mode 100644 index 00000000..d0892886 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_planks.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "group": "planks", + "ingredients": [ + { + "tag": "antarchy:peach_logs" + } + ], + "result": { + "count": 4, + "id": "antarchy:peach_planks" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_pressure_plate.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_pressure_plate.json new file mode 100644 index 00000000..09fb8352 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_pressure_plate.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "group": "wooden_pressure_plate", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "##" + ], + "result": { + "count": 1, + "id": "antarchy:peach_pressure_plate" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_sign.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_sign.json new file mode 100644 index 00000000..cc36aa0d --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_sign.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "wooden_sign", + "key": { + "#": { + "item": "antarchy:peach_planks" + }, + "X": { + "item": "minecraft:stick" + } + }, + "pattern": [ + "###", + "###", + " X " + ], + "result": { + "count": 3, + "id": "antarchy:peach_sign" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_slab.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_slab.json new file mode 100644 index 00000000..7cfe2b41 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_slab.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "wooden_slab", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "id": "antarchy:peach_slab" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_stairs.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_stairs.json new file mode 100644 index 00000000..84cad977 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_stairs.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "wooden_stairs", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "id": "antarchy:peach_stairs" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_trapdoor.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_trapdoor.json new file mode 100644 index 00000000..3332467d --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_trapdoor.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "group": "wooden_trapdoor", + "key": { + "#": { + "item": "antarchy:peach_planks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 2, + "id": "antarchy:peach_trapdoor" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/peach_wood.json b/common/src/main/resources/data/antarchy/recipe/peach/peach_wood.json new file mode 100644 index 00000000..5fd213ea --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/peach_wood.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "bark", + "key": { + "#": { + "item": "antarchy:peach_log" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 3, + "id": "antarchy:peach_wood" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/peach/stripped_peach_wood.json b/common/src/main/resources/data/antarchy/recipe/peach/stripped_peach_wood.json new file mode 100644 index 00000000..6c28a618 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/peach/stripped_peach_wood.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "bark", + "key": { + "#": { + "item": "antarchy:stripped_peach_log" + } + }, + "pattern": [ + "##", + "##" + ], + "result": { + "count": 3, + "id": "antarchy:stripped_peach_wood" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/raw_corndog.json b/common/src/main/resources/data/antarchy/recipe/raw_corndog.json new file mode 100644 index 00000000..6d5e09fb --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/raw_corndog.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "food", + "key": { + "#": { + "tag": "antarchy:corndog_meats" + }, + "C": { + "item": "antarchy:corn" + }, + "S": { + "item": "minecraft:stick" + } + }, + "pattern": [ + "CCC", + " # ", + " S " + ], + "result": { + "count": 1, + "id": "antarchy:raw_corndog" + } +} diff --git a/common/src/main/resources/data/antarchy/tags/block/blush_moss_replaceable.json b/common/src/main/resources/data/antarchy/tags/block/blush_moss_replaceable.json new file mode 100644 index 00000000..9ccd3add --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/blush_moss_replaceable.json @@ -0,0 +1,8 @@ +{ + "values": [ + "#minecraft:moss_replaceable", + "antarchy:nyxite", + "minecraft:blackstone", + "antarchy:blush_moss_block" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/block/miners_dream_carvable.json b/common/src/main/resources/data/antarchy/tags/block/miners_dream_carvable.json new file mode 100644 index 00000000..6f7d26ee --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/miners_dream_carvable.json @@ -0,0 +1,36 @@ +{ + "replace": false, + "values": [ + "#minecraft:base_stone_overworld", + "#minecraft:base_stone_nether", + "minecraft:stone", + "minecraft:deepslate", + "minecraft:granite", + "minecraft:diorite", + "minecraft:andesite", + "minecraft:tuff", + "minecraft:calcite", + "minecraft:netherrack", + "minecraft:blackstone", + "minecraft:basalt", + "minecraft:smooth_basalt", + "minecraft:end_stone", + "minecraft:dirt", + "minecraft:coarse_dirt", + "minecraft:rooted_dirt", + "minecraft:podzol", + "minecraft:mycelium", + "minecraft:gravel", + "minecraft:sand", + "minecraft:red_sand", + "minecraft:sandstone", + "minecraft:red_sandstone", + "minecraft:clay", + "minecraft:soul_sand", + "minecraft:soul_soil", + "antarchy:nyxite", + "antarchy:pale_nyxite", + "antarchy:dream_sand", + "antarchy:dream_sandstone" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/block/peach_logs.json b/common/src/main/resources/data/antarchy/tags/block/peach_logs.json new file mode 100644 index 00000000..5a1d9ec3 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/peach_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:peach_log", + "antarchy:peach_wood", + "antarchy:stripped_peach_log", + "antarchy:stripped_peach_wood" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/entity_type/basilisk_prey.json b/common/src/main/resources/data/antarchy/tags/entity_type/basilisk_prey.json index cca32e6b..9ab26ecf 100644 --- a/common/src/main/resources/data/antarchy/tags/entity_type/basilisk_prey.json +++ b/common/src/main/resources/data/antarchy/tags/entity_type/basilisk_prey.json @@ -7,6 +7,7 @@ "minecraft:sheep", "minecraft:cow", "minecraft:mooshroom", + "minecraft:frog", "antarchy:flying_squirrel", "antarchy:moleworm", "antarchy:red_ant", @@ -15,6 +16,7 @@ "antarchy:apple_cow", "antarchy:golden_apple_cow", "antarchy:enchanted_golden_apple_cow", - "antarchy:caterpillar" + "antarchy:caterpillar", + "antarchy:glimmer" ] } diff --git a/common/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json b/common/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json index b78de163..c3129700 100644 --- a/common/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json +++ b/common/src/main/resources/data/antarchy/tags/entity_type/dread_hallucination_mobs.json @@ -9,6 +9,9 @@ "minecraft:wither", "minecraft:creeper", "minecraft:skeleton", - "minecraft:spider" + "minecraft:spider", + "antarchy:toreterror", + "antarchy:creeping_horror", + "antarchy:lurking_terror" ] } diff --git a/common/src/main/resources/data/antarchy/tags/entity_type/frog_glimmer_no_eat.json b/common/src/main/resources/data/antarchy/tags/entity_type/frog_glimmer_no_eat.json new file mode 100644 index 00000000..abe11627 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/entity_type/frog_glimmer_no_eat.json @@ -0,0 +1,9 @@ +{ + "values": [ + "antarchy:kraken", + "antarchy:toreterror", + "antarchy:emperor_scorpion", + "antarchy:alpha_mantis", + "antarchy:brutalfly" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/fluids/lumen.json b/common/src/main/resources/data/antarchy/tags/fluids/lumen.json new file mode 100644 index 00000000..f44595c4 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/fluids/lumen.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:lumen", + "antarchy:flowing_lumen" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/corndog_meats.json b/common/src/main/resources/data/antarchy/tags/item/corndog_meats.json new file mode 100644 index 00000000..e7b7233e --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/corndog_meats.json @@ -0,0 +1,19 @@ +{ + "replace": false, + "values": [ + "minecraft:chicken", + "minecraft:porkchop", + { + "id": "c:foods/raw_meat", + "required": false + }, + { + "id": "c:foods/raw_chicken", + "required": false + }, + { + "id": "c:foods/raw_pork", + "required": false + } + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ant.json b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ant.json new file mode 100644 index 00000000..2bee141d --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ant.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:bread" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_apple_cow.json b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_apple_cow.json new file mode 100644 index 00000000..3fa00a6b --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_apple_cow.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:apple" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_elka.json b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_elka.json new file mode 100644 index 00000000..b11da3ed --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_elka.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:peach" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_frog.json b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_frog.json new file mode 100644 index 00000000..d9233809 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_frog.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:slime_ball" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ouranwood_deer.json b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ouranwood_deer.json new file mode 100644 index 00000000..f0885728 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/glimmer_augment_ouranwood_deer.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:glow_berries" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/hfcs_cannot_americanize.json b/common/src/main/resources/data/antarchy/tags/item/hfcs_cannot_americanize.json new file mode 100644 index 00000000..86dde3df --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/hfcs_cannot_americanize.json @@ -0,0 +1,3 @@ +{ + "values": [] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/glimmer_food.json b/common/src/main/resources/data/antarchy/tags/item/ouranwood_deer_food.json similarity index 100% rename from common/src/main/resources/data/antarchy/tags/item/glimmer_food.json rename to common/src/main/resources/data/antarchy/tags/item/ouranwood_deer_food.json diff --git a/common/src/main/resources/data/antarchy/tags/item/peach_logs.json b/common/src/main/resources/data/antarchy/tags/item/peach_logs.json new file mode 100644 index 00000000..5a1d9ec3 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/peach_logs.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "antarchy:peach_log", + "antarchy:peach_wood", + "antarchy:stripped_peach_log", + "antarchy:stripped_peach_wood" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/roots.json b/common/src/main/resources/data/antarchy/tags/item/roots.json new file mode 100644 index 00000000..149abdd0 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/roots.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:hanging_roots", + "minecraft:crimson_roots", + "minecraft:warped_roots" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/venison_foods.json b/common/src/main/resources/data/antarchy/tags/item/venison_foods.json new file mode 100644 index 00000000..43bb9bec --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/venison_foods.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:raw_venison", + "antarchy:cooked_venison" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/cloud_shark_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/cloud_shark_spawn_biomes.json index ce383501..6968700c 100644 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/cloud_shark_spawn_biomes.json +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/cloud_shark_spawn_biomes.json @@ -1,7 +1,6 @@ { "replace": false, "values": [ - "antarchy:ouranwood_forest", - "antarchy:elythia_meadow" + "antarchy:cloud_sea" ] } diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json index ff348954..6a681567 100644 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json @@ -5,6 +5,7 @@ "antarchy:torchflower_fields", "antarchy:butterfly_fields", "antarchy:ouranwood_forest", + "antarchy:peach_forest", "antarchy:sparse_ouranwood_forest" ] } diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/flying_squirrel_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/flying_squirrel_spawn_biomes.json index 893e9545..f0e41d94 100644 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/flying_squirrel_spawn_biomes.json +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/flying_squirrel_spawn_biomes.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_forest" + "antarchy:ouranwood_forest", + "antarchy:peach_forest" ] } diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/honeyed_apple_cow_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/honeyed_apple_cow_spawn_biomes.json deleted file mode 100644 index 8b04fba0..00000000 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/honeyed_apple_cow_spawn_biomes.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "#c:is_plains", - "#c:is_forest", - "#c:is_taiga", - "antarchy:ouranwood_forest", - "antarchy:elythia_meadow" - ] -} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json index 8e11611d..37c02378 100644 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json @@ -8,6 +8,8 @@ "antarchy:torchflower_fields", "antarchy:moleworm_caves", "antarchy:ouranwood_forest", + "antarchy:peach_forest", + "antarchy:glimmering_pools", "antarchy:sparse_ouranwood_forest", "antarchy:elythia_ocean", "antarchy:elythia_coral_spikes", diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/wild_corn_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/wild_corn_spawn_biomes.json new file mode 100644 index 00000000..44db277a --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/wild_corn_spawn_biomes.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "#c:is_plains", + "minecraft:plains", + "minecraft:sunflower_plains", + "minecraft:meadow", + { + "id": "#c:plains", + "required": false + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json index 52a9652b..ec8424ab 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json @@ -18,6 +18,10 @@ } }, "spawn_costs": { + "antarchy:mantis": { + "energy_budget": 0.1, + "charge": 18.0 + }, "antarchy:mantis": { "energy_budget": 0.1, "charge": 15.0 @@ -100,7 +104,7 @@ "weight": 16, "minCount": 1, "maxCount": 3 - }, + } ], "ambient": [ { diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json b/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json index 356f0ce0..c6c5746e 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json @@ -73,6 +73,12 @@ "spawners": { "monster": [], "creature": [ + { + "type": "minecraft:frog", + "weight": 3, + "minCount": 1, + "maxCount": 1 + }, { "type": "antarchy:caterpillar", "weight": 5, @@ -85,6 +91,12 @@ "minCount": 1, "maxCount": 2 }, + { + "type": "antarchy:ouranwood_deer", + "weight": 5, + "minCount": 1, + "maxCount": 2 + } ], "ambient": [ { diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json b/common/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json new file mode 100644 index 00000000..d7022a41 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/biome/glimmering_pools.json @@ -0,0 +1,94 @@ +{ + "has_precipitation": false, + "temperature": 0.76, + "downfall": 1.0, + "effects": { + "fog_color": 8084735, + "water_color": 5923435, + "water_fog_color": 3297596, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [ + "antarchy:lumen_pools", + "antarchy:lumen_streams", + "antarchy:lumen_lily_pads" + ], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_medium", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:ouranwood_trees_sparse", + "antarchy:elythia_forest_flora", + "antarchy:elythia_brown_ant_nests", + "antarchy:elythia_rainbow_ant_nests" + ], + [] + ], + "creature_spawn_probability": 0.16, + "spawners": { + "monster": [], + "creature": [ + { + "type": "antarchy:glimmer", + "weight": 36, + "minCount": 3, + "maxCount": 6 + } + ], + "ambient": [ + ], + "axolotls": [], + "underground_water_creature": [ + { + "type": "minecraft:glow_squid", + "weight": 14, + "minCount": 2, + "maxCount": 4 + } + ], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json b/common/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json index a9bc5c29..2c09276a 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json @@ -85,6 +85,12 @@ } ], "creature": [ + { + "type": "minecraft:frog", + "weight": 3, + "minCount": 1, + "maxCount": 1 + }, { "type": "antarchy:caterpillar", "weight": 6, @@ -97,6 +103,12 @@ "minCount": 1, "maxCount": 1 }, + { + "type": "antarchy:ouranwood_deer", + "weight": 6, + "minCount": 1, + "maxCount": 2 + } ], "ambient": [ ], diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json b/common/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json new file mode 100644 index 00000000..6cbf84be --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json @@ -0,0 +1,106 @@ +{ + "has_precipitation": false, + "temperature": 0.69, + "downfall": 0.97, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 16748737, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": { + }, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [ + "antarchy:peach_forest_ponds_large", + "antarchy:peach_forest_ponds_medium", + "antarchy:peach_forest_ponds_small" + ], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_medium", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:peach_forest_mossy_boulders", + "antarchy:blush_moss_patch", + "antarchy:peach_forest_petals", + "antarchy:peach_large_tree", + "antarchy:peach_tree", + "antarchy:peach_forest_flora", + "antarchy:elythia_rainbow_ant_nests" + ], + [] + ], + "creature_spawn_probability": 0.18, + "spawners": { + "monster": [ + ], + "creature": [ + { + "type": "antarchy:elka", + "weight": 15, + "minCount": 1, + "maxCount": 3 + }, + { + "type": "minecraft:frog", + "weight": 25, + "minCount": 3, + "maxCount": 6 + } + ], + "ambient": [ + { + "type": "antarchy:butterfly", + "weight": 7, + "minCount": 1, + "maxCount": 2 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [ + ], + "water_ambient": [ + ], + "misc": [] + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json b/common/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json index 6f0ff98e..3b97d701 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/sparse_ouranwood_forest.json @@ -107,6 +107,12 @@ "minCount": 1, "maxCount": 2 }, + { + "type": "antarchy:ouranwood_deer", + "weight": 4, + "minCount": 1, + "maxCount": 1 + } ], "ambient": [ { diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch.json new file mode 100644 index 00000000..1c3ecfe4 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:vegetation_patch", + "config": { + "depth": 1, + "extra_bottom_block_chance": 0.0, + "extra_edge_column_chance": 0.3, + "ground_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:blush_moss_block" + } + }, + "replaceable": "#antarchy:blush_moss_replaceable", + "surface": "floor", + "vegetation_chance": 0.8, + "vegetation_feature": { + "feature": "antarchy:blush_moss_vegetation", + "placement": [] + }, + "vertical_range": 5, + "xz_radius": { + "type": "minecraft:uniform", + "max_inclusive": 7, + "min_inclusive": 4 + } + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch_bonemeal.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch_bonemeal.json new file mode 100644 index 00000000..1c3ecfe4 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_patch_bonemeal.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:vegetation_patch", + "config": { + "depth": 1, + "extra_bottom_block_chance": 0.0, + "extra_edge_column_chance": 0.3, + "ground_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:blush_moss_block" + } + }, + "replaceable": "#antarchy:blush_moss_replaceable", + "surface": "floor", + "vegetation_chance": 0.8, + "vegetation_feature": { + "feature": "antarchy:blush_moss_vegetation", + "placement": [] + }, + "vertical_range": 5, + "xz_radius": { + "type": "minecraft:uniform", + "max_inclusive": 7, + "min_inclusive": 4 + } + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_vegetation.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_vegetation.json new file mode 100644 index 00000000..bcf78e9a --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/blush_moss_vegetation.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:weighted_state_provider", + "entries": [ + { + "data": { + "Name": "antarchy:blush_moss_carpet", + "Properties": { + "bottom": "true", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + "weight": 25 + } + ] + } + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/corn_patch.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/corn_patch.json new file mode 100644 index 00000000..d6fd8f3c --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/corn_patch.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:corn_patch", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_lily_pads.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_lily_pads.json new file mode 100644 index 00000000..f266ce88 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_lily_pads.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:lumen_lily_pads", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_pools.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_pools.json new file mode 100644 index 00000000..2c7be22b --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_pools.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:lumen_pools", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_streams.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_streams.json new file mode 100644 index 00000000..d90db198 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_streams.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:lumen_streams", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_flora.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_flora.json new file mode 100644 index 00000000..7dfc323c --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_flora.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:peach_forest_flora", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_mossy_boulder.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_mossy_boulder.json new file mode 100644 index 00000000..b980262e --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_mossy_boulder.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:peach_forest_mossy_boulder", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_petals.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_petals.json new file mode 100644 index 00000000..0f348bb7 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_petals.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "minecraft:pink_petals" + } + } + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_large.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_large.json new file mode 100644 index 00000000..bd272aec --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_large.json @@ -0,0 +1,9 @@ +{ + "type": "antarchy:peach_forest_pond", + "config": { + "min_radius": 16, + "max_radius": 24, + "min_depth": 6, + "max_depth": 9 + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_medium.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_medium.json new file mode 100644 index 00000000..440d8a53 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_medium.json @@ -0,0 +1,9 @@ +{ + "type": "antarchy:peach_forest_pond", + "config": { + "min_radius": 12, + "max_radius": 16, + "min_depth": 4, + "max_depth": 6 + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_small.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_small.json new file mode 100644 index 00000000..2c9bfc5c --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_forest_pond_small.json @@ -0,0 +1,9 @@ +{ + "type": "antarchy:peach_forest_pond", + "config": { + "min_radius": 8, + "max_radius": 12, + "min_depth": 3, + "max_depth": 4 + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_large_tree.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_large_tree.json new file mode 100644 index 00000000..ba4ed76d --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_large_tree.json @@ -0,0 +1,43 @@ +{ + "type": "antarchy:peach_tree", + "config": { + "trunk_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:peach_log", + "Properties": { + "axis": "y" + } + } + }, + "foliage_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:peach_leaves", + "Properties": { + "distance": "7", + "persistent": "false", + "waterlogged": "false" + } + } + }, + "height": { + "type": "minecraft:uniform", + "min_inclusive": 20, + "max_inclusive": 30 + }, + "canopy_radius": { + "type": "minecraft:uniform", + "min_inclusive": 7, + "max_inclusive": 8 + }, + "branch_count": { + "type": "minecraft:uniform", + "min_inclusive": 4, + "max_inclusive": 6 + }, + "trunk_width": 2, + "fruit_chance": 0.6, + "top_canopy_scale": 0.72 + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_tree.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_tree.json new file mode 100644 index 00000000..ca1934c2 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/peach_tree.json @@ -0,0 +1,43 @@ +{ + "type": "antarchy:peach_tree", + "config": { + "trunk_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:peach_log", + "Properties": { + "axis": "y" + } + } + }, + "foliage_provider": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:peach_leaves", + "Properties": { + "distance": "7", + "persistent": "false", + "waterlogged": "false" + } + } + }, + "height": { + "type": "minecraft:uniform", + "min_inclusive": 10, + "max_inclusive": 15 + }, + "canopy_radius": { + "type": "minecraft:uniform", + "min_inclusive": 4, + "max_inclusive": 5 + }, + "branch_count": { + "type": "minecraft:uniform", + "min_inclusive": 3, + "max_inclusive": 5 + }, + "trunk_width": 1, + "fruit_chance": 0.45, + "top_canopy_scale": 0.62 + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json b/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json index adb6c57a..82987b8d 100644 --- a/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json +++ b/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json @@ -645,6 +645,60 @@ ] } }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "antarchy:peach_forest" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:above_preliminary_surface" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "noise": "antarchy:surface_blend", + "min_threshold": -0.28, + "max_threshold": 1.1 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:blush_moss_block" + } + } + ] + } + } + }, { "type": "minecraft:condition", "if_true": { diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/blush_moss_patch.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/blush_moss_patch.json new file mode 100644 index 00000000..3f427bca --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/blush_moss_patch.json @@ -0,0 +1,44 @@ +{ + "feature": "antarchy:blush_moss_patch", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 0 + }, + "max_inclusive": { + "absolute": 256 + } + } + }, + { + "type": "minecraft:environment_scan", + "allowed_search_condition": { + "type": "minecraft:matching_block_tag", + "tag": "minecraft:air" + }, + "direction_of_search": "down", + "max_steps": 12, + "target_condition": { + "type": "minecraft:solid" + } + }, + { + "type": "minecraft:random_offset", + "xz_spread": 0, + "y_spread": 1 + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/corn_patch.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/corn_patch.json new file mode 100644 index 00000000..7549c008 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/corn_patch.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:corn_patch", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 36 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_lily_pads.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_lily_pads.json new file mode 100644 index 00000000..35200fdf --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_lily_pads.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:lumen_lily_pads", + "placement": [ + { + "type": "minecraft:count", + "count": 4 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_pools.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_pools.json new file mode 100644 index 00000000..11f62e28 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_pools.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:lumen_pools", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_streams.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_streams.json new file mode 100644 index 00000000..d875b63f --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/lumen_streams.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:lumen_streams", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 8 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_flora.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_flora.json new file mode 100644 index 00000000..83a59387 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_flora.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_forest_flora", + "placement": [ + { + "type": "minecraft:count", + "count": 2 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_mossy_boulders.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_mossy_boulders.json new file mode 100644 index 00000000..f0f30851 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_mossy_boulders.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_forest_mossy_boulder", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 72 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json new file mode 100644 index 00000000..fa38da85 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_forest_petals", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_large.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_large.json new file mode 100644 index 00000000..e54f8631 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_large.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_forest_pond_large", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 128 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_medium.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_medium.json new file mode 100644 index 00000000..9483ada3 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_medium.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_forest_pond_medium", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 72 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_small.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_small.json new file mode 100644 index 00000000..ed522321 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_ponds_small.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_forest_pond_small", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 40 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_large_tree.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_large_tree.json new file mode 100644 index 00000000..e08a2556 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_large_tree.json @@ -0,0 +1,19 @@ +{ + "feature": "antarchy:peach_large_tree", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 4 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_tree.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_tree.json new file mode 100644 index 00000000..7c6a4341 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_tree.json @@ -0,0 +1,31 @@ +{ + "feature": "antarchy:peach_tree", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:weighted_list", + "distribution": [ + { + "weight": 3, + "data": 1 + }, + { + "weight": 1, + "data": 0 + } + ] + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:heightmap", + "heightmap": "WORLD_SURFACE_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/titanium_ore.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/titanium_ore.json index 06f177fe..c49ace8f 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/titanium_ore.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/titanium_ore.json @@ -3,7 +3,7 @@ "placement": [ { "type": "minecraft:count", - "count": 12 + "count": 13 }, { "type": "minecraft:in_square" diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/uranium_ore.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/uranium_ore.json index 1e443937..6297fb6c 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/uranium_ore.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/uranium_ore.json @@ -3,7 +3,7 @@ "placement": [ { "type": "minecraft:count", - "count": 12 + "count": 13 }, { "type": "minecraft:in_square" diff --git a/common/src/main/resources/data/c/tags/item/foods.json b/common/src/main/resources/data/c/tags/item/foods.json index aae71222..0d0d38bf 100644 --- a/common/src/main/resources/data/c/tags/item/foods.json +++ b/common/src/main/resources/data/c/tags/item/foods.json @@ -6,6 +6,11 @@ "antarchy:mud_pie", "antarchy:rainbow_sugar", "antarchy:cornea_ear", - "antarchy:moleworm" + "antarchy:moleworm", + "antarchy:peach", + "antarchy:corn", + "antarchy:raw_corndog", + "antarchy:cooked_corndog", + "antarchy:root_beer" ] } diff --git a/common/src/main/resources/data/minecraft/loot_table/entities/magma_cube.json b/common/src/main/resources/data/minecraft/loot_table/entities/magma_cube.json new file mode 100644 index 00000000..4e011b10 --- /dev/null +++ b/common/src/main/resources/data/minecraft/loot_table/entities/magma_cube.json @@ -0,0 +1,161 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:damage_source_properties", + "predicate": { + "source_entity": { + "type": "minecraft:frog" + } + } + } + }, + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "type_specific": { + "type": "minecraft:slime", + "size": { + "min": 2 + } + } + } + } + ], + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": -2.0 + }, + "function": "minecraft:set_count" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "enchantment": "minecraft:looting", + "function": "minecraft:enchanted_count_increase" + } + ], + "name": "minecraft:magma_cream" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:damage_source_properties", + "predicate": { + "source_entity": { + "type": "minecraft:frog", + "type_specific": { + "type": "minecraft:frog", + "variant": "minecraft:warm" + } + } + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:pearlescent_froglight" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:damage_source_properties", + "predicate": { + "source_entity": { + "type": "minecraft:frog", + "type_specific": { + "type": "minecraft:frog", + "variant": "minecraft:cold" + } + } + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:verdant_froglight" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:damage_source_properties", + "predicate": { + "source_entity": { + "type": "minecraft:frog", + "type_specific": { + "type": "minecraft:frog", + "variant": "minecraft:temperate" + } + } + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "minecraft:ochre_froglight" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:damage_source_properties", + "predicate": { + "source_entity": { + "type": "minecraft:frog", + "type_specific": { + "type": "minecraft:frog", + "variant": "antarchy:elythia" + } + } + } + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "antarchy:roseate_froglight" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "minecraft:entities/magma_cube" +} diff --git a/common/src/main/resources/data/minecraft/tags/block/all_hanging_signs.json b/common/src/main/resources/data/minecraft/tags/block/all_hanging_signs.json index a9f77d6c..7e4be6b5 100644 --- a/common/src/main/resources/data/minecraft/tags/block/all_hanging_signs.json +++ b/common/src/main/resources/data/minecraft/tags/block/all_hanging_signs.json @@ -2,6 +2,8 @@ "replace": false, "values": [ "antarchy:ouranwood_hanging_sign", - "antarchy:ouranwood_wall_hanging_sign" + "antarchy:ouranwood_wall_hanging_sign", + "antarchy:peach_hanging_sign", + "antarchy:peach_wall_hanging_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/ceiling_hanging_signs.json b/common/src/main/resources/data/minecraft/tags/block/ceiling_hanging_signs.json index b030962b..746c5071 100644 --- a/common/src/main/resources/data/minecraft/tags/block/ceiling_hanging_signs.json +++ b/common/src/main/resources/data/minecraft/tags/block/ceiling_hanging_signs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_hanging_sign" + "antarchy:ouranwood_hanging_sign", + "antarchy:peach_hanging_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/dirt.json b/common/src/main/resources/data/minecraft/tags/block/dirt.json index 857de3af..071a0bbc 100644 --- a/common/src/main/resources/data/minecraft/tags/block/dirt.json +++ b/common/src/main/resources/data/minecraft/tags/block/dirt.json @@ -3,6 +3,7 @@ "values": [ "antarchy:infested_rooted_dirt", "antarchy:infested_coarse_dirt", - "antarchy:umbral_moss_block" + "antarchy:umbral_moss_block", + "antarchy:blush_moss_block" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/fence_gates.json b/common/src/main/resources/data/minecraft/tags/block/fence_gates.json index 628a0416..738ac5c8 100644 --- a/common/src/main/resources/data/minecraft/tags/block/fence_gates.json +++ b/common/src/main/resources/data/minecraft/tags/block/fence_gates.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_fence_gate" + "antarchy:ouranwood_fence_gate", + "antarchy:peach_fence_gate" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/frogs_spawnable_on.json b/common/src/main/resources/data/minecraft/tags/block/frogs_spawnable_on.json new file mode 100644 index 00000000..a5ea1c6e --- /dev/null +++ b/common/src/main/resources/data/minecraft/tags/block/frogs_spawnable_on.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:blush_moss_block", + "minecraft:moss_block" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/block/leaves.json b/common/src/main/resources/data/minecraft/tags/block/leaves.json index 019600cb..aee0c428 100644 --- a/common/src/main/resources/data/minecraft/tags/block/leaves.json +++ b/common/src/main/resources/data/minecraft/tags/block/leaves.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_leaves" + "antarchy:ouranwood_leaves", + "antarchy:peach_leaves" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/logs.json b/common/src/main/resources/data/minecraft/tags/block/logs.json index 01800b33..bdda48a5 100644 --- a/common/src/main/resources/data/minecraft/tags/block/logs.json +++ b/common/src/main/resources/data/minecraft/tags/block/logs.json @@ -6,6 +6,10 @@ "antarchy:mossy_ouranwood_log", "antarchy:mossy_ouranwood_wood", "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood" + "antarchy:stripped_ouranwood_wood", + "antarchy:peach_log", + "antarchy:peach_wood", + "antarchy:stripped_peach_log", + "antarchy:stripped_peach_wood" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/logs_that_burn.json b/common/src/main/resources/data/minecraft/tags/block/logs_that_burn.json index 01800b33..bdda48a5 100644 --- a/common/src/main/resources/data/minecraft/tags/block/logs_that_burn.json +++ b/common/src/main/resources/data/minecraft/tags/block/logs_that_burn.json @@ -6,6 +6,10 @@ "antarchy:mossy_ouranwood_log", "antarchy:mossy_ouranwood_wood", "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood" + "antarchy:stripped_ouranwood_wood", + "antarchy:peach_log", + "antarchy:peach_wood", + "antarchy:stripped_peach_log", + "antarchy:stripped_peach_wood" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/mineable/axe.json b/common/src/main/resources/data/minecraft/tags/block/mineable/axe.json index 136beca6..4f9f8b33 100644 --- a/common/src/main/resources/data/minecraft/tags/block/mineable/axe.json +++ b/common/src/main/resources/data/minecraft/tags/block/mineable/axe.json @@ -19,6 +19,23 @@ "antarchy:ouranwood_sign", "antarchy:ouranwood_wall_sign", "antarchy:ouranwood_hanging_sign", - "antarchy:ouranwood_wall_hanging_sign" + "antarchy:ouranwood_wall_hanging_sign", + "antarchy:peach_log", + "antarchy:peach_wood", + "antarchy:stripped_peach_log", + "antarchy:stripped_peach_wood", + "antarchy:peach_planks", + "antarchy:peach_stairs", + "antarchy:peach_slab", + "antarchy:peach_fence", + "antarchy:peach_fence_gate", + "antarchy:peach_door", + "antarchy:peach_trapdoor", + "antarchy:peach_pressure_plate", + "antarchy:peach_button", + "antarchy:peach_sign", + "antarchy:peach_wall_sign", + "antarchy:peach_hanging_sign", + "antarchy:peach_wall_hanging_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/mineable/hoe.json b/common/src/main/resources/data/minecraft/tags/block/mineable/hoe.json index fe4bba56..ece963cc 100644 --- a/common/src/main/resources/data/minecraft/tags/block/mineable/hoe.json +++ b/common/src/main/resources/data/minecraft/tags/block/mineable/hoe.json @@ -2,7 +2,12 @@ "replace": false, "values": [ "antarchy:ouranwood_leaves", + "antarchy:peach_leaves", + "antarchy:corn_crop", + "antarchy:wild_corn", "antarchy:umbral_moss_block", - "antarchy:umbral_moss_carpet" + "antarchy:umbral_moss_carpet", + "antarchy:blush_moss_block", + "antarchy:blush_moss_carpet" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/planks.json b/common/src/main/resources/data/minecraft/tags/block/planks.json index fbfbe78e..d98bff17 100644 --- a/common/src/main/resources/data/minecraft/tags/block/planks.json +++ b/common/src/main/resources/data/minecraft/tags/block/planks.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_planks" + "antarchy:ouranwood_planks", + "antarchy:peach_planks" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/saplings.json b/common/src/main/resources/data/minecraft/tags/block/saplings.json index 2af25ce5..5a06a14d 100644 --- a/common/src/main/resources/data/minecraft/tags/block/saplings.json +++ b/common/src/main/resources/data/minecraft/tags/block/saplings.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_acorn" + "antarchy:ouranwood_acorn", + "antarchy:peach_sapling" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/standing_signs.json b/common/src/main/resources/data/minecraft/tags/block/standing_signs.json index 61a8a4d5..6ec9e2a8 100644 --- a/common/src/main/resources/data/minecraft/tags/block/standing_signs.json +++ b/common/src/main/resources/data/minecraft/tags/block/standing_signs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_sign" + "antarchy:ouranwood_sign", + "antarchy:peach_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wall_hanging_signs.json b/common/src/main/resources/data/minecraft/tags/block/wall_hanging_signs.json index 2b95abe7..3472b17e 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wall_hanging_signs.json +++ b/common/src/main/resources/data/minecraft/tags/block/wall_hanging_signs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_wall_hanging_sign" + "antarchy:ouranwood_wall_hanging_sign", + "antarchy:peach_wall_hanging_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wall_signs.json b/common/src/main/resources/data/minecraft/tags/block/wall_signs.json index 47091e17..406407ee 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wall_signs.json +++ b/common/src/main/resources/data/minecraft/tags/block/wall_signs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_wall_sign" + "antarchy:ouranwood_wall_sign", + "antarchy:peach_wall_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_buttons.json b/common/src/main/resources/data/minecraft/tags/block/wooden_buttons.json index 9f9f176f..1d626cef 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_buttons.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_buttons.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_button" + "antarchy:ouranwood_button", + "antarchy:peach_button" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_doors.json b/common/src/main/resources/data/minecraft/tags/block/wooden_doors.json index 93bb2e7f..e4ebd50e 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_doors.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_doors.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_door" + "antarchy:ouranwood_door", + "antarchy:peach_door" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_fences.json b/common/src/main/resources/data/minecraft/tags/block/wooden_fences.json index d103ebdd..f1b5eb5a 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_fences.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_fences.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_fence" + "antarchy:ouranwood_fence", + "antarchy:peach_fence" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_pressure_plates.json b/common/src/main/resources/data/minecraft/tags/block/wooden_pressure_plates.json index fb1e3e81..7f3d5149 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_pressure_plates.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_pressure_plates.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_pressure_plate" + "antarchy:ouranwood_pressure_plate", + "antarchy:peach_pressure_plate" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_slabs.json b/common/src/main/resources/data/minecraft/tags/block/wooden_slabs.json index d60c2f07..9b0b8371 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_slabs.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_slabs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_slab" + "antarchy:ouranwood_slab", + "antarchy:peach_slab" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_stairs.json b/common/src/main/resources/data/minecraft/tags/block/wooden_stairs.json index 8e1ff149..5d419448 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_stairs.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_stairs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_stairs" + "antarchy:ouranwood_stairs", + "antarchy:peach_stairs" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/wooden_trapdoors.json b/common/src/main/resources/data/minecraft/tags/block/wooden_trapdoors.json index 3567295e..df34c0e6 100644 --- a/common/src/main/resources/data/minecraft/tags/block/wooden_trapdoors.json +++ b/common/src/main/resources/data/minecraft/tags/block/wooden_trapdoors.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_trapdoor" + "antarchy:ouranwood_trapdoor", + "antarchy:peach_trapdoor" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/boats.json b/common/src/main/resources/data/minecraft/tags/item/boats.json index 6ee8cf49..fd04ca71 100644 --- a/common/src/main/resources/data/minecraft/tags/item/boats.json +++ b/common/src/main/resources/data/minecraft/tags/item/boats.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "antarchy:ouranwood_boat", - "antarchy:ouranwood_chest_boat" + "antarchy:ouranwood_chest_boat", + "antarchy:peach_boat" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/chest_boats.json b/common/src/main/resources/data/minecraft/tags/item/chest_boats.json index 8e18b86e..47f46f23 100644 --- a/common/src/main/resources/data/minecraft/tags/item/chest_boats.json +++ b/common/src/main/resources/data/minecraft/tags/item/chest_boats.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_chest_boat" + "antarchy:ouranwood_chest_boat", + "antarchy:peach_chest_boat" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/fence_gates.json b/common/src/main/resources/data/minecraft/tags/item/fence_gates.json index 628a0416..738ac5c8 100644 --- a/common/src/main/resources/data/minecraft/tags/item/fence_gates.json +++ b/common/src/main/resources/data/minecraft/tags/item/fence_gates.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_fence_gate" + "antarchy:ouranwood_fence_gate", + "antarchy:peach_fence_gate" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/hanging_signs.json b/common/src/main/resources/data/minecraft/tags/item/hanging_signs.json index b030962b..746c5071 100644 --- a/common/src/main/resources/data/minecraft/tags/item/hanging_signs.json +++ b/common/src/main/resources/data/minecraft/tags/item/hanging_signs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_hanging_sign" + "antarchy:ouranwood_hanging_sign", + "antarchy:peach_hanging_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/leaves.json b/common/src/main/resources/data/minecraft/tags/item/leaves.json index 019600cb..aee0c428 100644 --- a/common/src/main/resources/data/minecraft/tags/item/leaves.json +++ b/common/src/main/resources/data/minecraft/tags/item/leaves.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_leaves" + "antarchy:ouranwood_leaves", + "antarchy:peach_leaves" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/logs.json b/common/src/main/resources/data/minecraft/tags/item/logs.json index 01800b33..bdda48a5 100644 --- a/common/src/main/resources/data/minecraft/tags/item/logs.json +++ b/common/src/main/resources/data/minecraft/tags/item/logs.json @@ -6,6 +6,10 @@ "antarchy:mossy_ouranwood_log", "antarchy:mossy_ouranwood_wood", "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood" + "antarchy:stripped_ouranwood_wood", + "antarchy:peach_log", + "antarchy:peach_wood", + "antarchy:stripped_peach_log", + "antarchy:stripped_peach_wood" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/logs_that_burn.json b/common/src/main/resources/data/minecraft/tags/item/logs_that_burn.json index 01800b33..bdda48a5 100644 --- a/common/src/main/resources/data/minecraft/tags/item/logs_that_burn.json +++ b/common/src/main/resources/data/minecraft/tags/item/logs_that_burn.json @@ -6,6 +6,10 @@ "antarchy:mossy_ouranwood_log", "antarchy:mossy_ouranwood_wood", "antarchy:stripped_ouranwood_log", - "antarchy:stripped_ouranwood_wood" + "antarchy:stripped_ouranwood_wood", + "antarchy:peach_log", + "antarchy:peach_wood", + "antarchy:stripped_peach_log", + "antarchy:stripped_peach_wood" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/planks.json b/common/src/main/resources/data/minecraft/tags/item/planks.json index fbfbe78e..d98bff17 100644 --- a/common/src/main/resources/data/minecraft/tags/item/planks.json +++ b/common/src/main/resources/data/minecraft/tags/item/planks.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_planks" + "antarchy:ouranwood_planks", + "antarchy:peach_planks" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/saplings.json b/common/src/main/resources/data/minecraft/tags/item/saplings.json index 2af25ce5..5a06a14d 100644 --- a/common/src/main/resources/data/minecraft/tags/item/saplings.json +++ b/common/src/main/resources/data/minecraft/tags/item/saplings.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_acorn" + "antarchy:ouranwood_acorn", + "antarchy:peach_sapling" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/signs.json b/common/src/main/resources/data/minecraft/tags/item/signs.json index 61a8a4d5..6ec9e2a8 100644 --- a/common/src/main/resources/data/minecraft/tags/item/signs.json +++ b/common/src/main/resources/data/minecraft/tags/item/signs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_sign" + "antarchy:ouranwood_sign", + "antarchy:peach_sign" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/trimmable_armor.json b/common/src/main/resources/data/minecraft/tags/item/trimmable_armor.json new file mode 100644 index 00000000..aa4ccea2 --- /dev/null +++ b/common/src/main/resources/data/minecraft/tags/item/trimmable_armor.json @@ -0,0 +1,19 @@ +{ + "replace": true, + "values": [ + "#minecraft:chest_armor", + "#minecraft:leg_armor", + "#minecraft:foot_armor", + "minecraft:leather_helmet", + "minecraft:chainmail_helmet", + "minecraft:golden_helmet", + "minecraft:iron_helmet", + "minecraft:diamond_helmet", + "minecraft:netherite_helmet", + "minecraft:turtle_helmet", + "antarchy:ultimate_helmet", + "antarchy:nightmare_helmet", + "antarchy:primordial_helmet", + "antarchy:blood_crystal_helmet" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_buttons.json b/common/src/main/resources/data/minecraft/tags/item/wooden_buttons.json index 9f9f176f..1d626cef 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_buttons.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_buttons.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_button" + "antarchy:ouranwood_button", + "antarchy:peach_button" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_doors.json b/common/src/main/resources/data/minecraft/tags/item/wooden_doors.json index 93bb2e7f..e4ebd50e 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_doors.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_doors.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_door" + "antarchy:ouranwood_door", + "antarchy:peach_door" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_fences.json b/common/src/main/resources/data/minecraft/tags/item/wooden_fences.json index d103ebdd..f1b5eb5a 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_fences.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_fences.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_fence" + "antarchy:ouranwood_fence", + "antarchy:peach_fence" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_pressure_plates.json b/common/src/main/resources/data/minecraft/tags/item/wooden_pressure_plates.json index fb1e3e81..7f3d5149 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_pressure_plates.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_pressure_plates.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_pressure_plate" + "antarchy:ouranwood_pressure_plate", + "antarchy:peach_pressure_plate" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_slabs.json b/common/src/main/resources/data/minecraft/tags/item/wooden_slabs.json index d60c2f07..9b0b8371 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_slabs.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_slabs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_slab" + "antarchy:ouranwood_slab", + "antarchy:peach_slab" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_stairs.json b/common/src/main/resources/data/minecraft/tags/item/wooden_stairs.json index 8e1ff149..5d419448 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_stairs.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_stairs.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_stairs" + "antarchy:ouranwood_stairs", + "antarchy:peach_stairs" ] } diff --git a/common/src/main/resources/data/minecraft/tags/item/wooden_trapdoors.json b/common/src/main/resources/data/minecraft/tags/item/wooden_trapdoors.json index 3567295e..df34c0e6 100644 --- a/common/src/main/resources/data/minecraft/tags/item/wooden_trapdoors.json +++ b/common/src/main/resources/data/minecraft/tags/item/wooden_trapdoors.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ - "antarchy:ouranwood_trapdoor" + "antarchy:ouranwood_trapdoor", + "antarchy:peach_trapdoor" ] } diff --git a/fabric/build.gradle b/fabric/build.gradle index 56f8f8a1..26766adc 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -23,6 +23,8 @@ dependencies { modApi "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" modImplementation "software.bernie.geckolib:geckolib-fabric-${project.minecraft_version}:${project.geckolib_version}" compileOnly("curse.maven:intapi-${project.intapi_curseforge_id}:${project.intapi_curseforge_file_id_neoforge}") + compileOnly "mezz.jei:jei-${project.minecraft_version}-common-api:${project.jei_version}" + compileOnly "mezz.jei:jei-${project.minecraft_version}-fabric-api:${project.jei_version}" // compileOnly("curse.maven:create-${project.create_curseforge_id_neoforge}:${project.create_curseforge_file_id_neoforge}") // compileOnly("curse.maven:marvel-${project.marvel_curseforge_id}:${project.marvel_curseforge_file_id}") // compileOnly("curse.maven:stellaris-${project.stellaris_curseforge_id}:${project.stellaris_curseforge_file_id}") @@ -32,8 +34,9 @@ dependencies { // compileOnly("curse.maven:iaf-${project.iaf_curseforge_id}:${project.iaf_curseforge_file_id}") // compileOnly("curse.maven:backpack-${project.backpack_curseforge_id}:${project.backpack_curseforge_file_id}") // compileOnly("curse.maven:regions_unexplored-${project.regions_unexplored_curseforge_id}:${project.regions_unexplored_curseforge_file_id}") - compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge-sources.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar")) + compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.2+1.21.1-neoforge.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge-sources.jar")) compileOnly(files("$rootDir/infinite_dimensions_jars/gravity-api-1.0.7-1.20.1.jar")) // compileOnly(files("$rootDir/infinite_dimensions_jars/Cloro's Gravity Gun Mod (Release 1.3.1).jar")) // compileOnly(files("$rootDir/infinite_dimensions_jars/VanillaBackport-neoforge-1.21.1-1.1.7.6.jar")) diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java index be11f333..deee4175 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java @@ -208,8 +208,10 @@ public final class AntarchyConfigModuleFabric { || name.startsWith("squidzooka") || name.equals("invertProjectilesFromInvertedPlayers") || name.startsWith("gravityGun") + || name.startsWith("minersDream") || name.equals("potentNyxiteInvertedDurationSeconds") || name.equals("corneaEarNightVisionSeconds") + || name.startsWith("american") || name.startsWith("mogglesVision") || name.equals("ductTapeRepairPercentPerUse") || name.startsWith("fallenKingCrown"); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java index 569179f7..181b95c5 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java @@ -38,6 +38,74 @@ public final class AntarchyFabric implements ModInitializer { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "mantis_overworld_spawn_biomes") ); + private static final TagKey OVERWORLD_ANT_NEST_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "overworld_ant_nest_spawn_biomes") + ); + private static final TagKey RED_ANT_NEST_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "red_ant_nest_spawn_biomes") + ); + private static final TagKey IS_ELYTHIA = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "is_elythia") + ); + private static final TagKey APPLE_COW_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "apple_cow_spawn_biomes") + ); + private static final TagKey GOLDEN_APPLE_COW_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "golden_apple_cow_spawn_biomes") + ); + private static final TagKey FLYING_SQUIRREL_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "flying_squirrel_spawn_biomes") + ); + private static final TagKey FLOWER_FOREST_BUTTERFLY_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "flower_forest_butterfly_spawn_biomes") + ); + private static final TagKey FLOWER_FOREST_CATERPILLAR_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "flower_forest_caterpillar_spawn_biomes") + ); + private static final TagKey MILKWEED_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "milkweed_spawn_biomes") + ); + private static final TagKey WILD_CORN_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "wild_corn_spawn_biomes") + ); + private static final ResourceKey BROWN_ANT_NEST = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "brown_ant_nest") + ); + private static final ResourceKey RAINBOW_ANT_NEST = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "rainbow_ant_nest") + ); + private static final ResourceKey RED_ANT_NEST = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "red_ant_nest") + ); + private static final ResourceKey URANIUM_ORE = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "uranium_ore") + ); + private static final ResourceKey TITANIUM_ORE = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "titanium_ore") + ); + private static final ResourceKey FLOWER_FOREST_MILKWEED = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "flower_forest_milkweed") + ); + private static final ResourceKey CORN_PATCH = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "corn_patch") + ); @Override public void onInitialize() { AntarchyFabricNetworking.register(); @@ -91,5 +159,80 @@ public final class AntarchyFabric implements ModInitializer { AntarchyFabricContent.ALPHA_MANTIS.get(), 1, 1, 1 ); + BiomeModifications.addFeature( + BiomeSelectors.tag(OVERWORLD_ANT_NEST_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + BROWN_ANT_NEST + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(OVERWORLD_ANT_NEST_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + RAINBOW_ANT_NEST + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(RED_ANT_NEST_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + RED_ANT_NEST + ); + BiomeModifications.addFeature( + BiomeSelectors.foundInOverworld(), + GenerationStep.Decoration.UNDERGROUND_ORES, + URANIUM_ORE + ); + BiomeModifications.addFeature( + BiomeSelectors.foundInOverworld(), + GenerationStep.Decoration.UNDERGROUND_ORES, + TITANIUM_ORE + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(IS_ELYTHIA), + GenerationStep.Decoration.UNDERGROUND_ORES, + URANIUM_ORE + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(IS_ELYTHIA), + GenerationStep.Decoration.UNDERGROUND_ORES, + TITANIUM_ORE + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(MILKWEED_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + FLOWER_FOREST_MILKWEED + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(WILD_CORN_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + CORN_PATCH + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(APPLE_COW_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.CREATURE, + AntarchyFabricContent.APPLE_COW.get(), + 10, 2, 4 + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(GOLDEN_APPLE_COW_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.CREATURE, + AntarchyFabricContent.GOLDEN_APPLE_COW.get(), + 3, 1, 3 + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(FLYING_SQUIRREL_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.CREATURE, + AntarchyFabricContent.FLYING_SQUIRREL.get(), + 8, 1, 3 + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(FLOWER_FOREST_BUTTERFLY_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.AMBIENT, + AntarchyFabricContent.BUTTERFLY.get(), + 28, 2, 5 + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(FLOWER_FOREST_CATERPILLAR_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.CREATURE, + AntarchyFabricContent.CATERPILLAR.get(), + 24, 2, 4 + ); } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 35f645de..a93ee3fc 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -2,8 +2,10 @@ package com.craisinlord.antarchy.fabric; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; import com.craisinlord.antarchy.content.block.*; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; @@ -15,6 +17,7 @@ import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; @@ -23,6 +26,7 @@ import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +import com.craisinlord.antarchy.content.worldgen.overworld.CornPatchFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeature; @@ -98,6 +102,7 @@ import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; import com.craisinlord.antarchy.content.item.CorneaEarItem; import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; @@ -128,6 +133,9 @@ import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; @@ -135,11 +143,16 @@ import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeatu import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; @@ -210,6 +223,7 @@ import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tiers; import net.minecraft.world.item.alchemy.Potions; import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleType; import net.minecraft.core.particles.SimpleParticleType; @@ -264,6 +278,26 @@ public final class AntarchyFabricContent { private static final DeferredRegister SOUND_EVENTS = DeferredRegister.create(Registries.SOUND_EVENT, Antarchy.MODID); private static final DeferredRegister FLUIDS = DeferredRegister.create(Registries.FLUID, Antarchy.MODID); private static final DeferredRegister> MENUS = DeferredRegister.create(Registries.MENU, Antarchy.MODID); + public static final DeferredHolder, net.minecraft.world.inventory.MenuType> DORRIE_INVENTORY_MENU = + MENUS.register("dorrie_inventory", () -> new net.minecraft.world.inventory.MenuType<>(com.craisinlord.antarchy.content.menu.DorrieInventoryMenu::new, FeatureFlags.DEFAULT_FLAGS)); + private static final DeferredRegister> DATA_COMPONENT_TYPES = + DeferredRegister.create(Registries.DATA_COMPONENT_TYPE, Antarchy.MODID); + private static final DeferredRegister> RECIPE_SERIALIZERS = + DeferredRegister.create(Registries.RECIPE_SERIALIZER, Antarchy.MODID); + public static final DeferredHolder, net.minecraft.core.component.DataComponentType> GLIMMER_VARIANT = + DATA_COMPONENT_TYPES.register("glimmer_variant", + () -> net.minecraft.core.component.DataComponentType.builder() + .persistent(com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.CODEC) + .networkSynchronized(com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.STREAM_CODEC) + .build()); + public static final DeferredHolder, net.minecraft.core.component.DataComponentType> AMERICAN = + DATA_COMPONENT_TYPES.register("american", + () -> net.minecraft.core.component.DataComponentType.builder() + .persistent(net.minecraft.util.Unit.CODEC) + .networkSynchronized(net.minecraft.network.codec.StreamCodec.unit(net.minecraft.util.Unit.INSTANCE)) + .build()); + public static final DeferredHolder, net.minecraft.world.item.crafting.RecipeSerializer> AMERICANIZE_SERIALIZER = + RECIPE_SERIALIZERS.register("americanize", () -> com.craisinlord.antarchy.content.AmericanizeRecipe.SERIALIZER); private static final Tier ULTIMATE_TIER = new SimpleToolTier( 3072, 10.5F, @@ -524,13 +558,53 @@ public final class AntarchyFabricContent { public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", - () -> new net.minecraft.world.level.block.StandingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + () -> new net.minecraft.world.level.block.StandingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); public static final DeferredBlock OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign", - () -> new net.minecraft.world.level.block.WallSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + () -> new net.minecraft.world.level.block.WallSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); public static final DeferredBlock OURANWOOD_HANGING_SIGN = BLOCKS.register("ouranwood_hanging_sign", - () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); public static final DeferredBlock OURANWOOD_WALL_HANGING_SIGN = BLOCKS.register("ouranwood_wall_hanging_sign", - () -> new net.minecraft.world.level.block.WallHangingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + () -> new net.minecraft.world.level.block.WallHangingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + public static final DeferredBlock PEACH_LOG = BLOCKS.register("peach_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + public static final DeferredBlock PEACH_WOOD = BLOCKS.register("peach_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + public static final DeferredBlock STRIPPED_PEACH_LOG = BLOCKS.register("stripped_peach_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); + public static final DeferredBlock STRIPPED_PEACH_WOOD = BLOCKS.register("stripped_peach_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); + public static final DeferredBlock PEACH_PLANKS = BLOCKS.register("peach_planks", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); + public static final DeferredBlock PEACH_STAIRS = BLOCKS.register("peach_stairs", + () -> new net.minecraft.world.level.block.StairBlock(PEACH_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); + public static final DeferredBlock PEACH_SLAB = BLOCKS.register("peach_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); + public static final DeferredBlock PEACH_FENCE = BLOCKS.register("peach_fence", + () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); + public static final DeferredBlock PEACH_FENCE_GATE = BLOCKS.register("peach_fence_gate", + () -> new net.minecraft.world.level.block.FenceGateBlock(net.minecraft.world.level.block.state.properties.WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE))); + public static final DeferredBlock PEACH_DOOR = BLOCKS.register("peach_door", + () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR))); + public static final DeferredBlock PEACH_TRAPDOOR = BLOCKS.register("peach_trapdoor", + () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR))); + public static final DeferredBlock PEACH_PRESSURE_PLATE = BLOCKS.register("peach_pressure_plate", + () -> new net.minecraft.world.level.block.PressurePlateBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE))); + public static final DeferredBlock PEACH_BUTTON = BLOCKS.register("peach_button", + () -> new net.minecraft.world.level.block.ButtonBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON))); + public static final DeferredBlock PEACH_LEAVES = BLOCKS.register("peach_leaves", + () -> new com.craisinlord.antarchy.content.block.PeachLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); + public static final DeferredBlock PEACH_HANGING_PEACH = BLOCKS.register("hanging_peach", + () -> new com.craisinlord.antarchy.content.block.HangingPeachBlock(BlockBehaviour.Properties.of().noOcclusion().instabreak())); + public static final DeferredBlock PEACH_SAPLING = BLOCKS.register("peach_sapling", + () -> new com.craisinlord.antarchy.content.block.PeachSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + public static final DeferredBlock PEACH_SIGN = BLOCKS.register("peach_sign", + () -> new net.minecraft.world.level.block.StandingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + public static final DeferredBlock PEACH_WALL_SIGN = BLOCKS.register("peach_wall_sign", + () -> new net.minecraft.world.level.block.WallSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + public static final DeferredBlock PEACH_HANGING_SIGN = BLOCKS.register("peach_hanging_sign", + () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + public static final DeferredBlock PEACH_WALL_HANGING_SIGN = BLOCKS.register("peach_wall_hanging_sign", + () -> new net.minecraft.world.level.block.WallHangingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); public static final DeferredBlock DUPLICATOR_SAPLING = BLOCKS.register("duplicator_sapling", () -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); public static final DeferredBlock DUCT_TAPE = BLOCKS.register("duct_tape", @@ -629,12 +703,18 @@ public final class AntarchyFabricContent { () -> new UmbralMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); public static final DeferredBlock UMBRAL_MOSS_CARPET = BLOCKS.register("umbral_moss_carpet", () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); + public static final DeferredBlock BLUSH_MOSS_BLOCK = BLOCKS.register("blush_moss_block", + () -> new BlushMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); + public static final DeferredBlock BLUSH_MOSS_CARPET = BLOCKS.register("blush_moss_carpet", + () -> new BlushMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> STINKY_GAS = PARTICLE_TYPES.register("stinky_gas", () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> STINKY_FLY = PARTICLE_TYPES.register("stinky_fly", () -> simpleParticleType()); + public static final DeferredHolder, SimpleParticleType> PEACH_LEAVES_PARTICLE = PARTICLE_TYPES.register("peach_leaves_particle", + () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", @@ -706,7 +786,6 @@ public final class AntarchyFabricContent { () -> new Potion("stinky", new MobEffectInstance(mobEffectHolder(STINKY), 2400))); public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); - // public static final DeferredHolder GLIMMERS_GRACE = MOB_EFFECTS.register("glimmers_grace", com.craisinlord.antarchy.content.effect.GlimmersGraceMobEffect::new); public static final DeferredHolder PARALYSIS = POTIONS.register("paralysis", () -> new Potion(new MobEffectInstance(mobEffectHolder(PARALYZED), 200))); public static final DeferredHolder LONG_PARALYSIS = POTIONS.register("long_paralysis", @@ -780,6 +859,33 @@ public final class AntarchyFabricContent { public static final DeferredBlock ANTIWATER_BLOCK = BLOCKS.register("antiwater", () -> new AntiwaterLiquidBlock((net.minecraft.world.level.material.FlowingFluid) ANTIWATER.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); + public static final DeferredHolder LUMEN = FLUIDS.register("lumen", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( + () -> lookupFlowingFluid("lumen"), + () -> lookupFlowingFluid("flowing_lumen"), + () -> lookupItem("lumen_bucket"), + "lumen", + 4, + 1, + 5 + )); + public static final DeferredHolder FLOWING_LUMEN = FLUIDS.register("flowing_lumen", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( + () -> lookupFlowingFluid("lumen"), + () -> lookupFlowingFluid("flowing_lumen"), + () -> lookupItem("lumen_bucket"), + "lumen", + 4, + 1, + 5 + )); + public static final DeferredBlock LUMEN_BLOCK = BLOCKS.register("lumen", + () -> new LumenLiquidBlock((net.minecraft.world.level.material.FlowingFluid) LUMEN.get(), + BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 9).noLootTable())); + public static final DeferredBlock LUMEN_FROGLIGHT = BLOCKS.register("lumen_froglight", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OCHRE_FROGLIGHT))); + public static final DeferredBlock ROSEATE_FROGLIGHT = BLOCKS.register("roseate_froglight", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OCHRE_FROGLIGHT))); public static final DeferredHolder, EntityType> RED_ANT = ENTITY_TYPES.register("red_ant", () -> buildAntType(RedAntEntity::new, MobCategory.CREATURE, "red_ant")); public static final DeferredHolder, EntityType> BROWN_ANT = ENTITY_TYPES.register("brown_ant", @@ -813,6 +919,18 @@ public final class AntarchyFabricContent { .clientTrackingRange(10) .updateInterval(10) .build("ouranwood_chest_boat")); + public static final DeferredHolder, EntityType> PEACH_BOAT_ENTITY = ENTITY_TYPES.register("peach_boat", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.PeachBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("peach_boat")); + public static final DeferredHolder, EntityType> PEACH_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("peach_chest_boat", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.PeachChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("peach_chest_boat")); public static final DeferredHolder, EntityType> MOLEVORE = ENTITY_TYPES.register("molevore", () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) .sized(1.95F, 1.1F) @@ -917,6 +1035,10 @@ public final class AntarchyFabricContent { () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); public static final DeferredBlock CORNEA_STALK = BLOCKS.register("cornea_stalk", () -> new CorneaStalkBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SWEET_BERRY_BUSH).randomTicks())); + public static final DeferredBlock CORN_CROP = BLOCKS.register("corn_crop", + () -> new CornCropBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).randomTicks().noCollission().noOcclusion())); + public static final DeferredBlock WILD_CORN = BLOCKS.register("wild_corn", + () -> new WildCornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).noCollission().noOcclusion())); public static final DeferredBlock FALLEN_KING_CROWN_BLOCK = BLOCKS.register("fallen_king_crown", () -> new Block(BlockBehaviour.Properties.of() .strength(0.2F) @@ -1005,12 +1127,20 @@ public final class AntarchyFabricContent { () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); public static final DeferredHolder, OuranwoodCocoonTreeFeature> OURANWOOD_COCOON_TREE = FEATURES.register("ouranwood_cocoon_tree", () -> new OuranwoodCocoonTreeFeature(OuranwoodTreeConfiguration.CODEC)); + public static final DeferredHolder, PeachTreeFeature> PEACH_TREE_FEATURE = FEATURES.register("peach_tree", + () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); + public static final DeferredHolder, PeachTreeFeature> PEACH_LARGE_TREE_FEATURE = FEATURES.register("peach_large_tree", + () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_MEADOW_FLORA = FEATURES.register("elythia_meadow_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.MEADOW)); + public static final DeferredHolder, ElythiaFloraFeature> PEACH_FOREST_FLORA = FEATURES.register("peach_forest_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.PEACH_FOREST)); public static final DeferredHolder, ElythiaFloraFeature> FLOWER_FOREST_MILKWEED = FEATURES.register("flower_forest_milkweed", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FLOWER_FOREST_MILKWEED)); + public static final DeferredHolder, CornPatchFeature> CORN_PATCH = FEATURES.register("corn_patch", + () -> new CornPatchFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_BUTTERFLY_FIELDS_FLORA = FEATURES.register("butterfly_fields_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.BUTTERFLY_FIELDS)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_TORCHFLOWER_FIELDS_FLORA = FEATURES.register("elythia_torchflower_fields_flora", @@ -1037,10 +1167,20 @@ public final class AntarchyFabricContent { () -> ElythiaRiverCarveFunction.CODEC); public static final DeferredHolder, ElythiaPondFeature> ELYTHIA_POND = FEATURES.register("elythia_pond", () -> new ElythiaPondFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenPoolFeature> LUMEN_POOL = FEATURES.register("lumen_pools", + () -> new LumenPoolFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenLilyPadFeature> LUMEN_LILY_PADS = FEATURES.register("lumen_lily_pads", + () -> new LumenLilyPadFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenStreamFeature> LUMEN_STREAM = FEATURES.register("lumen_streams", + () -> new LumenStreamFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaTuffBoulderFeature> ELYTHIA_TUFF_BOULDER = FEATURES.register("elythia_tuff_boulder", () -> new ElythiaTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaLargeTuffBoulderFeature> ELYTHIA_LARGE_TUFF_BOULDER = FEATURES.register("elythia_large_tuff_boulder", () -> new ElythiaLargeTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, PeachForestMossyBoulderFeature> PEACH_FOREST_MOSSY_BOULDER = FEATURES.register("peach_forest_mossy_boulder", + () -> new PeachForestMossyBoulderFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, PeachForestPondFeature> PEACH_FOREST_POND = FEATURES.register("peach_forest_pond", + () -> new PeachForestPondFeature(PeachForestPondConfiguration.CODEC)); public static final DeferredHolder, ThoraxisFissureFeature> THORAXIS_FISSURE = FEATURES.register("thoraxis_fissure", () -> new ThoraxisFissureFeature(ThoraxisFissureConfiguration.CODEC)); public static final DeferredHolder, ThoraxisRibColumnsFeature> THORAXIS_RIB_COLUMNS = FEATURES.register("thoraxis_rib_columns", @@ -1094,6 +1234,21 @@ public final class AntarchyFabricContent { public static final DeferredItem OURANWOOD_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_BUTTON); public static final DeferredItem OURANWOOD_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_LEAVES); public static final DeferredItem OURANWOOD_ACORN = ITEMS.registerSimpleBlockItem(OURANWOOD_ACORN_BLOCK); + public static final DeferredItem PEACH_LOG_ITEM = ITEMS.registerSimpleBlockItem(PEACH_LOG); + public static final DeferredItem PEACH_WOOD_ITEM = ITEMS.registerSimpleBlockItem(PEACH_WOOD); + public static final DeferredItem STRIPPED_PEACH_LOG_ITEM = ITEMS.registerSimpleBlockItem(STRIPPED_PEACH_LOG); + public static final DeferredItem STRIPPED_PEACH_WOOD_ITEM = ITEMS.registerSimpleBlockItem(STRIPPED_PEACH_WOOD); + public static final DeferredItem PEACH_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(PEACH_PLANKS); + public static final DeferredItem PEACH_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(PEACH_STAIRS); + public static final DeferredItem PEACH_SLAB_ITEM = ITEMS.registerSimpleBlockItem(PEACH_SLAB); + public static final DeferredItem PEACH_FENCE_ITEM = ITEMS.registerSimpleBlockItem(PEACH_FENCE); + public static final DeferredItem PEACH_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(PEACH_FENCE_GATE); + public static final DeferredItem PEACH_DOOR_ITEM = ITEMS.registerSimpleBlockItem(PEACH_DOOR); + public static final DeferredItem PEACH_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(PEACH_TRAPDOOR); + public static final DeferredItem PEACH_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(PEACH_PRESSURE_PLATE); + public static final DeferredItem PEACH_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(PEACH_BUTTON); + public static final DeferredItem PEACH_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(PEACH_LEAVES); + public static final DeferredItem PEACH_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(PEACH_SAPLING); // public static final DeferredItem OURANWOOD_VINE_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_VINE); public static final DeferredItem ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(ORANGE_MILKWEED); public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(PINK_MILKWEED); @@ -1105,6 +1260,14 @@ public final class AntarchyFabricContent { () -> new OuranwoodBoatOnlyItem(OURANWOOD_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); public static final DeferredItem OURANWOOD_CHEST_BOAT = ITEMS.register("ouranwood_chest_boat", () -> new OuranwoodChestBoatItem(OURANWOOD_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem PEACH_SIGN_ITEM = ITEMS.register("peach_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), PEACH_SIGN.get(), PEACH_WALL_SIGN.get())); + public static final DeferredItem PEACH_HANGING_SIGN_ITEM = ITEMS.register("peach_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(PEACH_HANGING_SIGN.get(), PEACH_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + public static final DeferredItem PEACH_BOAT = ITEMS.register("peach_boat", + () -> new com.craisinlord.antarchy.content.item.PeachBoatOnlyItem(PEACH_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem PEACH_CHEST_BOAT = ITEMS.register("peach_chest_boat", + () -> new com.craisinlord.antarchy.content.item.PeachChestBoatItem(PEACH_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); public static final DeferredItem DUPLICATOR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(DUPLICATOR_SAPLING); public static final DeferredItem RED_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(RED_ANT_NEST); public static final DeferredItem BROWN_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(BROWN_ANT_NEST); @@ -1201,6 +1364,8 @@ public final class AntarchyFabricContent { public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(POTENT_NYXITE); public static final DeferredItem UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(UMBRAL_MOSS_BLOCK); public static final DeferredItem UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(UMBRAL_MOSS_CARPET); + public static final DeferredItem BLUSH_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(BLUSH_MOSS_BLOCK); + public static final DeferredItem BLUSH_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(BLUSH_MOSS_CARPET); public static final DeferredItem DREAM_TORCH_ITEM = ITEMS.register("dream_torch", () -> new StandingAndWallBlockItem(DREAM_TORCH.get(), DREAM_WALL_TORCH.get(), new Item.Properties(), Direction.UP)); public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(DREAM_LANTERN); @@ -1214,6 +1379,10 @@ public final class AntarchyFabricContent { () -> new BucketItem(ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket", () -> new BucketItem(ANTIWATER.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + public static final DeferredItem LUMEN_BUCKET = ITEMS.register("lumen_bucket", + () -> new BucketItem(LUMEN.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + public static final DeferredItem LUMEN_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(LUMEN_FROGLIGHT); + public static final DeferredItem ROSEATE_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(ROSEATE_FROGLIGHT); public static final DeferredItem CLOUD_BUCKET = ITEMS.register("cloud_bucket", () -> new com.craisinlord.antarchy.content.item.CloudBucketItem(CLOUD_BLOCK.get(), new Item.Properties().craftRemainder(Items.BUCKET))); public static final DeferredItem BLOOD_CRYSTAL_SHARD = ITEMS.register("blood_crystal_shard", @@ -1276,6 +1445,59 @@ public final class AntarchyFabricContent { .nutrition(2) .saturationModifier(0.4F) .build()))); + public static final DeferredItem CORN = ITEMS.register("corn", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(3) + .saturationModifier(0.6F) + .build()))); + public static final DeferredItem CORN_SEEDS = ITEMS.register("corn_seeds", + () -> new net.minecraft.world.item.ItemNameBlockItem(CORN_CROP.get(), new Item.Properties())); + public static final DeferredItem RAW_VENISON = ITEMS.register("raw_venison", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(2) + .saturationModifier(0.3F) + .build()))); + public static final DeferredItem COOKED_VENISON = ITEMS.register("cooked_venison", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(6) + .saturationModifier(0.8F) + .build()))); + public static final DeferredItem PEACH = ITEMS.register("peach", + () -> new com.craisinlord.antarchy.content.item.PeachItem()); + public static final DeferredItem RAW_CORNDOG = ITEMS.register("raw_corndog", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.7F) + .build()))); + public static final DeferredItem COOKED_CORNDOG = ITEMS.register("cooked_corndog", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(14) + .saturationModifier(1.1F) + .build()))); + public static final DeferredItem HIGH_FRUCTOSE_CORN_SYRUP = ITEMS.register("high_fructose_corn_syrup", + () -> new com.craisinlord.antarchy.content.item.HighFructoseCornSyrupItem(new Item.Properties() + .stacksTo(16) + .food(new FoodProperties.Builder() + .nutrition(0) + .saturationModifier(0.0F) + .alwaysEdible() + .build()))); + public static final DeferredItem ROOT_BEER = ITEMS.register("root_beer", + () -> new com.craisinlord.antarchy.content.item.RootBeerItem(new Item.Properties() + .stacksTo(16) + .food(new FoodProperties.Builder() + .nutrition(4) + .saturationModifier(0.4F) + .effect(new MobEffectInstance(MobEffects.REGENERATION, 100, 0), 1.0F) + .alwaysEdible() + .build()))); public static final DeferredItem TRIFFID_GOO = ITEMS.registerSimpleItem("triffid_goo", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem VORTEX_EYE = ITEMS.register("vortex_eye", @@ -1474,6 +1696,8 @@ public final class AntarchyFabricContent { )); public static final DeferredItem GRAVITY_GUN = ITEMS.register("gravity_gun", () -> new GravityGunItem(new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant())); + public static final DeferredItem MINERS_DREAM = ITEMS.register("miners_dream", + () -> new MinersDreamItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); public static final DeferredItem SQUIDZOOKA = ITEMS.register("squidzooka", () -> new SquidzookaItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); public static final DeferredItem BATTLE_AXE = ITEMS.register("battle_axe", @@ -1743,13 +1967,42 @@ public final class AntarchyFabricContent { public static final DeferredItem CHEEP_SPAWN_EGG = ITEMS.register("cheep_spawn_egg", () -> new DeferredSpawnEggItem(CHEEP, 0xFF00AA, 0x00FF44, new Item.Properties())); - // public static final DeferredHolder, EntityType> GLIMMER = ENTITY_TYPES.register("glimmer", - // () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.GlimmerEntity::new, MobCategory.CREATURE) - // .sized(0.9F, 1.4F) - // .clientTrackingRange(8) - // .build("glimmer")); - // public static final DeferredItem GLIMMER_SPAWN_EGG = ITEMS.register("glimmer_spawn_egg", - // () -> new DeferredSpawnEggItem(GLIMMER, 0xBEEFFF, 0x6FD8FF, new Item.Properties())); + public static final DeferredHolder, EntityType> DORRIE = ENTITY_TYPES.register("dorrie", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.DorrieEntity::new, MobCategory.CREATURE) + .sized(1.6F, 1.4F) + .clientTrackingRange(10) + .build("dorrie")); + public static final DeferredHolder, EntityType> OURANWOOD_DEER = ENTITY_TYPES.register("ouranwood_deer", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity::new, MobCategory.CREATURE) + .sized(0.9F, 1.4F) + .clientTrackingRange(8) + .build("ouranwood_deer")); + public static final DeferredHolder, EntityType> GLIMMER = ENTITY_TYPES.register("glimmer", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity::new, MobCategory.CREATURE) + .sized(0.9F, 1.4F) + .clientTrackingRange(8) + .build("glimmer")); + public static final DeferredHolder, EntityType> ELKA = ENTITY_TYPES.register("elka", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.ElkaEntity::new, MobCategory.CREATURE) + .sized(2.2F, 3.5F) + .clientTrackingRange(10) + .build("elka")); + public static final DeferredItem DORRIE_SPAWN_EGG = ITEMS.register("dorrie_spawn_egg", + () -> new DeferredSpawnEggItem(DORRIE, 0x6F8CFF, 0xD2F2FF, new Item.Properties())); + public static final DeferredItem OURANWOOD_DEER_SPAWN_EGG = ITEMS.register("ouranwood_deer_spawn_egg", + () -> new DeferredSpawnEggItem(OURANWOOD_DEER, 0x8A6D4B, 0xE8D9B5, new Item.Properties())); + public static final DeferredItem GLIMMER_SPAWN_EGG = ITEMS.register("glimmer_spawn_egg", + () -> new DeferredSpawnEggItem(GLIMMER, 0x7DFFFF, 0x2AC7D0, new Item.Properties())); + public static final DeferredItem ELKA_SPAWN_EGG = ITEMS.register("elka_spawn_egg", + () -> new DeferredSpawnEggItem(ELKA, 0x6B2FA0, 0xFFFFFF, new Item.Properties())); + public static final DeferredItem SPIRIT_APPLE = ITEMS.register("spirit_apple", + () -> new com.craisinlord.antarchy.content.item.SpiritAppleItem(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(4) + .saturationModifier(0.3F) + .build()))); + public static final DeferredItem GLIMMER_BOTTLE = ITEMS.register("glimmer_bottle", + com.craisinlord.antarchy.content.item.GlimmerBottleItem::new); public static final DeferredHolder ANTARCHY_TAB = CREATIVE_MODE_TABS.register("antarchy", () -> CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) @@ -1834,7 +2087,10 @@ public final class AntarchyFabricContent { FabricDefaultAttributeRegistry.register(EMPEROR_SCORPION.get(), EmperorScorpionEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(TORETERROR.get(), ToreterrorEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build()); - // FabricDefaultAttributeRegistry.register(GLIMMER.get(), com.craisinlord.antarchy.content.entity.GlimmerEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(DORRIE.get(), com.craisinlord.antarchy.content.entity.DorrieEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(GLIMMER.get(), com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(ELKA.get(), com.craisinlord.antarchy.content.entity.ElkaEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(RED_ANT.get(), buildAntAttributes( AntarchySettings.redAntHealth(), @@ -1871,7 +2127,10 @@ public final class AntarchyFabricContent { SpawnPlacements.register(MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn); SpawnPlacements.register(OCTOPUS_BOMB.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, OctopusBombEntity::canSpawn); SpawnPlacements.register(CHEEP.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.AbstractFish::checkSurfaceWaterAnimalSpawnRules); - // SpawnPlacements.register(GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); + SpawnPlacements.register(DORRIE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); + SpawnPlacements.register(OURANWOOD_DEER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); + SpawnPlacements.register(GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); + SpawnPlacements.register(ELKA.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); SpawnPlacements.register(NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn); SpawnPlacements.register(MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn); SpawnPlacements.register(MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn); @@ -1889,15 +2148,22 @@ public final class AntarchyFabricContent { ArrayList sortedItems = new ArrayList<>(); for (var holder : ITEMS.getEntries()) { Item item = holder.get(); - if (item != Items.AIR) { + if (item != Items.AIR && item != GLIMMER_BOTTLE.get()) { sortedItems.add(item); } } - sortedItems.sort(Comparator.comparingInt(AntarchyFabricContent::creativeTabGroup)); + sortedItems.sort(CreativeTabOrder.COMPARATOR); + addGlimmerBottleVariants(output); sortedItems.forEach(output::accept); addPotionVariants(output); } + private static void addGlimmerBottleVariants(CreativeModeTab.Output output) { + for (com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant variant : com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.values()) { + output.accept(com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(variant)); + } + } + private static void addPotionVariants(CreativeModeTab.Output output) { acceptPotionFamily(output, DREAD_POTION); acceptPotionFamily(output, LONG_DREAD); @@ -1926,67 +2192,11 @@ public final class AntarchyFabricContent { } private static int creativeTabGroup(Item item) { - String path = BuiltInRegistries.ITEM.getKey(item).getPath(); - return switch (path) { - case "ouranwood_log", "ouranwood_wood", "mossy_ouranwood_log", "mossy_ouranwood_wood", - "stripped_ouranwood_log", "stripped_ouranwood_wood", "duplicator_log", - "ouranwood_planks", "ouranwood_stairs", "ouranwood_slab", - "ouranwood_fence", "ouranwood_fence_gate", - "ouranwood_door", "ouranwood_trapdoor", - "ouranwood_pressure_plate", "ouranwood_button", - "ouranwood_sign", "ouranwood_hanging_sign", - "ouranwood_boat", "ouranwood_chest_boat" -> 0; - case "nyxite", "polished_nyxite", "chiseled_nyxite", "nyxite_bricks", - "nyxite_stairs", "nyxite_slab", "nyxite_wall", - "polished_nyxite_stairs", "polished_nyxite_slab", "polished_nyxite_wall", - "nyxite_brick_stairs", "nyxite_brick_slab", "nyxite_brick_wall", - "pale_nyxite", "nyxite_spike", "potent_nyxite" -> 1; - case "shellstone", "polished_shellstone", "shellstone_bricks", "chiseled_shellstone", - "mossy_shellstone_bricks", "cracked_shellstone_bricks", - "shellstone_stairs", "shellstone_slab", "shellstone_wall", - "polished_shellstone_stairs", "polished_shellstone_slab", "polished_shellstone_wall", - "shellstone_brick_stairs", "shellstone_brick_slab", "shellstone_brick_wall", - "mossy_shellstone_brick_stairs", "mossy_shellstone_brick_slab", "mossy_shellstone_brick_wall" -> 2; - case "antimetal", "polished_antimetal" -> 3; - case "dream_sand", "dream_sandstone", "chiseled_dream_sandstone", - "cut_dream_sandstone", "smooth_dream_sandstone", - "dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall", - "smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab", - "cut_dream_sandstone_slab" -> 4; - case "umbral_moss_block", "umbral_moss_carpet" -> 4; - case "hushweed", "orange_milkweed", "pink_milkweed", "amber_lichen", "creepvine" -> 6; - case "blood_crystal_block", "budding_blood_crystal", - "small_blood_crystal_bud", "medium_blood_crystal_bud", - "large_blood_crystal_bud", "blood_crystal_cluster" -> 7; - case "myrmite", "broodstone", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8; - case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", - "uranium_block", "titanium_block", "raw_uranium_block", "raw_titanium_block", - "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", - "cut_uranium_stairs", "cut_titanium_stairs", "chiseled_uranium", - "chiseled_titanium", "uranium_bulb", "titanium_bulb", - "uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor", - "uranium_bars", "titanium_bars" -> 8; - case "infested_rooted_dirt", "infested_coarse_dirt", "triffid_goo_block", - "cloud_block", "creeping_horror_egg", "lurking_terror_egg" -> 9; - case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling" -> 10; - case "easter_bunny_spawn_egg", "flying_squirrel_spawn_egg", "caterpillar_spawn_egg", - "butterfly_spawn_egg", "reverie_spawn_egg", "brutalfly_spawn_egg", - "red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", "termite_spawn_egg", - "moleworm_spawn_egg", "mantis_spawn_egg", "alpha_mantis_spawn_egg", "rolly_polly_spawn_egg", "molevore_spawn_egg", "triffid_spawn_egg", - "apple_cow_spawn_egg", "golden_apple_cow_spawn_egg", "enchanted_golden_apple_cow_spawn_egg", - "dr_trayaurus_spawn_egg", "wasp_spawn_egg", - "bomber_spawn_egg", "jumpy_bug_spawn_egg", "stink_bug_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", "octopus_bomb_spawn_egg", - "nightmare_spawn_egg", "bed_bug_spawn_egg", "lucid_spawn_egg", "scorpion_spawn_egg", - "basilisk_spawn_egg", "emperor_scorpion_spawn_egg", "toreterror_spawn_egg", - "hercules_beetle_spawn_egg", - "creeping_horror_spawn_egg", "lurking_terror_spawn_egg" -> 90; - case "stink_bug", "chiten" -> 22; - case "water_cannon" -> 52; - case "primordial_helmet", "primordial_chestplate", "primordial_leggings", "primordial_boots" -> 53; - case "jumpy_boots" -> 54; - case "king_scale", "queen_scale" -> 22; - default -> 50; - }; + return CreativeTabOrder.group(item); + } + + private static int creativeTabSubOrder(Item item) { + return CreativeTabOrder.subOrder(item); } private static BlockEntityType antNestBlockEntityType() { @@ -2281,6 +2491,8 @@ public final class AntarchyFabricContent { POTIONS.register(); ITEMS.register(); MENUS.register(); + DATA_COMPONENT_TYPES.register(); + RECIPE_SERIALIZERS.register(); CREATIVE_MODE_TABS.register(); // Wire common-module accessors after all registrations are complete. @@ -2428,8 +2640,25 @@ public final class AntarchyFabricContent { ); AntarchyObjects.setOctopusBomb(OCTOPUS_BOMB); - // AntarchyObjects.setGlimmer(GLIMMER); - // AntarchyObjects.setGlimmersGrace(() -> mobEffectHolder(GLIMMERS_GRACE)); + AntarchyObjects.setOuranwoodDeer(OURANWOOD_DEER); + AntarchyObjects.setGlimmer(GLIMMER); + AntarchyObjects.setSpiritApple(() -> SPIRIT_APPLE.get()); + AntarchyObjects.setElka(ELKA); + AntarchyObjects.setPeach(() -> PEACH.get()); + AntarchyObjects.setCorn(() -> CORN.get()); + AntarchyObjects.setCornSeeds(() -> CORN_SEEDS.get()); + AntarchyObjects.setWildCorn(() -> WILD_CORN.get()); + AntarchyObjects.setCookedCorndog(() -> COOKED_CORNDOG.get()); + AntarchyObjects.setGlimmerBottle(() -> GLIMMER_BOTTLE.get()); + AntarchyObjects.setGlimmerVariantComponent(() -> GLIMMER_VARIANT.get()); + AntarchyObjects.setAmericanComponent(() -> AMERICAN.get()); + AntarchyObjects.setLumen(() -> LUMEN.get()); + AntarchyObjects.setFlowingLumen(() -> FLOWING_LUMEN.get()); + AntarchyObjects.setLumenBucket(() -> LUMEN_BUCKET.get()); + AntarchyObjects.setLumenBlock(() -> LUMEN_BLOCK.get()); + AntarchyObjects.setLumenFroglight(() -> LUMEN_FROGLIGHT.get()); + AntarchyObjects.setPeachLeavesParticle(() -> PEACH_LEAVES_PARTICLE.get()); + AntarchyObjects.setDorrieInventoryMenu(DORRIE_INVENTORY_MENU); AntarchyObjects.bind( EASTER_BUNNY, FLYING_SQUIRREL, @@ -2454,7 +2683,7 @@ public final class AntarchyFabricContent { (java.util.function.Supplier) BOMBER, (java.util.function.Supplier) BED_BUG, CHEEP, - (java.util.function.Supplier) CHEEP, + DORRIE, () -> DUPLICATOR_LOG.get(), () -> DUPLICATOR_SAPLING.get(), () -> DUCT_TAPE.get(), @@ -2505,6 +2734,10 @@ public final class AntarchyFabricContent { () -> OURANWOOD_ACORN_BLOCK.get(), () -> MOSSY_OURANWOOD_LOG.get(), () -> MOSSY_OURANWOOD_WOOD.get(), + () -> UMBRAL_MOSS_BLOCK.get(), + () -> UMBRAL_MOSS_CARPET.get(), + () -> BLUSH_MOSS_BLOCK.get(), + () -> BLUSH_MOSS_CARPET.get(), () -> ORANGE_MILKWEED.get(), () -> PINK_MILKWEED.get(), () -> BED_BUG_EGG.get(), @@ -2520,6 +2753,7 @@ public final class AntarchyFabricContent { () -> HUSHWEED_BLOCK_ENTITY.get(), () -> STINKY_GAS.get(), () -> STINKY_FLY.get(), + () -> PEACH_LEAVES_PARTICLE.get(), () -> attributeHolder(DOUBLE_DAMAGE_CHANCE), () -> attributeHolder(BLOODGLASS_MAX_HEARTS), () -> mobEffectHolder(BLOODGLASS_WARD) @@ -2537,10 +2771,35 @@ public final class AntarchyFabricContent { com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyFabricNetworking::syncGravityEntity); AntarchyFabricEvents.register(); - if (FabricInfinityCompat.isAvailableOnClasspath()) { + if (isSupportedInfinityLoaded()) { InfinityCompat.bind(new FabricInfinityCompat()); } } + + private static boolean isSupportedInfinityLoaded() { + if (!FabricInfinityCompat.isAvailableOnClasspath()) { + return false; + } + + try { + String version = FabricLoader.getInstance() + .getModContainer("infinity") + .map(container -> container.getMetadata().getVersion().getFriendlyString()) + .orElse(null); + if (InfinityCompatVersion.isSupported(version)) { + return true; + } + + Antarchy.LOGGER.warn( + "Skipping Infinity integration because version {} is below the supported minimum {}", + version, + InfinityCompatVersion.requiredVersion() + ); + } catch (Throwable throwable) { + Antarchy.LOGGER.warn("Skipping Infinity integration because the installed Infinity version could not be verified", throwable); + } + return false; + } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index 972fcf8b..5f9c2e54 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -13,6 +13,7 @@ import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; import com.craisinlord.antarchy.content.portal.PermanentPortalManager; import com.craisinlord.antarchy.content.command.CaterpillarCommand; import com.craisinlord.antarchy.content.command.GravityCommand; +import com.craisinlord.antarchy.content.item.MinersDreamExcavationManager; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; @@ -52,8 +53,15 @@ public final class AntarchyFabricEvents { ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.BLUSH_MOSS_BLOCK.get().asItem(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.BLUSH_MOSS_CARPET.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.HUSHWEED.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CORNEA_EAR.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.PEACH_LEAVES.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.PEACH_SAPLING_ITEM.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CORN.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CORN_SEEDS.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.PEACH.get(), 0.65f); ServerLivingEntityEvents.AFTER_DEATH.register((entity, damageSource) -> { if (entity instanceof ServerPlayer sp) { @@ -87,6 +95,7 @@ public final class AntarchyFabricEvents { tickDuctTapePlayers(level); tickIchorPlayers(level); tickBloodglassRecharge(level); + MinersDreamExcavationManager.tick(level); } invertedPlayers.retainAll(activeThisTick); }); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/OuranwoodWoodTypes.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyWoodTypes.java similarity index 80% rename from fabric/src/main/java/com/craisinlord/antarchy/fabric/OuranwoodWoodTypes.java rename to fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyWoodTypes.java index 86217123..7b807144 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/OuranwoodWoodTypes.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyWoodTypes.java @@ -5,10 +5,11 @@ import com.craisinlord.antarchy.fabric.mixin.WoodTypeInvoker; import net.minecraft.world.level.block.state.properties.BlockSetType; import net.minecraft.world.level.block.state.properties.WoodType; -public final class OuranwoodWoodTypes { +public final class AntarchyWoodTypes { public static final WoodType OURANWOOD = register("ouranwood"); + public static final WoodType PEACH = register("peach"); - private OuranwoodWoodTypes() { + private AntarchyWoodTypes() { } private static WoodType register(String name) { diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java index 5aec90de..8c038d39 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/FabricInfinityCompat.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.fabric; +import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompatBridge; import net.lerariemann.infinity.util.InfinityMethods; import net.lerariemann.infinity.util.teleport.WarpLogic; @@ -28,6 +29,7 @@ public final class FabricInfinityCompat implements InfinityCompatBridge { try { return InfinityMethods.getRandomId(random); } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to get a random Infinity dimension id", throwable); return null; } } @@ -38,6 +40,7 @@ public final class FabricInfinityCompat implements InfinityCompatBridge { WarpLogic.requestWarp(player, dimensionId, false); return true; } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to request an Infinity warp to {}", dimensionId, throwable); return false; } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java index 7c61431e..c8aba29c 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java @@ -21,6 +21,7 @@ import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.minecraft.client.model.BoatModel; import net.minecraft.client.model.ChestBoatModel; +import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.renderer.BiomeColors; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.texture.TextureAtlas; @@ -51,6 +52,7 @@ public final class AntarchyFabricClientBootstrap { public static void register() { AntarchyKeyBindings.register(); + MenuScreens.register(AntarchyFabricContent.DORRIE_INVENTORY_MENU.get(), com.craisinlord.antarchy.content.client.screen.DorrieInventoryScreen::new); registerRenderers(); registerEntityLayers(); registerColors(); @@ -83,6 +85,8 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricContent.TRIFFID.get(), TriffidRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/ouranwood.png"), false)); EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_CHEST_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/ouranwood.png"), true)); + EntityRendererRegistry.register(AntarchyFabricContent.PEACH_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/peach.png"), false)); + EntityRendererRegistry.register(AntarchyFabricContent.PEACH_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/peach.png"), true)); EntityRendererRegistry.register(AntarchyFabricContent.APPLE_COW.get(), AppleCowRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.GOLDEN_APPLE_COW.get(), AppleCowRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.ENCHANTED_GOLDEN_APPLE_COW.get(), AppleCowRenderer::new); @@ -111,10 +115,15 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricContent.TORETERROR.get(), ToreterrorRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.WATER_BOMB.get(), WaterBombRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.CHEEP.get(), com.craisinlord.antarchy.content.client.renderer.CheepRenderer::new); - // EntityRendererRegistry.register(AntarchyFabricContent.GLIMMER.get(), com.craisinlord.antarchy.content.client.renderer.GlimmerRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.DORRIE.get(), com.craisinlord.antarchy.content.client.renderer.DorrieRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.GLIMMER.get(), com.craisinlord.antarchy.content.client.renderer.glimmer.GlimmerRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.ELKA.get(), com.craisinlord.antarchy.content.client.renderer.ElkaRenderer::new); EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.boatLayer(), BoatModel::createBodyModel); EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel); + EntityModelLayerRegistry.registerModelLayer(PeachBoatRenderer.boatLayer(), BoatModel::createBodyModel); + EntityModelLayerRegistry.registerModelLayer(PeachBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel); } private static void registerColors() { @@ -185,6 +194,17 @@ public final class AntarchyFabricClientBootstrap { } } ); + + FluidRenderHandlerRegistry.INSTANCE.register( + AntarchyFabricContent.LUMEN.get(), + AntarchyFabricContent.FLOWING_LUMEN.get(), + new SimpleFluidRenderHandler( + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_still"), + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_flow"), + ResourceLocation.withDefaultNamespace("block/water_overlay"), + 0xFFFFFFFF + ) + ); } private static void registerParticles() { @@ -192,6 +212,7 @@ public final class AntarchyFabricClientBootstrap { registry.register(AntarchyFabricContent.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); registry.register(AntarchyFabricContent.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); registry.register(AntarchyFabricContent.STINKY_FLY.get(), FireflyParticle.Provider::new); + registry.register(AntarchyFabricContent.PEACH_LEAVES_PARTICLE.get(), PeachLeavesParticle.Provider::new); registry.register(AntarchyFabricContent.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); registry.register(AntarchyFabricContent.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); registry.register(AntarchyFabricContent.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); @@ -209,6 +230,11 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_DOOR.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_TRAPDOOR.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_LEAVES.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_HANGING_PEACH.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_SAPLING.get(), RenderType.cutout()); // BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_VINE.get(), RenderType.cutout()); // BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_VINE_PLANT.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DUPLICATOR_SAPLING.get(), RenderType.cutout()); @@ -216,6 +242,8 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PINK_MILKWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.HUSHWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CORNEA_STALK.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CORN_CROP.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.WILD_CORN.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.FALLEN_KING_CROWN_BLOCK.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); @@ -231,6 +259,7 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_FIRE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_CEILING_FIRE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ANTIWATER_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.LUMEN_BLOCK.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ELYTHIA_PORTAL.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.THORAXIS_PORTAL.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); @@ -247,6 +276,8 @@ public final class AntarchyFabricClientBootstrap { AntarchyFabricContent.FLOWING_BILE.get(), AntarchyFabricContent.ICHOR.get(), AntarchyFabricContent.FLOWING_ICHOR.get(), + AntarchyFabricContent.LUMEN.get(), + AntarchyFabricContent.FLOWING_LUMEN.get(), AntarchyFabricContent.ANTIWATER.get(), AntarchyFabricContent.FLOWING_ANTIWATER.get() ); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/RandomSpringMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/RandomSpringMixin.java deleted file mode 100644 index 559cdba6..00000000 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/infinity/RandomSpringMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.infinity; - -import net.lerariemann.infinity.dimensions.features.fluid_springs.RandomSpring; -import net.lerariemann.infinity.util.core.ConfigType; -import net.lerariemann.infinity.util.core.RandomProvider; -import net.minecraft.nbt.CompoundTag; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import java.util.Random; - -@Mixin(value = RandomSpring.class, remap = false) -/* - * Skips bad fluid picks for Infinity random springs on Fabric. - */ -public abstract class RandomSpringMixin { - @Redirect( - method = "feature", - at = @At( - value = "INVOKE", - target = "Lnet/lerariemann/infinity/util/core/RandomProvider;randomName(Ljava/util/Random;Lnet/lerariemann/infinity/util/core/ConfigType;)Ljava/lang/String;" - ) - ) - private String antarchy$useFluidIdForSpring(RandomProvider provider, Random random, ConfigType configType) { - if (configType != ConfigType.FLUIDS) { - return provider.randomName(random, configType); - } - - CompoundTag fluidTag = provider.randomElement(random, configType); - String fluidId = fluidTag.getString("fluidName"); - if (!fluidId.isEmpty()) { - return fluidId; - } - return fluidTag.getString("Name"); - } -} diff --git a/fabric/src/main/resources/antarchy-fabric.mixins.json b/fabric/src/main/resources/antarchy-fabric.mixins.json index e3f62732..2a161455 100644 --- a/fabric/src/main/resources/antarchy-fabric.mixins.json +++ b/fabric/src/main/resources/antarchy-fabric.mixins.json @@ -17,7 +17,6 @@ "JumpyBootsFallDamageMixin", "entity.MultipartEntityLevelRegistryMixin", "WoodTypeInvoker", - "infinity.RandomSpringMixin", "infinity.PortalCreatorMixin" ], "client": [ diff --git a/fabric/src/main/resources/assets/antarchy/models/item/lumen_bucket.json b/fabric/src/main/resources/assets/antarchy/models/item/lumen_bucket.json new file mode 100644 index 00000000..5b384dbc --- /dev/null +++ b/fabric/src/main/resources/assets/antarchy/models/item/lumen_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/lumen_bucket" + } +} diff --git a/fabric/src/main/resources/data/minecraft/tags/fluid/water.json b/fabric/src/main/resources/data/minecraft/tags/fluid/water.json index 6d00bd9c..60ad5ea5 100644 --- a/fabric/src/main/resources/data/minecraft/tags/fluid/water.json +++ b/fabric/src/main/resources/data/minecraft/tags/fluid/water.json @@ -1,6 +1,8 @@ { "values": [ "antarchy:ichor", - "antarchy:flowing_ichor" + "antarchy:flowing_ichor", + "antarchy:lumen", + "antarchy:flowing_lumen" ] } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 639fc562..eeb00897 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -35,5 +35,8 @@ "integrated_api": "*", "geckolib": "*", "sizeable_foliage": "*" + }, + "breaks": { + "infinity": "<2.7.2" } } diff --git a/gradle.properties b/gradle.properties index f8bee8a8..cfce331e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,6 +38,7 @@ structurevoidtoggle_neoforge=4.4.1+1.21 structurevoidtoggle_fabric=4.4.1+1.21 geckolib_version=4.8.4 +jei_version=19.27.0.336 intapi_curseforge_id = 817709 diff --git a/neoforge/build.gradle b/neoforge/build.gradle index 5fabcb04..739602f2 100644 --- a/neoforge/build.gradle +++ b/neoforge/build.gradle @@ -34,8 +34,8 @@ dependencies { neoForge "net.neoforged:neoforge:${rootProject.neoforge_version}" modLocalRuntime("curse.maven:intapi-${project.intapi_curseforge_id}:${project.intapi_curseforge_file_id_neoforge}") implementation "software.bernie.geckolib:geckolib-neoforge-${minecraft_version}:${geckolib_version}" - compileOnly(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar"))) - modLocalRuntime(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar"))) + compileOnly(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.2+1.21.1-neoforge.jar"))) + modLocalRuntime(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.2+1.21.1-neoforge.jar"))) compileOnly(files(rootProject.file("sizeable_foliage_jars/sizeable_foliage-neoforge-1.21.1-1.0.0.jar"))) runtimeOnly(files(rootProject.file("sizeable_foliage_jars/sizeable_foliage-neoforge-1.21.1-1.0.0.jar"))) @@ -44,7 +44,8 @@ dependencies { modLocalRuntime("com.telepathicgrunt:StructureVoidToggle-Neoforge:${project.structurevoidtoggle_neoforge}") // modLocalRuntime("curse.maven:idas-${idas_curseforge_id}:${idas_curseforge_file_id}") -// modLocalRuntime("curse.maven:jei-${jei_curseforge_id}:${jei_curseforge_file_id}") + compileOnly "mezz.jei:jei-${minecraft_version}-common-api:${jei_version}" + compileOnly "mezz.jei:jei-${minecraft_version}-neoforge-api:${jei_version}" // modLocalRuntime("curse.maven:create-${create_curseforge_id}:${create_curseforge_file_id}") // modLocalRuntime("curse.maven:theoneprobe-${top_curseforge_id}:${top_curseforge_file_id}") // modLocalRuntime("curse.maven:worldedit-${worldedit_curseforge_id}:${worldedit_curseforge_file_id}") diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java index 0d3153a3..8f9cd5f8 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java @@ -199,6 +199,7 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setHerculesBeetleHealth(AntarchyMobsConfig.herculesBeetleHealth()); AntarchySettings.setHerculesBeetleAttackDamage(AntarchyMobsConfig.herculesBeetleAttackDamage()); AntarchySettings.setHerculesBeetleChargeDamage(AntarchyMobsConfig.herculesBeetleChargeDamage()); + AntarchySettings.setOuranwoodDeerHealth(AntarchyMobsConfig.ouranwoodDeerHealth()); AntarchySettings.setGlimmerHealth(AntarchyMobsConfig.glimmerHealth()); } @@ -311,9 +312,20 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setGravityGunCooldownSeconds(AntarchyToolsConfig.gravityGunCooldownSeconds()); AntarchySettings.setGravityGunMaxHoldDistance(AntarchyToolsConfig.gravityGunMaxHoldDistance()); + AntarchySettings.setMinersDreamEnabled(AntarchyToolsConfig.minersDreamEnabled()); + AntarchySettings.setMinersDreamMinimumRange(AntarchyToolsConfig.minersDreamMinimumRange()); + AntarchySettings.setMinersDreamMaximumRange(AntarchyToolsConfig.minersDreamMaximumRange()); + AntarchySettings.setMinersDreamTorchSpacing(AntarchyToolsConfig.minersDreamTorchSpacing()); + AntarchySettings.setMinersDreamBlocksPerTick(AntarchyToolsConfig.minersDreamBlocksPerTick()); + AntarchySettings.setDuctTapeRepairPercentPerUse(AntarchyToolsConfig.ductTapeRepairPercentPerUse()); AntarchySettings.setPotentNyxiteInvertedDurationSeconds(AntarchyToolsConfig.potentNyxiteInvertedDurationSeconds()); AntarchySettings.setCorneaEarNightVisionSeconds(AntarchyToolsConfig.corneaEarNightVisionSeconds()); + AntarchySettings.setAmericanizingEnabled(AntarchyToolsConfig.americanizingEnabled()); + AntarchySettings.setAmericanBonusNutrition(AntarchyToolsConfig.americanBonusNutrition()); + AntarchySettings.setAmericanBonusSaturation(AntarchyToolsConfig.americanBonusSaturation()); + AntarchySettings.setAmericanRegenerationDurationTicks(AntarchyToolsConfig.americanRegenerationDurationTicks()); + AntarchySettings.setAmericanRegenerationAmplifier(AntarchyToolsConfig.americanRegenerationAmplifier()); AntarchySettings.setAntDanceRadius(AntarchyMobsConfig.antDanceRadius()); AntarchySettings.setMogglesVisionRadius(AntarchyToolsConfig.mogglesVisionRadius()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java index 849cce3b..3def0fb9 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java @@ -212,6 +212,11 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.DoubleValue DORRIE_HEALTH; + // Ouranwood Deer + + private static final ModConfigSpec.DoubleValue OURANWOOD_DEER_HEALTH; + + // Glimmer private static final ModConfigSpec.DoubleValue GLIMMER_HEALTH; @@ -547,6 +552,10 @@ public final class AntarchyMobsConfig { DORRIE_HEALTH = b.comment("Base max health.").defineInRange("health", 60.0D, 1.0D, 32768.0D); b.pop(); + b.push("ouranwood_deer"); + OURANWOOD_DEER_HEALTH = b.comment("Base max health.").defineInRange("health", 20.0D, 1.0D, 32768.0D); + b.pop(); + b.push("glimmer"); GLIMMER_HEALTH = b.comment("Base max health.").defineInRange("health", 20.0D, 1.0D, 32768.0D); b.pop(); @@ -727,6 +736,7 @@ public final class AntarchyMobsConfig { static double cheepHealth() { return CHEEP_HEALTH.get(); } static double cheepAttackDamage() { return CHEEP_ATTACK_DAMAGE.get(); } static double dorrieHealth() { return DORRIE_HEALTH.get(); } + static double ouranwoodDeerHealth() { return OURANWOOD_DEER_HEALTH.get(); } static double glimmerHealth() { return GLIMMER_HEALTH.get(); } static double herculesBeetleHealth() { return HERCULES_BEETLE_HEALTH.get(); } static double herculesBeetleAttackDamage() { return HERCULES_BEETLE_ATTACK_DAMAGE.get(); } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java index d66a0714..b3be4333 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java @@ -45,6 +45,17 @@ public final class AntarchyNeoForgeFluidTypes { .density(1200) .viscosity(1400))); + public static final DeferredHolder LUMEN_TYPE = FLUID_TYPES.register("lumen", + () -> new FluidType(FluidType.Properties.create() + .descriptionId("block.antarchy.lumen") + .fallDistanceModifier(0.0F) + .canSwim(true) + .supportsBoating(true) + .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL) + .sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) + .density(1000) + .viscosity(1000))); + private AntarchyNeoForgeFluidTypes() { } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index bf604348..12b7006a 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.neoforge; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; @@ -168,7 +169,7 @@ public class AntarchyNeoforge { new BloodCrystalKatanaTrailPayload(player.getId(), durationTicks) )); com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyGravityNetworking::syncEntity); - if (isModLoaded("infinity")) { + if (isSupportedInfinityLoaded()) { InfinityCompat.bind(new NeoForgeInfinityCompat()); } AntarchyNeoForgeEvents.register(modEventBus); @@ -176,6 +177,7 @@ public class AntarchyNeoforge { AntarchyNeoforgeEntites.register(modEventBus); AntarchyNeoforgeBlocks.register(modEventBus); AntarchyNeoforgeItems.register(modEventBus); + AntarchyNeoForgeFluidTypes.register(modEventBus); AntarchyNeoforgeMisc.register(modEventBus); AntarchyNeoforgeSpawnPlacements.register(modEventBus); AntarchyNeoforgeCreativeModeTabs.register(modEventBus); @@ -217,7 +219,7 @@ public class AntarchyNeoforge { (java.util.function.Supplier) AntarchyNeoforgeEntites.BOMBER, (java.util.function.Supplier) AntarchyNeoforgeEntites.BED_BUG, AntarchyNeoforgeEntites.CHEEP, - (java.util.function.Supplier) AntarchyNeoforgeEntites.CHEEP, + AntarchyNeoforgeEntites.DORRIE, () -> AntarchyNeoforgeBlocks.DUPLICATOR_LOG.get(), () -> AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), () -> AntarchyNeoforgeBlocks.DUCT_TAPE.get(), @@ -268,6 +270,10 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK.get(), () -> AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_LOG.get(), () -> AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_WOOD.get(), + () -> AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK.get(), + () -> AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get(), + () -> AntarchyNeoforgeBlocks.BLUSH_MOSS_BLOCK.get(), + () -> AntarchyNeoforgeBlocks.BLUSH_MOSS_CARPET.get(), () -> AntarchyNeoforgeBlocks.ORANGE_MILKWEED.get(), () -> AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), () -> AntarchyNeoforgeBlocks.BED_BUG_EGG.get(), @@ -283,13 +289,30 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.HUSHWEED_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeMisc.STINKY_GAS.get(), () -> AntarchyNeoforgeMisc.STINKY_FLY.get(), + () -> AntarchyNeoforgeMisc.PEACH_LEAVES_PARTICLE.get(), () -> AntarchyNeoforgeMisc.DOUBLE_DAMAGE_CHANCE, () -> AntarchyNeoforgeMisc.BLOODGLASS_MAX_HEARTS, () -> AntarchyNeoforgeMisc.BLOODGLASS_WARD ); AntarchyObjects.setOctopusBomb(AntarchyNeoforgeEntites.OCTOPUS_BOMB); - // AntarchyObjects.setGlimmer(AntarchyNeoforgeEntites.GLIMMER); - // AntarchyObjects.setGlimmersGrace(() -> AntarchyNeoforgeMisc.GLIMMERS_GRACE); + AntarchyObjects.setOuranwoodDeer(AntarchyNeoforgeEntites.OURANWOOD_DEER); + AntarchyObjects.setGlimmer(AntarchyNeoforgeEntites.GLIMMER); + AntarchyObjects.setSpiritApple(() -> AntarchyNeoforgeItems.SPIRIT_APPLE.get()); + AntarchyObjects.setElka(AntarchyNeoforgeEntites.ELKA); + AntarchyObjects.setPeach(() -> AntarchyNeoforgeItems.PEACH.get()); + AntarchyObjects.setCorn(() -> AntarchyNeoforgeItems.CORN.get()); + AntarchyObjects.setCornSeeds(() -> AntarchyNeoforgeItems.CORN_SEEDS.get()); + AntarchyObjects.setCookedCorndog(() -> AntarchyNeoforgeItems.COOKED_CORNDOG.get()); + AntarchyObjects.setGlimmerBottle(() -> AntarchyNeoforgeItems.GLIMMER_BOTTLE.get()); + AntarchyObjects.setGlimmerVariantComponent(() -> AntarchyNeoforgeMisc.GLIMMER_VARIANT.get()); + AntarchyObjects.setAmericanComponent(() -> AntarchyNeoforgeMisc.AMERICAN.get()); + AntarchyObjects.setLumen(() -> AntarchyNeoforgeMisc.LUMEN.get()); + AntarchyObjects.setFlowingLumen(() -> AntarchyNeoforgeMisc.FLOWING_LUMEN.get()); + AntarchyObjects.setLumenBucket(() -> AntarchyNeoforgeItems.LUMEN_BUCKET.get()); + AntarchyObjects.setLumenBlock(() -> AntarchyNeoforgeBlocks.LUMEN_BLOCK.get()); + AntarchyObjects.setLumenFroglight(() -> AntarchyNeoforgeBlocks.LUMEN_FROGLIGHT.get()); + AntarchyObjects.setPeachLeavesParticle(() -> AntarchyNeoforgeMisc.PEACH_LEAVES_PARTICLE.get()); + AntarchyObjects.setDorrieInventoryMenu(AntarchyNeoforgeMisc.DORRIE_INVENTORY_MENU); } private static boolean isModLoaded(String modId) { @@ -299,4 +322,29 @@ public class AntarchyNeoforge { return false; } } + + private static boolean isSupportedInfinityLoaded() { + if (!isModLoaded("infinity")) { + return false; + } + + try { + String version = ModList.get() + .getModContainerById("infinity") + .map(container -> container.getModInfo().getVersion().toString()) + .orElse(null); + if (InfinityCompatVersion.isSupported(version)) { + return true; + } + + Antarchy.LOGGER.warn( + "Skipping Infinity integration because version {} is below the supported minimum {}", + version, + InfinityCompatVersion.requiredVersion() + ); + } catch (Throwable throwable) { + Antarchy.LOGGER.warn("Skipping Infinity integration because the installed Infinity version could not be verified", throwable); + } + return false; + } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java index 5fe047eb..2d2cb08f 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java @@ -170,12 +170,26 @@ public final class AntarchyToolsConfig { private static final ModConfigSpec.DoubleValue GRAVITY_GUN_MAX_HOLD_DISTANCE; + // Miner's Dream + + private static final ModConfigSpec.BooleanValue MINERS_DREAM_ENABLED; + private static final ModConfigSpec.IntValue MINERS_DREAM_MINIMUM_RANGE; + private static final ModConfigSpec.IntValue MINERS_DREAM_MAXIMUM_RANGE; + private static final ModConfigSpec.IntValue MINERS_DREAM_TORCH_SPACING; + private static final ModConfigSpec.IntValue MINERS_DREAM_BLOCKS_PER_TICK; + + // Miscellaneous items / consumables private static final ModConfigSpec.DoubleValue DUCT_TAPE_REPAIR_PERCENT_PER_USE; private static final ModConfigSpec.DoubleValue POTENT_NYXITE_INVERTED_DURATION_SECONDS; private static final ModConfigSpec.BooleanValue INVERT_PROJECTILES_FROM_INVERTED_PLAYERS; private static final ModConfigSpec.IntValue CORNEA_EAR_NIGHT_VISION_SECONDS; + private static final ModConfigSpec.BooleanValue AMERICAN_ENABLED; + private static final ModConfigSpec.IntValue AMERICAN_BONUS_NUTRITION; + private static final ModConfigSpec.DoubleValue AMERICAN_BONUS_SATURATION; + private static final ModConfigSpec.IntValue AMERICAN_REGENERATION_DURATION_TICKS; + private static final ModConfigSpec.IntValue AMERICAN_REGENERATION_AMPLIFIER; // Moggles @@ -424,6 +438,17 @@ public final class AntarchyToolsConfig { b.pop(); + // Miner's Dream + + b.push("minersDream"); + MINERS_DREAM_ENABLED = b.comment("Master toggle. If false, the item remains craftable but cannot be used.").define("enabled", true); + MINERS_DREAM_MINIMUM_RANGE = b.comment("Minimum cave length in blocks. Clamped to [8, 256].") .defineInRange("minimumRange", 48, 8, 256); + MINERS_DREAM_MAXIMUM_RANGE = b.comment("Maximum cave length in blocks. Clamped to [8, 256].") .defineInRange("maximumRange", 96, 8, 256); + MINERS_DREAM_TORCH_SPACING = b.comment("Approximate blocks between torch placements along the cave.") .defineInRange("torchSpacing", 10, 4, 64); + MINERS_DREAM_BLOCKS_PER_TICK = b.comment("Maximum blocks removed per server tick while excavating.") .defineInRange("blocksPerTick", 150, 1, 2000); + b.pop(); + + // Miscellaneous items / consumables b.push("ductTape"); @@ -444,6 +469,14 @@ public final class AntarchyToolsConfig { .defineInRange("nightVisionSeconds", 15, 0, 600); b.pop(); + b.push("american"); + AMERICAN_ENABLED = b.comment("If false, foods cannot be Americanized with High Fructose Corn Syrup.").define("enabled", true); + AMERICAN_BONUS_NUTRITION = b.comment("Extra hunger points restored when eating an Americanized food.").defineInRange("bonusNutrition", 2, 0, 100); + AMERICAN_BONUS_SATURATION = b.comment("Extra saturation restored when eating an Americanized food.").defineInRange("bonusSaturation", 1.0D, 0.0D, 100.0D); + AMERICAN_REGENERATION_DURATION_TICKS = b.comment("Duration of the Regeneration effect granted when eating an Americanized food, in ticks.").defineInRange("regenerationDurationTicks", 60, 0, 72000); + AMERICAN_REGENERATION_AMPLIFIER = b.comment("Amplifier of the Regeneration effect granted when eating an Americanized food (0 = I).").defineInRange("regenerationAmplifier", 0, 0, 10); + b.pop(); + b.push("moggles"); MOGGLES_VISION_RADIUS = b.comment("Radius in blocks of the see-through effect (cube side = 2r+1).").defineInRange("visionRadius", 2, 1, 16); MOGGLES_VISION_MAX_LIGHT = b.comment("Maximum block light level where Moggles vision activates.") .defineInRange("visionMaxLight", 7, 0, 15); @@ -579,9 +612,20 @@ public final class AntarchyToolsConfig { static double gravityGunCooldownSeconds() { return GRAVITY_GUN_COOLDOWN_SECONDS.get(); } static double gravityGunMaxHoldDistance() { return GRAVITY_GUN_MAX_HOLD_DISTANCE.get(); } + static boolean minersDreamEnabled() { return MINERS_DREAM_ENABLED.get(); } + static int minersDreamMinimumRange() { return MINERS_DREAM_MINIMUM_RANGE.get(); } + static int minersDreamMaximumRange() { return MINERS_DREAM_MAXIMUM_RANGE.get(); } + static int minersDreamTorchSpacing() { return MINERS_DREAM_TORCH_SPACING.get(); } + static int minersDreamBlocksPerTick() { return MINERS_DREAM_BLOCKS_PER_TICK.get(); } + static double ductTapeRepairPercentPerUse() { return DUCT_TAPE_REPAIR_PERCENT_PER_USE.get(); } static double potentNyxiteInvertedDurationSeconds() { return POTENT_NYXITE_INVERTED_DURATION_SECONDS.get(); } static int corneaEarNightVisionSeconds() { return CORNEA_EAR_NIGHT_VISION_SECONDS.get(); } + static boolean americanizingEnabled() { return AMERICAN_ENABLED.get(); } + static int americanBonusNutrition() { return AMERICAN_BONUS_NUTRITION.get(); } + static double americanBonusSaturation() { return AMERICAN_BONUS_SATURATION.get(); } + static int americanRegenerationDurationTicks() { return AMERICAN_REGENERATION_DURATION_TICKS.get(); } + static int americanRegenerationAmplifier() { return AMERICAN_REGENERATION_AMPLIFIER.get(); } static int mogglesVisionRadius() { return MOGGLES_VISION_RADIUS.get(); } static int mogglesVisionMaxLight() { return MOGGLES_VISION_MAX_LIGHT.get(); } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/OuranwoodWoodTypes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyWoodTypes.java similarity index 77% rename from neoforge/src/main/java/com/craisinlord/antarchy/neoforge/OuranwoodWoodTypes.java rename to neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyWoodTypes.java index bf085257..d361610a 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/OuranwoodWoodTypes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyWoodTypes.java @@ -4,10 +4,11 @@ import com.craisinlord.antarchy.Antarchy; import net.minecraft.world.level.block.state.properties.BlockSetType; import net.minecraft.world.level.block.state.properties.WoodType; -public final class OuranwoodWoodTypes { +public final class AntarchyWoodTypes { public static final WoodType OURANWOOD = register("ouranwood"); + public static final WoodType PEACH = register("peach"); - private OuranwoodWoodTypes() { + private AntarchyWoodTypes() { } private static WoodType register(String name) { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/NeoForgeInfinityCompat.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/NeoForgeInfinityCompat.java index a2f5d37a..03fa25f9 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/NeoForgeInfinityCompat.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/NeoForgeInfinityCompat.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.neoforge; +import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompatBridge; import net.lerariemann.infinity.util.InfinityMethods; import net.lerariemann.infinity.util.teleport.WarpLogic; @@ -18,6 +19,7 @@ public final class NeoForgeInfinityCompat implements InfinityCompatBridge { try { return InfinityMethods.getRandomId(random); } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to get a random Infinity dimension id", throwable); return null; } } @@ -28,6 +30,7 @@ public final class NeoForgeInfinityCompat implements InfinityCompatBridge { WarpLogic.requestWarp(player, dimensionId, false); return true; } catch (Throwable throwable) { + Antarchy.LOGGER.error("[Antarchy] Failed to request an Infinity warp to {}", dimensionId, throwable); return false; } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 1e5af0fe..a63e4433 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -53,6 +53,7 @@ import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent; import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; +import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; import net.neoforged.neoforge.client.event.EntityRenderersEvent; import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; @@ -68,6 +69,8 @@ public final class AntarchyNeoForgeClient { private static final ResourceLocation DR_TRAYAURUS_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dr_trayaurus.png"); private static final ResourceLocation OURANWOOD_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/ouranwood.png"); private static final ResourceLocation OURANWOOD_CHEST_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/ouranwood.png"); + private static final ResourceLocation PEACH_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/peach.png"); + private static final ResourceLocation PEACH_CHEST_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/peach.png"); private static final ResourceLocation WATER_STILL = ResourceLocation.withDefaultNamespace("block/water_still"); private static final ResourceLocation WATER_FLOW = ResourceLocation.withDefaultNamespace("block/water_flow"); private static final ResourceLocation WATER_OVERLAY = ResourceLocation.withDefaultNamespace("block/water_overlay"); @@ -98,6 +101,8 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.TRIFFID.get(), context -> withParalyzedGeoLayer(new TriffidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, OURANWOOD_BOAT_TEXTURE, false)); event.registerEntityRenderer(AntarchyNeoforgeEntites.OURANWOOD_CHEST_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, OURANWOOD_CHEST_BOAT_TEXTURE, true)); + event.registerEntityRenderer(AntarchyNeoforgeEntites.PEACH_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, PEACH_BOAT_TEXTURE, false)); + event.registerEntityRenderer(AntarchyNeoforgeEntites.PEACH_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, PEACH_CHEST_BOAT_TEXTURE, true)); event.registerEntityRenderer(AntarchyNeoforgeEntites.APPLE_COW.get(), context -> withParalyzedGeoLayer(new AppleCowRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.GOLDEN_APPLE_COW.get(), context -> withParalyzedGeoLayer(new AppleCowRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.ENCHANTED_GOLDEN_APPLE_COW.get(), context -> withParalyzedGeoLayer(new AppleCowRenderer(context))); @@ -125,7 +130,10 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.TORETERROR.get(), ToreterrorRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.WATER_BOMB.get(), WaterBombRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.CHEEP.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.CheepRenderer(context))); - // event.registerEntityRenderer(AntarchyNeoforgeEntites.GLIMMER.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.GlimmerRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.DORRIE.get(), context -> new com.craisinlord.antarchy.content.client.renderer.DorrieRenderer(context)); + event.registerEntityRenderer(AntarchyNeoforgeEntites.OURANWOOD_DEER.get(), context -> new com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer(context)); + event.registerEntityRenderer(AntarchyNeoforgeEntites.GLIMMER.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.glimmer.GlimmerRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.ELKA.get(), context -> new com.craisinlord.antarchy.content.client.renderer.ElkaRenderer(context)); } @SubscribeEvent @@ -152,6 +160,8 @@ public final class AntarchyNeoForgeClient { public static void registerLayerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event) { event.registerLayerDefinition(OuranwoodBoatRenderer.boatLayer(), BoatModel::createBodyModel); event.registerLayerDefinition(OuranwoodBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel); + event.registerLayerDefinition(PeachBoatRenderer.boatLayer(), BoatModel::createBodyModel); + event.registerLayerDefinition(PeachBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel); } @SuppressWarnings({"rawtypes", "unchecked"}) @@ -206,6 +216,7 @@ public final class AntarchyNeoForgeClient { (stack, tintIndex) -> net.minecraft.world.level.GrassColor.getDefaultColor() ); event.register(new DynamicFluidContainerModel.Colors(), AntarchyNeoforgeItems.ICHOR_BUCKET.get()); + event.register(new DynamicFluidContainerModel.Colors(), AntarchyNeoforgeItems.LUMEN_BUCKET.get()); event.register(new DynamicFluidContainerModel.Colors(), AntarchyNeoforgeItems.ANTIWATER_BUCKET.get()); } @@ -214,6 +225,7 @@ public final class AntarchyNeoForgeClient { event.registerSpriteSet(AntarchyNeoforgeMisc.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.STINKY_FLY.get(), FireflyParticle.Provider::new); + event.registerSpriteSet(AntarchyNeoforgeMisc.PEACH_LEAVES_PARTICLE.get(), PeachLeavesParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); event.registerSpecial(AntarchyNeoforgeMisc.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); @@ -226,6 +238,11 @@ public final class AntarchyNeoForgeClient { event.registerSpriteSet(AntarchyNeoforgeMisc.ORANGE_ASH.get(), OrangeAshParticle.Provider::new); } + @SubscribeEvent + public static void registerMenuScreens(RegisterMenuScreensEvent event) { + event.register(AntarchyNeoforgeMisc.DORRIE_INVENTORY_MENU.get(), com.craisinlord.antarchy.content.client.screen.DorrieInventoryScreen::new); + } + @SubscribeEvent public static void registerGuiLayers(RegisterGuiLayersEvent event) { event.registerAboveAll( @@ -261,6 +278,50 @@ public final class AntarchyNeoForgeClient { @SubscribeEvent public static void registerClientExtensions(RegisterClientExtensionsEvent event) { Antarchy.LOGGER.info("[Antiwater] Registering antiwater client fluid textures still={} flow={}", ANTIWATER_STILL, ANTIWATER_FLOW); + event.registerFluidType(new IClientFluidTypeExtensions() { + @Override + public ResourceLocation getStillTexture() { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_still"); + } + + @Override + public ResourceLocation getFlowingTexture() { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_flow"); + } + + @Override + public ResourceLocation getOverlayTexture() { + return WATER_OVERLAY; + } + + @Override + public ResourceLocation getRenderOverlayTexture(Minecraft mc) { + return UNDERWATER_OVERLAY; + } + + @Override + public int getTintColor() { + return 0xFFFFFFFF; + } + + @Override + public int getTintColor(FluidState state, BlockAndTintGetter getter, net.minecraft.core.BlockPos pos) { + return 0xFFFFFFFF; + } + + @Override + public Vector3f modifyFogColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, Vector3f fluidFogColor) { + return new Vector3f(0.58F, 0.84F, 0.88F); + } + + @Override + public void modifyFogRender(Camera camera, net.minecraft.client.renderer.FogRenderer.FogMode mode, float renderDistance, float partialTick, float nearDistance, float farDistance, FogShape shape) { + RenderSystem.setShaderFogStart(0.4F); + RenderSystem.setShaderFogEnd(Math.min(farDistance, 12.0F)); + RenderSystem.setShaderFogShape(FogShape.CYLINDER); + } + }, AntarchyNeoForgeFluidTypes.LUMEN_TYPE.get()); + event.registerFluidType(new IClientFluidTypeExtensions() { @Override public ResourceLocation getStillTexture() { @@ -417,6 +478,11 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_DOOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_TRAPDOOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PEACH_LEAVES.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PEACH_HANGING_PEACH.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PEACH_DOOR.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PEACH_TRAPDOOR.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PEACH_SAPLING.get(), RenderType.cutout()); // ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_VINE.get(), RenderType.cutout()); // ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_VINE_PLANT.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout()); @@ -424,6 +490,8 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.HUSHWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CORNEA_STALK.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CORN_CROP.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.WILD_CORN.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); @@ -438,6 +506,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_FIRE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_CEILING_FIRE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIWATER_BLOCK.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.LUMEN_BLOCK.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ELYTHIA_PORTAL.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.THORAXIS_PORTAL.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/content/block/WildCornBlock.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/content/block/WildCornBlock.java new file mode 100644 index 00000000..e51b6534 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/content/block/WildCornBlock.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.neoforge.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.CornCropBlock; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; + +public final class WildCornBlock extends CornCropBlock { + public static final MapCodec CODEC = Block.simpleCodec(WildCornBlock::new); + + public WildCornBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(AGE, 3).setValue(HALF, DoubleBlockHalf.LOWER)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(Blocks.GRASS_BLOCK); + } + + @Override + protected boolean isRandomlyTicking(BlockState state) { + return false; + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + return false; + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return false; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + } + + @Override + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state) { + return new ItemStack(AntarchyObjects.CORN.get()); + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/RandomSpringMixin.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/RandomSpringMixin.java deleted file mode 100644 index d80afdaf..00000000 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/mixins/infinity/RandomSpringMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.neoforge.mixins.infinity; - -import net.lerariemann.infinity.dimensions.features.fluid_springs.RandomSpring; -import net.lerariemann.infinity.util.core.ConfigType; -import net.lerariemann.infinity.util.core.RandomProvider; -import net.minecraft.nbt.CompoundTag; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import java.util.Random; -@Mixin(value = RandomSpring.class, remap = false) -/* - * Skips bad fluid picks for Infinity random springs. - */ -public abstract class RandomSpringMixin { - @Redirect( - method = "feature()Lnet/minecraft/nbt/CompoundTag;", - at = @At( - value = "INVOKE", - target = "Lnet/lerariemann/infinity/util/core/RandomProvider;randomName(Ljava/util/Random;Lnet/lerariemann/infinity/util/core/ConfigType;)Ljava/lang/String;" - ), - remap = false - ) - private String antarchy$useFluidIdForSpring(RandomProvider provider, Random random, ConfigType configType) { - if (configType != ConfigType.FLUIDS) { - return provider.randomName(random, configType); - } - - CompoundTag fluidTag = provider.randomElement(random, configType); - String fluidId = fluidTag.getString("fluidName"); - if (!fluidId.isEmpty()) { - return fluidId; - } - return fluidTag.getString("Name"); - } -} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index e12edd0a..7aa76c0b 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.CustomBrewingRecipes; import com.craisinlord.antarchy.content.block.DuctTapeBlock; import com.craisinlord.antarchy.content.block.PotentNyxiteBlock; import com.craisinlord.antarchy.content.bloodglass.BloodglassAccess; @@ -36,6 +37,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.tags.FluidTags; import net.minecraft.world.item.*; import net.minecraft.world.item.alchemy.Potions; +import net.neoforged.neoforge.common.brewing.BrewingRecipe; import net.minecraft.world.level.block.ComposterBlock; import net.minecraft.world.level.block.DispenserBlock; import net.minecraft.world.level.block.RotatedPillarBlock; @@ -57,6 +59,8 @@ import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; import net.neoforged.neoforge.event.level.BlockEvent; import net.neoforged.neoforge.event.tick.EntityTickEvent; import net.neoforged.neoforge.event.tick.PlayerTickEvent; +import net.neoforged.neoforge.event.tick.ServerTickEvent; +import com.craisinlord.antarchy.content.item.MinersDreamExcavationManager; import net.neoforged.neoforge.fluids.FluidInteractionRegistry; import net.neoforged.neoforge.network.PacketDistributor; @@ -91,6 +95,7 @@ public final class AntarchyNeoForgeEvents { NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickDreadAndIchor); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickScorpionWhips); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickDreamSandLowGravity); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickMinersDreamExcavations); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleAntiwaterDamage); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleAntiwaterFall); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleDreamSandFall); @@ -859,6 +864,12 @@ public final class AntarchyNeoForgeEvents { } } + static void tickMinersDreamExcavations(ServerTickEvent.Post event) { + for (ServerLevel level : event.getServer().getAllLevels()) { + MinersDreamExcavationManager.tick(level); + } + } + static void tickDreamSandLowGravity(EntityTickEvent.Post event) { if (!(event.getEntity() instanceof LivingEntity livingEntity)) { return; @@ -971,6 +982,50 @@ public final class AntarchyNeoForgeEvents { } static void registerBrewingRecipes(RegisterBrewingRecipesEvent event) { + net.minecraft.tags.TagKey rootsTag = net.minecraft.tags.TagKey.create( + net.minecraft.core.registries.Registries.ITEM, + net.minecraft.resources.ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "roots") + ); + event.getBuilder().addRecipe(new BrewingRecipe( + net.minecraft.world.item.crafting.Ingredient.of(Items.POTION), + net.minecraft.world.item.crafting.Ingredient.of(AntarchyNeoforgeItems.CORN.get()), + new ItemStack(AntarchyNeoforgeItems.HIGH_FRUCTOSE_CORN_SYRUP.get()) + ) { + @Override + public boolean isInput(ItemStack stack) { + return stack.is(Items.POTION) && stack.getOrDefault(net.minecraft.core.component.DataComponents.POTION_CONTENTS, net.minecraft.world.item.alchemy.PotionContents.EMPTY).is(net.minecraft.world.item.alchemy.Potions.WATER); + } + + @Override + public boolean isIngredient(ItemStack stack) { + return stack.is(AntarchyNeoforgeItems.CORN.get()); + } + + @Override + public ItemStack getOutput(ItemStack input, ItemStack ingredient) { + return CustomBrewingRecipes.getOutput(input, ingredient); + } + }); + event.getBuilder().addRecipe(new BrewingRecipe( + net.minecraft.world.item.crafting.Ingredient.of(AntarchyNeoforgeItems.HIGH_FRUCTOSE_CORN_SYRUP.get()), + net.minecraft.world.item.crafting.Ingredient.of(rootsTag), + new ItemStack(AntarchyNeoforgeItems.ROOT_BEER.get()) + ) { + @Override + public boolean isInput(ItemStack stack) { + return stack.is(AntarchyNeoforgeItems.HIGH_FRUCTOSE_CORN_SYRUP.get()); + } + + @Override + public boolean isIngredient(ItemStack stack) { + return stack.is(rootsTag); + } + + @Override + public ItemStack getOutput(ItemStack input, ItemStack ingredient) { + return CustomBrewingRecipes.getOutput(input, ingredient); + } + }); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.LUCID_EYE.get(), AntarchyNeoforgeMisc.INVERSION); event.getBuilder().addMix(AntarchyNeoforgeMisc.INVERSION, Items.REDSTONE, AntarchyNeoforgeMisc.LONG_INVERSION); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.STINK_BUG.get(), AntarchyNeoforgeMisc.STINKY_POTION); @@ -1075,6 +1130,16 @@ public final class AntarchyNeoForgeEvents { if (state.is(AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_WOOD.get())) { event.setFinalState(AntarchyNeoforgeBlocks.STRIPPED_OURANWOOD_WOOD.get().defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS))); + return; + } + + if (state.is(AntarchyNeoforgeBlocks.PEACH_LOG.get())) { + event.setFinalState(AntarchyNeoforgeBlocks.STRIPPED_PEACH_LOG.get().defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS))); + return; + } + + if (state.is(AntarchyNeoforgeBlocks.PEACH_WOOD.get())) { + event.setFinalState(AntarchyNeoforgeBlocks.STRIPPED_PEACH_WOOD.get().defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS))); } } @@ -1119,8 +1184,15 @@ public final class AntarchyNeoForgeEvents { ); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.BLUSH_MOSS_BLOCK.get().asItem(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.BLUSH_MOSS_CARPET.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.HUSHWEED.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.CORNEA_EAR.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.PEACH_LEAVES.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.PEACH_SAPLING_ITEM.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.CORN.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.CORN_SEEDS.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.PEACH.get(), 0.65f); }); } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index a77b7f12..6b591295 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -10,8 +10,10 @@ import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; import com.craisinlord.antarchy.content.portal.PermanentPortalType; -import com.craisinlord.antarchy.neoforge.OuranwoodWoodTypes; +import com.craisinlord.antarchy.neoforge.content.block.WildCornBlock; +import com.craisinlord.antarchy.neoforge.AntarchyWoodTypes; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluidType; import com.mojang.serialization.MapCodec; import net.minecraft.core.Direction; @@ -84,13 +86,53 @@ public final class AntarchyNeoforgeBlocks { public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", - () -> new StandingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + () -> new StandingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); public static final DeferredBlock OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign", - () -> new WallSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + () -> new WallSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); public static final DeferredBlock OURANWOOD_HANGING_SIGN = BLOCKS.register("ouranwood_hanging_sign", - () -> new CeilingHangingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + () -> new CeilingHangingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); public static final DeferredBlock OURANWOOD_WALL_HANGING_SIGN = BLOCKS.register("ouranwood_wall_hanging_sign", - () -> new WallHangingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + () -> new WallHangingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + public static final DeferredBlock PEACH_LOG = BLOCKS.register("peach_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + public static final DeferredBlock PEACH_WOOD = BLOCKS.register("peach_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + public static final DeferredBlock STRIPPED_PEACH_LOG = BLOCKS.register("stripped_peach_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); + public static final DeferredBlock STRIPPED_PEACH_WOOD = BLOCKS.register("stripped_peach_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); + public static final DeferredBlock PEACH_PLANKS = BLOCKS.register("peach_planks", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); + public static final DeferredBlock PEACH_STAIRS = BLOCKS.register("peach_stairs", + () -> new StairBlock(PEACH_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); + public static final DeferredBlock PEACH_SLAB = BLOCKS.register("peach_slab", + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); + public static final DeferredBlock PEACH_FENCE = BLOCKS.register("peach_fence", + () -> new FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); + public static final DeferredBlock PEACH_FENCE_GATE = BLOCKS.register("peach_fence_gate", + () -> new FenceGateBlock(WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE))); + public static final DeferredBlock PEACH_DOOR = BLOCKS.register("peach_door", + () -> new DoorBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR))); + public static final DeferredBlock PEACH_TRAPDOOR = BLOCKS.register("peach_trapdoor", + () -> new TrapDoorBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR))); + public static final DeferredBlock PEACH_PRESSURE_PLATE = BLOCKS.register("peach_pressure_plate", + () -> new PressurePlateBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE))); + public static final DeferredBlock PEACH_BUTTON = BLOCKS.register("peach_button", + () -> new ButtonBlock(BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON))); + public static final DeferredBlock PEACH_LEAVES = BLOCKS.register("peach_leaves", + () -> new PeachLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); + public static final DeferredBlock PEACH_HANGING_PEACH = BLOCKS.register("hanging_peach", + () -> new HangingPeachBlock(BlockBehaviour.Properties.of().noOcclusion().instabreak())); + public static final DeferredBlock PEACH_SAPLING = BLOCKS.register("peach_sapling", + () -> new com.craisinlord.antarchy.content.block.PeachSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + public static final DeferredBlock PEACH_SIGN = BLOCKS.register("peach_sign", + () -> new StandingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + public static final DeferredBlock PEACH_WALL_SIGN = BLOCKS.register("peach_wall_sign", + () -> new WallSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + public static final DeferredBlock PEACH_HANGING_SIGN = BLOCKS.register("peach_hanging_sign", + () -> new CeilingHangingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + public static final DeferredBlock PEACH_WALL_HANGING_SIGN = BLOCKS.register("peach_wall_hanging_sign", + () -> new WallHangingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); public static final DeferredBlock DUPLICATOR_SAPLING = BLOCKS.register("duplicator_sapling", () -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); public static final DeferredBlock DUCT_TAPE = BLOCKS.register("duct_tape", @@ -189,6 +231,10 @@ public final class AntarchyNeoforgeBlocks { () -> new UmbralMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); public static final DeferredBlock UMBRAL_MOSS_CARPET = BLOCKS.register("umbral_moss_carpet", () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); + public static final DeferredBlock BLUSH_MOSS_BLOCK = BLOCKS.register("blush_moss_block", + () -> new BlushMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); + public static final DeferredBlock BLUSH_MOSS_CARPET = BLOCKS.register("blush_moss_carpet", + () -> new BlushMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); public static final DeferredBlock DREAM_TORCH = BLOCKS.register("dream_torch", () -> new DreamTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_TORCH))); public static final DeferredBlock DREAM_WALL_TORCH = BLOCKS.register("dream_wall_torch", @@ -224,6 +270,13 @@ public final class AntarchyNeoforgeBlocks { public static final DeferredBlock ANTIWATER_BLOCK = BLOCKS.register("antiwater", () -> new com.craisinlord.antarchy.content.fluid.AntiwaterLiquidBlock((FlowingFluid) AntarchyNeoforgeMisc.ANTIWATER.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); + public static final DeferredBlock LUMEN_BLOCK = BLOCKS.register("lumen", + () -> new LumenLiquidBlock((FlowingFluid) AntarchyNeoforgeMisc.LUMEN.get(), + BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 9).noLootTable())); + public static final DeferredBlock LUMEN_FROGLIGHT = BLOCKS.register("lumen_froglight", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OCHRE_FROGLIGHT))); + public static final DeferredBlock ROSEATE_FROGLIGHT = BLOCKS.register("roseate_froglight", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OCHRE_FROGLIGHT))); public static final DeferredBlock RED_ANT_NEST = BLOCKS.register("red_ant_nest", () -> new AntNestBlock( AntarchyNeoforgeEntites.RED_ANT, @@ -291,6 +344,10 @@ public final class AntarchyNeoforgeBlocks { () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); public static final DeferredBlock CORNEA_STALK = BLOCKS.register("cornea_stalk", () -> new CorneaStalkBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SWEET_BERRY_BUSH).randomTicks())); + public static final DeferredBlock CORN_CROP = BLOCKS.register("corn_crop", + () -> new CornCropBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).randomTicks().noCollission().noOcclusion())); + public static final DeferredBlock WILD_CORN = BLOCKS.register("wild_corn", + () -> new WildCornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).noCollission().noOcclusion())); public static final DeferredBlock FALLEN_KING_CROWN = BLOCKS.register("fallen_king_crown", () -> new Block(BlockBehaviour.Properties.of() .strength(0.2F) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index d67baf59..e3514bee 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.neoforge.registry; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.item.ultimate.UltimateGearHelper; +import com.craisinlord.antarchy.content.CreativeTabOrder; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.*; @@ -10,7 +11,6 @@ import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; -import java.util.Comparator; public class AntarchyNeoforgeCreativeModeTabs { private AntarchyNeoforgeCreativeModeTabs() {} @@ -35,15 +35,17 @@ public class AntarchyNeoforgeCreativeModeTabs { java.util.ArrayList sortedItems = new java.util.ArrayList<>(); for (var holder : AntarchyNeoforgeItems.ITEMS.getEntries()) { Item item = holder.get(); - if (item != Items.AIR) sortedItems.add(item); + if (item != Items.AIR && item != AntarchyNeoforgeItems.GLIMMER_BOTTLE.get()) sortedItems.add(item); } - sortedItems.sort(Comparator - .comparingInt(AntarchyNeoforgeCreativeModeTabs::creativeTabGroup) - .thenComparing(item -> BuiltInRegistries.ITEM.getKey(item).getPath())); + sortedItems.sort(CreativeTabOrder.COMPARATOR); int n = sortedItems.size(); for (int i = Math.max(0, n - 20); i < n; i++) { Item it = sortedItems.get(i); } + for (com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant variant : com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.values()) { + event.accept(com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(variant)); + } + sortedItems.forEach(event::accept); } @@ -79,11 +81,17 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.BASILISK_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.EMPEROR_SCORPION_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.TORETERROR_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.DORRIE_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.OURANWOOD_DEER_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.GLIMMER_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.ELKA_SPAWN_EGG.get()); } if (event.getTabKey() == CreativeModeTabs.NATURAL_BLOCKS) { event.accept(AntarchyNeoforgeItems.OURANWOOD_LEAVES_ITEM.get()); event.accept(AntarchyNeoforgeItems.OURANWOOD_ACORN.get()); + event.accept(AntarchyNeoforgeItems.PEACH_LEAVES_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_SAPLING_ITEM.get()); // event.accept(AntarchyNeoforgeItems.OURANWOOD_VINE_ITEM.get()); event.accept(AntarchyNeoforgeItems.DUPLICATOR_LOG_ITEM.get()); event.accept(AntarchyNeoforgeItems.DUPLICATOR_SAPLING_ITEM.get()); @@ -102,6 +110,9 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.DEEPSLATE_URANIUM_ORE_ITEM.get()); event.accept(AntarchyNeoforgeItems.TITANIUM_ORE_ITEM.get()); event.accept(AntarchyNeoforgeItems.DEEPSLATE_TITANIUM_ORE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.LUMEN_FROGLIGHT_ITEM.get()); + event.accept(AntarchyNeoforgeItems.ROSEATE_FROGLIGHT_ITEM.get()); + event.accept(AntarchyNeoforgeItems.CORN_SEEDS.get()); } if (event.getTabKey() == CreativeModeTabs.TOOLS_AND_UTILITIES) { @@ -110,6 +121,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.BILE_BUCKET.get()); event.accept(AntarchyNeoforgeItems.ICHOR_BUCKET.get()); event.accept(AntarchyNeoforgeItems.ANTIWATER_BUCKET.get()); + event.accept(AntarchyNeoforgeItems.LUMEN_BUCKET.get()); event.accept(AntarchyNeoforgeItems.CLOUD_BUCKET.get()); event.accept(AntarchyNeoforgeItems.REVERIE_BOTTLE.get()); event.accept(AntarchyNeoforgeItems.ULTIMATE_PICKAXE.get()); @@ -137,6 +149,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.LUCID_EYE.get()); event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_SHARD.get()); event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_APPLE.get()); + event.accept(AntarchyNeoforgeItems.SPIRIT_APPLE.get()); event.accept(AntarchyNeoforgeItems.MANTIS_CLAW.get()); event.accept(AntarchyNeoforgeItems.KING_SCALE.get()); event.accept(AntarchyNeoforgeItems.QUEEN_SCALE.get()); @@ -149,6 +162,12 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.KRAKEN_TOOTH.get()); event.accept(AntarchyNeoforgeItems.JUMPY_BUG_LEG.get()); event.accept(AntarchyNeoforgeItems.CORNEA_EAR.get()); + event.accept(AntarchyNeoforgeItems.CORN.get()); + event.accept(AntarchyNeoforgeItems.HIGH_FRUCTOSE_CORN_SYRUP.get()); + event.accept(AntarchyNeoforgeItems.PEACH.get()); + event.accept(AntarchyNeoforgeItems.RAW_CORNDOG.get()); + event.accept(AntarchyNeoforgeItems.COOKED_CORNDOG.get()); + event.accept(AntarchyNeoforgeItems.ROOT_BEER.get()); event.accept(AntarchyNeoforgeItems.RAINBOW_SUGAR.get()); event.accept(AntarchyNeoforgeItems.BIG_BERTHA_BLADE.get()); event.accept(AntarchyNeoforgeItems.BIG_BERTHA_HANDLE.get()); @@ -175,6 +194,23 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.OURANWOOD_BUTTON_ITEM.get()); event.accept(AntarchyNeoforgeItems.OURANWOOD_SIGN_ITEM.get()); event.accept(AntarchyNeoforgeItems.OURANWOOD_HANGING_SIGN_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_LOG_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_WOOD_ITEM.get()); + event.accept(AntarchyNeoforgeItems.STRIPPED_PEACH_LOG_ITEM.get()); + event.accept(AntarchyNeoforgeItems.STRIPPED_PEACH_WOOD_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_PLANKS_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_STAIRS_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_SLAB_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_FENCE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_FENCE_GATE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_BOAT.get()); + event.accept(AntarchyNeoforgeItems.PEACH_CHEST_BOAT.get()); + event.accept(AntarchyNeoforgeItems.PEACH_DOOR_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_TRAPDOOR_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_PRESSURE_PLATE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_BUTTON_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_SIGN_ITEM.get()); + event.accept(AntarchyNeoforgeItems.PEACH_HANGING_SIGN_ITEM.get()); event.accept(AntarchyNeoforgeItems.SHELLSTONE_ITEM.get()); event.accept(AntarchyNeoforgeItems.SHELLSTONE_STAIRS_ITEM.get()); event.accept(AntarchyNeoforgeItems.SHELLSTONE_SLAB_ITEM.get()); @@ -214,9 +250,13 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.ANTIMETAL_SCAFFOLDING_ITEM.get()); event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_BLOCK_ITEM.get()); event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_CARPET_ITEM.get()); + event.accept(AntarchyNeoforgeItems.BLUSH_MOSS_BLOCK_ITEM.get()); + event.accept(AntarchyNeoforgeItems.BLUSH_MOSS_CARPET_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_TORCH_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_LANTERN_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_CAMPFIRE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.LUMEN_FROGLIGHT_ITEM.get()); + event.accept(AntarchyNeoforgeItems.ROSEATE_FROGLIGHT_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_SAND_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_SANDSTONE_ITEM.get()); event.accept(AntarchyNeoforgeItems.CHISELED_DREAM_SANDSTONE_ITEM.get()); @@ -308,139 +348,10 @@ public class AntarchyNeoforgeCreativeModeTabs { } private static int creativeTabGroup(net.minecraft.world.item.Item item) { - String path = BuiltInRegistries.ITEM.getKey(item).getPath(); - return switch (path) { - // 0 - Ouranwood blocks - case "ouranwood_log", "ouranwood_wood", "mossy_ouranwood_log", "mossy_ouranwood_wood", - "stripped_ouranwood_log", "stripped_ouranwood_wood", "duplicator_log", - "ouranwood_planks", "ouranwood_stairs", "ouranwood_slab", - "ouranwood_fence", "ouranwood_fence_gate", - "ouranwood_door", "ouranwood_trapdoor", - "ouranwood_pressure_plate", "ouranwood_button", - "ouranwood_sign", "ouranwood_hanging_sign", - "ouranwood_boat", "ouranwood_chest_boat" -> 0; + return CreativeTabOrder.group(item); + } - // 1 - Nyxite blocks - case "nyxite", "polished_nyxite", "chiseled_nyxite", "nyxite_bricks", - "nyxite_stairs", "nyxite_slab", "nyxite_wall", - "polished_nyxite_stairs", "polished_nyxite_slab", "polished_nyxite_wall", - "nyxite_brick_stairs", "nyxite_brick_slab", "nyxite_brick_wall", - "pale_nyxite", "nyxite_spike", "potent_nyxite" -> 1; - - // 2 - Shellstone blocks - case "shellstone", "polished_shellstone", "shellstone_bricks", "chiseled_shellstone", - "mossy_shellstone_bricks", "cracked_shellstone_bricks", - "shellstone_stairs", "shellstone_slab", "shellstone_wall", - "polished_shellstone_stairs", "polished_shellstone_slab", "polished_shellstone_wall", - "shellstone_brick_stairs", "shellstone_brick_slab", "shellstone_brick_wall", - "mossy_shellstone_brick_stairs", "mossy_shellstone_brick_slab", "mossy_shellstone_brick_wall" -> 2; - - // 3 - Antimetal blocks - case "antimetal", "polished_antimetal" -> 3; - - // 4 - Dream sand and blocks - case "dream_sand", "dream_sandstone", "chiseled_dream_sandstone", - "cut_dream_sandstone", "smooth_dream_sandstone", - "dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall", - "smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab", - "cut_dream_sandstone_slab" -> 4; - - // 5 - Umbral moss - case "umbral_moss_block", "umbral_moss_carpet" -> 4; - - // 6 - All ores + metal storage/decorative blocks - case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", - "uranium_block", "titanium_block", - "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", - "cut_uranium_stairs", "cut_titanium_stairs", - "chiseled_uranium", "chiseled_titanium", - "uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor", - "uranium_bars", "titanium_bars", "uranium_bulb", "titanium_bulb" -> 6; - - // 7 - Raw ores - case "raw_uranium", "raw_titanium", "raw_uranium_scrap", "raw_titanium_scrap", - "raw_uranium_block", "raw_titanium_block" -> 7; - - // 8 - Blood crystal blocks (not the shard ingredient) - case "blood_crystal_block", "small_blood_crystal_bud", "medium_blood_crystal_bud", - "large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster", - "myrmite", "broodstone", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8; - - // 9 - Ouranwood leaves - case "ouranwood_leaves" -> 9; - - // 10 - Saplings / seeds - case "duplicator_sapling", "ouranwood_acorn" -> 10; - - // 11 - Plants and flowers - case "orange_milkweed", "pink_milkweed", "hushweed", "amber_lichen", "creepvine", - "triffid_goo_block", "wasp_nest", - "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest", "termite_nest" -> 11; - - // 12 - Dream lighting - case "dream_torch", "dream_lantern", "dream_campfire" -> 12; - - // 13 - Antimetal scaffolding - case "antimetal_scaffolding" -> 13; - - // 14 - Infested blocks - case "infested_rooted_dirt", "infested_coarse_dirt", "bed_bug_egg", - "creeping_horror_egg", "lurking_terror_egg" -> 14; - - // 15 - Tools - case "ultimate_pickaxe", "ultimate_axe", "ultimate_shovel", "ultimate_hoe", - "duct_tape", "diamond_minecart", "gravity_sculk_sensor" -> 15; - - // 16 - Liquid buckets - case "bile_bucket", "ichor_bucket", "antiwater_bucket", "cloud_bucket" -> 16; - - // 17 - Misc wearables / gadgets - case "moggles", "brutalfly_elytra", "fallen_king_crown", "jumpy_boots" -> 17; - - // 18 - Weapons - case "battle_axe", "basilisk_dagger", "squidzooka", "shrink_ray", "growth_ray", - "gravity_gun", "water_cannon", "nightmare_sword", "lucid_pearl", "scorpion_whip", "blood_crystal_katana", - "big_bertha", "big_bertha_blade", "big_bertha_handle", "big_bertha_hilt", - "ultimate_sword", "ultimate_mace" -> 18; - - // 19 - Armor sets - case "primordial_helmet", "primordial_chestplate", - "primordial_leggings", "primordial_boots", - "blood_crystal_helmet", "blood_crystal_chestplate", - "blood_crystal_leggings", "blood_crystal_boots", - "nightmare_helmet", "nightmare_chestplate", - "nightmare_leggings", "nightmare_boots", - "ultimate_helmet", "ultimate_chestplate", - "ultimate_leggings", "ultimate_boots" -> 19; - - // 20 - Ranged weapons - case "ultimate_bow", "ultimate_crossbow" -> 20; - - // 21 - Foods - case "cloud_shark_fin_soup", "mud_pie", "rainbow_sugar", - "blood_crystal_apple" -> 21; - - // 22 - Crafting ingredients - case "blood_crystal_shard", "cloud_shark_fin", "basilisk_fang", "kraken_tooth", - "emperor_scorpion_stinger", "nightmare_scale", "molevore_nose", - "moleworm", "uranium_nugget", "titanium_nugget", - "uranium_ingot", "titanium_ingot", "lucid_eye", - "mantis_claw", "jumpy_bug_leg", "brutalfly_wing", "cornea_ear", - "primordial_scute", "triffid_goo", "vortex_eye", - "king_scale", "queen_scale", "chiten", "stink_bug" -> 22; - - // 23 - Arrows (reserved for future arrow types) - - // 24 - Potions - case "reverie_bottle" -> 24; - - // 25 - Spawn eggs - default -> { - if (!path.endsWith("_spawn_egg")) { - org.slf4j.LoggerFactory.getLogger("Antarchy/CreativeTab").warn("Unmatched creative tab item: '{}'", path); - } - yield path.endsWith("_spawn_egg") ? 25 : 99; - } - }; + private static int creativeTabSubOrder(net.minecraft.world.item.Item item) { + return CreativeTabOrder.subOrder(item); } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 372f0a31..0fbef14c 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -13,7 +13,9 @@ import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; -import com.craisinlord.antarchy.content.entity.GlimmerEntity; +import com.craisinlord.antarchy.content.entity.ElkaEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity; +import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; import com.craisinlord.antarchy.content.entity.JumpyBugEntity; @@ -26,6 +28,8 @@ import com.craisinlord.antarchy.content.entity.MolevoreEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.PeachBoatEntity; +import com.craisinlord.antarchy.content.entity.PeachChestBoatEntity; import com.craisinlord.antarchy.content.entity.ReverieEntity; import com.craisinlord.antarchy.content.entity.ScorpionEntity; import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; @@ -115,6 +119,18 @@ public final class AntarchyNeoforgeEntites { .clientTrackingRange(10) .updateInterval(10) .build("ouranwood_chest_boat")); + public static final DeferredHolder, EntityType> PEACH_BOAT_ENTITY = ENTITY_TYPES.register("peach_boat", + () -> EntityType.Builder.of(PeachBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("peach_boat")); + public static final DeferredHolder, EntityType> PEACH_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("peach_chest_boat", + () -> EntityType.Builder.of(PeachChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("peach_chest_boat")); public static final DeferredHolder, EntityType> MOLEVORE = ENTITY_TYPES.register("molevore", () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) .sized(1.95F, 1.1F) @@ -283,11 +299,26 @@ public final class AntarchyNeoforgeEntites { .sized(1.0F, 1.2F) .clientTrackingRange(8) .build("cheep")); - // public static final DeferredHolder, EntityType> GLIMMER = ENTITY_TYPES.register("glimmer", - // () -> EntityType.Builder.of(GlimmerEntity::new, MobCategory.CREATURE) - // .sized(0.9F, 1.4F) - // .clientTrackingRange(8) - // .build("glimmer")); + public static final DeferredHolder, EntityType> DORRIE = ENTITY_TYPES.register("dorrie", + () -> EntityType.Builder.of(DorrieEntity::new, MobCategory.CREATURE) + .sized(1.6F, 1.4F) + .clientTrackingRange(10) + .build("dorrie")); + public static final DeferredHolder, EntityType> OURANWOOD_DEER = ENTITY_TYPES.register("ouranwood_deer", + () -> EntityType.Builder.of(OuranwoodDeerEntity::new, MobCategory.CREATURE) + .sized(0.9F, 1.4F) + .clientTrackingRange(8) + .build("ouranwood_deer")); + public static final DeferredHolder, EntityType> GLIMMER = ENTITY_TYPES.register("glimmer", + () -> EntityType.Builder.of(GlimmerEntity::new, MobCategory.CREATURE) + .sized(0.9F, 1.4F) + .clientTrackingRange(8) + .build("glimmer")); + public static final DeferredHolder, EntityType> ELKA = ENTITY_TYPES.register("elka", + () -> EntityType.Builder.of(ElkaEntity::new, MobCategory.CREATURE) + .sized(2.2F, 3.5F) + .clientTrackingRange(10) + .build("elka")); public static final DeferredHolder, EntityType> UPWARD_FALLING_BLOCK = ENTITY_TYPES.register("upward_falling_block", () -> EntityType.Builder.of( UpwardFallingBlockEntity::new, MobCategory.MISC) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java index 08e38c1b..0fc3ca9f 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java @@ -73,7 +73,10 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.MOLEWORM.get(), MolewormEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.MOLEVORE.get(), MolevoreEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build()); - // event.put(AntarchyNeoforgeEntites.GLIMMER.get(), com.craisinlord.antarchy.content.entity.GlimmerEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.DORRIE.get(), com.craisinlord.antarchy.content.entity.DorrieEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.GLIMMER.get(), com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.ELKA.get(), ElkaEntity.createAttributes().build()); } private static AttributeSupplier.Builder buildAntAttributes(double health, double speed, double attackDamage) { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index d253f105..7647b884 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -158,6 +158,21 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem OURANWOOD_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_BUTTON); public static final DeferredItem OURANWOOD_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_LEAVES); public static final DeferredItem OURANWOOD_ACORN = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK); + public static final DeferredItem PEACH_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_LOG); + public static final DeferredItem PEACH_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_WOOD); + public static final DeferredItem STRIPPED_PEACH_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STRIPPED_PEACH_LOG); + public static final DeferredItem STRIPPED_PEACH_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STRIPPED_PEACH_WOOD); + public static final DeferredItem PEACH_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_PLANKS); + public static final DeferredItem PEACH_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_STAIRS); + public static final DeferredItem PEACH_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_SLAB); + public static final DeferredItem PEACH_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_FENCE); + public static final DeferredItem PEACH_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_FENCE_GATE); + public static final DeferredItem PEACH_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_DOOR); + public static final DeferredItem PEACH_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_TRAPDOOR); + public static final DeferredItem PEACH_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_PRESSURE_PLATE); + public static final DeferredItem PEACH_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_BUTTON); + public static final DeferredItem PEACH_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_LEAVES); + public static final DeferredItem PEACH_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PEACH_SAPLING); // public static final DeferredItem OURANWOOD_VINE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_VINE); public static final DeferredItem ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ORANGE_MILKWEED); public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PINK_MILKWEED); @@ -169,6 +184,14 @@ public final class AntarchyNeoforgeItems { () -> new OuranwoodBoatOnlyItem(AntarchyNeoforgeEntites.OURANWOOD_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); public static final DeferredItem OURANWOOD_CHEST_BOAT = ITEMS.register("ouranwood_chest_boat", () -> new OuranwoodChestBoatItem(AntarchyNeoforgeEntites.OURANWOOD_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem PEACH_SIGN_ITEM = ITEMS.register("peach_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyNeoforgeBlocks.PEACH_SIGN.get(), AntarchyNeoforgeBlocks.PEACH_WALL_SIGN.get())); + public static final DeferredItem PEACH_HANGING_SIGN_ITEM = ITEMS.register("peach_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyNeoforgeBlocks.PEACH_HANGING_SIGN.get(), AntarchyNeoforgeBlocks.PEACH_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + public static final DeferredItem PEACH_BOAT = ITEMS.register("peach_boat", + () -> new PeachBoatOnlyItem(AntarchyNeoforgeEntites.PEACH_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem PEACH_CHEST_BOAT = ITEMS.register("peach_chest_boat", + () -> new PeachChestBoatItem(AntarchyNeoforgeEntites.PEACH_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); public static final DeferredItem DUPLICATOR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING); public static final DeferredItem RED_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.RED_ANT_NEST); public static final DeferredItem BROWN_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROWN_ANT_NEST); @@ -265,10 +288,14 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POTENT_NYXITE); public static final DeferredItem UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK); public static final DeferredItem UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET); + public static final DeferredItem BLUSH_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BLUSH_MOSS_BLOCK); + public static final DeferredItem BLUSH_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BLUSH_MOSS_CARPET); public static final DeferredItem DREAM_TORCH_ITEM = ITEMS.register("dream_torch", () -> new StandingAndWallBlockItem(AntarchyNeoforgeBlocks.DREAM_TORCH.get(), AntarchyNeoforgeBlocks.DREAM_WALL_TORCH.get(), new Item.Properties(), net.minecraft.core.Direction.UP)); public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_LANTERN); public static final DeferredItem DREAM_CAMPFIRE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_CAMPFIRE); + public static final DeferredItem LUMEN_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LUMEN_FROGLIGHT); + public static final DeferredItem ROSEATE_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROSEATE_FROGLIGHT); public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BED_BUG_EGG); public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.WASP_NEST); public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.HUSHWEED); @@ -278,6 +305,8 @@ public final class AntarchyNeoforgeItems { () -> new BucketItem(AntarchyNeoforgeMisc.ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket", () -> new BucketItem(AntarchyNeoforgeMisc.ANTIWATER.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + public static final DeferredItem LUMEN_BUCKET = ITEMS.register("lumen_bucket", + () -> new BucketItem(AntarchyNeoforgeMisc.LUMEN.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem CLOUD_BUCKET = ITEMS.register("cloud_bucket", () -> new com.craisinlord.antarchy.content.item.CloudBucketItem(AntarchyNeoforgeBlocks.CLOUD_BLOCK.get(), new Item.Properties().craftRemainder(Items.BUCKET))); public static final DeferredItem BLOOD_CRYSTAL_SHARD = ITEMS.register("blood_crystal_shard", @@ -327,6 +356,59 @@ public final class AntarchyNeoforgeItems { .nutrition(2) .saturationModifier(0.4F) .build()))); + public static final DeferredItem CORN = ITEMS.register("corn", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(3) + .saturationModifier(0.6F) + .build()))); + public static final DeferredItem CORN_SEEDS = ITEMS.register("corn_seeds", + () -> new ItemNameBlockItem(AntarchyNeoforgeBlocks.CORN_CROP.get(), new Item.Properties())); + public static final DeferredItem RAW_VENISON = ITEMS.register("raw_venison", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(2) + .saturationModifier(0.3F) + .build()))); + public static final DeferredItem COOKED_VENISON = ITEMS.register("cooked_venison", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(6) + .saturationModifier(0.8F) + .build()))); + public static final DeferredItem PEACH = ITEMS.register("peach", + () -> new PeachItem()); + public static final DeferredItem RAW_CORNDOG = ITEMS.register("raw_corndog", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.7F) + .build()))); + public static final DeferredItem COOKED_CORNDOG = ITEMS.register("cooked_corndog", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(14) + .saturationModifier(1.1F) + .build()))); + public static final DeferredItem HIGH_FRUCTOSE_CORN_SYRUP = ITEMS.register("high_fructose_corn_syrup", + () -> new HighFructoseCornSyrupItem(new Item.Properties() + .stacksTo(16) + .food(new FoodProperties.Builder() + .nutrition(0) + .saturationModifier(0.0F) + .alwaysEdible() + .build()))); + public static final DeferredItem ROOT_BEER = ITEMS.register("root_beer", + () -> new RootBeerItem(new Item.Properties() + .stacksTo(16) + .food(new FoodProperties.Builder() + .nutrition(4) + .saturationModifier(0.4F) + .effect(() -> new MobEffectInstance(MobEffects.REGENERATION, 100, 0), 1.0F) + .alwaysEdible() + .build()))); public static final DeferredItem TRIFFID_GOO = ITEMS.registerSimpleItem("triffid_goo", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem VORTEX_EYE = ITEMS.register("vortex_eye", @@ -457,6 +539,8 @@ public final class AntarchyNeoforgeItems { )); public static final DeferredItem GRAVITY_GUN = ITEMS.register("gravity_gun", () -> new GravityGunItem(new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant())); + public static final DeferredItem MINERS_DREAM = ITEMS.register("miners_dream", + () -> new MinersDreamItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); public static final DeferredItem SQUIDZOOKA = ITEMS.register("squidzooka", () -> new SquidzookaItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); public static final DeferredItem BATTLE_AXE = ITEMS.register("battle_axe", @@ -480,8 +564,22 @@ public final class AntarchyNeoforgeItems { // Spawn eggs public static final DeferredItem EASTER_BUNNY_SPAWN_EGG = ITEMS.register("easter_bunny_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.EASTER_BUNNY, 0xFFF2B2, 0xFF85B5, new Item.Properties())); - // public static final DeferredItem GLIMMER_SPAWN_EGG = ITEMS.register("glimmer_spawn_egg", - // () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.GLIMMER, 0xBEEFFF, 0x6FD8FF, new Item.Properties())); + public static final DeferredItem DORRIE_SPAWN_EGG = ITEMS.register("dorrie_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.DORRIE, 0x6F8CFF, 0xD2F2FF, new Item.Properties())); + public static final DeferredItem OURANWOOD_DEER_SPAWN_EGG = ITEMS.register("ouranwood_deer_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.OURANWOOD_DEER, 0x8A6D4B, 0xE8D9B5, new Item.Properties())); + public static final DeferredItem GLIMMER_SPAWN_EGG = ITEMS.register("glimmer_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.GLIMMER, 0x7DFFFF, 0x2AC7D0, new Item.Properties())); + public static final DeferredItem ELKA_SPAWN_EGG = ITEMS.register("elka_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.ELKA, 0x6B2FA0, 0xFFFFFF, new Item.Properties())); + public static final DeferredItem SPIRIT_APPLE = ITEMS.register("spirit_apple", + () -> new com.craisinlord.antarchy.content.item.SpiritAppleItem(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(4) + .saturationModifier(0.3F) + .build()))); + public static final DeferredItem GLIMMER_BOTTLE = ITEMS.register("glimmer_bottle", + com.craisinlord.antarchy.content.item.GlimmerBottleItem::new); public static final DeferredItem FLYING_SQUIRREL_SPAWN_EGG = ITEMS.register("flying_squirrel_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.FLYING_SQUIRREL, 0x7D6649, 0xDCC59C, new Item.Properties())); public static final DeferredItem CATERPILLAR_SPAWN_EGG = ITEMS.register("caterpillar_spawn_egg", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index e067e82d..1cc6e0db 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -4,7 +4,6 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; import com.craisinlord.antarchy.content.effect.DreadMobEffect; -import com.craisinlord.antarchy.content.effect.GlimmersGraceMobEffect; import com.craisinlord.antarchy.content.effect.GrowthMobEffect; import com.craisinlord.antarchy.content.effect.InvertedMobEffect; import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; @@ -14,6 +13,8 @@ import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; import com.craisinlord.antarchy.content.worldgen.elythia.*; +import com.craisinlord.antarchy.neoforge.worldgen.CornPatchFeature; +import com.craisinlord.antarchy.neoforge.worldgen.LumenLilyPadFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.*; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluid; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluidType; @@ -23,10 +24,12 @@ import net.minecraft.core.particles.ParticleType; import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.core.registries.Registries; import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.alchemy.Potion; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.levelgen.DensityFunction; @@ -56,6 +59,26 @@ public final class AntarchyNeoforgeMisc { private static final DeferredRegister> DENSITY_FUNCTION_TYPES = DeferredRegister.create(Registries.DENSITY_FUNCTION_TYPE, Antarchy.MODID); private static final DeferredRegister> ENTITY_SUB_PREDICATES = DeferredRegister.create(Registries.ENTITY_SUB_PREDICATE_TYPE, Antarchy.MODID); private static final DeferredRegister ATTRIBUTES = DeferredRegister.create(Registries.ATTRIBUTE, Antarchy.MODID); + private static final DeferredRegister> MENU_TYPES = DeferredRegister.create(Registries.MENU, Antarchy.MODID); + private static final DeferredRegister> DATA_COMPONENT_TYPES = + DeferredRegister.create(Registries.DATA_COMPONENT_TYPE, Antarchy.MODID); + private static final DeferredRegister> RECIPE_SERIALIZERS = + DeferredRegister.create(Registries.RECIPE_SERIALIZER, Antarchy.MODID); + + public static final DeferredHolder, net.minecraft.core.component.DataComponentType> GLIMMER_VARIANT = + DATA_COMPONENT_TYPES.register("glimmer_variant", + () -> net.minecraft.core.component.DataComponentType.builder() + .persistent(com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.CODEC) + .networkSynchronized(com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.STREAM_CODEC) + .build()); + public static final DeferredHolder, net.minecraft.core.component.DataComponentType> AMERICAN = + DATA_COMPONENT_TYPES.register("american", + () -> net.minecraft.core.component.DataComponentType.builder() + .persistent(net.minecraft.util.Unit.CODEC) + .networkSynchronized(net.minecraft.network.codec.StreamCodec.unit(net.minecraft.util.Unit.INSTANCE)) + .build()); + public static final DeferredHolder, net.minecraft.world.item.crafting.RecipeSerializer> AMERICANIZE_SERIALIZER = + RECIPE_SERIALIZERS.register("americanize", () -> com.craisinlord.antarchy.content.AmericanizeRecipe.SERIALIZER); public static final DeferredHolder DOUBLE_DAMAGE_CHANCE = ATTRIBUTES.register( "double_damage_chance", @@ -65,6 +88,10 @@ public final class AntarchyNeoforgeMisc { "bloodglass_max_hearts", () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.bloodglass_max_hearts", 0.0, 0.0, 8.0).setSyncable(true) ); + public static final DeferredHolder, MenuType> DORRIE_INVENTORY_MENU = MENU_TYPES.register( + "dorrie_inventory", + () -> new MenuType<>(com.craisinlord.antarchy.content.menu.DorrieInventoryMenu::new, FeatureFlags.DEFAULT_FLAGS) + ); // Mob effects public static final DeferredHolder DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new); @@ -74,7 +101,6 @@ public final class AntarchyNeoforgeMisc { public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); - // public static final DeferredHolder GLIMMERS_GRACE = MOB_EFFECTS.register("glimmers_grace", GlimmersGraceMobEffect::new); // Potions public static final DeferredHolder INVERSION = POTIONS.register("inversion", @@ -149,6 +175,10 @@ public final class AntarchyNeoforgeMisc { () -> new AntiwaterFluid.Source(antiwaterProperties())); public static final DeferredHolder FLOWING_ANTIWATER = FLUIDS.register("flowing_antiwater", () -> new AntiwaterFluid.Flowing(antiwaterProperties())); + public static final DeferredHolder LUMEN = FLUIDS.register("lumen", + () -> new BaseFlowingFluid.Source(lumenProperties())); + public static final DeferredHolder FLOWING_LUMEN = FLUIDS.register("flowing_lumen", + () -> new BaseFlowingFluid.Flowing(lumenProperties())); // Particle types public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", @@ -157,6 +187,8 @@ public final class AntarchyNeoforgeMisc { () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> STINKY_FLY = PARTICLE_TYPES.register("stinky_fly", () -> new SimpleParticleType(true)); + public static final DeferredHolder, SimpleParticleType> PEACH_LEAVES_PARTICLE = PARTICLE_TYPES.register("peach_leaves_particle", + () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", @@ -193,12 +225,20 @@ public final class AntarchyNeoforgeMisc { () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); public static final DeferredHolder, OuranwoodCocoonTreeFeature> OURANWOOD_COCOON_TREE = FEATURES.register("ouranwood_cocoon_tree", () -> new OuranwoodCocoonTreeFeature(OuranwoodTreeConfiguration.CODEC)); + public static final DeferredHolder, PeachTreeFeature> PEACH_TREE_FEATURE = FEATURES.register("peach_tree", + () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); + public static final DeferredHolder, PeachTreeFeature> PEACH_LARGE_TREE_FEATURE = FEATURES.register("peach_large_tree", + () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_MEADOW_FLORA = FEATURES.register("elythia_meadow_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.MEADOW)); + public static final DeferredHolder, ElythiaFloraFeature> PEACH_FOREST_FLORA = FEATURES.register("peach_forest_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.PEACH_FOREST)); public static final DeferredHolder, ElythiaFloraFeature> FLOWER_FOREST_MILKWEED = FEATURES.register("flower_forest_milkweed", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FLOWER_FOREST_MILKWEED)); + public static final DeferredHolder, CornPatchFeature> CORN_PATCH = FEATURES.register("corn_patch", + () -> new CornPatchFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_BUTTERFLY_FIELDS_FLORA = FEATURES.register("butterfly_fields_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.BUTTERFLY_FIELDS)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_TORCHFLOWER_FIELDS_FLORA = FEATURES.register("elythia_torchflower_fields_flora", @@ -221,10 +261,20 @@ public final class AntarchyNeoforgeMisc { () -> new TriffidPatchFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaPondFeature> ELYTHIA_POND = FEATURES.register("elythia_pond", () -> new ElythiaPondFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenPoolFeature> LUMEN_POOL = FEATURES.register("lumen_pools", + () -> new LumenPoolFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenLilyPadFeature> LUMEN_LILY_PADS = FEATURES.register("lumen_lily_pads", + () -> new LumenLilyPadFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenStreamFeature> LUMEN_STREAM = FEATURES.register("lumen_streams", + () -> new LumenStreamFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaTuffBoulderFeature> ELYTHIA_TUFF_BOULDER = FEATURES.register("elythia_tuff_boulder", () -> new ElythiaTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaLargeTuffBoulderFeature> ELYTHIA_LARGE_TUFF_BOULDER = FEATURES.register("elythia_large_tuff_boulder", () -> new ElythiaLargeTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, PeachForestMossyBoulderFeature> PEACH_FOREST_MOSSY_BOULDER = FEATURES.register("peach_forest_mossy_boulder", + () -> new PeachForestMossyBoulderFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, PeachForestPondFeature> PEACH_FOREST_POND = FEATURES.register("peach_forest_pond", + () -> new PeachForestPondFeature(PeachForestPondConfiguration.CODEC)); public static final DeferredHolder, CoralSpikeFeature> ELYTHIA_CORAL_SPIKE = FEATURES.register("elythia_coral_spike", () -> new CoralSpikeFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, FallenOuranwoodFeature> FALLEN_OURANWOOD_TREE = FEATURES.register("fallen_ouranwood_tree", @@ -281,6 +331,9 @@ public final class AntarchyNeoforgeMisc { DENSITY_FUNCTION_TYPES.register(modEventBus); ENTITY_SUB_PREDICATES.register(modEventBus); ATTRIBUTES.register(modEventBus); + MENU_TYPES.register(modEventBus); + DATA_COMPONENT_TYPES.register(modEventBus); + RECIPE_SERIALIZERS.register(modEventBus); } static BaseFlowingFluid.Properties bileProperties() { @@ -310,6 +363,15 @@ public final class AntarchyNeoforgeMisc { .tickRate(5); } + static BaseFlowingFluid.Properties lumenProperties() { + return new BaseFlowingFluid.Properties(com.craisinlord.antarchy.neoforge.AntarchyNeoForgeFluidTypes.LUMEN_TYPE, LUMEN, FLOWING_LUMEN) + .bucket(() -> AntarchyNeoforgeItems.LUMEN_BUCKET.get()) + .block(() -> AntarchyNeoforgeBlocks.LUMEN_BLOCK.get()) + .slopeFindDistance(4) + .levelDecreasePerBlock(1) + .tickRate(5); + } + private static ParticleType particleType( Function, com.mojang.serialization.MapCodec> codecFactory, Function, StreamCodec> streamCodecFactory diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java index 8a6b7ccc..e79e8067 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java @@ -48,6 +48,9 @@ public class AntarchyNeoforgeSpawnPlacements { event.register(AntarchyNeoforgeEntites.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.CHEEP.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AbstractFish::checkSurfaceWaterAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); - // event.register(AntarchyNeoforgeEntites.GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.DORRIE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.OURANWOOD_DEER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.ELKA.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/CornPatchFeature.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/CornPatchFeature.java new file mode 100644 index 00000000..ac4480df --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/CornPatchFeature.java @@ -0,0 +1,62 @@ +package com.craisinlord.antarchy.neoforge.worldgen; + +import com.craisinlord.antarchy.content.block.CornCropBlock; +import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeBlocks; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class CornPatchFeature extends Feature { + public CornPatchFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + Block wildCorn = AntarchyNeoforgeBlocks.WILD_CORN.get(); + int radius = 4 + random.nextInt(3); + int targetPlacements = 10 + random.nextInt(11); + int attempts = targetPlacements * 4; + int placed = 0; + + for (int i = 0; i < attempts && placed < targetPlacements; i++) { + int x = origin.getX() + random.nextInt(radius * 2 + 1) - radius; + int z = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; + int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, x, z); + BlockPos lowerPos = new BlockPos(x, surfaceY, z); + BlockPos upperPos = lowerPos.above(); + + if (!level.getBlockState(lowerPos.below()).is(Blocks.GRASS_BLOCK)) { + continue; + } + if (!level.getBlockState(lowerPos).canBeReplaced() || !level.getBlockState(upperPos).canBeReplaced()) { + continue; + } + + BlockState lowerState = wildCorn.defaultBlockState() + .setValue(CornCropBlock.AGE, 3) + .setValue(CornCropBlock.HALF, DoubleBlockHalf.LOWER); + BlockState upperState = wildCorn.defaultBlockState() + .setValue(CornCropBlock.AGE, 3) + .setValue(CornCropBlock.HALF, DoubleBlockHalf.UPPER); + + level.setBlock(lowerPos, lowerState, 2); + level.setBlock(upperPos, upperState, 2); + placed++; + } + + return placed > 0; + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/LumenLilyPadFeature.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/LumenLilyPadFeature.java new file mode 100644 index 00000000..92d0fb4d --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/worldgen/LumenLilyPadFeature.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.neoforge.worldgen; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class LumenLilyPadFeature extends Feature { + public LumenLilyPadFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + boolean placedAny = false; + + for (int i = 0; i < 24; i++) { + int x = origin.getX() + random.nextInt(17) - 8; + int z = origin.getZ() + random.nextInt(17) - 8; + int surfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + BlockPos fluidPos = new BlockPos(x, surfaceY, z); + if (!level.getFluidState(fluidPos).is(AntarchyTags.Fluids.LUMEN) || !level.getFluidState(fluidPos).isSource()) { + continue; + } + + BlockPos padPos = fluidPos.above(); + if (!level.isEmptyBlock(padPos)) { + continue; + } + + BlockState lilyPad = Blocks.LILY_PAD.defaultBlockState(); + if (!lilyPad.canSurvive(level, padPos)) { + continue; + } + + level.setBlock(padPos, lilyPad, 2); + placedAny = true; + } + + return placedAny; + } +} diff --git a/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml index 3c6b4e34..36f33648 100644 --- a/neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -44,4 +44,12 @@ displayURL="https://www.curseforge.com/minecraft/mc-mods/antarchy" type="required" versionRange="*" ordering="AFTER" - side="BOTH" \ No newline at end of file + side="BOTH" + +[[dependencies.antarchy]] + modId="infinity" + type="incompatible" + versionRange="(,2.7.2)" + ordering="NONE" + side="BOTH" + reason="Infinite Dimensions versions below 2.7.2 are no longer supported" \ No newline at end of file diff --git a/neoforge/src/main/resources/antarchy-neoforge.mixins.json b/neoforge/src/main/resources/antarchy-neoforge.mixins.json index f84d3e8e..30c33c5c 100644 --- a/neoforge/src/main/resources/antarchy-neoforge.mixins.json +++ b/neoforge/src/main/resources/antarchy-neoforge.mixins.json @@ -11,7 +11,6 @@ "entity.ParalyzedMobFreezeMixin", "infinity.ConfigGenInvocationMixin", "infinity.PortalCreatorMixin", - "infinity.RandomSpringMixin", "level.ClientLevelPartEntitiesAccessor", "level.ServerLevelPartEntitiesAccessor" ], diff --git a/neoforge/src/main/resources/assets/antarchy/models/item/lumen_bucket.json b/neoforge/src/main/resources/assets/antarchy/models/item/lumen_bucket.json new file mode 100644 index 00000000..49b64eed --- /dev/null +++ b/neoforge/src/main/resources/assets/antarchy/models/item/lumen_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "neoforge:item/bucket", + "loader": "neoforge:fluid_container", + "fluid": "antarchy:lumen" +} diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/corn_patch_in_spawn_biomes.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/corn_patch_in_spawn_biomes.json new file mode 100644 index 00000000..84d1b78c --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/corn_patch_in_spawn_biomes.json @@ -0,0 +1,8 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:wild_corn_spawn_biomes", + "features": [ + "antarchy:corn_patch" + ], + "step": "vegetal_decoration" +} diff --git a/tmp_extract/Frog.javap.txt b/tmp_extract/Frog.javap.txt new file mode 100644 index 0000000000000000000000000000000000000000..5d6a49fba124871d2071e963fb7ef789613f85de GIT binary patch literal 97376 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 E56d-Ood5s; literal 0 HcmV?d00001 diff --git a/tmp_extract/net/fabricmc/fabric/api/registry/FabricBrewingRecipeRegistryBuilder.java b/tmp_extract/net/fabricmc/fabric/api/registry/FabricBrewingRecipeRegistryBuilder.java new file mode 100644 index 00000000..88084cd5 --- /dev/null +++ b/tmp_extract/net/fabricmc/fabric/api/registry/FabricBrewingRecipeRegistryBuilder.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.api.registry; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.class_1792; +import net.minecraft.class_1842; +import net.minecraft.class_1845; +import net.minecraft.class_1856; +import net.minecraft.class_6880; +import net.minecraft.class_7699; + +/** + * An extension of {@link class_1845.class_9665} to support ingredients. + */ +public interface FabricBrewingRecipeRegistryBuilder { + /** + * An event that is called when the brewing recipe registry is being built. + */ + Event BUILD = EventFactory.createArrayBacked(FabricBrewingRecipeRegistryBuilder.BuildCallback.class, listeners -> builder -> { + for (FabricBrewingRecipeRegistryBuilder.BuildCallback listener : listeners) { + listener.build(builder); + } + }); + + default void registerItemRecipe(class_1792 input, class_1856 ingredient, class_1792 output) { + throw new AssertionError("Must be implemented via interface injection"); + } + + default void registerPotionRecipe(class_6880 input, class_1856 ingredient, class_6880 output) { + throw new AssertionError("Must be implemented via interface injection"); + } + + default void registerRecipes(class_1856 ingredient, class_6880 potion) { + throw new AssertionError("Must be implemented via interface injection"); + } + + default class_7699 getEnabledFeatures() { + throw new AssertionError("Must be implemented via interface injection"); + } + + /** + * Use this event to register custom brewing recipes. + */ + @FunctionalInterface + interface BuildCallback { + /** + * Called when the brewing recipe registry is being built. + * + * @param builder the {@link class_1845} instance + */ + void build(class_1845.class_9665 builder); + } +} diff --git a/tmp_extract/net/neoforged/neoforge/common/brewing/BrewingRecipe.java b/tmp_extract/net/neoforged/neoforge/common/brewing/BrewingRecipe.java new file mode 100644 index 00000000..48015c2b --- /dev/null +++ b/tmp_extract/net/neoforged/neoforge/common/brewing/BrewingRecipe.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) Forge Development LLC and contributors + * SPDX-License-Identifier: LGPL-2.1-only + */ + +package net.neoforged.neoforge.common.brewing; + +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; + +public class BrewingRecipe implements IBrewingRecipe { + private final Ingredient input; + private final Ingredient ingredient; + private final ItemStack output; + + public BrewingRecipe(Ingredient input, Ingredient ingredient, ItemStack output) { + this.input = input; + this.ingredient = ingredient; + this.output = output; + } + + @Override + public boolean isInput(ItemStack stack) { + return this.input.test(stack); + } + + @Override + public ItemStack getOutput(ItemStack input, ItemStack ingredient) { + return isInput(input) && isIngredient(ingredient) ? getOutput().copy() : ItemStack.EMPTY; + } + + public Ingredient getInput() { + return input; + } + + public Ingredient getIngredient() { + return ingredient; + } + + public ItemStack getOutput() { + return output; + } + + @Override + public boolean isIngredient(ItemStack ingredient) { + return this.ingredient.test(ingredient); + } +} diff --git a/tmp_extract/net/neoforged/neoforge/common/brewing/IBrewingRecipe.java b/tmp_extract/net/neoforged/neoforge/common/brewing/IBrewingRecipe.java new file mode 100644 index 00000000..c8a113c4 --- /dev/null +++ b/tmp_extract/net/neoforged/neoforge/common/brewing/IBrewingRecipe.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) Forge Development LLC and contributors + * SPDX-License-Identifier: LGPL-2.1-only + */ + +package net.neoforged.neoforge.common.brewing; + +import static net.minecraft.world.item.alchemy.PotionBrewing.Builder; + +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.event.brewing.RegisterBrewingRecipesEvent; + +/** + * Interface for more flexible brewing recipes. + * + *

Register using {@link RegisterBrewingRecipesEvent} and {@link Builder#addRecipe(IBrewingRecipe)}. + */ +public interface IBrewingRecipe { + /** + * Returns true is the passed ItemStack is an input for this recipe. "Input" + * being the item that goes in one of the three bottom slots of the brewing + * stand (e.g: water bottle) + */ + boolean isInput(ItemStack input); + + /** + * Returns true if the passed ItemStack is an ingredient for this recipe. + * "Ingredient" being the item that goes in the top slot of the brewing + * stand (e.g: nether wart) + */ + boolean isIngredient(ItemStack ingredient); + + /** + * Returns the output when the passed input is brewed with the passed + * ingredient. Empty if invalid input or ingredient. + */ + ItemStack getOutput(ItemStack input, ItemStack ingredient); +} diff --git a/tmp_extract/net/neoforged/neoforge/event/brewing/RegisterBrewingRecipesEvent.java b/tmp_extract/net/neoforged/neoforge/event/brewing/RegisterBrewingRecipesEvent.java new file mode 100644 index 00000000..669e61ce --- /dev/null +++ b/tmp_extract/net/neoforged/neoforge/event/brewing/RegisterBrewingRecipesEvent.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) NeoForged and contributors + * SPDX-License-Identifier: LGPL-2.1-only + */ + +package net.neoforged.neoforge.event.brewing; + +import net.minecraft.core.RegistryAccess; +import net.minecraft.world.item.alchemy.PotionBrewing; +import net.neoforged.bus.api.Event; +import org.jetbrains.annotations.ApiStatus; + +/** + * Event to register new brewing recipes. + * + *

Fired on both client and server side, on the main event bus. + */ +public class RegisterBrewingRecipesEvent extends Event { + private final PotionBrewing.Builder builder; + private final RegistryAccess registryAccess; + + @ApiStatus.Internal + public RegisterBrewingRecipesEvent(PotionBrewing.Builder builder, RegistryAccess registryAccess) { + this.builder = builder; + this.registryAccess = registryAccess; + } + + public PotionBrewing.Builder getBuilder() { + return builder; + } + + public RegistryAccess getRegistryAccess() { + return registryAccess; + } +} From e89869d68a2c93693e86f290ae02498301887ba1 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Wed, 15 Jul 2026 17:21:11 -0500 Subject: [PATCH 2/3] beta V8 update --- .../antarchy/content/CreativeTabOrder.java | 52 +- .../antarchy/content/block/CamelliaBlock.java | 22 + .../content/block/SpiderLilyBlock.java | 30 + .../client/particle/PeachLeavesParticle.java | 86 +- .../renderer/glimmer/GlimmerRenderer.java | 13 +- .../entity/glimmer/GlimmerAntBehavior.java | 2 +- .../glimmer/GlimmerAppleCowBehavior.java | 4 +- .../entity/glimmer/GlimmerElkaBehavior.java | 4 + .../content/entity/glimmer/GlimmerEntity.java | 72 +- .../entity/glimmer/GlimmerFrogBehavior.java | 65 +- .../glimmer/GlimmerOuranwoodDeerBehavior.java | 79 +- .../content/item/GlimmerBottleItem.java | 16 + .../worldgen/elythia/ElythiaBiomeSource.java | 81 +- .../worldgen/elythia/ElythiaFloraFeature.java | 53 +- .../worldgen/elythia/LumenPoolFeature.java | 32 +- .../worldgen/elythia/LumenSpireFeature.java | 249 ++ .../worldgen/elythia/LumenStreamFeature.java | 6 +- .../PeachForestMossyBoulderFeature.java | 47 +- .../elythia/PeachForestPondFeature.java | 21 +- .../assets/antarchy/blockstates/camellia.json | 10 + .../blockstates/ouranwood_hanging_sign.json | 4 +- .../antarchy/blockstates/ouranwood_sign.json | 4 +- .../ouranwood_wall_hanging_sign.json | 4 +- .../blockstates/ouranwood_wall_sign.json | 4 +- .../blockstates/peach_hanging_sign.json | 2 +- .../antarchy/blockstates/peach_sign.json | 2 +- .../blockstates/peach_wall_hanging_sign.json | 2 +- .../antarchy/blockstates/peach_wall_sign.json | 2 +- .../antarchy/blockstates/spider_lily.json | 7 + .../resources/assets/antarchy/lang/en_us.json | 8 +- .../models/block/camellia_bottom.json | 6 + .../antarchy/models/block/camellia_top.json | 6 + .../models/block/ouranwood_hanging_sign.json | 6 + .../antarchy/models/block/ouranwood_sign.json | 6 + .../block/ouranwood_wall_hanging_sign.json | 6 + .../models/block/ouranwood_wall_sign.json | 6 + .../models/block/peach_hanging_sign.json | 6 + .../antarchy/models/block/peach_sign.json | 6 + .../models/block/peach_wall_hanging_sign.json | 6 + .../models/block/peach_wall_sign.json | 6 + .../antarchy/models/block/spider_lily.json | 46 + .../assets/antarchy/models/item/camellia.json | 6 + .../antarchy/models/item/cornbread.json | 6 + .../antarchy/models/item/peach_pie.json | 6 + .../assets/antarchy/models/item/popcorn.json | 6 + .../antarchy/models/item/spider_lily.json | 7 + .../textures/block/camellia_bush_bottom.png | Bin 0 -> 661 bytes .../textures/block/camellia_bush_top.png | Bin 0 -> 597 bytes .../textures/block/spider_lily_stem.png | Bin 0 -> 197 bytes .../textures/block/spider_lily_top.png | Bin 0 -> 331 bytes .../antarchy/textures/item/cornbread.png | Bin 0 -> 366 bytes .../assets/antarchy/textures/item/peach.png | Bin 458 -> 443 bytes .../antarchy/textures/item/peach_pie.png | Bin 0 -> 417 bytes .../assets/antarchy/textures/item/popcorn.png | Bin 0 -> 412 bytes .../data/antarchy/dimension/elythia.json | 84 +- .../antarchy/loot_table/blocks/camellia.json | 29 + .../blocks/ouranwood_hanging_sign.json | 4 +- .../loot_table/blocks/ouranwood_sign.json | 4 +- .../loot_table/blocks/peach_hanging_sign.json | 2 +- .../loot_table/blocks/peach_sign.json | 2 +- .../loot_table/blocks/spider_lily.json | 15 + .../recipe/cooked_venison_from_smelting.json | 12 + .../recipe/cooked_venison_from_smoking.json | 12 + .../data/antarchy/recipe/cornbread.json | 27 + .../data/antarchy/recipe/miners_dream.json | 19 - .../data/antarchy/recipe/peach_pie.json | 19 + .../recipe/pink_dye_from_camellia.json | 13 + .../recipe/popcorn_from_smelting.json | 12 + .../antarchy/recipe/popcorn_from_smoking.json | 12 + .../recipe/red_dye_from_spider_lily.json | 13 + .../tags/entity_type/basilisk_prey.json | 2 +- .../elythia_firefly_particle_biomes.json | 1 - .../tags/worldgen/biome/is_elythia.json | 1 - .../worldgen/biome/elythia_meadow.json | 12 +- .../biome/fungal_ouranwood_forest.json | 13 +- .../worldgen/biome/glimmering_pools.json | 2 +- .../worldgen/biome/ouranwood_forest.json | 12 +- .../antarchy/worldgen/biome/peach_forest.json | 20 +- .../biome/sparse_ouranwood_forest.json | 11 + .../worldgen/biome/torchflower_fields.json | 94 - .../elythia_torchflower_fields_flora.json | 4 - .../configured_feature/lumen_spires.json | 4 + ...er_fields_flora.json => lumen_spires.json} | 6 +- .../peach_forest_ponds_large.json | 2 +- .../peach_forest_ponds_medium.json | 2 +- .../peach_forest_ponds_small.json | 2 +- .../resources/data/c/tags/item/foods.json | 7 + .../tags/block/animals_spawnable_on.json | 7 + .../data/minecraft/tags/block/flowers.json | 4 +- .../minecraft/tags/block/small_flowers.json | 6 + .../minecraft/tags/block/tall_flowers.json | 1 + .../data/minecraft/tags/item/flowers.json | 4 +- .../minecraft/tags/item/small_flowers.json | 6 + .../minecraft/tags/item/tall_flowers.json | 1 + .../antarchy/fabric/AntarchyFabric.java | 19 +- .../fabric/AntarchyFabricContent.java | 3024 ++--------------- .../antarchy/fabric/AntarchyFabricEvents.java | 28 +- .../antarchy/fabric/BloodglassManager.java | 13 +- .../client/AntarchyFabricClientBootstrap.java | 279 +- .../fabric/client/DreadClientHandler.java | 6 +- .../fabric/client/DreadHudRenderer.java | 3 +- .../fabric/client/ElythiaFireflyManager.java | 3 +- .../FallenKingCrownArmorStandLayer.java | 6 +- .../fabric/client/FallenKingCrownLayer.java | 6 +- .../InvertedGeyserEruptionParticle.java | 7 +- .../fabric/client/LucidSoundHandler.java | 11 +- .../fabric/client/ParalyzedClientHandler.java | 3 +- .../fabric/client/ParalyzedHudRenderer.java | 3 +- .../fabric/client/TriffidGooHudRenderer.java | 3 +- .../fabric/content/fluid/AntiwaterFluid.java | 17 +- .../mixin/AntimetalScaffoldingMixin.java | 3 +- .../client/MultipartClientSpawnMixin.java | 3 +- .../network/AntarchyFabricNetworking.java | 3 +- .../fabric/registry/AntarchyFabricBlocks.java | 1133 ++++++ .../AntarchyFabricCreativeModeTabs.java | 347 ++ .../registry/AntarchyFabricEntities.java | 637 ++++ .../AntarchyFabricEntityAttributes.java | 333 ++ .../fabric/registry/AntarchyFabricItems.java | 1492 ++++++++ .../fabric/registry/AntarchyFabricMisc.java | 994 ++++++ .../fabric/registry/AntarchyFabricSounds.java | 682 ++++ .../AntarchyFabricSpawnPlacements.java | 294 ++ .../data/minecraft/tags/fluid/water.json | 4 +- .../antarchy/neoforge/AntarchyNeoforge.java | 5 +- .../client/AntarchyNeoForgeClient.java | 11 +- .../registry/AntarchyNeoForgeEvents.java | 14 +- .../registry/AntarchyNeoforgeBlocks.java | 4 + .../AntarchyNeoforgeCreativeModeTabs.java | 30 +- .../registry/AntarchyNeoforgeEntites.java | 11 +- .../AntarchyNeoforgeEntityAttributes.java | 3 +- .../registry/AntarchyNeoforgeItems.java | 33 +- .../registry/AntarchyNeoforgeMisc.java | 4 +- .../AntarchyNeoforgeSpawnPlacements.java | 5 +- 132 files changed, 7816 insertions(+), 3283 deletions(-) create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/CamelliaBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/SpiderLilyBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenSpireFeature.java create mode 100644 common/src/main/resources/assets/antarchy/blockstates/camellia.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/spider_lily.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/camellia_bottom.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/camellia_top.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/ouranwood_hanging_sign.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/ouranwood_sign.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_hanging_sign.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_sign.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_hanging_sign.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_sign.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_wall_hanging_sign.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/peach_wall_sign.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/spider_lily.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/camellia.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/cornbread.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/peach_pie.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/popcorn.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/spider_lily.json create mode 100644 common/src/main/resources/assets/antarchy/textures/block/camellia_bush_bottom.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/camellia_bush_top.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/spider_lily_stem.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/spider_lily_top.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/cornbread.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/peach_pie.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/popcorn.png create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/camellia.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/spider_lily.json create mode 100644 common/src/main/resources/data/antarchy/recipe/cooked_venison_from_smelting.json create mode 100644 common/src/main/resources/data/antarchy/recipe/cooked_venison_from_smoking.json create mode 100644 common/src/main/resources/data/antarchy/recipe/cornbread.json delete mode 100644 common/src/main/resources/data/antarchy/recipe/miners_dream.json create mode 100644 common/src/main/resources/data/antarchy/recipe/peach_pie.json create mode 100644 common/src/main/resources/data/antarchy/recipe/pink_dye_from_camellia.json create mode 100644 common/src/main/resources/data/antarchy/recipe/popcorn_from_smelting.json create mode 100644 common/src/main/resources/data/antarchy/recipe/popcorn_from_smoking.json create mode 100644 common/src/main/resources/data/antarchy/recipe/red_dye_from_spider_lily.json delete mode 100644 common/src/main/resources/data/antarchy/worldgen/biome/torchflower_fields.json delete mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_torchflower_fields_flora.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/lumen_spires.json rename common/src/main/resources/data/antarchy/worldgen/placed_feature/{elythia_torchflower_fields_flora.json => lumen_spires.json} (66%) create mode 100644 common/src/main/resources/data/minecraft/tags/block/animals_spawnable_on.json create mode 100644 common/src/main/resources/data/minecraft/tags/block/small_flowers.json create mode 100644 common/src/main/resources/data/minecraft/tags/item/small_flowers.json create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricCreativeModeTabs.java create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java diff --git a/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java b/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java index b5e6464c..8d085b67 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java @@ -14,7 +14,6 @@ public final class CreativeTabOrder { public static int group(Item item) { String path = BuiltInRegistries.ITEM.getKey(item).getPath(); return switch (path) { - case "glimmer_bottle" -> -1; case "ouranwood_log", "ouranwood_wood", "mossy_ouranwood_log", "mossy_ouranwood_wood", "stripped_ouranwood_log", "stripped_ouranwood_wood", "duplicator_log", "ouranwood_planks", "ouranwood_stairs", "ouranwood_slab", @@ -60,7 +59,7 @@ public final class CreativeTabOrder { "myrmite", "broodstone", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8; case "ouranwood_leaves", "peach_leaves" -> 9; case "duplicator_sapling", "ouranwood_acorn", "peach_sapling", "corn_seeds" -> 10; - case "orange_milkweed", "pink_milkweed", "hushweed", "amber_lichen", "creepvine", + case "orange_milkweed", "pink_milkweed", "camellia", "spider_lily", "hushweed", "amber_lichen", "creepvine", "triffid_goo_block", "cloud_block", "wasp_nest", "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest", "termite_nest" -> 11; case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling", @@ -85,7 +84,7 @@ public final class CreativeTabOrder { "ultimate_helmet", "ultimate_chestplate", "ultimate_leggings", "ultimate_boots" -> 19; case "ultimate_bow", "ultimate_crossbow" -> 20; - case "cloud_shark_fin_soup", "mud_pie", "rainbow_sugar", + case "cloud_shark_fin_soup", "mud_pie", "peach_pie", "cornbread", "popcorn", "rainbow_sugar", "blood_crystal_apple", "spirit_apple", "peach", "raw_corndog", "cooked_corndog", "raw_venison", "cooked_venison" -> 21; case "blood_crystal_shard", "cloud_shark_fin", "basilisk_fang", "kraken_tooth", @@ -95,7 +94,7 @@ public final class CreativeTabOrder { "mantis_claw", "jumpy_bug_leg", "brutalfly_wing", "cornea_ear", "primordial_scute", "triffid_goo", "vortex_eye", "king_scale", "queen_scale", "chiten", "stink_bug", "corn", "high_fructose_corn_syrup" -> 22; - case "reverie_bottle", "root_beer" -> 24; + case "reverie_bottle", "glimmer_bottle", "root_beer" -> 24; case "easter_bunny_spawn_egg", "flying_squirrel_spawn_egg", "caterpillar_spawn_egg", "butterfly_spawn_egg", "reverie_spawn_egg", "brutalfly_spawn_egg", "red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", "termite_spawn_egg", @@ -160,16 +159,18 @@ public final class CreativeTabOrder { case "corn_seeds" -> 3; case "orange_milkweed" -> 0; case "pink_milkweed" -> 1; - case "hushweed" -> 2; - case "amber_lichen" -> 3; - case "creepvine" -> 4; - case "triffid_goo_block" -> 5; - case "cloud_block" -> 6; - case "wasp_nest" -> 7; - case "red_ant_nest" -> 8; - case "brown_ant_nest" -> 9; - case "rainbow_ant_nest" -> 10; - case "termite_nest" -> 11; + case "camellia" -> 2; + case "spider_lily" -> 3; + case "hushweed" -> 4; + case "amber_lichen" -> 5; + case "creepvine" -> 6; + case "triffid_goo_block" -> 7; + case "cloud_block" -> 8; + case "wasp_nest" -> 9; + case "red_ant_nest" -> 10; + case "brown_ant_nest" -> 11; + case "rainbow_ant_nest" -> 12; + case "termite_nest" -> 13; case "blood_crystal_block" -> 0; case "small_blood_crystal_bud" -> 1; case "medium_blood_crystal_bud" -> 2; @@ -274,15 +275,22 @@ public final class CreativeTabOrder { case "ultimate_boots" -> 15; case "ultimate_bow" -> 0; case "ultimate_crossbow" -> 1; - case "blood_crystal_apple" -> 0; - case "spirit_apple" -> 1; - case "peach" -> 2; - case "raw_corndog" -> 3; - case "cooked_corndog" -> 4; - case "raw_venison" -> 5; - case "cooked_venison" -> 6; + case "cloud_shark_fin_soup" -> 0; + case "mud_pie" -> 1; + case "peach_pie" -> 2; + case "cornbread" -> 3; + case "popcorn" -> 4; + case "rainbow_sugar" -> 5; + case "raw_corndog" -> 6; + case "cooked_corndog" -> 7; + case "raw_venison" -> 8; + case "cooked_venison" -> 9; + case "blood_crystal_apple" -> 10; + case "spirit_apple" -> 11; + case "peach" -> 12; case "reverie_bottle" -> 0; - case "root_beer" -> 1; + case "glimmer_bottle" -> 1; + case "root_beer" -> 2; case "blood_crystal_shard" -> 0; case "cloud_shark_fin" -> 1; case "basilisk_fang" -> 2; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/CamelliaBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/CamelliaBlock.java new file mode 100644 index 00000000..5ba3ed23 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/CamelliaBlock.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; + +public class CamelliaBlock extends MilkweedBlock { + public CamelliaBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + BlockPos dropPos = state.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.UPPER ? pos.below() : pos; + popResource(level, dropPos, new ItemStack(this.asItem())); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/SpiderLilyBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/SpiderLilyBlock.java new file mode 100644 index 00000000..3378d48f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/SpiderLilyBlock.java @@ -0,0 +1,30 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BushBlock; +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; + +public class SpiderLilyBlock extends BushBlock { + public static final MapCodec CODEC = Block.simpleCodec(SpiderLilyBlock::new); + private static final VoxelShape SHAPE = Block.box(5.0D, 0.0D, 5.0D, 11.0D, 10.0D, 11.0D); + + public SpiderLilyBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/particle/PeachLeavesParticle.java b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/PeachLeavesParticle.java index 3a578435..fc1b60e3 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/particle/PeachLeavesParticle.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/PeachLeavesParticle.java @@ -9,20 +9,45 @@ import net.minecraft.client.particle.TextureSheetParticle; import net.minecraft.core.particles.SimpleParticleType; public final class PeachLeavesParticle extends TextureSheetParticle { + private static final float ACCELERATION_SCALE = 0.0025F; + private static final int INITIAL_LIFETIME = 300; + private static final float WIND_BIG = 2.0F; + private static final boolean SWIRL = false; + private static final boolean FLOW_AWAY = true; + private static final float GRAVITY_SCALE = 1.0F; + private static final float INITIAL_Y_SPEED = 0.0F; + + private float rotSpeed; + private final float spinAcceleration; + private final double xaFlowScale; + private final double zaFlowScale; + private final double swirlPeriod; + private final boolean swirl; + private final boolean flowAway; private final SpriteSet sprites; - private final float gravity; private PeachLeavesParticle(ClientLevel level, double x, double y, double z, SpriteSet sprites) { super(level, x, y, z, 0.0D, 0.0D, 0.0D); this.sprites = sprites; - this.gravity = 0.02F + this.random.nextFloat() * 0.01F; - this.lifetime = 28 + this.random.nextInt(26); - this.quadSize = 0.14F + this.random.nextFloat() * 0.05F; - this.xd = (this.random.nextDouble() - 0.5D) * 0.04D; - this.yd = -0.015D - this.random.nextDouble() * 0.02D; - this.zd = (this.random.nextDouble() - 0.5D) * 0.04D; - this.hasPhysics = true; - this.setSpriteFromAge(sprites); + this.setSprite(sprites.get(level.random)); + this.rotSpeed = (float) Math.toRadians(this.random.nextBoolean() ? -30.0D : 30.0D); + this.spinAcceleration = (float) Math.toRadians(this.random.nextBoolean() ? -5.0D : 5.0D); + this.swirl = SWIRL; + this.flowAway = FLOW_AWAY; + this.lifetime = INITIAL_LIFETIME; + this.gravity = GRAVITY_SCALE * 1.2F * ACCELERATION_SCALE; + + float size = this.random.nextBoolean() ? 0.05F : 0.075F; + this.quadSize = size; + this.setSize(size, size); + this.friction = 1.0F; + this.yd = -INITIAL_Y_SPEED; + + float randomAngle = this.random.nextFloat(); + double flowAngle = Math.toRadians(randomAngle * 60.0F); + this.xaFlowScale = Math.cos(flowAngle) * WIND_BIG; + this.zaFlowScale = Math.sin(flowAngle) * WIND_BIG; + this.swirlPeriod = Math.toRadians(1000.0F + randomAngle * 3000.0F); } @Override @@ -31,27 +56,50 @@ public final class PeachLeavesParticle extends TextureSheetParticle { this.yo = this.y; this.zo = this.z; - if (this.age++ >= this.lifetime) { + if (this.lifetime-- <= 0) { this.remove(); return; } - double sway = Math.sin((this.age + this.x) * 0.22D) * 0.0035D; - this.xd += sway; - this.zd -= sway; - this.yd -= this.gravity * 0.015D; + float ageProgress = Math.min((INITIAL_LIFETIME - this.lifetime) / (float) INITIAL_LIFETIME, 1.0F); + double windX = 0.0D; + double windZ = 0.0D; - this.xd *= 0.91D; - this.yd *= 0.92D; - this.zd *= 0.91D; + if (this.flowAway) { + double flowScale = Math.pow(ageProgress, 1.25D); + windX += this.xaFlowScale * flowScale; + windZ += this.zaFlowScale * flowScale; + } + + if (this.swirl) { + double swirlScale = ageProgress * ageProgress; + windX += swirlScale * Math.cos(swirlScale * this.swirlPeriod) * WIND_BIG; + windZ += swirlScale * Math.sin(swirlScale * this.swirlPeriod) * WIND_BIG; + } + + this.xd += windX * ACCELERATION_SCALE; + this.zd += windZ * ACCELERATION_SCALE; + this.yd -= this.gravity; + + this.rotSpeed += this.spinAcceleration / 20.0F; + this.oRoll = this.roll; + this.roll += this.rotSpeed / 20.0F; this.move(this.xd, this.yd, this.zd); - this.setSpriteFromAge(this.sprites); + if (this.onGround || this.lifetime < INITIAL_LIFETIME - 1 && this.xd == 0.0D && this.zd == 0.0D) { + this.remove(); + return; + } + + this.xd *= this.friction; + this.yd *= this.friction; + this.zd *= this.friction; + this.setSprite(this.sprites.get(INITIAL_LIFETIME - this.lifetime, INITIAL_LIFETIME)); } @Override public ParticleRenderType getRenderType() { - return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; + return ParticleRenderType.PARTICLE_SHEET_OPAQUE; } public static final class Provider implements ParticleProvider { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java index f32df558..3c2dff29 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/glimmer/GlimmerRenderer.java @@ -45,14 +45,23 @@ public class GlimmerRenderer extends GeoEntityRenderer { private void renderVanillaModel(EntityModel model, GlimmerEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { poseStack.pushPose(); - poseStack.mulPose(Axis.YP.rotationDegrees(180.0F - entityYaw)); + float growth = entity.getGrowthScale(); + poseStack.scale(growth, growth, growth); + + // Compute body yaw directly from the entity's own tracked fields rather than trusting + // the ambient entityYaw parameter, so the body pose and the head-offset math below are + // always self-consistent (this is what caused the head to look "detached" from the body). + float bodyYaw = Mth.rotLerp(partialTick, entity.yBodyRotO, entity.yBodyRot); + poseStack.mulPose(Axis.YP.rotationDegrees(180.0F - bodyYaw)); poseStack.scale(-1.0F, -1.0F, 1.0F); poseStack.translate(0.0F, -1.501F, 0.0F); float limbSwing = entity.walkAnimation.position(partialTick); float limbSwingAmount = entity.walkAnimation.speed(partialTick); float ageInTicks = entity.tickCount + partialTick; - float netHeadYaw = Mth.rotLerp(partialTick, entity.yHeadRotO, entity.yHeadRot) - entityYaw; + float rawHeadYaw = Mth.rotLerp(partialTick, entity.yHeadRotO, entity.yHeadRot) - bodyYaw; + float maxHeadYaw = entity.getMaxHeadYRot(); + float netHeadYaw = Mth.clamp(Mth.wrapDegrees(rawHeadYaw), -maxHeadYaw, maxHeadYaw); float headPitch = Mth.lerp(partialTick, entity.xRotO, entity.getXRot()); model.setupAnim(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java index 85ea61a6..20ae6187 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAntBehavior.java @@ -23,7 +23,7 @@ import net.minecraft.world.entity.player.Player; public class GlimmerAntBehavior implements GlimmerVariantBehavior { private static final ResourceLocation REACH_BOOST_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmer_ant_reach_boost"); - private static final double REACH_BOOST_AMOUNT = 0.5D; + private static final double REACH_BOOST_AMOUNT = 1.5D; private static final float LARGE_ENEMY_MIN_HEALTH = 40.0F; private static final int ABILITY_COOLDOWN_TICKS = 20 * 120; private static final int STRENGTH_BURST_DURATION = 20 * 12; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java index 0c8ec870..ccdf4d96 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerAppleCowBehavior.java @@ -22,7 +22,7 @@ import net.minecraft.world.item.Items; import org.jetbrains.annotations.Nullable; public class GlimmerAppleCowBehavior implements GlimmerVariantBehavior { - private static final int SHEAR_REGROW_TICKS = 20 * 60 * 3; + private static final int SHEAR_REGROW_TICKS = 20 * 60 * 2; private static final float EXHAUSTION_REDUCTION = 0.25F; private static final int LOW_FOOD_THRESHOLD = 16; private static final int ABILITY_COOLDOWN_TICKS = 20 * 120; @@ -87,7 +87,7 @@ public class GlimmerAppleCowBehavior implements GlimmerVariantBehavior { @Override @Nullable public InteractionResult onInteract(GlimmerEntity entity, Player player, ItemStack stack, InteractionHand hand) { - if (entity.isTame() || entity.isShearCooldownActive() || !stack.is(Items.SHEARS)) { + if ((entity.isTame() && !entity.isOwnedBy(player)) || entity.isShearCooldownActive() || !stack.is(Items.SHEARS)) { return null; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java index 60292e1b..e573d0f4 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerElkaBehavior.java @@ -29,6 +29,7 @@ public class GlimmerElkaBehavior implements GlimmerVariantBehavior { private static final int CRY_ANIM_TICKS = 40; private static final double SHOCKWAVE_RADIUS = 6.0D; private static final double SHOCKWAVE_KNOCKBACK = 1.3D; + private static final float SHOCKWAVE_DAMAGE = 8.0F; private static ResourceLocation rl(String path) { return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); @@ -136,6 +137,9 @@ public class GlimmerElkaBehavior implements GlimmerVariantBehavior { } if (nearby instanceof LivingEntity living && (nearby instanceof Enemy || living.getLastHurtByMob() == owner)) { + if (nearby instanceof Enemy) { + living.hurt(owner.damageSources().mobAttack(entity), SHOCKWAVE_DAMAGE); + } Vec3 away = living.position().subtract(owner.position()); double horizontalDistance = Math.max(0.1D, away.horizontalDistance()); living.knockback(SHOCKWAVE_KNOCKBACK, -away.x / horizontalDistance, -away.z / horizontalDistance); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java index f907feef..2afb0a49 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java @@ -54,6 +54,26 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmering_pools") ); + private static final ResourceKey OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ouranwood_forest") + ); + private static final ResourceKey SPARSE_OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "sparse_ouranwood_forest") + ); + private static final ResourceKey FUNGAL_OURANWOOD_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "fungal_ouranwood_forest") + ); + private static final ResourceKey ELYTHIA_MEADOW = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_meadow") + ); + private static final ResourceKey PEACH_FOREST = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_forest") + ); private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); @@ -164,6 +184,10 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { this.entityData.set(ABILITY_COOLDOWN, this.getVariant().getBehavior().abilityCooldownTicks()); } + public void setAbilityCooldown(int ticks) { + this.entityData.set(ABILITY_COOLDOWN, Math.max(0, ticks)); + } + public float getAbilityCooldownFraction(float partialTick) { int max = this.getVariant().getBehavior().abilityCooldownTicks(); if (max <= 0) { @@ -351,7 +375,7 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { return InteractionResult.CONSUME; } - ItemStack filled = com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(this.getVariant()); + ItemStack filled = com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(this.getVariant(), this.entityData.get(ABILITY_COOLDOWN)); ItemStack result = net.minecraft.world.item.ItemUtils.createFilledResult(stack, player, filled); player.setItemInHand(hand, result); this.playSound(net.minecraft.sounds.SoundEvents.BOTTLE_FILL, 1.0F, 1.0F); @@ -385,18 +409,48 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { }; return poolVariants[this.random.nextInt(poolVariants.length)]; } + if (biome.is(OURANWOOD_FOREST) || biome.is(SPARSE_OURANWOOD_FOREST) || biome.is(FUNGAL_OURANWOOD_FOREST)) { + GlimmerVariant[] forestVariants = new GlimmerVariant[] { + GlimmerVariant.FROG, + GlimmerVariant.OURANWOOD_DEER + }; + return forestVariants[this.random.nextInt(forestVariants.length)]; + } + if (biome.is(ELYTHIA_MEADOW)) { + return GlimmerVariant.APPLE_COW; + } + if (biome.is(PEACH_FOREST)) { + return GlimmerVariant.ELKA; + } return GlimmerVariant.random(this.random); } + /** + * Wild Glimmers are common in Glimmering Pools, but only rarely (and only at night) + * turn up in Ouranwood Forest, the Elythia Meadow, and the Peach Forest. + */ + public static boolean checkGlimmerSpawnRules(EntityType type, ServerLevelAccessor level, + MobSpawnType spawnType, BlockPos pos, net.minecraft.util.RandomSource random) { + if (!net.minecraft.world.entity.animal.Animal.checkAnimalSpawnRules(type, level, spawnType, pos, random)) { + return false; + } + Holder biome = level.getBiome(pos); + if (biome.is(GLIMMERING_POOLS)) { + return true; + } + return level.getLevel().isNight(); + } + @Override public void tick() { super.tick(); + this.clampBodyToHeadRotation(); GlimmerParticles.tickAmbient(this, this.getDeltaMovement().horizontalDistanceSqr() > 0.01D); if (!this.level().isClientSide) { int fadeTicks = this.entityData.get(FADE_TICKS); - if (this.isTame()) { + if (this.isTame() || this.level().getBiome(this.blockPosition()).is(GLIMMERING_POOLS)) { if (fadeTicks > 0) { this.entityData.set(FADE_TICKS, 0); } @@ -473,6 +527,20 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { } } + /** + * With {@code noPhysics} true, Glimmers never travel through vanilla's normal movement path, + * so the usual body-follows-head catch-up never runs and a stationary Glimmer looking around + * (LookAtPlayerGoal/RandomLookAroundGoal only move the head) ends up with its head rendered + * far past the model's body — this keeps the body snapped within {@link #getMaxHeadYRot()} of it. + */ + private void clampBodyToHeadRotation() { + float maxYaw = this.getMaxHeadYRot(); + float delta = Mth.wrapDegrees(this.yHeadRot - this.yBodyRot); + if (Math.abs(delta) > maxYaw) { + this.yBodyRot = Mth.wrapDegrees(this.yHeadRot - Math.copySign(maxYaw, delta)); + } + } + private void applyGroundSupport() { BlockPos below = BlockPos.containing(this.getX(), this.getY() - 0.05D, this.getZ()); VoxelShape shape = this.level().getBlockState(below).getCollisionShape(this.level(), below); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java index b563d363..257cd340 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java @@ -28,6 +28,11 @@ import net.minecraft.world.entity.monster.Enemy; import net.minecraft.world.entity.monster.MagmaCube; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; public class GlimmerFrogBehavior implements GlimmerVariantBehavior { private static final int SMALL_SLIME_SIZE = 1; @@ -40,6 +45,10 @@ public class GlimmerFrogBehavior implements GlimmerVariantBehavior { private static final float GROWTH_PER_EAT_MAX = 0.6F; private static final float GROWTH_MAX_SCALE = 2.2F; private static final double GROWTH_DECAY_PER_TICK = 0.0006D; + private static final int TONGUE_ANIM_TICKS = 10; + private static final int TONGUE_GRAB_TICK = 6; + + private final Map pendingEats = new HashMap<>(); private static ResourceLocation rl(String path) { return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); @@ -123,9 +132,41 @@ public class GlimmerFrogBehavior implements GlimmerVariantBehavior { @Override public void tickAbilityCheck(GlimmerEntity entity, Player owner) { + if (this.pendingEats.containsKey(entity.getUUID())) { + return; + } LivingEntity target = findEdibleTarget(entity, owner); if (target != null) { - this.eatTarget(entity, owner, target); + this.startEat(entity, owner, target); + } + } + + @Override + public void customTick(GlimmerEntity entity) { + PendingEat pending = this.pendingEats.get(entity.getUUID()); + if (pending == null) { + return; + } + + if (!pending.target.isAlive() || entity.distanceToSqr(pending.target) > EAT_RANGE * EAT_RANGE * 4.0D) { + this.pendingEats.remove(entity.getUUID()); + return; + } + + pending.ticksRemaining--; + if (pending.ticksRemaining == TONGUE_ANIM_TICKS - TONGUE_GRAB_TICK) { + // The tongue "catches" the target partway through the animation and reels it in. + entity.playSound(SoundEvents.FROG_TONGUE, 1.0F, 1.0F); + } + if (pending.ticksRemaining <= TONGUE_ANIM_TICKS - TONGUE_GRAB_TICK) { + Vec3 mouth = entity.position().add(0.0D, entity.getBbHeight() * 0.5D, 0.0D); + Vec3 pulled = pending.target.position().lerp(mouth, 0.55D); + pending.target.teleportTo(pulled.x, pulled.y, pulled.z); + } + + if (pending.ticksRemaining <= 0) { + this.pendingEats.remove(entity.getUUID()); + this.finishEat(entity, pending.owner, pending.target); } } @@ -157,16 +198,32 @@ public class GlimmerFrogBehavior implements GlimmerVariantBehavior { return target.getType().is(NO_EAT_TAG); } - private void eatTarget(GlimmerEntity entity, Player owner, LivingEntity target) { + private void startEat(GlimmerEntity entity, Player owner, LivingEntity target) { + PendingEat pending = new PendingEat(); + pending.target = target; + pending.owner = owner; + pending.ticksRemaining = TONGUE_ANIM_TICKS; + this.pendingEats.put(entity.getUUID(), pending); + + entity.playAbilityAnimation(TONGUE_ANIM_TICKS); + entity.playSound(SoundEvents.FROG_LONG_JUMP, 0.8F, 1.4F); + entity.startAbilityCooldown(); + } + + private void finishEat(GlimmerEntity entity, Player owner, LivingEntity target) { float growthAdd = Mth.clamp(target.getMaxHealth() / 40.0F, GROWTH_PER_EAT_MIN, GROWTH_PER_EAT_MAX); entity.setGrowthScale(Math.min(GROWTH_MAX_SCALE, entity.getGrowthScale() + growthAdd)); Component targetName = target.getDisplayName(); entity.playSound(SoundEvents.FROG_EAT, 1.2F, 0.9F); - target.teleportTo(entity.getX(), entity.getY() + entity.getBbHeight() * 0.5D, entity.getZ()); target.remove(Entity.RemovalReason.DISCARDED); this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.frog", targetName)); - entity.startAbilityCooldown(); + } + + private static final class PendingEat { + LivingEntity target; + Player owner; + int ticksRemaining; } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java index e607c230..c8310211 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerOuranwoodDeerBehavior.java @@ -21,6 +21,13 @@ import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animation.RawAnimation; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + public class GlimmerOuranwoodDeerBehavior implements GlimmerVariantBehavior { private static final int PASSIVE_REFRESH_DURATION = 20 * 4; private static final int ABILITY_COOLDOWN_TICKS = 20 * 10; @@ -28,11 +35,15 @@ public class GlimmerOuranwoodDeerBehavior implements GlimmerVariantBehavior { private static final RawAnimation RUN_ANIM = RawAnimation.begin().thenLoop("run"); private static final double CHARGE_RANGE = 12.0D; private static final double CHARGE_CONE_DOT = 0.5D; - private static final double CHARGE_CORRIDOR_WIDTH = 1.75D; - private static final float CHARGE_DAMAGE = 9.0F; + private static final double CHARGE_HIT_RADIUS = 1.5D; + private static final double CHARGE_SPEED = 1.4D; + private static final int CHARGE_DURATION_TICKS = 14; + private static final float CHARGE_DAMAGE = 14.0F; private static final double CHARGE_KNOCKBACK = 1.6D; private static final int CHARGE_ANIM_TICKS = 45; + private final Map activeCharges = new HashMap<>(); + private static ResourceLocation rl(String path) { return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); } @@ -143,33 +154,63 @@ public class GlimmerOuranwoodDeerBehavior implements GlimmerVariantBehavior { } if (bestTarget != null) { - this.performCharge(entity, owner, bestTarget); + this.startCharge(entity, owner, bestTarget); } } - private void performCharge(GlimmerEntity entity, Player owner, LivingEntity target) { + private void startCharge(GlimmerEntity entity, Player owner, LivingEntity target) { Vec3 from = entity.position(); Vec3 direction = target.position().subtract(from); double horizontalDistance = Math.max(1.0D, direction.horizontalDistance()); - double dirX = direction.x / horizontalDistance; - double dirZ = direction.z / horizontalDistance; - entity.setDeltaMovement(dirX * 1.4D, entity.getDeltaMovement().y, dirZ * 1.4D); + ChargeState state = new ChargeState(); + state.dirX = direction.x / horizontalDistance; + state.dirZ = direction.z / horizontalDistance; + state.ticksRemaining = CHARGE_DURATION_TICKS; + state.owner = owner; + this.activeCharges.put(entity.getUUID(), state); + entity.playAbilityAnimation(CHARGE_ANIM_TICKS); entity.playSound(SoundEvents.RAVAGER_ROAR, 1.0F, 1.3F); - - AABB corridor = new AABB(from, target.position()).inflate(CHARGE_CORRIDOR_WIDTH, 1.5D, CHARGE_CORRIDOR_WIDTH); - for (Entity candidate : owner.level().getEntities(entity, corridor)) { - if (!(candidate instanceof Enemy) || !(candidate instanceof LivingEntity living) || !living.isAlive()) { - continue; - } - living.hurt(owner.damageSources().mobAttack(entity), CHARGE_DAMAGE); - Vec3 away = living.position().subtract(from); - double awayDistance = Math.max(0.1D, away.horizontalDistance()); - living.knockback(CHARGE_KNOCKBACK, -away.x / awayDistance, -away.z / awayDistance); - } - this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.deer")); entity.startAbilityCooldown(); } + + @Override + public void customTick(GlimmerEntity entity) { + ChargeState state = this.activeCharges.get(entity.getUUID()); + if (state == null) { + return; + } + + if (!entity.isAlive() || state.ticksRemaining <= 0) { + this.activeCharges.remove(entity.getUUID()); + return; + } + + state.ticksRemaining--; + entity.setDeltaMovement(state.dirX * CHARGE_SPEED, entity.getDeltaMovement().y, state.dirZ * CHARGE_SPEED); + + AABB hitBox = entity.getBoundingBox().inflate(CHARGE_HIT_RADIUS); + for (Entity candidate : entity.level().getEntities(entity, hitBox)) { + if (!(candidate instanceof Enemy) || !(candidate instanceof LivingEntity living) || !living.isAlive() + || state.alreadyHit.contains(candidate.getUUID())) { + continue; + } + + living.hurt(state.owner.damageSources().mobAttack(entity), CHARGE_DAMAGE); + Vec3 away = living.position().subtract(entity.position()); + double awayDistance = Math.max(0.1D, away.horizontalDistance()); + living.knockback(CHARGE_KNOCKBACK, -away.x / awayDistance, -away.z / awayDistance); + state.alreadyHit.add(candidate.getUUID()); + } + } + + private static final class ChargeState { + double dirX; + double dirZ; + int ticksRemaining; + Player owner; + final Set alreadyHit = new HashSet<>(); + } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java index 596c3c1b..3d715b05 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/GlimmerBottleItem.java @@ -6,6 +6,7 @@ import com.craisinlord.antarchy.content.entity.glimmer.GlimmerCompanionSavedData import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity; import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant; import java.util.List; +import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; @@ -18,17 +19,27 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemUtils; import net.minecraft.world.item.Items; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.CustomData; import net.minecraft.world.level.Level; import org.jetbrains.annotations.Nullable; public class GlimmerBottleItem extends Item { + private static final String ABILITY_COOLDOWN_TAG = "AbilityCooldown"; + public GlimmerBottleItem() { super(new Item.Properties().stacksTo(1)); } public static ItemStack create(GlimmerVariant variant) { + return create(variant, 0); + } + + public static ItemStack create(GlimmerVariant variant, int abilityCooldown) { ItemStack stack = new ItemStack(AntarchyObjects.GLIMMER_BOTTLE.get()); stack.set(AntarchyObjects.GLIMMER_VARIANT_COMPONENT.get(), variant); + if (abilityCooldown > 0) { + CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> tag.putInt(ABILITY_COOLDOWN_TAG, abilityCooldown)); + } return stack; } @@ -37,6 +48,10 @@ public class GlimmerBottleItem extends Item { return stack.get(AntarchyObjects.GLIMMER_VARIANT_COMPONENT.get()); } + public static int getStoredAbilityCooldown(ItemStack stack) { + return stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getInt(ABILITY_COOLDOWN_TAG); + } + @Override public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); @@ -58,6 +73,7 @@ public class GlimmerBottleItem extends Item { glimmer.lockVariant(variant); glimmer.tame(player); glimmer.setOrderedToSit(false); + glimmer.setAbilityCooldown(getStoredAbilityCooldown(stack)); level.addFreshEntity(glimmer); GlimmerCompanionSavedData.replaceCompanion(((ServerLevel) level).getServer(), player.getUUID(), glimmer.getUUID()); GlimmerParticles.tickBurst(glimmer); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java index bf7750b7..92d021ab 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -76,9 +76,11 @@ public class ElythiaBiomeSource extends BiomeSource { private final int molewormCavesMaxQuartY; private final int surfaceBiomeSampleQuartY; private final int seaLevelQuartY; + private final int undergroundGuardMaxQuartY; private final Holder oceanHolder; private final Holder defaultLandHolder; private final Holder glimmeringPoolsHolder; + private final Holder ouranwoodForestHolder; public ElythiaBiomeSource(Climate.ParameterList> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY, int oceanMaxY, int seaLevel) { this.parameters = parameters; @@ -90,6 +92,11 @@ public class ElythiaBiomeSource extends BiomeSource { this.molewormCavesMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY); this.surfaceBiomeSampleQuartY = QuartPos.fromBlock(surfaceBiomeSampleY); this.seaLevelQuartY = QuartPos.fromBlock(seaLevel); + // Cave pockets carved into hills/mountains above sea level have no other guard — + // they just resolve via raw climate matching, which can land on peach_forest/glimmering_pools + // even though those are meant to be surface-only. Anything at or below this Y gets + // treated as underground for those two biomes specifically. + this.undergroundGuardMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY + 40); this.oceanHolder = parameters.values().stream() .map(Pair::getSecond) .filter(h -> h.is(ELYTHIA_OCEAN)) @@ -100,6 +107,11 @@ public class ElythiaBiomeSource extends BiomeSource { .filter(h -> h.is(GLIMMERING_POOLS)) .findFirst() .orElse(null); + this.ouranwoodForestHolder = parameters.values().stream() + .map(Pair::getSecond) + .filter(h -> h.is(OURANWOOD_FOREST)) + .findFirst() + .orElse(null); this.defaultLandHolder = parameters.values().stream() .map(Pair::getSecond) .filter(h -> !isOceanBiome(h) && !h.is(ELYTHIA_BEACH) @@ -124,11 +136,6 @@ public class ElythiaBiomeSource extends BiomeSource { protected Stream> collectPossibleBiomes() { return this.delegate.possibleBiomes().stream(); } - - // Conservative threshold well inside the ocean entry range (-0.85 to -0.92). - // At continentalness < -0.80 the terrain is reliably below sea level. - // Transition-zone columns (-0.80 to -0.85) are treated as land to avoid - // ocean biome appearing over above-sea-level terrain. private static final long OCEAN_CONTINENTALNESS_THRESHOLD = Climate.quantizeCoord(-0.87f); @Override @@ -140,7 +147,7 @@ public class ElythiaBiomeSource extends BiomeSource { return resolveSurfaceFallback(x, y, z, sampler, MOLEWORM_CAVES, GLIMMERING_POOLS); } - // Use continentalness (XZ-only noise) to classify the column. + // Use continentalness o classify the column. // Ocean columns get the ocean biome at every Y so structures, particles, // and ambient effects work correctly above the water surface. // Cave biomes are always preserved even in ocean columns. @@ -160,13 +167,23 @@ public class ElythiaBiomeSource extends BiomeSource { return oceanHolder; } - // Land column: prevent ocean biomes from bleeding in at any Y + // Land column prevent ocean biomes from sneakin in if (isOceanBiome(biome)) { return resolveLandFallback(x, z, sampler); } + if (biome.is(SPARSE_OURANWOOD_FOREST) && !isSparseOuranwoodCandidate(target, x, z)) { + biome = this.ouranwoodForestHolder != null ? this.ouranwoodForestHolder : biome; + } + if (isGlimmeringPoolsCandidate(biome, target, x, z)) { - return this.glimmeringPoolsHolder != null ? this.glimmeringPoolsHolder : biome; + biome = this.glimmeringPoolsHolder != null ? this.glimmeringPoolsHolder : biome; + } + + // Neither peach_forest nor glimmering_pools should ever generate underground — + // fall back to whatever a nearby surface reference sample would give instead. + if ((biome.is(PEACH_FOREST) || biome.is(GLIMMERING_POOLS)) && y <= this.undergroundGuardMaxQuartY) { + return resolveSurfaceFallback(x, y, z, sampler, PEACH_FOREST, GLIMMERING_POOLS); } return biome; @@ -182,8 +199,10 @@ public class ElythiaBiomeSource extends BiomeSource { } private static boolean isOuranwoodBiome(Holder biome) { + // peach_forest is deliberately excluded here: letting glimmering_pools carve + // into it fragments its own (already modest) territory into tiny patches. return biome.is(OURANWOOD_FOREST) || biome.is(SPARSE_OURANWOOD_FOREST) - || biome.is(PEACH_FOREST) || biome.is(FUNGAL_OURANWOOD_FOREST); + || biome.is(FUNGAL_OURANWOOD_FOREST); } private static boolean isGlimmeringPoolsCandidate(Holder biome, Climate.TargetPoint target, int x, int z) { @@ -196,30 +215,48 @@ public class ElythiaBiomeSource extends BiomeSource { long weirdness = target.weirdness(); long depth = target.depth(); - if (humidity < Climate.quantizeCoord(0.68F) || humidity > Climate.quantizeCoord(1.0F)) { + if (humidity < Climate.quantizeCoord(0.64F) || humidity > Climate.quantizeCoord(1.0F)) { return false; } - if (continentalness < Climate.quantizeCoord(0.32F) || continentalness > Climate.quantizeCoord(0.88F)) { + if (continentalness < Climate.quantizeCoord(0.29F) || continentalness > Climate.quantizeCoord(0.90F)) { return false; } - if (weirdness < Climate.quantizeCoord(-0.84F) || weirdness > Climate.quantizeCoord(0.29F)) { + if (weirdness < Climate.quantizeCoord(-0.88F) || weirdness > Climate.quantizeCoord(0.33F)) { return false; } if (depth < Climate.quantizeCoord(0.0F) || depth > Climate.quantizeCoord(0.80F)) { return false; } - // Hash on coarse cells (not raw per-quart coords) so eligible columns - // clump into contiguous patches instead of speckling per-quart. - // Cell size bumped from 6 to 8 blocks so patches (and the pools/streams - // they host) run slightly larger than before. - long cellX = Math.floorDiv(x, 8); - long cellZ = Math.floorDiv(z, 8); + long cellX = Math.floorDiv(x, 11); + long cellZ = Math.floorDiv(z, 11); long gate = Math.floorMod(cellX * 73428767L + cellZ * 912931L, 5L); - return gate <= 2L; + return gate <= 3L; + } + + private static boolean isSparseOuranwoodCandidate(Climate.TargetPoint target, int x, int z) { + if (target.temperature() > Climate.quantizeCoord(0.24F)) { + return false; + } + if (target.humidity() > Climate.quantizeCoord(0.70F)) { + return false; + } + if (target.continentalness() < Climate.quantizeCoord(0.90F)) { + return false; + } + if (target.erosion() > Climate.quantizeCoord(-0.22F)) { + return false; + } + if (target.weirdness() < Climate.quantizeCoord(0.92F)) { + return false; + } + + long cellX = Math.floorDiv(x, 24); + long cellZ = Math.floorDiv(z, 24); + long gate = Math.floorMod(cellX * 1103515245L + cellZ * 2147483647L, 12L); + return gate == 0L; } - // Used for moleworm caves — returns best Y-sample, falls back to whatever the delegate gives @SafeVarargs private Holder resolveSurfaceFallback(int x, int y, int z, Climate.Sampler sampler, ResourceKey... excluded) { Holder fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); @@ -237,7 +274,6 @@ public class ElythiaBiomeSource extends BiomeSource { return fallback; } - // Used when ocean bleeds into a land column — guaranteed to never return an ocean/cave biome private Holder resolveLandFallback(int x, int z, Climate.Sampler sampler) { Holder fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); if (!isOceanOrCave(fallback)) return fallback; @@ -269,9 +305,6 @@ public class ElythiaBiomeSource extends BiomeSource { try { this.delegate.addDebugInfo(debug, pos, sampler); } catch (NullPointerException ignored) { - // TerraBlender's MixinMultiNoiseBiomeSource.addDebugInfo reads an internal - // field (uniqueness) that it only injects into TerraBlender-registered sources. - // Our delegate is not one of those, so we swallow the NPE here. } debug.add("Elythia mole cave cap: y<=" + this.molewormCavesMaxY); debug.add("Elythia sea level: " + this.seaLevel); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java index 7917e702..68c9e102 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java @@ -23,6 +23,8 @@ import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConf public class ElythiaFloraFeature extends Feature { private static final String SIZEABLE_FOLIAGE_MODID = "sizeable_foliage"; + private static final ResourceLocation CAMELLIA_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "camellia"); + private static final ResourceLocation SPIDER_LILY_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "spider_lily"); private final Variant variant; @@ -40,20 +42,18 @@ public class ElythiaFloraFeature extends Feature { case FOREST -> 185; case MEADOW -> 95; case PEACH_FOREST -> 120; - case TORCHFLOWER_FIELDS -> 60; case BUTTERFLY_FIELDS -> 150; case FLOWER_FOREST_MILKWEED -> 14; }; int radius = switch (this.variant) { case FOREST -> 8; - case MEADOW, PEACH_FOREST, TORCHFLOWER_FIELDS -> 14; + case MEADOW, PEACH_FOREST -> 14; case BUTTERFLY_FIELDS -> 18; case FLOWER_FOREST_MILKWEED -> 8; }; boolean placedAny = false; int torchflowerPatchRolls = switch (this.variant) { - case TORCHFLOWER_FIELDS -> 3 + random.nextInt(3); case BUTTERFLY_FIELDS -> 2 + random.nextInt(3); case PEACH_FOREST -> 1; case FLOWER_FOREST_MILKWEED -> 0; @@ -64,7 +64,6 @@ public class ElythiaFloraFeature extends Feature { case FOREST -> 0.24F; case MEADOW -> 0.42F; case PEACH_FOREST -> 0.08F; - case TORCHFLOWER_FIELDS -> 0.95F; case BUTTERFLY_FIELDS -> 0.24F; case FLOWER_FOREST_MILKWEED -> 0.0F; }; @@ -76,7 +75,6 @@ public class ElythiaFloraFeature extends Feature { if (random.nextFloat() < switch (this.variant) { case MEADOW -> 0.1F; case PEACH_FOREST -> 0.0F; - case TORCHFLOWER_FIELDS -> 0.04F; case BUTTERFLY_FIELDS -> 0.12F; case FOREST -> 0.05F; case FLOWER_FOREST_MILKWEED -> 0.0F; @@ -86,7 +84,6 @@ public class ElythiaFloraFeature extends Feature { if (random.nextFloat() < switch (this.variant) { case MEADOW -> 0.16F; case PEACH_FOREST -> 0.0F; - case TORCHFLOWER_FIELDS -> 0.08F; case BUTTERFLY_FIELDS -> 0.95F; case FOREST -> 0.06F; case FLOWER_FOREST_MILKWEED -> 0.18F; @@ -96,13 +93,15 @@ public class ElythiaFloraFeature extends Feature { if (random.nextFloat() < switch (this.variant) { case MEADOW -> 0.16F; case PEACH_FOREST -> 0.0F; - case TORCHFLOWER_FIELDS -> 0.08F; case BUTTERFLY_FIELDS -> 0.95F; case FOREST -> 0.06F; case FLOWER_FOREST_MILKWEED -> 0.18F; }) { placedAny |= this.placeMilkweedPatch(level, origin, random, AntarchyObjects.PINK_MILKWEED.get()); } + if (this.variant == Variant.PEACH_FOREST && random.nextFloat() < 0.025F) { + placedAny |= this.placeMilkweedPatch(level, origin, random, antarchyBlock(CAMELLIA_ID)); + } if (this.variant == Variant.FOREST || this.variant == Variant.PEACH_FOREST) { placedAny |= this.placeBigBushes(level, origin, random, radius); @@ -132,20 +131,6 @@ public class ElythiaFloraFeature extends Feature { } private boolean placeSelectedPlant(WorldGenLevel level, BlockPos plantPos, BlockPos groundPos, RandomSource random) { - if (this.variant == Variant.TORCHFLOWER_FIELDS) { - float roll = random.nextFloat(); - if (roll < 0.14F) { - return placeDouble(level, plantPos, torchflowerBush().defaultBlockState()); - } - if (roll < 0.58F) { - return placeSingle(level, plantPos, Blocks.TORCHFLOWER); - } - if (roll < 0.94F) { - return placeSingle(level, plantPos, Blocks.SHORT_GRASS); - } - return placeDouble(level, plantPos, Blocks.TALL_GRASS.defaultBlockState()); - } - if (this.variant == Variant.BUTTERFLY_FIELDS) { float roll = random.nextFloat(); if (roll < 0.18F) { @@ -179,6 +164,9 @@ public class ElythiaFloraFeature extends Feature { if (this.variant == Variant.PEACH_FOREST) { float roll = random.nextFloat(); + if (roll < 0.01F) { + return placeSingle(level, plantPos, antarchyBlock(SPIDER_LILY_ID)); + } if (roll < 0.58F) { return placeSingle(level, plantPos, Blocks.SHORT_GRASS); } @@ -231,6 +219,14 @@ public class ElythiaFloraFeature extends Feature { return block == Blocks.AIR ? Blocks.TORCHFLOWER : block; } + private static Block antarchyBlock(ResourceLocation id) { + Block block = BuiltInRegistries.BLOCK.get(id); + if (block == Blocks.AIR) { + throw new IllegalStateException("Missing block: " + id); + } + return block; + } + private boolean placeBigBushes(WorldGenLevel level, BlockPos origin, RandomSource random, int radius) { Block bushBlock = BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath(SIZEABLE_FOLIAGE_MODID, "big_bush")); if (!(bushBlock instanceof BigBushBlock)) { @@ -343,18 +339,23 @@ public class ElythiaFloraFeature extends Feature { return false; } - int radius = this.variant == Variant.TORCHFLOWER_FIELDS ? 4 : this.variant == Variant.MEADOW ? 3 : this.variant == Variant.BUTTERFLY_FIELDS ? 3 : 2; - int plants = this.variant == Variant.TORCHFLOWER_FIELDS - ? 8 + random.nextInt(8) - : this.variant == Variant.BUTTERFLY_FIELDS + int radius = this.variant == Variant.MEADOW ? 3 : this.variant == Variant.BUTTERFLY_FIELDS ? 3 : 2; + int plants = this.variant == Variant.BUTTERFLY_FIELDS ? 4 + random.nextInt(5) : 3 + random.nextInt(this.variant == Variant.MEADOW ? 4 : 3); + boolean bushEligible = this.variant == Variant.FOREST || this.variant == Variant.MEADOW; boolean placed = false; for (int i = 0; i < plants; i++) { BlockPos plantPos = samplePatchPos(level, patchCenter, radius, random); if (plantPos == null) { continue; } + if (bushEligible && random.nextFloat() < 0.12F) { + if (placeDouble(level, plantPos, torchflowerBush().defaultBlockState())) { + placed = true; + } + continue; + } if (placeSingle(level, plantPos, Blocks.TORCHFLOWER)) { placed = true; } @@ -421,7 +422,6 @@ public class ElythiaFloraFeature extends Feature { case FOREST -> 3; case MEADOW -> 5; case PEACH_FOREST -> 3; - case TORCHFLOWER_FIELDS -> 2; case BUTTERFLY_FIELDS -> 3; case FLOWER_FOREST_MILKWEED -> 2; }; @@ -581,7 +581,6 @@ public class ElythiaFloraFeature extends Feature { FOREST, MEADOW, PEACH_FOREST, - TORCHFLOWER_FIELDS, BUTTERFLY_FIELDS, FLOWER_FOREST_MILKWEED } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java index 08d7a2f4..16304a22 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenPoolFeature.java @@ -19,8 +19,6 @@ public final class LumenPoolFeature extends Feature { private static final int SMALL_RADIUS_MAX = 4; private static final int LARGE_RADIUS_MIN = 5; private static final int LARGE_RADIUS_MAX = 6; - private static final int HUGE_RADIUS_MIN = 11; - private static final int HUGE_RADIUS_MAX = 17; public LumenPoolFeature(Codec codec) { super(codec); @@ -37,18 +35,10 @@ public final class LumenPoolFeature extends Feature { return false; } - int radius; - int maxDepth; - if (random.nextInt(20) == 0) { - radius = randomBetween(random, HUGE_RADIUS_MIN, HUGE_RADIUS_MAX); - maxDepth = randomBetween(random, 9, 13); - } else if (random.nextInt(8) == 0) { - radius = randomBetween(random, LARGE_RADIUS_MIN, LARGE_RADIUS_MAX); - maxDepth = randomBetween(random, 4, 6); - } else { - radius = randomBetween(random, SMALL_RADIUS_MIN, SMALL_RADIUS_MAX); - maxDepth = randomBetween(random, 3, 4); - } + int radius = random.nextInt(8) == 0 + ? randomBetween(random, LARGE_RADIUS_MIN, LARGE_RADIUS_MAX) + : randomBetween(random, SMALL_RADIUS_MIN, SMALL_RADIUS_MAX); + int maxDepth = radius >= LARGE_RADIUS_MIN ? randomBetween(random, 4, 6) : randomBetween(random, 3, 4); BlockState lumenBlockState = AntarchyObjects.LUMEN_BLOCK.get().defaultBlockState(); BlockState shellstoneState = AntarchyObjects.SHELLSTONE.get().defaultBlockState(); BlockState tuffState = Blocks.TUFF.defaultBlockState(); @@ -123,12 +113,26 @@ public final class LumenPoolFeature extends Feature { BlockState floorState = pickFloorState(random, shellstoneState, tuffState, mossState, edge); level.setBlock(mutable, floorState, 2); placedAny = true; + + clearFloatingVegetation(level, worldX, worldZ, localSurfaceY); } } return placedAny; } + private static void clearFloatingVegetation(WorldGenLevel level, int x, int z, int surfaceY) { + int topOfDebris = Math.max(surfaceY, level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1); + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int offset = 1; offset <= 32; offset++) { + mutable.set(x, topOfDebris + offset, z); + BlockState state = level.getBlockState(mutable); + if (!state.isAir() && state.canBeReplaced()) { + level.setBlock(mutable, Blocks.AIR.defaultBlockState(), 2); + } + } + } + private static BlockPos findSurfaceCenter(WorldGenLevel level, BlockPos origin) { int bestY = Integer.MIN_VALUE; BlockPos bestPos = null; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenSpireFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenSpireFeature.java new file mode 100644 index 00000000..f750c276 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenSpireFeature.java @@ -0,0 +1,249 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class LumenSpireFeature extends Feature { + private static final int MIN_HEIGHT = 15; + private static final int MAX_HEIGHT = 20; + private static final int MIN_LEVELS = 3; + private static final int MAX_LEVELS = 4; + private static final int SHAFT_RADIUS = 3; + private static final int SHELF_RADIUS = SHAFT_RADIUS + 2; + private static final int POOL_RADIUS = 2; + + public LumenSpireFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + BlockPos base = findSurfaceCenter(level, origin); + if (base == null) { + return false; + } + + int height = randomBetween(random, MIN_HEIGHT, MAX_HEIGHT); + int levels = randomBetween(random, MIN_LEVELS, MAX_LEVELS); + if (base.getY() + height >= level.getMaxBuildHeight() - 2) { + return false; + } + + BlockState shellstoneState = AntarchyObjects.SHELLSTONE.get().defaultBlockState(); + BlockState tuffState = Blocks.TUFF.defaultBlockState(); + BlockState mossState = Blocks.MOSS_BLOCK.defaultBlockState(); + BlockState lumenBlockState = AntarchyObjects.LUMEN_BLOCK.get().defaultBlockState(); + + Direction cascadeDir = Direction.Plane.HORIZONTAL.getRandomDirection(random); + int cascadeX = cascadeDir.getStepX() * (SHAFT_RADIUS + 1); + int cascadeZ = cascadeDir.getStepZ() * (SHAFT_RADIUS + 1); + int lipX = cascadeDir.getStepX() * (SHAFT_RADIUS + 1 + POOL_RADIUS); + int lipZ = cascadeDir.getStepZ() * (SHAFT_RADIUS + 1 + POOL_RADIUS); + + boolean placed = false; + for (int y = 0; y <= height; y++) { + double heightFraction = (double) y / height; + int radius = Math.max(2, Mth.floor(SHAFT_RADIUS * (1.0D - heightFraction * 0.35D))); + placed |= placePillarSlice(level, base.above(y), radius, random, shellstoneState, tuffState, mossState); + } + + int[] terraceHeights = new int[levels]; + for (int i = 0; i < levels; i++) { + terraceHeights[i] = Mth.floor(height * (double) (i + 1) / levels); + } + + int lipWorldX = base.getX() + lipX; + int lipWorldZ = base.getZ() + lipZ; + int groundLandingY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, lipWorldX, lipWorldZ) - 1; + + for (int i = levels - 1; i >= 0; i--) { + int terraceY = base.getY() + terraceHeights[i]; + BlockPos shelfCenter = new BlockPos(base.getX(), terraceY, base.getZ()); + placeShelfRing(level, shelfCenter, random, shellstoneState, tuffState, mossState); + + BlockPos poolCenter = new BlockPos(base.getX() + cascadeX, terraceY, base.getZ() + cascadeZ); + carveTerracePool(level, poolCenter, shellstoneState, tuffState, lumenBlockState, i == levels - 1); + + BlockPos lipPos = new BlockPos(base.getX() + lipX, terraceY - 1, base.getZ() + lipZ); + level.setBlock(lipPos, Blocks.AIR.defaultBlockState(), 2); + + int nextTerraceY = i > 0 ? base.getY() + terraceHeights[i - 1] : groundLandingY; + for (int y = terraceY - 2; y > nextTerraceY; y--) { + level.setBlock(new BlockPos(lipWorldX, y, lipWorldZ), Blocks.AIR.defaultBlockState(), 2); + } + + clearAboveShelf(level, shelfCenter); + placed = true; + } + + carveBaseBasin(level, new BlockPos(lipWorldX, groundLandingY, lipWorldZ), random, shellstoneState, tuffState, mossState, lumenBlockState); + + return placed; + } + + private static boolean placePillarSlice(WorldGenLevel level, BlockPos center, int radius, RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState) { + boolean placed = false; + double rr = radius * radius; + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + double distance = (x * x + z * z) / Math.max(1.0D, rr); + if (distance > 1.0D) { + continue; + } + + BlockPos targetPos = center.offset(x, 0, z); + BlockState existing = level.getBlockState(targetPos); + if (!LumenWorldgenHelper.isSolidSupport(existing)) { + level.setBlock(targetPos, pickBodyState(distance, random, shellstoneState, tuffState, mossState), 2); + placed = true; + } + } + } + return placed; + } + + private static void placeShelfRing(WorldGenLevel level, BlockPos center, RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState) { + double rr = SHELF_RADIUS * SHELF_RADIUS; + for (int x = -SHELF_RADIUS; x <= SHELF_RADIUS; x++) { + for (int z = -SHELF_RADIUS; z <= SHELF_RADIUS; z++) { + double distance = (x * x + z * z) / Math.max(1.0D, rr); + if (distance > 1.0D) { + continue; + } + + BlockPos topPos = center.offset(x, 0, z); + level.setBlock(topPos, pickBodyState(distance, random, shellstoneState, tuffState, mossState), 2); + level.setBlock(topPos.below(), shellstoneState, 2); + } + } + } + + private static void carveTerracePool(WorldGenLevel level, BlockPos poolCenter, BlockState shellstoneState, BlockState tuffState, BlockState lumenBlockState, boolean isApex) { + double rr = POOL_RADIUS * POOL_RADIUS; + for (int x = -POOL_RADIUS; x <= POOL_RADIUS; x++) { + for (int z = -POOL_RADIUS; z <= POOL_RADIUS; z++) { + double distance = (x * x + z * z) / Math.max(1.0D, rr); + if (distance > 1.0D) { + continue; + } + + BlockPos floorPos = poolCenter.offset(x, -1, z); + BlockPos surfacePos = poolCenter.offset(x, 0, z); + level.setBlock(floorPos, shellstoneState, 2); + if (distance <= 0.55D) { + level.setBlock(surfacePos, LumenWorldgenHelper.lumenState(lumenBlockState, true), 2); + LumenWorldgenHelper.scheduleFluidTick(level, surfacePos); + } else { + level.setBlock(surfacePos, tuffState, 2); + } + } + } + + if (isApex) { + level.setBlock(poolCenter, LumenWorldgenHelper.lumenState(lumenBlockState, true), 2); + LumenWorldgenHelper.scheduleFluidTick(level, poolCenter); + } + } + + private static void carveBaseBasin(WorldGenLevel level, BlockPos landingPos, RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState, BlockState lumenBlockState) { + int radius = 4 + random.nextInt(2); + int depth = 2 + random.nextInt(2); + int waterlineY = landingPos.getY() - 1; + int floorY = waterlineY - depth; + double rr = radius * radius; + + for (int x = -radius - 1; x <= radius + 1; x++) { + for (int z = -radius - 1; z <= radius + 1; z++) { + double distance = (x * x + z * z) / Math.max(1.0D, rr); + BlockPos topPos = landingPos.offset(x, 0, z); + int surfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, topPos.getX(), topPos.getZ()) - 1; + + if (distance <= 1.0D) { + for (int y = surfaceY; y > floorY; y--) { + BlockPos fillPos = new BlockPos(topPos.getX(), y, topPos.getZ()); + if (y > waterlineY) { + level.setBlock(fillPos, Blocks.AIR.defaultBlockState(), 2); + } else { + level.setBlock(fillPos, LumenWorldgenHelper.lumenState(lumenBlockState, 0), 2); + LumenWorldgenHelper.scheduleFluidTick(level, fillPos); + } + } + level.setBlock(new BlockPos(topPos.getX(), floorY, topPos.getZ()), pickBodyState(distance, random, shellstoneState, tuffState, mossState), 2); + } else if (distance <= 1.25D) { + for (int y = surfaceY; y >= floorY; y--) { + level.setBlock(new BlockPos(topPos.getX(), y, topPos.getZ()), pickBodyState(distance, random, shellstoneState, tuffState, mossState), 2); + } + } + } + } + + level.setBlock(landingPos, LumenWorldgenHelper.lumenState(lumenBlockState, true), 2); + LumenWorldgenHelper.scheduleFluidTick(level, landingPos); + } + + private static void clearAboveShelf(WorldGenLevel level, BlockPos shelfCenter) { + for (int x = -SHELF_RADIUS; x <= SHELF_RADIUS; x++) { + for (int z = -SHELF_RADIUS; z <= SHELF_RADIUS; z++) { + double distance = (x * x + z * z) / (double) (SHELF_RADIUS * SHELF_RADIUS); + if (distance > 1.0D) { + continue; + } + + BlockPos columnTop = shelfCenter.offset(x, 0, z); + for (int offset = 1; offset <= 16; offset++) { + BlockPos abovePos = columnTop.above(offset); + BlockState aboveState = level.getBlockState(abovePos); + if (!aboveState.isAir() && aboveState.canBeReplaced()) { + level.setBlock(abovePos, Blocks.AIR.defaultBlockState(), 2); + } + } + } + } + } + + private static BlockState pickBodyState(double distance, RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState) { + if (distance > 0.85D) { + return random.nextFloat() < 0.4F ? mossState : tuffState; + } + return random.nextFloat() < 0.7F ? shellstoneState : tuffState; + } + + private static BlockPos findSurfaceCenter(WorldGenLevel level, BlockPos origin) { + int bestY = Integer.MIN_VALUE; + BlockPos bestPos = null; + for (int dx = -4; dx <= 4; dx++) { + for (int dz = -4; dz <= 4; dz++) { + int x = origin.getX() + dx; + int z = origin.getZ() + dz; + int topY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1; + BlockPos pos = LumenWorldgenHelper.findNaturalFloor(level, x, z, topY, level.getMinBuildHeight() + 1); + if (pos != null && pos.getY() > bestY) { + bestY = pos.getY(); + bestPos = pos; + } + } + } + return bestPos; + } + + private static int randomBetween(RandomSource random, int minInclusive, int maxInclusive) { + int min = Math.min(minInclusive, maxInclusive); + int max = Math.max(minInclusive, maxInclusive); + return min >= max ? min : min + random.nextInt(max - min + 1); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenStreamFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenStreamFeature.java index 0c2477f7..dcd5ba45 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenStreamFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/LumenStreamFeature.java @@ -15,9 +15,9 @@ import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; public final class LumenStreamFeature extends Feature { - private static final int MAX_LENGTH = 160; - private static final int MIN_LENGTH = 60; - private static final int MAX_WIDTH = 4; + private static final int MAX_LENGTH = 36; + private static final int MIN_LENGTH = 12; + private static final int MAX_WIDTH = 2; public LumenStreamFeature(Codec codec) { super(codec); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java index 4448150e..bb2dea0e 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestMossyBoulderFeature.java @@ -17,6 +17,8 @@ import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; public class PeachForestMossyBoulderFeature extends Feature { + private static final int ANGLE_SAMPLES = 16; + public PeachForestMossyBoulderFeature(Codec codec) { super(codec); } @@ -36,20 +38,25 @@ public class PeachForestMossyBoulderFeature extends Feature 1.0D + random.nextDouble() * 0.3D) { + double noiseFactor = sampleSilhouetteNoise(silhouetteNoise, x, z); + double distance = (x * x + z * z) / (Math.max(1.0D, rr) * noiseFactor * noiseFactor); + if (distance > 1.0D) { continue; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java index 6f3b6049..dad4fb39 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/PeachForestPondFeature.java @@ -39,6 +39,9 @@ public class PeachForestPondFeature extends Feature floorY; y--) { - level.setBlock(new BlockPos(topPos.getX(), y, topPos.getZ()), Blocks.WATER.defaultBlockState(), 2); + BlockPos waterPos = new BlockPos(topPos.getX(), y, topPos.getZ()); + level.setBlock(waterPos, Blocks.WATER.defaultBlockState(), 2); + LumenWorldgenHelper.scheduleFluidTick(level, waterPos); } level.setBlock(new BlockPos(topPos.getX(), floorY, topPos.getZ()), Blocks.TUFF.defaultBlockState(), 2); clearFloatingVegetation(level, topPos, center.getY()); placed = true; } else if (distance <= 1.2D) { int floorY = center.getY() - depth; - for (int y = center.getY(); y >= floorY; y--) { + for (int y = rimTopY; y >= floorY; y--) { level.setBlock(new BlockPos(topPos.getX(), y, topPos.getZ()), Blocks.TUFF.defaultBlockState(), 2); } - clearFloatingVegetation(level, topPos, center.getY()); + clearFloatingVegetation(level, topPos, rimTopY); placed = true; } else if (distance <= 1.45D && isSoil(level.getBlockState(topPos))) { level.setBlock(topPos, Blocks.TUFF.defaultBlockState(), 2); @@ -96,16 +101,12 @@ public class PeachForestPondFeature extends FeaturePx%Pf0{UR5*=&lTS#KaTv!xKa-+h_HM8t<4qblX(RuX(;dQt5epBpL&5AcsDtwy zltP}8>@pC#%npK=av;G=fwDk?b2lg-~EYtE&T%XsJ(Lzlsy;>me45N&uTfp`;tw+npBX z>AP70SeRC`aGK7`l5Wr+8o;S4s4llG=?0evuK}?6_7j88?ptKl<;D^)$@X?9EiN1O zLnrCO6?W!y9^D(msVc;mmoUi#-WzNhTeT5>99HS@d%1Y^62*^OOg?{!%VDFt)6YU` z70>vHu(v4ys4h3D>>7!UMFAkp5k619kpS`KC6YN!+_~8&Jtw`G-4Yv%A{LCw%5jxs zPP2H#f>Aj$Iwj4eG@s4RoTl@#s%5OaVJYSBdsZja!CraAv5pCSU>pvZ+nt z%S+hX6bh}|3^_&!_4Uvd@M2<0x`AhWq$Xfm+2QwMI-`UGVyNFQ(^*}Zi*~9C#bS}+ z*@;FM01ERf(wuKMW3Z4~rO>*K=cL!NtvMPlW5K9=@?eZ&u}E@lopNQ5BimQfSzRIqP)Px%4@pEpR5*=|l0Rq~aTLeDKb!UFDJV8b+Cc|}EE02*(01r{IEH}X*6Y@>QZhy8 z(n3R_m_h~#ZE!qNkYp%@n~X+U0;kRIK&z5k1Ls+1`#QAutBOM3`2KwOzW2Vse?(r* z(XyIvSz%(@sfIGLt&=qYVWFcT;+SIW)q<{?9sL}UPf2q2aMai+_;@lwbkFnMV`?3gX*#bf8s*g-ZN)PpCkThxeVV7{)g1K( z*NB8x@$AJD0Kl)o7`M_<(IZx<@;XwnBmhvMQe-=7nmp4edV^~e zDn)j_drZNIjCQ+?2hSfbp3AE_(iM#+rcJGbGU#SLgI%0e(f(A&RgGhFZ<`IAG4g7ThW(pAs=`5Z zERKn3lUQNeo|}8yY%89jQo~?7YMPEtOeV+g(z_49qn?XY_Mv#E0Q@};O&iJcf+v0K jxR5g&tQ9HK^ecY@uKyuZfC+G900000NkvXXu0mjf9>x## literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/spider_lily_stem.png b/common/src/main/resources/assets/antarchy/textures/block/spider_lily_stem.png new file mode 100644 index 0000000000000000000000000000000000000000..62dd4892fe5bb47f0cd8b0bd4cd3b5c8be8b3b3f GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Rh}-6Ar*{oCK+-aP~c&>yzk&y z{$I@E?&9?i-p{FNf7;gMJZa%wuU3JMlahS?m6df3C$7t0i3)#T`*hCqudy-gOQ$Fw z(^$LpvETuzTd&`-nVhrqOxwXAvt-JduM1Z(94VA^QrNkWsiM@pp4oH~*8;)M$vlY? r3Z}YxK+FICkMD0P1v1z`u3%=!ZB+J&lk&d{6k+gm^>bP0l+XkKnVd%o literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/spider_lily_top.png b/common/src/main/resources/assets/antarchy/textures/block/spider_lily_top.png new file mode 100644 index 0000000000000000000000000000000000000000..ec51cf7b79f990a292fec09a50362211754ec15d GIT binary patch literal 331 zcmV-R0kr;!P)ro7B4#$czOQbby7j)~#qYfV=UUR{fvVhZ&)o~I;bX^R_)+`ED8FenWkR`g?gA9v z6*G2sv4N5Kb}z$x+6Px$C`m*?R5*>@k+DvLP!xtgE?5^#y&3}2u>(y^M-w)8R}zWwE>8ulv$ED{+G9lhKQ(>5BE25q|R_O2f(sT`n|St zfMuI_u0i07a_tC~ZGOg&ZkBCg?QAthbfiwVBY@(|LEwwhbDQf>Vt4n`%7Kb?7XqN$ z5jaw>3KW!!S&~<|S(2kTmB4sXREaoBiKCQ@t0w@4qdAV$8H5>wFasb;mW(Gw^9q44 z%APx$bxA})R5*>rlEF#>VHAbGi3n@L#h9X? zVL}!evkat_5N%xa06s$tTU6U3h*mv9i>MwU5X6n5LJJugD7DBO7*Vs5q;NAWLTQ|g z7C~qA-~Yeo{O4RQ{5OQ(GYmamGfG;Ulz+8tQ}ITK5(I(0I-*@2qOg&v52u8TE^k?0}$QbXJgSz zcqzzyaDlq6bDqkWM1*0oC%i&WYcSz;0nkxYy4@}gpP%=3le(^x$X~IUQU%Kl96rB^ z3}BZ-h@yyIxqrbXIdOYDxThya5AnU-q^C9LC@KIwt$|$*4c>+^{&xk=sW2nSx^W0EfMb89g4ZMNyH{ODdy4u zD5bI`f@KemR)a=BvNJd9V`j!Vu$?S?I@!sTM(@F}&>Po!nD}S-0O)#>3{55S2|vA*mVE5GbvU;SxnrQ$e&j z6hTWZMN6w&P)jW>5@BQE&>uA<1_??MrTvgu6i5cvg=o3?9yphKlpqMa@Sg8G-_LX3 z3%3UUe5wP`=RyW$1S3Yd;a?rhcDuwd7mI~=G_=^EEevXZ27fGHJZXgFvX5|db>Q{- zu6$SAD;(@k_zfvexIJx1pC_?)wSuLdPT`7mDFwhqpVx=p{vn}M{sS9{AU+*&EY3`0 zYGj}SVglrHle=BOYduaJgx4_{2%y#J5;gV+S@nBOCnkUs9AM-!BgNcWx7loPG}f~v zqySj?D&+Bpk6JKI}kE)vV30N!#BqD2T32^k(62O%%FY20MexGxkT9~02G zd8|caG1S?cWluy26PMC)l)S`zG-Lh`CZN<4Px$TS-JgR5*>*l0QoVaTv!x7Y7kUM|gj{j?ktuYPf`^uu&WvY6@RKZ$Rh;1TJm% z0;HzFH1!nXpd~46kUKr}1=KVB`11XHe-F>|z`rkHk@%1~A1~5R zv-flUfZ&10iDhKXVA$^Sj72MmqiLUAlHd=njlIM{%V+!vd`XKE}Ky#fgvSv`T%K(V8Gmumr z+j<46NC4(GG~USPu7kr&p7?JOpk|lZwLXZMakef8=ifVEtzmfY9bjpc@e&n{NrgIGx&~Y1L8GFaxI-Fy;epd*CmJG~ZwZC!XCQdtC1%bdbC>A-`1k4;L$!egMdCXY00000 LNkvXXu0mjfl6$j} literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/popcorn.png b/common/src/main/resources/assets/antarchy/textures/item/popcorn.png new file mode 100644 index 0000000000000000000000000000000000000000..a7130653bfd5db0c3cb354ffd4c997bc6eb1e0c8 GIT binary patch literal 412 zcmV;N0b~A&P)Px$R!KxbR5*>jk}*reKp2MK6X}w)9h!)xDs<`6La~29x_0kg|A9ZC|HV!&nT?Yi zPA&oIBxDH%LuxKWdQA|rd`=gdCRGRVUGDDVzW3vO?tuRiWiCmm0FH_&t=ztAwpZ0#@6AB^DGGos8b z#5h))?Z$`ydXN5KgoZh003ZdYG>OpePV@8HUmngY1*gEXNUfB)WG^O_@RTYc2A)N6 z9OLu-8Rp3uYONvK-6@lTQ@z=#WKq&SOaQPK6Iwa*LcIiWm&qwo z%^?LRdodx$o>k_Rg6Aw0r_!aBGpF4jr(k{;HIE<#r&?=>?Z!u%L;!#^i4eyz9D7EG z%yNS?iJ<8Q8s?a(cW-y6?EIpKFbwgrdMq&cwGQU}D}4b)klv7+8}RY~0000 CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, Antarchy.MODID); - private static final DeferredRegister ARMOR_MATERIALS = DeferredRegister.create(Registries.ARMOR_MATERIAL, Antarchy.MODID); - private static final DeferredRegister> ENTITY_TYPES = DeferredRegister.create(Registries.ENTITY_TYPE, Antarchy.MODID); - private static final DeferredRegister> BLOCK_ENTITY_TYPES = DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, Antarchy.MODID); - private static final DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(Registries.PARTICLE_TYPE, Antarchy.MODID); - private static final DeferredRegister> FEATURES = DeferredRegister.create(Registries.FEATURE, Antarchy.MODID); - private static final DeferredRegister> BIOME_SOURCES = DeferredRegister.create(Registries.BIOME_SOURCE, Antarchy.MODID); - private static final DeferredRegister> DENSITY_FUNCTION_TYPES = DeferredRegister.create(Registries.DENSITY_FUNCTION_TYPE, Antarchy.MODID); - private static final DeferredRegister> ENTITY_SUB_PREDICATES = DeferredRegister.create(Registries.ENTITY_SUB_PREDICATE_TYPE, Antarchy.MODID); - private static final DeferredRegister ATTRIBUTES = DeferredRegister.create(Registries.ATTRIBUTE, Antarchy.MODID); - private static final TagKey BYPASSES_BLOODGLASS = - TagKey.create(net.minecraft.core.registries.Registries.DAMAGE_TYPE, ResourceLocation.fromNamespaceAndPath("antarchy", "bypasses_bloodglass")); - private static final DeferredHolder DOUBLE_DAMAGE_CHANCE = ATTRIBUTES.register( - "double_damage_chance", - () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.double_damage_chance", 0.0, 0.0, 1.0).setSyncable(true) - ); - private static final DeferredRegister MOB_EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, Antarchy.MODID); - private static final DeferredRegister POTIONS = DeferredRegister.create(Registries.POTION, Antarchy.MODID); - private static final DeferredRegister SOUND_EVENTS = DeferredRegister.create(Registries.SOUND_EVENT, Antarchy.MODID); - private static final DeferredRegister FLUIDS = DeferredRegister.create(Registries.FLUID, Antarchy.MODID); - private static final DeferredRegister> MENUS = DeferredRegister.create(Registries.MENU, Antarchy.MODID); - public static final DeferredHolder, net.minecraft.world.inventory.MenuType> DORRIE_INVENTORY_MENU = - MENUS.register("dorrie_inventory", () -> new net.minecraft.world.inventory.MenuType<>(com.craisinlord.antarchy.content.menu.DorrieInventoryMenu::new, FeatureFlags.DEFAULT_FLAGS)); - private static final DeferredRegister> DATA_COMPONENT_TYPES = - DeferredRegister.create(Registries.DATA_COMPONENT_TYPE, Antarchy.MODID); - private static final DeferredRegister> RECIPE_SERIALIZERS = - DeferredRegister.create(Registries.RECIPE_SERIALIZER, Antarchy.MODID); - public static final DeferredHolder, net.minecraft.core.component.DataComponentType> GLIMMER_VARIANT = - DATA_COMPONENT_TYPES.register("glimmer_variant", - () -> net.minecraft.core.component.DataComponentType.builder() - .persistent(com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.CODEC) - .networkSynchronized(com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.STREAM_CODEC) - .build()); - public static final DeferredHolder, net.minecraft.core.component.DataComponentType> AMERICAN = - DATA_COMPONENT_TYPES.register("american", - () -> net.minecraft.core.component.DataComponentType.builder() - .persistent(net.minecraft.util.Unit.CODEC) - .networkSynchronized(net.minecraft.network.codec.StreamCodec.unit(net.minecraft.util.Unit.INSTANCE)) - .build()); - public static final DeferredHolder, net.minecraft.world.item.crafting.RecipeSerializer> AMERICANIZE_SERIALIZER = - RECIPE_SERIALIZERS.register("americanize", () -> com.craisinlord.antarchy.content.AmericanizeRecipe.SERIALIZER); - private static final Tier ULTIMATE_TIER = new SimpleToolTier( - 3072, - 10.5F, - 0.0F, - Tiers.NETHERITE.getIncorrectBlocksForDrops(), - 25, - AntarchyFabricContent::ultimateRepairIngredient - ); - private static final Tier BLOOD_CRYSTAL_KATANA_TIER = new SimpleToolTier( - 1200, - 8.0F, - 0.0F, - Tiers.DIAMOND.getIncorrectBlocksForDrops(), - 18, - AntarchyFabricContent::bloodCrystalRepairIngredient - ); - public static final DeferredItem NIGHTMARE_SCALE = ITEMS.registerSimpleItem("nightmare_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant()); - public static final DeferredHolder SQUIDZOOKA_FIRE = registerSoundEvent("squidzooka_fire"); - public static final DeferredHolder SHRINK_RAY_SOUND = registerSoundEvent("shrink_ray"); - public static final DeferredHolder GROWTH_RAY_SOUND = registerSoundEvent("growth_ray"); - public static final DeferredHolder SIZE_RAY_CHARGE = registerSoundEvent("size_ray_charge"); - public static final DeferredHolder ANT_AMBIENT = registerSoundEvent("ant_ambient"); - public static final DeferredHolder ANT_IDLE = registerSoundEvent("ant_idle"); - public static final DeferredHolder ANT_HURT = registerSoundEvent("ant_hurt"); - public static final DeferredHolder ANT_BITE = registerSoundEvent("ant_bite"); - public static final DeferredHolder ANT_GATHER = registerSoundEvent("ant_gather"); - public static final DeferredHolder ANT_NEST = registerSoundEvent("ant_nest"); - public static final DeferredHolder CLOUD_SHARK_BITE = registerSoundEvent("cloud_shark_bite"); - public static final DeferredHolder CLOUD_SHARK_IDLE = registerSoundEvent("cloud_shark_idle"); - public static final DeferredHolder CLOUD_SHARK_HURT = registerSoundEvent("cloud_shark_hurt"); - public static final DeferredHolder CLOUD_SHARK_DEATH = registerSoundEvent("cloud_shark_death"); - public static final DeferredHolder CLOUD_SHARK_FLY = registerSoundEvent("cloud_shark_fly"); - public static final DeferredHolder CATERPILLAR_IDLE = registerSoundEvent("caterpillar_idle"); - public static final DeferredHolder CATERPILLAR_HURT = registerSoundEvent("caterpillar_hurt"); - public static final DeferredHolder CATERPILLAR_CRAWL = registerSoundEvent("caterpillar_crawl"); - public static final DeferredHolder BUTTERFLY_HURT = registerSoundEvent("butterfly_hurt"); - public static final DeferredHolder BRUTALFLY_IDLE = registerSoundEvent("brutalfly_idle"); - public static final DeferredHolder BRUTALFLY_DEATH = registerSoundEvent("brutalfly_death"); - public static final DeferredHolder ELYTHIA_FIREFLY_AMBIENT = registerSoundEvent("ambient.elythia.firefly"); - public static final DeferredHolder MISSILE_SQUID_AMBIENT = registerSoundEvent("missile_squid_ambient"); - public static final DeferredHolder MISSILE_SQUID_HURT = registerSoundEvent("missile_squid_hurt"); - public static final DeferredHolder MISSILE_SQUID_DEATH = registerSoundEvent("missile_squid_death"); - public static final DeferredHolder MISSILE_SQUID_ATTACK = registerSoundEvent("missile_squid_attack"); - public static final DeferredHolder KRAKEN_FLYING_LOOP = registerSoundEvent("kraken_flying_loop"); - public static final DeferredHolder KRAKEN_FLYING_SIDEWAYS_LOOP = registerSoundEvent("kraken_flying_sideways_loop"); - public static final DeferredHolder KRAKEN_ATTACK = registerSoundEvent("kraken_attack"); - public static final DeferredHolder KRAKEN_SPIN = registerSoundEvent("kraken_spin"); - public static final DeferredHolder KRAKEN_ROAR = registerSoundEvent("kraken_roar"); - public static final DeferredHolder KRAKEN_SUMMON = registerSoundEvent("kraken_summon"); - public static final DeferredHolder KRAKEN_HURT = registerSoundEvent("kraken_hurt"); - public static final DeferredHolder KRAKEN_DEATH = registerSoundEvent("kraken_death"); - public static final DeferredHolder BASILISK_IDLE_LOOP = registerSoundEvent("basilisk_idle_loop"); - public static final DeferredHolder BASILISK_SLITHER_LOOP = registerSoundEvent("basilisk_slither_loop"); - public static final DeferredHolder BASILISK_BITE = registerSoundEvent("basilisk_bite"); - public static final DeferredHolder BASILISK_HISS = registerSoundEvent("basilisk_hiss"); - public static final DeferredHolder BASILISK_HURT = registerSoundEvent("basilisk_hurt"); - public static final DeferredHolder BASILISK_DEATH = registerSoundEvent("basilisk_death"); - public static final DeferredHolder THORAXIS_NIGHTMARE_WASTES_AMBIENT = registerSoundEvent("thoraxis_nightmare_wastes_ambient"); - public static final DeferredHolder THORAXIS_NIGHTMARE_WASTES_ADDITIONS = registerSoundEvent("thoraxis_nightmare_wastes_additions"); - public static final DeferredHolder THORAXIS_NIGHTMARE_WASTES_MOOD = registerSoundEvent("thoraxis_nightmare_wastes_mood"); - public static final DeferredHolder THORAXIS_DREAM_DUNES_AMBIENT = registerSoundEvent("thoraxis_dream_dunes_ambient"); - public static final DeferredHolder THORAXIS_DREAM_DUNES_ADDITIONS = registerSoundEvent("thoraxis_dream_dunes_additions"); - public static final DeferredHolder THORAXIS_DREAM_DUNES_MOOD = registerSoundEvent("thoraxis_dream_dunes_mood"); - public static final DeferredHolder THORAXIS_LUCID_POOLS_AMBIENT = registerSoundEvent("thoraxis_lucid_pools_ambient"); - public static final DeferredHolder THORAXIS_LUCID_POOLS_ADDITIONS = registerSoundEvent("thoraxis_lucid_pools_additions"); - public static final DeferredHolder THORAXIS_LUCID_POOLS_MOOD = registerSoundEvent("thoraxis_lucid_pools_mood"); - public static final DeferredHolder LUCID_AMBIENT = registerSoundEvent("lucid_ambient"); - public static final DeferredHolder LUCID_FLYING = registerSoundEvent("lucid_flying"); - public static final DeferredHolder LUCID_ATTACK = registerSoundEvent("lucid_attack"); - public static final DeferredHolder LUCID_BOLT_SOUND = registerSoundEvent("lucid_bolt"); - public static final DeferredHolder LUCID_HURT = registerSoundEvent("lucid_hurt"); - public static final DeferredHolder LUCID_DEATH = registerSoundEvent("lucid_death"); - public static final DeferredHolder REVERIE_IDLE = registerSoundEvent("reverie_idle"); - public static final DeferredHolder REVERIE_HURT = registerSoundEvent("reverie_hurt"); - public static final DeferredHolder REVERIE_WORRY = registerSoundEvent("reverie_worry"); - public static final DeferredHolder REVERIE_SAVE = registerSoundEvent("reverie_save"); - public static final DeferredHolder REVERIE_JOIN_PLAYER = registerSoundEvent("reverie_join_player"); - public static final DeferredHolder REVERIE_ALERT = registerSoundEvent("reverie_alert"); - public static final DeferredHolder FLYING_SQUIRREL_IDLE = registerSoundEvent("flying_squirrel_idle"); - public static final DeferredHolder FLYING_SQUIRREL_BEG = registerSoundEvent("flying_squirrel_beg"); - public static final DeferredHolder FLYING_SQUIRREL_NUT = registerSoundEvent("flying_squirrel_nut"); - public static final DeferredHolder FLYING_SQUIRREL_GLIDE_LOOP = registerSoundEvent("flying_squirrel_glide_loop"); - public static final DeferredHolder FLYING_SQUIRREL_HURT = registerSoundEvent("flying_squirrel_hurt"); - public static final DeferredHolder FLYING_SQUIRREL_DEATH = registerSoundEvent("flying_squirrel_death"); - public static final DeferredHolder NIGHTMARE_IDLE = registerSoundEvent("nightmare_idle"); - public static final DeferredHolder NIGHTMARE_HURT = registerSoundEvent("nightmare_hurt"); - public static final DeferredHolder NIGHTMARE_ROAR = registerSoundEvent("nightmare_roar"); - public static final DeferredHolder NIGHTMARE_DEATH = registerSoundEvent("nightmare_death"); - public static final DeferredHolder NIGHTMARE_BITE = registerSoundEvent("nightmare_bite"); - public static final DeferredHolder NIGHTMARE_FLAP = registerSoundEvent("nightmare_flap"); - public static final DeferredHolder TRIFFID_ATTACK = registerSoundEvent("triffid_attack"); - public static final DeferredHolder TRIFFID_GRAB = registerSoundEvent("triffid_grab"); - public static final DeferredHolder TRIFFID_HURT = registerSoundEvent("triffid_hurt"); - public static final DeferredHolder TRIFFID_DEATH = registerSoundEvent("triffid_death"); - public static final DeferredHolder TRIFFID_HISS = registerSoundEvent("triffid_hiss"); - public static final DeferredHolder TRIFFID_GROWL = registerSoundEvent("triffid_growl"); - public static final DeferredHolder MANTIS_AMBIENT = registerSoundEvent("mantis_ambient"); - public static final DeferredHolder MANTIS_HURT = registerSoundEvent("mantis_hurt"); - public static final DeferredHolder MANTIS_ATTACK = registerSoundEvent("mantis_attack"); - public static final DeferredHolder MANTIS_FLY_LOOP = registerSoundEvent("mantis_fly_loop"); - public static final DeferredHolder GRAVITY_GUN_PICKUP = registerSoundEvent("gravity_gun_pickup"); - public static final DeferredHolder GRAVITY_GUN_DROP = registerSoundEvent("gravity_gun_drop"); - public static final DeferredHolder GRAVITY_GUN_HOLD_LOOP = registerSoundEvent("gravity_gun_hold_loop"); - public static final DeferredHolder GRAVITY_GUN_LAUNCH = registerSoundEvent("gravity_gun_launch"); - public static final DeferredHolder GRAVITY_GUN_DRYFIRE = registerSoundEvent("gravity_gun_dryfire"); - public static final DeferredHolder BED_BUG_AMBIENT = registerSoundEvent("bed_bug_ambient"); - public static final DeferredHolder BED_BUG_HURT = registerSoundEvent("bed_bug_hurt"); - public static final DeferredHolder BED_BUG_ATTACK = registerSoundEvent("bed_bug_attack"); - public static final DeferredHolder WASP_IDLE = registerSoundEvent("wasp_idle"); - public static final DeferredHolder WASP_HURT = registerSoundEvent("wasp_hurt"); - public static final DeferredHolder WASP_ATTACK = registerSoundEvent("wasp_attack"); - public static final DeferredHolder WASP_DEATH = registerSoundEvent("wasp_death"); - public static final DeferredHolder SCORPION_AMBIENT = registerSoundEvent("scorpion_ambient"); - public static final DeferredHolder SCORPION_HURT = registerSoundEvent("scorpion_hurt"); - public static final DeferredHolder SCORPION_ATTACK = registerSoundEvent("scorpion_attack"); - public static final DeferredHolder EMPEROR_SCORPION_AMBIENT = registerSoundEvent("emperor_scorpion_ambient"); - public static final DeferredHolder EMPEROR_SCORPION_HURT = registerSoundEvent("emperor_scorpion_hurt"); - public static final DeferredHolder EMPEROR_SCORPION_ATTACK = registerSoundEvent("emperor_scorpion_attack"); - public static final DeferredHolder EMPEROR_SCORPION_ROAR = registerSoundEvent("emperor_scorpion_roar"); - public static final DeferredHolder MOLEWORM_AMBIENT = registerSoundEvent("moleworm_ambient"); - public static final DeferredHolder MOLEWORM_HURT = registerSoundEvent("moleworm_hurt"); - public static final DeferredHolder MOLEWORM_ATTACK = registerSoundEvent("moleworm_attack"); - public static final DeferredHolder MOLEWORM_DIG = registerSoundEvent("moleworm_dig"); - public static final DeferredHolder MOLEVORE_AMBIENT = registerSoundEvent("molevore_ambient"); - public static final DeferredHolder MOLEVORE_HURT = registerSoundEvent("molevore_hurt"); - public static final DeferredHolder MOLEVORE_ATTACK = registerSoundEvent("molevore_attack"); - public static final DeferredHolder MOLEVORE_DIG = registerSoundEvent("molevore_dig"); - public static final DeferredHolder BOMBER_WALK = registerSoundEvent("bomber_walk"); - public static final DeferredHolder BOMBER_KNOCK = registerSoundEvent("bomber_knock"); - public static final DeferredHolder BOMBER_EXPLODE = registerSoundEvent("bomber_explode"); - public static final DeferredHolder TORETERROR_IDLE = registerSoundEvent("toreterror_idle"); - public static final DeferredHolder TORETERROR_HURT = registerSoundEvent("toreterror_hurt"); - public static final DeferredHolder TORETERROR_DEATH = registerSoundEvent("toreterror_death"); - public static final DeferredHolder TORETERROR_BOMBER_FIRE = registerSoundEvent("toreterror_bomber_fire"); - public static final DeferredHolder TORETERROR_SPIN = registerSoundEvent("toreterror_spin"); - public static final DeferredHolder TORETERROR_RICOCHET = registerSoundEvent("toreterror_ricochet"); - public static final DeferredHolder WATER_CANNON_FIRE = registerSoundEvent("water_cannon_fire"); - public static final DeferredHolder TORETERROR_JUMP_UP = registerSoundEvent("toreterror_jump_up"); - public static final DeferredHolder TORETERROR_JUMP_LAND = registerSoundEvent("toreterror_jump_land"); - public static final DeferredHolder STINKY_FLY_SOUND = registerSoundEvent("stinky_fly"); - public static final DeferredHolder CREEPING_HORROR_GROWL = registerSoundEvent("creeping_horror_growl"); - public static final DeferredHolder CREEPING_HORROR_HURT = registerSoundEvent("creeping_horror_hurt"); - public static final DeferredHolder CREEPING_HORROR_BITE = registerSoundEvent("creeping_horror_bite"); - public static final DeferredHolder LURKING_TERROR_SNARL = registerSoundEvent("lurking_terror_snarl"); - public static final DeferredHolder LURKING_TERROR_HURT = registerSoundEvent("lurking_terror_hurt"); - public static final DeferredHolder LURKING_TERROR_BITE = registerSoundEvent("lurking_terror_bite"); - public static final DeferredHolder LURKING_TERROR_FLY_LOOP = registerSoundEvent("lurking_terror_fly_loop"); - public static final DeferredHolder DUCT_TAPE_USE = registerSoundEvent("duct_tape_use"); - public static final DeferredHolder POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas"); - public static final DeferredHolder POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start"); - public static final DeferredHolder POTENT_NYXITE_GEYSER_ERUPTION_ACTIVE = registerSoundEvent("potent_nyxite_geyser_eruption_active"); - public static final DeferredHolder POTENT_NYXITE_GEYSER_CONTINUOUS_START = registerSoundEvent("potent_nyxite_geyser_continuous_start"); - public static final DeferredHolder POTENT_NYXITE_GEYSER_CONTINUOUS_ACTIVE = registerSoundEvent("potent_nyxite_geyser_continuous_active"); - private static final DeferredHolder ULTIMATE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("ultimate", - () -> new ArmorMaterial( - createUltimateArmorDefense(), - 10, - SoundEvents.ARMOR_EQUIP_DIAMOND, - AntarchyFabricContent::ultimateRepairIngredient, - List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ultimate_armor"))), - 2.0F, - (float) AntarchySettings.ultimateArmorKnockbackResistance() - )); - private static final DeferredHolder NIGHTMARE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("nightmare", - () -> new ArmorMaterial( - createNightmareArmorDefense(), - 10, - SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(NIGHTMARE_SCALE.get()), - List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "nightmare_armor"))), - 3.0F, - (float) AntarchySettings.nightmareArmorKnockbackResistance() - )); - public static final DeferredItem PRIMORDIAL_SCUTE = ITEMS.registerSimpleItem("primordial_scute", - new Item.Properties().rarity(Rarity.UNCOMMON)); - private static final DeferredHolder PRIMORDIAL_ARMOR_MATERIAL = ARMOR_MATERIALS.register("primordial", - () -> new ArmorMaterial( - createPrimordialArmorDefense(), - 15, - SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(PRIMORDIAL_SCUTE.get()), - List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "primordial"))), - 3.0F, - 0.1F - )); - private static final DeferredHolder BLOOD_CRYSTAL_ARMOR_MATERIAL = ARMOR_MATERIALS.register("blood_crystal", - () -> new ArmorMaterial( - createBloodCrystalArmorDefense(), - 30, - SoundEvents.ARMOR_EQUIP_DIAMOND, - AntarchyFabricContent::bloodCrystalRepairIngredient, - List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blood_crystal"))), - 0.0F, - 0.0F - )); - private static final DeferredHolder MOGGLES_ARMOR_MATERIAL = ARMOR_MATERIALS.register("moggles", - () -> new ArmorMaterial( - createMogglesArmorDefense(), - 12, - SoundEvents.ARMOR_EQUIP_GOLD, - () -> Ingredient.of(Items.GOLD_INGOT), - List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "moggles"))), - 0.0F, - 0.0F - )); - private static final DeferredHolder FALLEN_KING_CROWN_ARMOR_MATERIAL = ARMOR_MATERIALS.register("fallen_king_crown", - () -> new ArmorMaterial( - createFallenKingCrownDefense(), - 25, - SoundEvents.ARMOR_EQUIP_GOLD, - () -> Ingredient.of(Items.GOLD_INGOT), - List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "fallen_king_crown"))), - 0.0F, - 0.0F - )); - public static final DeferredBlock DUPLICATOR_LOG = BLOCKS.register("duplicator_log", - () -> new DuplicatorLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_LOG).randomTicks())); - public static final DeferredBlock OURANWOOD_LOG = BLOCKS.register("ouranwood_log", - () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); - public static final DeferredBlock OURANWOOD_WOOD = BLOCKS.register("ouranwood_wood", - () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); - public static final DeferredBlock MOSSY_OURANWOOD_LOG = BLOCKS.register("mossy_ouranwood_log", - () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); - public static final DeferredBlock MOSSY_OURANWOOD_WOOD = BLOCKS.register("mossy_ouranwood_wood", - () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); - public static final DeferredBlock STRIPPED_OURANWOOD_LOG = BLOCKS.register("stripped_ouranwood_log", - () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); - public static final DeferredBlock STRIPPED_OURANWOOD_WOOD = BLOCKS.register("stripped_ouranwood_wood", - () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); - public static final DeferredBlock OURANWOOD_PLANKS = BLOCKS.register("ouranwood_planks", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); - public static final DeferredBlock OURANWOOD_STAIRS = BLOCKS.register("ouranwood_stairs", - () -> new net.minecraft.world.level.block.StairBlock(OURANWOOD_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); - public static final DeferredBlock OURANWOOD_SLAB = BLOCKS.register("ouranwood_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); - public static final DeferredBlock OURANWOOD_FENCE = BLOCKS.register("ouranwood_fence", - () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); - public static final DeferredBlock OURANWOOD_FENCE_GATE = BLOCKS.register("ouranwood_fence_gate", - () -> new net.minecraft.world.level.block.FenceGateBlock(net.minecraft.world.level.block.state.properties.WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE))); - public static final DeferredBlock OURANWOOD_DOOR = BLOCKS.register("ouranwood_door", - () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR))); - public static final DeferredBlock OURANWOOD_TRAPDOOR = BLOCKS.register("ouranwood_trapdoor", - () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR))); - public static final DeferredBlock OURANWOOD_PRESSURE_PLATE = BLOCKS.register("ouranwood_pressure_plate", - () -> new net.minecraft.world.level.block.PressurePlateBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE))); - public static final DeferredBlock OURANWOOD_BUTTON = BLOCKS.register("ouranwood_button", - () -> new net.minecraft.world.level.block.ButtonBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON))); - public static final DeferredBlock OURANWOOD_LEAVES = BLOCKS.register("ouranwood_leaves", - () -> new OuranwoodLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); - public static final DeferredBlock OURANWOOD_ACORN_BLOCK = BLOCKS.register("ouranwood_acorn", - () -> new OuranwoodAcornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); - // public static final DeferredBlock OURANWOOD_VINE = BLOCKS.register("ouranwood_vine", - // () -> OURANWOOD_VINE_INSTANCE); - // public static final DeferredBlock OURANWOOD_VINE_PLANT = BLOCKS.register("ouranwood_vine_plant", - // () -> OURANWOOD_VINE_PLANT_INSTANCE); - public static final DeferredBlock ORANGE_MILKWEED = BLOCKS.register("orange_milkweed", - () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); - public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", - () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); - public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", - () -> new net.minecraft.world.level.block.StandingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); - public static final DeferredBlock OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign", - () -> new net.minecraft.world.level.block.WallSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); - public static final DeferredBlock OURANWOOD_HANGING_SIGN = BLOCKS.register("ouranwood_hanging_sign", - () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); - public static final DeferredBlock OURANWOOD_WALL_HANGING_SIGN = BLOCKS.register("ouranwood_wall_hanging_sign", - () -> new net.minecraft.world.level.block.WallHangingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); - public static final DeferredBlock PEACH_LOG = BLOCKS.register("peach_log", - () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); - public static final DeferredBlock PEACH_WOOD = BLOCKS.register("peach_wood", - () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); - public static final DeferredBlock STRIPPED_PEACH_LOG = BLOCKS.register("stripped_peach_log", - () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); - public static final DeferredBlock STRIPPED_PEACH_WOOD = BLOCKS.register("stripped_peach_wood", - () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); - public static final DeferredBlock PEACH_PLANKS = BLOCKS.register("peach_planks", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); - public static final DeferredBlock PEACH_STAIRS = BLOCKS.register("peach_stairs", - () -> new net.minecraft.world.level.block.StairBlock(PEACH_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); - public static final DeferredBlock PEACH_SLAB = BLOCKS.register("peach_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); - public static final DeferredBlock PEACH_FENCE = BLOCKS.register("peach_fence", - () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); - public static final DeferredBlock PEACH_FENCE_GATE = BLOCKS.register("peach_fence_gate", - () -> new net.minecraft.world.level.block.FenceGateBlock(net.minecraft.world.level.block.state.properties.WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE))); - public static final DeferredBlock PEACH_DOOR = BLOCKS.register("peach_door", - () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR))); - public static final DeferredBlock PEACH_TRAPDOOR = BLOCKS.register("peach_trapdoor", - () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR))); - public static final DeferredBlock PEACH_PRESSURE_PLATE = BLOCKS.register("peach_pressure_plate", - () -> new net.minecraft.world.level.block.PressurePlateBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE))); - public static final DeferredBlock PEACH_BUTTON = BLOCKS.register("peach_button", - () -> new net.minecraft.world.level.block.ButtonBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON))); - public static final DeferredBlock PEACH_LEAVES = BLOCKS.register("peach_leaves", - () -> new com.craisinlord.antarchy.content.block.PeachLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); - public static final DeferredBlock PEACH_HANGING_PEACH = BLOCKS.register("hanging_peach", - () -> new com.craisinlord.antarchy.content.block.HangingPeachBlock(BlockBehaviour.Properties.of().noOcclusion().instabreak())); - public static final DeferredBlock PEACH_SAPLING = BLOCKS.register("peach_sapling", - () -> new com.craisinlord.antarchy.content.block.PeachSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); - public static final DeferredBlock PEACH_SIGN = BLOCKS.register("peach_sign", - () -> new net.minecraft.world.level.block.StandingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); - public static final DeferredBlock PEACH_WALL_SIGN = BLOCKS.register("peach_wall_sign", - () -> new net.minecraft.world.level.block.WallSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); - public static final DeferredBlock PEACH_HANGING_SIGN = BLOCKS.register("peach_hanging_sign", - () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); - public static final DeferredBlock PEACH_WALL_HANGING_SIGN = BLOCKS.register("peach_wall_hanging_sign", - () -> new net.minecraft.world.level.block.WallHangingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); - public static final DeferredBlock DUPLICATOR_SAPLING = BLOCKS.register("duplicator_sapling", - () -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); - public static final DeferredBlock DUCT_TAPE = BLOCKS.register("duct_tape", - () -> new DuctTapeBlock(BlockBehaviour.Properties.of() - .strength(0.2F) - .sound(SoundType.WOOL) - .noOcclusion() - .replaceable())); - public static final DeferredBlock INFESTED_ROOTED_DIRT = BLOCKS.register("infested_rooted_dirt", - () -> new InfestedRootedDirtBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.ROOTED_DIRT).randomTicks())); - public static final DeferredBlock INFESTED_COARSE_DIRT = BLOCKS.register("infested_coarse_dirt", - () -> new InfestedCoarseDirtBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).randomTicks())); - public static final DeferredBlock NYXITE = BLOCKS.register("nyxite", - () -> new Block(nyxiteProperties())); - public static final DeferredBlock POLISHED_NYXITE = BLOCKS.register("polished_nyxite", - () -> new Block(nyxiteProperties())); - public static final DeferredBlock CHISELED_NYXITE = BLOCKS.register("chiseled_nyxite", - () -> new Block(nyxiteProperties())); - public static final DeferredBlock NYXITE_BRICKS = BLOCKS.register("nyxite_bricks", - () -> new Block(nyxiteProperties())); - public static final DeferredBlock NYXITE_STAIRS = BLOCKS.register("nyxite_stairs", - () -> new net.minecraft.world.level.block.StairBlock(NYXITE.get().defaultBlockState(), nyxiteProperties())); - public static final DeferredBlock NYXITE_SLAB = BLOCKS.register("nyxite_slab", - () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); - public static final DeferredBlock NYXITE_WALL = BLOCKS.register("nyxite_wall", - () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); - public static final DeferredBlock POLISHED_NYXITE_STAIRS = BLOCKS.register("polished_nyxite_stairs", - () -> new net.minecraft.world.level.block.StairBlock(POLISHED_NYXITE.get().defaultBlockState(), nyxiteProperties())); - public static final DeferredBlock POLISHED_NYXITE_SLAB = BLOCKS.register("polished_nyxite_slab", - () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); - public static final DeferredBlock POLISHED_NYXITE_WALL = BLOCKS.register("polished_nyxite_wall", - () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); - public static final DeferredBlock NYXITE_BRICK_STAIRS = BLOCKS.register("nyxite_brick_stairs", - () -> new net.minecraft.world.level.block.StairBlock(NYXITE_BRICKS.get().defaultBlockState(), nyxiteProperties())); - public static final DeferredBlock NYXITE_BRICK_SLAB = BLOCKS.register("nyxite_brick_slab", - () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); - public static final DeferredBlock NYXITE_BRICK_WALL = BLOCKS.register("nyxite_brick_wall", - () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); - public static final DeferredBlock SHELLSTONE = BLOCKS.register("shellstone", - () -> new Block(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock POLISHED_SHELLSTONE = BLOCKS.register("polished_shellstone", - () -> new Block(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_BRICKS = BLOCKS.register("shellstone_bricks", - () -> new Block(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock CHISELED_SHELLSTONE = BLOCKS.register("chiseled_shellstone", - () -> new Block(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock MOSSY_SHELLSTONE_BRICKS = BLOCKS.register("mossy_shellstone_bricks", - () -> new Block(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock CRACKED_SHELLSTONE_BRICKS = BLOCKS.register("cracked_shellstone_bricks", - () -> new Block(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_STAIRS = BLOCKS.register("mossy_shellstone_brick_stairs", - () -> new net.minecraft.world.level.block.StairBlock(MOSSY_SHELLSTONE_BRICKS.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_SLAB = BLOCKS.register("mossy_shellstone_brick_slab", - () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_WALL = BLOCKS.register("mossy_shellstone_brick_wall", - () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_STAIRS = BLOCKS.register("shellstone_stairs", - () -> new net.minecraft.world.level.block.StairBlock(SHELLSTONE.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_SLAB = BLOCKS.register("shellstone_slab", - () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_WALL = BLOCKS.register("shellstone_wall", - () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock POLISHED_SHELLSTONE_STAIRS = BLOCKS.register("polished_shellstone_stairs", - () -> new net.minecraft.world.level.block.StairBlock(POLISHED_SHELLSTONE.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock POLISHED_SHELLSTONE_SLAB = BLOCKS.register("polished_shellstone_slab", - () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock POLISHED_SHELLSTONE_WALL = BLOCKS.register("polished_shellstone_wall", - () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_BRICK_STAIRS = BLOCKS.register("shellstone_brick_stairs", - () -> new net.minecraft.world.level.block.StairBlock(SHELLSTONE_BRICKS.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_BRICK_SLAB = BLOCKS.register("shellstone_brick_slab", - () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock SHELLSTONE_BRICK_WALL = BLOCKS.register("shellstone_brick_wall", - () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); - public static final DeferredBlock TRIFFID_GOO_BLOCK = BLOCKS.register("triffid_goo_block", - () -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); - public static final DeferredBlock CLOUD_BLOCK = BLOCKS.register("cloud_block", - () -> new com.craisinlord.antarchy.content.block.CloudBlock( - AntarchyFabricContent::cloudBucketItem, - BlockBehaviour.Properties.ofFullCopy(Blocks.POWDER_SNOW).noLootTable().noOcclusion() - )); - public static final DeferredBlock ELYTHIA_PORTAL = BLOCKS.register("elythia_portal", - () -> new AntDimensionPortalBlock(PermanentPortalType.ELYTHIA, portalProperties())); - public static final DeferredBlock THORAXIS_PORTAL = BLOCKS.register("thoraxis_portal", - () -> new AntDimensionPortalBlock(PermanentPortalType.THORAXIS, portalProperties())); - public static final DeferredBlock PALE_NYXITE = BLOCKS.register("pale_nyxite", - () -> new Block(nyxiteProperties())); - public static final DeferredBlock NYXITE_SPIKE = BLOCKS.register("nyxite_spike", - () -> new NyxiteSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); - public static final DeferredBlock POTENT_NYXITE = BLOCKS.register("potent_nyxite", - () -> new PotentNyxiteBlock( - AntarchyFabricContent::potentNyxiteBlockEntityType, - BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK).lightLevel(state -> 3) - )); - public static final DeferredBlock UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block", - () -> new UmbralMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); - public static final DeferredBlock UMBRAL_MOSS_CARPET = BLOCKS.register("umbral_moss_carpet", - () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); - public static final DeferredBlock BLUSH_MOSS_BLOCK = BLOCKS.register("blush_moss_block", - () -> new BlushMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); - public static final DeferredBlock BLUSH_MOSS_CARPET = BLOCKS.register("blush_moss_carpet", - () -> new BlushMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); - public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> STINKY_GAS = PARTICLE_TYPES.register("stinky_gas", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> STINKY_FLY = PARTICLE_TYPES.register("stinky_fly", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> PEACH_LEAVES_PARTICLE = PARTICLE_TYPES.register("peach_leaves_particle", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_DOWN = PARTICLE_TYPES.register("hypnotic_gas_down", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD_DOWN = PARTICLE_TYPES.register("hypnotic_gas_cloud_down", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> FIREFLY = PARTICLE_TYPES.register("firefly", - () -> simpleParticleType()); - public static final DeferredHolder, SimpleParticleType> ORANGE_ASH = PARTICLE_TYPES.register("orange_ash", - () -> simpleParticleType()); - public static final DeferredHolder, ParticleType> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base", - () -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec)); - public static final DeferredHolder, ParticleType> INVERTED_GEYSER_PLUME = PARTICLE_TYPES.register("inverted_geyser_plume", - () -> particleType(InvertedGeyserParticleOptions::codec, InvertedGeyserParticleOptions::streamCodec)); - public static final DeferredHolder, ParticleType> INVERTED_GEYSER_POOF = PARTICLE_TYPES.register("inverted_geyser_poof", - () -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec)); - public static final DeferredHolder, ParticleType> INVERTED_GEYSER_ERUPTION = PARTICLE_TYPES.register("inverted_geyser_eruption", - () -> particleType(InvertedGeyserParticleOptions::codec, InvertedGeyserParticleOptions::streamCodec)); - public static final DeferredBlock DREAM_TORCH = BLOCKS.register("dream_torch", - () -> new DreamTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_TORCH))); - public static final DeferredBlock DREAM_WALL_TORCH = BLOCKS.register("dream_wall_torch", - () -> new DreamWallTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_WALL_TORCH))); - public static final DeferredBlock DREAM_LANTERN = BLOCKS.register("dream_lantern", - () -> new net.minecraft.world.level.block.LanternBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_LANTERN))); - public static final DeferredBlock DREAM_CAMPFIRE = BLOCKS.register("dream_campfire", - () -> new DreamCampfireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_CAMPFIRE))); - public static final DeferredBlock DREAM_FIRE = BLOCKS.register("dream_fire", - () -> new DreamFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE))); - public static final DeferredBlock DREAM_CEILING_FIRE = BLOCKS.register("dream_fire_ceiling", - () -> new DreamCeilingFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE))); - public static final DeferredBlock BED_BUG_EGG = BLOCKS.register("bed_bug_egg", - () -> new BedBugEggBlock(BlockBehaviour.Properties.of() - .strength(0.15F) - .sound(SoundType.METAL) - .randomTicks() - .noOcclusion() - .noCollission() - .replaceable())); - public static final DeferredBlock WASP_NEST = BLOCKS.register("wasp_nest", - () -> new WaspNestBlock(AntarchyFabricContent::waspNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.BEE_NEST))); - public static final DeferredBlock OURANWOOD_SQUIRREL_NEST = BLOCKS.register("ouranwood_squirrel_nest", - () -> new com.craisinlord.antarchy.content.block.OuranwoodSquirrelNestBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).noLootTable())); - public static final DeferredBlock BRUTALFLY_COCOON_SPAWNER = BLOCKS.register("brutalfly_cocoon_spawner", - () -> new com.craisinlord.antarchy.content.block.BrutalflyCocoonSpawnerBlock(BlockBehaviour.Properties.of().noCollission().instabreak().noLootTable())); - public static final DeferredBlock HUSHWEED = BLOCKS.register("hushweed", - () -> new HushweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AZALEA).noCollission().noOcclusion())); - public static final DeferredHolder DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new); - public static final DeferredHolder PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); - public static final DeferredHolder INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new); - public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); - public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); - private static final DeferredHolder BLOODGLASS_MAX_HEARTS = ATTRIBUTES.register( - "bloodglass_max_hearts", - () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.bloodglass_max_hearts", 0.0, 0.0, 8.0).setSyncable(true) - ); - public static final DeferredHolder DREAD_POTION = POTIONS.register("dread", - () -> new Potion(new MobEffectInstance(mobEffectHolder(DREAD), 600))); - public static final DeferredHolder LONG_DREAD = POTIONS.register("long_dread", - () -> new Potion("dread", new MobEffectInstance(mobEffectHolder(DREAD), 2400))); - public static final DeferredHolder INVERSION = POTIONS.register("inversion", - () -> new Potion(new MobEffectInstance(mobEffectHolder(INVERTED), 600))); - public static final DeferredHolder LONG_INVERSION = POTIONS.register("long_inversion", - () -> new Potion("inversion", new MobEffectInstance(mobEffectHolder(INVERTED), 2400))); - public static final DeferredHolder STINKY_POTION = POTIONS.register("stinky", - () -> new Potion(new MobEffectInstance(mobEffectHolder(STINKY), 1200))); - public static final DeferredHolder LONG_STINKY = POTIONS.register("long_stinky", - () -> new Potion("stinky", new MobEffectInstance(mobEffectHolder(STINKY), 2400))); - public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); - public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); - public static final DeferredHolder PARALYSIS = POTIONS.register("paralysis", - () -> new Potion(new MobEffectInstance(mobEffectHolder(PARALYZED), 200))); - public static final DeferredHolder LONG_PARALYSIS = POTIONS.register("long_paralysis", - () -> new Potion("paralysis", new MobEffectInstance(mobEffectHolder(PARALYZED), 400))); - public static final DeferredHolder HASTE = POTIONS.register("haste", - () -> new Potion(new MobEffectInstance(MobEffects.DIG_SPEED, 1200, 0))); - public static final DeferredHolder STRONG_HASTE = POTIONS.register("strong_haste", - () -> new Potion("haste", new MobEffectInstance(MobEffects.DIG_SPEED, 600, 1))); - public static final DeferredHolder SHRINKING = POTIONS.register("shrinking", - () -> new Potion(new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 1200, 0))); - public static final DeferredHolder STRONG_SHRINKING = POTIONS.register("strong_shrinking", - () -> new Potion("shrinking", new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 900, 1))); - public static final DeferredHolder EXTREME_SHRINKING = POTIONS.register("extreme_shrinking", - () -> new Potion("shrinking", new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 600, 2))); - public static final DeferredHolder GROWING = POTIONS.register("growing", - () -> new Potion(new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 1200, 0))); - public static final DeferredHolder STRONG_GROWING = POTIONS.register("strong_growing", - () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 900, 1))); - public static final DeferredHolder EXTREME_GROWING = POTIONS.register("extreme_growing", - () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 600, 2))); - public static final DeferredHolder BILE = FLUIDS.register("bile", - () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( - () -> lookupFlowingFluid("bile"), - () -> lookupFlowingFluid("flowing_bile"), - () -> lookupItem("bile_bucket"), - "bile", - 4, - 1, - 5 - )); - public static final DeferredHolder FLOWING_BILE = FLUIDS.register("flowing_bile", - () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( - () -> lookupFlowingFluid("bile"), - () -> lookupFlowingFluid("flowing_bile"), - () -> lookupItem("bile_bucket"), - "bile", - 4, - 1, - 5 - )); - public static final DeferredBlock BILE_BLOCK = BLOCKS.register("bile", - () -> new BileLiquidBlock((net.minecraft.world.level.material.FlowingFluid) BILE.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 5).noLootTable())); - public static final DeferredHolder ICHOR = FLUIDS.register("ichor", - () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( - () -> lookupFlowingFluid("ichor"), - () -> lookupFlowingFluid("flowing_ichor"), - () -> lookupItem("ichor_bucket"), - "ichor", - 4, - 1, - 5 - )); - public static final DeferredHolder FLOWING_ICHOR = FLUIDS.register("flowing_ichor", - () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( - () -> lookupFlowingFluid("ichor"), - () -> lookupFlowingFluid("flowing_ichor"), - () -> lookupItem("ichor_bucket"), - "ichor", - 4, - 1, - 5 - )); - public static final DeferredBlock ICHOR_BLOCK = BLOCKS.register("ichor", - () -> new LiquidBlock((net.minecraft.world.level.material.FlowingFluid) ICHOR.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); - public static final DeferredHolder ANTIWATER = FLUIDS.register("antiwater", - AntiwaterFluid.Source::new); - public static final DeferredHolder FLOWING_ANTIWATER = FLUIDS.register("flowing_antiwater", - AntiwaterFluid.Flowing::new); - public static final DeferredBlock ANTIWATER_BLOCK = BLOCKS.register("antiwater", - () -> new AntiwaterLiquidBlock((net.minecraft.world.level.material.FlowingFluid) ANTIWATER.get(), - BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); - public static final DeferredHolder LUMEN = FLUIDS.register("lumen", - () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( - () -> lookupFlowingFluid("lumen"), - () -> lookupFlowingFluid("flowing_lumen"), - () -> lookupItem("lumen_bucket"), - "lumen", - 4, - 1, - 5 - )); - public static final DeferredHolder FLOWING_LUMEN = FLUIDS.register("flowing_lumen", - () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( - () -> lookupFlowingFluid("lumen"), - () -> lookupFlowingFluid("flowing_lumen"), - () -> lookupItem("lumen_bucket"), - "lumen", - 4, - 1, - 5 - )); - public static final DeferredBlock LUMEN_BLOCK = BLOCKS.register("lumen", - () -> new LumenLiquidBlock((net.minecraft.world.level.material.FlowingFluid) LUMEN.get(), - BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 9).noLootTable())); - public static final DeferredBlock LUMEN_FROGLIGHT = BLOCKS.register("lumen_froglight", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OCHRE_FROGLIGHT))); - public static final DeferredBlock ROSEATE_FROGLIGHT = BLOCKS.register("roseate_froglight", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OCHRE_FROGLIGHT))); - public static final DeferredHolder, EntityType> RED_ANT = ENTITY_TYPES.register("red_ant", - () -> buildAntType(RedAntEntity::new, MobCategory.CREATURE, "red_ant")); - public static final DeferredHolder, EntityType> BROWN_ANT = ENTITY_TYPES.register("brown_ant", - () -> buildAntType(BrownAntEntity::new, MobCategory.CREATURE, "brown_ant")); - public static final DeferredHolder, EntityType> RAINBOW_ANT = ENTITY_TYPES.register("rainbow_ant", - () -> buildAntType(RainbowAntEntity::new, MobCategory.CREATURE, "rainbow_ant")); - public static final DeferredHolder, EntityType> MOLEWORM = ENTITY_TYPES.register("moleworm", - () -> EntityType.Builder.of(MolewormEntity::new, MobCategory.MONSTER) - .sized(0.4F, 0.3F) - .clientTrackingRange(8) - .build("moleworm")); - public static final DeferredHolder, EntityType> MANTIS = ENTITY_TYPES.register("mantis", - () -> EntityType.Builder.of(MantisEntity::new, MobCategory.MONSTER) - .sized(3.125F, 2.5F) - .clientTrackingRange(8) - .build("mantis")); - public static final DeferredHolder, EntityType> ALPHA_MANTIS = ENTITY_TYPES.register("alpha_mantis", - () -> EntityType.Builder.of(AlphaMantisEntity::new, MobCategory.MONSTER) - .sized(4.25F, 3.35F) - .clientTrackingRange(10) - .build("alpha_mantis")); - public static final DeferredHolder, EntityType> OURANWOOD_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_boat", - () -> EntityType.Builder.of(OuranwoodBoatEntity::new, MobCategory.MISC) - .sized(1.375F, 0.5625F) - .clientTrackingRange(10) - .updateInterval(10) - .build("ouranwood_boat")); - public static final DeferredHolder, EntityType> OURANWOOD_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_chest_boat", - () -> EntityType.Builder.of(OuranwoodChestBoatEntity::new, MobCategory.MISC) - .sized(1.375F, 0.5625F) - .clientTrackingRange(10) - .updateInterval(10) - .build("ouranwood_chest_boat")); - public static final DeferredHolder, EntityType> PEACH_BOAT_ENTITY = ENTITY_TYPES.register("peach_boat", - () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.PeachBoatEntity::new, MobCategory.MISC) - .sized(1.375F, 0.5625F) - .clientTrackingRange(10) - .updateInterval(10) - .build("peach_boat")); - public static final DeferredHolder, EntityType> PEACH_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("peach_chest_boat", - () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.PeachChestBoatEntity::new, MobCategory.MISC) - .sized(1.375F, 0.5625F) - .clientTrackingRange(10) - .updateInterval(10) - .build("peach_chest_boat")); - public static final DeferredHolder, EntityType> MOLEVORE = ENTITY_TYPES.register("molevore", - () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) - .sized(1.95F, 1.1F) - .clientTrackingRange(10) - .build("molevore")); - public static final DeferredHolder, EntityType> TRIFFID = ENTITY_TYPES.register("triffid", - () -> EntityType.Builder.of(TriffidEntity::new, MobCategory.MONSTER) - .sized(2.0F, 5.0F) - .clientTrackingRange(10) - .build("triffid")); - public static final DeferredHolder, EntityType> BED_BUG = ENTITY_TYPES.register("bed_bug", - () -> EntityType.Builder.of(BedBugEntity::new, MobCategory.CREATURE) - .sized(1.15F, 0.8F) - .clientTrackingRange(8) - .build("bed_bug")); - public static final DeferredHolder, EntityType> WASP = ENTITY_TYPES.register("wasp", - () -> EntityType.Builder.of(WaspEntity::new, MobCategory.MONSTER) - .sized(0.8625F, 1.365F) - .clientTrackingRange(8) - .build("wasp")); - public static final DeferredHolder, EntityType> BOMBER = ENTITY_TYPES.register("bomber", - () -> EntityType.Builder.of(BomberEntity::new, MobCategory.MONSTER) - .sized(0.55F, 0.75F) - .clientTrackingRange(8) - .build("bomber")); - public static final DeferredHolder, EntityType> SHRINK_RAY_PROJECTILE = ENTITY_TYPES.register("shrink_ray_projectile", - () -> EntityType.Builder.of(SizeRayProjectileEntity::createShrink, MobCategory.MISC) - .sized(0.5F, 0.5F) - .clientTrackingRange(8) - .updateInterval(1) - .build("shrink_ray_projectile")); - public static final DeferredHolder, EntityType> GROWTH_RAY_PROJECTILE = ENTITY_TYPES.register("growth_ray_projectile", - () -> EntityType.Builder.of(SizeRayProjectileEntity::createGrowth, MobCategory.MISC) - .sized(0.5F, 0.5F) - .clientTrackingRange(8) - .updateInterval(1) - .build("growth_ray_projectile")); - public static final DeferredBlock RED_ANT_NEST = BLOCKS.register("red_ant_nest", - () -> new AntNestBlock( - RED_ANT, - AntarchyFabricContent::antNestBlockEntityType, - true, - BlockBehaviour.Properties.ofFullCopy(Blocks.MAGMA_BLOCK).lightLevel(state -> 3).noLootTable() - )); - public static final DeferredBlock BROWN_ANT_NEST = BLOCKS.register("brown_ant_nest", - () -> new AntNestBlock(BROWN_ANT, AntarchyFabricContent::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); - public static final DeferredBlock RAINBOW_ANT_NEST = BLOCKS.register("rainbow_ant_nest", - () -> new AntNestBlock(RAINBOW_ANT, AntarchyFabricContent::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); - public static final DeferredBlock URANIUM_ORE = BLOCKS.register("uranium_ore", - () -> createOre(Blocks.EMERALD_ORE, 4, 8)); - public static final DeferredBlock DEEPSLATE_URANIUM_ORE = BLOCKS.register("deepslate_uranium_ore", - () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8)); - public static final DeferredBlock TITANIUM_ORE = BLOCKS.register("titanium_ore", - () -> createOre(Blocks.DIAMOND_ORE, 4, 8)); - public static final DeferredBlock DEEPSLATE_TITANIUM_ORE = BLOCKS.register("deepslate_titanium_ore", - () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8)); - public static final DeferredBlock URANIUM_BLOCK = BLOCKS.register("uranium_block", - () -> createStorageBlock(Blocks.EMERALD_BLOCK)); - public static final DeferredBlock TITANIUM_BLOCK = BLOCKS.register("titanium_block", - () -> createStorageBlock(Blocks.DIAMOND_BLOCK)); - public static final DeferredBlock RAW_URANIUM_BLOCK = BLOCKS.register("raw_uranium_block", - () -> createRawStorageBlock(Blocks.RAW_GOLD_BLOCK)); - public static final DeferredBlock RAW_TITANIUM_BLOCK = BLOCKS.register("raw_titanium_block", - () -> createRawStorageBlock(Blocks.RAW_IRON_BLOCK)); - public static final DeferredBlock CUT_URANIUM = BLOCKS.register("cut_uranium", - () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER)); - public static final DeferredBlock CUT_TITANIUM = BLOCKS.register("cut_titanium", - () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER)); - public static final DeferredBlock CUT_URANIUM_SLAB = BLOCKS.register("cut_uranium_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB))); - public static final DeferredBlock CUT_TITANIUM_SLAB = BLOCKS.register("cut_titanium_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB))); - public static final DeferredBlock CUT_URANIUM_STAIRS = BLOCKS.register("cut_uranium_stairs", - () -> new net.minecraft.world.level.block.StairBlock(CUT_URANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS))); - public static final DeferredBlock CUT_TITANIUM_STAIRS = BLOCKS.register("cut_titanium_stairs", - () -> new net.minecraft.world.level.block.StairBlock(CUT_TITANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS))); - public static final DeferredBlock CHISELED_URANIUM = BLOCKS.register("chiseled_uranium", - () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER)); - public static final DeferredBlock CHISELED_TITANIUM = BLOCKS.register("chiseled_titanium", - () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER)); - public static final DeferredBlock URANIUM_BULB = BLOCKS.register("uranium_bulb", - () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB))); - public static final DeferredBlock TITANIUM_BULB = BLOCKS.register("titanium_bulb", - () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB))); - public static final DeferredBlock URANIUM_DOOR = BLOCKS.register("uranium_door", - () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR))); - public static final DeferredBlock TITANIUM_DOOR = BLOCKS.register("titanium_door", - () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR))); - public static final DeferredBlock URANIUM_TRAPDOOR = BLOCKS.register("uranium_trapdoor", - () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR))); - public static final DeferredBlock TITANIUM_TRAPDOOR = BLOCKS.register("titanium_trapdoor", - () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR))); - public static final DeferredBlock URANIUM_BARS = BLOCKS.register("uranium_bars", - () -> new net.minecraft.world.level.block.IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS))); - public static final DeferredBlock TITANIUM_BARS = BLOCKS.register("titanium_bars", - () -> new net.minecraft.world.level.block.IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS))); - public static final DeferredBlock ANTIMETAL = BLOCKS.register("antimetal", - () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); - public static final DeferredBlock POLISHED_ANTIMETAL = BLOCKS.register("polished_antimetal", - () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); - public static final DeferredBlock ANTIMETAL_SCAFFOLDING = BLOCKS.register("antimetal_scaffolding", - () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); - public static final DeferredBlock CORNEA_STALK = BLOCKS.register("cornea_stalk", - () -> new CorneaStalkBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SWEET_BERRY_BUSH).randomTicks())); - public static final DeferredBlock CORN_CROP = BLOCKS.register("corn_crop", - () -> new CornCropBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).randomTicks().noCollission().noOcclusion())); - public static final DeferredBlock WILD_CORN = BLOCKS.register("wild_corn", - () -> new WildCornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).noCollission().noOcclusion())); - public static final DeferredBlock FALLEN_KING_CROWN_BLOCK = BLOCKS.register("fallen_king_crown", - () -> new Block(BlockBehaviour.Properties.of() - .strength(0.2F) - .sound(SoundType.METAL) - .noOcclusion() - .isSuffocating((state, level, pos) -> false) - .isViewBlocking((state, level, pos) -> false))); - public static final DeferredBlock SMALL_BLOOD_CRYSTAL_BUD = BLOCKS.register("small_blood_crystal_bud", - () -> new AmethystClusterBlock(3.0F, 4.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.SMALL_AMETHYST_BUD))); - public static final DeferredBlock MEDIUM_BLOOD_CRYSTAL_BUD = BLOCKS.register("medium_blood_crystal_bud", - () -> new AmethystClusterBlock(4.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.MEDIUM_AMETHYST_BUD))); - public static final DeferredBlock LARGE_BLOOD_CRYSTAL_BUD = BLOCKS.register("large_blood_crystal_bud", - () -> new AmethystClusterBlock(5.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.LARGE_AMETHYST_BUD))); - public static final DeferredBlock BUDDING_BLOOD_CRYSTAL = BLOCKS.register("budding_blood_crystal", - () -> new BuddingBloodCrystalBlock( - BlockBehaviour.Properties.ofFullCopy(Blocks.BUDDING_AMETHYST), - AntarchyFabricContent::smallBloodCrystalBudBlock, - AntarchyFabricContent::mediumBloodCrystalBudBlock, - AntarchyFabricContent::largeBloodCrystalBudBlock, - AntarchyFabricContent::bloodCrystalCrystalBlock - )); - public static final DeferredBlock BLOOD_CRYSTAL = BLOCKS.register("blood_crystal_block", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); - public static final DeferredBlock BLOOD_CRYSTAL_CRYSTAL = BLOCKS.register("blood_crystal_cluster", - () -> new AmethystClusterBlock(7.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_CLUSTER))); - public static final DeferredBlock DREAM_SAND = BLOCKS.register("dream_sand", - () -> new DreamSandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND))); - public static final DeferredBlock DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE))); - public static final DeferredBlock CHISELED_DREAM_SANDSTONE = BLOCKS.register("chiseled_dream_sandstone", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.CHISELED_SANDSTONE))); - public static final DeferredBlock CUT_DREAM_SANDSTONE = BLOCKS.register("cut_dream_sandstone", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE))); - public static final DeferredBlock SMOOTH_DREAM_SANDSTONE = BLOCKS.register("smooth_dream_sandstone", - () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE))); - public static final DeferredBlock DREAM_SANDSTONE_STAIRS = BLOCKS.register("dream_sandstone_stairs", - () -> new net.minecraft.world.level.block.StairBlock(DREAM_SANDSTONE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_STAIRS))); - public static final DeferredBlock DREAM_SANDSTONE_SLAB = BLOCKS.register("dream_sandstone_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_SLAB))); - public static final DeferredBlock DREAM_SANDSTONE_WALL = BLOCKS.register("dream_sandstone_wall", - () -> new net.minecraft.world.level.block.WallBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_WALL))); - public static final DeferredBlock SMOOTH_DREAM_SANDSTONE_STAIRS = BLOCKS.register("smooth_dream_sandstone_stairs", - () -> new net.minecraft.world.level.block.StairBlock(SMOOTH_DREAM_SANDSTONE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE_STAIRS))); - public static final DeferredBlock SMOOTH_DREAM_SANDSTONE_SLAB = BLOCKS.register("smooth_dream_sandstone_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE_SLAB))); - public static final DeferredBlock CUT_DREAM_SANDSTONE_SLAB = BLOCKS.register("cut_dream_sandstone_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE_SLAB))); - public static final DeferredHolder, BlockEntityType> ANT_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("ant_nest", - () -> BlockEntityType.Builder.of( - AntNestBlockEntity::new, - RED_ANT_NEST.get(), - BROWN_ANT_NEST.get(), - RAINBOW_ANT_NEST.get() - ).build(null)); - public static final DeferredHolder, BlockEntityType> DREAM_CAMPFIRE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("dream_campfire", - () -> BlockEntityType.Builder.of( - DreamCampfireBlockEntity::new, - DREAM_CAMPFIRE.get() - ).build(null)); - public static final DeferredHolder, BlockEntityType> WASP_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("wasp_nest", - () -> BlockEntityType.Builder.of( - WaspNestBlockEntity::new, - WASP_NEST.get() - ).build(null)); - public static final DeferredHolder, BlockEntityType> HUSHWEED_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("hushweed", - () -> BlockEntityType.Builder.of( - HushweedBlockEntity::new, - HUSHWEED.get() - ).build(null)); - public static final DeferredHolder, BlockEntityType> POTENT_NYXITE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("potent_nyxite", - () -> BlockEntityType.Builder.of( - (pos, state) -> new PotentNyxiteBlockEntity(pos, state, AntarchyFabricContent::potentNyxiteBlockEntityType), - POTENT_NYXITE.get() - ).build(null)); - public static final DeferredHolder, RedAntNestFeature> RED_ANT_NEST_FEATURE = FEATURES.register("red_ant_nest", - () -> new RedAntNestFeature(SimpleBlockConfiguration.CODEC)); - public static final DeferredHolder, BrownAntNestFeature> BROWN_ANT_NEST_FEATURE = FEATURES.register("brown_ant_nest", - () -> new BrownAntNestFeature(SimpleBlockConfiguration.CODEC)); - public static final DeferredHolder, RainbowAntNestFeature> RAINBOW_ANT_NEST_FEATURE = FEATURES.register("rainbow_ant_nest", - () -> new RainbowAntNestFeature(SimpleBlockConfiguration.CODEC)); - public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_LARGE_TREE = FEATURES.register("ouranwood_large_tree", - () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); - public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_YOUNG_TREE = FEATURES.register("ouranwood_young_tree", - () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); - public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_MEDIUM_TREE = FEATURES.register("ouranwood_medium_tree", - () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); - public static final DeferredHolder, OuranwoodCocoonTreeFeature> OURANWOOD_COCOON_TREE = FEATURES.register("ouranwood_cocoon_tree", - () -> new OuranwoodCocoonTreeFeature(OuranwoodTreeConfiguration.CODEC)); - public static final DeferredHolder, PeachTreeFeature> PEACH_TREE_FEATURE = FEATURES.register("peach_tree", - () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); - public static final DeferredHolder, PeachTreeFeature> PEACH_LARGE_TREE_FEATURE = FEATURES.register("peach_large_tree", - () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); - public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST)); - public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_MEADOW_FLORA = FEATURES.register("elythia_meadow_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.MEADOW)); - public static final DeferredHolder, ElythiaFloraFeature> PEACH_FOREST_FLORA = FEATURES.register("peach_forest_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.PEACH_FOREST)); - public static final DeferredHolder, ElythiaFloraFeature> FLOWER_FOREST_MILKWEED = FEATURES.register("flower_forest_milkweed", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FLOWER_FOREST_MILKWEED)); - public static final DeferredHolder, CornPatchFeature> CORN_PATCH = FEATURES.register("corn_patch", - () -> new CornPatchFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_BUTTERFLY_FIELDS_FLORA = FEATURES.register("butterfly_fields_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.BUTTERFLY_FIELDS)); - public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_TORCHFLOWER_FIELDS_FLORA = FEATURES.register("elythia_torchflower_fields_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.TORCHFLOWER_FIELDS)); - public static final DeferredHolder, ElythiaSurfaceCoverFeature> ELYTHIA_SURFACE_COVER = FEATURES.register("elythia_surface_cover", - () -> new ElythiaSurfaceCoverFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ElythiaUndergroundFeature> ELYTHIA_UNDERGROUND = FEATURES.register("elythia_underground", - () -> new ElythiaUndergroundFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, BrutalflyCocoonFeature> BRUTALFLY_COCOON = FEATURES.register("brutalfly_cocoon", - () -> new BrutalflyCocoonFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, MolewormTunnelsFeature> ELYTHIA_MOLEWORM_TUNNELS = FEATURES.register("elythia_moleworm_tunnels", - () -> new MolewormTunnelsFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, MolewormCaveEntranceFeature> ELYTHIA_MOLEWORM_CAVE_ENTRANCES = FEATURES.register("elythia_moleworm_cave_entrances", - () -> new MolewormCaveEntranceFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, MolewormWarrensFeature> ELYTHIA_MOLEWORM_WARRENS = FEATURES.register("elythia_moleworm_warrens", - () -> new MolewormWarrensFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, MolewormSurfaceMoundsFeature> ELYTHIA_MOLEWORM_SURFACE_MOUNDS = FEATURES.register("elythia_moleworm_surface_mounds", - () -> new MolewormSurfaceMoundsFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, TriffidPatchFeature> TRIFFID_PATCH = FEATURES.register("triffid_patch", - () -> new TriffidPatchFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, MapCodec> ELYTHIA_BIOME_SOURCE = BIOME_SOURCES.register("elythia_biome_source", - () -> ElythiaBiomeSource.CODEC); - public static final DeferredHolder, MapCodec> ELYTHIA_RIVER_CARVE = DENSITY_FUNCTION_TYPES.register("elythia_river_carve", - () -> ElythiaRiverCarveFunction.CODEC); - public static final DeferredHolder, ElythiaPondFeature> ELYTHIA_POND = FEATURES.register("elythia_pond", - () -> new ElythiaPondFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, LumenPoolFeature> LUMEN_POOL = FEATURES.register("lumen_pools", - () -> new LumenPoolFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, LumenLilyPadFeature> LUMEN_LILY_PADS = FEATURES.register("lumen_lily_pads", - () -> new LumenLilyPadFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, LumenStreamFeature> LUMEN_STREAM = FEATURES.register("lumen_streams", - () -> new LumenStreamFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ElythiaTuffBoulderFeature> ELYTHIA_TUFF_BOULDER = FEATURES.register("elythia_tuff_boulder", - () -> new ElythiaTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ElythiaLargeTuffBoulderFeature> ELYTHIA_LARGE_TUFF_BOULDER = FEATURES.register("elythia_large_tuff_boulder", - () -> new ElythiaLargeTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, PeachForestMossyBoulderFeature> PEACH_FOREST_MOSSY_BOULDER = FEATURES.register("peach_forest_mossy_boulder", - () -> new PeachForestMossyBoulderFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, PeachForestPondFeature> PEACH_FOREST_POND = FEATURES.register("peach_forest_pond", - () -> new PeachForestPondFeature(PeachForestPondConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisFissureFeature> THORAXIS_FISSURE = FEATURES.register("thoraxis_fissure", - () -> new ThoraxisFissureFeature(ThoraxisFissureConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisRibColumnsFeature> THORAXIS_RIB_COLUMNS = FEATURES.register("thoraxis_rib_columns", - () -> new ThoraxisRibColumnsFeature(ThoraxisRibColumnsConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisSpikeFeature> THORAXIS_SPIKE = FEATURES.register("thoraxis_spike", - () -> new ThoraxisSpikeFeature(ThoraxisSpikeConfiguration.CODEC)); - public static final DeferredHolder, NyxiteSpikeFeature> NYXITE_SPIKES = FEATURES.register("nyxite_spikes", - () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); - public static final DeferredHolder, AntiwaterSpringsFeature> ANTIWATER_SPRINGS = FEATURES.register("antiwater_springs", - () -> new AntiwaterSpringsFeature(AntiwaterSpringsConfiguration.CODEC)); - public static final DeferredHolder, PotentNyxiteFeature> POTENT_NYXITE_FEATURE = FEATURES.register("potent_nyxite", - () -> new PotentNyxiteFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisBloodCrystalFeature> THORAXIS_BLOOD_CRYSTAL_SPIRES = FEATURES.register("thoraxis_blood_crystal_spires", - () -> new ThoraxisBloodCrystalFeature(ThoraxisBloodCrystalConfiguration.CODEC)); - public static final DeferredHolder, CloudSeaCalciteFeature> CLOUD_SEA_CALCITE_BANKS = FEATURES.register("cloud_sea_calcite_banks", - () -> new CloudSeaCalciteFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, BedBugNestFeature> BED_BUG_NEST = FEATURES.register("bed_bug_nest", - () -> new BedBugNestFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, BedBugSurfaceClusterFeature> BED_BUG_SURFACE_CLUSTER = FEATURES.register("bed_bug_surface_cluster", - () -> new BedBugSurfaceClusterFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisAntiwaterPoolFeature> THORAXIS_ANTIWATER_POOL = FEATURES.register("thoraxis_antiwater_pool", - () -> new ThoraxisAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); - public static final DeferredHolder, LucidAntiwaterPoolFeature> LUCID_ANTIWATER_POOL = FEATURES.register("lucid_antiwater_pool", - () -> new LucidAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); - public static final DeferredHolder, ThoraxisDuneFeature> THORAXIS_DUNE = FEATURES.register("thoraxis_dune", - () -> new ThoraxisDuneFeature(ThoraxisDuneConfiguration.CODEC)); - public static final DeferredHolder, CoralSpikeFeature> ELYTHIA_CORAL_SPIKE = FEATURES.register("elythia_coral_spike", - () -> new CoralSpikeFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.FallenOuranwoodFeature> FALLEN_OURANWOOD_TREE = FEATURES.register("fallen_ouranwood_tree", - () -> new com.craisinlord.antarchy.content.worldgen.elythia.FallenOuranwoodFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature> FUNGAL_MUSHROOM = FEATURES.register("fungal_mushroom", - () -> new com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature(NoneFeatureConfiguration.CODEC)); - public static final DeferredHolder, MapCodec> THORAXIS_BIOME_SOURCE = BIOME_SOURCES.register("thoraxis_biome_source", - () -> ThoraxisBiomeSource.CODEC); - - public static final DeferredItem DUPLICATOR_LOG_ITEM = ITEMS.registerSimpleBlockItem(DUPLICATOR_LOG); - public static final DeferredItem OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_LOG); - public static final DeferredItem OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_WOOD); - public static final DeferredItem MOSSY_OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_OURANWOOD_LOG); - public static final DeferredItem MOSSY_OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_OURANWOOD_WOOD); - public static final DeferredItem STRIPPED_OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(STRIPPED_OURANWOOD_LOG); - public static final DeferredItem STRIPPED_OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(STRIPPED_OURANWOOD_WOOD); - public static final DeferredItem OURANWOOD_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_PLANKS); - public static final DeferredItem OURANWOOD_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_STAIRS); - public static final DeferredItem OURANWOOD_SLAB_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_SLAB); - public static final DeferredItem OURANWOOD_FENCE_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_FENCE); - public static final DeferredItem OURANWOOD_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_FENCE_GATE); - public static final DeferredItem OURANWOOD_DOOR_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_DOOR); - public static final DeferredItem OURANWOOD_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_TRAPDOOR); - public static final DeferredItem OURANWOOD_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_PRESSURE_PLATE); - public static final DeferredItem OURANWOOD_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_BUTTON); - public static final DeferredItem OURANWOOD_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_LEAVES); - public static final DeferredItem OURANWOOD_ACORN = ITEMS.registerSimpleBlockItem(OURANWOOD_ACORN_BLOCK); - public static final DeferredItem PEACH_LOG_ITEM = ITEMS.registerSimpleBlockItem(PEACH_LOG); - public static final DeferredItem PEACH_WOOD_ITEM = ITEMS.registerSimpleBlockItem(PEACH_WOOD); - public static final DeferredItem STRIPPED_PEACH_LOG_ITEM = ITEMS.registerSimpleBlockItem(STRIPPED_PEACH_LOG); - public static final DeferredItem STRIPPED_PEACH_WOOD_ITEM = ITEMS.registerSimpleBlockItem(STRIPPED_PEACH_WOOD); - public static final DeferredItem PEACH_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(PEACH_PLANKS); - public static final DeferredItem PEACH_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(PEACH_STAIRS); - public static final DeferredItem PEACH_SLAB_ITEM = ITEMS.registerSimpleBlockItem(PEACH_SLAB); - public static final DeferredItem PEACH_FENCE_ITEM = ITEMS.registerSimpleBlockItem(PEACH_FENCE); - public static final DeferredItem PEACH_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(PEACH_FENCE_GATE); - public static final DeferredItem PEACH_DOOR_ITEM = ITEMS.registerSimpleBlockItem(PEACH_DOOR); - public static final DeferredItem PEACH_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(PEACH_TRAPDOOR); - public static final DeferredItem PEACH_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(PEACH_PRESSURE_PLATE); - public static final DeferredItem PEACH_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(PEACH_BUTTON); - public static final DeferredItem PEACH_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(PEACH_LEAVES); - public static final DeferredItem PEACH_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(PEACH_SAPLING); - // public static final DeferredItem OURANWOOD_VINE_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_VINE); - public static final DeferredItem ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(ORANGE_MILKWEED); - public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(PINK_MILKWEED); - public static final DeferredItem OURANWOOD_SIGN_ITEM = ITEMS.register("ouranwood_sign", - () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), OURANWOOD_SIGN.get(), OURANWOOD_WALL_SIGN.get())); - public static final DeferredItem OURANWOOD_HANGING_SIGN_ITEM = ITEMS.register("ouranwood_hanging_sign", - () -> new net.minecraft.world.item.HangingSignItem(OURANWOOD_HANGING_SIGN.get(), OURANWOOD_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); - public static final DeferredItem OURANWOOD_BOAT = ITEMS.register("ouranwood_boat", - () -> new OuranwoodBoatOnlyItem(OURANWOOD_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); - public static final DeferredItem OURANWOOD_CHEST_BOAT = ITEMS.register("ouranwood_chest_boat", - () -> new OuranwoodChestBoatItem(OURANWOOD_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); - public static final DeferredItem PEACH_SIGN_ITEM = ITEMS.register("peach_sign", - () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), PEACH_SIGN.get(), PEACH_WALL_SIGN.get())); - public static final DeferredItem PEACH_HANGING_SIGN_ITEM = ITEMS.register("peach_hanging_sign", - () -> new net.minecraft.world.item.HangingSignItem(PEACH_HANGING_SIGN.get(), PEACH_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); - public static final DeferredItem PEACH_BOAT = ITEMS.register("peach_boat", - () -> new com.craisinlord.antarchy.content.item.PeachBoatOnlyItem(PEACH_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); - public static final DeferredItem PEACH_CHEST_BOAT = ITEMS.register("peach_chest_boat", - () -> new com.craisinlord.antarchy.content.item.PeachChestBoatItem(PEACH_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); - public static final DeferredItem DUPLICATOR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(DUPLICATOR_SAPLING); - public static final DeferredItem RED_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(RED_ANT_NEST); - public static final DeferredItem BROWN_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(BROWN_ANT_NEST); - public static final DeferredItem RAINBOW_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(RAINBOW_ANT_NEST); - public static final DeferredItem URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(URANIUM_ORE); - public static final DeferredItem DEEPSLATE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(DEEPSLATE_URANIUM_ORE); - public static final DeferredItem TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(TITANIUM_ORE); - public static final DeferredItem DEEPSLATE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(DEEPSLATE_TITANIUM_ORE); - public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(URANIUM_BLOCK); - public static final DeferredItem TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(TITANIUM_BLOCK); - public static final DeferredItem RAW_URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(RAW_URANIUM_BLOCK); - public static final DeferredItem RAW_TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(RAW_TITANIUM_BLOCK); - public static final DeferredItem CUT_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(CUT_URANIUM); - public static final DeferredItem CUT_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(CUT_TITANIUM); - public static final DeferredItem CUT_URANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(CUT_URANIUM_SLAB); - public static final DeferredItem CUT_TITANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(CUT_TITANIUM_SLAB); - public static final DeferredItem CUT_URANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(CUT_URANIUM_STAIRS); - public static final DeferredItem CUT_TITANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(CUT_TITANIUM_STAIRS); - public static final DeferredItem CHISELED_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_URANIUM); - public static final DeferredItem CHISELED_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_TITANIUM); - public static final DeferredItem URANIUM_BULB_ITEM = ITEMS.register("uranium_bulb", - () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(URANIUM_BULB.get(), new Item.Properties())); - public static final DeferredItem TITANIUM_BULB_ITEM = ITEMS.register("titanium_bulb", - () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(TITANIUM_BULB.get(), new Item.Properties())); - public static final DeferredItem URANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(URANIUM_DOOR); - public static final DeferredItem TITANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(TITANIUM_DOOR); - public static final DeferredItem URANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(URANIUM_TRAPDOOR); - public static final DeferredItem TITANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(TITANIUM_TRAPDOOR); - public static final DeferredItem URANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(URANIUM_BARS); - public static final DeferredItem TITANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(TITANIUM_BARS); - public static final DeferredItem ANTIMETAL_ITEM = ITEMS.register("antimetal", - () -> new AntimetalBlockItem(ANTIMETAL.get(), new Item.Properties())); - public static final DeferredItem POLISHED_ANTIMETAL_ITEM = ITEMS.register("polished_antimetal", - () -> new AntimetalBlockItem(POLISHED_ANTIMETAL.get(), new Item.Properties())); - public static final DeferredItem ANTIMETAL_SCAFFOLDING_ITEM = ITEMS.register("antimetal_scaffolding", - () -> new AntimetalScaffoldingItem(ANTIMETAL_SCAFFOLDING.get(), new Item.Properties())); - public static final DeferredItem SMALL_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(SMALL_BLOOD_CRYSTAL_BUD); - public static final DeferredItem MEDIUM_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(MEDIUM_BLOOD_CRYSTAL_BUD); - public static final DeferredItem LARGE_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(LARGE_BLOOD_CRYSTAL_BUD); - public static final DeferredItem BUDDING_BLOOD_CRYSTAL_ITEM = ITEMS.registerSimpleBlockItem(BUDDING_BLOOD_CRYSTAL); - public static final DeferredItem BLOOD_CRYSTAL_ITEM = ITEMS.register("blood_crystal_block", - () -> new net.minecraft.world.item.BlockItem(BLOOD_CRYSTAL.get(), new Item.Properties())); - public static final DeferredItem BLOOD_CRYSTAL_CRYSTAL_ITEM = ITEMS.registerSimpleBlockItem(BLOOD_CRYSTAL_CRYSTAL); - public static final DeferredItem DREAM_SAND_ITEM = ITEMS.registerSimpleBlockItem(DREAM_SAND); - public static final DeferredItem DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(DREAM_SANDSTONE); - public static final DeferredItem CHISELED_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_DREAM_SANDSTONE); - public static final DeferredItem CUT_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(CUT_DREAM_SANDSTONE); - public static final DeferredItem SMOOTH_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(SMOOTH_DREAM_SANDSTONE); - public static final DeferredItem DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(DREAM_SANDSTONE_STAIRS); - public static final DeferredItem DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(DREAM_SANDSTONE_SLAB); - public static final DeferredItem DREAM_SANDSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(DREAM_SANDSTONE_WALL); - public static final DeferredItem SMOOTH_DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(SMOOTH_DREAM_SANDSTONE_STAIRS); - public static final DeferredItem SMOOTH_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(SMOOTH_DREAM_SANDSTONE_SLAB); - public static final DeferredItem CUT_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(CUT_DREAM_SANDSTONE_SLAB); - public static final DeferredItem DUCT_TAPE_ITEM = ITEMS.register("duct_tape", - () -> new DuctTapeBlockItem(DUCT_TAPE.get(), new Item.Properties().stacksTo(1))); - public static final DeferredItem INFESTED_ROOTED_DIRT_ITEM = ITEMS.registerSimpleBlockItem(INFESTED_ROOTED_DIRT); - public static final DeferredItem INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(INFESTED_COARSE_DIRT); - public static final DeferredItem NYXITE_ITEM = ITEMS.registerSimpleBlockItem(NYXITE); - public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_NYXITE); - public static final DeferredItem CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_NYXITE); - public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_BRICKS); - public static final DeferredItem NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_STAIRS); - public static final DeferredItem NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_SLAB); - public static final DeferredItem NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_WALL); - public static final DeferredItem POLISHED_NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_NYXITE_STAIRS); - public static final DeferredItem POLISHED_NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_NYXITE_SLAB); - public static final DeferredItem POLISHED_NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_NYXITE_WALL); - public static final DeferredItem NYXITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_BRICK_STAIRS); - public static final DeferredItem NYXITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_BRICK_SLAB); - public static final DeferredItem NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_BRICK_WALL); - public static final DeferredItem SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE); - public static final DeferredItem POLISHED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_SHELLSTONE); - public static final DeferredItem SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_BRICKS); - public static final DeferredItem CHISELED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_SHELLSTONE); - public static final DeferredItem MOSSY_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICKS); - public static final DeferredItem CRACKED_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(CRACKED_SHELLSTONE_BRICKS); - public static final DeferredItem MOSSY_SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICK_STAIRS); - public static final DeferredItem MOSSY_SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICK_SLAB); - public static final DeferredItem MOSSY_SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICK_WALL); - public static final DeferredItem SHELLSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_STAIRS); - public static final DeferredItem SHELLSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_SLAB); - public static final DeferredItem SHELLSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_WALL); - public static final DeferredItem POLISHED_SHELLSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_SHELLSTONE_STAIRS); - public static final DeferredItem POLISHED_SHELLSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_SHELLSTONE_SLAB); - public static final DeferredItem POLISHED_SHELLSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_SHELLSTONE_WALL); - public static final DeferredItem SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_BRICK_STAIRS); - public static final DeferredItem SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_BRICK_SLAB); - public static final DeferredItem SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_BRICK_WALL); - public static final DeferredItem TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("triffid_goo_block", - () -> new com.craisinlord.antarchy.content.item.TriffidGooBlockItem(TRIFFID_GOO_BLOCK.get(), new Item.Properties())); - public static final DeferredItem PALE_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(PALE_NYXITE); - public static final DeferredItem NYXITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_SPIKE); - public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(POTENT_NYXITE); - public static final DeferredItem UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(UMBRAL_MOSS_BLOCK); - public static final DeferredItem UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(UMBRAL_MOSS_CARPET); - public static final DeferredItem BLUSH_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(BLUSH_MOSS_BLOCK); - public static final DeferredItem BLUSH_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(BLUSH_MOSS_CARPET); - public static final DeferredItem DREAM_TORCH_ITEM = ITEMS.register("dream_torch", - () -> new StandingAndWallBlockItem(DREAM_TORCH.get(), DREAM_WALL_TORCH.get(), new Item.Properties(), Direction.UP)); - public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(DREAM_LANTERN); - public static final DeferredItem DREAM_CAMPFIRE_ITEM = ITEMS.registerSimpleBlockItem(DREAM_CAMPFIRE); - public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(BED_BUG_EGG); - public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(WASP_NEST); - public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(HUSHWEED); - public static final DeferredItem BILE_BUCKET = ITEMS.register("bile_bucket", - () -> new BucketItem(BILE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); - public static final DeferredItem ICHOR_BUCKET = ITEMS.register("ichor_bucket", - () -> new BucketItem(ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); - public static final DeferredItem ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket", - () -> new BucketItem(ANTIWATER.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); - public static final DeferredItem LUMEN_BUCKET = ITEMS.register("lumen_bucket", - () -> new BucketItem(LUMEN.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); - public static final DeferredItem LUMEN_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(LUMEN_FROGLIGHT); - public static final DeferredItem ROSEATE_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(ROSEATE_FROGLIGHT); - public static final DeferredItem CLOUD_BUCKET = ITEMS.register("cloud_bucket", - () -> new com.craisinlord.antarchy.content.item.CloudBucketItem(CLOUD_BLOCK.get(), new Item.Properties().craftRemainder(Items.BUCKET))); - public static final DeferredItem BLOOD_CRYSTAL_SHARD = ITEMS.register("blood_crystal_shard", - () -> new com.craisinlord.antarchy.content.item.BloodCrystalShardItem(new Item.Properties())); - public static final DeferredItem BLOOD_CRYSTAL_APPLE = ITEMS.register("blood_crystal_apple", - () -> new BloodCrystalAppleItem(new Item.Properties() - .rarity(Rarity.RARE) - .food(new net.minecraft.world.food.FoodProperties.Builder() - .nutrition(4) - .saturationModifier(1.2f) - .effect(new MobEffectInstance(net.minecraft.world.effect.MobEffects.REGENERATION, 100, 1), 1.0f) - .alwaysEdible() - .build()))); - public static final DeferredItem BLOOD_CRYSTAL_HELMET = ITEMS.register("blood_crystal_helmet", - () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.HELMET, new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem BLOOD_CRYSTAL_CHESTPLATE = ITEMS.register("blood_crystal_chestplate", - () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.CHESTPLATE, new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem BLOOD_CRYSTAL_LEGGINGS = ITEMS.register("blood_crystal_leggings", - () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem BLOOD_CRYSTAL_BOOTS = ITEMS.register("blood_crystal_boots", - () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem BLOOD_CRYSTAL_KATANA = ITEMS.register("blood_crystal_katana", - () -> new BloodCrystalKatanaItem( - BLOOD_CRYSTAL_KATANA_TIER, - new Item.Properties().stacksTo(1).durability(1200).rarity(Rarity.RARE), - AntarchySettings.bloodCrystalKatanaAttackDamage(), - -2.2F - )); - public static final DeferredItem MANTIS_CLAW = ITEMS.registerSimpleItem("mantis_claw", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem KING_SCALE = ITEMS.register("king_scale", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem STINK_BUG_ITEM = ITEMS.register("stink_bug", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem JUMPY_BUG_LEG = ITEMS.register("jumpy_bug_leg", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); - private static final DeferredHolder JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots", - () -> new ArmorMaterial( - createJumpyBootsDefense(), - 15, - net.minecraft.sounds.SoundEvents.ARMOR_EQUIP_NETHERITE, - () -> Ingredient.of(net.minecraft.world.item.Items.NETHERITE_BOOTS), - java.util.List.of(new ArmorMaterial.Layer(net.minecraft.resources.ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_boots"))), - 3.0F, - 0.1F - )); - public static final DeferredItem JUMPY_BOOTS = ITEMS.register("jumpy_boots", - () -> new com.craisinlord.antarchy.content.item.JumpyBootsItem( - net.minecraft.core.Holder.direct(JUMPY_BOOTS_ARMOR_MATERIAL.get()), - new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)) - )); - public static final DeferredItem BRUTALFLY_WING = ITEMS.registerSimpleItem("brutalfly_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", - () -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480))); - public static final DeferredItem CORNEA_EAR = ITEMS.register("cornea_ear", - () -> new CorneaEarItem(new Item.Properties() - .rarity(Rarity.UNCOMMON) - .food(new FoodProperties.Builder() - .nutrition(2) - .saturationModifier(0.4F) - .build()))); - public static final DeferredItem CORN = ITEMS.register("corn", - () -> new Item(new Item.Properties() - .food(new FoodProperties.Builder() - .nutrition(3) - .saturationModifier(0.6F) - .build()))); - public static final DeferredItem CORN_SEEDS = ITEMS.register("corn_seeds", - () -> new net.minecraft.world.item.ItemNameBlockItem(CORN_CROP.get(), new Item.Properties())); - public static final DeferredItem RAW_VENISON = ITEMS.register("raw_venison", - () -> new Item(new Item.Properties() - .food(new FoodProperties.Builder() - .nutrition(2) - .saturationModifier(0.3F) - .build()))); - public static final DeferredItem COOKED_VENISON = ITEMS.register("cooked_venison", - () -> new Item(new Item.Properties() - .food(new FoodProperties.Builder() - .nutrition(6) - .saturationModifier(0.8F) - .build()))); - public static final DeferredItem PEACH = ITEMS.register("peach", - () -> new com.craisinlord.antarchy.content.item.PeachItem()); - public static final DeferredItem RAW_CORNDOG = ITEMS.register("raw_corndog", - () -> new Item(new Item.Properties() - .stacksTo(64) - .food(new FoodProperties.Builder() - .nutrition(8) - .saturationModifier(0.7F) - .build()))); - public static final DeferredItem COOKED_CORNDOG = ITEMS.register("cooked_corndog", - () -> new Item(new Item.Properties() - .stacksTo(64) - .food(new FoodProperties.Builder() - .nutrition(14) - .saturationModifier(1.1F) - .build()))); - public static final DeferredItem HIGH_FRUCTOSE_CORN_SYRUP = ITEMS.register("high_fructose_corn_syrup", - () -> new com.craisinlord.antarchy.content.item.HighFructoseCornSyrupItem(new Item.Properties() - .stacksTo(16) - .food(new FoodProperties.Builder() - .nutrition(0) - .saturationModifier(0.0F) - .alwaysEdible() - .build()))); - public static final DeferredItem ROOT_BEER = ITEMS.register("root_beer", - () -> new com.craisinlord.antarchy.content.item.RootBeerItem(new Item.Properties() - .stacksTo(16) - .food(new FoodProperties.Builder() - .nutrition(4) - .saturationModifier(0.4F) - .effect(new MobEffectInstance(MobEffects.REGENERATION, 100, 0), 1.0F) - .alwaysEdible() - .build()))); - public static final DeferredItem TRIFFID_GOO = ITEMS.registerSimpleItem("triffid_goo", - new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem VORTEX_EYE = ITEMS.register("vortex_eye", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem RAW_URANIUM_SCRAP = ITEMS.registerSimpleItem("raw_uranium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem RAW_TITANIUM_SCRAP = ITEMS.registerSimpleItem("raw_titanium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem RAW_URANIUM = ITEMS.registerSimpleItem("raw_uranium", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem RAW_TITANIUM = ITEMS.registerSimpleItem("raw_titanium", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem MUD_PIE = ITEMS.register("mud_pie", - () -> new Item(new Item.Properties() - .food(new FoodProperties.Builder() - .nutrition(10) - .saturationModifier(0.9F) - .effect(new MobEffectInstance(MobEffects.CONFUSION, 200), 1.0F) - .build()))); - public static final DeferredItem RAINBOW_SUGAR = ITEMS.register("rainbow_sugar", - () -> new RainbowSugarItem(new Item.Properties() - .rarity(Rarity.UNCOMMON) - .food(new FoodProperties.Builder().nutrition(1).saturationModifier(0.0F).alwaysEdible().build()))); - public static final DeferredItem URANIUM_NUGGET = ITEMS.registerSimpleItem("uranium_nugget", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem TITANIUM_NUGGET = ITEMS.registerSimpleItem("titanium_nugget", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem URANIUM_INGOT = ITEMS.registerSimpleItem("uranium_ingot", new Item.Properties().rarity(Rarity.UNCOMMON).fireResistant()); - public static final DeferredItem TITANIUM_INGOT = ITEMS.registerSimpleItem("titanium_ingot", new Item.Properties().rarity(Rarity.UNCOMMON).fireResistant()); - public static final DeferredItem MOLEVORE_NOSE = ITEMS.registerSimpleItem("molevore_nose", new Item.Properties().rarity(Rarity.RARE)); - public static final DeferredItem MOLEWORM_ITEM = ITEMS.register("moleworm", - () -> new Item(new Item.Properties() - .food(new FoodProperties.Builder() - .nutrition(1) - .saturationModifier(0.0F) - .effect(new MobEffectInstance(MobEffects.HUNGER, 600), 0.8F) - .build()))); - public static final DeferredItem CLOUD_SHARK_FIN = ITEMS.registerSimpleItem("cloud_shark_fin", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem CLOUD_SHARK_FIN_SOUP = ITEMS.register("cloud_shark_fin_soup", - () -> new CloudSharkFinSoupItem(new Item.Properties() - .stacksTo(1) - .craftRemainder(Items.BOWL) - .food(new FoodProperties.Builder() - .nutrition(10) - .saturationModifier(0.8F) - .effect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, 600, 0), 1.0F) - .effect(new MobEffectInstance(MobEffects.SLOW_FALLING, 600, 0), 1.0F) - .build()))); - public static final DeferredItem KRAKEN_TOOTH = ITEMS.register("kraken_tooth", - () -> new Item(new Item.Properties().rarity(net.minecraft.world.item.Rarity.RARE))); - public static final DeferredItem BASILISK_FANG = ITEMS.registerSimpleItem("basilisk_fang", new Item.Properties().rarity(Rarity.RARE)); - public static final DeferredItem BASILISK_DAGGER = ITEMS.register("basilisk_dagger", - () -> new BasiliskDaggerItem(Tiers.IRON, new Item.Properties().rarity(Rarity.RARE), 4, -1.8F)); - public static final DeferredItem EMPEROR_SCORPION_STINGER = ITEMS.registerSimpleItem("emperor_scorpion_stinger", new Item.Properties().rarity(Rarity.RARE)); - public static final DeferredItem SCORPION_WHIP = ITEMS.register("scorpion_whip", - () -> new ScorpionWhipItem(Tiers.IRON, new Item.Properties().rarity(Rarity.RARE).durability(384))); - public static final DeferredItem MOGGLES = ITEMS.register("moggles", - () -> new MogglesItem(net.minecraft.core.Holder.direct(MOGGLES_ARMOR_MATERIAL.get()), new Item.Properties().rarity(Rarity.RARE).stacksTo(1))); - public static final DeferredItem FALLEN_KING_CROWN = ITEMS.register("fallen_king_crown", - () -> new com.craisinlord.antarchy.content.item.FallenKingCrownItem( - net.minecraft.core.Holder.direct(FALLEN_KING_CROWN_ARMOR_MATERIAL.get()), - new Item.Properties().rarity(Rarity.RARE) - )); - public static final DeferredItem ULTIMATE_HELMET = ITEMS.register("ultimate_helmet", - () -> new UltimateArmorItem( - net.minecraft.core.Holder.direct(ULTIMATE_ARMOR_MATERIAL.get()), - ArmorItem.Type.HELMET, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.HELMET.getDurability(41)) - )); - public static final DeferredItem ULTIMATE_CHESTPLATE = ITEMS.register("ultimate_chestplate", - () -> new UltimateArmorItem( - net.minecraft.core.Holder.direct(ULTIMATE_ARMOR_MATERIAL.get()), - ArmorItem.Type.CHESTPLATE, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.CHESTPLATE.getDurability(41)) - )); - public static final DeferredItem ULTIMATE_LEGGINGS = ITEMS.register("ultimate_leggings", - () -> new UltimateArmorItem( - net.minecraft.core.Holder.direct(ULTIMATE_ARMOR_MATERIAL.get()), - ArmorItem.Type.LEGGINGS, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.LEGGINGS.getDurability(41)) - )); - public static final DeferredItem ULTIMATE_BOOTS = ITEMS.register("ultimate_boots", - () -> new UltimateArmorItem( - net.minecraft.core.Holder.direct(ULTIMATE_ARMOR_MATERIAL.get()), - ArmorItem.Type.BOOTS, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.BOOTS.getDurability(41)) - )); - public static final DeferredItem ULTIMATE_SWORD = ITEMS.register("ultimate_sword", - () -> new UltimateSwordItem( - ULTIMATE_TIER, - new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), - AntarchySettings::ultimateSwordAttackDamage, - -2.4F - )); - public static final DeferredItem ULTIMATE_PICKAXE = ITEMS.register("ultimate_pickaxe", - () -> new UltimatePickaxeItem( - ULTIMATE_TIER, - new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), - AntarchySettings::ultimatePickaxeAttackDamage, - -2.8F - )); - public static final DeferredItem ULTIMATE_AXE = ITEMS.register("ultimate_axe", - () -> new UltimateAxeItem( - ULTIMATE_TIER, - new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), - AntarchySettings::ultimateAxeAttackDamage, - -3.0F - )); - public static final DeferredItem ULTIMATE_SHOVEL = ITEMS.register("ultimate_shovel", - () -> new UtlimateShovelItem( - ULTIMATE_TIER, - new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), - AntarchySettings::ultimateShovelAttackDamage, - -3.0F - )); - public static final DeferredItem ULTIMATE_HOE = ITEMS.register("ultimate_hoe", - () -> new UltimateHoeItem( - ULTIMATE_TIER, - new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), - AntarchySettings::ultimateHoeAttackDamage, - 0.0F - )); - public static final DeferredItem ULTIMATE_BOW = ITEMS.register("ultimate_bow", - () -> new UltimateBowItem(new Item.Properties().stacksTo(1).durability(768).rarity(Rarity.EPIC).fireResistant())); - public static final DeferredItem ULTIMATE_CROSSBOW = ITEMS.register("ultimate_crossbow", - () -> new UltimateCrossbowItem(new Item.Properties().stacksTo(1).durability(1024).rarity(Rarity.EPIC).fireResistant())); -// public static final DeferredItem ULTIMATE_MACE = ITEMS.register("ultimate_mace", -// () -> new UltimateMaceItem(new Item.Properties().stacksTo(1).durability(1024).rarity(Rarity.EPIC).fireResistant())); - public static final DeferredItem NIGHTMARE_HELMET = ITEMS.register("nightmare_helmet", - () -> new NightmareArmorItem( - net.minecraft.core.Holder.direct(NIGHTMARE_ARMOR_MATERIAL.get()), - ArmorItem.Type.HELMET, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.HELMET.getDurability(41)) - )); - public static final DeferredItem NIGHTMARE_CHESTPLATE = ITEMS.register("nightmare_chestplate", - () -> new NightmareArmorItem( - net.minecraft.core.Holder.direct(NIGHTMARE_ARMOR_MATERIAL.get()), - ArmorItem.Type.CHESTPLATE, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.CHESTPLATE.getDurability(41)) - )); - public static final DeferredItem NIGHTMARE_LEGGINGS = ITEMS.register("nightmare_leggings", - () -> new NightmareArmorItem( - net.minecraft.core.Holder.direct(NIGHTMARE_ARMOR_MATERIAL.get()), - ArmorItem.Type.LEGGINGS, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.LEGGINGS.getDurability(41)) - )); - public static final DeferredItem NIGHTMARE_BOOTS = ITEMS.register("nightmare_boots", - () -> new NightmareArmorItem( - net.minecraft.core.Holder.direct(NIGHTMARE_ARMOR_MATERIAL.get()), - ArmorItem.Type.BOOTS, - new Item.Properties() - .rarity(Rarity.EPIC) - .fireResistant() - .durability(ArmorItem.Type.BOOTS.getDurability(41)) - )); - public static final DeferredItem NIGHTMARE_SWORD = ITEMS.register("nightmare_sword", - () -> new NightmareSwordItem( - ULTIMATE_TIER, - new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), - -2.4F - )); - public static final DeferredItem SHRINK_RAY = ITEMS.register("shrink_ray", - () -> new SizeRayItem( - new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(), - SHRINK_RAY_PROJECTILE, - SizeRayProjectileEntity.SizeRayType.SHRINK, - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/shrink_ray.geo.json"), - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/models/item/shrink_ray.png"), - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/shrink_ray.animation.json"), - "shrink_ray_active" - )); - public static final DeferredItem GROWTH_RAY = ITEMS.register("growth_ray", - () -> new SizeRayItem( - new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(), - GROWTH_RAY_PROJECTILE, - SizeRayProjectileEntity.SizeRayType.GROWTH, - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/growth_ray.geo.json"), - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/models/item/growth_ray.png"), - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/growth_ray.animation.json"), - "growth_ray_active" - )); - public static final DeferredItem GRAVITY_GUN = ITEMS.register("gravity_gun", - () -> new GravityGunItem(new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant())); - public static final DeferredItem MINERS_DREAM = ITEMS.register("miners_dream", - () -> new MinersDreamItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); - public static final DeferredItem SQUIDZOOKA = ITEMS.register("squidzooka", - () -> new SquidzookaItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); - public static final DeferredItem BATTLE_AXE = ITEMS.register("battle_axe", - () -> new BattleAxeItem( - Tiers.NETHERITE, - new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant(), - AntarchySettings::battleAxeAttackDamage, - -3.1F - )); - public static final DeferredHolder, EntityType> DIAMOND_MINECART = ENTITY_TYPES.register("diamond_minecart", - () -> EntityType.Builder.of((entityType, level) -> new DiamondMinecartEntity(entityType, level, diamondMinecartItem()), MobCategory.MISC) - .sized(0.98F, 0.7F) - .clientTrackingRange(8) - .build("diamond_minecart")); - public static final DeferredItem DIAMOND_MINECART_ITEM = ITEMS.register("diamond_minecart", - () -> new DiamondMinecartItem(DIAMOND_MINECART, new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); - public static final DeferredItem REVERIE_BOTTLE = ITEMS.register("reverie_bottle", - () -> new ReverieBottleItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); - public static final DeferredItem BIG_BERTHA_BLADE = ITEMS.registerSimpleItem( - "big_bertha_blade", - new Item.Properties().rarity(Rarity.EPIC).fireResistant() - ); - public static final DeferredItem BIG_BERTHA_HANDLE = ITEMS.registerSimpleItem( - "big_bertha_handle", - new Item.Properties().rarity(Rarity.EPIC).fireResistant() - ); - public static final DeferredItem BIG_BERTHA_HILT = ITEMS.registerSimpleItem( - "big_bertha_hilt", - new Item.Properties().rarity(Rarity.EPIC).fireResistant() - ); - public static final DeferredItem BIG_BERTHA = ITEMS.register("big_bertha", - () -> new BigBerthaItem( - Tiers.NETHERITE, - new Item.Properties() - .stacksTo(1) - .rarity(Rarity.EPIC) - .fireResistant() - )); - - public static final DeferredHolder, EntityType> EASTER_BUNNY = ENTITY_TYPES.register("easter_bunny", - () -> EntityType.Builder.of(EasterBunnyEntity::new, MobCategory.CREATURE) - .sized(0.5F, 1.0F) - .clientTrackingRange(8) - .build("easter_bunny")); - public static final DeferredHolder, EntityType> FLYING_SQUIRREL = ENTITY_TYPES.register("flying_squirrel", - () -> EntityType.Builder.of(FlyingSquirrelEntity::new, MobCategory.CREATURE) - .sized(0.6F, 0.7F) - .clientTrackingRange(8) - .build("flying_squirrel")); - public static final DeferredHolder, EntityType> CATERPILLAR = ENTITY_TYPES.register("caterpillar", - () -> EntityType.Builder.of(CaterpillarEntity::new, MobCategory.CREATURE) - .sized(0.8775F, 0.585F) - .clientTrackingRange(8) - .build("caterpillar")); - public static final DeferredHolder, EntityType> BUTTERFLY = ENTITY_TYPES.register("butterfly", - () -> EntityType.Builder.of(ButterflyEntity::new, MobCategory.AMBIENT) - .sized(1.125F, 1.375F) - .clientTrackingRange(8) - .build("butterfly")); - public static final DeferredHolder, EntityType> REVERIE = ENTITY_TYPES.register("reverie", - () -> EntityType.Builder.of(ReverieEntity::new, MobCategory.AMBIENT) - .sized(0.7F, 0.7F) - .clientTrackingRange(8) - .build("reverie")); - public static final DeferredHolder, EntityType> BRUTALFLY = ENTITY_TYPES.register("brutalfly", - () -> EntityType.Builder.of(BrutalflyEntity::new, MobCategory.MONSTER) - .sized(2.4F, 2.1F) - .clientTrackingRange(12) - .build("brutalfly")); - public static final DeferredHolder, EntityType> APPLE_COW = ENTITY_TYPES.register("apple_cow", - () -> buildCowType(AppleCow::new, "apple_cow")); - public static final DeferredHolder, EntityType> GOLDEN_APPLE_COW = ENTITY_TYPES.register("golden_apple_cow", - () -> buildCowType(GoldenAppleCow::new, "golden_apple_cow")); - public static final DeferredHolder, EntityType> ENCHANTED_GOLDEN_APPLE_COW = ENTITY_TYPES.register("enchanted_golden_apple_cow", - () -> buildCowType(EnchantedGoldenAppleCow::new, "enchanted_golden_apple_cow")); - public static final DeferredHolder, EntityType> DR_TRAYAURUS = ENTITY_TYPES.register("dr_trayaurus", - () -> EntityType.Builder.of(DrTrayaurusEntity::new, MobCategory.MISC) - .sized(0.6F, 1.95F) - .clientTrackingRange(10) - .build("dr_trayaurus")); - public static final DeferredHolder, EntityType> CLOUD_SHARK = ENTITY_TYPES.register("cloud_shark", - () -> EntityType.Builder.of(CloudSharkEntity::new, MobCategory.MONSTER) - .sized(2.4F, 0.9F) - .clientTrackingRange(10) - .build("cloud_shark")); - public static final DeferredHolder, EntityType> KRAKEN = ENTITY_TYPES.register("kraken", - () -> EntityType.Builder.of(KrakenEntity::new, MobCategory.MONSTER) - .sized(11.4F, 39.0F) - .clientTrackingRange(12) - .build("kraken")); - public static final DeferredHolder, EntityType> KRAKEN_PART = ENTITY_TYPES.register("kraken_part", - () -> EntityType.Builder.of( - com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity::new, - MobCategory.MISC - ) - .sized(1.0F, 1.0F) - .clientTrackingRange(12) - .updateInterval(1) - .build("kraken_part")); - public static final DeferredHolder, EntityType> MISSILE_SQUID = ENTITY_TYPES.register("missile_squid", - () -> EntityType.Builder.of(MissileSquidEntity::new, MobCategory.MONSTER) - .sized(1.62F, 3.18F) - .clientTrackingRange(10) - .build("missile_squid")); - public static final DeferredHolder, EntityType> OCTOPUS_BOMB = ENTITY_TYPES.register("octopus_bomb", - () -> EntityType.Builder.of(OctopusBombEntity::new, MobCategory.MONSTER) - .sized(2.4F, 2.9F) - .clientTrackingRange(10) - .build("octopus_bomb")); - public static final DeferredHolder, EntityType> NIGHTMARE = ENTITY_TYPES.register("nightmare", - () -> EntityType.Builder.of(NightmareEntity::new, MobCategory.MONSTER) - .sized(3.2F, 3.8F) - .clientTrackingRange(12) - .build("nightmare")); - public static final DeferredHolder, EntityType> LUCID = ENTITY_TYPES.register("lucid", - () -> EntityType.Builder.of(LucidEntity::new, MobCategory.MONSTER) - .sized(2.0F, 2.0F) - .clientTrackingRange(10) - .build("lucid")); - public static final DeferredHolder, EntityType> LUCID_BOLT = ENTITY_TYPES.register("lucid_bolt", - () -> EntityType.Builder.of(LucidBoltEntity::new, MobCategory.MISC) - .sized(0.3F, 0.3F) - .clientTrackingRange(8) - .updateInterval(1) - .build("lucid_bolt")); - public static final DeferredHolder, EntityType> SCORPION = ENTITY_TYPES.register("scorpion", - () -> EntityType.Builder.of(ScorpionEntity::new, MobCategory.MONSTER) - .sized(1.5F, 1.0F) - .clientTrackingRange(8) - .build("scorpion")); - public static final DeferredHolder, EntityType> BASILISK = ENTITY_TYPES.register("basilisk", - () -> EntityType.Builder.of(BasiliskEntity::new, MobCategory.MONSTER) - .sized(3.0F, 3.5F) - .clientTrackingRange(14) - .build("basilisk")); - public static final DeferredHolder, EntityType> EMPEROR_SCORPION = ENTITY_TYPES.register("emperor_scorpion", - () -> EntityType.Builder.of(EmperorScorpionEntity::new, MobCategory.MONSTER) - .sized(6.0F, 3.0F) - .clientTrackingRange(12) - .build("emperor_scorpion")); - public static final DeferredHolder, EntityType> LUCID_PEARL_PROJECTILE = ENTITY_TYPES.register("lucid_pearl_projectile", - () -> EntityType.Builder.of(LucidEyeProjectileEntity::new, MobCategory.MISC) - .sized(0.25F, 0.25F) - .clientTrackingRange(8) - .updateInterval(1) - .build("lucid_pearl_projectile")); - public static final DeferredHolder, EntityType> HUSH_PROJECTILE = ENTITY_TYPES.register("hush_projectile", - () -> EntityType.Builder.of(HushProjectileEntity::new, MobCategory.MISC) - .sized(0.35F, 0.35F) - .clientTrackingRange(8) - .updateInterval(1) - .build("hush_projectile")); - public static final DeferredHolder, EntityType> BRUTALFLY_ORB = ENTITY_TYPES.register("brutalfly_orb", - () -> EntityType.Builder.of(BrutalflyOrbEntity::new, MobCategory.MISC) - .sized(0.75F, 0.75F) - .clientTrackingRange(10) - .updateInterval(1) - .build("brutalfly_orb")); - public static final DeferredHolder, EntityType> UPWARD_FALLING_BLOCK = ENTITY_TYPES.register("upward_falling_block", - () -> EntityType.Builder.of( - com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity::new, MobCategory.MISC) - .sized(0.98F, 0.98F) - .clientTrackingRange(10) - .updateInterval(1) - .build("upward_falling_block")); - - public static final DeferredItem EASTER_BUNNY_SPAWN_EGG = ITEMS.register("easter_bunny_spawn_egg", - () -> new DeferredSpawnEggItem(EASTER_BUNNY, 0xFFF2B2, 0xFF85B5, new Item.Properties())); - public static final DeferredItem FLYING_SQUIRREL_SPAWN_EGG = ITEMS.register("flying_squirrel_spawn_egg", - () -> new DeferredSpawnEggItem(FLYING_SQUIRREL, 0x7D6649, 0xDCC59C, new Item.Properties())); - public static final DeferredItem CATERPILLAR_SPAWN_EGG = ITEMS.register("caterpillar_spawn_egg", - () -> new DeferredSpawnEggItem(CATERPILLAR, 0xA8D96A, 0xF4E04D, new Item.Properties())); - public static final DeferredItem BUTTERFLY_SPAWN_EGG = ITEMS.register("butterfly_spawn_egg", - () -> new DeferredSpawnEggItem(BUTTERFLY, 0x7A4A1E, 0xFF7A00, new Item.Properties())); - public static final DeferredItem REVERIE_SPAWN_EGG = ITEMS.register("reverie_spawn_egg", - () -> new DeferredSpawnEggItem(REVERIE, 0xF2F2F2, 0xBFC3C7, new Item.Properties())); - public static final DeferredItem BRUTALFLY_SPAWN_EGG = ITEMS.register("brutalfly_spawn_egg", - () -> new DeferredSpawnEggItem(BRUTALFLY, 0x4A2214, 0xFF8A1D, new Item.Properties().rarity(Rarity.EPIC))); - public static final DeferredItem RED_ANT_SPAWN_EGG = ITEMS.register("red_ant_spawn_egg", - () -> new DeferredSpawnEggItem(RED_ANT, 0xA31818, 0x2B0909, new Item.Properties())); - public static final DeferredItem BROWN_ANT_SPAWN_EGG = ITEMS.register("brown_ant_spawn_egg", - () -> new DeferredSpawnEggItem(BROWN_ANT, 0x6A4320, 0x26160A, new Item.Properties())); - public static final DeferredItem RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg", - () -> new DeferredSpawnEggItem(RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties())); - public static final DeferredItem MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg", - () -> new DeferredSpawnEggItem(MOLEWORM, 0xB8B8B8, 0x8A623A, new Item.Properties())); - public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", - () -> new DeferredSpawnEggItem(MANTIS, 0xF8F8F2, 0x63B44A, new Item.Properties())); - public static final DeferredItem ALPHA_MANTIS_SPAWN_EGG = ITEMS.register("alpha_mantis_spawn_egg", - () -> new DeferredSpawnEggItem(ALPHA_MANTIS, 0x8FDD6C, 0x2F5D22, new Item.Properties())); - public static final DeferredItem MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg", - () -> new DeferredSpawnEggItem(MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg", - () -> new DeferredSpawnEggItem(TRIFFID, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem APPLE_COW_SPAWN_EGG = ITEMS.register("apple_cow_spawn_egg", - () -> new DeferredSpawnEggItem(APPLE_COW, 0xFF1A1A, 0x32FF32, new Item.Properties())); - public static final DeferredItem GOLDEN_APPLE_COW_SPAWN_EGG = ITEMS.register("golden_apple_cow_spawn_egg", - () -> new DeferredSpawnEggItem(GOLDEN_APPLE_COW, 0xFFE14A, 0x32FF32, new Item.Properties())); - public static final DeferredItem ENCHANTED_GOLDEN_APPLE_COW_SPAWN_EGG = ITEMS.register("enchanted_golden_apple_cow_spawn_egg", - () -> new DeferredSpawnEggItem(ENCHANTED_GOLDEN_APPLE_COW, 0x7040B6, 0xFFE14A, new Item.Properties())); - public static final DeferredItem DR_TRAYAURUS_SPAWN_EGG = ITEMS.register("dr_trayaurus_spawn_egg", - () -> new DeferredSpawnEggItem(DR_TRAYAURUS, 0xB7A27B, 0x4A3D29, new Item.Properties())); - public static final DeferredItem WASP_SPAWN_EGG = ITEMS.register("wasp_spawn_egg", - () -> new DeferredSpawnEggItem(WASP, 0x111111, 0xF1D800, new Item.Properties())); - public static final DeferredItem BOMBER_SPAWN_EGG = ITEMS.register("bomber_spawn_egg", - () -> new DeferredSpawnEggItem(BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties())); - public static final DeferredItem CLOUD_SHARK_SPAWN_EGG = ITEMS.register("cloud_shark_spawn_egg", - () -> new DeferredSpawnEggItem(CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); - public static final DeferredItem KRAKEN_SPAWN_EGG = ITEMS.register("kraken_spawn_egg", - () -> new DeferredSpawnEggItem(KRAKEN, 0x163C53, 0x4F8E99, new Item.Properties().rarity(Rarity.EPIC))); - public static final DeferredItem MISSILE_SQUID_SPAWN_EGG = ITEMS.register("missile_squid_spawn_egg", - () -> new DeferredSpawnEggItem(MISSILE_SQUID, 0xD88FA7, 0x8D5269, new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem OCTOPUS_BOMB_SPAWN_EGG = ITEMS.register("octopus_bomb_spawn_egg", - () -> new DeferredSpawnEggItem(OCTOPUS_BOMB, 0xC882C8, 0x5C1A7A, new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem NIGHTMARE_SPAWN_EGG = ITEMS.register("nightmare_spawn_egg", - () -> new DeferredSpawnEggItem(NIGHTMARE, 0x22121C, 0xB51B2D, new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem BED_BUG_SPAWN_EGG = ITEMS.register("bed_bug_spawn_egg", - () -> new DeferredSpawnEggItem(BED_BUG, 0x3B2218, 0x611111, new Item.Properties())); - public static final DeferredItem LUCID_SPAWN_EGG = ITEMS.register("lucid_spawn_egg", - () -> new DeferredSpawnEggItem(LUCID, 0xE53935, 0xF4D03F, new Item.Properties().rarity(Rarity.RARE))); - public static final DeferredItem SCORPION_SPAWN_EGG = ITEMS.register("scorpion_spawn_egg", - () -> new DeferredSpawnEggItem(SCORPION, 0xA8D8FF, 0xE04B5A, new Item.Properties())); - public static final DeferredItem BASILISK_SPAWN_EGG = ITEMS.register("basilisk_spawn_egg", - () -> new DeferredSpawnEggItem(BASILISK, 0x4A7C40, 0xD4A040, new Item.Properties())); - public static final DeferredItem EMPEROR_SCORPION_SPAWN_EGG = ITEMS.register("emperor_scorpion_spawn_egg", - () -> new DeferredSpawnEggItem(EMPEROR_SCORPION, 0x3A3242, 0xD8CDB4, new Item.Properties())); - public static final DeferredItem LUCID_EYE = ITEMS.register("lucid_eye", - () -> new LucidEyeItem(new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON))); - public static final DeferredItem LUCID_PEARL = ITEMS.register("lucid_pearl", - () -> new LucidPearlItem( - new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON), - LUCID_PEARL_PROJECTILE - )); - public static final DeferredItem WATER_CANNON = ITEMS.register("water_cannon", - () -> new WaterCannonItem(new Item.Properties().stacksTo(1).durability(192).rarity(Rarity.RARE))); - public static final DeferredItem PRIMORDIAL_HELMET = ITEMS.register("primordial_helmet", - () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.HELMET, - new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.HELMET.getDurability(37)))); - public static final DeferredItem PRIMORDIAL_CHESTPLATE = ITEMS.register("primordial_chestplate", - () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.CHESTPLATE, - new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.CHESTPLATE.getDurability(37)))); - public static final DeferredItem PRIMORDIAL_LEGGINGS = ITEMS.register("primordial_leggings", - () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.LEGGINGS, - new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.LEGGINGS.getDurability(37)))); - public static final DeferredItem PRIMORDIAL_BOOTS = ITEMS.register("primordial_boots", - () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.BOOTS, - new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)))); - public static final DeferredHolder, EntityType> TORETERROR = ENTITY_TYPES.register("toreterror", - () -> EntityType.Builder.of(ToreterrorEntity::new, MobCategory.MONSTER) - .sized(2.0F, 3.0F) - .clientTrackingRange(14) - .build("toreterror")); - public static final DeferredHolder, EntityType> WATER_BOMB = ENTITY_TYPES.register("water_bomb", - () -> EntityType.Builder.of(WaterBombEntity::new, MobCategory.MISC) - .sized(0.4F, 0.4F) - .clientTrackingRange(8) - .updateInterval(1) - .build("water_bomb")); - public static final DeferredItem TORETERROR_SPAWN_EGG = ITEMS.register("toreterror_spawn_egg", - () -> new DeferredSpawnEggItem(TORETERROR, 0x90EE90, 0x5C4033, new Item.Properties().rarity(Rarity.EPIC))); - - public static final DeferredHolder, EntityType> CHEEP = ENTITY_TYPES.register("cheep", - () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.CheepEntity::new, MobCategory.WATER_AMBIENT) - .sized(1.0F, 1.2F) - .clientTrackingRange(8) - .build("cheep")); - public static final DeferredItem CHEEP_SPAWN_EGG = ITEMS.register("cheep_spawn_egg", - () -> new DeferredSpawnEggItem(CHEEP, 0xFF00AA, 0x00FF44, new Item.Properties())); - - public static final DeferredHolder, EntityType> DORRIE = ENTITY_TYPES.register("dorrie", - () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.DorrieEntity::new, MobCategory.CREATURE) - .sized(1.6F, 1.4F) - .clientTrackingRange(10) - .build("dorrie")); - public static final DeferredHolder, EntityType> OURANWOOD_DEER = ENTITY_TYPES.register("ouranwood_deer", - () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity::new, MobCategory.CREATURE) - .sized(0.9F, 1.4F) - .clientTrackingRange(8) - .build("ouranwood_deer")); - public static final DeferredHolder, EntityType> GLIMMER = ENTITY_TYPES.register("glimmer", - () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity::new, MobCategory.CREATURE) - .sized(0.9F, 1.4F) - .clientTrackingRange(8) - .build("glimmer")); - public static final DeferredHolder, EntityType> ELKA = ENTITY_TYPES.register("elka", - () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.ElkaEntity::new, MobCategory.CREATURE) - .sized(2.2F, 3.5F) - .clientTrackingRange(10) - .build("elka")); - public static final DeferredItem DORRIE_SPAWN_EGG = ITEMS.register("dorrie_spawn_egg", - () -> new DeferredSpawnEggItem(DORRIE, 0x6F8CFF, 0xD2F2FF, new Item.Properties())); - public static final DeferredItem OURANWOOD_DEER_SPAWN_EGG = ITEMS.register("ouranwood_deer_spawn_egg", - () -> new DeferredSpawnEggItem(OURANWOOD_DEER, 0x8A6D4B, 0xE8D9B5, new Item.Properties())); - public static final DeferredItem GLIMMER_SPAWN_EGG = ITEMS.register("glimmer_spawn_egg", - () -> new DeferredSpawnEggItem(GLIMMER, 0x7DFFFF, 0x2AC7D0, new Item.Properties())); - public static final DeferredItem ELKA_SPAWN_EGG = ITEMS.register("elka_spawn_egg", - () -> new DeferredSpawnEggItem(ELKA, 0x6B2FA0, 0xFFFFFF, new Item.Properties())); - public static final DeferredItem SPIRIT_APPLE = ITEMS.register("spirit_apple", - () -> new com.craisinlord.antarchy.content.item.SpiritAppleItem(new Item.Properties() - .food(new FoodProperties.Builder() - .nutrition(4) - .saturationModifier(0.3F) - .build()))); - public static final DeferredItem GLIMMER_BOTTLE = ITEMS.register("glimmer_bottle", - com.craisinlord.antarchy.content.item.GlimmerBottleItem::new); - - public static final DeferredHolder ANTARCHY_TAB = CREATIVE_MODE_TABS.register("antarchy", - () -> CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) - .title(net.minecraft.network.chat.Component.translatable("itemGroup.antarchy.antarchy")) - .icon(() -> new ItemStack(GRAVITY_GUN.get())) - .displayItems((parameters, output) -> populateCreativeTab(output)) - .build()); - - private static EntityType buildCowType(EntityType.EntityFactory factory, String name) { - return EntityType.Builder.of(factory, MobCategory.CREATURE) - .sized(0.9F, 1.4F) - .clientTrackingRange(10) - .build(name); - } - - private static EntityType buildAntType(EntityType.EntityFactory factory, MobCategory category, String name) { - return EntityType.Builder.of(factory, category) - .sized(0.6375F, 0.2125F) - .clientTrackingRange(8) - .build(name); - } - - private static AttributeSupplier.Builder buildAntAttributes(double health, double speed, double attackDamage) { - return net.minecraft.world.entity.Mob.createMobAttributes() - .add(Attributes.MAX_HEALTH, health) - .add(Attributes.MOVEMENT_SPEED, speed) - .add(Attributes.ATTACK_DAMAGE, attackDamage); - } - - private static Holder mobEffectHolder(DeferredHolder effect) { - return BuiltInRegistries.MOB_EFFECT.wrapAsHolder(effect.get()); - } - - private static Holder attributeHolder(DeferredHolder attribute) { - return BuiltInRegistries.ATTRIBUTE.wrapAsHolder(attribute.get()); - } - - private static Holder potionHolder(DeferredHolder potion) { + public static Holder potionHolder(DeferredHolder potion) { return BuiltInRegistries.POTION.wrapAsHolder(potion.get()); } - private static Holder armorMaterialHolder(DeferredHolder material) { - return BuiltInRegistries.ARMOR_MATERIAL.wrapAsHolder(material.get()); - } - private static void registerEntityAttributes() { - FabricDefaultAttributeRegistry.register( - net.minecraft.world.entity.EntityType.PLAYER, - net.minecraft.world.entity.player.Player.createAttributes() - .add(attributeHolder(DOUBLE_DAMAGE_CHANCE)) - .add(attributeHolder(BLOODGLASS_MAX_HEARTS)) - .build() - ); - - AttributeSupplier rabbitAttributes = Rabbit.createAttributes().build(); - FabricDefaultAttributeRegistry.register(EASTER_BUNNY.get(), rabbitAttributes); - FabricDefaultAttributeRegistry.register(FLYING_SQUIRREL.get(), FlyingSquirrelEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(CATERPILLAR.get(), CaterpillarEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(BUTTERFLY.get(), ButterflyEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(REVERIE.get(), ReverieEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(BRUTALFLY.get(), BrutalflyEntity.createAttributes().build()); - - AttributeSupplier cowAttributes = Cow.createAttributes().build(); - FabricDefaultAttributeRegistry.register(APPLE_COW.get(), cowAttributes); - FabricDefaultAttributeRegistry.register(GOLDEN_APPLE_COW.get(), cowAttributes); - FabricDefaultAttributeRegistry.register(ENCHANTED_GOLDEN_APPLE_COW.get(), cowAttributes); - FabricDefaultAttributeRegistry.register(DR_TRAYAURUS.get(), Villager.createAttributes().build()); - FabricDefaultAttributeRegistry.register(CLOUD_SHARK.get(), CloudSharkEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(KRAKEN.get(), KrakenEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(NIGHTMARE.get(), NightmareEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(BED_BUG.get(), BedBugEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(WASP.get(), WaspEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(BOMBER.get(), BomberEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(MANTIS.get(), MantisEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(ALPHA_MANTIS.get(), AlphaMantisEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(TRIFFID.get(), TriffidEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(LUCID.get(), LucidEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(SCORPION.get(), ScorpionEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(BASILISK.get(), BasiliskEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(EMPEROR_SCORPION.get(), EmperorScorpionEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(TORETERROR.get(), ToreterrorEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(DORRIE.get(), com.craisinlord.antarchy.content.entity.DorrieEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(GLIMMER.get(), com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(ELKA.get(), com.craisinlord.antarchy.content.entity.ElkaEntity.createAttributes().build()); - - FabricDefaultAttributeRegistry.register(RED_ANT.get(), buildAntAttributes( - AntarchySettings.redAntHealth(), - AntarchySettings.redAntMovementSpeed(), - AntarchySettings.redAntAttackDamage() - ).build()); - FabricDefaultAttributeRegistry.register(BROWN_ANT.get(), buildAntAttributes( - AntarchySettings.brownAntHealth(), - AntarchySettings.brownAntMovementSpeed(), - AntarchySettings.brownAntAttackDamage() - ).build()); - FabricDefaultAttributeRegistry.register(RAINBOW_ANT.get(), buildAntAttributes( - AntarchySettings.rainbowAntHealth(), - AntarchySettings.rainbowAntMovementSpeed(), - AntarchySettings.rainbowAntAttackDamage() - ).build()); - FabricDefaultAttributeRegistry.register(MOLEWORM.get(), MolewormEntity.createAttributes().build()); - FabricDefaultAttributeRegistry.register(MOLEVORE.get(), MolevoreEntity.createAttributes().build()); - } - - private static void registerSpawnPlacements() { - SpawnPlacements.register(FLYING_SQUIRREL.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING, FlyingSquirrelEntity::canSpawn); - SpawnPlacements.register(CATERPILLAR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CaterpillarEntity::canSpawn); - SpawnPlacements.register(BUTTERFLY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ButterflyEntity::canSpawn); - SpawnPlacements.register(REVERIE.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ReverieEntity::canSpawn); - SpawnPlacements.register(BRUTALFLY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Monster::checkMonsterSpawnRules); - SpawnPlacements.register(APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); - SpawnPlacements.register(GOLDEN_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); - SpawnPlacements.register(ENCHANTED_GOLDEN_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); - SpawnPlacements.register(CLOUD_SHARK.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CloudSharkEntity::canSpawn); - SpawnPlacements.register(WASP.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, WaspEntity::canSpawn); - SpawnPlacements.register(BOMBER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BomberEntity::canSpawn); - SpawnPlacements.register(KRAKEN.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn); - SpawnPlacements.register(MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn); - SpawnPlacements.register(OCTOPUS_BOMB.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, OctopusBombEntity::canSpawn); - SpawnPlacements.register(CHEEP.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.AbstractFish::checkSurfaceWaterAnimalSpawnRules); - SpawnPlacements.register(DORRIE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); - SpawnPlacements.register(OURANWOOD_DEER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); - SpawnPlacements.register(GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); - SpawnPlacements.register(ELKA.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); - SpawnPlacements.register(NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn); - SpawnPlacements.register(MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn); - SpawnPlacements.register(MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn); - SpawnPlacements.register(ALPHA_MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AlphaMantisEntity::checkAlphaMantisSpawnRules); - SpawnPlacements.register(MOLEVORE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn); - SpawnPlacements.register(BED_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn); - SpawnPlacements.register(LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn); - SpawnPlacements.register(SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn); - SpawnPlacements.register(BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn); - SpawnPlacements.register(EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn); - SpawnPlacements.register(TORETERROR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ToreterrorEntity::canSpawn); - } - - private static void populateCreativeTab(CreativeModeTab.Output output) { - ArrayList sortedItems = new ArrayList<>(); - for (var holder : ITEMS.getEntries()) { - Item item = holder.get(); - if (item != Items.AIR && item != GLIMMER_BOTTLE.get()) { - sortedItems.add(item); - } - } - sortedItems.sort(CreativeTabOrder.COMPARATOR); - addGlimmerBottleVariants(output); - sortedItems.forEach(output::accept); - addPotionVariants(output); - } - - private static void addGlimmerBottleVariants(CreativeModeTab.Output output) { - for (com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant variant : com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.values()) { - output.accept(com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(variant)); - } - } - - private static void addPotionVariants(CreativeModeTab.Output output) { - acceptPotionFamily(output, DREAD_POTION); - acceptPotionFamily(output, LONG_DREAD); - acceptPotionFamily(output, INVERSION); - acceptPotionFamily(output, LONG_INVERSION); - acceptPotionFamily(output, STINKY_POTION); - acceptPotionFamily(output, LONG_STINKY); - acceptPotionFamily(output, PARALYSIS); - acceptPotionFamily(output, LONG_PARALYSIS); - acceptPotionFamily(output, HASTE); - acceptPotionFamily(output, STRONG_HASTE); - acceptPotionFamily(output, SHRINKING); - acceptPotionFamily(output, STRONG_SHRINKING); - acceptPotionFamily(output, EXTREME_SHRINKING); - acceptPotionFamily(output, GROWING); - acceptPotionFamily(output, STRONG_GROWING); - acceptPotionFamily(output, EXTREME_GROWING); - } - - private static void acceptPotionFamily(CreativeModeTab.Output output, DeferredHolder potion) { - Holder holder = potionHolder(potion); - output.accept(PotionContents.createItemStack(Items.POTION, holder)); - output.accept(PotionContents.createItemStack(Items.SPLASH_POTION, holder)); - output.accept(PotionContents.createItemStack(Items.LINGERING_POTION, holder)); - output.accept(PotionContents.createItemStack(Items.TIPPED_ARROW, holder)); - } - - private static int creativeTabGroup(Item item) { - return CreativeTabOrder.group(item); - } - - private static int creativeTabSubOrder(Item item) { - return CreativeTabOrder.subOrder(item); - } - - private static BlockEntityType antNestBlockEntityType() { - return ANT_NEST_BLOCK_ENTITY.get(); - } - - private static BlockEntityType waspNestBlockEntityType() { - return WASP_NEST_BLOCK_ENTITY.get(); - } - - private static BlockEntityType potentNyxiteBlockEntityType() { - return POTENT_NYXITE_BLOCK_ENTITY.get(); - } - - private static Block smallBloodCrystalBudBlock() { - return SMALL_BLOOD_CRYSTAL_BUD.get(); - } - - private static Item cloudBucketItem() { - return CLOUD_BUCKET.get(); - } - - private static Block mediumBloodCrystalBudBlock() { - return MEDIUM_BLOOD_CRYSTAL_BUD.get(); - } - - private static Block largeBloodCrystalBudBlock() { - return LARGE_BLOOD_CRYSTAL_BUD.get(); - } - - private static Block bloodCrystalCrystalBlock() { - return BLOOD_CRYSTAL_CRYSTAL.get(); - } - - // private static OuranwoodVinePlantBlock createOuranwoodVinePlant() { - // OuranwoodVinePlantBlock.bindHeadBlock(OURANWOOD_VINE_INSTANCE); - // OuranwoodVinePlantBlock block = new OuranwoodVinePlantBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WEEPING_VINES_PLANT)); - // OuranwoodVineBlock.bindBodyBlock(block); - // return block; - // } - - private static Block createDirtOre(Block copyFrom) { - return new Block(dirtOreProperties()); - } - - private static Block createDirtOre(Block copyFrom, int minExperience, int maxExperience) { - return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), dirtOreProperties()); - } - - private static BlockBehaviour.Properties dirtOreProperties() { - return BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT) - .sound(SoundType.ROOTED_DIRT) - .strength(0.65F, 0.8F) - .requiresCorrectToolForDrops(); - } - - private static BlockBehaviour.Properties nyxiteProperties() { - return BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK); - } - - private static BlockBehaviour.Properties portalProperties() { - return BlockBehaviour.Properties.of() - .strength(-1.0F) - .noCollission() - .noOcclusion() - .lightLevel(state -> 11) - .noLootTable() - .isSuffocating((state, level, pos) -> false) - .isViewBlocking((state, level, pos) -> false); - } - - private static Block createOre(Block copyFrom) { - return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); - } - - private static Block createOre(Block copyFrom, int minExperience, int maxExperience) { - return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); - } - - private static Block createStorageBlock(Block copyFrom) { - return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); - } - - private static Block createHorizontalFacingStorageBlock(Block copyFrom) { - return new SimpleHorizontalFacingBlock(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); - } - - private static final class SimpleHorizontalFacingBlock extends HorizontalDirectionalBlock { - private static final MapCodec CODEC = simpleCodec(SimpleHorizontalFacingBlock::new); - - private SimpleHorizontalFacingBlock(BlockBehaviour.Properties properties) { - super(properties); - registerDefaultState(stateDefinition.any().setValue(FACING, Direction.NORTH)); - } - - @Override - protected MapCodec codec() { - return CODEC; - } - - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(FACING); - } - - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - return defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); - } - - @Override - protected BlockState rotate(BlockState state, Rotation rotation) { - return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); - } - - @Override - protected BlockState mirror(BlockState state, Mirror mirror) { - return state.rotate(mirror.getRotation(state.getValue(FACING))); - } - } - - private static Block createRawStorageBlock(Block copyFrom) { - return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom) - .strength(3.5F, 6.0F) - .requiresCorrectToolForDrops()); - } - - private static Item diamondMinecartItem() { - return DIAMOND_MINECART_ITEM.get(); - } - - - private static DeferredHolder registerSoundEvent(String path) { - return SOUND_EVENTS.register(path, - () -> SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path))); - } private static boolean isModLoaded(String modId) { return FabricLoader.getInstance().isModLoaded(modId); } - private static Ingredient bloodCrystalRepairIngredient() { - return Ingredient.of(BuiltInRegistries.ITEM.getOptional(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blood_crystal_shard")) - .orElse(Items.AIR)); - } - private static Ingredient ultimateRepairIngredient() { - return Ingredient.of(TITANIUM_INGOT.get()); - } - private static java.util.EnumMap createUltimateArmorDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 6); - defense.put(ArmorItem.Type.LEGGINGS, 12); - defense.put(ArmorItem.Type.CHESTPLATE, 16); - defense.put(ArmorItem.Type.HELMET, 6); - defense.put(ArmorItem.Type.BODY, 16); - return defense; - } - - private static java.util.EnumMap createNightmareArmorDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 4); - defense.put(ArmorItem.Type.LEGGINGS, 9); - defense.put(ArmorItem.Type.CHESTPLATE, 11); - defense.put(ArmorItem.Type.HELMET, 4); - defense.put(ArmorItem.Type.BODY, 11); - return defense; - } - - private static java.util.EnumMap createJumpyBootsDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 3); - defense.put(ArmorItem.Type.LEGGINGS, 0); - defense.put(ArmorItem.Type.CHESTPLATE, 0); - defense.put(ArmorItem.Type.HELMET, 0); - defense.put(ArmorItem.Type.BODY, 0); - return defense; - } - - private static java.util.EnumMap createBloodCrystalArmorDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 2); - defense.put(ArmorItem.Type.LEGGINGS, 5); - defense.put(ArmorItem.Type.CHESTPLATE, 6); - defense.put(ArmorItem.Type.HELMET, 2); - defense.put(ArmorItem.Type.BODY, 6); - return defense; - } - - private static java.util.EnumMap createMogglesArmorDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 0); - defense.put(ArmorItem.Type.LEGGINGS, 0); - defense.put(ArmorItem.Type.CHESTPLATE, 0); - defense.put(ArmorItem.Type.HELMET, 2); - defense.put(ArmorItem.Type.BODY, 2); - return defense; - } - - private static java.util.EnumMap createPrimordialArmorDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 3); - defense.put(ArmorItem.Type.LEGGINGS, 6); - defense.put(ArmorItem.Type.CHESTPLATE, 8); - defense.put(ArmorItem.Type.HELMET, 3); - defense.put(ArmorItem.Type.BODY, 8); - return defense; - } - - private static java.util.EnumMap createFallenKingCrownDefense() { - java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); - defense.put(ArmorItem.Type.BOOTS, 0); - defense.put(ArmorItem.Type.LEGGINGS, 0); - defense.put(ArmorItem.Type.CHESTPLATE, 0); - defense.put(ArmorItem.Type.HELMET, 2); - defense.put(ArmorItem.Type.BODY, 2); - return defense; - } - - private static SimpleParticleType simpleParticleType() { - return new SimpleParticleType(true) { - }; - } - - private static ParticleType particleType( - java.util.function.Function, com.mojang.serialization.MapCodec> codecFactory, - java.util.function.Function, net.minecraft.network.codec.StreamCodec> streamCodecFactory - ) { - return new ParticleType<>(false) { - @Override - public com.mojang.serialization.MapCodec codec() { - return codecFactory.apply(this); - } - - @Override - public net.minecraft.network.codec.StreamCodec streamCodec() { - return streamCodecFactory.apply(this); - } - }; - } - - private static net.minecraft.world.level.material.FlowingFluid lookupFlowingFluid(String path) { + public static net.minecraft.world.level.material.FlowingFluid lookupFlowingFluid(String path) { return (net.minecraft.world.level.material.FlowingFluid) BuiltInRegistries.FLUID.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); } - private static Item lookupItem(String path) { + + + public static Item lookupItem(String path) { return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); } - private static LiquidBlock lookupLiquidBlock(String path) { + + + public static LiquidBlock lookupLiquidBlock(String path) { return (LiquidBlock) BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); } + + public static void register() { - com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity.TYPE = UPWARD_FALLING_BLOCK; + com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity.TYPE = AntarchyFabricEntities.UPWARD_FALLING_BLOCK; FabricBrewingRecipeRegistryBuilder.BUILD.register(builder -> { - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(LUCID_EYE.get()), potionHolder(INVERSION)); - builder.registerPotionRecipe(potionHolder(INVERSION), Ingredient.of(Items.REDSTONE), potionHolder(LONG_INVERSION)); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(STINK_BUG_ITEM.get()), potionHolder(STINKY_POTION)); - builder.registerPotionRecipe(potionHolder(STINKY_POTION), Ingredient.of(Items.REDSTONE), potionHolder(LONG_STINKY)); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(BASILISK_FANG.get()), potionHolder(PARALYSIS)); - builder.registerPotionRecipe(potionHolder(PARALYSIS), Ingredient.of(Items.REDSTONE), potionHolder(LONG_PARALYSIS)); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(MOLEWORM_ITEM.get()), potionHolder(HASTE)); - builder.registerPotionRecipe(potionHolder(HASTE), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(STRONG_HASTE)); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(URANIUM_NUGGET.get()), potionHolder(SHRINKING)); - builder.registerPotionRecipe(potionHolder(SHRINKING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(STRONG_SHRINKING)); - builder.registerPotionRecipe(potionHolder(STRONG_SHRINKING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(EXTREME_SHRINKING)); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(TITANIUM_NUGGET.get()), potionHolder(GROWING)); - builder.registerPotionRecipe(potionHolder(GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(STRONG_GROWING)); - builder.registerPotionRecipe(potionHolder(STRONG_GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(EXTREME_GROWING)); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(CLOUD_SHARK_FIN.get()), net.minecraft.world.item.alchemy.Potions.SLOW_FALLING); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(JUMPY_BUG_LEG.get()), Potions.LEAPING); - builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(CORNEA_EAR.get()), net.minecraft.world.item.alchemy.Potions.NIGHT_VISION); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.LUCID_EYE.get()), potionHolder(AntarchyFabricMisc.INVERSION)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.INVERSION), Ingredient.of(Items.REDSTONE), potionHolder(AntarchyFabricMisc.LONG_INVERSION)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.STINK_BUG_ITEM.get()), potionHolder(AntarchyFabricMisc.STINKY_POTION)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.STINKY_POTION), Ingredient.of(Items.REDSTONE), potionHolder(AntarchyFabricMisc.LONG_STINKY)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.BASILISK_FANG.get()), potionHolder(AntarchyFabricMisc.PARALYSIS)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.PARALYSIS), Ingredient.of(Items.REDSTONE), potionHolder(AntarchyFabricMisc.LONG_PARALYSIS)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.MOLEWORM_ITEM.get()), potionHolder(AntarchyFabricMisc.HASTE)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.HASTE), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.STRONG_HASTE)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.URANIUM_NUGGET.get()), potionHolder(AntarchyFabricMisc.SHRINKING)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.SHRINKING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.STRONG_SHRINKING)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.STRONG_SHRINKING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.EXTREME_SHRINKING)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.TITANIUM_NUGGET.get()), potionHolder(AntarchyFabricMisc.GROWING)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.STRONG_GROWING)); + builder.registerPotionRecipe(potionHolder(AntarchyFabricMisc.STRONG_GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(AntarchyFabricMisc.EXTREME_GROWING)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.CLOUD_SHARK_FIN.get()), net.minecraft.world.item.alchemy.Potions.SLOW_FALLING); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.JUMPY_BUG_LEG.get()), Potions.LEAPING); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(AntarchyFabricItems.CORNEA_EAR.get()), net.minecraft.world.item.alchemy.Potions.NIGHT_VISION); }); - SOUND_EVENTS.register(); - ARMOR_MATERIALS.register(); - FLUIDS.register(); - BLOCKS.register(); - ENTITY_TYPES.register(); - ATTRIBUTES.register(); - registerEntityAttributes(); - registerSpawnPlacements(); - BLOCK_ENTITY_TYPES.register(); - PARTICLE_TYPES.register(); - FEATURES.register(); - BIOME_SOURCES.register(); - DENSITY_FUNCTION_TYPES.register(); - ENTITY_SUB_PREDICATES.register(); - MOB_EFFECTS.register(); - POTIONS.register(); - ITEMS.register(); - MENUS.register(); - DATA_COMPONENT_TYPES.register(); - RECIPE_SERIALIZERS.register(); - CREATIVE_MODE_TABS.register(); + AntarchyFabricSounds.SOUND_EVENTS.register(); + AntarchyFabricMisc.ARMOR_MATERIALS.register(); + AntarchyFabricMisc.FLUIDS.register(); + AntarchyFabricBlocks.BLOCKS.register(); + AntarchyFabricEntities.ENTITY_TYPES.register(); + AntarchyFabricMisc.ATTRIBUTES.register(); + AntarchyFabricEntityAttributes.register(); + AntarchyFabricSpawnPlacements.register(); + AntarchyFabricBlocks.BLOCK_ENTITY_TYPES.register(); + AntarchyFabricMisc.PARTICLE_TYPES.register(); + AntarchyFabricMisc.FEATURES.register(); + AntarchyFabricMisc.BIOME_SOURCES.register(); + AntarchyFabricMisc.DENSITY_FUNCTION_TYPES.register(); + AntarchyFabricMisc.ENTITY_SUB_PREDICATES.register(); + AntarchyFabricMisc.MOB_EFFECTS.register(); + AntarchyFabricMisc.POTIONS.register(); + AntarchyFabricItems.ITEMS.register(); + AntarchyFabricMisc.MENUS.register(); + AntarchyFabricMisc.DATA_COMPONENT_TYPES.register(); + AntarchyFabricMisc.RECIPE_SERIALIZERS.register(); + AntarchyFabricCreativeModeTabs.CREATIVE_MODE_TABS.register(); - // Wire common-module accessors after all registrations are complete. PermanentPortalType.bindBlocks( - () -> MOSSY_OURANWOOD_WOOD.get(), - () -> ELYTHIA_PORTAL.get(), - () -> NYXITE.get(), - () -> THORAXIS_PORTAL.get(), - () -> NYXITE.get(), - () -> THORAXIS_PORTAL.get() + () -> AntarchyFabricBlocks.MOSSY_OURANWOOD_WOOD.get(), + () -> AntarchyFabricBlocks.ELYTHIA_PORTAL.get(), + () -> AntarchyFabricBlocks.NYXITE.get(), + () -> AntarchyFabricBlocks.THORAXIS_PORTAL.get(), + () -> AntarchyFabricBlocks.NYXITE.get(), + () -> AntarchyFabricBlocks.THORAXIS_PORTAL.get() ); AntarchySoundEvents.bind( - SQUIDZOOKA_FIRE, - SHRINK_RAY_SOUND, - GROWTH_RAY_SOUND, - SIZE_RAY_CHARGE, - ANT_AMBIENT, - ANT_IDLE, - ANT_HURT, - ANT_BITE, - ANT_GATHER, - ANT_NEST, - CLOUD_SHARK_BITE, - CLOUD_SHARK_IDLE, - CLOUD_SHARK_HURT, - CLOUD_SHARK_DEATH, - CLOUD_SHARK_FLY, - CATERPILLAR_IDLE, - CATERPILLAR_HURT, - CATERPILLAR_CRAWL, - BUTTERFLY_HURT, - BRUTALFLY_IDLE, - BRUTALFLY_DEATH, - ELYTHIA_FIREFLY_AMBIENT, - MISSILE_SQUID_AMBIENT, - MISSILE_SQUID_HURT, - MISSILE_SQUID_DEATH, - MISSILE_SQUID_ATTACK, - KRAKEN_FLYING_LOOP, - KRAKEN_FLYING_SIDEWAYS_LOOP, - KRAKEN_ATTACK, - KRAKEN_SPIN, - KRAKEN_ROAR, - KRAKEN_SUMMON, - KRAKEN_HURT, - KRAKEN_DEATH, - BASILISK_IDLE_LOOP, - BASILISK_SLITHER_LOOP, - BASILISK_BITE, - BASILISK_HISS, - BASILISK_HURT, - BASILISK_DEATH, - THORAXIS_NIGHTMARE_WASTES_AMBIENT, - THORAXIS_NIGHTMARE_WASTES_ADDITIONS, - THORAXIS_NIGHTMARE_WASTES_MOOD, - THORAXIS_DREAM_DUNES_AMBIENT, - THORAXIS_DREAM_DUNES_ADDITIONS, - THORAXIS_DREAM_DUNES_MOOD, - THORAXIS_LUCID_POOLS_AMBIENT, - THORAXIS_LUCID_POOLS_ADDITIONS, - THORAXIS_LUCID_POOLS_MOOD, - LUCID_AMBIENT, - LUCID_FLYING, - LUCID_ATTACK, - LUCID_BOLT_SOUND, - LUCID_HURT, - LUCID_DEATH, - REVERIE_IDLE, - REVERIE_HURT, - REVERIE_WORRY, - REVERIE_SAVE, - REVERIE_JOIN_PLAYER, - REVERIE_ALERT, - FLYING_SQUIRREL_IDLE, - FLYING_SQUIRREL_BEG, - FLYING_SQUIRREL_NUT, - FLYING_SQUIRREL_GLIDE_LOOP, - FLYING_SQUIRREL_HURT, - FLYING_SQUIRREL_DEATH, - NIGHTMARE_IDLE, - NIGHTMARE_HURT, - NIGHTMARE_ROAR, - NIGHTMARE_DEATH, - NIGHTMARE_BITE, - NIGHTMARE_FLAP, - TRIFFID_ATTACK, - TRIFFID_GRAB, - TRIFFID_HURT, - TRIFFID_DEATH, - TRIFFID_HISS, - TRIFFID_GROWL, - MANTIS_AMBIENT, - MANTIS_HURT, - MANTIS_ATTACK, - MANTIS_FLY_LOOP, - GRAVITY_GUN_PICKUP, - GRAVITY_GUN_DROP, - GRAVITY_GUN_HOLD_LOOP, - GRAVITY_GUN_LAUNCH, - GRAVITY_GUN_DRYFIRE, - BED_BUG_AMBIENT, - BED_BUG_HURT, - BED_BUG_ATTACK, - WASP_IDLE, - WASP_HURT, - WASP_ATTACK, - WASP_DEATH, - SCORPION_AMBIENT, - SCORPION_HURT, - SCORPION_ATTACK, - EMPEROR_SCORPION_AMBIENT, - EMPEROR_SCORPION_HURT, - EMPEROR_SCORPION_ATTACK, - EMPEROR_SCORPION_ROAR, - MOLEWORM_AMBIENT, - MOLEWORM_HURT, - MOLEWORM_ATTACK, - MOLEWORM_DIG, - MOLEVORE_AMBIENT, - MOLEVORE_HURT, - MOLEVORE_ATTACK, - MOLEVORE_DIG, - BOMBER_WALK, - BOMBER_KNOCK, - BOMBER_EXPLODE, - TORETERROR_IDLE, - TORETERROR_HURT, - TORETERROR_DEATH, - TORETERROR_BOMBER_FIRE, - TORETERROR_SPIN, - TORETERROR_RICOCHET, - WATER_CANNON_FIRE, - TORETERROR_JUMP_UP, - TORETERROR_JUMP_LAND, - STINKY_FLY_SOUND, - ANT_IDLE, - ANT_HURT, - ANT_BITE, - ANT_IDLE, - ANT_HURT, - ANT_BITE, - ANT_IDLE, - DUCT_TAPE_USE + AntarchyFabricSounds.SQUIDZOOKA_FIRE, + AntarchyFabricSounds.SHRINK_RAY_SOUND, + AntarchyFabricSounds.GROWTH_RAY_SOUND, + AntarchyFabricSounds.SIZE_RAY_CHARGE, + AntarchyFabricSounds.ANT_AMBIENT, + AntarchyFabricSounds.ANT_IDLE, + AntarchyFabricSounds.ANT_HURT, + AntarchyFabricSounds.ANT_BITE, + AntarchyFabricSounds.ANT_GATHER, + AntarchyFabricSounds.ANT_NEST, + AntarchyFabricSounds.CLOUD_SHARK_BITE, + AntarchyFabricSounds.CLOUD_SHARK_IDLE, + AntarchyFabricSounds.CLOUD_SHARK_HURT, + AntarchyFabricSounds.CLOUD_SHARK_DEATH, + AntarchyFabricSounds.CLOUD_SHARK_FLY, + AntarchyFabricSounds.CATERPILLAR_IDLE, + AntarchyFabricSounds.CATERPILLAR_HURT, + AntarchyFabricSounds.CATERPILLAR_CRAWL, + AntarchyFabricSounds.BUTTERFLY_HURT, + AntarchyFabricSounds.BRUTALFLY_IDLE, + AntarchyFabricSounds.BRUTALFLY_DEATH, + AntarchyFabricSounds.ELYTHIA_FIREFLY_AMBIENT, + AntarchyFabricSounds.MISSILE_SQUID_AMBIENT, + AntarchyFabricSounds.MISSILE_SQUID_HURT, + AntarchyFabricSounds.MISSILE_SQUID_DEATH, + AntarchyFabricSounds.MISSILE_SQUID_ATTACK, + AntarchyFabricSounds.KRAKEN_FLYING_LOOP, + AntarchyFabricSounds.KRAKEN_FLYING_SIDEWAYS_LOOP, + AntarchyFabricSounds.KRAKEN_ATTACK, + AntarchyFabricSounds.KRAKEN_SPIN, + AntarchyFabricSounds.KRAKEN_ROAR, + AntarchyFabricSounds.KRAKEN_SUMMON, + AntarchyFabricSounds.KRAKEN_HURT, + AntarchyFabricSounds.KRAKEN_DEATH, + AntarchyFabricSounds.BASILISK_IDLE_LOOP, + AntarchyFabricSounds.BASILISK_SLITHER_LOOP, + AntarchyFabricSounds.BASILISK_BITE, + AntarchyFabricSounds.BASILISK_HISS, + AntarchyFabricSounds.BASILISK_HURT, + AntarchyFabricSounds.BASILISK_DEATH, + AntarchyFabricSounds.THORAXIS_NIGHTMARE_WASTES_AMBIENT, + AntarchyFabricSounds.THORAXIS_NIGHTMARE_WASTES_ADDITIONS, + AntarchyFabricSounds.THORAXIS_NIGHTMARE_WASTES_MOOD, + AntarchyFabricSounds.THORAXIS_DREAM_DUNES_AMBIENT, + AntarchyFabricSounds.THORAXIS_DREAM_DUNES_ADDITIONS, + AntarchyFabricSounds.THORAXIS_DREAM_DUNES_MOOD, + AntarchyFabricSounds.THORAXIS_LUCID_POOLS_AMBIENT, + AntarchyFabricSounds.THORAXIS_LUCID_POOLS_ADDITIONS, + AntarchyFabricSounds.THORAXIS_LUCID_POOLS_MOOD, + AntarchyFabricSounds.LUCID_AMBIENT, + AntarchyFabricSounds.LUCID_FLYING, + AntarchyFabricSounds.LUCID_ATTACK, + AntarchyFabricSounds.LUCID_BOLT_SOUND, + AntarchyFabricSounds.LUCID_HURT, + AntarchyFabricSounds.LUCID_DEATH, + AntarchyFabricSounds.REVERIE_IDLE, + AntarchyFabricSounds.REVERIE_HURT, + AntarchyFabricSounds.REVERIE_WORRY, + AntarchyFabricSounds.REVERIE_SAVE, + AntarchyFabricSounds.REVERIE_JOIN_PLAYER, + AntarchyFabricSounds.REVERIE_ALERT, + AntarchyFabricSounds.FLYING_SQUIRREL_IDLE, + AntarchyFabricSounds.FLYING_SQUIRREL_BEG, + AntarchyFabricSounds.FLYING_SQUIRREL_NUT, + AntarchyFabricSounds.FLYING_SQUIRREL_GLIDE_LOOP, + AntarchyFabricSounds.FLYING_SQUIRREL_HURT, + AntarchyFabricSounds.FLYING_SQUIRREL_DEATH, + AntarchyFabricSounds.NIGHTMARE_IDLE, + AntarchyFabricSounds.NIGHTMARE_HURT, + AntarchyFabricSounds.NIGHTMARE_ROAR, + AntarchyFabricSounds.NIGHTMARE_DEATH, + AntarchyFabricSounds.NIGHTMARE_BITE, + AntarchyFabricSounds.NIGHTMARE_FLAP, + AntarchyFabricSounds.TRIFFID_ATTACK, + AntarchyFabricSounds.TRIFFID_GRAB, + AntarchyFabricSounds.TRIFFID_HURT, + AntarchyFabricSounds.TRIFFID_DEATH, + AntarchyFabricSounds.TRIFFID_HISS, + AntarchyFabricSounds.TRIFFID_GROWL, + AntarchyFabricSounds.MANTIS_AMBIENT, + AntarchyFabricSounds.MANTIS_HURT, + AntarchyFabricSounds.MANTIS_ATTACK, + AntarchyFabricSounds.MANTIS_FLY_LOOP, + AntarchyFabricSounds.GRAVITY_GUN_PICKUP, + AntarchyFabricSounds.GRAVITY_GUN_DROP, + AntarchyFabricSounds.GRAVITY_GUN_HOLD_LOOP, + AntarchyFabricSounds.GRAVITY_GUN_LAUNCH, + AntarchyFabricSounds.GRAVITY_GUN_DRYFIRE, + AntarchyFabricSounds.BED_BUG_AMBIENT, + AntarchyFabricSounds.BED_BUG_HURT, + AntarchyFabricSounds.BED_BUG_ATTACK, + AntarchyFabricSounds.WASP_IDLE, + AntarchyFabricSounds.WASP_HURT, + AntarchyFabricSounds.WASP_ATTACK, + AntarchyFabricSounds.WASP_DEATH, + AntarchyFabricSounds.SCORPION_AMBIENT, + AntarchyFabricSounds.SCORPION_HURT, + AntarchyFabricSounds.SCORPION_ATTACK, + AntarchyFabricSounds.EMPEROR_SCORPION_AMBIENT, + AntarchyFabricSounds.EMPEROR_SCORPION_HURT, + AntarchyFabricSounds.EMPEROR_SCORPION_ATTACK, + AntarchyFabricSounds.EMPEROR_SCORPION_ROAR, + AntarchyFabricSounds.MOLEWORM_AMBIENT, + AntarchyFabricSounds.MOLEWORM_HURT, + AntarchyFabricSounds.MOLEWORM_ATTACK, + AntarchyFabricSounds.MOLEWORM_DIG, + AntarchyFabricSounds.MOLEVORE_AMBIENT, + AntarchyFabricSounds.MOLEVORE_HURT, + AntarchyFabricSounds.MOLEVORE_ATTACK, + AntarchyFabricSounds.MOLEVORE_DIG, + AntarchyFabricSounds.BOMBER_WALK, + AntarchyFabricSounds.BOMBER_KNOCK, + AntarchyFabricSounds.BOMBER_EXPLODE, + AntarchyFabricSounds.TORETERROR_IDLE, + AntarchyFabricSounds.TORETERROR_HURT, + AntarchyFabricSounds.TORETERROR_DEATH, + AntarchyFabricSounds.TORETERROR_BOMBER_FIRE, + AntarchyFabricSounds.TORETERROR_SPIN, + AntarchyFabricSounds.TORETERROR_RICOCHET, + AntarchyFabricSounds.WATER_CANNON_FIRE, + AntarchyFabricSounds.TORETERROR_JUMP_UP, + AntarchyFabricSounds.TORETERROR_JUMP_LAND, + AntarchyFabricSounds.STINKY_FLY_SOUND, + AntarchyFabricSounds.ANT_IDLE, + AntarchyFabricSounds.ANT_HURT, + AntarchyFabricSounds.ANT_BITE, + AntarchyFabricSounds.ANT_IDLE, + AntarchyFabricSounds.ANT_HURT, + AntarchyFabricSounds.ANT_BITE, + AntarchyFabricSounds.ANT_IDLE, + AntarchyFabricSounds.DUCT_TAPE_USE ); - AntarchyObjects.setOctopusBomb(OCTOPUS_BOMB); - AntarchyObjects.setOuranwoodDeer(OURANWOOD_DEER); - AntarchyObjects.setGlimmer(GLIMMER); - AntarchyObjects.setSpiritApple(() -> SPIRIT_APPLE.get()); - AntarchyObjects.setElka(ELKA); - AntarchyObjects.setPeach(() -> PEACH.get()); - AntarchyObjects.setCorn(() -> CORN.get()); - AntarchyObjects.setCornSeeds(() -> CORN_SEEDS.get()); - AntarchyObjects.setWildCorn(() -> WILD_CORN.get()); - AntarchyObjects.setCookedCorndog(() -> COOKED_CORNDOG.get()); - AntarchyObjects.setGlimmerBottle(() -> GLIMMER_BOTTLE.get()); - AntarchyObjects.setGlimmerVariantComponent(() -> GLIMMER_VARIANT.get()); - AntarchyObjects.setAmericanComponent(() -> AMERICAN.get()); - AntarchyObjects.setLumen(() -> LUMEN.get()); - AntarchyObjects.setFlowingLumen(() -> FLOWING_LUMEN.get()); - AntarchyObjects.setLumenBucket(() -> LUMEN_BUCKET.get()); - AntarchyObjects.setLumenBlock(() -> LUMEN_BLOCK.get()); - AntarchyObjects.setLumenFroglight(() -> LUMEN_FROGLIGHT.get()); - AntarchyObjects.setPeachLeavesParticle(() -> PEACH_LEAVES_PARTICLE.get()); - AntarchyObjects.setDorrieInventoryMenu(DORRIE_INVENTORY_MENU); + AntarchyObjects.setOctopusBomb(AntarchyFabricEntities.OCTOPUS_BOMB); + AntarchyObjects.setOuranwoodDeer(AntarchyFabricEntities.OURANWOOD_DEER); + AntarchyObjects.setGlimmer(AntarchyFabricEntities.GLIMMER); + AntarchyObjects.setSpiritApple(() -> AntarchyFabricItems.SPIRIT_APPLE.get()); + AntarchyObjects.setElka(AntarchyFabricEntities.ELKA); + AntarchyObjects.setPeach(() -> AntarchyFabricItems.PEACH.get()); + AntarchyObjects.setCorn(() -> AntarchyFabricItems.CORN.get()); + AntarchyObjects.setCornSeeds(() -> AntarchyFabricItems.CORN_SEEDS.get()); + AntarchyObjects.setWildCorn(() -> AntarchyFabricBlocks.WILD_CORN.get()); + AntarchyObjects.setCookedCorndog(() -> AntarchyFabricItems.COOKED_CORNDOG.get()); + AntarchyObjects.setGlimmerBottle(() -> AntarchyFabricItems.GLIMMER_BOTTLE.get()); + AntarchyObjects.setGlimmerVariantComponent(() -> AntarchyFabricMisc.GLIMMER_VARIANT.get()); + AntarchyObjects.setAmericanComponent(() -> AntarchyFabricMisc.AMERICAN.get()); + AntarchyObjects.setLumen(() -> AntarchyFabricMisc.LUMEN.get()); + AntarchyObjects.setFlowingLumen(() -> AntarchyFabricMisc.FLOWING_LUMEN.get()); + AntarchyObjects.setLumenBucket(() -> AntarchyFabricItems.LUMEN_BUCKET.get()); + AntarchyObjects.setLumenBlock(() -> AntarchyFabricBlocks.LUMEN_BLOCK.get()); + AntarchyObjects.setLumenFroglight(() -> AntarchyFabricBlocks.LUMEN_FROGLIGHT.get()); + AntarchyObjects.setPeachLeavesParticle(() -> AntarchyFabricMisc.PEACH_LEAVES_PARTICLE.get()); + // Dorrie is not part of this update yet. + // AntarchyObjects.setDorrieInventoryMenu(AntarchyFabricMisc.DORRIE_INVENTORY_MENU); AntarchyObjects.bind( - EASTER_BUNNY, - FLYING_SQUIRREL, - KRAKEN, - MISSILE_SQUID, - MOLEWORM, - MANTIS, - BED_BUG, - WASP, - BOMBER, - SCORPION, - CATERPILLAR, - BUTTERFLY, - REVERIE, - TRIFFID, - BRUTALFLY, - BRUTALFLY_ORB, - HUSH_PROJECTILE, - TORETERROR, - WATER_BOMB, - (java.util.function.Supplier) BOMBER, - (java.util.function.Supplier) BOMBER, - (java.util.function.Supplier) BED_BUG, - CHEEP, - DORRIE, - () -> DUPLICATOR_LOG.get(), - () -> DUPLICATOR_SAPLING.get(), - () -> DUCT_TAPE.get(), - () -> INFESTED_ROOTED_DIRT.get(), - () -> INFESTED_COARSE_DIRT.get(), - () -> NYXITE.get(), - () -> SHELLSTONE.get(), - () -> POLISHED_SHELLSTONE.get(), - () -> SHELLSTONE_BRICKS.get(), - () -> CHISELED_SHELLSTONE.get(), - () -> MOSSY_SHELLSTONE_BRICKS.get(), - () -> CRACKED_SHELLSTONE_BRICKS.get(), - () -> MOSSY_SHELLSTONE_BRICK_STAIRS.get(), - () -> MOSSY_SHELLSTONE_BRICK_SLAB.get(), - () -> MOSSY_SHELLSTONE_BRICK_WALL.get(), - () -> SHELLSTONE_STAIRS.get(), - () -> SHELLSTONE_SLAB.get(), - () -> SHELLSTONE_WALL.get(), - () -> POLISHED_SHELLSTONE_STAIRS.get(), - () -> POLISHED_SHELLSTONE_SLAB.get(), - () -> POLISHED_SHELLSTONE_WALL.get(), - () -> SHELLSTONE_BRICK_STAIRS.get(), - () -> SHELLSTONE_BRICK_SLAB.get(), - () -> SHELLSTONE_BRICK_WALL.get(), - () -> CLOUD_BLOCK.get(), - () -> TRIFFID_GOO_BLOCK.get(), - () -> PALE_NYXITE.get(), - () -> NYXITE_SPIKE.get(), - () -> NYXITE.get(), - () -> NYXITE_SPIKE.get(), - () -> POTENT_NYXITE.get(), - () -> ANTIMETAL.get(), - () -> POLISHED_ANTIMETAL.get(), - () -> BUDDING_BLOOD_CRYSTAL.get(), - () -> SMALL_BLOOD_CRYSTAL_BUD.get(), - () -> MEDIUM_BLOOD_CRYSTAL_BUD.get(), - () -> LARGE_BLOOD_CRYSTAL_BUD.get(), - () -> BLOOD_CRYSTAL_CRYSTAL.get(), - () -> OURANWOOD_ACORN.get(), - KRAKEN_TOOTH, - () -> MOGGLES.get(), - () -> REVERIE_BOTTLE.get(), - () -> STINK_BUG_ITEM.get(), - () -> mobEffectHolder(DREAD), - () -> mobEffectHolder(PARALYZED), - () -> mobEffectHolder(INVERTED), - () -> mobEffectHolder(STINKY), - () -> OURANWOOD_ACORN_BLOCK.get(), - () -> MOSSY_OURANWOOD_LOG.get(), - () -> MOSSY_OURANWOOD_WOOD.get(), - () -> UMBRAL_MOSS_BLOCK.get(), - () -> UMBRAL_MOSS_CARPET.get(), - () -> BLUSH_MOSS_BLOCK.get(), - () -> BLUSH_MOSS_CARPET.get(), - () -> ORANGE_MILKWEED.get(), - () -> PINK_MILKWEED.get(), - () -> BED_BUG_EGG.get(), - () -> BED_BUG_EGG.get(), - () -> BED_BUG_EGG.get(), - () -> WASP_NEST.get(), - () -> HUSHWEED.get(), - () -> OURANWOOD_SQUIRREL_NEST.get(), - () -> BRUTALFLY_COCOON_SPAWNER.get(), - () -> ANT_NEST_BLOCK_ENTITY.get(), - () -> DREAM_CAMPFIRE_BLOCK_ENTITY.get(), - () -> WASP_NEST_BLOCK_ENTITY.get(), - () -> HUSHWEED_BLOCK_ENTITY.get(), - () -> STINKY_GAS.get(), - () -> STINKY_FLY.get(), - () -> PEACH_LEAVES_PARTICLE.get(), - () -> attributeHolder(DOUBLE_DAMAGE_CHANCE), - () -> attributeHolder(BLOODGLASS_MAX_HEARTS), - () -> mobEffectHolder(BLOODGLASS_WARD) + AntarchyFabricEntities.EASTER_BUNNY, + AntarchyFabricEntities.FLYING_SQUIRREL, + AntarchyFabricEntities.KRAKEN, + AntarchyFabricEntities.MISSILE_SQUID, + AntarchyFabricEntities.MOLEWORM, + AntarchyFabricEntities.MANTIS, + AntarchyFabricEntities.BED_BUG, + AntarchyFabricEntities.WASP, + AntarchyFabricEntities.BOMBER, + AntarchyFabricEntities.SCORPION, + AntarchyFabricEntities.CATERPILLAR, + AntarchyFabricEntities.BUTTERFLY, + AntarchyFabricEntities.REVERIE, + AntarchyFabricEntities.TRIFFID, + AntarchyFabricEntities.BRUTALFLY, + AntarchyFabricEntities.BRUTALFLY_ORB, + AntarchyFabricEntities.HUSH_PROJECTILE, + AntarchyFabricEntities.TORETERROR, + AntarchyFabricEntities.WATER_BOMB, + (java.util.function.Supplier) AntarchyFabricEntities.BOMBER, + (java.util.function.Supplier) AntarchyFabricEntities.BOMBER, + (java.util.function.Supplier) AntarchyFabricEntities.BED_BUG, + AntarchyFabricEntities.CHEEP, + () -> { throw new IllegalStateException("Dorrie is not part of this update yet."); }, + () -> AntarchyFabricBlocks.DUPLICATOR_LOG.get(), + () -> AntarchyFabricBlocks.DUPLICATOR_SAPLING.get(), + () -> AntarchyFabricBlocks.DUCT_TAPE.get(), + () -> AntarchyFabricBlocks.INFESTED_ROOTED_DIRT.get(), + () -> AntarchyFabricBlocks.INFESTED_COARSE_DIRT.get(), + () -> AntarchyFabricBlocks.NYXITE.get(), + () -> AntarchyFabricBlocks.SHELLSTONE.get(), + () -> AntarchyFabricBlocks.POLISHED_SHELLSTONE.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_BRICKS.get(), + () -> AntarchyFabricBlocks.CHISELED_SHELLSTONE.get(), + () -> AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICKS.get(), + () -> AntarchyFabricBlocks.CRACKED_SHELLSTONE_BRICKS.get(), + () -> AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICK_STAIRS.get(), + () -> AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICK_SLAB.get(), + () -> AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICK_WALL.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_STAIRS.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_SLAB.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_WALL.get(), + () -> AntarchyFabricBlocks.POLISHED_SHELLSTONE_STAIRS.get(), + () -> AntarchyFabricBlocks.POLISHED_SHELLSTONE_SLAB.get(), + () -> AntarchyFabricBlocks.POLISHED_SHELLSTONE_WALL.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_BRICK_STAIRS.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_BRICK_SLAB.get(), + () -> AntarchyFabricBlocks.SHELLSTONE_BRICK_WALL.get(), + () -> AntarchyFabricBlocks.CLOUD_BLOCK.get(), + () -> AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), + () -> AntarchyFabricBlocks.PALE_NYXITE.get(), + () -> AntarchyFabricBlocks.NYXITE_SPIKE.get(), + () -> AntarchyFabricBlocks.NYXITE.get(), + () -> AntarchyFabricBlocks.NYXITE_SPIKE.get(), + () -> AntarchyFabricBlocks.POTENT_NYXITE.get(), + () -> AntarchyFabricBlocks.ANTIMETAL.get(), + () -> AntarchyFabricBlocks.POLISHED_ANTIMETAL.get(), + () -> AntarchyFabricBlocks.BUDDING_BLOOD_CRYSTAL.get(), + () -> AntarchyFabricBlocks.SMALL_BLOOD_CRYSTAL_BUD.get(), + () -> AntarchyFabricBlocks.MEDIUM_BLOOD_CRYSTAL_BUD.get(), + () -> AntarchyFabricBlocks.LARGE_BLOOD_CRYSTAL_BUD.get(), + () -> AntarchyFabricBlocks.BLOOD_CRYSTAL_CRYSTAL.get(), + () -> AntarchyFabricItems.OURANWOOD_ACORN.get(), + AntarchyFabricItems.KRAKEN_TOOTH, + () -> AntarchyFabricItems.MOGGLES.get(), + () -> AntarchyFabricItems.REVERIE_BOTTLE.get(), + () -> AntarchyFabricItems.STINK_BUG_ITEM.get(), + () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.DREAD), + () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.PARALYZED), + () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED), + () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.STINKY), + () -> AntarchyFabricBlocks.OURANWOOD_ACORN_BLOCK.get(), + () -> AntarchyFabricBlocks.MOSSY_OURANWOOD_LOG.get(), + () -> AntarchyFabricBlocks.MOSSY_OURANWOOD_WOOD.get(), + () -> AntarchyFabricBlocks.UMBRAL_MOSS_BLOCK.get(), + () -> AntarchyFabricBlocks.UMBRAL_MOSS_CARPET.get(), + () -> AntarchyFabricBlocks.BLUSH_MOSS_BLOCK.get(), + () -> AntarchyFabricBlocks.BLUSH_MOSS_CARPET.get(), + () -> AntarchyFabricBlocks.ORANGE_MILKWEED.get(), + () -> AntarchyFabricBlocks.PINK_MILKWEED.get(), + () -> AntarchyFabricBlocks.BED_BUG_EGG.get(), + () -> AntarchyFabricBlocks.BED_BUG_EGG.get(), + () -> AntarchyFabricBlocks.BED_BUG_EGG.get(), + () -> AntarchyFabricBlocks.WASP_NEST.get(), + () -> AntarchyFabricBlocks.HUSHWEED.get(), + () -> AntarchyFabricBlocks.OURANWOOD_SQUIRREL_NEST.get(), + () -> AntarchyFabricBlocks.BRUTALFLY_COCOON_SPAWNER.get(), + () -> AntarchyFabricBlocks.ANT_NEST_BLOCK_ENTITY.get(), + () -> AntarchyFabricBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), + () -> AntarchyFabricBlocks.WASP_NEST_BLOCK_ENTITY.get(), + () -> AntarchyFabricBlocks.HUSHWEED_BLOCK_ENTITY.get(), + () -> AntarchyFabricMisc.STINKY_GAS.get(), + () -> AntarchyFabricMisc.STINKY_FLY.get(), + () -> AntarchyFabricMisc.PEACH_LEAVES_PARTICLE.get(), + () -> AntarchyFabricMisc.attributeHolder(AntarchyFabricMisc.DOUBLE_DAMAGE_CHANCE), + () -> AntarchyFabricMisc.attributeHolder(AntarchyFabricMisc.BLOODGLASS_MAX_HEARTS), + () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.BLOODGLASS_WARD) ); - LucidEyeProjectileEntity.defaultItemSupplier = () -> LUCID_PEARL.get(); - LucidEntity.invertedEffectSupplier = () -> mobEffectHolder(INVERTED); - LucidEntity.boltEntityTypeSupplier = () -> LUCID_BOLT.get(); - LucidBoltEntity.invertedEffectSupplier = () -> mobEffectHolder(INVERTED); - LucidEyeProjectileEntity.invertedEffectSupplier = () -> mobEffectHolder(INVERTED); + LucidEyeProjectileEntity.defaultItemSupplier = () -> AntarchyFabricItems.LUCID_PEARL.get(); + LucidEntity.invertedEffectSupplier = () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED); + LucidEntity.boltEntityTypeSupplier = () -> AntarchyFabricEntities.LUCID_BOLT.get(); + LucidBoltEntity.invertedEffectSupplier = () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED); + LucidEyeProjectileEntity.invertedEffectSupplier = () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED); ScorpionWhipTetherSync.setSink(AntarchyFabricNetworking::syncScorpionWhipTether); HerculesBeetleImpactShakeSync.setSink((player, ticks) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, new com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload(ticks))); @@ -2776,6 +393,8 @@ public final class AntarchyFabricContent { } } + + private static boolean isSupportedInfinityLoaded() { if (!FabricInfinityCompat.isAvailableOnClasspath()) { return false; @@ -2800,8 +419,5 @@ public final class AntarchyFabricContent { } return false; } + } - - - - diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index 5f9c2e54..cbb7aa93 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -1,4 +1,6 @@ package com.craisinlord.antarchy.fabric; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; import com.craisinlord.antarchy.content.entity.ReverieEntity; import com.craisinlord.antarchy.config.AntarchySettings; @@ -48,20 +50,20 @@ public final class AntarchyFabricEvents { CaterpillarCommand.register(dispatcher); }); - DispenserBlock.registerBehavior(AntarchyFabricContent.SQUIDZOOKA.get(), new SquidzookaDispenseBehavior()); - DispenserBlock.registerBehavior(AntarchyFabricContent.WATER_CANNON.get(), new WaterCannonDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyFabricItems.SQUIDZOOKA.get(), new SquidzookaDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyFabricItems.WATER_CANNON.get(), new WaterCannonDispenseBehavior()); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.BLUSH_MOSS_BLOCK.get().asItem(), 0.65f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.BLUSH_MOSS_CARPET.get().asItem(), 0.3f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.HUSHWEED.get().asItem(), 0.65f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CORNEA_EAR.get(), 0.65f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.PEACH_LEAVES.get().asItem(), 0.3f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.PEACH_SAPLING_ITEM.get(), 0.3f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CORN.get(), 0.65f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CORN_SEEDS.get(), 0.3f); - ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.PEACH.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.BLUSH_MOSS_BLOCK.get().asItem(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.BLUSH_MOSS_CARPET.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.HUSHWEED.get().asItem(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORNEA_EAR.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.PEACH_LEAVES.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.PEACH_SAPLING_ITEM.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORN.get(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORN_SEEDS.get(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.PEACH.get(), 0.65f); ServerLivingEntityEvents.AFTER_DEATH.register((entity, damageSource) -> { if (entity instanceof ServerPlayer sp) { diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/BloodglassManager.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/BloodglassManager.java index 2fb4c920..3da80911 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/BloodglassManager.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/BloodglassManager.java @@ -129,10 +129,15 @@ public final class BloodglassManager { int cap = Math.max(0, AntarchySettings.bloodCrystalHardMaxShields() - access.antarchy$getArmorShieldsActive() - access.antarchy$getArmorShieldLostCount()); - access.antarchy$setAppleShieldsActive(Math.min(amplifier + 1, cap)); - access.antarchy$setAppleShieldLostCount(0); - access.antarchy$setAppleRechargeTimer(0); - if (player instanceof ServerPlayer sp) syncBloodglass(sp); + int targetCap = Math.min(amplifier + 1, cap); + int currentCap = access.antarchy$getAppleShieldsActive() + access.antarchy$getAppleShieldLostCount(); + // Only grant newly-added capacity (e.g. first application, or a higher amplifier). + // A mere duration refresh of an already-active ward must not reset shields that are + // already lost, nor restart their recharge timer. + if (targetCap > currentCap) { + access.antarchy$setAppleShieldsActive(access.antarchy$getAppleShieldsActive() + (targetCap - currentCap)); + if (player instanceof ServerPlayer sp) syncBloodglass(sp); + } } public static void handleWardRemoved(Player player) { diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java index c8aba29c..860a545b 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java @@ -1,4 +1,8 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; @@ -52,7 +56,7 @@ public final class AntarchyFabricClientBootstrap { public static void register() { AntarchyKeyBindings.register(); - MenuScreens.register(AntarchyFabricContent.DORRIE_INVENTORY_MENU.get(), com.craisinlord.antarchy.content.client.screen.DorrieInventoryScreen::new); + MenuScreens.register(AntarchyFabricMisc.DORRIE_INVENTORY_MENU.get(), com.craisinlord.antarchy.content.client.screen.DorrieInventoryScreen::new); registerRenderers(); registerEntityLayers(); registerColors(); @@ -65,60 +69,61 @@ public final class AntarchyFabricClientBootstrap { private static void registerRenderers() { BlockEntityRendererRegistry.register( - (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricContent.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), + (net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), (BlockEntityRendererProvider) CampfireRenderer::new ); - EntityRendererRegistry.register(AntarchyFabricContent.EASTER_BUNNY.get(), EasterBunnyRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.FLYING_SQUIRREL.get(), FlyingSquirrelRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.CATERPILLAR.get(), CaterpillarRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BUTTERFLY.get(), ButterflyRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.REVERIE.get(), ReverieRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BRUTALFLY.get(), BrutalflyRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.RED_ANT.get(), AntRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BROWN_ANT.get(), AntRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.RAINBOW_ANT.get(), AntRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.MOLEWORM.get(), MolewormRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.MANTIS.get(), MantisRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.ALPHA_MANTIS.get(), AlphaMantisRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.MOLEVORE.get(), MolevoreRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.TRIFFID.get(), TriffidRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/ouranwood.png"), false)); - EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_CHEST_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/ouranwood.png"), true)); - EntityRendererRegistry.register(AntarchyFabricContent.PEACH_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/peach.png"), false)); - EntityRendererRegistry.register(AntarchyFabricContent.PEACH_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/peach.png"), true)); - EntityRendererRegistry.register(AntarchyFabricContent.APPLE_COW.get(), AppleCowRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.GOLDEN_APPLE_COW.get(), AppleCowRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.ENCHANTED_GOLDEN_APPLE_COW.get(), AppleCowRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.DIAMOND_MINECART.get(), DiamondMinecartRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dr_trayaurus.png"))); - EntityRendererRegistry.register(AntarchyFabricContent.CLOUD_SHARK.get(), CloudSharkRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.KRAKEN.get(), KrakenRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.KRAKEN_PART.get(), MultipartPartRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.MISSILE_SQUID.get(), MissileSquidRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.OCTOPUS_BOMB.get(), OctopusBombRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.NIGHTMARE.get(), NightmareRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.LUCID.get(), LucidRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BED_BUG.get(), BedBugRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.WASP.get(), WaspRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BOMBER.get(), BomberRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BASILISK.get(), BasiliskRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.SHRINK_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.LUCID_BOLT.get(), LucidBoltRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.HUSH_PROJECTILE.get(), HushProjectileRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.BRUTALFLY_ORB.get(), BrutalflyOrbRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.UPWARD_FALLING_BLOCK.get(), UpwardFallingBlockRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.SCORPION.get(), ScorpionRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.EMPEROR_SCORPION.get(), EmperorScorpionRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.TORETERROR.get(), ToreterrorRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.WATER_BOMB.get(), WaterBombRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.CHEEP.get(), com.craisinlord.antarchy.content.client.renderer.CheepRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.DORRIE.get(), com.craisinlord.antarchy.content.client.renderer.DorrieRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.GLIMMER.get(), com.craisinlord.antarchy.content.client.renderer.glimmer.GlimmerRenderer::new); - EntityRendererRegistry.register(AntarchyFabricContent.ELKA.get(), com.craisinlord.antarchy.content.client.renderer.ElkaRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.EASTER_BUNNY.get(), EasterBunnyRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.FLYING_SQUIRREL.get(), FlyingSquirrelRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.CATERPILLAR.get(), CaterpillarRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BUTTERFLY.get(), ButterflyRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.REVERIE.get(), ReverieRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BRUTALFLY.get(), BrutalflyRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.RED_ANT.get(), AntRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BROWN_ANT.get(), AntRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.RAINBOW_ANT.get(), AntRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.MOLEWORM.get(), MolewormRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.MANTIS.get(), MantisRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.ALPHA_MANTIS.get(), AlphaMantisRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.MOLEVORE.get(), MolevoreRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.TRIFFID.get(), TriffidRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/ouranwood.png"), false)); + EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_CHEST_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/ouranwood.png"), true)); + EntityRendererRegistry.register(AntarchyFabricEntities.PEACH_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/peach.png"), false)); + EntityRendererRegistry.register(AntarchyFabricEntities.PEACH_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/peach.png"), true)); + EntityRendererRegistry.register(AntarchyFabricEntities.APPLE_COW.get(), AppleCowRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.GOLDEN_APPLE_COW.get(), AppleCowRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW.get(), AppleCowRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.DIAMOND_MINECART.get(), DiamondMinecartRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dr_trayaurus.png"))); + EntityRendererRegistry.register(AntarchyFabricEntities.CLOUD_SHARK.get(), CloudSharkRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN.get(), KrakenRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN_PART.get(), MultipartPartRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), MissileSquidRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), OctopusBombRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE.get(), NightmareRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.LUCID.get(), LucidRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BED_BUG.get(), BedBugRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.WASP.get(), WaspRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BOMBER.get(), BomberRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BASILISK.get(), BasiliskRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.SHRINK_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.LUCID_BOLT.get(), LucidBoltRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.HUSH_PROJECTILE.get(), HushProjectileRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.BRUTALFLY_ORB.get(), BrutalflyOrbRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.UPWARD_FALLING_BLOCK.get(), UpwardFallingBlockRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.SCORPION.get(), ScorpionRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.EMPEROR_SCORPION.get(), EmperorScorpionRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.TORETERROR.get(), ToreterrorRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.WATER_BOMB.get(), WaterBombRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.CHEEP.get(), com.craisinlord.antarchy.content.client.renderer.CheepRenderer::new); + // Dorrie is not part of this update yet. + // EntityRendererRegistry.register(AntarchyFabricEntities.DORRIE.get(), com.craisinlord.antarchy.content.client.renderer.DorrieRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.GLIMMER.get(), com.craisinlord.antarchy.content.client.renderer.glimmer.GlimmerRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.ELKA.get(), com.craisinlord.antarchy.content.client.renderer.ElkaRenderer::new); EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.boatLayer(), BoatModel::createBodyModel); EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel); @@ -131,24 +136,26 @@ public final class AntarchyFabricClientBootstrap { (state, level, pos, tintIndex) -> level != null && pos != null ? BiomeColors.getAverageFoliageColor(level, pos) : FoliageColor.getDefaultColor(), - AntarchyFabricContent.OURANWOOD_LEAVES.get() + AntarchyFabricBlocks.OURANWOOD_LEAVES.get() ); - ColorProviderRegistry.BLOCK.register((state, level, pos, tintIndex) -> 0xFF4A0000, AntarchyFabricContent.ANTIWATER_BLOCK.get()); + ColorProviderRegistry.BLOCK.register((state, level, pos, tintIndex) -> 0xFF4A0000, AntarchyFabricBlocks.ANTIWATER_BLOCK.get()); ColorProviderRegistry.BLOCK.register( (state, level, pos, tintIndex) -> level != null && pos != null ? BiomeColors.getAverageGrassColor(level, pos) - : net.minecraft.world.level.GrassColor.getDefaultColor() + : net.minecraft.world.level.GrassColor.getDefaultColor(), + AntarchyFabricBlocks.SPIDER_LILY.get() ); - ColorProviderRegistry.ITEM.register((stack, tintIndex) -> FoliageColor.getDefaultColor(), AntarchyFabricContent.OURANWOOD_LEAVES_ITEM.get()); + ColorProviderRegistry.ITEM.register((stack, tintIndex) -> FoliageColor.getDefaultColor(), AntarchyFabricItems.OURANWOOD_LEAVES_ITEM.get()); ColorProviderRegistry.ITEM.register( - (stack, tintIndex) -> net.minecraft.world.level.GrassColor.getDefaultColor() + (stack, tintIndex) -> tintIndex == 0 ? net.minecraft.world.level.GrassColor.getDefaultColor() : -1, + AntarchyFabricItems.SPIDER_LILY_ITEM.get() ); } private static void registerFluids() { FluidRenderHandlerRegistry.INSTANCE.register( - AntarchyFabricContent.BILE.get(), - AntarchyFabricContent.FLOWING_BILE.get(), + AntarchyFabricMisc.BILE.get(), + AntarchyFabricMisc.FLOWING_BILE.get(), new SimpleFluidRenderHandler( ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_still"), ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_flowing"), @@ -158,8 +165,8 @@ public final class AntarchyFabricClientBootstrap { ); FluidRenderHandlerRegistry.INSTANCE.register( - AntarchyFabricContent.ICHOR.get(), - AntarchyFabricContent.FLOWING_ICHOR.get(), + AntarchyFabricMisc.ICHOR.get(), + AntarchyFabricMisc.FLOWING_ICHOR.get(), new SimpleFluidRenderHandler( ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_still"), ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_flow"), @@ -169,8 +176,8 @@ public final class AntarchyFabricClientBootstrap { ); FluidRenderHandlerRegistry.INSTANCE.register( - AntarchyFabricContent.ANTIWATER.get(), - AntarchyFabricContent.FLOWING_ANTIWATER.get(), + AntarchyFabricMisc.ANTIWATER.get(), + AntarchyFabricMisc.FLOWING_ANTIWATER.get(), new SimpleFluidRenderHandler( ResourceLocation.withDefaultNamespace("block/water_still"), ResourceLocation.withDefaultNamespace("block/water_flow"), @@ -196,8 +203,8 @@ public final class AntarchyFabricClientBootstrap { ); FluidRenderHandlerRegistry.INSTANCE.register( - AntarchyFabricContent.LUMEN.get(), - AntarchyFabricContent.FLOWING_LUMEN.get(), + AntarchyFabricMisc.LUMEN.get(), + AntarchyFabricMisc.FLOWING_LUMEN.get(), new SimpleFluidRenderHandler( ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_still"), ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_flow"), @@ -209,95 +216,97 @@ public final class AntarchyFabricClientBootstrap { private static void registerParticles() { ParticleFactoryRegistry registry = ParticleFactoryRegistry.getInstance(); - registry.register(AntarchyFabricContent.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); - registry.register(AntarchyFabricContent.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); - registry.register(AntarchyFabricContent.STINKY_FLY.get(), FireflyParticle.Provider::new); - registry.register(AntarchyFabricContent.PEACH_LEAVES_PARTICLE.get(), PeachLeavesParticle.Provider::new); - registry.register(AntarchyFabricContent.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); - registry.register(AntarchyFabricContent.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); - registry.register(AntarchyFabricContent.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); - registry.register(AntarchyFabricContent.HYPNOTIC_GAS_CLOUD_DOWN.get(), new HypnoticGasCloudParticle.Provider(true)); - registry.register(AntarchyFabricContent.INVERTED_GEYSER_BASE.get(), InvertedGeyserBaseParticle.Provider::new); - registry.register(AntarchyFabricContent.INVERTED_GEYSER_PLUME.get(), InvertedGeyserPlumeParticle.Provider::new); - registry.register(AntarchyFabricContent.INVERTED_GEYSER_POOF.get(), InvertedGeyserBaseParticle.Provider::new); - registry.register(AntarchyFabricContent.INVERTED_GEYSER_ERUPTION.get(), new InvertedGeyserEruptionParticle.Provider()); - registry.register(AntarchyFabricContent.FIREFLY.get(), FireflyParticle.Provider::new); - registry.register(AntarchyFabricContent.ORANGE_ASH.get(), OrangeAshParticle.Provider::new); + registry.register(AntarchyFabricMisc.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); + registry.register(AntarchyFabricMisc.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); + registry.register(AntarchyFabricMisc.STINKY_FLY.get(), FireflyParticle.Provider::new); + registry.register(AntarchyFabricMisc.PEACH_LEAVES_PARTICLE.get(), PeachLeavesParticle.Provider::new); + registry.register(AntarchyFabricMisc.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); + registry.register(AntarchyFabricMisc.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); + registry.register(AntarchyFabricMisc.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); + registry.register(AntarchyFabricMisc.HYPNOTIC_GAS_CLOUD_DOWN.get(), new HypnoticGasCloudParticle.Provider(true)); + registry.register(AntarchyFabricMisc.INVERTED_GEYSER_BASE.get(), InvertedGeyserBaseParticle.Provider::new); + registry.register(AntarchyFabricMisc.INVERTED_GEYSER_PLUME.get(), InvertedGeyserPlumeParticle.Provider::new); + registry.register(AntarchyFabricMisc.INVERTED_GEYSER_POOF.get(), InvertedGeyserBaseParticle.Provider::new); + registry.register(AntarchyFabricMisc.INVERTED_GEYSER_ERUPTION.get(), new InvertedGeyserEruptionParticle.Provider()); + registry.register(AntarchyFabricMisc.FIREFLY.get(), FireflyParticle.Provider::new); + registry.register(AntarchyFabricMisc.ORANGE_ASH.get(), OrangeAshParticle.Provider::new); } private static void registerRenderLayers() { - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_LEAVES.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_DOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_TRAPDOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_LEAVES.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_HANGING_PEACH.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_DOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_TRAPDOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_SAPLING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.OURANWOOD_LEAVES.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.OURANWOOD_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.OURANWOOD_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_LEAVES.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_HANGING_PEACH.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_SAPLING.get(), RenderType.cutout()); // BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_VINE.get(), RenderType.cutout()); // BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_VINE_PLANT.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DUPLICATOR_SAPLING.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ORANGE_MILKWEED.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PINK_MILKWEED.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.HUSHWEED.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CORNEA_STALK.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CORN_CROP.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.WILD_CORN.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.FALLEN_KING_CROWN_BLOCK.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.NYXITE_SPIKE.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.LARGE_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.BLOOD_CRYSTAL_CRYSTAL.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_TORCH.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_WALL_TORCH.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_LANTERN.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_CAMPFIRE.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_FIRE.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_CEILING_FIRE.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ANTIWATER_BLOCK.get(), RenderType.translucent()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.LUMEN_BLOCK.get(), RenderType.translucent()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ELYTHIA_PORTAL.get(), RenderType.translucent()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.THORAXIS_PORTAL.get(), RenderType.translucent()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.URANIUM_DOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TITANIUM_DOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.URANIUM_TRAPDOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TITANIUM_TRAPDOOR.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.URANIUM_BARS.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TITANIUM_BARS.get(), RenderType.cutout()); - BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CLOUD_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PINK_MILKWEED.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CAMELLIA.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIDER_LILY.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.HUSHWEED.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CORNEA_STALK.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CORN_CROP.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.WILD_CORN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.FALLEN_KING_CROWN_BLOCK.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LARGE_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.BLOOD_CRYSTAL_CRYSTAL.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_TORCH.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_WALL_TORCH.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_LANTERN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_CAMPFIRE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_FIRE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_CEILING_FIRE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ANTIWATER_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LUMEN_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ELYTHIA_PORTAL.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.THORAXIS_PORTAL.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_BARS.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_BARS.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CLOUD_BLOCK.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putFluids( RenderType.translucent(), - AntarchyFabricContent.BILE.get(), - AntarchyFabricContent.FLOWING_BILE.get(), - AntarchyFabricContent.ICHOR.get(), - AntarchyFabricContent.FLOWING_ICHOR.get(), - AntarchyFabricContent.LUMEN.get(), - AntarchyFabricContent.FLOWING_LUMEN.get(), - AntarchyFabricContent.ANTIWATER.get(), - AntarchyFabricContent.FLOWING_ANTIWATER.get() + AntarchyFabricMisc.BILE.get(), + AntarchyFabricMisc.FLOWING_BILE.get(), + AntarchyFabricMisc.ICHOR.get(), + AntarchyFabricMisc.FLOWING_ICHOR.get(), + AntarchyFabricMisc.LUMEN.get(), + AntarchyFabricMisc.FLOWING_LUMEN.get(), + AntarchyFabricMisc.ANTIWATER.get(), + AntarchyFabricMisc.FLOWING_ANTIWATER.get() ); } private static void registerItemProperties() { ItemProperties.register( - AntarchyFabricContent.ULTIMATE_BOW.get(), + AntarchyFabricItems.ULTIMATE_BOW.get(), ResourceLocation.withDefaultNamespace("pull"), (stack, level, entity, seed) -> entity == null || entity.getUseItem() != stack ? 0.0F : (stack.getItem().getUseDuration(stack, entity) - entity.getUseItemRemainingTicks()) / 20.0F ); ItemProperties.register( - AntarchyFabricContent.ULTIMATE_BOW.get(), + AntarchyFabricItems.ULTIMATE_BOW.get(), ResourceLocation.withDefaultNamespace("pulling"), (stack, level, entity, seed) -> entity != null && entity.isUsingItem() && entity.getUseItem() == stack ? 1.0F : 0.0F ); ItemProperties.register( - AntarchyFabricContent.ULTIMATE_CROSSBOW.get(), + AntarchyFabricItems.ULTIMATE_CROSSBOW.get(), ResourceLocation.withDefaultNamespace("pull"), (stack, level, entity, seed) -> { if (entity == null || CrossbowItem.isCharged(stack) || entity.getUseItem() != stack) { @@ -308,17 +317,17 @@ public final class AntarchyFabricClientBootstrap { } ); ItemProperties.register( - AntarchyFabricContent.ULTIMATE_CROSSBOW.get(), + AntarchyFabricItems.ULTIMATE_CROSSBOW.get(), ResourceLocation.withDefaultNamespace("pulling"), (stack, level, entity, seed) -> entity != null && entity.isUsingItem() && entity.getUseItem() == stack && !CrossbowItem.isCharged(stack) ? 1.0F : 0.0F ); ItemProperties.register( - AntarchyFabricContent.ULTIMATE_CROSSBOW.get(), + AntarchyFabricItems.ULTIMATE_CROSSBOW.get(), ResourceLocation.withDefaultNamespace("charged"), (stack, level, entity, seed) -> CrossbowItem.isCharged(stack) ? 1.0F : 0.0F ); ItemProperties.register( - AntarchyFabricContent.ULTIMATE_CROSSBOW.get(), + AntarchyFabricItems.ULTIMATE_CROSSBOW.get(), ResourceLocation.withDefaultNamespace("firework"), (stack, level, entity, seed) -> CrossbowItem.isCharged(stack) && ChargedProjectiles.of(stack).contains(Items.FIREWORK_ROCKET) ? 1.0F : 0.0F ); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadClientHandler.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadClientHandler.java index 4df0d8ee..a472dbc0 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadClientHandler.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadClientHandler.java @@ -1,4 +1,6 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricSounds; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; @@ -24,7 +26,7 @@ import java.util.Random; public final class DreadClientHandler { private static final Holder DREAD_EFFECT = - BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricContent.DREAD.get()); + BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricMisc.DREAD.get()); private static final int FOOTSTEP_MIN_INTERVAL_TICKS = 10; private static final int FOOTSTEP_MAX_INTERVAL_TICKS = 22; private static final int APPARITION_MIN_DURATION_TICKS = 16; @@ -285,7 +287,7 @@ public final class DreadClientHandler { player.getX(), player.getY() + 1.0D, player.getZ(), - AntarchyFabricContent.NIGHTMARE_BITE.get(), + AntarchyFabricSounds.NIGHTMARE_BITE.get(), SoundSource.HOSTILE, 0.4F, 0.88F + RANDOM.nextFloat() * 0.12F, diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadHudRenderer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadHudRenderer.java index 8feae4d6..f88b07a0 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadHudRenderer.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DreadHudRenderer.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import net.minecraft.client.Minecraft; @@ -10,7 +11,7 @@ import net.minecraft.world.effect.MobEffect; import net.minecraft.world.entity.player.Player; public final class DreadHudRenderer { - private static final Holder DREAD_EFFECT = BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricContent.DREAD.get()); + private static final Holder DREAD_EFFECT = BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricMisc.DREAD.get()); private DreadHudRenderer() { } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java index b436f125..ca92f8d8 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; @@ -56,7 +57,7 @@ public final class ElythiaFireflyManager { if (!level.getBlockState(candidate).isAir()) continue; level.addParticle( - AntarchyFabricContent.FIREFLY.get(), + AntarchyFabricMisc.FIREFLY.get(), candidate.getX() + level.random.nextDouble(), candidate.getY() + level.random.nextDouble(), candidate.getZ() + level.random.nextDouble(), diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownArmorStandLayer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownArmorStandLayer.java index 4d36e49e..e55147a6 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownArmorStandLayer.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownArmorStandLayer.java @@ -1,4 +1,6 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import com.mojang.blaze3d.vertex.PoseStack; @@ -24,7 +26,7 @@ public final class FallenKingCrownArmorStandLayer extends RenderLayer PARALYZED_EFFECT = - BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricContent.PARALYZED.get()); + BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricMisc.PARALYZED.get()); private static final int PARTICLE_INTERVAL = 3; diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ParalyzedHudRenderer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ParalyzedHudRenderer.java index d5365870..8858fc4e 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ParalyzedHudRenderer.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ParalyzedHudRenderer.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import net.minecraft.client.Minecraft; @@ -11,7 +12,7 @@ import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.player.Player; public final class ParalyzedHudRenderer { - private static final Holder PARALYZED_EFFECT = BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricContent.PARALYZED.get()); + private static final Holder PARALYZED_EFFECT = BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricMisc.PARALYZED.get()); private ParalyzedHudRenderer() { } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/TriffidGooHudRenderer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/TriffidGooHudRenderer.java index b222ffd1..c2c59d05 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/TriffidGooHudRenderer.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/TriffidGooHudRenderer.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import net.minecraft.client.Minecraft; @@ -23,7 +24,7 @@ public final class TriffidGooHudRenderer { fadeProgress = Math.max(0f, fadeProgress - FADE_SPEED); if (fadeProgress <= 0f) return; } else { - Block goo = AntarchyFabricContent.TRIFFID_GOO_BLOCK.get(); + Block goo = AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(); BlockPos feet = player.blockPosition(); boolean inGoo = player.level().getBlockState(feet).is(goo) || player.level().getBlockState(feet.above()).is(goo); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/content/fluid/AntiwaterFluid.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/content/fluid/AntiwaterFluid.java index 565d95e8..9b32a774 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/content/fluid/AntiwaterFluid.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/content/fluid/AntiwaterFluid.java @@ -1,4 +1,7 @@ package com.craisinlord.antarchy.fabric.content.fluid; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import java.util.HashSet; @@ -28,22 +31,22 @@ public abstract class AntiwaterFluid extends FlowingFluid { @Override public Fluid getFlowing() { - return AntarchyFabricContent.FLOWING_ANTIWATER.get(); + return AntarchyFabricMisc.FLOWING_ANTIWATER.get(); } @Override public Fluid getSource() { - return AntarchyFabricContent.ANTIWATER.get(); + return AntarchyFabricMisc.ANTIWATER.get(); } @Override public Item getBucket() { - return AntarchyFabricContent.ANTIWATER_BUCKET.get(); + return AntarchyFabricItems.ANTIWATER_BUCKET.get(); } @Override public boolean isSame(Fluid fluid) { - return fluid == AntarchyFabricContent.ANTIWATER.get() || fluid == AntarchyFabricContent.FLOWING_ANTIWATER.get(); + return fluid == AntarchyFabricMisc.ANTIWATER.get() || fluid == AntarchyFabricMisc.FLOWING_ANTIWATER.get(); } @Override @@ -78,7 +81,7 @@ public abstract class AntiwaterFluid extends FlowingFluid { @Override protected BlockState createLegacyBlock(FluidState state) { - return AntarchyFabricContent.ANTIWATER_BLOCK.get() + return AntarchyFabricBlocks.ANTIWATER_BLOCK.get() .defaultBlockState() .setValue(LiquidBlock.LEVEL, getLegacyLevel(state)); } @@ -341,8 +344,8 @@ public abstract class AntiwaterFluid extends FlowingFluid { if (aboveFluid.is(FluidTags.WATER)) { BlockState result = state.isSource() - ? AntarchyFabricContent.ANTIMETAL.get().defaultBlockState() - : AntarchyFabricContent.NYXITE.get().defaultBlockState(); + ? AntarchyFabricBlocks.ANTIMETAL.get().defaultBlockState() + : AntarchyFabricBlocks.NYXITE.get().defaultBlockState(); level.setBlockAndUpdate(pos, result); level.levelEvent(1501, pos, 0); return; diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java index c96f551f..3d8405cb 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.mixin; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import net.minecraft.core.BlockPos; @@ -69,7 +70,7 @@ public abstract class AntimetalScaffoldingMixin { } private boolean antarchy$isAntimetalScaffolding() { - return ((ScaffoldingBlock) (Object) this).asItem() == AntarchyFabricContent.ANTIMETAL_SCAFFOLDING.get().asItem(); + return ((ScaffoldingBlock) (Object) this).asItem() == AntarchyFabricBlocks.ANTIMETAL_SCAFFOLDING.get().asItem(); } private int antarchy$getDistance(BlockGetter level, BlockPos pos) { diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java index 5968bf07..e39b6ea7 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.mixin.client; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import net.minecraft.client.multiplayer.ClientPacketListener; @@ -12,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public abstract class MultipartClientSpawnMixin { @Inject(method = "handleAddEntity", at = @At("HEAD"), cancellable = true) private void antarchy$skipTrackedMultipartPlaceholders(ClientboundAddEntityPacket packet, CallbackInfo ci) { - if (packet.getType() == AntarchyFabricContent.KRAKEN_PART.get()) { + if (packet.getType() == AntarchyFabricEntities.KRAKEN_PART.get()) { ci.cancel(); } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java index 81ff9284..a560c639 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java @@ -1,4 +1,5 @@ package com.craisinlord.antarchy.fabric.network; +import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; @@ -61,7 +62,7 @@ public final class AntarchyFabricNetworking { } public static MultipartPartEntity createMultipartPart(MultipartEntityOwner owner, int partIndex, com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition spec) { - return new MultipartPartEntity(AntarchyFabricContent.KRAKEN_PART.get(), ((Entity) owner).level()) + return new MultipartPartEntity(AntarchyFabricEntities.KRAKEN_PART.get(), ((Entity) owner).level()) .antarchy$configure(owner, partIndex, spec); } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java new file mode 100644 index 00000000..9670f0b2 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java @@ -0,0 +1,1133 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.fabric.AntarchyWoodTypes; +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +import com.craisinlord.antarchy.content.worldgen.overworld.CornPatchFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricBlocks { + + public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(Antarchy.MODID); + + + public static final DeferredRegister> BLOCK_ENTITY_TYPES = DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, Antarchy.MODID); + + + public static final DeferredBlock DUPLICATOR_LOG = BLOCKS.register("duplicator_log", + () -> new DuplicatorLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_LOG).randomTicks())); + + + public static final DeferredBlock OURANWOOD_LOG = BLOCKS.register("ouranwood_log", + () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + + + public static final DeferredBlock OURANWOOD_WOOD = BLOCKS.register("ouranwood_wood", + () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + + + public static final DeferredBlock MOSSY_OURANWOOD_LOG = BLOCKS.register("mossy_ouranwood_log", + () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + + + public static final DeferredBlock MOSSY_OURANWOOD_WOOD = BLOCKS.register("mossy_ouranwood_wood", + () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + + + public static final DeferredBlock STRIPPED_OURANWOOD_LOG = BLOCKS.register("stripped_ouranwood_log", + () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); + + + public static final DeferredBlock STRIPPED_OURANWOOD_WOOD = BLOCKS.register("stripped_ouranwood_wood", + () -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); + + + public static final DeferredBlock OURANWOOD_PLANKS = BLOCKS.register("ouranwood_planks", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); + + + public static final DeferredBlock OURANWOOD_STAIRS = BLOCKS.register("ouranwood_stairs", + () -> new net.minecraft.world.level.block.StairBlock(OURANWOOD_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); + + + public static final DeferredBlock OURANWOOD_SLAB = BLOCKS.register("ouranwood_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); + + + public static final DeferredBlock OURANWOOD_FENCE = BLOCKS.register("ouranwood_fence", + () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); + + + public static final DeferredBlock OURANWOOD_FENCE_GATE = BLOCKS.register("ouranwood_fence_gate", + () -> new net.minecraft.world.level.block.FenceGateBlock(net.minecraft.world.level.block.state.properties.WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE))); + + + public static final DeferredBlock OURANWOOD_DOOR = BLOCKS.register("ouranwood_door", + () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR))); + + + public static final DeferredBlock OURANWOOD_TRAPDOOR = BLOCKS.register("ouranwood_trapdoor", + () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR))); + + + public static final DeferredBlock OURANWOOD_PRESSURE_PLATE = BLOCKS.register("ouranwood_pressure_plate", + () -> new net.minecraft.world.level.block.PressurePlateBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE))); + + + public static final DeferredBlock OURANWOOD_BUTTON = BLOCKS.register("ouranwood_button", + () -> new net.minecraft.world.level.block.ButtonBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON))); + + + public static final DeferredBlock OURANWOOD_LEAVES = BLOCKS.register("ouranwood_leaves", + () -> new OuranwoodLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); + + + public static final DeferredBlock OURANWOOD_ACORN_BLOCK = BLOCKS.register("ouranwood_acorn", + () -> new OuranwoodAcornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + + + public static final DeferredBlock ORANGE_MILKWEED = BLOCKS.register("orange_milkweed", + () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); + + + public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", + () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); + + + public static final DeferredBlock CAMELLIA = BLOCKS.register("camellia", + () -> new com.craisinlord.antarchy.content.block.CamelliaBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); + + + public static final DeferredBlock SPIDER_LILY = BLOCKS.register("spider_lily", + () -> new com.craisinlord.antarchy.content.block.SpiderLilyBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POPPY))); + + + public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", + () -> new net.minecraft.world.level.block.StandingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + + + public static final DeferredBlock OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign", + () -> new net.minecraft.world.level.block.WallSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + + + public static final DeferredBlock OURANWOOD_HANGING_SIGN = BLOCKS.register("ouranwood_hanging_sign", + () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + + + public static final DeferredBlock OURANWOOD_WALL_HANGING_SIGN = BLOCKS.register("ouranwood_wall_hanging_sign", + () -> new net.minecraft.world.level.block.WallHangingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + + + public static final DeferredBlock PEACH_LOG = BLOCKS.register("peach_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + + + public static final DeferredBlock PEACH_WOOD = BLOCKS.register("peach_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + + + public static final DeferredBlock STRIPPED_PEACH_LOG = BLOCKS.register("stripped_peach_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); + + + public static final DeferredBlock STRIPPED_PEACH_WOOD = BLOCKS.register("stripped_peach_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); + + + public static final DeferredBlock PEACH_PLANKS = BLOCKS.register("peach_planks", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); + + + public static final DeferredBlock PEACH_STAIRS = BLOCKS.register("peach_stairs", + () -> new net.minecraft.world.level.block.StairBlock(PEACH_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); + + + public static final DeferredBlock PEACH_SLAB = BLOCKS.register("peach_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); + + + public static final DeferredBlock PEACH_FENCE = BLOCKS.register("peach_fence", + () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); + + + public static final DeferredBlock PEACH_FENCE_GATE = BLOCKS.register("peach_fence_gate", + () -> new net.minecraft.world.level.block.FenceGateBlock(net.minecraft.world.level.block.state.properties.WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE))); + + + public static final DeferredBlock PEACH_DOOR = BLOCKS.register("peach_door", + () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR))); + + + public static final DeferredBlock PEACH_TRAPDOOR = BLOCKS.register("peach_trapdoor", + () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR))); + + + public static final DeferredBlock PEACH_PRESSURE_PLATE = BLOCKS.register("peach_pressure_plate", + () -> new net.minecraft.world.level.block.PressurePlateBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE))); + + + public static final DeferredBlock PEACH_BUTTON = BLOCKS.register("peach_button", + () -> new net.minecraft.world.level.block.ButtonBlock(net.minecraft.world.level.block.state.properties.BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON))); + + + public static final DeferredBlock PEACH_LEAVES = BLOCKS.register("peach_leaves", + () -> new com.craisinlord.antarchy.content.block.PeachLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); + + + public static final DeferredBlock PEACH_HANGING_PEACH = BLOCKS.register("hanging_peach", + () -> new com.craisinlord.antarchy.content.block.HangingPeachBlock(BlockBehaviour.Properties.of().noOcclusion().instabreak())); + + + public static final DeferredBlock PEACH_SAPLING = BLOCKS.register("peach_sapling", + () -> new com.craisinlord.antarchy.content.block.PeachSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + + + public static final DeferredBlock PEACH_SIGN = BLOCKS.register("peach_sign", + () -> new net.minecraft.world.level.block.StandingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + + + public static final DeferredBlock PEACH_WALL_SIGN = BLOCKS.register("peach_wall_sign", + () -> new net.minecraft.world.level.block.WallSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + + + public static final DeferredBlock PEACH_HANGING_SIGN = BLOCKS.register("peach_hanging_sign", + () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + + + public static final DeferredBlock PEACH_WALL_HANGING_SIGN = BLOCKS.register("peach_wall_hanging_sign", + () -> new net.minecraft.world.level.block.WallHangingSignBlock(AntarchyWoodTypes.PEACH, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + + + public static final DeferredBlock DUPLICATOR_SAPLING = BLOCKS.register("duplicator_sapling", + () -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + + + public static final DeferredBlock DUCT_TAPE = BLOCKS.register("duct_tape", + () -> new DuctTapeBlock(BlockBehaviour.Properties.of() + .strength(0.2F) + .sound(SoundType.WOOL) + .noOcclusion() + .replaceable())); + + + public static final DeferredBlock INFESTED_ROOTED_DIRT = BLOCKS.register("infested_rooted_dirt", + () -> new InfestedRootedDirtBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.ROOTED_DIRT).randomTicks())); + + + public static final DeferredBlock INFESTED_COARSE_DIRT = BLOCKS.register("infested_coarse_dirt", + () -> new InfestedCoarseDirtBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).randomTicks())); + + + public static final DeferredBlock NYXITE = BLOCKS.register("nyxite", + () -> new Block(nyxiteProperties())); + + + public static final DeferredBlock POLISHED_NYXITE = BLOCKS.register("polished_nyxite", + () -> new Block(nyxiteProperties())); + + + public static final DeferredBlock CHISELED_NYXITE = BLOCKS.register("chiseled_nyxite", + () -> new Block(nyxiteProperties())); + + + public static final DeferredBlock NYXITE_BRICKS = BLOCKS.register("nyxite_bricks", + () -> new Block(nyxiteProperties())); + + + public static final DeferredBlock NYXITE_STAIRS = BLOCKS.register("nyxite_stairs", + () -> new net.minecraft.world.level.block.StairBlock(NYXITE.get().defaultBlockState(), nyxiteProperties())); + + + public static final DeferredBlock NYXITE_SLAB = BLOCKS.register("nyxite_slab", + () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); + + + public static final DeferredBlock NYXITE_WALL = BLOCKS.register("nyxite_wall", + () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); + + + public static final DeferredBlock POLISHED_NYXITE_STAIRS = BLOCKS.register("polished_nyxite_stairs", + () -> new net.minecraft.world.level.block.StairBlock(POLISHED_NYXITE.get().defaultBlockState(), nyxiteProperties())); + + + public static final DeferredBlock POLISHED_NYXITE_SLAB = BLOCKS.register("polished_nyxite_slab", + () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); + + + public static final DeferredBlock POLISHED_NYXITE_WALL = BLOCKS.register("polished_nyxite_wall", + () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); + + + public static final DeferredBlock NYXITE_BRICK_STAIRS = BLOCKS.register("nyxite_brick_stairs", + () -> new net.minecraft.world.level.block.StairBlock(NYXITE_BRICKS.get().defaultBlockState(), nyxiteProperties())); + + + public static final DeferredBlock NYXITE_BRICK_SLAB = BLOCKS.register("nyxite_brick_slab", + () -> new net.minecraft.world.level.block.SlabBlock(nyxiteProperties())); + + + public static final DeferredBlock NYXITE_BRICK_WALL = BLOCKS.register("nyxite_brick_wall", + () -> new net.minecraft.world.level.block.WallBlock(nyxiteProperties())); + + + public static final DeferredBlock SHELLSTONE = BLOCKS.register("shellstone", + () -> new Block(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock POLISHED_SHELLSTONE = BLOCKS.register("polished_shellstone", + () -> new Block(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_BRICKS = BLOCKS.register("shellstone_bricks", + () -> new Block(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock CHISELED_SHELLSTONE = BLOCKS.register("chiseled_shellstone", + () -> new Block(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock MOSSY_SHELLSTONE_BRICKS = BLOCKS.register("mossy_shellstone_bricks", + () -> new Block(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock CRACKED_SHELLSTONE_BRICKS = BLOCKS.register("cracked_shellstone_bricks", + () -> new Block(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_STAIRS = BLOCKS.register("mossy_shellstone_brick_stairs", + () -> new net.minecraft.world.level.block.StairBlock(MOSSY_SHELLSTONE_BRICKS.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_SLAB = BLOCKS.register("mossy_shellstone_brick_slab", + () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_WALL = BLOCKS.register("mossy_shellstone_brick_wall", + () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_STAIRS = BLOCKS.register("shellstone_stairs", + () -> new net.minecraft.world.level.block.StairBlock(SHELLSTONE.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_SLAB = BLOCKS.register("shellstone_slab", + () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_WALL = BLOCKS.register("shellstone_wall", + () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock POLISHED_SHELLSTONE_STAIRS = BLOCKS.register("polished_shellstone_stairs", + () -> new net.minecraft.world.level.block.StairBlock(POLISHED_SHELLSTONE.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock POLISHED_SHELLSTONE_SLAB = BLOCKS.register("polished_shellstone_slab", + () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock POLISHED_SHELLSTONE_WALL = BLOCKS.register("polished_shellstone_wall", + () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_BRICK_STAIRS = BLOCKS.register("shellstone_brick_stairs", + () -> new net.minecraft.world.level.block.StairBlock(SHELLSTONE_BRICKS.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_BRICK_SLAB = BLOCKS.register("shellstone_brick_slab", + () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock SHELLSTONE_BRICK_WALL = BLOCKS.register("shellstone_brick_wall", + () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); + + + public static final DeferredBlock TRIFFID_GOO_BLOCK = BLOCKS.register("triffid_goo_block", + () -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false))); + + + public static final DeferredBlock CLOUD_BLOCK = BLOCKS.register("cloud_block", + () -> new com.craisinlord.antarchy.content.block.CloudBlock( + AntarchyFabricItems::cloudBucketItem, + BlockBehaviour.Properties.ofFullCopy(Blocks.POWDER_SNOW).noLootTable().noOcclusion() + )); + + + public static final DeferredBlock ELYTHIA_PORTAL = BLOCKS.register("elythia_portal", + () -> new AntDimensionPortalBlock(PermanentPortalType.ELYTHIA, portalProperties())); + + + public static final DeferredBlock THORAXIS_PORTAL = BLOCKS.register("thoraxis_portal", + () -> new AntDimensionPortalBlock(PermanentPortalType.THORAXIS, portalProperties())); + + + public static final DeferredBlock PALE_NYXITE = BLOCKS.register("pale_nyxite", + () -> new Block(nyxiteProperties())); + + + public static final DeferredBlock NYXITE_SPIKE = BLOCKS.register("nyxite_spike", + () -> new NyxiteSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); + + + public static final DeferredBlock POTENT_NYXITE = BLOCKS.register("potent_nyxite", + () -> new PotentNyxiteBlock( + AntarchyFabricBlocks::potentNyxiteBlockEntityType, + BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK).lightLevel(state -> 3) + )); + + + public static final DeferredBlock UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block", + () -> new UmbralMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); + + + public static final DeferredBlock UMBRAL_MOSS_CARPET = BLOCKS.register("umbral_moss_carpet", + () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); + + + public static final DeferredBlock BLUSH_MOSS_BLOCK = BLOCKS.register("blush_moss_block", + () -> new BlushMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); + + + public static final DeferredBlock BLUSH_MOSS_CARPET = BLOCKS.register("blush_moss_carpet", + () -> new BlushMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); + + + public static final DeferredBlock DREAM_TORCH = BLOCKS.register("dream_torch", + () -> new DreamTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_TORCH))); + + + public static final DeferredBlock DREAM_WALL_TORCH = BLOCKS.register("dream_wall_torch", + () -> new DreamWallTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_WALL_TORCH))); + + + public static final DeferredBlock DREAM_LANTERN = BLOCKS.register("dream_lantern", + () -> new net.minecraft.world.level.block.LanternBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_LANTERN))); + + + public static final DeferredBlock DREAM_CAMPFIRE = BLOCKS.register("dream_campfire", + () -> new DreamCampfireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_CAMPFIRE))); + + + public static final DeferredBlock DREAM_FIRE = BLOCKS.register("dream_fire", + () -> new DreamFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE))); + + + public static final DeferredBlock DREAM_CEILING_FIRE = BLOCKS.register("dream_fire_ceiling", + () -> new DreamCeilingFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE))); + + + public static final DeferredBlock BED_BUG_EGG = BLOCKS.register("bed_bug_egg", + () -> new BedBugEggBlock(BlockBehaviour.Properties.of() + .strength(0.15F) + .sound(SoundType.METAL) + .randomTicks() + .noOcclusion() + .noCollission() + .replaceable())); + + + public static final DeferredBlock WASP_NEST = BLOCKS.register("wasp_nest", + () -> new WaspNestBlock(AntarchyFabricBlocks::waspNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.BEE_NEST))); + + + public static final DeferredBlock OURANWOOD_SQUIRREL_NEST = BLOCKS.register("ouranwood_squirrel_nest", + () -> new com.craisinlord.antarchy.content.block.OuranwoodSquirrelNestBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).noLootTable())); + + + public static final DeferredBlock BRUTALFLY_COCOON_SPAWNER = BLOCKS.register("brutalfly_cocoon_spawner", + () -> new com.craisinlord.antarchy.content.block.BrutalflyCocoonSpawnerBlock(BlockBehaviour.Properties.of().noCollission().instabreak().noLootTable())); + + + public static final DeferredBlock HUSHWEED = BLOCKS.register("hushweed", + () -> new HushweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AZALEA).noCollission().noOcclusion())); + + + public static final DeferredBlock BILE_BLOCK = BLOCKS.register("bile", + () -> new BileLiquidBlock((net.minecraft.world.level.material.FlowingFluid) AntarchyFabricMisc.BILE.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 5).noLootTable())); + + + public static final DeferredBlock ICHOR_BLOCK = BLOCKS.register("ichor", + () -> new LiquidBlock((net.minecraft.world.level.material.FlowingFluid) AntarchyFabricMisc.ICHOR.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); + + + public static final DeferredBlock ANTIWATER_BLOCK = BLOCKS.register("antiwater", + () -> new AntiwaterLiquidBlock((net.minecraft.world.level.material.FlowingFluid) AntarchyFabricMisc.ANTIWATER.get(), + BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); + + + public static final DeferredBlock LUMEN_BLOCK = BLOCKS.register("lumen", + () -> new LumenLiquidBlock((net.minecraft.world.level.material.FlowingFluid) AntarchyFabricMisc.LUMEN.get(), + BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 9).noLootTable())); + + + public static final DeferredBlock LUMEN_FROGLIGHT = BLOCKS.register("lumen_froglight", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OCHRE_FROGLIGHT))); + + + public static final DeferredBlock ROSEATE_FROGLIGHT = BLOCKS.register("roseate_froglight", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OCHRE_FROGLIGHT))); + + + public static final DeferredBlock RED_ANT_NEST = BLOCKS.register("red_ant_nest", + () -> new AntNestBlock( + AntarchyFabricEntities.RED_ANT, + AntarchyFabricBlocks::antNestBlockEntityType, + true, + BlockBehaviour.Properties.ofFullCopy(Blocks.MAGMA_BLOCK).lightLevel(state -> 3).noLootTable() + )); + + + public static final DeferredBlock BROWN_ANT_NEST = BLOCKS.register("brown_ant_nest", + () -> new AntNestBlock(AntarchyFabricEntities.BROWN_ANT, AntarchyFabricBlocks::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); + + + public static final DeferredBlock RAINBOW_ANT_NEST = BLOCKS.register("rainbow_ant_nest", + () -> new AntNestBlock(AntarchyFabricEntities.RAINBOW_ANT, AntarchyFabricBlocks::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); + + + public static final DeferredBlock URANIUM_ORE = BLOCKS.register("uranium_ore", + () -> createOre(Blocks.EMERALD_ORE, 4, 8)); + + + public static final DeferredBlock DEEPSLATE_URANIUM_ORE = BLOCKS.register("deepslate_uranium_ore", + () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8)); + + + public static final DeferredBlock TITANIUM_ORE = BLOCKS.register("titanium_ore", + () -> createOre(Blocks.DIAMOND_ORE, 4, 8)); + + + public static final DeferredBlock DEEPSLATE_TITANIUM_ORE = BLOCKS.register("deepslate_titanium_ore", + () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8)); + + + public static final DeferredBlock URANIUM_BLOCK = BLOCKS.register("uranium_block", + () -> createStorageBlock(Blocks.EMERALD_BLOCK)); + + + public static final DeferredBlock TITANIUM_BLOCK = BLOCKS.register("titanium_block", + () -> createStorageBlock(Blocks.DIAMOND_BLOCK)); + + + public static final DeferredBlock RAW_URANIUM_BLOCK = BLOCKS.register("raw_uranium_block", + () -> createRawStorageBlock(Blocks.RAW_GOLD_BLOCK)); + + + public static final DeferredBlock RAW_TITANIUM_BLOCK = BLOCKS.register("raw_titanium_block", + () -> createRawStorageBlock(Blocks.RAW_IRON_BLOCK)); + + + public static final DeferredBlock CUT_URANIUM = BLOCKS.register("cut_uranium", + () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER)); + + + public static final DeferredBlock CUT_TITANIUM = BLOCKS.register("cut_titanium", + () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER)); + + + public static final DeferredBlock CUT_URANIUM_SLAB = BLOCKS.register("cut_uranium_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB))); + + + public static final DeferredBlock CUT_TITANIUM_SLAB = BLOCKS.register("cut_titanium_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB))); + + + public static final DeferredBlock CUT_URANIUM_STAIRS = BLOCKS.register("cut_uranium_stairs", + () -> new net.minecraft.world.level.block.StairBlock(CUT_URANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS))); + + + public static final DeferredBlock CUT_TITANIUM_STAIRS = BLOCKS.register("cut_titanium_stairs", + () -> new net.minecraft.world.level.block.StairBlock(CUT_TITANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS))); + + + public static final DeferredBlock CHISELED_URANIUM = BLOCKS.register("chiseled_uranium", + () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER)); + + + public static final DeferredBlock CHISELED_TITANIUM = BLOCKS.register("chiseled_titanium", + () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER)); + + + public static final DeferredBlock URANIUM_BULB = BLOCKS.register("uranium_bulb", + () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB))); + + + public static final DeferredBlock TITANIUM_BULB = BLOCKS.register("titanium_bulb", + () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB))); + + + public static final DeferredBlock URANIUM_DOOR = BLOCKS.register("uranium_door", + () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR))); + + + public static final DeferredBlock TITANIUM_DOOR = BLOCKS.register("titanium_door", + () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR))); + + + public static final DeferredBlock URANIUM_TRAPDOOR = BLOCKS.register("uranium_trapdoor", + () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR))); + + + public static final DeferredBlock TITANIUM_TRAPDOOR = BLOCKS.register("titanium_trapdoor", + () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR))); + + + public static final DeferredBlock URANIUM_BARS = BLOCKS.register("uranium_bars", + () -> new net.minecraft.world.level.block.IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS))); + + + public static final DeferredBlock TITANIUM_BARS = BLOCKS.register("titanium_bars", + () -> new net.minecraft.world.level.block.IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS))); + + + public static final DeferredBlock ANTIMETAL = BLOCKS.register("antimetal", + () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); + + + public static final DeferredBlock POLISHED_ANTIMETAL = BLOCKS.register("polished_antimetal", + () -> new net.minecraft.world.level.block.RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT))); + + + public static final DeferredBlock ANTIMETAL_SCAFFOLDING = BLOCKS.register("antimetal_scaffolding", + () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); + + + public static final DeferredBlock CORNEA_STALK = BLOCKS.register("cornea_stalk", + () -> new CorneaStalkBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SWEET_BERRY_BUSH).randomTicks())); + + + public static final DeferredBlock CORN_CROP = BLOCKS.register("corn_crop", + () -> new CornCropBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).randomTicks().noCollission().noOcclusion())); + + + public static final DeferredBlock WILD_CORN = BLOCKS.register("wild_corn", + () -> new WildCornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHEAT).noCollission().noOcclusion())); + + + public static final DeferredBlock FALLEN_KING_CROWN_BLOCK = BLOCKS.register("fallen_king_crown", + () -> new Block(BlockBehaviour.Properties.of() + .strength(0.2F) + .sound(SoundType.METAL) + .noOcclusion() + .isSuffocating((state, level, pos) -> false) + .isViewBlocking((state, level, pos) -> false))); + + + public static final DeferredBlock SMALL_BLOOD_CRYSTAL_BUD = BLOCKS.register("small_blood_crystal_bud", + () -> new AmethystClusterBlock(3.0F, 4.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.SMALL_AMETHYST_BUD))); + + + public static final DeferredBlock MEDIUM_BLOOD_CRYSTAL_BUD = BLOCKS.register("medium_blood_crystal_bud", + () -> new AmethystClusterBlock(4.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.MEDIUM_AMETHYST_BUD))); + + + public static final DeferredBlock LARGE_BLOOD_CRYSTAL_BUD = BLOCKS.register("large_blood_crystal_bud", + () -> new AmethystClusterBlock(5.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.LARGE_AMETHYST_BUD))); + + + public static final DeferredBlock BUDDING_BLOOD_CRYSTAL = BLOCKS.register("budding_blood_crystal", + () -> new BuddingBloodCrystalBlock( + BlockBehaviour.Properties.ofFullCopy(Blocks.BUDDING_AMETHYST), + AntarchyFabricBlocks::smallBloodCrystalBudBlock, + AntarchyFabricBlocks::mediumBloodCrystalBudBlock, + AntarchyFabricBlocks::largeBloodCrystalBudBlock, + AntarchyFabricBlocks::bloodCrystalCrystalBlock + )); + + + public static final DeferredBlock BLOOD_CRYSTAL = BLOCKS.register("blood_crystal_block", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); + + + public static final DeferredBlock BLOOD_CRYSTAL_CRYSTAL = BLOCKS.register("blood_crystal_cluster", + () -> new AmethystClusterBlock(7.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_CLUSTER))); + + + public static final DeferredBlock DREAM_SAND = BLOCKS.register("dream_sand", + () -> new DreamSandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND))); + + + public static final DeferredBlock DREAM_SANDSTONE = BLOCKS.register("dream_sandstone", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE))); + + + public static final DeferredBlock CHISELED_DREAM_SANDSTONE = BLOCKS.register("chiseled_dream_sandstone", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.CHISELED_SANDSTONE))); + + + public static final DeferredBlock CUT_DREAM_SANDSTONE = BLOCKS.register("cut_dream_sandstone", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE))); + + + public static final DeferredBlock SMOOTH_DREAM_SANDSTONE = BLOCKS.register("smooth_dream_sandstone", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE))); + + + public static final DeferredBlock DREAM_SANDSTONE_STAIRS = BLOCKS.register("dream_sandstone_stairs", + () -> new net.minecraft.world.level.block.StairBlock(DREAM_SANDSTONE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_STAIRS))); + + + public static final DeferredBlock DREAM_SANDSTONE_SLAB = BLOCKS.register("dream_sandstone_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_SLAB))); + + + public static final DeferredBlock DREAM_SANDSTONE_WALL = BLOCKS.register("dream_sandstone_wall", + () -> new net.minecraft.world.level.block.WallBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_WALL))); + + + public static final DeferredBlock SMOOTH_DREAM_SANDSTONE_STAIRS = BLOCKS.register("smooth_dream_sandstone_stairs", + () -> new net.minecraft.world.level.block.StairBlock(SMOOTH_DREAM_SANDSTONE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE_STAIRS))); + + + public static final DeferredBlock SMOOTH_DREAM_SANDSTONE_SLAB = BLOCKS.register("smooth_dream_sandstone_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE_SLAB))); + + + public static final DeferredBlock CUT_DREAM_SANDSTONE_SLAB = BLOCKS.register("cut_dream_sandstone_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE_SLAB))); + + + public static final DeferredHolder, BlockEntityType> ANT_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("ant_nest", + () -> BlockEntityType.Builder.of( + AntNestBlockEntity::new, + RED_ANT_NEST.get(), + BROWN_ANT_NEST.get(), + RAINBOW_ANT_NEST.get() + ).build(null)); + + + public static final DeferredHolder, BlockEntityType> DREAM_CAMPFIRE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("dream_campfire", + () -> BlockEntityType.Builder.of( + DreamCampfireBlockEntity::new, + DREAM_CAMPFIRE.get() + ).build(null)); + + + public static final DeferredHolder, BlockEntityType> WASP_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("wasp_nest", + () -> BlockEntityType.Builder.of( + WaspNestBlockEntity::new, + WASP_NEST.get() + ).build(null)); + + + public static final DeferredHolder, BlockEntityType> HUSHWEED_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("hushweed", + () -> BlockEntityType.Builder.of( + HushweedBlockEntity::new, + HUSHWEED.get() + ).build(null)); + + + public static final DeferredHolder, BlockEntityType> POTENT_NYXITE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("potent_nyxite", + () -> BlockEntityType.Builder.of( + (pos, state) -> new PotentNyxiteBlockEntity(pos, state, AntarchyFabricBlocks::potentNyxiteBlockEntityType), + POTENT_NYXITE.get() + ).build(null)); + + + + private static BlockEntityType antNestBlockEntityType() { + return ANT_NEST_BLOCK_ENTITY.get(); + } + + + + private static BlockEntityType waspNestBlockEntityType() { + return WASP_NEST_BLOCK_ENTITY.get(); + } + + + + private static BlockEntityType potentNyxiteBlockEntityType() { + return POTENT_NYXITE_BLOCK_ENTITY.get(); + } + + + + private static Block smallBloodCrystalBudBlock() { + return SMALL_BLOOD_CRYSTAL_BUD.get(); + } + + + + private static Block mediumBloodCrystalBudBlock() { + return MEDIUM_BLOOD_CRYSTAL_BUD.get(); + } + + + + private static Block largeBloodCrystalBudBlock() { + return LARGE_BLOOD_CRYSTAL_BUD.get(); + } + + + + private static Block bloodCrystalCrystalBlock() { + return BLOOD_CRYSTAL_CRYSTAL.get(); + } + + + + + private static Block createDirtOre(Block copyFrom) { + return new Block(dirtOreProperties()); + } + + + + private static Block createDirtOre(Block copyFrom, int minExperience, int maxExperience) { + return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), dirtOreProperties()); + } + + + + private static BlockBehaviour.Properties dirtOreProperties() { + return BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT) + .sound(SoundType.ROOTED_DIRT) + .strength(0.65F, 0.8F) + .requiresCorrectToolForDrops(); + } + + + + private static BlockBehaviour.Properties nyxiteProperties() { + return BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK); + } + + + + private static BlockBehaviour.Properties portalProperties() { + return BlockBehaviour.Properties.of() + .strength(-1.0F) + .noCollission() + .noOcclusion() + .lightLevel(state -> 11) + .noLootTable() + .isSuffocating((state, level, pos) -> false) + .isViewBlocking((state, level, pos) -> false); + } + + + + private static Block createOre(Block copyFrom) { + return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + } + + + + private static Block createOre(Block copyFrom, int minExperience, int maxExperience) { + return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + } + + + + private static Block createStorageBlock(Block copyFrom) { + return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + } + + + + private static Block createHorizontalFacingStorageBlock(Block copyFrom) { + return new SimpleHorizontalFacingBlock(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + } + + + + private static final class SimpleHorizontalFacingBlock extends HorizontalDirectionalBlock { + private static final MapCodec CODEC = simpleCodec(SimpleHorizontalFacingBlock::new); + + private SimpleHorizontalFacingBlock(BlockBehaviour.Properties properties) { + super(properties); + registerDefaultState(stateDefinition.any().setValue(FACING, Direction.NORTH)); + } + + @Override + protected MapCodec codec() { + return CODEC; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); + } + + @Override + protected BlockState rotate(BlockState state, Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @Override + protected BlockState mirror(BlockState state, Mirror mirror) { + return state.rotate(mirror.getRotation(state.getValue(FACING))); + } + } + + + + private static Block createRawStorageBlock(Block copyFrom) { + return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom) + .strength(3.5F, 6.0F) + .requiresCorrectToolForDrops()); + } + + + public static void register() { + BLOCKS.register(); + BLOCK_ENTITY_TYPES.register(); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricCreativeModeTabs.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricCreativeModeTabs.java new file mode 100644 index 00000000..2602b2e7 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricCreativeModeTabs.java @@ -0,0 +1,347 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +import com.craisinlord.antarchy.content.worldgen.overworld.CornPatchFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricCreativeModeTabs { + + public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, Antarchy.MODID); + + + + public static final DeferredHolder ANTARCHY_TAB = CREATIVE_MODE_TABS.register("antarchy", + () -> CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) + .title(net.minecraft.network.chat.Component.translatable("itemGroup.antarchy.antarchy")) + .icon(() -> new ItemStack(AntarchyFabricItems.GRAVITY_GUN.get())) + .displayItems((parameters, output) -> populateCreativeTab(output)) + .build()); + + + + private static void populateCreativeTab(CreativeModeTab.Output output) { + ArrayList sortedItems = new ArrayList<>(); + for (var holder : AntarchyFabricItems.ITEMS.getEntries()) { + Item item = holder.get(); + if (item != Items.AIR) { + sortedItems.add(item); + } + } + sortedItems.sort(CreativeTabOrder.COMPARATOR); + sortedItems.forEach(item -> { + if (item == AntarchyFabricItems.GLIMMER_BOTTLE.get()) { + addGlimmerBottleVariants(output); + } else { + output.accept(item); + } + }); + addPotionVariants(output); + } + + + + private static void addGlimmerBottleVariants(CreativeModeTab.Output output) { + for (com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant variant : com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.values()) { + output.accept(com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(variant)); + } + } + + + + private static void addPotionVariants(CreativeModeTab.Output output) { + acceptPotionFamily(output, AntarchyFabricMisc.DREAD_POTION); + acceptPotionFamily(output, AntarchyFabricMisc.LONG_DREAD); + acceptPotionFamily(output, AntarchyFabricMisc.INVERSION); + acceptPotionFamily(output, AntarchyFabricMisc.LONG_INVERSION); + acceptPotionFamily(output, AntarchyFabricMisc.STINKY_POTION); + acceptPotionFamily(output, AntarchyFabricMisc.LONG_STINKY); + acceptPotionFamily(output, AntarchyFabricMisc.PARALYSIS); + acceptPotionFamily(output, AntarchyFabricMisc.LONG_PARALYSIS); + acceptPotionFamily(output, AntarchyFabricMisc.HASTE); + acceptPotionFamily(output, AntarchyFabricMisc.STRONG_HASTE); + acceptPotionFamily(output, AntarchyFabricMisc.SHRINKING); + acceptPotionFamily(output, AntarchyFabricMisc.STRONG_SHRINKING); + acceptPotionFamily(output, AntarchyFabricMisc.EXTREME_SHRINKING); + acceptPotionFamily(output, AntarchyFabricMisc.GROWING); + acceptPotionFamily(output, AntarchyFabricMisc.STRONG_GROWING); + acceptPotionFamily(output, AntarchyFabricMisc.EXTREME_GROWING); + } + + + + private static void acceptPotionFamily(CreativeModeTab.Output output, DeferredHolder potion) { + Holder holder = AntarchyFabricContent.potionHolder(potion); + output.accept(PotionContents.createItemStack(Items.POTION, holder)); + output.accept(PotionContents.createItemStack(Items.SPLASH_POTION, holder)); + output.accept(PotionContents.createItemStack(Items.LINGERING_POTION, holder)); + output.accept(PotionContents.createItemStack(Items.TIPPED_ARROW, holder)); + } + + + + private static int creativeTabGroup(Item item) { + return CreativeTabOrder.group(item); + } + + + + private static int creativeTabSubOrder(Item item) { + return CreativeTabOrder.subOrder(item); + } + + + public static void register() { + CREATIVE_MODE_TABS.register(); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java new file mode 100644 index 00000000..2b01f8c3 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java @@ -0,0 +1,637 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +import com.craisinlord.antarchy.content.worldgen.overworld.CornPatchFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricEntities { + + public static final DeferredRegister> ENTITY_TYPES = DeferredRegister.create(Registries.ENTITY_TYPE, Antarchy.MODID); + + + public static final DeferredHolder, EntityType> RED_ANT = ENTITY_TYPES.register("red_ant", + () -> buildAntType(RedAntEntity::new, MobCategory.CREATURE, "red_ant")); + + + public static final DeferredHolder, EntityType> BROWN_ANT = ENTITY_TYPES.register("brown_ant", + () -> buildAntType(BrownAntEntity::new, MobCategory.CREATURE, "brown_ant")); + + + public static final DeferredHolder, EntityType> RAINBOW_ANT = ENTITY_TYPES.register("rainbow_ant", + () -> buildAntType(RainbowAntEntity::new, MobCategory.CREATURE, "rainbow_ant")); + + + public static final DeferredHolder, EntityType> MOLEWORM = ENTITY_TYPES.register("moleworm", + () -> EntityType.Builder.of(MolewormEntity::new, MobCategory.MONSTER) + .sized(0.4F, 0.3F) + .clientTrackingRange(8) + .build("moleworm")); + + + public static final DeferredHolder, EntityType> MANTIS = ENTITY_TYPES.register("mantis", + () -> EntityType.Builder.of(MantisEntity::new, MobCategory.MONSTER) + .sized(3.125F, 2.5F) + .clientTrackingRange(8) + .build("mantis")); + + + public static final DeferredHolder, EntityType> ALPHA_MANTIS = ENTITY_TYPES.register("alpha_mantis", + () -> EntityType.Builder.of(AlphaMantisEntity::new, MobCategory.MONSTER) + .sized(4.25F, 3.35F) + .clientTrackingRange(10) + .build("alpha_mantis")); + + + public static final DeferredHolder, EntityType> OURANWOOD_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_boat", + () -> EntityType.Builder.of(OuranwoodBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("ouranwood_boat")); + + + public static final DeferredHolder, EntityType> OURANWOOD_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_chest_boat", + () -> EntityType.Builder.of(OuranwoodChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("ouranwood_chest_boat")); + + + public static final DeferredHolder, EntityType> PEACH_BOAT_ENTITY = ENTITY_TYPES.register("peach_boat", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.PeachBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("peach_boat")); + + + public static final DeferredHolder, EntityType> PEACH_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("peach_chest_boat", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.PeachChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("peach_chest_boat")); + + + public static final DeferredHolder, EntityType> MOLEVORE = ENTITY_TYPES.register("molevore", + () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) + .sized(1.95F, 1.1F) + .clientTrackingRange(10) + .build("molevore")); + + + public static final DeferredHolder, EntityType> TRIFFID = ENTITY_TYPES.register("triffid", + () -> EntityType.Builder.of(TriffidEntity::new, MobCategory.MONSTER) + .sized(2.0F, 5.0F) + .clientTrackingRange(10) + .build("triffid")); + + + public static final DeferredHolder, EntityType> BED_BUG = ENTITY_TYPES.register("bed_bug", + () -> EntityType.Builder.of(BedBugEntity::new, MobCategory.CREATURE) + .sized(1.15F, 0.8F) + .clientTrackingRange(8) + .build("bed_bug")); + + + public static final DeferredHolder, EntityType> WASP = ENTITY_TYPES.register("wasp", + () -> EntityType.Builder.of(WaspEntity::new, MobCategory.MONSTER) + .sized(0.8625F, 1.365F) + .clientTrackingRange(8) + .build("wasp")); + + + public static final DeferredHolder, EntityType> BOMBER = ENTITY_TYPES.register("bomber", + () -> EntityType.Builder.of(BomberEntity::new, MobCategory.MONSTER) + .sized(0.55F, 0.75F) + .clientTrackingRange(8) + .build("bomber")); + + + public static final DeferredHolder, EntityType> SHRINK_RAY_PROJECTILE = ENTITY_TYPES.register("shrink_ray_projectile", + () -> EntityType.Builder.of(SizeRayProjectileEntity::createShrink, MobCategory.MISC) + .sized(0.5F, 0.5F) + .clientTrackingRange(8) + .updateInterval(1) + .build("shrink_ray_projectile")); + + + public static final DeferredHolder, EntityType> GROWTH_RAY_PROJECTILE = ENTITY_TYPES.register("growth_ray_projectile", + () -> EntityType.Builder.of(SizeRayProjectileEntity::createGrowth, MobCategory.MISC) + .sized(0.5F, 0.5F) + .clientTrackingRange(8) + .updateInterval(1) + .build("growth_ray_projectile")); + + + public static final DeferredHolder, EntityType> DIAMOND_MINECART = ENTITY_TYPES.register("diamond_minecart", + () -> EntityType.Builder.of((entityType, level) -> new DiamondMinecartEntity(entityType, level, AntarchyFabricItems.diamondMinecartItem()), MobCategory.MISC) + .sized(0.98F, 0.7F) + .clientTrackingRange(8) + .build("diamond_minecart")); + + + + public static final DeferredHolder, EntityType> EASTER_BUNNY = ENTITY_TYPES.register("easter_bunny", + () -> EntityType.Builder.of(EasterBunnyEntity::new, MobCategory.CREATURE) + .sized(0.5F, 1.0F) + .clientTrackingRange(8) + .build("easter_bunny")); + + + public static final DeferredHolder, EntityType> FLYING_SQUIRREL = ENTITY_TYPES.register("flying_squirrel", + () -> EntityType.Builder.of(FlyingSquirrelEntity::new, MobCategory.CREATURE) + .sized(0.6F, 0.7F) + .clientTrackingRange(8) + .build("flying_squirrel")); + + + public static final DeferredHolder, EntityType> CATERPILLAR = ENTITY_TYPES.register("caterpillar", + () -> EntityType.Builder.of(CaterpillarEntity::new, MobCategory.CREATURE) + .sized(0.8775F, 0.585F) + .clientTrackingRange(8) + .build("caterpillar")); + + + public static final DeferredHolder, EntityType> BUTTERFLY = ENTITY_TYPES.register("butterfly", + () -> EntityType.Builder.of(ButterflyEntity::new, MobCategory.AMBIENT) + .sized(1.125F, 1.375F) + .clientTrackingRange(8) + .build("butterfly")); + + + public static final DeferredHolder, EntityType> REVERIE = ENTITY_TYPES.register("reverie", + () -> EntityType.Builder.of(ReverieEntity::new, MobCategory.AMBIENT) + .sized(0.7F, 0.7F) + .clientTrackingRange(8) + .build("reverie")); + + + public static final DeferredHolder, EntityType> BRUTALFLY = ENTITY_TYPES.register("brutalfly", + () -> EntityType.Builder.of(BrutalflyEntity::new, MobCategory.MONSTER) + .sized(2.4F, 2.1F) + .clientTrackingRange(12) + .build("brutalfly")); + + + public static final DeferredHolder, EntityType> APPLE_COW = ENTITY_TYPES.register("apple_cow", + () -> buildCowType(AppleCow::new, "apple_cow")); + + + public static final DeferredHolder, EntityType> GOLDEN_APPLE_COW = ENTITY_TYPES.register("golden_apple_cow", + () -> buildCowType(GoldenAppleCow::new, "golden_apple_cow")); + + + public static final DeferredHolder, EntityType> ENCHANTED_GOLDEN_APPLE_COW = ENTITY_TYPES.register("enchanted_golden_apple_cow", + () -> buildCowType(EnchantedGoldenAppleCow::new, "enchanted_golden_apple_cow")); + + + public static final DeferredHolder, EntityType> DR_TRAYAURUS = ENTITY_TYPES.register("dr_trayaurus", + () -> EntityType.Builder.of(DrTrayaurusEntity::new, MobCategory.MISC) + .sized(0.6F, 1.95F) + .clientTrackingRange(10) + .build("dr_trayaurus")); + + + public static final DeferredHolder, EntityType> CLOUD_SHARK = ENTITY_TYPES.register("cloud_shark", + () -> EntityType.Builder.of(CloudSharkEntity::new, MobCategory.MONSTER) + .sized(2.4F, 0.9F) + .clientTrackingRange(10) + .build("cloud_shark")); + + + public static final DeferredHolder, EntityType> KRAKEN = ENTITY_TYPES.register("kraken", + () -> EntityType.Builder.of(KrakenEntity::new, MobCategory.MONSTER) + .sized(11.4F, 39.0F) + .clientTrackingRange(12) + .build("kraken")); + + + public static final DeferredHolder, EntityType> KRAKEN_PART = ENTITY_TYPES.register("kraken_part", + () -> EntityType.Builder.of( + com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity::new, + MobCategory.MISC + ) + .sized(1.0F, 1.0F) + .clientTrackingRange(12) + .updateInterval(1) + .build("kraken_part")); + + + public static final DeferredHolder, EntityType> MISSILE_SQUID = ENTITY_TYPES.register("missile_squid", + () -> EntityType.Builder.of(MissileSquidEntity::new, MobCategory.MONSTER) + .sized(1.62F, 3.18F) + .clientTrackingRange(10) + .build("missile_squid")); + + + public static final DeferredHolder, EntityType> OCTOPUS_BOMB = ENTITY_TYPES.register("octopus_bomb", + () -> EntityType.Builder.of(OctopusBombEntity::new, MobCategory.MONSTER) + .sized(2.4F, 2.9F) + .clientTrackingRange(10) + .build("octopus_bomb")); + + + public static final DeferredHolder, EntityType> NIGHTMARE = ENTITY_TYPES.register("nightmare", + () -> EntityType.Builder.of(NightmareEntity::new, MobCategory.MONSTER) + .sized(3.2F, 3.8F) + .clientTrackingRange(12) + .build("nightmare")); + + + public static final DeferredHolder, EntityType> LUCID = ENTITY_TYPES.register("lucid", + () -> EntityType.Builder.of(LucidEntity::new, MobCategory.MONSTER) + .sized(2.0F, 2.0F) + .clientTrackingRange(10) + .build("lucid")); + + + public static final DeferredHolder, EntityType> LUCID_BOLT = ENTITY_TYPES.register("lucid_bolt", + () -> EntityType.Builder.of(LucidBoltEntity::new, MobCategory.MISC) + .sized(0.3F, 0.3F) + .clientTrackingRange(8) + .updateInterval(1) + .build("lucid_bolt")); + + + public static final DeferredHolder, EntityType> SCORPION = ENTITY_TYPES.register("scorpion", + () -> EntityType.Builder.of(ScorpionEntity::new, MobCategory.MONSTER) + .sized(1.5F, 1.0F) + .clientTrackingRange(8) + .build("scorpion")); + + + public static final DeferredHolder, EntityType> BASILISK = ENTITY_TYPES.register("basilisk", + () -> EntityType.Builder.of(BasiliskEntity::new, MobCategory.MONSTER) + .sized(3.0F, 3.5F) + .clientTrackingRange(14) + .build("basilisk")); + + + public static final DeferredHolder, EntityType> EMPEROR_SCORPION = ENTITY_TYPES.register("emperor_scorpion", + () -> EntityType.Builder.of(EmperorScorpionEntity::new, MobCategory.MONSTER) + .sized(6.0F, 3.0F) + .clientTrackingRange(12) + .build("emperor_scorpion")); + + + public static final DeferredHolder, EntityType> LUCID_PEARL_PROJECTILE = ENTITY_TYPES.register("lucid_pearl_projectile", + () -> EntityType.Builder.of(LucidEyeProjectileEntity::new, MobCategory.MISC) + .sized(0.25F, 0.25F) + .clientTrackingRange(8) + .updateInterval(1) + .build("lucid_pearl_projectile")); + + + public static final DeferredHolder, EntityType> HUSH_PROJECTILE = ENTITY_TYPES.register("hush_projectile", + () -> EntityType.Builder.of(HushProjectileEntity::new, MobCategory.MISC) + .sized(0.35F, 0.35F) + .clientTrackingRange(8) + .updateInterval(1) + .build("hush_projectile")); + + + public static final DeferredHolder, EntityType> BRUTALFLY_ORB = ENTITY_TYPES.register("brutalfly_orb", + () -> EntityType.Builder.of(BrutalflyOrbEntity::new, MobCategory.MISC) + .sized(0.75F, 0.75F) + .clientTrackingRange(10) + .updateInterval(1) + .build("brutalfly_orb")); + + + public static final DeferredHolder, EntityType> UPWARD_FALLING_BLOCK = ENTITY_TYPES.register("upward_falling_block", + () -> EntityType.Builder.of( + com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity::new, MobCategory.MISC) + .sized(0.98F, 0.98F) + .clientTrackingRange(10) + .updateInterval(1) + .build("upward_falling_block")); + + + public static final DeferredHolder, EntityType> TORETERROR = ENTITY_TYPES.register("toreterror", + () -> EntityType.Builder.of(ToreterrorEntity::new, MobCategory.MONSTER) + .sized(2.0F, 3.0F) + .clientTrackingRange(14) + .build("toreterror")); + + + public static final DeferredHolder, EntityType> WATER_BOMB = ENTITY_TYPES.register("water_bomb", + () -> EntityType.Builder.of(WaterBombEntity::new, MobCategory.MISC) + .sized(0.4F, 0.4F) + .clientTrackingRange(8) + .updateInterval(1) + .build("water_bomb")); + + + + public static final DeferredHolder, EntityType> CHEEP = ENTITY_TYPES.register("cheep", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.CheepEntity::new, MobCategory.WATER_AMBIENT) + .sized(1.0F, 1.2F) + .clientTrackingRange(8) + .build("cheep")); + + + + // Dorrie is not part of this update yet. + // public static final DeferredHolder, EntityType> DORRIE = ENTITY_TYPES.register("dorrie", + // () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.DorrieEntity::new, MobCategory.CREATURE) + // .sized(1.6F, 1.4F) + // .clientTrackingRange(10) + // .build("dorrie")); + + + public static final DeferredHolder, EntityType> OURANWOOD_DEER = ENTITY_TYPES.register("ouranwood_deer", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity::new, MobCategory.CREATURE) + .sized(0.9F, 1.4F) + .clientTrackingRange(8) + .build("ouranwood_deer")); + + + public static final DeferredHolder, EntityType> GLIMMER = ENTITY_TYPES.register("glimmer", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity::new, MobCategory.CREATURE) + .sized(0.9F, 1.4F) + .clientTrackingRange(8) + .build("glimmer")); + + + public static final DeferredHolder, EntityType> ELKA = ENTITY_TYPES.register("elka", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.ElkaEntity::new, MobCategory.CREATURE) + .sized(2.2F, 3.5F) + .clientTrackingRange(10) + .build("elka")); + + + + private static EntityType buildCowType(EntityType.EntityFactory factory, String name) { + return EntityType.Builder.of(factory, MobCategory.CREATURE) + .sized(0.9F, 1.4F) + .clientTrackingRange(10) + .build(name); + } + + + + private static EntityType buildAntType(EntityType.EntityFactory factory, MobCategory category, String name) { + return EntityType.Builder.of(factory, category) + .sized(0.6375F, 0.2125F) + .clientTrackingRange(8) + .build(name); + } + + + public static void register() { + ENTITY_TYPES.register(); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java new file mode 100644 index 00000000..44d49620 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java @@ -0,0 +1,333 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +import com.craisinlord.antarchy.content.worldgen.overworld.CornPatchFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricEntityAttributes { + + + private static AttributeSupplier.Builder buildAntAttributes(double health, double speed, double attackDamage) { + return net.minecraft.world.entity.Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, health) + .add(Attributes.MOVEMENT_SPEED, speed) + .add(Attributes.ATTACK_DAMAGE, attackDamage); + } + + + + public static void register() { + FabricDefaultAttributeRegistry.register( + net.minecraft.world.entity.EntityType.PLAYER, + net.minecraft.world.entity.player.Player.createAttributes() + .add(AntarchyFabricMisc.attributeHolder(AntarchyFabricMisc.DOUBLE_DAMAGE_CHANCE)) + .add(AntarchyFabricMisc.attributeHolder(AntarchyFabricMisc.BLOODGLASS_MAX_HEARTS)) + .build() + ); + + AttributeSupplier rabbitAttributes = Rabbit.createAttributes().build(); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.EASTER_BUNNY.get(), rabbitAttributes); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.FLYING_SQUIRREL.get(), FlyingSquirrelEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.CATERPILLAR.get(), CaterpillarEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BUTTERFLY.get(), ButterflyEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.REVERIE.get(), ReverieEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BRUTALFLY.get(), BrutalflyEntity.createAttributes().build()); + + AttributeSupplier cowAttributes = Cow.createAttributes().build(); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.APPLE_COW.get(), cowAttributes); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.GOLDEN_APPLE_COW.get(), cowAttributes); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW.get(), cowAttributes); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.DR_TRAYAURUS.get(), Villager.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.CLOUD_SHARK.get(), CloudSharkEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.KRAKEN.get(), KrakenEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.NIGHTMARE.get(), NightmareEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BED_BUG.get(), BedBugEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.WASP.get(), WaspEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BOMBER.get(), BomberEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MANTIS.get(), MantisEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.ALPHA_MANTIS.get(), AlphaMantisEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.TRIFFID.get(), TriffidEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.LUCID.get(), LucidEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.SCORPION.get(), ScorpionEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BASILISK.get(), BasiliskEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.EMPEROR_SCORPION.get(), EmperorScorpionEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.TORETERROR.get(), ToreterrorEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build()); + // Dorrie is not part of this update yet. + // FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.DORRIE.get(), com.craisinlord.antarchy.content.entity.DorrieEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.GLIMMER.get(), com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.ELKA.get(), com.craisinlord.antarchy.content.entity.ElkaEntity.createAttributes().build()); + + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.RED_ANT.get(), buildAntAttributes( + AntarchySettings.redAntHealth(), + AntarchySettings.redAntMovementSpeed(), + AntarchySettings.redAntAttackDamage() + ).build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BROWN_ANT.get(), buildAntAttributes( + AntarchySettings.brownAntHealth(), + AntarchySettings.brownAntMovementSpeed(), + AntarchySettings.brownAntAttackDamage() + ).build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.RAINBOW_ANT.get(), buildAntAttributes( + AntarchySettings.rainbowAntHealth(), + AntarchySettings.rainbowAntMovementSpeed(), + AntarchySettings.rainbowAntAttackDamage() + ).build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MOLEWORM.get(), MolewormEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MOLEVORE.get(), MolevoreEntity.createAttributes().build()); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java new file mode 100644 index 00000000..73ff588b --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java @@ -0,0 +1,1492 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +import com.craisinlord.antarchy.content.worldgen.overworld.CornPatchFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricItems { + + public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(Antarchy.MODID); + + + private static final Tier ULTIMATE_TIER = new SimpleToolTier( + 3072, + 10.5F, + 0.0F, + Tiers.NETHERITE.getIncorrectBlocksForDrops(), + 25, + AntarchyFabricItems::ultimateRepairIngredient + ); + + + private static final Tier BLOOD_CRYSTAL_KATANA_TIER = new SimpleToolTier( + 1200, + 8.0F, + 0.0F, + Tiers.DIAMOND.getIncorrectBlocksForDrops(), + 18, + AntarchyFabricItems::bloodCrystalRepairIngredient + ); + + + public static final DeferredItem NIGHTMARE_SCALE = ITEMS.registerSimpleItem("nightmare_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant()); + + + public static final DeferredItem PRIMORDIAL_SCUTE = ITEMS.registerSimpleItem("primordial_scute", + new Item.Properties().rarity(Rarity.UNCOMMON)); + + + + public static final DeferredItem DUPLICATOR_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DUPLICATOR_LOG); + + + public static final DeferredItem OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_LOG); + + + public static final DeferredItem OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_WOOD); + + + public static final DeferredItem MOSSY_OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_OURANWOOD_LOG); + + + public static final DeferredItem MOSSY_OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_OURANWOOD_WOOD); + + + public static final DeferredItem STRIPPED_OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_OURANWOOD_LOG); + + + public static final DeferredItem STRIPPED_OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_OURANWOOD_WOOD); + + + public static final DeferredItem OURANWOOD_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_PLANKS); + + + public static final DeferredItem OURANWOOD_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_STAIRS); + + + public static final DeferredItem OURANWOOD_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_SLAB); + + + public static final DeferredItem OURANWOOD_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_FENCE); + + + public static final DeferredItem OURANWOOD_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_FENCE_GATE); + + + public static final DeferredItem OURANWOOD_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_DOOR); + + + public static final DeferredItem OURANWOOD_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_TRAPDOOR); + + + public static final DeferredItem OURANWOOD_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_PRESSURE_PLATE); + + + public static final DeferredItem OURANWOOD_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_BUTTON); + + + public static final DeferredItem OURANWOOD_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_LEAVES); + + + public static final DeferredItem OURANWOOD_ACORN = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.OURANWOOD_ACORN_BLOCK); + + + public static final DeferredItem PEACH_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_LOG); + + + public static final DeferredItem PEACH_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_WOOD); + + + public static final DeferredItem STRIPPED_PEACH_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_PEACH_LOG); + + + public static final DeferredItem STRIPPED_PEACH_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_PEACH_WOOD); + + + public static final DeferredItem PEACH_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_PLANKS); + + + public static final DeferredItem PEACH_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_STAIRS); + + + public static final DeferredItem PEACH_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_SLAB); + + + public static final DeferredItem PEACH_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_FENCE); + + + public static final DeferredItem PEACH_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_FENCE_GATE); + + + public static final DeferredItem PEACH_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_DOOR); + + + public static final DeferredItem PEACH_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_TRAPDOOR); + + + public static final DeferredItem PEACH_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_PRESSURE_PLATE); + + + public static final DeferredItem PEACH_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_BUTTON); + + + public static final DeferredItem PEACH_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_LEAVES); + + + public static final DeferredItem PEACH_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PEACH_SAPLING); + + + public static final DeferredItem ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ORANGE_MILKWEED); + + + public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PINK_MILKWEED); + + + public static final DeferredItem CAMELLIA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CAMELLIA); + + + public static final DeferredItem SPIDER_LILY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SPIDER_LILY); + + + public static final DeferredItem OURANWOOD_SIGN_ITEM = ITEMS.register("ouranwood_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyFabricBlocks.OURANWOOD_SIGN.get(), AntarchyFabricBlocks.OURANWOOD_WALL_SIGN.get())); + + + public static final DeferredItem OURANWOOD_HANGING_SIGN_ITEM = ITEMS.register("ouranwood_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyFabricBlocks.OURANWOOD_HANGING_SIGN.get(), AntarchyFabricBlocks.OURANWOOD_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + + + public static final DeferredItem OURANWOOD_BOAT = ITEMS.register("ouranwood_boat", + () -> new OuranwoodBoatOnlyItem(AntarchyFabricEntities.OURANWOOD_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem OURANWOOD_CHEST_BOAT = ITEMS.register("ouranwood_chest_boat", + () -> new OuranwoodChestBoatItem(AntarchyFabricEntities.OURANWOOD_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem PEACH_SIGN_ITEM = ITEMS.register("peach_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyFabricBlocks.PEACH_SIGN.get(), AntarchyFabricBlocks.PEACH_WALL_SIGN.get())); + + + public static final DeferredItem PEACH_HANGING_SIGN_ITEM = ITEMS.register("peach_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyFabricBlocks.PEACH_HANGING_SIGN.get(), AntarchyFabricBlocks.PEACH_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + + + public static final DeferredItem PEACH_BOAT = ITEMS.register("peach_boat", + () -> new com.craisinlord.antarchy.content.item.PeachBoatOnlyItem(AntarchyFabricEntities.PEACH_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem PEACH_CHEST_BOAT = ITEMS.register("peach_chest_boat", + () -> new com.craisinlord.antarchy.content.item.PeachChestBoatItem(AntarchyFabricEntities.PEACH_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem DUPLICATOR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DUPLICATOR_SAPLING); + + + public static final DeferredItem RED_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RED_ANT_NEST); + + + public static final DeferredItem BROWN_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROWN_ANT_NEST); + + + public static final DeferredItem RAINBOW_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RAINBOW_ANT_NEST); + + + public static final DeferredItem URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_ORE); + + + public static final DeferredItem DEEPSLATE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEEPSLATE_URANIUM_ORE); + + + public static final DeferredItem TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_ORE); + + + public static final DeferredItem DEEPSLATE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEEPSLATE_TITANIUM_ORE); + + + public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_BLOCK); + + + public static final DeferredItem TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_BLOCK); + + + public static final DeferredItem RAW_URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RAW_URANIUM_BLOCK); + + + public static final DeferredItem RAW_TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RAW_TITANIUM_BLOCK); + + + public static final DeferredItem CUT_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_URANIUM); + + + public static final DeferredItem CUT_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_TITANIUM); + + + public static final DeferredItem CUT_URANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_URANIUM_SLAB); + + + public static final DeferredItem CUT_TITANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_TITANIUM_SLAB); + + + public static final DeferredItem CUT_URANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_URANIUM_STAIRS); + + + public static final DeferredItem CUT_TITANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_TITANIUM_STAIRS); + + + public static final DeferredItem CHISELED_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_URANIUM); + + + public static final DeferredItem CHISELED_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_TITANIUM); + + + public static final DeferredItem URANIUM_BULB_ITEM = ITEMS.register("uranium_bulb", + () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyFabricBlocks.URANIUM_BULB.get(), new Item.Properties())); + + + public static final DeferredItem TITANIUM_BULB_ITEM = ITEMS.register("titanium_bulb", + () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyFabricBlocks.TITANIUM_BULB.get(), new Item.Properties())); + + + public static final DeferredItem URANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_DOOR); + + + public static final DeferredItem TITANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_DOOR); + + + public static final DeferredItem URANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_TRAPDOOR); + + + public static final DeferredItem TITANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_TRAPDOOR); + + + public static final DeferredItem URANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_BARS); + + + public static final DeferredItem TITANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_BARS); + + + public static final DeferredItem ANTIMETAL_ITEM = ITEMS.register("antimetal", + () -> new AntimetalBlockItem(AntarchyFabricBlocks.ANTIMETAL.get(), new Item.Properties())); + + + public static final DeferredItem POLISHED_ANTIMETAL_ITEM = ITEMS.register("polished_antimetal", + () -> new AntimetalBlockItem(AntarchyFabricBlocks.POLISHED_ANTIMETAL.get(), new Item.Properties())); + + + public static final DeferredItem ANTIMETAL_SCAFFOLDING_ITEM = ITEMS.register("antimetal_scaffolding", + () -> new AntimetalScaffoldingItem(AntarchyFabricBlocks.ANTIMETAL_SCAFFOLDING.get(), new Item.Properties())); + + + public static final DeferredItem SMALL_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SMALL_BLOOD_CRYSTAL_BUD); + + + public static final DeferredItem MEDIUM_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MEDIUM_BLOOD_CRYSTAL_BUD); + + + public static final DeferredItem LARGE_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LARGE_BLOOD_CRYSTAL_BUD); + + + public static final DeferredItem BUDDING_BLOOD_CRYSTAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BUDDING_BLOOD_CRYSTAL); + + + public static final DeferredItem BLOOD_CRYSTAL_ITEM = ITEMS.register("blood_crystal_block", + () -> new net.minecraft.world.item.BlockItem(AntarchyFabricBlocks.BLOOD_CRYSTAL.get(), new Item.Properties())); + + + public static final DeferredItem BLOOD_CRYSTAL_CRYSTAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BLOOD_CRYSTAL_CRYSTAL); + + + public static final DeferredItem DREAM_SAND_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SAND); + + + public static final DeferredItem DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SANDSTONE); + + + public static final DeferredItem CHISELED_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_DREAM_SANDSTONE); + + + public static final DeferredItem CUT_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_DREAM_SANDSTONE); + + + public static final DeferredItem SMOOTH_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SMOOTH_DREAM_SANDSTONE); + + + public static final DeferredItem DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SANDSTONE_STAIRS); + + + public static final DeferredItem DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SANDSTONE_SLAB); + + + public static final DeferredItem DREAM_SANDSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_SANDSTONE_WALL); + + + public static final DeferredItem SMOOTH_DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SMOOTH_DREAM_SANDSTONE_STAIRS); + + + public static final DeferredItem SMOOTH_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SMOOTH_DREAM_SANDSTONE_SLAB); + + + public static final DeferredItem CUT_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_DREAM_SANDSTONE_SLAB); + + + public static final DeferredItem DUCT_TAPE_ITEM = ITEMS.register("duct_tape", + () -> new DuctTapeBlockItem(AntarchyFabricBlocks.DUCT_TAPE.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem INFESTED_ROOTED_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.INFESTED_ROOTED_DIRT); + + + public static final DeferredItem INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.INFESTED_COARSE_DIRT); + + + public static final DeferredItem NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE); + + + public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_NYXITE); + + + public static final DeferredItem CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_NYXITE); + + + public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICKS); + + + public static final DeferredItem NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_STAIRS); + + + public static final DeferredItem NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_SLAB); + + + public static final DeferredItem NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_WALL); + + + public static final DeferredItem POLISHED_NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_NYXITE_STAIRS); + + + public static final DeferredItem POLISHED_NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_NYXITE_SLAB); + + + public static final DeferredItem POLISHED_NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_NYXITE_WALL); + + + public static final DeferredItem NYXITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICK_STAIRS); + + + public static final DeferredItem NYXITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICK_SLAB); + + + public static final DeferredItem NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_BRICK_WALL); + + + public static final DeferredItem SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE); + + + public static final DeferredItem POLISHED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_SHELLSTONE); + + + public static final DeferredItem SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_BRICKS); + + + public static final DeferredItem CHISELED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_SHELLSTONE); + + + public static final DeferredItem MOSSY_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICKS); + + + public static final DeferredItem CRACKED_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CRACKED_SHELLSTONE_BRICKS); + + + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICK_STAIRS); + + + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICK_SLAB); + + + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MOSSY_SHELLSTONE_BRICK_WALL); + + + public static final DeferredItem SHELLSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_STAIRS); + + + public static final DeferredItem SHELLSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_SLAB); + + + public static final DeferredItem SHELLSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_WALL); + + + public static final DeferredItem POLISHED_SHELLSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_SHELLSTONE_STAIRS); + + + public static final DeferredItem POLISHED_SHELLSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_SHELLSTONE_SLAB); + + + public static final DeferredItem POLISHED_SHELLSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_SHELLSTONE_WALL); + + + public static final DeferredItem SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_BRICK_STAIRS); + + + public static final DeferredItem SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_BRICK_SLAB); + + + public static final DeferredItem SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SHELLSTONE_BRICK_WALL); + + + public static final DeferredItem TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("triffid_goo_block", + () -> new com.craisinlord.antarchy.content.item.TriffidGooBlockItem(AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), new Item.Properties())); + + + public static final DeferredItem PALE_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.PALE_NYXITE); + + + public static final DeferredItem NYXITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.NYXITE_SPIKE); + + + public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POTENT_NYXITE); + + + public static final DeferredItem UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.UMBRAL_MOSS_BLOCK); + + + public static final DeferredItem UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.UMBRAL_MOSS_CARPET); + + + public static final DeferredItem BLUSH_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BLUSH_MOSS_BLOCK); + + + public static final DeferredItem BLUSH_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BLUSH_MOSS_CARPET); + + + public static final DeferredItem DREAM_TORCH_ITEM = ITEMS.register("dream_torch", + () -> new StandingAndWallBlockItem(AntarchyFabricBlocks.DREAM_TORCH.get(), AntarchyFabricBlocks.DREAM_WALL_TORCH.get(), new Item.Properties(), Direction.UP)); + + + public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_LANTERN); + + + public static final DeferredItem DREAM_CAMPFIRE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DREAM_CAMPFIRE); + + + public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BED_BUG_EGG); + + + public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.WASP_NEST); + + + public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.HUSHWEED); + + + public static final DeferredItem BILE_BUCKET = ITEMS.register("bile_bucket", + () -> new BucketItem(AntarchyFabricMisc.BILE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + + + public static final DeferredItem ICHOR_BUCKET = ITEMS.register("ichor_bucket", + () -> new BucketItem(AntarchyFabricMisc.ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + + + public static final DeferredItem ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket", + () -> new BucketItem(AntarchyFabricMisc.ANTIWATER.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + + + public static final DeferredItem LUMEN_BUCKET = ITEMS.register("lumen_bucket", + () -> new BucketItem(AntarchyFabricMisc.LUMEN.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + + + public static final DeferredItem LUMEN_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.LUMEN_FROGLIGHT); + + + public static final DeferredItem ROSEATE_FROGLIGHT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROSEATE_FROGLIGHT); + + + public static final DeferredItem CLOUD_BUCKET = ITEMS.register("cloud_bucket", + () -> new com.craisinlord.antarchy.content.item.CloudBucketItem(AntarchyFabricBlocks.CLOUD_BLOCK.get(), new Item.Properties().craftRemainder(Items.BUCKET))); + + + public static final DeferredItem BLOOD_CRYSTAL_SHARD = ITEMS.register("blood_crystal_shard", + () -> new com.craisinlord.antarchy.content.item.BloodCrystalShardItem(new Item.Properties())); + + + public static final DeferredItem BLOOD_CRYSTAL_APPLE = ITEMS.register("blood_crystal_apple", + () -> new BloodCrystalAppleItem(new Item.Properties() + .rarity(Rarity.RARE) + .food(new net.minecraft.world.food.FoodProperties.Builder() + .nutrition(4) + .saturationModifier(1.2f) + .effect(new MobEffectInstance(net.minecraft.world.effect.MobEffects.REGENERATION, 100, 1), 1.0f) + .alwaysEdible() + .build()))); + + + public static final DeferredItem BLOOD_CRYSTAL_HELMET = ITEMS.register("blood_crystal_helmet", + () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.HELMET, new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem BLOOD_CRYSTAL_CHESTPLATE = ITEMS.register("blood_crystal_chestplate", + () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.CHESTPLATE, new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem BLOOD_CRYSTAL_LEGGINGS = ITEMS.register("blood_crystal_leggings", + () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem BLOOD_CRYSTAL_BOOTS = ITEMS.register("blood_crystal_boots", + () -> new BloodCrystalArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.BLOOD_CRYSTAL_ARMOR_MATERIAL.get()), ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem BLOOD_CRYSTAL_KATANA = ITEMS.register("blood_crystal_katana", + () -> new BloodCrystalKatanaItem( + BLOOD_CRYSTAL_KATANA_TIER, + new Item.Properties().stacksTo(1).durability(1200).rarity(Rarity.RARE), + AntarchySettings.bloodCrystalKatanaAttackDamage(), + -2.2F + )); + + + public static final DeferredItem MANTIS_CLAW = ITEMS.registerSimpleItem("mantis_claw", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem KING_SCALE = ITEMS.register("king_scale", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem STINK_BUG_ITEM = ITEMS.register("stink_bug", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem JUMPY_BUG_LEG = ITEMS.register("jumpy_bug_leg", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem JUMPY_BOOTS = ITEMS.register("jumpy_boots", + () -> new com.craisinlord.antarchy.content.item.JumpyBootsItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.JUMPY_BOOTS_ARMOR_MATERIAL.get()), + new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)) + )); + + + public static final DeferredItem BRUTALFLY_WING = ITEMS.registerSimpleItem("brutalfly_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", + () -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480))); + + + public static final DeferredItem CORNEA_EAR = ITEMS.register("cornea_ear", + () -> new CorneaEarItem(new Item.Properties() + .rarity(Rarity.UNCOMMON) + .food(new FoodProperties.Builder() + .nutrition(2) + .saturationModifier(0.4F) + .build()))); + + + public static final DeferredItem CORN = ITEMS.register("corn", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(3) + .saturationModifier(0.6F) + .build()))); + + + public static final DeferredItem CORN_SEEDS = ITEMS.register("corn_seeds", + () -> new net.minecraft.world.item.ItemNameBlockItem(AntarchyFabricBlocks.CORN_CROP.get(), new Item.Properties())); + + + public static final DeferredItem RAW_VENISON = ITEMS.register("raw_venison", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(2) + .saturationModifier(0.3F) + .build()))); + + + public static final DeferredItem COOKED_VENISON = ITEMS.register("cooked_venison", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(6) + .saturationModifier(0.8F) + .build()))); + + + public static final DeferredItem PEACH = ITEMS.register("peach", + () -> new com.craisinlord.antarchy.content.item.PeachItem()); + + + public static final DeferredItem PEACH_PIE = ITEMS.register("peach_pie", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.3F) + .build()))); + + + public static final DeferredItem CORNBREAD = ITEMS.register("cornbread", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.9F) + .build()))); + + + public static final DeferredItem POPCORN = ITEMS.register("popcorn", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(1) + .saturationModifier(0.1F) + .build()))); + + + public static final DeferredItem RAW_CORNDOG = ITEMS.register("raw_corndog", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.7F) + .build()))); + + + public static final DeferredItem COOKED_CORNDOG = ITEMS.register("cooked_corndog", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(14) + .saturationModifier(1.1F) + .build()))); + + + public static final DeferredItem HIGH_FRUCTOSE_CORN_SYRUP = ITEMS.register("high_fructose_corn_syrup", + () -> new com.craisinlord.antarchy.content.item.HighFructoseCornSyrupItem(new Item.Properties() + .stacksTo(16) + .food(new FoodProperties.Builder() + .nutrition(0) + .saturationModifier(0.0F) + .alwaysEdible() + .build()))); + + + public static final DeferredItem ROOT_BEER = ITEMS.register("root_beer", + () -> new com.craisinlord.antarchy.content.item.RootBeerItem(new Item.Properties() + .stacksTo(16) + .food(new FoodProperties.Builder() + .nutrition(4) + .saturationModifier(0.4F) + .effect(new MobEffectInstance(MobEffects.REGENERATION, 100, 0), 1.0F) + .alwaysEdible() + .build()))); + + + public static final DeferredItem TRIFFID_GOO = ITEMS.registerSimpleItem("triffid_goo", + new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem VORTEX_EYE = ITEMS.register("vortex_eye", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem RAW_URANIUM_SCRAP = ITEMS.registerSimpleItem("raw_uranium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem RAW_TITANIUM_SCRAP = ITEMS.registerSimpleItem("raw_titanium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem RAW_URANIUM = ITEMS.registerSimpleItem("raw_uranium", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem RAW_TITANIUM = ITEMS.registerSimpleItem("raw_titanium", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem MUD_PIE = ITEMS.register("mud_pie", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(10) + .saturationModifier(0.9F) + .effect(new MobEffectInstance(MobEffects.CONFUSION, 200), 1.0F) + .build()))); + + + public static final DeferredItem RAINBOW_SUGAR = ITEMS.register("rainbow_sugar", + () -> new RainbowSugarItem(new Item.Properties() + .rarity(Rarity.UNCOMMON) + .food(new FoodProperties.Builder().nutrition(1).saturationModifier(0.0F).alwaysEdible().build()))); + + + public static final DeferredItem URANIUM_NUGGET = ITEMS.registerSimpleItem("uranium_nugget", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem TITANIUM_NUGGET = ITEMS.registerSimpleItem("titanium_nugget", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem URANIUM_INGOT = ITEMS.registerSimpleItem("uranium_ingot", new Item.Properties().rarity(Rarity.UNCOMMON).fireResistant()); + + + public static final DeferredItem TITANIUM_INGOT = ITEMS.registerSimpleItem("titanium_ingot", new Item.Properties().rarity(Rarity.UNCOMMON).fireResistant()); + + + public static final DeferredItem MOLEVORE_NOSE = ITEMS.registerSimpleItem("molevore_nose", new Item.Properties().rarity(Rarity.RARE)); + + + public static final DeferredItem MOLEWORM_ITEM = ITEMS.register("moleworm", + () -> new Item(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(1) + .saturationModifier(0.0F) + .effect(new MobEffectInstance(MobEffects.HUNGER, 600), 0.8F) + .build()))); + + + public static final DeferredItem CLOUD_SHARK_FIN = ITEMS.registerSimpleItem("cloud_shark_fin", new Item.Properties().rarity(Rarity.UNCOMMON)); + + + public static final DeferredItem CLOUD_SHARK_FIN_SOUP = ITEMS.register("cloud_shark_fin_soup", + () -> new CloudSharkFinSoupItem(new Item.Properties() + .stacksTo(1) + .craftRemainder(Items.BOWL) + .food(new FoodProperties.Builder() + .nutrition(10) + .saturationModifier(0.8F) + .effect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, 600, 0), 1.0F) + .effect(new MobEffectInstance(MobEffects.SLOW_FALLING, 600, 0), 1.0F) + .build()))); + + + public static final DeferredItem KRAKEN_TOOTH = ITEMS.register("kraken_tooth", + () -> new Item(new Item.Properties().rarity(net.minecraft.world.item.Rarity.RARE))); + + + public static final DeferredItem BASILISK_FANG = ITEMS.registerSimpleItem("basilisk_fang", new Item.Properties().rarity(Rarity.RARE)); + + + public static final DeferredItem BASILISK_DAGGER = ITEMS.register("basilisk_dagger", + () -> new BasiliskDaggerItem(Tiers.IRON, new Item.Properties().rarity(Rarity.RARE), 4, -1.8F)); + + + public static final DeferredItem EMPEROR_SCORPION_STINGER = ITEMS.registerSimpleItem("emperor_scorpion_stinger", new Item.Properties().rarity(Rarity.RARE)); + + + public static final DeferredItem SCORPION_WHIP = ITEMS.register("scorpion_whip", + () -> new ScorpionWhipItem(Tiers.IRON, new Item.Properties().rarity(Rarity.RARE).durability(384))); + + + public static final DeferredItem MOGGLES = ITEMS.register("moggles", + () -> new MogglesItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.MOGGLES_ARMOR_MATERIAL.get()), new Item.Properties().rarity(Rarity.RARE).stacksTo(1))); + + + public static final DeferredItem FALLEN_KING_CROWN = ITEMS.register("fallen_king_crown", + () -> new com.craisinlord.antarchy.content.item.FallenKingCrownItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.FALLEN_KING_CROWN_ARMOR_MATERIAL.get()), + new Item.Properties().rarity(Rarity.RARE) + )); + + + public static final DeferredItem ULTIMATE_HELMET = ITEMS.register("ultimate_helmet", + () -> new UltimateArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.ULTIMATE_ARMOR_MATERIAL.get()), + ArmorItem.Type.HELMET, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.HELMET.getDurability(41)) + )); + + + public static final DeferredItem ULTIMATE_CHESTPLATE = ITEMS.register("ultimate_chestplate", + () -> new UltimateArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.ULTIMATE_ARMOR_MATERIAL.get()), + ArmorItem.Type.CHESTPLATE, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.CHESTPLATE.getDurability(41)) + )); + + + public static final DeferredItem ULTIMATE_LEGGINGS = ITEMS.register("ultimate_leggings", + () -> new UltimateArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.ULTIMATE_ARMOR_MATERIAL.get()), + ArmorItem.Type.LEGGINGS, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.LEGGINGS.getDurability(41)) + )); + + + public static final DeferredItem ULTIMATE_BOOTS = ITEMS.register("ultimate_boots", + () -> new UltimateArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.ULTIMATE_ARMOR_MATERIAL.get()), + ArmorItem.Type.BOOTS, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.BOOTS.getDurability(41)) + )); + + + public static final DeferredItem ULTIMATE_SWORD = ITEMS.register("ultimate_sword", + () -> new UltimateSwordItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), + AntarchySettings::ultimateSwordAttackDamage, + -2.4F + )); + + + public static final DeferredItem ULTIMATE_PICKAXE = ITEMS.register("ultimate_pickaxe", + () -> new UltimatePickaxeItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), + AntarchySettings::ultimatePickaxeAttackDamage, + -2.8F + )); + + + public static final DeferredItem ULTIMATE_AXE = ITEMS.register("ultimate_axe", + () -> new UltimateAxeItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), + AntarchySettings::ultimateAxeAttackDamage, + -3.0F + )); + + + public static final DeferredItem ULTIMATE_SHOVEL = ITEMS.register("ultimate_shovel", + () -> new UtlimateShovelItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), + AntarchySettings::ultimateShovelAttackDamage, + -3.0F + )); + + + public static final DeferredItem ULTIMATE_HOE = ITEMS.register("ultimate_hoe", + () -> new UltimateHoeItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), + AntarchySettings::ultimateHoeAttackDamage, + 0.0F + )); + + + public static final DeferredItem ULTIMATE_BOW = ITEMS.register("ultimate_bow", + () -> new UltimateBowItem(new Item.Properties().stacksTo(1).durability(768).rarity(Rarity.EPIC).fireResistant())); + + + public static final DeferredItem ULTIMATE_CROSSBOW = ITEMS.register("ultimate_crossbow", + () -> new UltimateCrossbowItem(new Item.Properties().stacksTo(1).durability(1024).rarity(Rarity.EPIC).fireResistant())); + + + public static final DeferredItem NIGHTMARE_HELMET = ITEMS.register("nightmare_helmet", + () -> new NightmareArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.NIGHTMARE_ARMOR_MATERIAL.get()), + ArmorItem.Type.HELMET, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.HELMET.getDurability(41)) + )); + + + public static final DeferredItem NIGHTMARE_CHESTPLATE = ITEMS.register("nightmare_chestplate", + () -> new NightmareArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.NIGHTMARE_ARMOR_MATERIAL.get()), + ArmorItem.Type.CHESTPLATE, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.CHESTPLATE.getDurability(41)) + )); + + + public static final DeferredItem NIGHTMARE_LEGGINGS = ITEMS.register("nightmare_leggings", + () -> new NightmareArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.NIGHTMARE_ARMOR_MATERIAL.get()), + ArmorItem.Type.LEGGINGS, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.LEGGINGS.getDurability(41)) + )); + + + public static final DeferredItem NIGHTMARE_BOOTS = ITEMS.register("nightmare_boots", + () -> new NightmareArmorItem( + net.minecraft.core.Holder.direct(AntarchyFabricMisc.NIGHTMARE_ARMOR_MATERIAL.get()), + ArmorItem.Type.BOOTS, + new Item.Properties() + .rarity(Rarity.EPIC) + .fireResistant() + .durability(ArmorItem.Type.BOOTS.getDurability(41)) + )); + + + public static final DeferredItem NIGHTMARE_SWORD = ITEMS.register("nightmare_sword", + () -> new NightmareSwordItem( + ULTIMATE_TIER, + new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), + -2.4F + )); + + + public static final DeferredItem SHRINK_RAY = ITEMS.register("shrink_ray", + () -> new SizeRayItem( + new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(), + AntarchyFabricEntities.SHRINK_RAY_PROJECTILE, + SizeRayProjectileEntity.SizeRayType.SHRINK, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/shrink_ray.geo.json"), + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/models/item/shrink_ray.png"), + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/shrink_ray.animation.json"), + "shrink_ray_active" + )); + + + public static final DeferredItem GROWTH_RAY = ITEMS.register("growth_ray", + () -> new SizeRayItem( + new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(), + AntarchyFabricEntities.GROWTH_RAY_PROJECTILE, + SizeRayProjectileEntity.SizeRayType.GROWTH, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/growth_ray.geo.json"), + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/models/item/growth_ray.png"), + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/growth_ray.animation.json"), + "growth_ray_active" + )); + + + public static final DeferredItem GRAVITY_GUN = ITEMS.register("gravity_gun", + () -> new GravityGunItem(new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant())); + + + // Temporarily disabled: keeping the code but not registering the item for now. + // public static final DeferredItem MINERS_DREAM = ITEMS.register("miners_dream", + // () -> new MinersDreamItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); + + + public static final DeferredItem SQUIDZOOKA = ITEMS.register("squidzooka", + () -> new SquidzookaItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); + + + public static final DeferredItem BATTLE_AXE = ITEMS.register("battle_axe", + () -> new BattleAxeItem( + Tiers.NETHERITE, + new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant(), + AntarchySettings::battleAxeAttackDamage, + -3.1F + )); + + + public static final DeferredItem DIAMOND_MINECART_ITEM = ITEMS.register("diamond_minecart", + () -> new DiamondMinecartItem(AntarchyFabricEntities.DIAMOND_MINECART, new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); + + + public static final DeferredItem REVERIE_BOTTLE = ITEMS.register("reverie_bottle", + () -> new ReverieBottleItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); + + + public static final DeferredItem BIG_BERTHA_BLADE = ITEMS.registerSimpleItem( + "big_bertha_blade", + new Item.Properties().rarity(Rarity.EPIC).fireResistant() + ); + + + public static final DeferredItem BIG_BERTHA_HANDLE = ITEMS.registerSimpleItem( + "big_bertha_handle", + new Item.Properties().rarity(Rarity.EPIC).fireResistant() + ); + + + public static final DeferredItem BIG_BERTHA_HILT = ITEMS.registerSimpleItem( + "big_bertha_hilt", + new Item.Properties().rarity(Rarity.EPIC).fireResistant() + ); + + + public static final DeferredItem BIG_BERTHA = ITEMS.register("big_bertha", + () -> new BigBerthaItem( + Tiers.NETHERITE, + new Item.Properties() + .stacksTo(1) + .rarity(Rarity.EPIC) + .fireResistant() + )); + + + + public static final DeferredItem EASTER_BUNNY_SPAWN_EGG = ITEMS.register("easter_bunny_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.EASTER_BUNNY, 0xFFF2B2, 0xFF85B5, new Item.Properties())); + + + public static final DeferredItem FLYING_SQUIRREL_SPAWN_EGG = ITEMS.register("flying_squirrel_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.FLYING_SQUIRREL, 0x7D6649, 0xDCC59C, new Item.Properties())); + + + public static final DeferredItem CATERPILLAR_SPAWN_EGG = ITEMS.register("caterpillar_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.CATERPILLAR, 0xA8D96A, 0xF4E04D, new Item.Properties())); + + + public static final DeferredItem BUTTERFLY_SPAWN_EGG = ITEMS.register("butterfly_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BUTTERFLY, 0x7A4A1E, 0xFF7A00, new Item.Properties())); + + + public static final DeferredItem REVERIE_SPAWN_EGG = ITEMS.register("reverie_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.REVERIE, 0xF2F2F2, 0xBFC3C7, new Item.Properties())); + + + public static final DeferredItem BRUTALFLY_SPAWN_EGG = ITEMS.register("brutalfly_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BRUTALFLY, 0x4A2214, 0xFF8A1D, new Item.Properties().rarity(Rarity.EPIC))); + + + public static final DeferredItem RED_ANT_SPAWN_EGG = ITEMS.register("red_ant_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.RED_ANT, 0xA31818, 0x2B0909, new Item.Properties())); + + + public static final DeferredItem BROWN_ANT_SPAWN_EGG = ITEMS.register("brown_ant_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BROWN_ANT, 0x6A4320, 0x26160A, new Item.Properties())); + + + public static final DeferredItem RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties())); + + + public static final DeferredItem MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.MOLEWORM, 0xB8B8B8, 0x8A623A, new Item.Properties())); + + + public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.MANTIS, 0xF8F8F2, 0x63B44A, new Item.Properties())); + + + public static final DeferredItem ALPHA_MANTIS_SPAWN_EGG = ITEMS.register("alpha_mantis_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.ALPHA_MANTIS, 0x8FDD6C, 0x2F5D22, new Item.Properties())); + + + public static final DeferredItem MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.TRIFFID, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem APPLE_COW_SPAWN_EGG = ITEMS.register("apple_cow_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.APPLE_COW, 0xFF1A1A, 0x32FF32, new Item.Properties())); + + + public static final DeferredItem GOLDEN_APPLE_COW_SPAWN_EGG = ITEMS.register("golden_apple_cow_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.GOLDEN_APPLE_COW, 0xFFE14A, 0x32FF32, new Item.Properties())); + + + public static final DeferredItem ENCHANTED_GOLDEN_APPLE_COW_SPAWN_EGG = ITEMS.register("enchanted_golden_apple_cow_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW, 0x7040B6, 0xFFE14A, new Item.Properties())); + + + public static final DeferredItem DR_TRAYAURUS_SPAWN_EGG = ITEMS.register("dr_trayaurus_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.DR_TRAYAURUS, 0xB7A27B, 0x4A3D29, new Item.Properties())); + + + public static final DeferredItem WASP_SPAWN_EGG = ITEMS.register("wasp_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.WASP, 0x111111, 0xF1D800, new Item.Properties())); + + + public static final DeferredItem BOMBER_SPAWN_EGG = ITEMS.register("bomber_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties())); + + + public static final DeferredItem CLOUD_SHARK_SPAWN_EGG = ITEMS.register("cloud_shark_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); + + + public static final DeferredItem KRAKEN_SPAWN_EGG = ITEMS.register("kraken_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.KRAKEN, 0x163C53, 0x4F8E99, new Item.Properties().rarity(Rarity.EPIC))); + + + public static final DeferredItem MISSILE_SQUID_SPAWN_EGG = ITEMS.register("missile_squid_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.MISSILE_SQUID, 0xD88FA7, 0x8D5269, new Item.Properties().rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem OCTOPUS_BOMB_SPAWN_EGG = ITEMS.register("octopus_bomb_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.OCTOPUS_BOMB, 0xC882C8, 0x5C1A7A, new Item.Properties().rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem NIGHTMARE_SPAWN_EGG = ITEMS.register("nightmare_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.NIGHTMARE, 0x22121C, 0xB51B2D, new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem BED_BUG_SPAWN_EGG = ITEMS.register("bed_bug_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BED_BUG, 0x3B2218, 0x611111, new Item.Properties())); + + + public static final DeferredItem LUCID_SPAWN_EGG = ITEMS.register("lucid_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.LUCID, 0xE53935, 0xF4D03F, new Item.Properties().rarity(Rarity.RARE))); + + + public static final DeferredItem SCORPION_SPAWN_EGG = ITEMS.register("scorpion_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.SCORPION, 0xA8D8FF, 0xE04B5A, new Item.Properties())); + + + public static final DeferredItem BASILISK_SPAWN_EGG = ITEMS.register("basilisk_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.BASILISK, 0x4A7C40, 0xD4A040, new Item.Properties())); + + + public static final DeferredItem EMPEROR_SCORPION_SPAWN_EGG = ITEMS.register("emperor_scorpion_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.EMPEROR_SCORPION, 0x3A3242, 0xD8CDB4, new Item.Properties())); + + + public static final DeferredItem LUCID_EYE = ITEMS.register("lucid_eye", + () -> new LucidEyeItem(new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON))); + + + public static final DeferredItem LUCID_PEARL = ITEMS.register("lucid_pearl", + () -> new LucidPearlItem( + new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON), + AntarchyFabricEntities.LUCID_PEARL_PROJECTILE + )); + + + public static final DeferredItem WATER_CANNON = ITEMS.register("water_cannon", + () -> new WaterCannonItem(new Item.Properties().stacksTo(1).durability(192).rarity(Rarity.RARE))); + + + public static final DeferredItem PRIMORDIAL_HELMET = ITEMS.register("primordial_helmet", + () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.HELMET, + new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.HELMET.getDurability(37)))); + + + public static final DeferredItem PRIMORDIAL_CHESTPLATE = ITEMS.register("primordial_chestplate", + () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.CHESTPLATE, + new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.CHESTPLATE.getDurability(37)))); + + + public static final DeferredItem PRIMORDIAL_LEGGINGS = ITEMS.register("primordial_leggings", + () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.LEGGINGS, + new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.LEGGINGS.getDurability(37)))); + + + public static final DeferredItem PRIMORDIAL_BOOTS = ITEMS.register("primordial_boots", + () -> new PrimordialArmorItem(net.minecraft.core.Holder.direct(AntarchyFabricMisc.PRIMORDIAL_ARMOR_MATERIAL.get()), ArmorItem.Type.BOOTS, + new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)))); + + + public static final DeferredItem TORETERROR_SPAWN_EGG = ITEMS.register("toreterror_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.TORETERROR, 0x90EE90, 0x5C4033, new Item.Properties().rarity(Rarity.EPIC))); + + + public static final DeferredItem CHEEP_SPAWN_EGG = ITEMS.register("cheep_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.CHEEP, 0xFF00AA, 0x00FF44, new Item.Properties())); + + + // Dorrie is not part of this update yet. + // public static final DeferredItem DORRIE_SPAWN_EGG = ITEMS.register("dorrie_spawn_egg", + // () -> new DeferredSpawnEggItem(AntarchyFabricEntities.DORRIE, 0x6F8CFF, 0xD2F2FF, new Item.Properties())); + + + public static final DeferredItem OURANWOOD_DEER_SPAWN_EGG = ITEMS.register("ouranwood_deer_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.OURANWOOD_DEER, 0x8A6D4B, 0xE8D9B5, new Item.Properties())); + + + public static final DeferredItem GLIMMER_SPAWN_EGG = ITEMS.register("glimmer_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.GLIMMER, 0x7DFFFF, 0x2AC7D0, new Item.Properties())); + + + public static final DeferredItem ELKA_SPAWN_EGG = ITEMS.register("elka_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyFabricEntities.ELKA, 0x6B2FA0, 0xFFFFFF, new Item.Properties())); + + + public static final DeferredItem SPIRIT_APPLE = ITEMS.register("spirit_apple", + () -> new com.craisinlord.antarchy.content.item.SpiritAppleItem(new Item.Properties() + .food(new FoodProperties.Builder() + .nutrition(4) + .saturationModifier(0.3F) + .build()))); + + + public static final DeferredItem GLIMMER_BOTTLE = ITEMS.register("glimmer_bottle", + com.craisinlord.antarchy.content.item.GlimmerBottleItem::new); + + + + public static Item cloudBucketItem() { + return CLOUD_BUCKET.get(); + } + + + + public static Item diamondMinecartItem() { + return DIAMOND_MINECART_ITEM.get(); + } + + + + public static Ingredient bloodCrystalRepairIngredient() { + return Ingredient.of(BuiltInRegistries.ITEM.getOptional(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blood_crystal_shard")) + .orElse(Items.AIR)); + } + + + + public static Ingredient ultimateRepairIngredient() { + return Ingredient.of(TITANIUM_INGOT.get()); + } + + + public static void register() { + ITEMS.register(); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java new file mode 100644 index 00000000..733835db --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -0,0 +1,994 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +import com.craisinlord.antarchy.content.worldgen.overworld.CornPatchFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenSpireFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricMisc { + + public static final DeferredRegister ARMOR_MATERIALS = DeferredRegister.create(Registries.ARMOR_MATERIAL, Antarchy.MODID); + + + public static final DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(Registries.PARTICLE_TYPE, Antarchy.MODID); + + + public static final DeferredRegister> FEATURES = DeferredRegister.create(Registries.FEATURE, Antarchy.MODID); + + + public static final DeferredRegister> BIOME_SOURCES = DeferredRegister.create(Registries.BIOME_SOURCE, Antarchy.MODID); + + + public static final DeferredRegister> DENSITY_FUNCTION_TYPES = DeferredRegister.create(Registries.DENSITY_FUNCTION_TYPE, Antarchy.MODID); + + + public static final DeferredRegister> ENTITY_SUB_PREDICATES = DeferredRegister.create(Registries.ENTITY_SUB_PREDICATE_TYPE, Antarchy.MODID); + + + public static final DeferredRegister ATTRIBUTES = DeferredRegister.create(Registries.ATTRIBUTE, Antarchy.MODID); + + + private static final TagKey BYPASSES_BLOODGLASS = + TagKey.create(net.minecraft.core.registries.Registries.DAMAGE_TYPE, ResourceLocation.fromNamespaceAndPath("antarchy", "bypasses_bloodglass")); + + + public static final DeferredHolder DOUBLE_DAMAGE_CHANCE = ATTRIBUTES.register( + "double_damage_chance", + () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.double_damage_chance", 0.0, 0.0, 1.0).setSyncable(true) + ); + + + public static final DeferredRegister MOB_EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, Antarchy.MODID); + + + public static final DeferredRegister POTIONS = DeferredRegister.create(Registries.POTION, Antarchy.MODID); + + + public static final DeferredRegister FLUIDS = DeferredRegister.create(Registries.FLUID, Antarchy.MODID); + + + public static final DeferredRegister> MENUS = DeferredRegister.create(Registries.MENU, Antarchy.MODID); + + + public static final DeferredHolder, net.minecraft.world.inventory.MenuType> DORRIE_INVENTORY_MENU = + MENUS.register("dorrie_inventory", () -> new net.minecraft.world.inventory.MenuType<>(com.craisinlord.antarchy.content.menu.DorrieInventoryMenu::new, FeatureFlags.DEFAULT_FLAGS)); + + + public static final DeferredRegister> DATA_COMPONENT_TYPES = + DeferredRegister.create(Registries.DATA_COMPONENT_TYPE, Antarchy.MODID); + + + public static final DeferredRegister> RECIPE_SERIALIZERS = + DeferredRegister.create(Registries.RECIPE_SERIALIZER, Antarchy.MODID); + + + public static final DeferredHolder, net.minecraft.core.component.DataComponentType> GLIMMER_VARIANT = + DATA_COMPONENT_TYPES.register("glimmer_variant", + () -> net.minecraft.core.component.DataComponentType.builder() + .persistent(com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.CODEC) + .networkSynchronized(com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.STREAM_CODEC) + .build()); + + + public static final DeferredHolder, net.minecraft.core.component.DataComponentType> AMERICAN = + DATA_COMPONENT_TYPES.register("american", + () -> net.minecraft.core.component.DataComponentType.builder() + .persistent(net.minecraft.util.Unit.CODEC) + .networkSynchronized(net.minecraft.network.codec.StreamCodec.unit(net.minecraft.util.Unit.INSTANCE)) + .build()); + + + public static final DeferredHolder, net.minecraft.world.item.crafting.RecipeSerializer> AMERICANIZE_SERIALIZER = + RECIPE_SERIALIZERS.register("americanize", () -> com.craisinlord.antarchy.content.AmericanizeRecipe.SERIALIZER); + + + public static final DeferredHolder ULTIMATE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("ultimate", + () -> new ArmorMaterial( + createUltimateArmorDefense(), + 10, + SoundEvents.ARMOR_EQUIP_DIAMOND, + AntarchyFabricItems::ultimateRepairIngredient, + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ultimate_armor"))), + 2.0F, + (float) AntarchySettings.ultimateArmorKnockbackResistance() + )); + + + public static final DeferredHolder NIGHTMARE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("nightmare", + () -> new ArmorMaterial( + createNightmareArmorDefense(), + 10, + SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(AntarchyFabricItems.NIGHTMARE_SCALE.get()), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "nightmare_armor"))), + 3.0F, + (float) AntarchySettings.nightmareArmorKnockbackResistance() + )); + + + public static final DeferredHolder PRIMORDIAL_ARMOR_MATERIAL = ARMOR_MATERIALS.register("primordial", + () -> new ArmorMaterial( + createPrimordialArmorDefense(), + 15, + SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(AntarchyFabricItems.PRIMORDIAL_SCUTE.get()), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "primordial"))), + 3.0F, + 0.1F + )); + + + public static final DeferredHolder BLOOD_CRYSTAL_ARMOR_MATERIAL = ARMOR_MATERIALS.register("blood_crystal", + () -> new ArmorMaterial( + createBloodCrystalArmorDefense(), + 30, + SoundEvents.ARMOR_EQUIP_DIAMOND, + AntarchyFabricItems::bloodCrystalRepairIngredient, + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blood_crystal"))), + 0.0F, + 0.0F + )); + + + public static final DeferredHolder MOGGLES_ARMOR_MATERIAL = ARMOR_MATERIALS.register("moggles", + () -> new ArmorMaterial( + createMogglesArmorDefense(), + 12, + SoundEvents.ARMOR_EQUIP_GOLD, + () -> Ingredient.of(Items.GOLD_INGOT), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "moggles"))), + 0.0F, + 0.0F + )); + + + public static final DeferredHolder FALLEN_KING_CROWN_ARMOR_MATERIAL = ARMOR_MATERIALS.register("fallen_king_crown", + () -> new ArmorMaterial( + createFallenKingCrownDefense(), + 25, + SoundEvents.ARMOR_EQUIP_GOLD, + () -> Ingredient.of(Items.GOLD_INGOT), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "fallen_king_crown"))), + 0.0F, + 0.0F + )); + + + public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> STINKY_GAS = PARTICLE_TYPES.register("stinky_gas", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> STINKY_FLY = PARTICLE_TYPES.register("stinky_fly", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> PEACH_LEAVES_PARTICLE = PARTICLE_TYPES.register("peach_leaves_particle", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_DOWN = PARTICLE_TYPES.register("hypnotic_gas_down", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD_DOWN = PARTICLE_TYPES.register("hypnotic_gas_cloud_down", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> FIREFLY = PARTICLE_TYPES.register("firefly", + () -> simpleParticleType()); + + + public static final DeferredHolder, SimpleParticleType> ORANGE_ASH = PARTICLE_TYPES.register("orange_ash", + () -> simpleParticleType()); + + + public static final DeferredHolder, ParticleType> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base", + () -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec)); + + + public static final DeferredHolder, ParticleType> INVERTED_GEYSER_PLUME = PARTICLE_TYPES.register("inverted_geyser_plume", + () -> particleType(InvertedGeyserParticleOptions::codec, InvertedGeyserParticleOptions::streamCodec)); + + + public static final DeferredHolder, ParticleType> INVERTED_GEYSER_POOF = PARTICLE_TYPES.register("inverted_geyser_poof", + () -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec)); + + + public static final DeferredHolder, ParticleType> INVERTED_GEYSER_ERUPTION = PARTICLE_TYPES.register("inverted_geyser_eruption", + () -> particleType(InvertedGeyserParticleOptions::codec, InvertedGeyserParticleOptions::streamCodec)); + + + public static final DeferredHolder DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new); + + + public static final DeferredHolder PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); + + + public static final DeferredHolder INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new); + + + public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); + + + public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); + + + public static final DeferredHolder BLOODGLASS_MAX_HEARTS = ATTRIBUTES.register( + "bloodglass_max_hearts", + () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.bloodglass_max_hearts", 0.0, 0.0, 8.0).setSyncable(true) + ); + + + public static final DeferredHolder DREAD_POTION = POTIONS.register("dread", + () -> new Potion(new MobEffectInstance(mobEffectHolder(DREAD), 600))); + + + public static final DeferredHolder LONG_DREAD = POTIONS.register("long_dread", + () -> new Potion("dread", new MobEffectInstance(mobEffectHolder(DREAD), 2400))); + + + public static final DeferredHolder INVERSION = POTIONS.register("inversion", + () -> new Potion(new MobEffectInstance(mobEffectHolder(INVERTED), 600))); + + + public static final DeferredHolder LONG_INVERSION = POTIONS.register("long_inversion", + () -> new Potion("inversion", new MobEffectInstance(mobEffectHolder(INVERTED), 2400))); + + + public static final DeferredHolder STINKY_POTION = POTIONS.register("stinky", + () -> new Potion(new MobEffectInstance(mobEffectHolder(STINKY), 1200))); + + + public static final DeferredHolder LONG_STINKY = POTIONS.register("long_stinky", + () -> new Potion("stinky", new MobEffectInstance(mobEffectHolder(STINKY), 2400))); + + + public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); + + + public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); + + + public static final DeferredHolder PARALYSIS = POTIONS.register("paralysis", + () -> new Potion(new MobEffectInstance(mobEffectHolder(PARALYZED), 200))); + + + public static final DeferredHolder LONG_PARALYSIS = POTIONS.register("long_paralysis", + () -> new Potion("paralysis", new MobEffectInstance(mobEffectHolder(PARALYZED), 400))); + + + public static final DeferredHolder HASTE = POTIONS.register("haste", + () -> new Potion(new MobEffectInstance(MobEffects.DIG_SPEED, 1200, 0))); + + + public static final DeferredHolder STRONG_HASTE = POTIONS.register("strong_haste", + () -> new Potion("haste", new MobEffectInstance(MobEffects.DIG_SPEED, 600, 1))); + + + public static final DeferredHolder SHRINKING = POTIONS.register("shrinking", + () -> new Potion(new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 1200, 0))); + + + public static final DeferredHolder STRONG_SHRINKING = POTIONS.register("strong_shrinking", + () -> new Potion("shrinking", new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 900, 1))); + + + public static final DeferredHolder EXTREME_SHRINKING = POTIONS.register("extreme_shrinking", + () -> new Potion("shrinking", new MobEffectInstance(mobEffectHolder(SHRINKING_EFFECT), 600, 2))); + + + public static final DeferredHolder GROWING = POTIONS.register("growing", + () -> new Potion(new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 1200, 0))); + + + public static final DeferredHolder STRONG_GROWING = POTIONS.register("strong_growing", + () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 900, 1))); + + + public static final DeferredHolder EXTREME_GROWING = POTIONS.register("extreme_growing", + () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 600, 2))); + + + public static final DeferredHolder BILE = FLUIDS.register("bile", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( + () -> AntarchyFabricContent.lookupFlowingFluid("bile"), + () -> AntarchyFabricContent.lookupFlowingFluid("flowing_bile"), + () -> AntarchyFabricContent.lookupItem("bile_bucket"), + "bile", + 4, + 1, + 5 + )); + + + public static final DeferredHolder FLOWING_BILE = FLUIDS.register("flowing_bile", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( + () -> AntarchyFabricContent.lookupFlowingFluid("bile"), + () -> AntarchyFabricContent.lookupFlowingFluid("flowing_bile"), + () -> AntarchyFabricContent.lookupItem("bile_bucket"), + "bile", + 4, + 1, + 5 + )); + + + + public static final DeferredHolder ICHOR = FLUIDS.register("ichor", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( + () -> AntarchyFabricContent.lookupFlowingFluid("ichor"), + () -> AntarchyFabricContent.lookupFlowingFluid("flowing_ichor"), + () -> AntarchyFabricContent.lookupItem("ichor_bucket"), + "ichor", + 4, + 1, + 5 + )); + + + public static final DeferredHolder FLOWING_ICHOR = FLUIDS.register("flowing_ichor", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( + () -> AntarchyFabricContent.lookupFlowingFluid("ichor"), + () -> AntarchyFabricContent.lookupFlowingFluid("flowing_ichor"), + () -> AntarchyFabricContent.lookupItem("ichor_bucket"), + "ichor", + 4, + 1, + 5 + )); + + + + public static final DeferredHolder ANTIWATER = FLUIDS.register("antiwater", + AntiwaterFluid.Source::new); + + + public static final DeferredHolder FLOWING_ANTIWATER = FLUIDS.register("flowing_antiwater", + AntiwaterFluid.Flowing::new); + + + public static final DeferredHolder LUMEN = FLUIDS.register("lumen", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( + () -> AntarchyFabricContent.lookupFlowingFluid("lumen"), + () -> AntarchyFabricContent.lookupFlowingFluid("flowing_lumen"), + () -> AntarchyFabricContent.lookupItem("lumen_bucket"), + "lumen", + 4, + 1, + 5 + )); + + + public static final DeferredHolder FLOWING_LUMEN = FLUIDS.register("flowing_lumen", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( + () -> AntarchyFabricContent.lookupFlowingFluid("lumen"), + () -> AntarchyFabricContent.lookupFlowingFluid("flowing_lumen"), + () -> AntarchyFabricContent.lookupItem("lumen_bucket"), + "lumen", + 4, + 1, + 5 + )); + + + public static final DeferredHolder, RedAntNestFeature> RED_ANT_NEST_FEATURE = FEATURES.register("red_ant_nest", + () -> new RedAntNestFeature(SimpleBlockConfiguration.CODEC)); + + + public static final DeferredHolder, BrownAntNestFeature> BROWN_ANT_NEST_FEATURE = FEATURES.register("brown_ant_nest", + () -> new BrownAntNestFeature(SimpleBlockConfiguration.CODEC)); + + + public static final DeferredHolder, RainbowAntNestFeature> RAINBOW_ANT_NEST_FEATURE = FEATURES.register("rainbow_ant_nest", + () -> new RainbowAntNestFeature(SimpleBlockConfiguration.CODEC)); + + + public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_LARGE_TREE = FEATURES.register("ouranwood_large_tree", + () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); + + + public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_YOUNG_TREE = FEATURES.register("ouranwood_young_tree", + () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); + + + public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_MEDIUM_TREE = FEATURES.register("ouranwood_medium_tree", + () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); + + + public static final DeferredHolder, OuranwoodCocoonTreeFeature> OURANWOOD_COCOON_TREE = FEATURES.register("ouranwood_cocoon_tree", + () -> new OuranwoodCocoonTreeFeature(OuranwoodTreeConfiguration.CODEC)); + + + public static final DeferredHolder, PeachTreeFeature> PEACH_TREE_FEATURE = FEATURES.register("peach_tree", + () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); + + + public static final DeferredHolder, PeachTreeFeature> PEACH_LARGE_TREE_FEATURE = FEATURES.register("peach_large_tree", + () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); + + + public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST)); + + + public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_MEADOW_FLORA = FEATURES.register("elythia_meadow_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.MEADOW)); + + + public static final DeferredHolder, ElythiaFloraFeature> PEACH_FOREST_FLORA = FEATURES.register("peach_forest_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.PEACH_FOREST)); + + + public static final DeferredHolder, ElythiaFloraFeature> FLOWER_FOREST_MILKWEED = FEATURES.register("flower_forest_milkweed", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FLOWER_FOREST_MILKWEED)); + + + public static final DeferredHolder, CornPatchFeature> CORN_PATCH = FEATURES.register("corn_patch", + () -> new CornPatchFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_BUTTERFLY_FIELDS_FLORA = FEATURES.register("butterfly_fields_flora", + () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.BUTTERFLY_FIELDS)); + + + public static final DeferredHolder, ElythiaSurfaceCoverFeature> ELYTHIA_SURFACE_COVER = FEATURES.register("elythia_surface_cover", + () -> new ElythiaSurfaceCoverFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, ElythiaUndergroundFeature> ELYTHIA_UNDERGROUND = FEATURES.register("elythia_underground", + () -> new ElythiaUndergroundFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, BrutalflyCocoonFeature> BRUTALFLY_COCOON = FEATURES.register("brutalfly_cocoon", + () -> new BrutalflyCocoonFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, MolewormTunnelsFeature> ELYTHIA_MOLEWORM_TUNNELS = FEATURES.register("elythia_moleworm_tunnels", + () -> new MolewormTunnelsFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, MolewormCaveEntranceFeature> ELYTHIA_MOLEWORM_CAVE_ENTRANCES = FEATURES.register("elythia_moleworm_cave_entrances", + () -> new MolewormCaveEntranceFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, MolewormWarrensFeature> ELYTHIA_MOLEWORM_WARRENS = FEATURES.register("elythia_moleworm_warrens", + () -> new MolewormWarrensFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, MolewormSurfaceMoundsFeature> ELYTHIA_MOLEWORM_SURFACE_MOUNDS = FEATURES.register("elythia_moleworm_surface_mounds", + () -> new MolewormSurfaceMoundsFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, TriffidPatchFeature> TRIFFID_PATCH = FEATURES.register("triffid_patch", + () -> new TriffidPatchFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, MapCodec> ELYTHIA_BIOME_SOURCE = BIOME_SOURCES.register("elythia_biome_source", + () -> ElythiaBiomeSource.CODEC); + + + public static final DeferredHolder, MapCodec> ELYTHIA_RIVER_CARVE = DENSITY_FUNCTION_TYPES.register("elythia_river_carve", + () -> ElythiaRiverCarveFunction.CODEC); + + + public static final DeferredHolder, ElythiaPondFeature> ELYTHIA_POND = FEATURES.register("elythia_pond", + () -> new ElythiaPondFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, LumenPoolFeature> LUMEN_POOL = FEATURES.register("lumen_pools", + () -> new LumenPoolFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, LumenLilyPadFeature> LUMEN_LILY_PADS = FEATURES.register("lumen_lily_pads", + () -> new LumenLilyPadFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, LumenStreamFeature> LUMEN_STREAM = FEATURES.register("lumen_streams", + () -> new LumenStreamFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenSpireFeature> LUMEN_SPIRE = FEATURES.register("lumen_spires", + () -> new LumenSpireFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, ElythiaTuffBoulderFeature> ELYTHIA_TUFF_BOULDER = FEATURES.register("elythia_tuff_boulder", + () -> new ElythiaTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, ElythiaLargeTuffBoulderFeature> ELYTHIA_LARGE_TUFF_BOULDER = FEATURES.register("elythia_large_tuff_boulder", + () -> new ElythiaLargeTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, PeachForestMossyBoulderFeature> PEACH_FOREST_MOSSY_BOULDER = FEATURES.register("peach_forest_mossy_boulder", + () -> new PeachForestMossyBoulderFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, PeachForestPondFeature> PEACH_FOREST_POND = FEATURES.register("peach_forest_pond", + () -> new PeachForestPondFeature(PeachForestPondConfiguration.CODEC)); + + + public static final DeferredHolder, ThoraxisFissureFeature> THORAXIS_FISSURE = FEATURES.register("thoraxis_fissure", + () -> new ThoraxisFissureFeature(ThoraxisFissureConfiguration.CODEC)); + + + public static final DeferredHolder, ThoraxisRibColumnsFeature> THORAXIS_RIB_COLUMNS = FEATURES.register("thoraxis_rib_columns", + () -> new ThoraxisRibColumnsFeature(ThoraxisRibColumnsConfiguration.CODEC)); + + + public static final DeferredHolder, ThoraxisSpikeFeature> THORAXIS_SPIKE = FEATURES.register("thoraxis_spike", + () -> new ThoraxisSpikeFeature(ThoraxisSpikeConfiguration.CODEC)); + + + public static final DeferredHolder, NyxiteSpikeFeature> NYXITE_SPIKES = FEATURES.register("nyxite_spikes", + () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); + + + public static final DeferredHolder, AntiwaterSpringsFeature> ANTIWATER_SPRINGS = FEATURES.register("antiwater_springs", + () -> new AntiwaterSpringsFeature(AntiwaterSpringsConfiguration.CODEC)); + + + public static final DeferredHolder, PotentNyxiteFeature> POTENT_NYXITE_FEATURE = FEATURES.register("potent_nyxite", + () -> new PotentNyxiteFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, ThoraxisBloodCrystalFeature> THORAXIS_BLOOD_CRYSTAL_SPIRES = FEATURES.register("thoraxis_blood_crystal_spires", + () -> new ThoraxisBloodCrystalFeature(ThoraxisBloodCrystalConfiguration.CODEC)); + + + public static final DeferredHolder, CloudSeaCalciteFeature> CLOUD_SEA_CALCITE_BANKS = FEATURES.register("cloud_sea_calcite_banks", + () -> new CloudSeaCalciteFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, BedBugNestFeature> BED_BUG_NEST = FEATURES.register("bed_bug_nest", + () -> new BedBugNestFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, BedBugSurfaceClusterFeature> BED_BUG_SURFACE_CLUSTER = FEATURES.register("bed_bug_surface_cluster", + () -> new BedBugSurfaceClusterFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, ThoraxisAntiwaterPoolFeature> THORAXIS_ANTIWATER_POOL = FEATURES.register("thoraxis_antiwater_pool", + () -> new ThoraxisAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); + + + public static final DeferredHolder, LucidAntiwaterPoolFeature> LUCID_ANTIWATER_POOL = FEATURES.register("lucid_antiwater_pool", + () -> new LucidAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); + + + public static final DeferredHolder, ThoraxisDuneFeature> THORAXIS_DUNE = FEATURES.register("thoraxis_dune", + () -> new ThoraxisDuneFeature(ThoraxisDuneConfiguration.CODEC)); + + + public static final DeferredHolder, CoralSpikeFeature> ELYTHIA_CORAL_SPIKE = FEATURES.register("elythia_coral_spike", + () -> new CoralSpikeFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.FallenOuranwoodFeature> FALLEN_OURANWOOD_TREE = FEATURES.register("fallen_ouranwood_tree", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.FallenOuranwoodFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature> FUNGAL_MUSHROOM = FEATURES.register("fungal_mushroom", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature(NoneFeatureConfiguration.CODEC)); + + + public static final DeferredHolder, MapCodec> THORAXIS_BIOME_SOURCE = BIOME_SOURCES.register("thoraxis_biome_source", + () -> ThoraxisBiomeSource.CODEC); + + + public static final DeferredHolder JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots", + () -> new ArmorMaterial( + createJumpyBootsDefense(), + 15, + net.minecraft.sounds.SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(net.minecraft.world.item.Items.NETHERITE_BOOTS), + java.util.List.of(new ArmorMaterial.Layer(net.minecraft.resources.ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_boots"))), + 3.0F, + 0.1F + )); + + + + public static Holder mobEffectHolder(DeferredHolder effect) { + return BuiltInRegistries.MOB_EFFECT.wrapAsHolder(effect.get()); + } + + + + public static Holder attributeHolder(DeferredHolder attribute) { + return BuiltInRegistries.ATTRIBUTE.wrapAsHolder(attribute.get()); + } + + + + private static Holder armorMaterialHolder(DeferredHolder material) { + return BuiltInRegistries.ARMOR_MATERIAL.wrapAsHolder(material.get()); + } + + + + private static java.util.EnumMap createUltimateArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 6); + defense.put(ArmorItem.Type.LEGGINGS, 12); + defense.put(ArmorItem.Type.CHESTPLATE, 16); + defense.put(ArmorItem.Type.HELMET, 6); + defense.put(ArmorItem.Type.BODY, 16); + return defense; + } + + + + private static java.util.EnumMap createNightmareArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 4); + defense.put(ArmorItem.Type.LEGGINGS, 9); + defense.put(ArmorItem.Type.CHESTPLATE, 11); + defense.put(ArmorItem.Type.HELMET, 4); + defense.put(ArmorItem.Type.BODY, 11); + return defense; + } + + + + private static java.util.EnumMap createJumpyBootsDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 0); + defense.put(ArmorItem.Type.CHESTPLATE, 0); + defense.put(ArmorItem.Type.HELMET, 0); + defense.put(ArmorItem.Type.BODY, 0); + return defense; + } + + + + private static java.util.EnumMap createBloodCrystalArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 2); + defense.put(ArmorItem.Type.LEGGINGS, 5); + defense.put(ArmorItem.Type.CHESTPLATE, 6); + defense.put(ArmorItem.Type.HELMET, 2); + defense.put(ArmorItem.Type.BODY, 6); + return defense; + } + + + + private static java.util.EnumMap createMogglesArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 0); + defense.put(ArmorItem.Type.LEGGINGS, 0); + defense.put(ArmorItem.Type.CHESTPLATE, 0); + defense.put(ArmorItem.Type.HELMET, 2); + defense.put(ArmorItem.Type.BODY, 2); + return defense; + } + + + + private static java.util.EnumMap createPrimordialArmorDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 6); + defense.put(ArmorItem.Type.CHESTPLATE, 8); + defense.put(ArmorItem.Type.HELMET, 3); + defense.put(ArmorItem.Type.BODY, 8); + return defense; + } + + + + private static java.util.EnumMap createFallenKingCrownDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 0); + defense.put(ArmorItem.Type.LEGGINGS, 0); + defense.put(ArmorItem.Type.CHESTPLATE, 0); + defense.put(ArmorItem.Type.HELMET, 2); + defense.put(ArmorItem.Type.BODY, 2); + return defense; + } + + + + private static SimpleParticleType simpleParticleType() { + return new SimpleParticleType(true) { + }; + } + + + + private static ParticleType particleType( + java.util.function.Function, com.mojang.serialization.MapCodec> codecFactory, + java.util.function.Function, net.minecraft.network.codec.StreamCodec> streamCodecFactory + ) { + return new ParticleType<>(false) { + @Override + public com.mojang.serialization.MapCodec codec() { + return codecFactory.apply(this); + } + + @Override + public net.minecraft.network.codec.StreamCodec streamCodec() { + return streamCodecFactory.apply(this); + } + }; + } + + + public static void register() { + ARMOR_MATERIALS.register(); + FLUIDS.register(); + ATTRIBUTES.register(); + PARTICLE_TYPES.register(); + FEATURES.register(); + BIOME_SOURCES.register(); + DENSITY_FUNCTION_TYPES.register(); + ENTITY_SUB_PREDICATES.register(); + MOB_EFFECTS.register(); + POTIONS.register(); + MENUS.register(); + DATA_COMPONENT_TYPES.register(); + RECIPE_SERIALIZERS.register(); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java new file mode 100644 index 00000000..1da468b2 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java @@ -0,0 +1,682 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +import com.craisinlord.antarchy.content.worldgen.overworld.CornPatchFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricSounds { + + public static final DeferredRegister SOUND_EVENTS = DeferredRegister.create(Registries.SOUND_EVENT, Antarchy.MODID); + + + public static final DeferredHolder SQUIDZOOKA_FIRE = registerSoundEvent("squidzooka_fire"); + + + public static final DeferredHolder SHRINK_RAY_SOUND = registerSoundEvent("shrink_ray"); + + + public static final DeferredHolder GROWTH_RAY_SOUND = registerSoundEvent("growth_ray"); + + + public static final DeferredHolder SIZE_RAY_CHARGE = registerSoundEvent("size_ray_charge"); + + + public static final DeferredHolder ANT_AMBIENT = registerSoundEvent("ant_ambient"); + + + public static final DeferredHolder ANT_IDLE = registerSoundEvent("ant_idle"); + + + public static final DeferredHolder ANT_HURT = registerSoundEvent("ant_hurt"); + + + public static final DeferredHolder ANT_BITE = registerSoundEvent("ant_bite"); + + + public static final DeferredHolder ANT_GATHER = registerSoundEvent("ant_gather"); + + + public static final DeferredHolder ANT_NEST = registerSoundEvent("ant_nest"); + + + public static final DeferredHolder CLOUD_SHARK_BITE = registerSoundEvent("cloud_shark_bite"); + + + public static final DeferredHolder CLOUD_SHARK_IDLE = registerSoundEvent("cloud_shark_idle"); + + + public static final DeferredHolder CLOUD_SHARK_HURT = registerSoundEvent("cloud_shark_hurt"); + + + public static final DeferredHolder CLOUD_SHARK_DEATH = registerSoundEvent("cloud_shark_death"); + + + public static final DeferredHolder CLOUD_SHARK_FLY = registerSoundEvent("cloud_shark_fly"); + + + public static final DeferredHolder CATERPILLAR_IDLE = registerSoundEvent("caterpillar_idle"); + + + public static final DeferredHolder CATERPILLAR_HURT = registerSoundEvent("caterpillar_hurt"); + + + public static final DeferredHolder CATERPILLAR_CRAWL = registerSoundEvent("caterpillar_crawl"); + + + public static final DeferredHolder BUTTERFLY_HURT = registerSoundEvent("butterfly_hurt"); + + + public static final DeferredHolder BRUTALFLY_IDLE = registerSoundEvent("brutalfly_idle"); + + + public static final DeferredHolder BRUTALFLY_DEATH = registerSoundEvent("brutalfly_death"); + + + public static final DeferredHolder ELYTHIA_FIREFLY_AMBIENT = registerSoundEvent("ambient.elythia.firefly"); + + + public static final DeferredHolder MISSILE_SQUID_AMBIENT = registerSoundEvent("missile_squid_ambient"); + + + public static final DeferredHolder MISSILE_SQUID_HURT = registerSoundEvent("missile_squid_hurt"); + + + public static final DeferredHolder MISSILE_SQUID_DEATH = registerSoundEvent("missile_squid_death"); + + + public static final DeferredHolder MISSILE_SQUID_ATTACK = registerSoundEvent("missile_squid_attack"); + + + public static final DeferredHolder KRAKEN_FLYING_LOOP = registerSoundEvent("kraken_flying_loop"); + + + public static final DeferredHolder KRAKEN_FLYING_SIDEWAYS_LOOP = registerSoundEvent("kraken_flying_sideways_loop"); + + + public static final DeferredHolder KRAKEN_ATTACK = registerSoundEvent("kraken_attack"); + + + public static final DeferredHolder KRAKEN_SPIN = registerSoundEvent("kraken_spin"); + + + public static final DeferredHolder KRAKEN_ROAR = registerSoundEvent("kraken_roar"); + + + public static final DeferredHolder KRAKEN_SUMMON = registerSoundEvent("kraken_summon"); + + + public static final DeferredHolder KRAKEN_HURT = registerSoundEvent("kraken_hurt"); + + + public static final DeferredHolder KRAKEN_DEATH = registerSoundEvent("kraken_death"); + + + public static final DeferredHolder BASILISK_IDLE_LOOP = registerSoundEvent("basilisk_idle_loop"); + + + public static final DeferredHolder BASILISK_SLITHER_LOOP = registerSoundEvent("basilisk_slither_loop"); + + + public static final DeferredHolder BASILISK_BITE = registerSoundEvent("basilisk_bite"); + + + public static final DeferredHolder BASILISK_HISS = registerSoundEvent("basilisk_hiss"); + + + public static final DeferredHolder BASILISK_HURT = registerSoundEvent("basilisk_hurt"); + + + public static final DeferredHolder BASILISK_DEATH = registerSoundEvent("basilisk_death"); + + + public static final DeferredHolder THORAXIS_NIGHTMARE_WASTES_AMBIENT = registerSoundEvent("thoraxis_nightmare_wastes_ambient"); + + + public static final DeferredHolder THORAXIS_NIGHTMARE_WASTES_ADDITIONS = registerSoundEvent("thoraxis_nightmare_wastes_additions"); + + + public static final DeferredHolder THORAXIS_NIGHTMARE_WASTES_MOOD = registerSoundEvent("thoraxis_nightmare_wastes_mood"); + + + public static final DeferredHolder THORAXIS_DREAM_DUNES_AMBIENT = registerSoundEvent("thoraxis_dream_dunes_ambient"); + + + public static final DeferredHolder THORAXIS_DREAM_DUNES_ADDITIONS = registerSoundEvent("thoraxis_dream_dunes_additions"); + + + public static final DeferredHolder THORAXIS_DREAM_DUNES_MOOD = registerSoundEvent("thoraxis_dream_dunes_mood"); + + + public static final DeferredHolder THORAXIS_LUCID_POOLS_AMBIENT = registerSoundEvent("thoraxis_lucid_pools_ambient"); + + + public static final DeferredHolder THORAXIS_LUCID_POOLS_ADDITIONS = registerSoundEvent("thoraxis_lucid_pools_additions"); + + + public static final DeferredHolder THORAXIS_LUCID_POOLS_MOOD = registerSoundEvent("thoraxis_lucid_pools_mood"); + + + public static final DeferredHolder LUCID_AMBIENT = registerSoundEvent("lucid_ambient"); + + + public static final DeferredHolder LUCID_FLYING = registerSoundEvent("lucid_flying"); + + + public static final DeferredHolder LUCID_ATTACK = registerSoundEvent("lucid_attack"); + + + public static final DeferredHolder LUCID_BOLT_SOUND = registerSoundEvent("lucid_bolt"); + + + public static final DeferredHolder LUCID_HURT = registerSoundEvent("lucid_hurt"); + + + public static final DeferredHolder LUCID_DEATH = registerSoundEvent("lucid_death"); + + + public static final DeferredHolder REVERIE_IDLE = registerSoundEvent("reverie_idle"); + + + public static final DeferredHolder REVERIE_HURT = registerSoundEvent("reverie_hurt"); + + + public static final DeferredHolder REVERIE_WORRY = registerSoundEvent("reverie_worry"); + + + public static final DeferredHolder REVERIE_SAVE = registerSoundEvent("reverie_save"); + + + public static final DeferredHolder REVERIE_JOIN_PLAYER = registerSoundEvent("reverie_join_player"); + + + public static final DeferredHolder REVERIE_ALERT = registerSoundEvent("reverie_alert"); + + + public static final DeferredHolder FLYING_SQUIRREL_IDLE = registerSoundEvent("flying_squirrel_idle"); + + + public static final DeferredHolder FLYING_SQUIRREL_BEG = registerSoundEvent("flying_squirrel_beg"); + + + public static final DeferredHolder FLYING_SQUIRREL_NUT = registerSoundEvent("flying_squirrel_nut"); + + + public static final DeferredHolder FLYING_SQUIRREL_GLIDE_LOOP = registerSoundEvent("flying_squirrel_glide_loop"); + + + public static final DeferredHolder FLYING_SQUIRREL_HURT = registerSoundEvent("flying_squirrel_hurt"); + + + public static final DeferredHolder FLYING_SQUIRREL_DEATH = registerSoundEvent("flying_squirrel_death"); + + + public static final DeferredHolder NIGHTMARE_IDLE = registerSoundEvent("nightmare_idle"); + + + public static final DeferredHolder NIGHTMARE_HURT = registerSoundEvent("nightmare_hurt"); + + + public static final DeferredHolder NIGHTMARE_ROAR = registerSoundEvent("nightmare_roar"); + + + public static final DeferredHolder NIGHTMARE_DEATH = registerSoundEvent("nightmare_death"); + + + public static final DeferredHolder NIGHTMARE_BITE = registerSoundEvent("nightmare_bite"); + + + public static final DeferredHolder NIGHTMARE_FLAP = registerSoundEvent("nightmare_flap"); + + + public static final DeferredHolder TRIFFID_ATTACK = registerSoundEvent("triffid_attack"); + + + public static final DeferredHolder TRIFFID_GRAB = registerSoundEvent("triffid_grab"); + + + public static final DeferredHolder TRIFFID_HURT = registerSoundEvent("triffid_hurt"); + + + public static final DeferredHolder TRIFFID_DEATH = registerSoundEvent("triffid_death"); + + + public static final DeferredHolder TRIFFID_HISS = registerSoundEvent("triffid_hiss"); + + + public static final DeferredHolder TRIFFID_GROWL = registerSoundEvent("triffid_growl"); + + + public static final DeferredHolder MANTIS_AMBIENT = registerSoundEvent("mantis_ambient"); + + + public static final DeferredHolder MANTIS_HURT = registerSoundEvent("mantis_hurt"); + + + public static final DeferredHolder MANTIS_ATTACK = registerSoundEvent("mantis_attack"); + + + public static final DeferredHolder MANTIS_FLY_LOOP = registerSoundEvent("mantis_fly_loop"); + + + public static final DeferredHolder GRAVITY_GUN_PICKUP = registerSoundEvent("gravity_gun_pickup"); + + + public static final DeferredHolder GRAVITY_GUN_DROP = registerSoundEvent("gravity_gun_drop"); + + + public static final DeferredHolder GRAVITY_GUN_HOLD_LOOP = registerSoundEvent("gravity_gun_hold_loop"); + + + public static final DeferredHolder GRAVITY_GUN_LAUNCH = registerSoundEvent("gravity_gun_launch"); + + + public static final DeferredHolder GRAVITY_GUN_DRYFIRE = registerSoundEvent("gravity_gun_dryfire"); + + + public static final DeferredHolder BED_BUG_AMBIENT = registerSoundEvent("bed_bug_ambient"); + + + public static final DeferredHolder BED_BUG_HURT = registerSoundEvent("bed_bug_hurt"); + + + public static final DeferredHolder BED_BUG_ATTACK = registerSoundEvent("bed_bug_attack"); + + + public static final DeferredHolder WASP_IDLE = registerSoundEvent("wasp_idle"); + + + public static final DeferredHolder WASP_HURT = registerSoundEvent("wasp_hurt"); + + + public static final DeferredHolder WASP_ATTACK = registerSoundEvent("wasp_attack"); + + + public static final DeferredHolder WASP_DEATH = registerSoundEvent("wasp_death"); + + + public static final DeferredHolder SCORPION_AMBIENT = registerSoundEvent("scorpion_ambient"); + + + public static final DeferredHolder SCORPION_HURT = registerSoundEvent("scorpion_hurt"); + + + public static final DeferredHolder SCORPION_ATTACK = registerSoundEvent("scorpion_attack"); + + + public static final DeferredHolder EMPEROR_SCORPION_AMBIENT = registerSoundEvent("emperor_scorpion_ambient"); + + + public static final DeferredHolder EMPEROR_SCORPION_HURT = registerSoundEvent("emperor_scorpion_hurt"); + + + public static final DeferredHolder EMPEROR_SCORPION_ATTACK = registerSoundEvent("emperor_scorpion_attack"); + + + public static final DeferredHolder EMPEROR_SCORPION_ROAR = registerSoundEvent("emperor_scorpion_roar"); + + + public static final DeferredHolder MOLEWORM_AMBIENT = registerSoundEvent("moleworm_ambient"); + + + public static final DeferredHolder MOLEWORM_HURT = registerSoundEvent("moleworm_hurt"); + + + public static final DeferredHolder MOLEWORM_ATTACK = registerSoundEvent("moleworm_attack"); + + + public static final DeferredHolder MOLEWORM_DIG = registerSoundEvent("moleworm_dig"); + + + public static final DeferredHolder MOLEVORE_AMBIENT = registerSoundEvent("molevore_ambient"); + + + public static final DeferredHolder MOLEVORE_HURT = registerSoundEvent("molevore_hurt"); + + + public static final DeferredHolder MOLEVORE_ATTACK = registerSoundEvent("molevore_attack"); + + + public static final DeferredHolder MOLEVORE_DIG = registerSoundEvent("molevore_dig"); + + + public static final DeferredHolder BOMBER_WALK = registerSoundEvent("bomber_walk"); + + + public static final DeferredHolder BOMBER_KNOCK = registerSoundEvent("bomber_knock"); + + + public static final DeferredHolder BOMBER_EXPLODE = registerSoundEvent("bomber_explode"); + + + public static final DeferredHolder TORETERROR_IDLE = registerSoundEvent("toreterror_idle"); + + + public static final DeferredHolder TORETERROR_HURT = registerSoundEvent("toreterror_hurt"); + + + public static final DeferredHolder TORETERROR_DEATH = registerSoundEvent("toreterror_death"); + + + public static final DeferredHolder TORETERROR_BOMBER_FIRE = registerSoundEvent("toreterror_bomber_fire"); + + + public static final DeferredHolder TORETERROR_SPIN = registerSoundEvent("toreterror_spin"); + + + public static final DeferredHolder TORETERROR_RICOCHET = registerSoundEvent("toreterror_ricochet"); + + + public static final DeferredHolder WATER_CANNON_FIRE = registerSoundEvent("water_cannon_fire"); + + + public static final DeferredHolder TORETERROR_JUMP_UP = registerSoundEvent("toreterror_jump_up"); + + + public static final DeferredHolder TORETERROR_JUMP_LAND = registerSoundEvent("toreterror_jump_land"); + + + public static final DeferredHolder STINKY_FLY_SOUND = registerSoundEvent("stinky_fly"); + + + public static final DeferredHolder CREEPING_HORROR_GROWL = registerSoundEvent("creeping_horror_growl"); + + + public static final DeferredHolder CREEPING_HORROR_HURT = registerSoundEvent("creeping_horror_hurt"); + + + public static final DeferredHolder CREEPING_HORROR_BITE = registerSoundEvent("creeping_horror_bite"); + + + public static final DeferredHolder LURKING_TERROR_SNARL = registerSoundEvent("lurking_terror_snarl"); + + + public static final DeferredHolder LURKING_TERROR_HURT = registerSoundEvent("lurking_terror_hurt"); + + + public static final DeferredHolder LURKING_TERROR_BITE = registerSoundEvent("lurking_terror_bite"); + + + public static final DeferredHolder LURKING_TERROR_FLY_LOOP = registerSoundEvent("lurking_terror_fly_loop"); + + + public static final DeferredHolder DUCT_TAPE_USE = registerSoundEvent("duct_tape_use"); + + + public static final DeferredHolder POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas"); + + + public static final DeferredHolder POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start"); + + + public static final DeferredHolder POTENT_NYXITE_GEYSER_ERUPTION_ACTIVE = registerSoundEvent("potent_nyxite_geyser_eruption_active"); + + + public static final DeferredHolder POTENT_NYXITE_GEYSER_CONTINUOUS_START = registerSoundEvent("potent_nyxite_geyser_continuous_start"); + + + public static final DeferredHolder POTENT_NYXITE_GEYSER_CONTINUOUS_ACTIVE = registerSoundEvent("potent_nyxite_geyser_continuous_active"); + + + + + private static DeferredHolder registerSoundEvent(String path) { + return SOUND_EVENTS.register(path, + () -> SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path))); + } + + + public static void register() { + SOUND_EVENTS.register(); + } + +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java new file mode 100644 index 00000000..9a1c4d32 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSpawnPlacements.java @@ -0,0 +1,294 @@ +package com.craisinlord.antarchy.fabric.registry; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.compat.infinity.InfinityCompat; +import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.CreativeTabOrder; +import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem; +import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem; +import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; +import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; +import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; +import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; +import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock; +import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; +import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +import com.craisinlord.antarchy.content.worldgen.overworld.CornPatchFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid; +import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock; +import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem; +import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import com.craisinlord.antarchy.fabric.registry.DeferredBlock; +import com.craisinlord.antarchy.fabric.registry.DeferredHolder; +import com.craisinlord.antarchy.fabric.registry.DeferredItem; +import com.craisinlord.antarchy.fabric.registry.DeferredRegister; +import com.craisinlord.antarchy.content.effect.DreadMobEffect; +import com.craisinlord.antarchy.content.effect.GrowthMobEffect; +import com.craisinlord.antarchy.content.effect.InvertedMobEffect; +import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; +import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; +import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; +import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.ButterflyEntity; +import com.craisinlord.antarchy.content.entity.CaterpillarEntity; +import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; +import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; +import com.craisinlord.antarchy.content.entity.ReverieEntity; +import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; +import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; +import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; +import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import com.craisinlord.antarchy.content.entity.MantisEntity; +import com.craisinlord.antarchy.content.entity.RollyPollyEntity; +import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.craisinlord.antarchy.content.item.LucidEyeItem; +import com.craisinlord.antarchy.content.item.LucidPearlItem; +import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.WaterCannonItem; +import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import com.craisinlord.antarchy.content.entity.MolevoreEntity; +import com.craisinlord.antarchy.content.entity.MolewormEntity; +import com.craisinlord.antarchy.content.entity.BomberEntity; +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.WaspEntity; +import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; +import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import com.craisinlord.antarchy.content.item.BattleAxeItem; +import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.AntimetalBlockItem; +import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; +import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; +import com.craisinlord.antarchy.content.item.CorneaEarItem; +import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.MinersDreamItem; +import com.craisinlord.antarchy.content.item.DuctTapeBlockItem; +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem; +import com.craisinlord.antarchy.content.item.MogglesItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem; +import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem; +import com.craisinlord.antarchy.content.item.DiamondMinecartItem; +import com.craisinlord.antarchy.content.item.ReverieBottleItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipItem; +import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import com.craisinlord.antarchy.content.item.SizeRayItem; +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.SimpleToolTier; +import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; +import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem; +import com.craisinlord.antarchy.content.item.NightmareArmorItem; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; +import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; +import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaLargeTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestMossyBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachForestPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaPondFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaSurfaceCoverFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaTuffBoulderFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaUndergroundFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormCaveEntranceFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormSurfaceMoundsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.BrutalflyCocoonFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenPoolFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenLilyPadFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.LumenStreamFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormTunnelsFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.MolewormWarrensFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.elythia.PeachTreeFeature; +import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisFissureFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBloodCrystalFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisAntiwaterPoolFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisRibColumnsFeature; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; +import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; +import com.mojang.serialization.MapCodec; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; +import net.minecraft.advancements.critereon.EntitySubPredicate; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.tags.TagKey; +import net.minecraft.world.damagesource.DamageType; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.SpawnPlacementTypes; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.StandingAndWallBlockItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Tier; +import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.util.valueproviders.UniformInt; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.AmethystClusterBlock; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; +import net.minecraft.world.level.levelgen.Heightmap; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; + +public final class AntarchyFabricSpawnPlacements { + + + public static void register() { + SpawnPlacements.register(AntarchyFabricEntities.FLYING_SQUIRREL.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING, FlyingSquirrelEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.CATERPILLAR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CaterpillarEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.BUTTERFLY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ButterflyEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.REVERIE.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ReverieEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.BRUTALFLY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Monster::checkMonsterSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.GOLDEN_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.CLOUD_SHARK.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CloudSharkEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.WASP.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, WaspEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.BOMBER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BomberEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.KRAKEN.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, OctopusBombEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.CHEEP.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.AbstractFish::checkSurfaceWaterAnimalSpawnRules); + // Dorrie is not part of this update yet. + // SpawnPlacements.register(AntarchyFabricEntities.DORRIE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.OURANWOOD_DEER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity::checkGlimmerSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.ELKA.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.ALPHA_MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AlphaMantisEntity::checkAlphaMantisSpawnRules); + SpawnPlacements.register(AntarchyFabricEntities.MOLEVORE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.BED_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn); + SpawnPlacements.register(AntarchyFabricEntities.TORETERROR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ToreterrorEntity::canSpawn); + } + +} diff --git a/fabric/src/main/resources/data/minecraft/tags/fluid/water.json b/fabric/src/main/resources/data/minecraft/tags/fluid/water.json index 60ad5ea5..eef10539 100644 --- a/fabric/src/main/resources/data/minecraft/tags/fluid/water.json +++ b/fabric/src/main/resources/data/minecraft/tags/fluid/water.json @@ -3,6 +3,8 @@ "antarchy:ichor", "antarchy:flowing_ichor", "antarchy:lumen", - "antarchy:flowing_lumen" + "antarchy:flowing_lumen", + "antarchy:bile", + "antarchy:flowing_bile" ] } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 12b7006a..b854ee91 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -219,7 +219,7 @@ public class AntarchyNeoforge { (java.util.function.Supplier) AntarchyNeoforgeEntites.BOMBER, (java.util.function.Supplier) AntarchyNeoforgeEntites.BED_BUG, AntarchyNeoforgeEntites.CHEEP, - AntarchyNeoforgeEntites.DORRIE, + () -> { throw new IllegalStateException("Dorrie is not part of this update yet."); }, () -> AntarchyNeoforgeBlocks.DUPLICATOR_LOG.get(), () -> AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), () -> AntarchyNeoforgeBlocks.DUCT_TAPE.get(), @@ -312,7 +312,8 @@ public class AntarchyNeoforge { AntarchyObjects.setLumenBlock(() -> AntarchyNeoforgeBlocks.LUMEN_BLOCK.get()); AntarchyObjects.setLumenFroglight(() -> AntarchyNeoforgeBlocks.LUMEN_FROGLIGHT.get()); AntarchyObjects.setPeachLeavesParticle(() -> AntarchyNeoforgeMisc.PEACH_LEAVES_PARTICLE.get()); - AntarchyObjects.setDorrieInventoryMenu(AntarchyNeoforgeMisc.DORRIE_INVENTORY_MENU); + // Dorrie is not part of this update yet. + // AntarchyObjects.setDorrieInventoryMenu(AntarchyNeoforgeMisc.DORRIE_INVENTORY_MENU); } private static boolean isModLoaded(String modId) { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index a63e4433..51617eae 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -130,7 +130,8 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.TORETERROR.get(), ToreterrorRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.WATER_BOMB.get(), WaterBombRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.CHEEP.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.CheepRenderer(context))); - event.registerEntityRenderer(AntarchyNeoforgeEntites.DORRIE.get(), context -> new com.craisinlord.antarchy.content.client.renderer.DorrieRenderer(context)); + // Dorrie is not part of this update yet. + // event.registerEntityRenderer(AntarchyNeoforgeEntites.DORRIE.get(), context -> new com.craisinlord.antarchy.content.client.renderer.DorrieRenderer(context)); event.registerEntityRenderer(AntarchyNeoforgeEntites.OURANWOOD_DEER.get(), context -> new com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer(context)); event.registerEntityRenderer(AntarchyNeoforgeEntites.GLIMMER.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.glimmer.GlimmerRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.ELKA.get(), context -> new com.craisinlord.antarchy.content.client.renderer.ElkaRenderer(context)); @@ -202,7 +203,8 @@ public final class AntarchyNeoForgeClient { event.register( (state, level, pos, tintIndex) -> level != null && pos != null ? BiomeColors.getAverageGrassColor(level, pos) - : net.minecraft.world.level.GrassColor.getDefaultColor() + : net.minecraft.world.level.GrassColor.getDefaultColor(), + AntarchyNeoforgeBlocks.SPIDER_LILY.get() ); } @@ -213,7 +215,8 @@ public final class AntarchyNeoForgeClient { AntarchyNeoforgeItems.OURANWOOD_LEAVES_ITEM.get() ); event.register( - (stack, tintIndex) -> net.minecraft.world.level.GrassColor.getDefaultColor() + (stack, tintIndex) -> tintIndex == 0 ? net.minecraft.world.level.GrassColor.getDefaultColor() : -1, + AntarchyNeoforgeItems.SPIDER_LILY_ITEM.get() ); event.register(new DynamicFluidContainerModel.Colors(), AntarchyNeoforgeItems.ICHOR_BUCKET.get()); event.register(new DynamicFluidContainerModel.Colors(), AntarchyNeoforgeItems.LUMEN_BUCKET.get()); @@ -488,6 +491,8 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CAMELLIA.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.SPIDER_LILY.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.HUSHWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CORNEA_STALK.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CORN_CROP.get(), RenderType.cutout()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index 7aa76c0b..3dc0fd81 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -462,15 +462,19 @@ public final class AntarchyNeoForgeEvents { if (player.level().isClientSide()) return; BloodglassAccess access = (BloodglassAccess) player; - int shieldCount = Math.min( + int targetCap = Math.min( event.getEffectInstance().getAmplifier() + 1, Math.max(0, AntarchySettings.bloodCrystalHardMaxShields() - access.antarchy$getArmorShieldsActive() - access.antarchy$getArmorShieldLostCount()) ); - access.antarchy$setAppleShieldsActive(shieldCount); - access.antarchy$setAppleShieldLostCount(0); - access.antarchy$setAppleRechargeTimer(0); - syncBloodglass((ServerPlayer) player); + int currentCap = access.antarchy$getAppleShieldsActive() + access.antarchy$getAppleShieldLostCount(); + // Only grant newly-added capacity (e.g. first application, or a higher amplifier). + // A mere duration refresh of an already-active ward must not reset shields that are + // already lost, nor restart their recharge timer. + if (targetCap > currentCap) { + access.antarchy$setAppleShieldsActive(access.antarchy$getAppleShieldsActive() + (targetCap - currentCap)); + syncBloodglass((ServerPlayer) player); + } } private static void clearAppleShields(Player player) { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index 6b591295..0fc8d5e2 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -85,6 +85,10 @@ public final class AntarchyNeoforgeBlocks { () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); + public static final DeferredBlock CAMELLIA = BLOCKS.register("camellia", + () -> new com.craisinlord.antarchy.content.block.CamelliaBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); + public static final DeferredBlock SPIDER_LILY = BLOCKS.register("spider_lily", + () -> new com.craisinlord.antarchy.content.block.SpiderLilyBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POPPY))); public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", () -> new StandingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); public static final DeferredBlock OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index e3514bee..70dad670 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -35,18 +35,18 @@ public class AntarchyNeoforgeCreativeModeTabs { java.util.ArrayList sortedItems = new java.util.ArrayList<>(); for (var holder : AntarchyNeoforgeItems.ITEMS.getEntries()) { Item item = holder.get(); - if (item != Items.AIR && item != AntarchyNeoforgeItems.GLIMMER_BOTTLE.get()) sortedItems.add(item); + if (item != Items.AIR) sortedItems.add(item); } sortedItems.sort(CreativeTabOrder.COMPARATOR); - int n = sortedItems.size(); - for (int i = Math.max(0, n - 20); i < n; i++) { - Item it = sortedItems.get(i); - } - for (com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant variant : com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.values()) { - event.accept(com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(variant)); - } - - sortedItems.forEach(event::accept); + sortedItems.forEach(item -> { + if (item == AntarchyNeoforgeItems.GLIMMER_BOTTLE.get()) { + for (com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant variant : com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.values()) { + event.accept(com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(variant)); + } + } else { + event.accept(item); + } + }); } if (event.getTabKey() == CreativeModeTabs.SPAWN_EGGS) { @@ -81,7 +81,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.BASILISK_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.EMPEROR_SCORPION_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.TORETERROR_SPAWN_EGG.get()); - event.accept(AntarchyNeoforgeItems.DORRIE_SPAWN_EGG.get()); + // Dorrie is not part of this update yet. + // event.accept(AntarchyNeoforgeItems.DORRIE_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.OURANWOOD_DEER_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.GLIMMER_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.ELKA_SPAWN_EGG.get()); @@ -97,6 +98,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.DUPLICATOR_SAPLING_ITEM.get()); event.accept(AntarchyNeoforgeItems.ORANGE_MILKWEED_ITEM.get()); event.accept(AntarchyNeoforgeItems.PINK_MILKWEED_ITEM.get()); + event.accept(AntarchyNeoforgeItems.CAMELLIA_ITEM.get()); + event.accept(AntarchyNeoforgeItems.SPIDER_LILY_ITEM.get()); event.accept(AntarchyNeoforgeItems.HUSHWEED_ITEM.get()); event.accept(AntarchyNeoforgeItems.INFESTED_ROOTED_DIRT_ITEM.get()); event.accept(AntarchyNeoforgeItems.INFESTED_COARSE_DIRT_ITEM.get()); @@ -165,8 +168,13 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.CORN.get()); event.accept(AntarchyNeoforgeItems.HIGH_FRUCTOSE_CORN_SYRUP.get()); event.accept(AntarchyNeoforgeItems.PEACH.get()); + event.accept(AntarchyNeoforgeItems.PEACH_PIE.get()); + event.accept(AntarchyNeoforgeItems.CORNBREAD.get()); + event.accept(AntarchyNeoforgeItems.POPCORN.get()); event.accept(AntarchyNeoforgeItems.RAW_CORNDOG.get()); event.accept(AntarchyNeoforgeItems.COOKED_CORNDOG.get()); + event.accept(AntarchyNeoforgeItems.RAW_VENISON.get()); + event.accept(AntarchyNeoforgeItems.COOKED_VENISON.get()); event.accept(AntarchyNeoforgeItems.ROOT_BEER.get()); event.accept(AntarchyNeoforgeItems.RAINBOW_SUGAR.get()); event.accept(AntarchyNeoforgeItems.BIG_BERTHA_BLADE.get()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 0fbef14c..7630daa7 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -299,11 +299,12 @@ public final class AntarchyNeoforgeEntites { .sized(1.0F, 1.2F) .clientTrackingRange(8) .build("cheep")); - public static final DeferredHolder, EntityType> DORRIE = ENTITY_TYPES.register("dorrie", - () -> EntityType.Builder.of(DorrieEntity::new, MobCategory.CREATURE) - .sized(1.6F, 1.4F) - .clientTrackingRange(10) - .build("dorrie")); + // Dorrie is not part of this update yet. + // public static final DeferredHolder, EntityType> DORRIE = ENTITY_TYPES.register("dorrie", + // () -> EntityType.Builder.of(DorrieEntity::new, MobCategory.CREATURE) + // .sized(1.6F, 1.4F) + // .clientTrackingRange(10) + // .build("dorrie")); public static final DeferredHolder, EntityType> OURANWOOD_DEER = ENTITY_TYPES.register("ouranwood_deer", () -> EntityType.Builder.of(OuranwoodDeerEntity::new, MobCategory.CREATURE) .sized(0.9F, 1.4F) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java index 0fc3ca9f..a56d950b 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java @@ -73,7 +73,8 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.MOLEWORM.get(), MolewormEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.MOLEVORE.get(), MolevoreEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build()); - event.put(AntarchyNeoforgeEntites.DORRIE.get(), com.craisinlord.antarchy.content.entity.DorrieEntity.createAttributes().build()); + // Dorrie is not part of this update yet. + // event.put(AntarchyNeoforgeEntites.DORRIE.get(), com.craisinlord.antarchy.content.entity.DorrieEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.entity.OuranwoodDeerEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.GLIMMER.get(), com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.ELKA.get(), ElkaEntity.createAttributes().build()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 7647b884..bdee968a 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -176,6 +176,8 @@ public final class AntarchyNeoforgeItems { // public static final DeferredItem OURANWOOD_VINE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_VINE); public static final DeferredItem ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ORANGE_MILKWEED); public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PINK_MILKWEED); + public static final DeferredItem CAMELLIA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CAMELLIA); + public static final DeferredItem SPIDER_LILY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SPIDER_LILY); public static final DeferredItem OURANWOOD_SIGN_ITEM = ITEMS.register("ouranwood_sign", () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyNeoforgeBlocks.OURANWOOD_SIGN.get(), AntarchyNeoforgeBlocks.OURANWOOD_WALL_SIGN.get())); public static final DeferredItem OURANWOOD_HANGING_SIGN_ITEM = ITEMS.register("ouranwood_hanging_sign", @@ -378,6 +380,27 @@ public final class AntarchyNeoforgeItems { .build()))); public static final DeferredItem PEACH = ITEMS.register("peach", () -> new PeachItem()); + public static final DeferredItem PEACH_PIE = ITEMS.register("peach_pie", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.3F) + .build()))); + public static final DeferredItem CORNBREAD = ITEMS.register("cornbread", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.9F) + .build()))); + public static final DeferredItem POPCORN = ITEMS.register("popcorn", + () -> new Item(new Item.Properties() + .stacksTo(64) + .food(new FoodProperties.Builder() + .nutrition(1) + .saturationModifier(0.1F) + .build()))); public static final DeferredItem RAW_CORNDOG = ITEMS.register("raw_corndog", () -> new Item(new Item.Properties() .stacksTo(64) @@ -539,8 +562,9 @@ public final class AntarchyNeoforgeItems { )); public static final DeferredItem GRAVITY_GUN = ITEMS.register("gravity_gun", () -> new GravityGunItem(new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant())); - public static final DeferredItem MINERS_DREAM = ITEMS.register("miners_dream", - () -> new MinersDreamItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); + // Temporarily disabled: keeping the code but not registering the item for now. + // public static final DeferredItem MINERS_DREAM = ITEMS.register("miners_dream", + // () -> new MinersDreamItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); public static final DeferredItem SQUIDZOOKA = ITEMS.register("squidzooka", () -> new SquidzookaItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); public static final DeferredItem BATTLE_AXE = ITEMS.register("battle_axe", @@ -564,8 +588,9 @@ public final class AntarchyNeoforgeItems { // Spawn eggs public static final DeferredItem EASTER_BUNNY_SPAWN_EGG = ITEMS.register("easter_bunny_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.EASTER_BUNNY, 0xFFF2B2, 0xFF85B5, new Item.Properties())); - public static final DeferredItem DORRIE_SPAWN_EGG = ITEMS.register("dorrie_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.DORRIE, 0x6F8CFF, 0xD2F2FF, new Item.Properties())); + // Dorrie is not part of this update yet. + // public static final DeferredItem DORRIE_SPAWN_EGG = ITEMS.register("dorrie_spawn_egg", + // () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.DORRIE, 0x6F8CFF, 0xD2F2FF, new Item.Properties())); public static final DeferredItem OURANWOOD_DEER_SPAWN_EGG = ITEMS.register("ouranwood_deer_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.OURANWOOD_DEER, 0x8A6D4B, 0xE8D9B5, new Item.Properties())); public static final DeferredItem GLIMMER_SPAWN_EGG = ITEMS.register("glimmer_spawn_egg", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index 1cc6e0db..c43600f6 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -241,8 +241,6 @@ public final class AntarchyNeoforgeMisc { () -> new CornPatchFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_BUTTERFLY_FIELDS_FLORA = FEATURES.register("butterfly_fields_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.BUTTERFLY_FIELDS)); - public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_TORCHFLOWER_FIELDS_FLORA = FEATURES.register("elythia_torchflower_fields_flora", - () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.TORCHFLOWER_FIELDS)); public static final DeferredHolder, ElythiaSurfaceCoverFeature> ELYTHIA_SURFACE_COVER = FEATURES.register("elythia_surface_cover", () -> new ElythiaSurfaceCoverFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaUndergroundFeature> ELYTHIA_UNDERGROUND = FEATURES.register("elythia_underground", @@ -267,6 +265,8 @@ public final class AntarchyNeoforgeMisc { () -> new LumenLilyPadFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, LumenStreamFeature> LUMEN_STREAM = FEATURES.register("lumen_streams", () -> new LumenStreamFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, LumenSpireFeature> LUMEN_SPIRE = FEATURES.register("lumen_spires", + () -> new LumenSpireFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaTuffBoulderFeature> ELYTHIA_TUFF_BOULDER = FEATURES.register("elythia_tuff_boulder", () -> new ElythiaTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaLargeTuffBoulderFeature> ELYTHIA_LARGE_TUFF_BOULDER = FEATURES.register("elythia_large_tuff_boulder", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java index e79e8067..3be87c86 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java @@ -48,9 +48,10 @@ public class AntarchyNeoforgeSpawnPlacements { event.register(AntarchyNeoforgeEntites.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.CHEEP.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AbstractFish::checkSurfaceWaterAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); - event.register(AntarchyNeoforgeEntites.DORRIE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); + // Dorrie is not part of this update yet. + // event.register(AntarchyNeoforgeEntites.DORRIE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.OURANWOOD_DEER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); - event.register(AntarchyNeoforgeEntites.GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity::checkGlimmerSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.ELKA.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); } } From 246e511597f8456f0b28f17895939d62889a7788 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Wed, 15 Jul 2026 22:29:08 -0500 Subject: [PATCH 3/3] Add Kraken's Grasp trident, kraken tentacle, RPO Launcher, and Star Coral - Kraken's Grasp: throwable trident upgrade with innate configurable Loyalty, always-on lightning strikes, and Kraken Tentacle spawns on landing that grab/slow/damage nearby entities in an area - Kraken Tentacle item/entity, added as a Kraken loot drop - RPO Launcher: Squidzooka-style weapon firing Octopus Bombs that fall under gravity and detonate in an ink explosion on impact - Star Coral: full alive/dead coral block set (plant/fan/wall fan/block) with light emission and natural ocean worldgen generation - Supporting config, tags, recipes, advancements, lang, and creative tab entries for all of the above --- .../antarchy/config/AntarchySettings.java | 46 ++ .../antarchy/content/AntarchyObjects.java | 48 ++ .../antarchy/content/AntarchyTags.java | 1 + .../antarchy/content/CreativeTabOrder.java | 91 ++-- .../content/RpoLauncherDispenseBehavior.java | 41 ++ .../content/block/GiantLilyPadBlock.java | 345 ++++++++++++ .../content/block/StarCoralBlock.java | 73 +++ .../content/block/StarCoralFanBlock.java | 60 +++ .../content/block/StarCoralPlantBlock.java | 69 +++ .../content/block/StarCoralWallFanBlock.java | 64 +++ .../content/client/model/TentacleModel.java | 22 + .../client/renderer/TentacleRenderer.java | 13 + .../content/entity/OctopusBombEntity.java | 58 +++ .../kraken/KrakensGraspThrownTrident.java | 109 ++++ .../content/entity/kraken/TentacleEntity.java | 159 ++++++ .../content/item/KrakensGraspItem.java | 171 ++++++ .../content/item/RpoLauncherItem.java | 194 +++++++ .../worldgen/ocean/StarCoralPatchFeature.java | 74 +++ .../mixins/SquidzookaMultishotMixin.java | 10 +- .../animations/rpo_launcher.animation.json | 385 ++++++++++++++ .../animations/tenctacle.animation.json | 491 ++++++++++++++++++ .../antarchy/blockstates/dead_star_coral.json | 7 + .../blockstates/dead_star_coral_block.json | 7 + .../blockstates/dead_star_coral_fan.json | 7 + .../blockstates/dead_star_coral_wall_fan.json | 19 + .../antarchy/blockstates/giant_lily_pad.json | 220 ++++++++ .../antarchy/blockstates/star_coral.json | 7 + .../blockstates/star_coral_block.json | 7 + .../antarchy/blockstates/star_coral_fan.json | 7 + .../blockstates/star_coral_wall_fan.json | 19 + .../antarchy/geo/krakens_grasp.geo.json | 202 +++++++ .../assets/antarchy/geo/rpo_launcher.geo.json | 287 ++++++++++ .../assets/antarchy/geo/tentacle.geo.json | 115 ++++ .../resources/assets/antarchy/lang/en_us.json | 14 + .../models/block/dead_star_coral.json | 6 + .../models/block/dead_star_coral_block.json | 6 + .../models/block/dead_star_coral_fan.json | 6 + .../block/dead_star_coral_wall_fan.json | 6 + .../block/giant_lily_pad/single/single/0.json | 43 ++ .../giant_lily_pad/single/single/180.json | 43 ++ .../giant_lily_pad/single/single/270.json | 43 ++ .../giant_lily_pad/single/single/90.json | 43 ++ .../three_by_three/bottom_left/0.json | 43 ++ .../three_by_three/bottom_left/180.json | 43 ++ .../three_by_three/bottom_left/270.json | 43 ++ .../three_by_three/bottom_left/90.json | 43 ++ .../three_by_three/bottom_middle/0.json | 43 ++ .../three_by_three/bottom_middle/180.json | 43 ++ .../three_by_three/bottom_middle/270.json | 43 ++ .../three_by_three/bottom_middle/90.json | 43 ++ .../three_by_three/bottom_right/0.json | 43 ++ .../three_by_three/bottom_right/180.json | 43 ++ .../three_by_three/bottom_right/270.json | 43 ++ .../three_by_three/bottom_right/90.json | 43 ++ .../three_by_three/center/0.json | 43 ++ .../three_by_three/center/180.json | 43 ++ .../three_by_three/center/270.json | 43 ++ .../three_by_three/center/90.json | 43 ++ .../three_by_three/middle_left/0.json | 43 ++ .../three_by_three/middle_left/180.json | 43 ++ .../three_by_three/middle_left/270.json | 43 ++ .../three_by_three/middle_left/90.json | 43 ++ .../three_by_three/middle_right/0.json | 43 ++ .../three_by_three/middle_right/180.json | 43 ++ .../three_by_three/middle_right/270.json | 43 ++ .../three_by_three/middle_right/90.json | 43 ++ .../three_by_three/top_left/0.json | 43 ++ .../three_by_three/top_left/180.json | 43 ++ .../three_by_three/top_left/270.json | 43 ++ .../three_by_three/top_left/90.json | 43 ++ .../three_by_three/top_middle/0.json | 43 ++ .../three_by_three/top_middle/180.json | 43 ++ .../three_by_three/top_middle/270.json | 43 ++ .../three_by_three/top_middle/90.json | 43 ++ .../three_by_three/top_right/0.json | 43 ++ .../three_by_three/top_right/180.json | 43 ++ .../three_by_three/top_right/270.json | 43 ++ .../three_by_three/top_right/90.json | 43 ++ .../two_by_one/bottom_middle/0.json | 43 ++ .../two_by_one/bottom_middle/180.json | 43 ++ .../two_by_one/bottom_middle/270.json | 43 ++ .../two_by_one/bottom_middle/90.json | 43 ++ .../two_by_one/middle_left/0.json | 43 ++ .../two_by_one/middle_left/180.json | 43 ++ .../two_by_one/middle_left/270.json | 43 ++ .../two_by_one/middle_left/90.json | 43 ++ .../two_by_one/middle_right/0.json | 43 ++ .../two_by_one/middle_right/180.json | 43 ++ .../two_by_one/middle_right/270.json | 43 ++ .../two_by_one/middle_right/90.json | 43 ++ .../two_by_one/top_middle/0.json | 43 ++ .../two_by_one/top_middle/180.json | 43 ++ .../two_by_one/top_middle/270.json | 43 ++ .../two_by_one/top_middle/90.json | 43 ++ .../two_by_two/bottom_left/0.json | 43 ++ .../two_by_two/bottom_left/180.json | 43 ++ .../two_by_two/bottom_left/270.json | 43 ++ .../two_by_two/bottom_left/90.json | 43 ++ .../two_by_two/bottom_right/0.json | 43 ++ .../two_by_two/bottom_right/180.json | 43 ++ .../two_by_two/bottom_right/270.json | 43 ++ .../two_by_two/bottom_right/90.json | 43 ++ .../giant_lily_pad/two_by_two/top_left/0.json | 43 ++ .../two_by_two/top_left/180.json | 43 ++ .../two_by_two/top_left/270.json | 43 ++ .../two_by_two/top_left/90.json | 43 ++ .../two_by_two/top_right/0.json | 43 ++ .../two_by_two/top_right/180.json | 43 ++ .../two_by_two/top_right/270.json | 43 ++ .../two_by_two/top_right/90.json | 43 ++ .../antarchy/models/block/star_coral.json | 6 + .../models/block/star_coral_block.json | 6 + .../antarchy/models/block/star_coral_fan.json | 6 + .../models/block/star_coral_wall_fan.json | 6 + .../antarchy/models/item/dead_star_coral.json | 6 + .../models/item/dead_star_coral_block.json | 3 + .../models/item/dead_star_coral_fan.json | 6 + .../antarchy/models/item/giant_lily_pad.json | 6 + .../antarchy/models/item/kraken_tentacle.json | 6 + .../models/item/krakens_grasp_gui.json | 7 + .../models/item/krakens_grasp_held.json | 121 +++++ .../models/item/rpo_launcher_gui.json | 7 + .../models/item/rpo_launcher_held_geo.json | 98 ++++ .../antarchy/models/item/star_coral.json | 6 + .../models/item/star_coral_block.json | 3 + .../antarchy/models/item/star_coral_fan.json | 6 + .../block/giant_lilypad/giant_lilypad_1x1.png | Bin 0 -> 456 bytes .../block/giant_lilypad/giant_lilypad_2x1.png | Bin 0 -> 644 bytes .../block/giant_lilypad/giant_lilypad_2x2.png | Bin 0 -> 924 bytes .../block/giant_lilypad/giant_lilypad_3x3.png | Bin 0 -> 1747 bytes .../giant_lilypad/giant_lilypad_full_1x1.png | Bin 0 -> 439 bytes .../giant_lilypad/giant_lilypad_full_2x1.png | Bin 0 -> 637 bytes .../giant_lilypad/giant_lilypad_full_2x2.png | Bin 0 -> 917 bytes .../giant_lilypad/giant_lilypad_full_3x3.png | Bin 0 -> 1733 bytes .../assets/antarchy/textures/block/lotus.png | Bin 0 -> 401 bytes .../block/star_coral/dead_star_coral.png | Bin 0 -> 219 bytes .../star_coral/dead_star_coral_block.png | Bin 0 -> 236 bytes .../block/star_coral/dead_star_coral_fan.png | Bin 0 -> 188 bytes .../textures/block/star_coral/star_coral.png | Bin 0 -> 1180 bytes .../block/star_coral/star_coral.png.mcmeta | 6 + .../block/star_coral/star_coral_block.png | Bin 0 -> 1552 bytes .../star_coral/star_coral_block.png.mcmeta | 6 + .../block/star_coral/star_coral_fan.png | Bin 0 -> 844 bytes .../star_coral/star_coral_fan.png.mcmeta | 6 + .../antarchy/textures/entity/tentacle.png | Bin 0 -> 1189 bytes .../assets/antarchy/textures/item/cheep.png | Bin 0 -> 581 bytes .../item/krakens_grasp/krakens_grasp.png | Bin 0 -> 919 bytes .../item/krakens_grasp/krakens_grasp_item.png | Bin 0 -> 466 bytes .../textures/item/rpo_launcher_item.png | Bin 0 -> 525 bytes .../textures/models/item/rpo_launcher.png | Bin 0 -> 5809 bytes .../advancement/rocket_powered_octopus.json | 36 ++ .../loot_table/blocks/dead_star_coral.json | 28 + .../blocks/dead_star_coral_block.json | 19 + .../blocks/dead_star_coral_fan.json | 28 + .../blocks/dead_star_coral_wall_fan.json | 28 + .../loot_table/blocks/giant_lily_pad.json | 15 + .../loot_table/blocks/star_coral.json | 28 + .../loot_table/blocks/star_coral_block.json | 42 ++ .../loot_table/blocks/star_coral_fan.json | 28 + .../blocks/star_coral_wall_fan.json | 28 + .../antarchy/loot_table/entities/kraken.json | 18 + .../data/antarchy/recipe/krakens_grasp.json | 14 + .../recipe/miners_dream.json.disabled | 19 + .../data/antarchy/recipe/rpo_launcher.json | 21 + .../antarchy/tags/block/coral_blocks.json | 6 + .../antarchy/tags/block/coral_plants.json | 6 + .../data/antarchy/tags/block/corals.json | 7 + .../data/antarchy/tags/block/wall_corals.json | 6 + .../giant_lily_pad_supporting_fluids.json | 7 + .../tags/item/multishot_enchantable.json | 3 +- .../tags/worldgen/biome/has_star_coral.json | 14 + .../worldgen/biome/butterfly_fields.json | 8 +- .../antarchy/worldgen/biome/peach_forest.json | 2 +- .../configured_feature/star_coral_patch.json | 4 + .../placed_feature/star_coral_patch.json | 19 + .../tags/block/mineable/pickaxe.json | 10 +- .../tags/block/underwater_bonemeals.json | 7 + .../tags/item/enchantable/trident.json | 6 + .../antarchy/fabric/AntarchyFabric.java | 13 + .../fabric/AntarchyFabricContent.java | 9 +- .../antarchy/fabric/AntarchyFabricEvents.java | 2 + .../client/AntarchyFabricClientBootstrap.java | 10 + .../mixin/client/CrossbowArmPoseMixin.java | 3 +- .../fabric/registry/AntarchyFabricBlocks.java | 36 ++ .../registry/AntarchyFabricEntities.java | 15 + .../AntarchyFabricEntityAttributes.java | 2 + .../fabric/registry/AntarchyFabricItems.java | 42 ++ .../fabric/registry/AntarchyFabricMisc.java | 4 + .../antarchy/models/item/krakens_grasp.json | 3 + .../antarchy/models/item/rpo_launcher.json | 3 + .../AntarchyConfigModuleNeoforge.java | 14 + .../antarchy/neoforge/AntarchyNeoforge.java | 8 + .../neoforge/AntarchyToolsConfig.java | 49 ++ .../client/AntarchyNeoForgeClient.java | 11 + .../registry/AntarchyNeoForgeEvents.java | 1 + .../registry/AntarchyNeoforgeBlocks.java | 18 + .../AntarchyNeoforgeCreativeModeTabs.java | 10 + .../registry/AntarchyNeoforgeEntites.java | 16 + .../AntarchyNeoforgeEntityAttributes.java | 2 + .../registry/AntarchyNeoforgeItems.java | 18 + .../registry/AntarchyNeoforgeMisc.java | 2 + .../antarchy/models/item/krakens_grasp.json | 25 + .../antarchy/models/item/rpo_launcher.json | 18 + .../biome_modifier/star_coral_in_oceans.json | 6 + 204 files changed, 7622 insertions(+), 54 deletions(-) create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/RpoLauncherDispenseBehavior.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralFanBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralPlantBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralWallFanBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/TentacleModel.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/TentacleRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakensGraspThrownTrident.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/KrakensGraspItem.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/ocean/StarCoralPatchFeature.java create mode 100644 common/src/main/resources/assets/antarchy/animations/rpo_launcher.animation.json create mode 100644 common/src/main/resources/assets/antarchy/animations/tenctacle.animation.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/dead_star_coral.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_block.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_fan.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_wall_fan.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/giant_lily_pad.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/star_coral.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/star_coral_block.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/star_coral_fan.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/star_coral_wall_fan.json create mode 100644 common/src/main/resources/assets/antarchy/geo/krakens_grasp.geo.json create mode 100644 common/src/main/resources/assets/antarchy/geo/rpo_launcher.geo.json create mode 100644 common/src/main/resources/assets/antarchy/geo/tentacle.geo.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/dead_star_coral.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/dead_star_coral_block.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/dead_star_coral_fan.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/dead_star_coral_wall_fan.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/0.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/180.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/270.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/90.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/star_coral.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/star_coral_block.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/star_coral_fan.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/star_coral_wall_fan.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/dead_star_coral.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/dead_star_coral_block.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/dead_star_coral_fan.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/giant_lily_pad.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/kraken_tentacle.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/krakens_grasp_gui.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/krakens_grasp_held.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/rpo_launcher_gui.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/rpo_launcher_held_geo.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/star_coral.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/star_coral_block.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/star_coral_fan.json create mode 100644 common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_1x1.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_2x1.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_2x2.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_3x3.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_1x1.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_2x1.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_2x2.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_full_3x3.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/lotus.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_block.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_fan.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png.mcmeta create mode 100644 common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_block.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_block.png.mcmeta create mode 100644 common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_fan.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral_fan.png.mcmeta create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/tentacle.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/cheep.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp_item.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/rpo_launcher_item.png create mode 100644 common/src/main/resources/assets/antarchy/textures/models/item/rpo_launcher.png create mode 100644 common/src/main/resources/data/antarchy/advancement/rocket_powered_octopus.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_block.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_fan.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/dead_star_coral_wall_fan.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/giant_lily_pad.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/star_coral.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/star_coral_block.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/star_coral_fan.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/star_coral_wall_fan.json create mode 100644 common/src/main/resources/data/antarchy/recipe/krakens_grasp.json create mode 100644 common/src/main/resources/data/antarchy/recipe/miners_dream.json.disabled create mode 100644 common/src/main/resources/data/antarchy/recipe/rpo_launcher.json create mode 100644 common/src/main/resources/data/antarchy/tags/block/coral_blocks.json create mode 100644 common/src/main/resources/data/antarchy/tags/block/coral_plants.json create mode 100644 common/src/main/resources/data/antarchy/tags/block/corals.json create mode 100644 common/src/main/resources/data/antarchy/tags/block/wall_corals.json create mode 100644 common/src/main/resources/data/antarchy/tags/fluids/giant_lily_pad_supporting_fluids.json create mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/has_star_coral.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/star_coral_patch.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/star_coral_patch.json create mode 100644 common/src/main/resources/data/minecraft/tags/block/underwater_bonemeals.json create mode 100644 common/src/main/resources/data/minecraft/tags/item/enchantable/trident.json create mode 100644 fabric/src/main/resources/assets/antarchy/models/item/krakens_grasp.json create mode 100644 fabric/src/main/resources/assets/antarchy/models/item/rpo_launcher.json create mode 100644 neoforge/src/main/resources/assets/antarchy/models/item/krakens_grasp.json create mode 100644 neoforge/src/main/resources/assets/antarchy/models/item/rpo_launcher.json create mode 100644 neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/star_coral_in_oceans.json diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index 62426b0e..4b2856df 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -53,6 +53,16 @@ public final class AntarchySettings { private static double bigBerthaAttackDamage = 55.0D; private static double bigBerthaReachBonus = 3.0D; private static double bigBerthaAttackSpeed = -3.0D; + private static double krakensGraspAttackDamage = 16.0D; + private static double krakensGraspAttackSpeed = -2.9D; + private static double krakensGraspThrownDamage = 16.0D; + private static double krakensGraspLightningDamage = 6.0D; + private static boolean krakensGraspInnateLoyalty = true; + private static int krakensGraspInnateLoyaltyLevel = 3; + private static int krakensGraspTentacleDurationTicks = 100; + private static double krakensGraspTentacleDamage = 3.0D; + private static double krakensGraspTentacleRadius = 3.0D; + private static int krakensGraspTentacleDamageIntervalTicks = 20; private static double scorpionWhipBaseDamage = 10.0D; private static double scorpionWhipReachBonus = 5.0D; private static int scorpionWhipPoisonDurationTicks = 100; @@ -117,6 +127,10 @@ public final class AntarchySettings { private static boolean krakenMassSpawnEnabled = true; private static double squidzookaCooldownSeconds = 1.0D; private static double squidzookaLaunchVelocity = 2.1D; + private static double rpoLauncherCooldownSeconds = 1.0D; + private static double rpoLauncherLaunchVelocity = 2.1D; + private static double rpoLauncherExplosionDamage = 14.0D; + private static double rpoLauncherExplosionRadius = 4.0D; private static double sizeRayCooldownSeconds = 1.0D; private static boolean invertProjectilesFromInvertedPlayers = false; private static boolean gravityGunEnabled = true; @@ -774,6 +788,17 @@ public final class AntarchySettings { return krakenAttackDamage; } + public static double krakensGraspAttackDamage() { return krakensGraspAttackDamage; } + public static double krakensGraspAttackSpeed() { return krakensGraspAttackSpeed; } + public static double krakensGraspThrownDamage() { return krakensGraspThrownDamage; } + public static double krakensGraspLightningDamage() { return krakensGraspLightningDamage; } + public static boolean krakensGraspInnateLoyalty() { return krakensGraspInnateLoyalty; } + public static int krakensGraspInnateLoyaltyLevel() { return krakensGraspInnateLoyaltyLevel; } + public static int krakensGraspTentacleDurationTicks() { return krakensGraspTentacleDurationTicks; } + public static double krakensGraspTentacleDamage() { return krakensGraspTentacleDamage; } + public static double krakensGraspTentacleRadius() { return krakensGraspTentacleRadius; } + public static int krakensGraspTentacleDamageIntervalTicks() { return krakensGraspTentacleDamageIntervalTicks; } + public static double octopusBombHealth() { return octopusBombHealth; } @@ -918,6 +943,11 @@ public final class AntarchySettings { return squidzookaLaunchVelocity; } + public static double rpoLauncherCooldownSeconds() { return rpoLauncherCooldownSeconds; } + public static double rpoLauncherLaunchVelocity() { return rpoLauncherLaunchVelocity; } + public static double rpoLauncherExplosionDamage() { return rpoLauncherExplosionDamage; } + public static double rpoLauncherExplosionRadius() { return rpoLauncherExplosionRadius; } + public static double sizeRayCooldownSeconds() { return sizeRayCooldownSeconds; } @@ -1292,6 +1322,17 @@ public final class AntarchySettings { krakenAttackDamage = value; } + public static void setKrakensGraspAttackDamage(double value) { krakensGraspAttackDamage = value; } + public static void setKrakensGraspAttackSpeed(double value) { krakensGraspAttackSpeed = value; } + public static void setKrakensGraspThrownDamage(double value) { krakensGraspThrownDamage = value; } + public static void setKrakensGraspLightningDamage(double value) { krakensGraspLightningDamage = value; } + public static void setKrakensGraspInnateLoyalty(boolean value) { krakensGraspInnateLoyalty = value; } + public static void setKrakensGraspInnateLoyaltyLevel(int value) { krakensGraspInnateLoyaltyLevel = value; } + public static void setKrakensGraspTentacleDurationTicks(int value) { krakensGraspTentacleDurationTicks = value; } + public static void setKrakensGraspTentacleDamage(double value) { krakensGraspTentacleDamage = value; } + public static void setKrakensGraspTentacleRadius(double value) { krakensGraspTentacleRadius = value; } + public static void setKrakensGraspTentacleDamageIntervalTicks(int value) { krakensGraspTentacleDamageIntervalTicks = value; } + public static void setBrutalflyHealth(double value) { brutalflyHealth = value; } @@ -1384,6 +1425,11 @@ public final class AntarchySettings { squidzookaLaunchVelocity = value; } + public static void setRpoLauncherCooldownSeconds(double value) { rpoLauncherCooldownSeconds = value; } + public static void setRpoLauncherLaunchVelocity(double value) { rpoLauncherLaunchVelocity = value; } + public static void setRpoLauncherExplosionDamage(double value) { rpoLauncherExplosionDamage = value; } + public static void setRpoLauncherExplosionRadius(double value) { rpoLauncherExplosionRadius = value; } + public static void setSizeRayCooldownSeconds(double value) { sizeRayCooldownSeconds = value; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index e660342a..9b3adf8b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -21,6 +21,8 @@ import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEnt import com.craisinlord.antarchy.content.entity.MissileSquidEntity; import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.kraken.KrakensGraspThrownTrident; +import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; import com.craisinlord.antarchy.content.entity.ReverieEntity; @@ -57,6 +59,10 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> MISSILE_SQUID = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> TENTACLE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> KRAKENS_GRASP_TRIDENT = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier> OCTOPUS_BOMB = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> MOLEWORM = (Supplier>) UNBOUND; @@ -117,6 +123,12 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier WILD_CORN = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier STAR_CORAL_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STAR_CORAL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STAR_CORAL_FAN = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier RAW_VENISON = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier COOKED_VENISON = (Supplier) UNBOUND; @@ -212,6 +224,10 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier KRAKEN_TOOTH = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier KRAKEN_TENTACLE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier KRAKENS_GRASP = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier MOGGLES = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier REVERIE_BOTTLE = (Supplier) UNBOUND; @@ -274,6 +290,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier BRUTALFLY_COCOON_SPAWNER = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier GIANT_LILY_PAD = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier> ANT_NEST_BLOCK_ENTITY = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> DREAM_CAMPFIRE_BLOCK_ENTITY = (Supplier>) UNBOUND; @@ -382,6 +400,7 @@ public final class AntarchyObjects { Supplier hushweed, Supplier squirrelNestBlock, Supplier brutalflyCocoonSpawner, + Supplier giantLilyPad, Supplier> antNestBlockEntity, Supplier> dreamCampfireBlockEntity, Supplier> waspNestBlockEntity, @@ -480,6 +499,7 @@ public final class AntarchyObjects { HUSHWEED = hushweed; SQUIRREL_NEST_BLOCK = squirrelNestBlock; BRUTALFLY_COCOON_SPAWNER = brutalflyCocoonSpawner; + GIANT_LILY_PAD = giantLilyPad; ANT_NEST_BLOCK_ENTITY = antNestBlockEntity; DREAM_CAMPFIRE_BLOCK_ENTITY = dreamCampfireBlockEntity; WASP_NEST_BLOCK_ENTITY = waspNestBlockEntity; @@ -500,6 +520,22 @@ public final class AntarchyObjects { OCTOPUS_BOMB = supplier; } + public static void setTentacle(Supplier> supplier) { + TENTACLE = supplier; + } + + public static void setKrakensGraspTrident(Supplier> supplier) { + KRAKENS_GRASP_TRIDENT = supplier; + } + + public static void setKrakenTentacle(Supplier supplier) { + KRAKEN_TENTACLE = supplier; + } + + public static void setKrakensGrasp(Supplier supplier) { + KRAKENS_GRASP = supplier; + } + public static void setHerculesBeetle(Supplier> supplier) { HERCULES_BEETLE = supplier; } @@ -556,6 +592,18 @@ public final class AntarchyObjects { WILD_CORN = supplier; } + public static void setStarCoralBlock(Supplier supplier) { + STAR_CORAL_BLOCK = supplier; + } + + public static void setStarCoral(Supplier supplier) { + STAR_CORAL = supplier; + } + + public static void setStarCoralFan(Supplier supplier) { + STAR_CORAL_FAN = supplier; + } + public static void setRawVenison(Supplier supplier) { RAW_VENISON = supplier; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index ac89e719..baf200b2 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -111,6 +111,7 @@ public final class AntarchyTags { public static final class Fluids { public static final TagKey LUMEN = TagKey.create(Registries.FLUID, id("lumen")); + public static final TagKey GIANT_LILY_PAD_SUPPORTING_FLUIDS = TagKey.create(Registries.FLUID, id("giant_lily_pad_supporting_fluids")); private Fluids() { } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java b/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java index 8d085b67..8ce4587f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java @@ -61,7 +61,9 @@ public final class CreativeTabOrder { case "duplicator_sapling", "ouranwood_acorn", "peach_sapling", "corn_seeds" -> 10; case "orange_milkweed", "pink_milkweed", "camellia", "spider_lily", "hushweed", "amber_lichen", "creepvine", "triffid_goo_block", "cloud_block", "wasp_nest", - "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest", "termite_nest" -> 11; + "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest", "termite_nest", + "star_coral", "star_coral_fan", "star_coral_block", + "dead_star_coral", "dead_star_coral_fan", "dead_star_coral_block" -> 11; case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling", "lumen_froglight", "roseate_froglight" -> 12; case "antimetal_scaffolding" -> 13; @@ -71,10 +73,10 @@ public final class CreativeTabOrder { "duct_tape", "diamond_minecart", "gravity_sculk_sensor", "miners_dream" -> 15; case "bile_bucket", "ichor_bucket", "antiwater_bucket", "cloud_bucket", "lumen_bucket" -> 16; case "moggles", "brutalfly_elytra", "fallen_king_crown", "jumpy_boots" -> 17; - case "battle_axe", "basilisk_dagger", "squidzooka", "shrink_ray", "growth_ray", + case "battle_axe", "basilisk_dagger", "squidzooka", "rpo_launcher", "shrink_ray", "growth_ray", "gravity_gun", "water_cannon", "nightmare_sword", "lucid_pearl", "scorpion_whip", "blood_crystal_katana", "big_bertha", "big_bertha_blade", "big_bertha_handle", "big_bertha_hilt", - "ultimate_sword", "ultimate_mace" -> 18; + "ultimate_sword", "ultimate_mace", "krakens_grasp" -> 18; case "primordial_helmet", "primordial_chestplate", "primordial_leggings", "primordial_boots", "blood_crystal_helmet", "blood_crystal_chestplate", @@ -87,7 +89,7 @@ public final class CreativeTabOrder { case "cloud_shark_fin_soup", "mud_pie", "peach_pie", "cornbread", "popcorn", "rainbow_sugar", "blood_crystal_apple", "spirit_apple", "peach", "raw_corndog", "cooked_corndog", "raw_venison", "cooked_venison" -> 21; - case "blood_crystal_shard", "cloud_shark_fin", "basilisk_fang", "kraken_tooth", + case "blood_crystal_shard", "cloud_shark_fin", "basilisk_fang", "kraken_tooth", "kraken_tentacle", "emperor_scorpion_stinger", "nightmare_scale", "molevore_nose", "moleworm", "uranium_nugget", "titanium_nugget", "uranium_ingot", "titanium_ingot", "lucid_eye", @@ -171,6 +173,12 @@ public final class CreativeTabOrder { case "brown_ant_nest" -> 11; case "rainbow_ant_nest" -> 12; case "termite_nest" -> 13; + case "star_coral" -> 14; + case "star_coral_fan" -> 15; + case "star_coral_block" -> 16; + case "dead_star_coral" -> 17; + case "dead_star_coral_fan" -> 18; + case "dead_star_coral_block" -> 19; case "blood_crystal_block" -> 0; case "small_blood_crystal_bud" -> 1; case "medium_blood_crystal_bud" -> 2; @@ -243,20 +251,22 @@ public final class CreativeTabOrder { case "battle_axe" -> 0; case "basilisk_dagger" -> 1; case "squidzooka" -> 2; - case "shrink_ray" -> 3; - case "growth_ray" -> 4; - case "gravity_gun" -> 5; - case "water_cannon" -> 6; - case "nightmare_sword" -> 7; - case "lucid_pearl" -> 8; - case "scorpion_whip" -> 9; - case "blood_crystal_katana" -> 10; - case "big_bertha" -> 11; - case "big_bertha_blade" -> 12; - case "big_bertha_handle" -> 13; - case "big_bertha_hilt" -> 14; - case "ultimate_sword" -> 15; - case "ultimate_mace" -> 16; + case "rpo_launcher" -> 3; + case "shrink_ray" -> 4; + case "growth_ray" -> 5; + case "gravity_gun" -> 6; + case "water_cannon" -> 7; + case "nightmare_sword" -> 8; + case "lucid_pearl" -> 9; + case "scorpion_whip" -> 10; + case "blood_crystal_katana" -> 11; + case "big_bertha" -> 12; + case "big_bertha_blade" -> 13; + case "big_bertha_handle" -> 14; + case "big_bertha_hilt" -> 15; + case "ultimate_sword" -> 16; + case "ultimate_mace" -> 17; + case "krakens_grasp" -> 18; case "primordial_helmet" -> 0; case "primordial_chestplate" -> 1; case "primordial_leggings" -> 2; @@ -295,28 +305,29 @@ public final class CreativeTabOrder { case "cloud_shark_fin" -> 1; case "basilisk_fang" -> 2; case "kraken_tooth" -> 3; - case "emperor_scorpion_stinger" -> 4; - case "nightmare_scale" -> 5; - case "molevore_nose" -> 6; - case "moleworm" -> 7; - case "uranium_nugget" -> 8; - case "titanium_nugget" -> 9; - case "uranium_ingot" -> 10; - case "titanium_ingot" -> 11; - case "lucid_eye" -> 12; - case "mantis_claw" -> 13; - case "jumpy_bug_leg" -> 14; - case "brutalfly_wing" -> 15; - case "cornea_ear" -> 16; - case "primordial_scute" -> 17; - case "triffid_goo" -> 18; - case "vortex_eye" -> 19; - case "king_scale" -> 20; - case "queen_scale" -> 21; - case "chiten" -> 22; - case "stink_bug" -> 23; - case "corn" -> 24; - case "high_fructose_corn_syrup" -> 25; + case "kraken_tentacle" -> 4; + case "emperor_scorpion_stinger" -> 5; + case "nightmare_scale" -> 6; + case "molevore_nose" -> 7; + case "moleworm" -> 8; + case "uranium_nugget" -> 9; + case "titanium_nugget" -> 10; + case "uranium_ingot" -> 11; + case "titanium_ingot" -> 12; + case "lucid_eye" -> 13; + case "mantis_claw" -> 14; + case "jumpy_bug_leg" -> 15; + case "brutalfly_wing" -> 16; + case "cornea_ear" -> 17; + case "primordial_scute" -> 18; + case "triffid_goo" -> 19; + case "vortex_eye" -> 20; + case "king_scale" -> 21; + case "queen_scale" -> 22; + case "chiten" -> 23; + case "stink_bug" -> 24; + case "corn" -> 25; + case "high_fructose_corn_syrup" -> 26; default -> 0; }; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/RpoLauncherDispenseBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/RpoLauncherDispenseBehavior.java new file mode 100644 index 00000000..8b5f0b5e --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/RpoLauncherDispenseBehavior.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import net.minecraft.core.Direction; +import net.minecraft.core.Position; +import net.minecraft.core.dispenser.BlockSource; +import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.block.DispenserBlock; + +public class RpoLauncherDispenseBehavior extends DefaultDispenseItemBehavior { + @Override + protected ItemStack execute(BlockSource source, ItemStack stack) { + Direction direction = source.state().getValue(DispenserBlock.FACING); + Position position = DispenserBlock.getDispensePosition(source); + + OctopusBombEntity bomb = AntarchyObjects.OCTOPUS_BOMB.get().create(source.level()); + if (bomb == null) return super.execute(source, stack); + + bomb.setPos(position.x(), position.y(), position.z()); + Vec3 vel = new Vec3(direction.getStepX(), direction.getStepY(), direction.getStepZ()) + .normalize() + .scale(AntarchySettings.rpoLauncherLaunchVelocity()); + bomb.launchAsProjectile(null, vel); + source.level().addFreshEntity(bomb); + + if (stack.isDamageableItem()) { + int nextDamage = stack.getDamageValue() + 1; + if (nextDamage >= stack.getMaxDamage()) { + stack.shrink(1); + } else { + stack.setDamageValue(nextDamage); + } + } else { + stack.shrink(1); + } + return stack; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java new file mode 100644 index 00000000..be01b968 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java @@ -0,0 +1,345 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.mojang.serialization.MapCodec; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.StringRepresentable; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; + +public final class GiantLilyPadBlock extends Block { + public static final MapCodec CODEC = Block.simpleCodec(GiantLilyPadBlock::new); + public static final EnumProperty SHAPE = EnumProperty.create("shape", Shape.class); + public static final EnumProperty TILE_POSITION = EnumProperty.create("tile_position", TilePosition.class); + public static final EnumProperty ROTATION = EnumProperty.create("rotation", PadRotation.class); + + private static final VoxelShape SHAPE_BOX = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 0.5D, 16.0D); + private static final int SEARCH_RADIUS = 2; + private static final ThreadLocal RESTRUCTURING_DEPTH = ThreadLocal.withInitial(() -> 0); + + public GiantLilyPadBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(SHAPE, Shape.SINGLE) + .setValue(TILE_POSITION, TilePosition.SINGLE) + .setValue(ROTATION, PadRotation.DEG_0)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(SHAPE, TILE_POSITION, ROTATION); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return canSurvive(defaultBlockState(), context.getLevel(), context.getClickedPos()) ? defaultBlockState() : null; + } + + @Override + protected RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE_BOX; + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return isSupported(level, pos); + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (!state.canSurvive(level, pos)) { + if (level instanceof ServerLevel serverLevel) { + recalculateNearbyPads(serverLevel, pos); + } + return Blocks.AIR.defaultBlockState(); + } + + if (level instanceof ServerLevel serverLevel) { + recalculateNearbyPads(serverLevel, pos); + } + + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + if (!level.isClientSide && !oldState.is(state.getBlock()) && level instanceof ServerLevel serverLevel) { + recalculateNearbyPads(serverLevel, pos); + } + } + + @Override + protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + super.onRemove(state, level, pos, newState, movedByPiston); + if (!level.isClientSide && !state.is(newState.getBlock()) && level instanceof ServerLevel serverLevel) { + recalculateNearbyPads(serverLevel, pos); + } + } + + private static boolean isSupported(LevelReader level, BlockPos pos) { + return level.getFluidState(pos).is(AntarchyTags.Fluids.GIANT_LILY_PAD_SUPPORTING_FLUIDS) + || level.getFluidState(pos.below()).is(AntarchyTags.Fluids.GIANT_LILY_PAD_SUPPORTING_FLUIDS); + } + + private static void recalculateNearbyPads(ServerLevel level, BlockPos center) { + if (isRestructuring()) { + return; + } + + withRestructuringGuard(() -> { + int minX = center.getX() - SEARCH_RADIUS; + int maxX = center.getX() + SEARCH_RADIUS; + int minZ = center.getZ() - SEARCH_RADIUS; + int maxZ = center.getZ() + SEARCH_RADIUS; + int y = center.getY(); + + List candidates = new ArrayList<>(); + collectCandidates(level, y, minX, maxX, minZ, maxZ, candidates); + + candidates.sort(Comparator + .comparingInt(ShapeCandidate::area).reversed() + .thenComparingInt(candidate -> candidate.anchor().getX()) + .thenComparingInt(candidate -> candidate.anchor().getZ()) + .thenComparingInt(candidate -> candidate.shape().ordinal())); + + List assigned = new ArrayList<>(); + for (ShapeCandidate candidate : candidates) { + boolean blocked = false; + for (BlockPos pos : candidate.positions()) { + if (assigned.contains(pos)) { + blocked = true; + break; + } + } + if (blocked) { + continue; + } + + PadRotation rotation = rotationFor(level, candidate.anchor()); + for (TileAssignment tile : candidate.tiles()) { + BlockPos pos = tile.pos(); + BlockState newState = level.getBlockState(pos); + if (!newState.is(candidate.block())) { + continue; + } + BlockState shapedState = candidate.block().defaultBlockState() + .setValue(SHAPE, candidate.shape()) + .setValue(TILE_POSITION, tile.tilePosition()) + .setValue(ROTATION, rotation); + if (!newState.equals(shapedState)) { + level.setBlock(pos, shapedState, Block.UPDATE_CLIENTS); + } + assigned.add(pos); + } + } + }); + } + + private static void collectCandidates(ServerLevel level, int y, int minX, int maxX, int minZ, int maxZ, List out) { + addRectCandidates(level, y, minX, maxX, minZ, maxZ, Shape.THREE_BY_THREE, GridLayouts.THREE_BY_THREE, out); + addRectCandidates(level, y, minX, maxX, minZ, maxZ, Shape.TWO_BY_TWO, GridLayouts.TWO_BY_TWO, out); + addRectCandidates(level, y, minX, maxX, minZ, maxZ, Shape.TWO_BY_ONE, GridLayouts.TWO_BY_ONE_HORIZONTAL, out); + addRectCandidates(level, y, minX, maxX, minZ, maxZ, Shape.TWO_BY_ONE, GridLayouts.TWO_BY_ONE_VERTICAL, out); + addRectCandidates(level, y, minX, maxX, minZ, maxZ, Shape.SINGLE, GridLayouts.SINGLE, out); + } + + private static void addRectCandidates(ServerLevel level, int y, int minX, int maxX, int minZ, int maxZ, Shape shape, GridLayout layout, List out) { + int width = layout.width(); + int height = layout.height(); + for (int anchorX = minX; anchorX <= maxX - width + 1; anchorX++) { + for (int anchorZ = minZ; anchorZ <= maxZ - height + 1; anchorZ++) { + BlockPos anchor = new BlockPos(anchorX, y, anchorZ); + ShapeCandidate candidate = createCandidate(level, anchor, shape, layout); + if (candidate != null) { + out.add(candidate); + } + } + } + } + + @Nullable + private static ShapeCandidate createCandidate(ServerLevel level, BlockPos anchor, Shape shape, GridLayout layout) { + BlockState anchorState = level.getBlockState(anchor); + if (!(anchorState.getBlock() instanceof GiantLilyPadBlock giantLilyPadBlock)) { + return null; + } + + List tiles = new ArrayList<>(layout.width() * layout.height()); + for (int row = 0; row < layout.height(); row++) { + for (int column = 0; column < layout.width(); column++) { + BlockPos pos = anchor.offset(column, 0, row); + if (!level.getBlockState(pos).is(giantLilyPadBlock)) { + return null; + } + TilePosition tilePosition = layout.tiles()[row][column]; + tiles.add(new TileAssignment(pos, tilePosition)); + } + } + + return new ShapeCandidate(giantLilyPadBlock, shape, anchor, tiles); + } + + private static boolean isRestructuring() { + return RESTRUCTURING_DEPTH.get() > 0; + } + + private static void withRestructuringGuard(Runnable action) { + RESTRUCTURING_DEPTH.set(RESTRUCTURING_DEPTH.get() + 1); + try { + action.run(); + } finally { + RESTRUCTURING_DEPTH.set(Math.max(0, RESTRUCTURING_DEPTH.get() - 1)); + } + } + + private static PadRotation rotationFor(ServerLevel level, BlockPos anchor) { + long seed = level.getSeed(); + long mix = seed + ^ anchor.asLong() + ^ Long.rotateLeft(seed, 17) + ^ Long.rotateLeft(anchor.asLong(), 31); + int index = (int) Math.floorMod(mix, 4L); + return PadRotation.values()[index]; + } + + private record ShapeCandidate(GiantLilyPadBlock block, Shape shape, BlockPos anchor, List tiles) { + int area() { + return this.tiles.size(); + } + + List positions() { + return this.tiles.stream().map(TileAssignment::pos).toList(); + } + } + + private record TileAssignment(BlockPos pos, TilePosition tilePosition) { + } + + private record GridLayout(TilePosition[][] tiles) { + int width() { + return this.tiles[0].length; + } + + int height() { + return this.tiles.length; + } + } + + private static final class GridLayouts { + private static final GridLayout SINGLE = new GridLayout(new TilePosition[][]{ + {TilePosition.SINGLE} + }); + + private static final GridLayout TWO_BY_ONE_HORIZONTAL = new GridLayout(new TilePosition[][]{ + {TilePosition.MIDDLE_LEFT, TilePosition.MIDDLE_RIGHT} + }); + + private static final GridLayout TWO_BY_ONE_VERTICAL = new GridLayout(new TilePosition[][]{ + {TilePosition.TOP_MIDDLE}, + {TilePosition.BOTTOM_MIDDLE} + }); + + private static final GridLayout TWO_BY_TWO = new GridLayout(new TilePosition[][]{ + {TilePosition.TOP_LEFT, TilePosition.TOP_RIGHT}, + {TilePosition.BOTTOM_LEFT, TilePosition.BOTTOM_RIGHT} + }); + + private static final GridLayout THREE_BY_THREE = new GridLayout(new TilePosition[][]{ + {TilePosition.TOP_LEFT, TilePosition.TOP_MIDDLE, TilePosition.TOP_RIGHT}, + {TilePosition.MIDDLE_LEFT, TilePosition.CENTER, TilePosition.MIDDLE_RIGHT}, + {TilePosition.BOTTOM_LEFT, TilePosition.BOTTOM_MIDDLE, TilePosition.BOTTOM_RIGHT} + }); + + private GridLayouts() { + } + } + + public enum Shape implements StringRepresentable { + SINGLE("single"), + TWO_BY_ONE("two_by_one"), + TWO_BY_TWO("two_by_two"), + THREE_BY_THREE("three_by_three"); + + private final String name; + + Shape(String name) { + this.name = name; + } + + @Override + public String getSerializedName() { + return this.name; + } + } + + public enum TilePosition implements StringRepresentable { + SINGLE("single"), + TOP_LEFT("top_left"), + TOP_MIDDLE("top_middle"), + TOP_RIGHT("top_right"), + MIDDLE_LEFT("middle_left"), + CENTER("center"), + MIDDLE_RIGHT("middle_right"), + BOTTOM_LEFT("bottom_left"), + BOTTOM_MIDDLE("bottom_middle"), + BOTTOM_RIGHT("bottom_right"); + + private final String name; + + TilePosition(String name) { + this.name = name; + } + + @Override + public String getSerializedName() { + return this.name; + } + } + + public enum PadRotation implements StringRepresentable { + DEG_0("0"), + DEG_90("90"), + DEG_180("180"), + DEG_270("270"); + + private final String name; + + PadRotation(String name) { + this.name = name; + } + + @Override + public String getSerializedName() { + return this.name; + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralBlock.java new file mode 100644 index 00000000..c89a97df --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralBlock.java @@ -0,0 +1,73 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import org.jetbrains.annotations.Nullable; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.BlockBehaviour.Properties; +import net.minecraft.world.level.material.FluidState; + +public class StarCoralBlock extends Block { + public static final MapCodec DEAD_CORAL_FIELD = BuiltInRegistries.BLOCK.byNameCodec().fieldOf("dead"); + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + instance -> instance.group(DEAD_CORAL_FIELD.forGetter(block -> block.deadBlock), propertiesCodec()).apply(instance, StarCoralBlock::new) + ); + private final Block deadBlock; + + public StarCoralBlock(Block deadBlock, Properties properties) { + super(properties); + this.deadBlock = deadBlock; + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!this.scanForWater(level, pos)) { + level.setBlock(pos, this.deadBlock.defaultBlockState(), 2); + } + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (!this.scanForWater(level, pos)) { + level.scheduleTick(pos, this, 60 + level.getRandom().nextInt(40)); + } + + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + protected boolean scanForWater(BlockGetter level, BlockPos pos) { + for (Direction direction : Direction.values()) { + FluidState fluidState = level.getFluidState(pos.relative(direction)); + if (fluidState.is(FluidTags.WATER)) { + return true; + } + } + + return false; + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + if (!this.scanForWater(context.getLevel(), context.getClickedPos())) { + context.getLevel().scheduleTick(context.getClickedPos(), this, 60 + context.getLevel().getRandom().nextInt(40)); + } + + return this.defaultBlockState(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralFanBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralFanBlock.java new file mode 100644 index 00000000..0adb2154 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralFanBlock.java @@ -0,0 +1,60 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.BaseCoralFanBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.BlockBehaviour.Properties; +import net.minecraft.world.level.material.Fluids; + +public class StarCoralFanBlock extends BaseCoralFanBlock { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + instance -> instance.group(StarCoralBlock.DEAD_CORAL_FIELD.forGetter(block -> block.deadBlock), propertiesCodec()) + .apply(instance, StarCoralFanBlock::new) + ); + private final Block deadBlock; + + public StarCoralFanBlock(Block deadBlock, Properties properties) { + super(properties); + this.deadBlock = deadBlock; + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + this.tryScheduleDieTick(state, level, pos); + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!scanForWater(state, level, pos)) { + level.setBlock(pos, this.deadBlock.defaultBlockState().setValue(WATERLOGGED, false), 2); + } + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (direction == Direction.DOWN && !state.canSurvive(level, pos)) { + return Blocks.AIR.defaultBlockState(); + } else { + this.tryScheduleDieTick(state, level, pos); + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralPlantBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralPlantBlock.java new file mode 100644 index 00000000..8330dee8 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralPlantBlock.java @@ -0,0 +1,69 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.BaseCoralPlantTypeBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.BlockBehaviour.Properties; +import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class StarCoralPlantBlock extends BaseCoralPlantTypeBlock { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + instance -> instance.group(StarCoralBlock.DEAD_CORAL_FIELD.forGetter(block -> block.deadBlock), propertiesCodec()) + .apply(instance, StarCoralPlantBlock::new) + ); + private final Block deadBlock; + protected static final VoxelShape SHAPE = Block.box(2.0, 0.0, 2.0, 14.0, 15.0, 14.0); + + public StarCoralPlantBlock(Block deadBlock, Properties properties) { + super(properties); + this.deadBlock = deadBlock; + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + this.tryScheduleDieTick(state, level, pos); + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!scanForWater(state, level, pos)) { + level.setBlock(pos, this.deadBlock.defaultBlockState().setValue(WATERLOGGED, false), 2); + } + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (direction == Direction.DOWN && !state.canSurvive(level, pos)) { + return Blocks.AIR.defaultBlockState(); + } else { + this.tryScheduleDieTick(state, level, pos); + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return SHAPE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralWallFanBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralWallFanBlock.java new file mode 100644 index 00000000..7b91b2a3 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/StarCoralWallFanBlock.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.BaseCoralWallFanBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.BlockBehaviour.Properties; +import net.minecraft.world.level.material.Fluids; + +public class StarCoralWallFanBlock extends BaseCoralWallFanBlock { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + instance -> instance.group(StarCoralBlock.DEAD_CORAL_FIELD.forGetter(block -> block.deadBlock), propertiesCodec()) + .apply(instance, StarCoralWallFanBlock::new) + ); + private final Block deadBlock; + + public StarCoralWallFanBlock(Block deadBlock, Properties properties) { + super(properties); + this.deadBlock = deadBlock; + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + this.tryScheduleDieTick(state, level, pos); + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!scanForWater(state, level, pos)) { + level.setBlock( + pos, + this.deadBlock.defaultBlockState().setValue(WATERLOGGED, false).setValue(FACING, state.getValue(FACING)), + 2 + ); + } + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + if (direction.getOpposite() == state.getValue(FACING) && !state.canSurvive(level, pos)) { + return Blocks.AIR.defaultBlockState(); + } else { + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + this.tryScheduleDieTick(state, level, pos); + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/TentacleModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/TentacleModel.java new file mode 100644 index 00000000..95d1ce53 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/TentacleModel.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class TentacleModel extends GeoModel { + @Override + public ResourceLocation getModelResource(TentacleEntity animatable) { + return ResourceLocation.fromNamespaceAndPath("antarchy", "geo/tentacle.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(TentacleEntity animatable) { + return ResourceLocation.fromNamespaceAndPath("antarchy", "textures/entity/tentacle.png"); + } + + @Override + public ResourceLocation getAnimationResource(TentacleEntity animatable) { + return ResourceLocation.fromNamespaceAndPath("antarchy", "animations/tenctacle.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/TentacleRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/TentacleRenderer.java new file mode 100644 index 00000000..fe8e1027 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/TentacleRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.TentacleModel; +import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class TentacleRenderer extends GeoEntityRenderer { + public TentacleRenderer(EntityRendererProvider.Context context) { + super(context, new TentacleModel()); + this.shadowRadius = 0.0F; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java index ecc3edbe..acc50272 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java @@ -86,6 +86,11 @@ public class OctopusBombEntity extends Monster implements GeoEntity { // Kraken spawn flag private boolean spawnedByKraken; + // Explosive impact (fired from the R.P.O. Launcher) + private boolean explosiveImpact; + private java.util.UUID explosiveLauncherId; + private int explosiveArmTicks; + public OctopusBombEntity(EntityType entityType, Level level) { super(entityType, level); this.moveControl = new SmoothSwimmingMoveControl(this, 80, 8, 0.06F, 0.12F, true); @@ -189,6 +194,14 @@ public class OctopusBombEntity extends Monster implements GeoEntity { super.tick(); this.setNoGravity(this.isInWater() || this.canFly()); + if (this.explosiveImpact && !this.level().isClientSide) { + this.explosiveArmTicks++; + if (this.explosiveArmTicks > 3 && (this.horizontalCollision || this.verticalCollision || this.isInWater() || this.hasHitExplosiveTarget())) { + this.detonateInkExplosion(); + return; + } + } + if (this.level().isClientSide) { this.updateSwimRotation(); return; @@ -326,6 +339,13 @@ public class OctopusBombEntity extends Monster implements GeoEntity { this.setDeltaMovement(velocity); } + public void launchAsExplosiveProjectile(net.minecraft.world.entity.Entity launcher, Vec3 velocity) { + this.explosiveImpact = true; + this.explosiveLauncherId = launcher != null ? launcher.getUUID() : null; + this.setDeltaMovement(velocity); + this.hasImpulse = true; + } + // ------------------------------------------------------------------------- // Squid-style wander // ------------------------------------------------------------------------- @@ -352,6 +372,44 @@ public class OctopusBombEntity extends Monster implements GeoEntity { // Ink spray // ------------------------------------------------------------------------- + private boolean hasHitExplosiveTarget() { + AABB box = this.getBoundingBox(); + return !this.level().getEntitiesOfClass(LivingEntity.class, box, + e -> e.isAlive() && e != this && !e.getUUID().equals(this.explosiveLauncherId)).isEmpty(); + } + + private void detonateInkExplosion() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + double radius = com.craisinlord.antarchy.config.AntarchySettings.rpoLauncherExplosionRadius(); + float damage = (float) com.craisinlord.antarchy.config.AntarchySettings.rpoLauncherExplosionDamage(); + AABB blastArea = this.getBoundingBox().inflate(radius); + for (LivingEntity victim : serverLevel.getEntitiesOfClass(LivingEntity.class, blastArea, + e -> e.isAlive() && !e.isSpectator())) { + double distance = Math.sqrt(victim.distanceToSqr(this)); + float falloff = (float) Mth.clamp(1.0D - distance / radius, 0.0D, 1.0D); + if (falloff <= 0.0F) { + continue; + } + + victim.hurt(this.damageSources().explosion(this, this), damage * falloff); + Vec3 knockback = victim.position().subtract(this.position()); + if (knockback.lengthSqr() > 1.0E-4D) { + Vec3 normalized = knockback.normalize().scale(0.6D * falloff); + victim.push(normalized.x, 0.4D * falloff, normalized.z); + } + victim.hurtMarked = true; + } + + serverLevel.playSound(null, this.getX(), this.getY(), this.getZ(), + net.minecraft.sounds.SoundEvents.GENERIC_EXPLODE, net.minecraft.sounds.SoundSource.HOSTILE, 2.0F, 0.9F); + serverLevel.sendParticles(ParticleTypes.SQUID_INK, this.getX(), this.getY(), this.getZ(), 60, radius * 0.4D, radius * 0.4D, radius * 0.4D, 0.05D); + serverLevel.sendParticles(ParticleTypes.EXPLOSION, this.getX(), this.getY(), this.getZ(), 3, 0.5D, 0.5D, 0.5D, 0.0D); + this.discard(); + } + private void tickInkSpray() { if (this.inkSprayCooldown > 0 || !(this.level() instanceof ServerLevel serverLevel)) return; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakensGraspThrownTrident.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakensGraspThrownTrident.java new file mode 100644 index 00000000..240141ac --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakensGraspThrownTrident.java @@ -0,0 +1,109 @@ +package com.craisinlord.antarchy.content.entity.kraken; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.item.KrakensGraspItem; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.Mth; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.entity.projectile.ItemSupplier; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec3; + +public class KrakensGraspThrownTrident extends AbstractArrow implements ItemSupplier { + private boolean dealtDamage; + private boolean returning; + + public KrakensGraspThrownTrident(EntityType entityType, Level level) { + super(entityType, level); + } + + public KrakensGraspThrownTrident(EntityType entityType, LivingEntity owner, Level level, ItemStack stack) { + super(entityType, owner, level, stack, null); + this.setBaseDamage(AntarchySettings.krakensGraspThrownDamage()); + } + + @Override + public ItemStack getItem() { + return new ItemStack(AntarchyObjects.KRAKENS_GRASP.get()); + } + + @Override + protected ItemStack getDefaultPickupItem() { + return new ItemStack(AntarchyObjects.KRAKENS_GRASP.get()); + } + + @Override + protected net.minecraft.sounds.SoundEvent getDefaultHitGroundSoundEvent() { + return SoundEvents.TRIDENT_HIT_GROUND; + } + + @Override + protected double getDefaultGravity() { + return 0.05D; + } + + @Override + public void tick() { + if (this.inGroundTime > 4) { + this.dealtDamage = true; + } + + Entity owner = this.getOwner(); + int loyalty = this.effectiveLoyaltyLevel(); + if (loyalty > 0 && (this.dealtDamage || this.isNoPhysics()) && owner instanceof LivingEntity livingOwner && livingOwner.isAlive()) { + this.setNoPhysics(true); + Vec3 toOwner = owner.getEyePosition().subtract(this.position()); + this.setPosRaw(this.getX(), this.getY() + toOwner.y * 0.015D * loyalty, this.getZ()); + if (this.level().isClientSide) { + this.yOld = this.getY(); + } + + double speed = 0.05D * loyalty; + this.setDeltaMovement(this.getDeltaMovement().scale(0.95D).add(toOwner.normalize().scale(speed))); + if (!this.returning) { + this.returning = true; + this.playSound(SoundEvents.TRIDENT_RETURN, 10.0F, 1.0F); + } + } + + super.tick(); + } + + private int effectiveLoyaltyLevel() { + return AntarchySettings.krakensGraspInnateLoyalty() ? Mth.clamp(AntarchySettings.krakensGraspInnateLoyaltyLevel(), 1, 3) : 0; + } + + @Override + protected void onHitEntity(EntityHitResult result) { + super.onHitEntity(result); + if (!(result.getEntity() instanceof LivingEntity target) || !(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + Entity owner = this.getOwner(); + DamageSource damageSource = this.damageSources().trident(this, owner != null ? owner : this); + boolean hurt = target.hurt(damageSource, (float) AntarchySettings.krakensGraspThrownDamage()); + if (hurt) { + KrakensGraspItem.strikeLightning(target, serverLevel); + } + + this.dealtDamage = true; + } + + @Override + protected void onHitBlock(BlockHitResult result) { + super.onHitBlock(result); + if (this.level() instanceof ServerLevel serverLevel) { + TentacleEntity.spawnAt(serverLevel, result.getLocation(), this.getOwner() instanceof LivingEntity livingOwner ? livingOwner : null); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java new file mode 100644 index 00000000..f7be5e93 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/TentacleEntity.java @@ -0,0 +1,159 @@ +package com.craisinlord.antarchy.content.entity.kraken; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.List; +import java.util.UUID; + +public class TentacleEntity extends Mob implements GeoEntity { + private static final RawAnimation GRASP_ANIM = RawAnimation.begin().thenLoop("animation"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int lifetimeTicks; + private UUID ownerId; + + public TentacleEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setNoAi(true); + this.noPhysics = true; + this.noCulling = true; + this.xpReward = 0; + this.setInvulnerable(true); + } + + @Override + public boolean isInvulnerableTo(DamageSource damageSource) { + return true; + } + + @Override + public void push(net.minecraft.world.entity.Entity entity) { + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 20.0D) + .add(Attributes.MOVEMENT_SPEED, 0.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 1.0D); + } + + public static void spawnAt(ServerLevel level, Vec3 pos, LivingEntity owner) { + TentacleEntity tentacle = new TentacleEntity(com.craisinlord.antarchy.content.AntarchyObjects.TENTACLE.get(), level); + tentacle.moveTo(pos.x, pos.y, pos.z, 0.0F, 0.0F); + if (owner != null) { + tentacle.ownerId = owner.getUUID(); + } + level.addFreshEntity(tentacle); + level.playSound(null, pos.x, pos.y, pos.z, AntarchySoundEvents.KRAKEN_ATTACK.get(), SoundSource.HOSTILE, 1.0F, 1.0F); + } + + @Override + protected void registerGoals() { + } + + @Override + protected PathNavigation createNavigation(Level level) { + return new net.minecraft.world.entity.ai.navigation.GroundPathNavigation(this, level); + } + + @Override + public boolean isPushable() { + return false; + } + + @Override + public boolean canBeCollidedWith() { + return false; + } + + @Override + protected boolean shouldDespawnInPeaceful() { + return false; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + return; + } + + this.lifetimeTicks++; + if (this.lifetimeTicks >= AntarchySettings.krakensGraspTentacleDurationTicks()) { + this.discard(); + return; + } + + int interval = Math.max(1, AntarchySettings.krakensGraspTentacleDamageIntervalTicks()); + if (this.lifetimeTicks % interval == 0) { + this.grabNearbyEntities(); + } + } + + private void grabNearbyEntities() { + double radius = AntarchySettings.krakensGraspTentacleRadius(); + AABB area = this.getBoundingBox().inflate(radius, radius * 0.6D, radius); + List victims = this.level().getEntitiesOfClass(LivingEntity.class, area, + entity -> entity.isAlive() && !entity.isSpectator() && !entity.getUUID().equals(this.ownerId) + && !(entity instanceof Player player && player.isCreative())); + + for (LivingEntity victim : victims) { + if (this.level() instanceof ServerLevel serverLevel) { + victim.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.krakensGraspTentacleDamage()); + serverLevel.sendParticles(net.minecraft.core.particles.ParticleTypes.SPLASH, + victim.getX(), victim.getY(0.6D), victim.getZ(), 8, 0.2D, 0.2D, 0.2D, 0.05D); + } + + victim.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, AntarchySettings.krakensGraspTentacleDamageIntervalTicks() + 10, 1, false, true, true)); + + Vec3 pull = this.position().subtract(victim.position()).multiply(1.0D, 0.0D, 1.0D); + if (pull.lengthSqr() > 1.0E-4D) { + victim.setDeltaMovement(victim.getDeltaMovement().add(pull.normalize().scale(0.12D))); + victim.hurtMarked = true; + } + } + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "grasp_controller", 0, this::graspAnimController)); + } + + private PlayState graspAnimController(AnimationState state) { + return state.setAndContinue(GRASP_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/KrakensGraspItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/KrakensGraspItem.java new file mode 100644 index 00000000..51a44d3d --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/KrakensGraspItem.java @@ -0,0 +1,171 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; +import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import com.craisinlord.antarchy.content.entity.kraken.KrakensGraspThrownTrident; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +import net.minecraft.world.entity.EquipmentSlotGroup; +import net.minecraft.world.entity.LightningBolt; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.ItemAttributeModifiers; +import net.minecraft.world.item.TridentItem; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.item.enchantment.ItemEnchantments; +import net.minecraft.world.level.Level; +import net.minecraft.world.entity.Entity; +import software.bernie.geckolib.animatable.GeoItem; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.function.Consumer; + +public class KrakensGraspItem extends TridentItem implements GeoItem { + private static final ResourceLocation MODEL_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "geo/krakens_grasp.geo.json"); + private static final ResourceLocation TEXTURE_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "textures/item/krakens_grasp/krakens_grasp.png"); + private static final ResourceLocation ANIMATION_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "animations/static_item.animation.json"); + private static final ResourceLocation ATTACK_DAMAGE_MODIFIER_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "krakens_grasp_attack_damage"); + private static final ResourceLocation ATTACK_SPEED_MODIFIER_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "krakens_grasp_attack_speed"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public KrakensGraspItem(Item.Properties properties) { + super(properties); + GeoItem.registerSyncedAnimatable(this); + } + + @Override + public ItemAttributeModifiers getDefaultAttributeModifiers() { + return ItemAttributeModifiers.builder() + .add(Attributes.ATTACK_DAMAGE, new AttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, AntarchySettings.krakensGraspAttackDamage(), AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND) + .add(Attributes.ATTACK_SPEED, new AttributeModifier(ATTACK_SPEED_MODIFIER_ID, AntarchySettings.krakensGraspAttackSpeed(), AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND) + .build(); + } + + @Override + public net.minecraft.world.item.UseAnim getUseAnimation(ItemStack stack) { + return net.minecraft.world.item.UseAnim.NONE; + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + super.inventoryTick(stack, level, entity, slotId, isSelected); + if (!level.isClientSide) { + ensureInnateLoyalty(stack, level.registryAccess()); + } + } + + private static void ensureInnateLoyalty(ItemStack stack, HolderLookup.Provider registries) { + if (!AntarchySettings.krakensGraspInnateLoyalty()) { + return; + } + + var loyalty = registries.lookupOrThrow(Registries.ENCHANTMENT).getOrThrow(Enchantments.LOYALTY); + int desiredLevel = net.minecraft.util.Mth.clamp(AntarchySettings.krakensGraspInnateLoyaltyLevel(), 1, 3); + if (EnchantmentHelper.getItemEnchantmentLevel(loyalty, stack) >= desiredLevel) { + return; + } + + ItemEnchantments.Mutable enchantments = new ItemEnchantments.Mutable(stack.getEnchantments()); + enchantments.set(loyalty, desiredLevel); + EnchantmentHelper.setEnchantments(stack, enchantments.toImmutable().withTooltip(true)); + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + boolean didHurt = super.hurtEnemy(stack, target, attacker); + if (didHurt && attacker.level() instanceof ServerLevel serverLevel) { + strikeLightning(target, serverLevel); + } + return didHurt; + } + + public static void strikeLightning(LivingEntity target, ServerLevel level) { + LightningBolt lightningBolt = new LightningBolt(net.minecraft.world.entity.EntityType.LIGHTNING_BOLT, level); + lightningBolt.moveTo(target.getX(), target.getY(), target.getZ()); + lightningBolt.setVisualOnly(true); + level.addFreshEntity(lightningBolt); + + target.hurt(target.damageSources().lightningBolt(), (float) AntarchySettings.krakensGraspLightningDamage()); + level.sendParticles(ParticleTypes.ELECTRIC_SPARK, target.getX(), target.getY(0.7D), target.getZ(), 10, 0.25D, 0.25D, 0.25D, 0.02D); + } + + @Override + public void releaseUsing(ItemStack stack, Level level, LivingEntity user, int timeLeft) { + if (!(user instanceof Player player)) { + return; + } + + int useTime = this.getUseDuration(stack, user) - timeLeft; + if (useTime < 10) { + return; + } + + float spinStrength = EnchantmentHelper.getTridentSpinAttackStrength(stack, player); + if (spinStrength > 0.0F && player.isInWaterOrRain()) { + super.releaseUsing(stack, level, user, timeLeft); + return; + } + + if (stack.getDamageValue() >= stack.getMaxDamage() - 1) { + return; + } + + if (!level.isClientSide) { + stack.hurtAndBreak(1, player, LivingEntity.getSlotForHand(user.getUsedItemHand())); + KrakensGraspThrownTrident trident = new KrakensGraspThrownTrident(AntarchyObjects.KRAKENS_GRASP_TRIDENT.get(), player, level, stack.copy()); + trident.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, 2.5F, 1.0F); + if (player.hasInfiniteMaterials()) { + trident.pickup = net.minecraft.world.entity.projectile.AbstractArrow.Pickup.CREATIVE_ONLY; + } + level.addFreshEntity(trident); + level.playSound(null, trident, SoundEvents.TRIDENT_THROW.value(), SoundSource.PLAYERS, 1.0F, 1.0F); + if (!player.hasInfiniteMaterials()) { + player.getInventory().removeItem(stack); + } + } + + player.awardStat(Stats.ITEM_USED.get(this)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new AnimatedHeldItemRenderer<>(new ResourceBackedGeoItemModel<>(MODEL_LOCATION, TEXTURE_LOCATION, ANIMATION_LOCATION)); + } + + return this.renderer; + } + }); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java new file mode 100644 index 00000000..75adb09a --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java @@ -0,0 +1,194 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; +import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import java.util.function.Consumer; +import java.util.function.Predicate; +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ProjectileWeaponItem; +import net.minecraft.world.item.UseAnim; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.item.enchantment.ItemEnchantments; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec2; +import net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.animatable.GeoItem; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class RpoLauncherItem extends ProjectileWeaponItem implements GeoItem { + private static final String FIRE_CONTROLLER = "fire_controller"; + private static final String FIRE_ANIMATION = "rpo_launcher_recoil"; + private static final Predicate NO_PROJECTILES = stack -> false; + private static final ResourceLocation MODEL_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "geo/rpo_launcher.geo.json"); + private static final ResourceLocation TEXTURE_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "textures/models/item/rpo_launcher.png"); + private static final ResourceLocation ANIMATION_LOCATION = ResourceLocation.fromNamespaceAndPath("antarchy", "animations/rpo_launcher.animation.json"); + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public RpoLauncherItem(Properties properties) { + super(properties); + GeoItem.registerSyncedAnimatable(this); + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { + ItemStack itemStack = player.getItemInHand(usedHand); + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(itemStack); + } + + if (!level.isClientSide()) { + fireOctopusBomb(level, player, 0.0F); + if (hasMultishot(itemStack)) { + fireOctopusBomb(level, player, -10.0F); + fireOctopusBomb(level, player, 10.0F); + } + spawnFireParticles((ServerLevel) level, player); + itemStack.hurtAndBreak(1, player, usedHand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND); + triggerFireAnimation((ServerLevel) level, player, itemStack); + } + + level.playSound( + null, + player.getX(), + player.getY(), + player.getZ(), + AntarchySoundEvents.SQUIDZOOKA_FIRE.get(), + SoundSource.PLAYERS, + 1.15F, + 1.0F / (level.getRandom().nextFloat() * 0.4F + 1.2F) + 0.5F + ); + player.awardStat(Stats.ITEM_USED.get(this)); + double cooldownSeconds = AntarchySettings.rpoLauncherCooldownSeconds(); + if (cooldownSeconds > 0) { + player.getCooldowns().addCooldown(this, (int) (cooldownSeconds * 20)); + } + return InteractionResultHolder.consume(itemStack); + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.NONE; + } + + @Override + public Predicate getSupportedHeldProjectiles() { + return NO_PROJECTILES; + } + + @Override + public Predicate getAllSupportedProjectiles() { + return NO_PROJECTILES; + } + + @Override + public int getDefaultProjectileRange() { + return 0; + } + + @Override + protected void shootProjectile(LivingEntity livingEntity, Projectile projectile, int i, float velocity, float inaccuracy, float angle, LivingEntity target) { + projectile.shootFromRotation(livingEntity, livingEntity.getXRot(), livingEntity.getYRot(), angle, velocity, inaccuracy); + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return 1; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, FIRE_CONTROLLER, state -> PlayState.STOP) + .triggerableAnim(FIRE_ANIMATION, RawAnimation.begin().thenPlay(FIRE_ANIMATION))); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private AnimatedHeldItemRenderer renderer; + + @Override + public net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer getGeoItemRenderer() { + if (this.renderer == null) { + this.renderer = new AnimatedHeldItemRenderer<>(new ResourceBackedGeoItemModel<>(MODEL_LOCATION, TEXTURE_LOCATION, ANIMATION_LOCATION)); + } + + return this.renderer; + } + }); + } + + private void triggerFireAnimation(ServerLevel level, LivingEntity livingEntity, ItemStack stack) { + long animatableId = GeoItem.getOrAssignId(stack, level); + triggerAnim(livingEntity, animatableId, FIRE_CONTROLLER, FIRE_ANIMATION); + } + + private static void fireOctopusBomb(Level level, Player player, float yawOffset) { + OctopusBombEntity projectileBomb = AntarchyObjects.OCTOPUS_BOMB.get().create(level); + if (projectileBomb == null) { + return; + } + + float yaw = player.getYRot() + yawOffset; + Vec3 direction = Vec3.directionFromRotation(new Vec2(player.getXRot(), yaw)); + projectileBomb.moveTo( + player.getX(), + player.getEyeY() - 0.2D, + player.getZ(), + yaw, + player.getXRot() + ); + projectileBomb.launchAsExplosiveProjectile(player, direction.scale(AntarchySettings.rpoLauncherLaunchVelocity()).add(player.getDeltaMovement())); + level.addFreshEntity(projectileBomb); + } + + private static boolean hasMultishot(ItemStack stack) { + return stack.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY) + .keySet() + .stream() + .anyMatch(holder -> holder.is(Enchantments.MULTISHOT)); + } + + private static void spawnFireParticles(ServerLevel level, Player player) { + double lookX = player.getLookAngle().x; + double lookY = player.getLookAngle().y; + double lookZ = player.getLookAngle().z; + double originX = player.getX() + lookX * 0.65D; + double originY = player.getEyeY() - 0.15D + lookY * 0.15D; + double originZ = player.getZ() + lookZ * 0.65D; + + level.sendParticles(ParticleTypes.SMOKE, originX, originY, originZ, 12, 0.18D, 0.12D, 0.18D, 0.02D); + level.sendParticles(ParticleTypes.CLOUD, originX, originY - 0.05D, originZ, 8, 0.16D, 0.1D, 0.16D, 0.01D); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/ocean/StarCoralPatchFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/ocean/StarCoralPatchFeature.java new file mode 100644 index 00000000..36845b66 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/ocean/StarCoralPatchFeature.java @@ -0,0 +1,74 @@ +package com.craisinlord.antarchy.content.worldgen.ocean; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class StarCoralPatchFeature extends Feature { + public StarCoralPatchFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + Block starCoralBlock = AntarchyObjects.STAR_CORAL_BLOCK.get(); + Block starCoral = AntarchyObjects.STAR_CORAL.get(); + Block starCoralFan = AntarchyObjects.STAR_CORAL_FAN.get(); + + int surfaceY = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, origin.getX(), origin.getZ()); + BlockPos floorPos = new BlockPos(origin.getX(), surfaceY - 1, origin.getZ()); + if (!level.getBlockState(floorPos).isSolid() || !level.getFluidState(floorPos.above()).is(FluidTags.WATER)) { + return false; + } + + int radius = 3 + random.nextInt(3); + int targetPlacements = 8 + random.nextInt(9); + int attempts = targetPlacements * 4; + int placed = 0; + + for (int i = 0; i < attempts && placed < targetPlacements; i++) { + int x = origin.getX() + random.nextInt(radius * 2 + 1) - radius; + int z = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; + int y = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, x, z); + BlockPos supportPos = new BlockPos(x, y - 1, z); + BlockPos placePos = supportPos.above(); + + if (!level.getBlockState(supportPos).isSolid()) { + continue; + } + if (!level.getFluidState(placePos).is(FluidTags.WATER)) { + continue; + } + if (!level.getBlockState(placePos).canBeReplaced()) { + continue; + } + + int roll = random.nextInt(10); + BlockState toPlace; + if (roll < 5) { + toPlace = starCoralBlock.defaultBlockState(); + } else if (roll < 8) { + toPlace = starCoral.defaultBlockState(); + } else { + toPlace = starCoralFan.defaultBlockState(); + } + + level.setBlock(placePos, toPlace, 2); + placed++; + } + + return placed > 0; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java index e8a51510..36314c51 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java @@ -1,6 +1,6 @@ package com.craisinlord.antarchy.mixins; -import net.minecraft.core.registries.BuiltInRegistries; +import com.craisinlord.antarchy.content.AntarchyTags; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.Enchantment; import org.spongepowered.asm.mixin.Mixin; @@ -13,14 +13,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; public abstract class SquidzookaMultishotMixin { @Inject(method = "canEnchant", at = @At("HEAD"), cancellable = true) private void antarchy$allowSquidzookaForMultishot(ItemStack stack, CallbackInfoReturnable cir) { - if (antarchy$isMultishot() && antarchy$isSquidzooka(stack)) { + if (antarchy$isMultishot() && antarchy$isMultishotEnchantable(stack)) { cir.setReturnValue(true); } } @Inject(method = "isPrimaryItem", at = @At("HEAD"), cancellable = true) private void antarchy$allowSquidzookaAsPrimaryItem(ItemStack stack, CallbackInfoReturnable cir) { - if (antarchy$isMultishot() && antarchy$isSquidzooka(stack)) { + if (antarchy$isMultishot() && antarchy$isMultishotEnchantable(stack)) { cir.setReturnValue(true); } } @@ -31,7 +31,7 @@ public abstract class SquidzookaMultishotMixin { } @Unique - private boolean antarchy$isSquidzooka(ItemStack stack) { - return "squidzooka".equals(BuiltInRegistries.ITEM.getKey(stack.getItem()).getPath()); + private boolean antarchy$isMultishotEnchantable(ItemStack stack) { + return stack.is(AntarchyTags.Items.MULTISHOT_ENCHANTABLE); } } diff --git a/common/src/main/resources/assets/antarchy/animations/rpo_launcher.animation.json b/common/src/main/resources/assets/antarchy/animations/rpo_launcher.animation.json new file mode 100644 index 00000000..10ba25bf --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/rpo_launcher.animation.json @@ -0,0 +1,385 @@ +{ + "format_version": "1.8.0", + "animations": { + "rpo_launcher_recoil": { + "animation_length": 0.9583, + "bones": { + "all": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [-17.5, 0, 0], + "easing": "easeInElastic" + }, + "0.5": { + "vector": [-10, 0, 0], + "easing": "easeInOutSine" + }, + "0.875": { + "vector": [-0.91, 0, 0] + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "linear" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 5, 4], + "easing": "easeInElastic", + "easingArgs": [2] + }, + "0.4583": { + "vector": [0, 0, 3.56], + "easing": "easeInOutSine" + }, + "0.8333": { + "vector": [0, 0, 0], + "easing": "easeInOutSine" + } + } + }, + "center": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [-8, 0, 0] + }, + "0.5417": { + "vector": [0, 0, 0] + }, + "0.875": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 2], + "easing": "easeInElastic", + "easingArgs": [1.5] + }, + "0.4583": { + "vector": [0, 0.3, 0], + "easing": "easeInOutSine" + }, + "0.9583": { + "vector": [0, 0, 0] + } + } + }, + "bazooka": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 6], + "easing": "easeInElastic" + }, + "0.9167": { + "vector": [0, 0, 0], + "easing": "easeInOutSine" + } + } + }, + "tentacles": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 5.27] + }, + "0.2917": { + "vector": [0, 0, -5], + "easing": "easeInElastic", + "easingArgs": [2] + }, + "0.9167": { + "vector": [0, 0, 0], + "easing": "easeOutQuad" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.0833": { + "vector": [1, 1, 1], + "easing": "linear" + }, + "0.2917": { + "vector": [1.3, 1.3, 1.3], + "easing": "easeInElastic" + }, + "0.9583": { + "vector": [1, 1, 1] + } + } + }, + "start_1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [40, 0, 0], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [40, 0, 0], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeInOutQuad" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 1.8], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [0, 0, 1.8], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0] + } + } + }, + "end_1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [22.5, 0, 0], + "easing": "easeOutBack" + }, + "0.2917": { + "vector": [-17.5, 0, 0] + }, + "0.4167": { + "vector": [22.5, 0, 0] + }, + "0.5833": { + "vector": [-17.5, 0, 0] + }, + "0.75": { + "vector": [10, 0, 0], + "easing": "easeInOutQuad" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeOutQuart" + } + } + }, + "start_2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [40, 0, 0], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [40, 0, 0], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeInOutQuad" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 1.8], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [0, 0, 1.8], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0] + } + } + }, + "end_2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [22.5, 0, 0], + "easing": "easeOutBack" + }, + "0.2917": { + "vector": [-17.5, 0, 0] + }, + "0.4167": { + "vector": [22.5, 0, 0] + }, + "0.5833": { + "vector": [-17.5, 0, 0] + }, + "0.75": { + "vector": [10, 0, 0], + "easing": "easeInOutQuad" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeOutQuart" + } + } + }, + "start_3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [40, 0, 0], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [40, 0, 0], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeInOutQuad" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 1.8], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [0, 0, 1.8], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0] + } + } + }, + "end_3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [22.5, 0, 0], + "easing": "easeOutBack" + }, + "0.2917": { + "vector": [-17.5, 0, 0] + }, + "0.4167": { + "vector": [22.5, 0, 0] + }, + "0.5833": { + "vector": [-17.5, 0, 0] + }, + "0.75": { + "vector": [10, 0, 0], + "easing": "easeInOutQuad" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeOutQuart" + } + } + }, + "start_4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [40, 0, 0], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [40, 0, 0], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeInOutQuad" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 1.8], + "easing": "easeInOutElastic" + }, + "0.4167": { + "vector": [0, 0, 1.8], + "easing": "easeInOutBack" + }, + "0.9583": { + "vector": [0, 0, 0] + } + } + }, + "end_4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [22.5, 0, 0], + "easing": "easeOutBack" + }, + "0.2917": { + "vector": [-17.5, 0, 0] + }, + "0.4167": { + "vector": [22.5, 0, 0] + }, + "0.5833": { + "vector": [-17.5, 0, 0] + }, + "0.75": { + "vector": [10, 0, 0], + "easing": "easeInOutQuad" + }, + "0.9583": { + "vector": [0, 0, 0], + "easing": "easeOutQuart" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/tenctacle.animation.json b/common/src/main/resources/assets/antarchy/animations/tenctacle.animation.json new file mode 100644 index 00000000..1dba725d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/tenctacle.animation.json @@ -0,0 +1,491 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation": { + "loop": true, + "animation_length": 1.5, + "bones": { + "tentacle": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-90, 20, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [93.3776, 22.38751, -93.65422] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [46.07, 8.05, -46.19] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.05192, -0.03141, -32.49925] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-0.03, -0.02, -21.84] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -15.64] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-0.75385, -0.75162, -19.98312] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [93.3776, -22.38751, 93.65422] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [46.07, -8.05, 46.19] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-90, -20, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.05192, 0.03141, 32.49925] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.03, 0.02, 21.84] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 15.64] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tentacle_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.75385, 0.75162, 19.98312] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral.json b/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral.json new file mode 100644 index 00000000..40ff406b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/dead_star_coral" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_block.json b/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_block.json new file mode 100644 index 00000000..4402b831 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/dead_star_coral_block" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_fan.json b/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_fan.json new file mode 100644 index 00000000..98ca44f2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/dead_star_coral_fan" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_wall_fan.json b/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_wall_fan.json new file mode 100644 index 00000000..29b8f072 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/dead_star_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "antarchy:block/dead_star_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "antarchy:block/dead_star_coral_wall_fan" + }, + "facing=south": { + "model": "antarchy:block/dead_star_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "antarchy:block/dead_star_coral_wall_fan", + "y": 270 + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/giant_lily_pad.json b/common/src/main/resources/assets/antarchy/blockstates/giant_lily_pad.json new file mode 100644 index 00000000..00ae5f6a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/giant_lily_pad.json @@ -0,0 +1,220 @@ +{ + "variants": { + "shape=single,tile_position=single,rotation=0": { + "model": "antarchy:block/giant_lily_pad/single/single/0" + }, + "shape=single,tile_position=single,rotation=90": { + "model": "antarchy:block/giant_lily_pad/single/single/90" + }, + "shape=single,tile_position=single,rotation=180": { + "model": "antarchy:block/giant_lily_pad/single/single/180" + }, + "shape=single,tile_position=single,rotation=270": { + "model": "antarchy:block/giant_lily_pad/single/single/270" + }, + "shape=two_by_one,tile_position=middle_left,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_left/0" + }, + "shape=two_by_one,tile_position=middle_right,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_right/0" + }, + "shape=two_by_one,tile_position=top_middle,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_one/top_middle/0" + }, + "shape=two_by_one,tile_position=bottom_middle,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_one/bottom_middle/0" + }, + "shape=two_by_two,tile_position=top_left,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_left/0" + }, + "shape=two_by_two,tile_position=top_right,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_right/0" + }, + "shape=two_by_two,tile_position=bottom_left,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_left/0" + }, + "shape=two_by_two,tile_position=bottom_right,rotation=0": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_right/0" + }, + "shape=three_by_three,tile_position=top_left,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_left/0" + }, + "shape=three_by_three,tile_position=top_middle,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_middle/0" + }, + "shape=three_by_three,tile_position=top_right,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_right/0" + }, + "shape=three_by_three,tile_position=middle_left,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_left/0" + }, + "shape=three_by_three,tile_position=center,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/center/0" + }, + "shape=three_by_three,tile_position=middle_right,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_right/0" + }, + "shape=three_by_three,tile_position=bottom_left,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_left/0" + }, + "shape=three_by_three,tile_position=bottom_middle,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_middle/0" + }, + "shape=three_by_three,tile_position=bottom_right,rotation=0": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_right/0" + }, + "shape=two_by_one,tile_position=middle_left,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_left/90" + }, + "shape=two_by_one,tile_position=middle_right,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_right/90" + }, + "shape=two_by_one,tile_position=top_middle,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_one/top_middle/90" + }, + "shape=two_by_one,tile_position=bottom_middle,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_one/bottom_middle/90" + }, + "shape=two_by_two,tile_position=top_left,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_left/90" + }, + "shape=two_by_two,tile_position=top_right,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_right/90" + }, + "shape=two_by_two,tile_position=bottom_left,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_left/90" + }, + "shape=two_by_two,tile_position=bottom_right,rotation=90": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_right/90" + }, + "shape=three_by_three,tile_position=top_left,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_left/90" + }, + "shape=three_by_three,tile_position=top_middle,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_middle/90" + }, + "shape=three_by_three,tile_position=top_right,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_right/90" + }, + "shape=three_by_three,tile_position=middle_left,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_left/90" + }, + "shape=three_by_three,tile_position=center,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/center/90" + }, + "shape=three_by_three,tile_position=middle_right,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_right/90" + }, + "shape=three_by_three,tile_position=bottom_left,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_left/90" + }, + "shape=three_by_three,tile_position=bottom_middle,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_middle/90" + }, + "shape=three_by_three,tile_position=bottom_right,rotation=90": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_right/90" + }, + "shape=two_by_one,tile_position=middle_left,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_left/180" + }, + "shape=two_by_one,tile_position=middle_right,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_right/180" + }, + "shape=two_by_one,tile_position=top_middle,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_one/top_middle/180" + }, + "shape=two_by_one,tile_position=bottom_middle,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_one/bottom_middle/180" + }, + "shape=two_by_two,tile_position=top_left,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_left/180" + }, + "shape=two_by_two,tile_position=top_right,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_right/180" + }, + "shape=two_by_two,tile_position=bottom_left,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_left/180" + }, + "shape=two_by_two,tile_position=bottom_right,rotation=180": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_right/180" + }, + "shape=three_by_three,tile_position=top_left,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_left/180" + }, + "shape=three_by_three,tile_position=top_middle,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_middle/180" + }, + "shape=three_by_three,tile_position=top_right,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_right/180" + }, + "shape=three_by_three,tile_position=middle_left,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_left/180" + }, + "shape=three_by_three,tile_position=center,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/center/180" + }, + "shape=three_by_three,tile_position=middle_right,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_right/180" + }, + "shape=three_by_three,tile_position=bottom_left,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_left/180" + }, + "shape=three_by_three,tile_position=bottom_middle,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_middle/180" + }, + "shape=three_by_three,tile_position=bottom_right,rotation=180": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_right/180" + }, + "shape=two_by_one,tile_position=middle_left,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_left/270" + }, + "shape=two_by_one,tile_position=middle_right,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_one/middle_right/270" + }, + "shape=two_by_one,tile_position=top_middle,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_one/top_middle/270" + }, + "shape=two_by_one,tile_position=bottom_middle,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_one/bottom_middle/270" + }, + "shape=two_by_two,tile_position=top_left,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_left/270" + }, + "shape=two_by_two,tile_position=top_right,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_two/top_right/270" + }, + "shape=two_by_two,tile_position=bottom_left,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_left/270" + }, + "shape=two_by_two,tile_position=bottom_right,rotation=270": { + "model": "antarchy:block/giant_lily_pad/two_by_two/bottom_right/270" + }, + "shape=three_by_three,tile_position=top_left,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_left/270" + }, + "shape=three_by_three,tile_position=top_middle,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_middle/270" + }, + "shape=three_by_three,tile_position=top_right,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/top_right/270" + }, + "shape=three_by_three,tile_position=middle_left,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_left/270" + }, + "shape=three_by_three,tile_position=center,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/center/270" + }, + "shape=three_by_three,tile_position=middle_right,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/middle_right/270" + }, + "shape=three_by_three,tile_position=bottom_left,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_left/270" + }, + "shape=three_by_three,tile_position=bottom_middle,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_middle/270" + }, + "shape=three_by_three,tile_position=bottom_right,rotation=270": { + "model": "antarchy:block/giant_lily_pad/three_by_three/bottom_right/270" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/star_coral.json b/common/src/main/resources/assets/antarchy/blockstates/star_coral.json new file mode 100644 index 00000000..e6897b90 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/star_coral.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/star_coral" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/star_coral_block.json b/common/src/main/resources/assets/antarchy/blockstates/star_coral_block.json new file mode 100644 index 00000000..d14eea97 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/star_coral_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/star_coral_block" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/star_coral_fan.json b/common/src/main/resources/assets/antarchy/blockstates/star_coral_fan.json new file mode 100644 index 00000000..98cb2826 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/star_coral_fan.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/star_coral_fan" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/star_coral_wall_fan.json b/common/src/main/resources/assets/antarchy/blockstates/star_coral_wall_fan.json new file mode 100644 index 00000000..98fab4f6 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/star_coral_wall_fan.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "antarchy:block/star_coral_wall_fan", + "y": 90 + }, + "facing=north": { + "model": "antarchy:block/star_coral_wall_fan" + }, + "facing=south": { + "model": "antarchy:block/star_coral_wall_fan", + "y": 180 + }, + "facing=west": { + "model": "antarchy:block/star_coral_wall_fan", + "y": 270 + } + } +} diff --git a/common/src/main/resources/assets/antarchy/geo/krakens_grasp.geo.json b/common/src/main/resources/assets/antarchy/geo/krakens_grasp.geo.json new file mode 100644 index 00000000..a8e4f668 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/krakens_grasp.geo.json @@ -0,0 +1,202 @@ +{ + "format_version": "1.21.110", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.kraken_tooth_trident - Converted", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "trident", + "pivot": [1, -8, -1] + }, + { + "name": "handle", + "parent": "trident", + "pivot": [1, -8, -1], + "cubes": [ + { + "origin": [-0.5, -8, -0.5], + "size": [1, 31, 1], + "uv": { + "north": {"uv": [0, 0], "uv_size": [1, 31]}, + "east": {"uv": [0, 0], "uv_size": [1, 31]}, + "south": {"uv": [0, 0], "uv_size": [1, 31]}, + "west": {"uv": [0, 0], "uv_size": [1, 31]}, + "up": {"uv": [1, 31], "uv_size": [-1, -31]}, + "down": {"uv": [1, 31], "uv_size": [-1, -1]} + } + }, + { + "origin": [-2.825, 25.2, -0.5], + "size": [1, 4, 1], + "uv": { + "north": {"uv": [10, 12], "uv_size": [1, 4]}, + "east": {"uv": [12, 10], "uv_size": [1, 4]}, + "south": {"uv": [11, 12], "uv_size": [1, 4]}, + "west": {"uv": [13, 0], "uv_size": [1, 4]}, + "up": {"uv": [16, 6], "uv_size": [1, 1]}, + "down": {"uv": [16, 8], "uv_size": [1, -1]} + } + }, + { + "origin": [1.825, 25.2, -0.5], + "size": [1, 4, 1], + "uv": { + "north": {"uv": [13, 4], "uv_size": [1, 4]}, + "east": {"uv": [13, 8], "uv_size": [1, 4]}, + "south": {"uv": [13, 12], "uv_size": [1, 4]}, + "west": {"uv": [14, 0], "uv_size": [1, 4]}, + "up": {"uv": [16, 8], "uv_size": [1, 1]}, + "down": {"uv": [16, 10], "uv_size": [1, -1]} + } + }, + { + "origin": [-0.7, 25.2, -0.5], + "size": [1.4, 5, 1], + "uv": { + "north": {"uv": [12, 0], "uv_size": [1, 5]}, + "east": {"uv": [12, 5], "uv_size": [1, 5]}, + "south": {"uv": [8, 12], "uv_size": [1, 5]}, + "west": {"uv": [9, 12], "uv_size": [1, 5]}, + "up": {"uv": [10, 16], "uv_size": [1, 1]}, + "down": {"uv": [16, 11], "uv_size": [1, -1]} + } + } + ] + }, + { + "name": "tentacle", + "parent": "handle", + "pivot": [1, -8, -1], + "cubes": [ + { + "origin": [-0.8, -7, -0.8], + "size": [1.6, 31, 1.6], + "uv": { + "north": {"uv": [28, 0], "uv_size": [2, 31]}, + "east": {"uv": [22, 0], "uv_size": [2, 31]}, + "south": {"uv": [26, 1], "uv_size": [2, 31]}, + "west": {"uv": [30, 0], "uv_size": [2, 31]}, + "up": {"uv": [26, 31], "uv_size": [-2, -31]} + } + } + ] + }, + { + "name": "tip_base", + "parent": "trident", + "pivot": [3, -4, -1], + "cubes": [ + { + "origin": [0.5, 23, -1], + "size": [1, 2, 2], + "pivot": [0, 24.5, 0.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [12, 14], "uv_size": [1, 2]}, + "east": {"uv": [14, 4], "uv_size": [2, 2]}, + "south": {"uv": [15, 0], "uv_size": [1, 2]}, + "west": {"uv": [14, 6], "uv_size": [2, 2]}, + "up": {"uv": [15, 2], "uv_size": [1, 2]}, + "down": {"uv": [16, 2], "uv_size": [1, -2]} + } + }, + { + "origin": [1.5, 23, -0.5], + "size": [1, 1, 1], + "pivot": [0, 24.5, 0], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [11, 16], "uv_size": [1, 1]}, + "east": {"uv": [16, 11], "uv_size": [1, 1]}, + "south": {"uv": [12, 16], "uv_size": [1, 1]}, + "west": {"uv": [16, 12], "uv_size": [1, 1]}, + "up": {"uv": [13, 16], "uv_size": [1, 1]}, + "down": {"uv": [16, 14], "uv_size": [1, -1]} + } + }, + { + "origin": [1.5, 27, -0.5], + "size": [1, 1, 1], + "inflate": -0.005, + "pivot": [0, 28.5, 0], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [14, 16], "uv_size": [1, 1]}, + "east": {"uv": [16, 14], "uv_size": [1, 1]}, + "south": {"uv": [15, 16], "uv_size": [1, 1]}, + "west": {"uv": [16, 15], "uv_size": [1, 1]}, + "up": {"uv": [16, 16], "uv_size": [1, 1]}, + "down": {"uv": [17, 1], "uv_size": [1, -1]} + } + }, + { + "origin": [-1.5, 26, -0.5], + "size": [1, 1, 1], + "pivot": [0, 24.5, 0], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [17, 1], "uv_size": [1, 1]}, + "east": {"uv": [17, 2], "uv_size": [1, 1]}, + "south": {"uv": [17, 3], "uv_size": [1, 1]}, + "west": {"uv": [17, 4], "uv_size": [1, 1]}, + "up": {"uv": [17, 5], "uv_size": [1, 1]}, + "down": {"uv": [17, 7], "uv_size": [1, -1]} + } + }, + { + "origin": [-1.5, 30, -0.5], + "size": [1, 1, 1], + "inflate": -0.005, + "pivot": [0, 28.5, 0], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [17, 7], "uv_size": [1, 1]}, + "east": {"uv": [8, 17], "uv_size": [1, 1]}, + "south": {"uv": [17, 8], "uv_size": [1, 1]}, + "west": {"uv": [9, 17], "uv_size": [1, 1]}, + "up": {"uv": [17, 9], "uv_size": [1, 1]}, + "down": {"uv": [10, 18], "uv_size": [1, -1]} + } + }, + { + "origin": [0.625, 31, -0.5], + "size": [1, 1, 1], + "inflate": -0.005, + "pivot": [2.125, 29.5, 0], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [17, 10], "uv_size": [1, 1]}, + "east": {"uv": [11, 17], "uv_size": [1, 1]}, + "south": {"uv": [17, 11], "uv_size": [1, 1]}, + "west": {"uv": [12, 17], "uv_size": [1, 1]}, + "up": {"uv": [17, 12], "uv_size": [1, 1]}, + "down": {"uv": [13, 18], "uv_size": [1, -1]} + } + }, + { + "origin": [-1.5, 23, -1], + "size": [2, 3, 2], + "pivot": [0, 24.5, 0.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [10, 0], "uv_size": [2, 3]}, + "east": {"uv": [10, 3], "uv_size": [2, 3]}, + "south": {"uv": [10, 6], "uv_size": [2, 3]}, + "west": {"uv": [10, 9], "uv_size": [2, 3]}, + "up": {"uv": [14, 12], "uv_size": [2, 2]}, + "down": {"uv": [14, 16], "uv_size": [2, -2]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/rpo_launcher.geo.json b/common/src/main/resources/assets/antarchy/geo/rpo_launcher.geo.json new file mode 100644 index 00000000..07451faf --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/rpo_launcher.geo.json @@ -0,0 +1,287 @@ +{ + "format_version": "1.21.110", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 9, + "visible_bounds_height": 3, + "visible_bounds_offset": [0, 0.5, 0] + }, + "bones": [ + { + "name": "RPO_Launcher", + "pivot": [0, 6, 0] + }, + { + "name": "all", + "parent": "RPO_Launcher", + "pivot": [0, 6, 0] + }, + { + "name": "bazooka", + "parent": "all", + "pivot": [0, 7, 0], + "cubes": [ + { + "origin": [-6, 1, -46], + "size": [12, 12, 84], + "uv": { + "north": {"uv": [84, 84], "uv_size": [12, 12]}, + "east": {"uv": [0, 84], "uv_size": [84, 12]}, + "south": {"uv": [84, 84], "uv_size": [12, 12]}, + "west": {"uv": [84, 84], "uv_size": [-84, 12]}, + "up": {"uv": [0, 84], "uv_size": [84, 12], "uv_rotation": 90}, + "down": {"uv": [84, 84], "uv_size": [-84, 12], "uv_rotation": 90} + } + }, + { + "origin": [-8, -1, -52], + "size": [16, 16, 6], + "uv": { + "north": {"uv": [28, 102], "uv_size": [16, 16]}, + "east": {"uv": [0, 102], "uv_size": [6, 16]}, + "south": {"uv": [6, 102], "uv_size": [16, 16]}, + "west": {"uv": [22, 102], "uv_size": [6, 16]}, + "up": {"uv": [6, 96], "uv_size": [16, 6]}, + "down": {"uv": [22, 102], "uv_size": [16, -6]} + } + }, + { + "origin": [-8, -1, 38], + "size": [16, 16, 6], + "uv": { + "north": {"uv": [6, 102], "uv_size": [16, 16]}, + "east": {"uv": [0, 102], "uv_size": [6, 16]}, + "south": {"uv": [0, 145], "uv_size": [16, 16]}, + "west": {"uv": [22, 102], "uv_size": [6, 16]}, + "up": {"uv": [6, 96], "uv_size": [16, 6]}, + "down": {"uv": [22, 102], "uv_size": [16, -6]} + } + } + ] + }, + { + "name": "center", + "parent": "all", + "pivot": [0, 7, 0], + "cubes": [ + { + "origin": [4.1, -7, -12], + "size": [0, 8, 12], + "uv": { + "north": {"uv": [12, 130], "uv_size": [0, 8]}, + "south": {"uv": [24, 130], "uv_size": [0, 8]}, + "west": {"uv": [12, 130], "uv_size": [12, 8]}, + "up": {"uv": [12, 118], "uv_size": [0, 12]}, + "down": {"uv": [12, 130], "uv_size": [0, -12]} + } + }, + { + "origin": [2.6, -10, 0], + "size": [3, 10, 3], + "uv": { + "north": {"uv": [114, 138], "uv_size": [3, 10]}, + "east": {"uv": [114, 138], "uv_size": [3, 10]}, + "south": {"uv": [114, 138], "uv_size": [3, 10]}, + "west": {"uv": [114, 138], "uv_size": [3, 10]}, + "up": {"uv": [111, 135], "uv_size": [3, 3]}, + "down": {"uv": [114, 138], "uv_size": [3, -3]} + } + }, + { + "origin": [-7, 0, -3], + "size": [14, 14, 6], + "uv": { + "north": {"uv": [94, 102], "uv_size": [14, 14]}, + "east": {"uv": [88, 102], "uv_size": [6, 14]}, + "south": {"uv": [114, 102], "uv_size": [14, 14]}, + "west": {"uv": [108, 102], "uv_size": [6, 14]}, + "up": {"uv": [94, 96], "uv_size": [14, 6]}, + "down": {"uv": [108, 102], "uv_size": [14, -6]} + } + }, + { + "origin": [-1, 14, -12], + "size": [2, 2, 17], + "uv": { + "north": {"uv": [105, 133], "uv_size": [2, 2]}, + "east": {"uv": [107, 133], "uv_size": [-2, -17], "uv_rotation": 90}, + "south": {"uv": [124, 133], "uv_size": [2, 2]}, + "west": {"uv": [107, 116], "uv_size": [-2, 17], "uv_rotation": 90}, + "up": {"uv": [105, 116], "uv_size": [2, 17]}, + "down": {"uv": [105, 133], "uv_size": [2, -17]} + } + } + ] + }, + { + "name": "tentacles", + "parent": "all", + "pivot": [0, 6, 0] + }, + { + "name": "start_1", + "parent": "tentacles", + "pivot": [0, 7, 44], + "cubes": [ + { + "origin": [-2.5, 10, 42], + "size": [5, 4, 10], + "uv": { + "north": {"uv": [138, 106], "uv_size": [5, 4]}, + "east": {"uv": [128, 106], "uv_size": [10, 4]}, + "south": {"uv": [153, 106], "uv_size": [5, 4]}, + "west": {"uv": [143, 106], "uv_size": [10, 4]}, + "up": {"uv": [138, 96], "uv_size": [5, 10]}, + "down": {"uv": [143, 106], "uv_size": [5, -10]} + } + } + ] + }, + { + "name": "end_1", + "parent": "start_1", + "pivot": [0, 11, 52], + "cubes": [ + { + "origin": [-2.5, 11, 51], + "size": [5, 3, 9], + "inflate": -0.01, + "uv": { + "north": {"uv": [135, 139], "uv_size": [5, 3]}, + "east": {"uv": [126, 139], "uv_size": [9, 3]}, + "south": {"uv": [149, 139], "uv_size": [5, 3]}, + "west": {"uv": [140, 139], "uv_size": [9, 3]}, + "up": {"uv": [135, 130], "uv_size": [5, 9]}, + "down": {"uv": [140, 139], "uv_size": [5, -9]} + } + } + ] + }, + { + "name": "start_2", + "parent": "tentacles", + "pivot": [0, 7, 44], + "rotation": [0, 0, -180], + "cubes": [ + { + "origin": [-2.5, 10, 42], + "size": [5, 4, 10], + "uv": { + "north": {"uv": [138, 106], "uv_size": [5, 4]}, + "east": {"uv": [128, 106], "uv_size": [10, 4]}, + "south": {"uv": [153, 106], "uv_size": [5, 4]}, + "west": {"uv": [143, 106], "uv_size": [10, 4]}, + "up": {"uv": [138, 96], "uv_size": [5, 10]}, + "down": {"uv": [143, 106], "uv_size": [5, -10]} + } + } + ] + }, + { + "name": "end_2", + "parent": "start_2", + "pivot": [0, 11, 52], + "cubes": [ + { + "origin": [-2.5, 11, 51], + "size": [5, 3, 9], + "inflate": -0.01, + "uv": { + "north": {"uv": [135, 139], "uv_size": [5, 3]}, + "east": {"uv": [126, 139], "uv_size": [9, 3]}, + "south": {"uv": [149, 139], "uv_size": [5, 3]}, + "west": {"uv": [140, 139], "uv_size": [9, 3]}, + "up": {"uv": [135, 130], "uv_size": [5, 9]}, + "down": {"uv": [140, 139], "uv_size": [5, -9]} + } + } + ] + }, + { + "name": "start_3", + "parent": "tentacles", + "pivot": [0, 7, 44], + "rotation": [0, 0, -90], + "cubes": [ + { + "origin": [-2.5, 10, 42], + "size": [5, 4, 10], + "uv": { + "north": {"uv": [138, 106], "uv_size": [5, 4]}, + "east": {"uv": [128, 106], "uv_size": [10, 4]}, + "south": {"uv": [153, 106], "uv_size": [5, 4]}, + "west": {"uv": [143, 106], "uv_size": [10, 4]}, + "up": {"uv": [138, 96], "uv_size": [5, 10]}, + "down": {"uv": [143, 106], "uv_size": [5, -10]} + } + } + ] + }, + { + "name": "end_3", + "parent": "start_3", + "pivot": [0, 11, 52], + "cubes": [ + { + "origin": [-2.5, 11, 51], + "size": [5, 3, 9], + "inflate": -0.01, + "uv": { + "north": {"uv": [135, 139], "uv_size": [5, 3]}, + "east": {"uv": [126, 139], "uv_size": [9, 3]}, + "south": {"uv": [149, 139], "uv_size": [5, 3]}, + "west": {"uv": [140, 139], "uv_size": [9, 3]}, + "up": {"uv": [135, 130], "uv_size": [5, 9]}, + "down": {"uv": [140, 139], "uv_size": [5, -9]} + } + } + ] + }, + { + "name": "start_4", + "parent": "tentacles", + "pivot": [0, 7, 44], + "rotation": [0, 0, 90], + "cubes": [ + { + "origin": [-2.5, 10, 42], + "size": [5, 4, 10], + "uv": { + "north": {"uv": [138, 106], "uv_size": [5, 4]}, + "east": {"uv": [128, 106], "uv_size": [10, 4]}, + "south": {"uv": [153, 106], "uv_size": [5, 4]}, + "west": {"uv": [143, 106], "uv_size": [10, 4]}, + "up": {"uv": [138, 96], "uv_size": [5, 10]}, + "down": {"uv": [143, 106], "uv_size": [5, -10]} + } + } + ] + }, + { + "name": "end_4", + "parent": "start_4", + "pivot": [0, 11, 52], + "cubes": [ + { + "origin": [-2.5, 11, 51], + "size": [5, 3, 9], + "inflate": -0.01, + "uv": { + "north": {"uv": [135, 139], "uv_size": [5, 3]}, + "east": {"uv": [126, 139], "uv_size": [9, 3]}, + "south": {"uv": [149, 139], "uv_size": [5, 3]}, + "west": {"uv": [140, 139], "uv_size": [9, 3]}, + "up": {"uv": [135, 130], "uv_size": [5, 9]}, + "down": {"uv": [140, 139], "uv_size": [5, -9]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/tentacle.geo.json b/common/src/main/resources/assets/antarchy/geo/tentacle.geo.json new file mode 100644 index 00000000..f3e0a41a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/tentacle.geo.json @@ -0,0 +1,115 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 4, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "tentacle", + "pivot": [0, -3.05, 9], + "cubes": [ + {"origin": [-3, -3, 8], "size": [6, 19, 2], "uv": [0, 0]} + ] + }, + { + "name": "tentacle2", + "parent": "tentacle", + "pivot": [0, 16, 9], + "cubes": [ + {"origin": [-2, 16, 8], "size": [4, 14, 2], "uv": [16, 0]} + ] + }, + { + "name": "tentacle3", + "parent": "tentacle2", + "pivot": [0, 30.00833, 9], + "cubes": [ + {"origin": [-1, 30, 8], "size": [2, 8, 2], "uv": [0, 21]} + ] + }, + { + "name": "tentacle4", + "parent": "tentacle3", + "pivot": [0, 38, 9], + "cubes": [ + {"origin": [-3, 38, 8], "size": [6, 8, 2], "uv": [16, 16]}, + {"origin": [-2, 46, 8], "size": [4, 4, 2], "uv": [8, 26]} + ] + }, + { + "name": "tentacle_right", + "pivot": [-9, -3.05, 0], + "rotation": [0, -90, 0], + "cubes": [ + {"origin": [-12, -3, -1], "size": [6, 19, 2], "uv": [0, 0]} + ] + }, + { + "name": "tentacle_right2", + "parent": "tentacle_right", + "pivot": [-9, 16, 0], + "cubes": [ + {"origin": [-11, 16, -1], "size": [4, 14, 2], "uv": [16, 0]} + ] + }, + { + "name": "tentacle_right3", + "parent": "tentacle_right2", + "pivot": [-9, 30.00833, 0], + "cubes": [ + {"origin": [-10, 30, -1], "size": [2, 8, 2], "uv": [0, 21]} + ] + }, + { + "name": "tentacle_right4", + "parent": "tentacle_right3", + "pivot": [-9, 38, 0], + "cubes": [ + {"origin": [-12, 38, -1], "size": [6, 8, 2], "uv": [16, 16]}, + {"origin": [-11, 46, -1], "size": [4, 4, 2], "uv": [8, 26]} + ] + }, + { + "name": "tentacle_left", + "pivot": [9, -3.05, 0], + "rotation": [0, 90, 0], + "cubes": [ + {"origin": [6, -3, -1], "size": [6, 19, 2], "uv": [0, 0], "mirror": true} + ] + }, + { + "name": "tentacle_left2", + "parent": "tentacle_left", + "pivot": [9, 16, 0], + "cubes": [ + {"origin": [7, 16, -1], "size": [4, 14, 2], "uv": [16, 0], "mirror": true} + ] + }, + { + "name": "tentacle_left3", + "parent": "tentacle_left2", + "pivot": [9, 30.00833, 0], + "cubes": [ + {"origin": [8, 30, -1], "size": [2, 8, 2], "uv": [0, 21], "mirror": true} + ] + }, + { + "name": "tentacle_left4", + "parent": "tentacle_left3", + "pivot": [9, 38, 0], + "cubes": [ + {"origin": [6, 38, -1], "size": [6, 8, 2], "uv": [16, 16], "mirror": true}, + {"origin": [7, 46, -1], "size": [4, 4, 2], "uv": [8, 26], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index b6e5d521..c340bff9 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -41,6 +41,7 @@ "block.antarchy.pink_milkweed": "Pink Milkweed", "block.antarchy.camellia": "Camellia", "block.antarchy.spider_lily": "Spider Lily", + "block.antarchy.giant_lily_pad": "Giant Lily Pad", "block.antarchy.hushweed": "Hushweed", "block.antarchy.umbral_moss_block": "Umbral Moss Block", "block.antarchy.umbral_moss_carpet": "Umbral Moss Carpet", @@ -152,6 +153,12 @@ "block.antarchy.lumen": "Lumen", "block.antarchy.lumen_froglight": "Lumen Froglight", "block.antarchy.roseate_froglight": "Roseate Froglight", + "block.antarchy.star_coral": "Star Coral", + "block.antarchy.star_coral_fan": "Star Coral Fan", + "block.antarchy.star_coral_block": "Star Coral Block", + "block.antarchy.dead_star_coral": "Dead Star Coral", + "block.antarchy.dead_star_coral_fan": "Dead Star Coral Fan", + "block.antarchy.dead_star_coral_block": "Dead Star Coral Block", "entity.antarchy.apple_cow": "Apple Cow", "entity.antarchy.golden_apple_cow": "Golden Apple Cow", "entity.antarchy.enchanted_golden_apple_cow": "Enchanted Golden Apple Cow", @@ -201,6 +208,9 @@ "item.antarchy.cloud_shark_fin_soup": "Cloud Shark Fin Soup", "tooltip.antarchy.cloud_shark_fin_soup": "Grants Strength and Slow Falling.", "item.antarchy.kraken_tooth": "Kraken Tooth", + "item.antarchy.kraken_tentacle": "Kraken Tentacle", + "item.antarchy.krakens_grasp": "Kraken's Grasp", + "entity.antarchy.tentacle": "Tentacle", "item.antarchy.basilisk_fang": "Basilisk Fang", "item.antarchy.basilisk_dagger": "Basilisk Dagger", "item.antarchy.blood_crystal_block": "Blood Crystal Block", @@ -222,6 +232,7 @@ "item.antarchy.dream_torch": "Dream Torch", "item.antarchy.dream_lantern": "Dream Lantern", "item.antarchy.dream_campfire": "Dream Campfire", + "item.antarchy.giant_lily_pad": "Giant Lily Pad", "item.antarchy.nightmare_scale": "Nightmare Scale", "item.antarchy.nightmare_helmet": "Nightmare Helmet", "item.antarchy.nightmare_chestplate": "Nightmare Chestplate", @@ -377,6 +388,7 @@ "item.antarchy.antiwater_bucket": "Antiwater Bucket", "item.antarchy.reverie_bottle": "Bottle of Reverie", "item.antarchy.squidzooka": "Squidzooka", + "item.antarchy.rpo_launcher": "R.P.O. Launcher", "item.antarchy.shrink_ray": "Shrink Ray", "item.antarchy.growth_ray": "Growth Ray", "tooltip.antarchy.shrink_ray": "Permanently shrinks targets. Hold down to charge.", @@ -823,6 +835,8 @@ "advancements.antarchy.growth_ray_craft.description": "Craft a Growth Ray.", "advancements.antarchy.squidzooka_craft.title": "Ink and Destroy", "advancements.antarchy.squidzooka_craft.description": "Craft a Squidzooka.", + "advancements.antarchy.rocket_powered_octopus.title": "Rocket Powered Octopus", + "advancements.antarchy.rocket_powered_octopus.description": "Craft an R.P.O. Launcher.", "advancements.antarchy.gravity_gun_craft.title": "Pick Up Artist", "advancements.antarchy.gravity_gun_craft.description": "Craft a Gravity Gun." } diff --git a/common/src/main/resources/assets/antarchy/models/block/dead_star_coral.json b/common/src/main/resources/assets/antarchy/models/block/dead_star_coral.json new file mode 100644 index 00000000..aa26a0de --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/dead_star_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/star_coral/dead_star_coral" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/dead_star_coral_block.json b/common/src/main/resources/assets/antarchy/models/block/dead_star_coral_block.json new file mode 100644 index 00000000..d42fdd91 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/dead_star_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/star_coral/dead_star_coral_block" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/dead_star_coral_fan.json b/common/src/main/resources/assets/antarchy/models/block/dead_star_coral_fan.json new file mode 100644 index 00000000..5794c397 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/dead_star_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "antarchy:block/star_coral/dead_star_coral_fan" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/dead_star_coral_wall_fan.json b/common/src/main/resources/assets/antarchy/models/block/dead_star_coral_wall_fan.json new file mode 100644 index 00000000..3a80e1a7 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/dead_star_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "antarchy:block/star_coral/dead_star_coral_fan" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/0.json new file mode 100644 index 00000000..1be5b2e8 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_1x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/180.json new file mode 100644 index 00000000..24c0e389 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_1x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/270.json new file mode 100644 index 00000000..7c89781b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_1x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/90.json new file mode 100644 index 00000000..d503c194 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/single/single/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_1x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/0.json new file mode 100644 index 00000000..8f64a9d7 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 32, + 16, + 48 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 32, + 16, + 48 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/180.json new file mode 100644 index 00000000..7eb8f5a6 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 32, + 16, + 48 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 32, + 16, + 48 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/270.json new file mode 100644 index 00000000..01c79f1e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 32, + 16, + 48 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 32, + 16, + 48 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/90.json new file mode 100644 index 00000000..f01d345e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_left/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 32, + 16, + 48 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 32, + 16, + 48 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/0.json new file mode 100644 index 00000000..9951581b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 32, + 32, + 48 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 32, + 32, + 48 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/180.json new file mode 100644 index 00000000..b194f7a4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 32, + 32, + 48 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 32, + 32, + 48 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/270.json new file mode 100644 index 00000000..99972a5f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 32, + 32, + 48 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 32, + 32, + 48 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/90.json new file mode 100644 index 00000000..d44dfc84 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_middle/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 32, + 32, + 48 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 32, + 32, + 48 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/0.json new file mode 100644 index 00000000..ff296a2d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 32, + 32, + 48, + 48 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 32, + 32, + 48, + 48 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/180.json new file mode 100644 index 00000000..bda1dd71 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 32, + 32, + 48, + 48 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 32, + 32, + 48, + 48 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/270.json new file mode 100644 index 00000000..df5dc055 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 32, + 32, + 48, + 48 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 32, + 32, + 48, + 48 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/90.json new file mode 100644 index 00000000..e49f458a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/bottom_right/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 32, + 32, + 48, + 48 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 32, + 32, + 48, + 48 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/0.json new file mode 100644 index 00000000..177b9da5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/180.json new file mode 100644 index 00000000..2d0df505 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/270.json new file mode 100644 index 00000000..7f32de5e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/90.json new file mode 100644 index 00000000..0497bf63 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/center/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/0.json new file mode 100644 index 00000000..1388a75f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/180.json new file mode 100644 index 00000000..af8d7087 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/270.json new file mode 100644 index 00000000..9b90ec6b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/90.json new file mode 100644 index 00000000..66f40fa3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_left/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/0.json new file mode 100644 index 00000000..d0f6b288 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 32, + 16, + 48, + 32 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 32, + 16, + 48, + 32 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/180.json new file mode 100644 index 00000000..ed857a25 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 32, + 16, + 48, + 32 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 32, + 16, + 48, + 32 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/270.json new file mode 100644 index 00000000..bddcd717 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 32, + 16, + 48, + 32 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 32, + 16, + 48, + 32 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/90.json new file mode 100644 index 00000000..0e61ca5a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/middle_right/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 32, + 16, + 48, + 32 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 32, + 16, + 48, + 32 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/0.json new file mode 100644 index 00000000..fec4034c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/180.json new file mode 100644 index 00000000..0fbefb4d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/270.json new file mode 100644 index 00000000..3d48d8f2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/90.json new file mode 100644 index 00000000..36f30846 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_left/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/0.json new file mode 100644 index 00000000..ab445e79 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/180.json new file mode 100644 index 00000000..53efae6a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/270.json new file mode 100644 index 00000000..c3424e5f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/90.json new file mode 100644 index 00000000..1c896803 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_middle/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/0.json new file mode 100644 index 00000000..148672a1 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 32, + 0, + 48, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 32, + 0, + 48, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/180.json new file mode 100644 index 00000000..73e41711 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 32, + 0, + 48, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 32, + 0, + 48, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/270.json new file mode 100644 index 00000000..e9869984 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 32, + 0, + 48, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 32, + 0, + 48, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/90.json new file mode 100644 index 00000000..6b4aad17 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/three_by_three/top_right/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_3x3", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_3x3" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 32, + 0, + 48, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 32, + 0, + 48, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/0.json new file mode 100644 index 00000000..b4aabc6e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/180.json new file mode 100644 index 00000000..3400a4b0 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/270.json new file mode 100644 index 00000000..f3fcef58 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/90.json new file mode 100644 index 00000000..9339f8be --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/bottom_middle/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/0.json new file mode 100644 index 00000000..a9c29c20 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/180.json new file mode 100644 index 00000000..cf003f59 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/270.json new file mode 100644 index 00000000..6e2049ac --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/90.json new file mode 100644 index 00000000..dbca2d2d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_left/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/0.json new file mode 100644 index 00000000..b4aabc6e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/180.json new file mode 100644 index 00000000..3400a4b0 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/270.json new file mode 100644 index 00000000..f3fcef58 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/90.json new file mode 100644 index 00000000..9339f8be --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/middle_right/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/0.json new file mode 100644 index 00000000..a9c29c20 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/180.json new file mode 100644 index 00000000..cf003f59 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/270.json new file mode 100644 index 00000000..6e2049ac --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/90.json new file mode 100644 index 00000000..dbca2d2d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_one/top_middle/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x1", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x1" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/0.json new file mode 100644 index 00000000..7f91e262 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/180.json new file mode 100644 index 00000000..50666a30 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/270.json new file mode 100644 index 00000000..16776bb5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/90.json new file mode 100644 index 00000000..339aa8a2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_left/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 16, + 16, + 32 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/0.json new file mode 100644 index 00000000..1af763ba --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/180.json new file mode 100644 index 00000000..1d0e4305 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/270.json new file mode 100644 index 00000000..816c803e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/90.json new file mode 100644 index 00000000..f1f585be --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/bottom_right/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 16, + 32, + 32 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/0.json new file mode 100644 index 00000000..f697d02d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/180.json new file mode 100644 index 00000000..e34709da --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/270.json new file mode 100644 index 00000000..8b7be027 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/90.json new file mode 100644 index 00000000..81c6ad6f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_left/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/0.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/0.json new file mode 100644 index 00000000..5a64c7b5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/0.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 0 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 0 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/180.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/180.json new file mode 100644 index 00000000..27ac0754 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/180.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 180 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 180 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/270.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/270.json new file mode 100644 index 00000000..020f177c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/270.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 270 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 270 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/90.json b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/90.json new file mode 100644 index 00000000..3a667888 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/giant_lily_pad/two_by_two/top_right/90.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "antarchy:block/giant_lilypad/giant_lilypad_1x1", + "top": "antarchy:block/giant_lilypad/giant_lilypad_2x2", + "bottom": "antarchy:block/giant_lilypad/giant_lilypad_2x2" + }, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [16, 0.25, 16], + "shade": false, + "faces": { + "up": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#top", + "rotation": 90 + }, + "down": { + "uv": [ + 16, + 0, + 32, + 16 + ], + "texture": "#bottom", + "rotation": 90 + } + } + } + ] +} + + diff --git a/common/src/main/resources/assets/antarchy/models/block/star_coral.json b/common/src/main/resources/assets/antarchy/models/block/star_coral.json new file mode 100644 index 00000000..e8c9751f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/star_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/star_coral/star_coral" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/star_coral_block.json b/common/src/main/resources/assets/antarchy/models/block/star_coral_block.json new file mode 100644 index 00000000..7285193c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/star_coral_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/star_coral/star_coral_block" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/star_coral_fan.json b/common/src/main/resources/assets/antarchy/models/block/star_coral_fan.json new file mode 100644 index 00000000..f9921dbf --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/star_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_fan", + "textures": { + "fan": "antarchy:block/star_coral/star_coral_fan" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/star_coral_wall_fan.json b/common/src/main/resources/assets/antarchy/models/block/star_coral_wall_fan.json new file mode 100644 index 00000000..9db77296 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/star_coral_wall_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/coral_wall_fan", + "textures": { + "fan": "antarchy:block/star_coral/star_coral_fan" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/dead_star_coral.json b/common/src/main/resources/assets/antarchy/models/item/dead_star_coral.json new file mode 100644 index 00000000..12f6c85b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/dead_star_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/star_coral/dead_star_coral" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/dead_star_coral_block.json b/common/src/main/resources/assets/antarchy/models/item/dead_star_coral_block.json new file mode 100644 index 00000000..4867c42e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/dead_star_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/dead_star_coral_block" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/dead_star_coral_fan.json b/common/src/main/resources/assets/antarchy/models/item/dead_star_coral_fan.json new file mode 100644 index 00000000..7802084f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/dead_star_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/star_coral/dead_star_coral_fan" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/giant_lily_pad.json b/common/src/main/resources/assets/antarchy/models/item/giant_lily_pad.json new file mode 100644 index 00000000..c325d587 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/giant_lily_pad.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/giant_lilypad/giant_lilypad_1x1" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/kraken_tentacle.json b/common/src/main/resources/assets/antarchy/models/item/kraken_tentacle.json new file mode 100644 index 00000000..a2303ac6 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/kraken_tentacle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/kraken_tentacle" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/krakens_grasp_gui.json b/common/src/main/resources/assets/antarchy/models/item/krakens_grasp_gui.json new file mode 100644 index 00000000..8b08084b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/krakens_grasp_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/krakens_grasp/krakens_grasp_item" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/krakens_grasp_held.json b/common/src/main/resources/assets/antarchy/models/item/krakens_grasp_held.json new file mode 100644 index 00000000..15217a4d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/krakens_grasp_held.json @@ -0,0 +1,121 @@ +{ + "parent": "builtin/entity", + "texture_size": [ + 32, + 32 + ], + "gui_light": "front", + "display": { + "thirdperson_righthand": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 0, + 0, + 1 + ] + }, + "thirdperson_lefthand": { + "rotation": [ + 0, + 90, + 0 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + -85, + 10 + ], + "translation": [ + 3, + -1.5, + 1.1 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "firstperson_lefthand": { + "rotation": [ + 0, + -85, + 10 + ], + "translation": [ + 3, + -1.5, + 1.1 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + }, + "ground": { + "translation": [ + 0, + 2, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "gui": { + "rotation": [ + 0, + 0, + -45 + ], + "translation": [ + -1.25, + -1.25, + 0 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "fixed": { + "rotation": [ + -180, + 0, + -135 + ], + "translation": [ + -1.5, + -1.25, + 0 + ], + "scale": [ + 0.6, + 0.6, + 0.6 + ] + }, + "on_shelf": { + "rotation": [ + 0, + -180, + 0 + ], + "scale": [ + 0.68, + 0.68, + 0.68 + ] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/models/item/rpo_launcher_gui.json b/common/src/main/resources/assets/antarchy/models/item/rpo_launcher_gui.json new file mode 100644 index 00000000..035aa419 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/rpo_launcher_gui.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/rpo_launcher_item" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/rpo_launcher_held_geo.json b/common/src/main/resources/assets/antarchy/models/item/rpo_launcher_held_geo.json new file mode 100644 index 00000000..b624f476 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/rpo_launcher_held_geo.json @@ -0,0 +1,98 @@ +{ + "parent": "builtin/entity", + "texture_size": [ + 256, + 256 + ], + "display": { + "thirdperson_righthand": { + "translation": [ + 4, + 0, + 0 + ] + }, + "firstperson_righthand": { + "translation": [ + 1.5, + -1, + 3 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "firstperson_lefthand": { + "translation": [ + 1.5, + -1, + 3 + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + }, + "ground": { + "translation": [ + 0, + 3, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "gui": { + "rotation": [ + 30, + -135, + 0 + ], + "translation": [ + 0.4, + -1, + 0 + ], + "scale": [ + 0.175, + 0.175, + 0.175 + ] + }, + "fixed": { + "rotation": [ + 90, + -45, + 90 + ], + "translation": [ + 0.5, + -2, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "on_shelf": { + "rotation": [ + 90, + 0, + 90 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/models/item/star_coral.json b/common/src/main/resources/assets/antarchy/models/item/star_coral.json new file mode 100644 index 00000000..a1caf1d1 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/star_coral.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/star_coral/star_coral" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/star_coral_block.json b/common/src/main/resources/assets/antarchy/models/item/star_coral_block.json new file mode 100644 index 00000000..a8f8a15d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/star_coral_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/star_coral_block" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/star_coral_fan.json b/common/src/main/resources/assets/antarchy/models/item/star_coral_fan.json new file mode 100644 index 00000000..4659f552 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/star_coral_fan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/star_coral/star_coral_fan" + } +} diff --git a/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_1x1.png b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_1x1.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d4c1e8b05b47d92fc79811ebd0da98c69a6b7b GIT binary patch literal 456 zcmV;(0XP1MP)ucc?fyWqVyFBYXpMN2g?CNUk%2Y`HTof#iJm_yqLNNz z@xRB~R-$w@o*S9F#Q;R3heRm)BssO^l~~=)#L7-&1o>yFBCEteZ#&WVS7}3w9thFH zy%A7AIqllfh~5XOxj>y?79EE)jt{!1ib;<-J_#B&DU0h=NICpF=*a zY?!X~En%HYG(tcE^zyd@-eZf6fIXPL754vQfAU%gBEAW#qil-p8q znE_KKsWBdALI}r*)+IH2K#>CQCN)>&B0U!(Z#MDZTmt*2l{zPtHqMq5_kS$kIW7d~ yA6~>wof%2`1pom5|0FRL>;M1&21!IgR09AWy4g9wlEzv90000ZtZO&tX2{#iEJ}3X{f}2oBTf_Ys=yD29C$vzs$<{3 z78VDfQ2VoM`CJ2a0L__fz&|}(=lF!5uWmHqQIGuS2oH38K`sBw0SGXJA`7ccsYYTf zIG^a8kkgigpkQ-qc<_VEsE18$>|w}Q0|Cg$&UaCsm_!QT_fP}x8>W+=_l8Cv#z{x& zMLbE3RY0qi&1pF`sYvc#IrxP3M-ewTYUpwRnzIFn^DF)Js}RN8i|uHlqr6<_rsf*V zHadiAAO}lK{4JLn3uAa6_9!rvYWiLS8z7l!ksdmQ_n~vY$Z-&-b(^lQ%FS3q)j7&$ z%`x`SGzv4AeAP`5i`?*#?hnWN7DD|i;Pb=z@!YZ2-8Zp>&@3t8+0#`pc;dCljzhU? z!iMwqlwM3-0Y0I21^#{@F^~#TfMTo@U4BUo0tdh$pE?{4>Fe_wR2zUz@PDktluu0000 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_2x2.png b/common/src/main/resources/assets/antarchy/textures/block/giant_lilypad/giant_lilypad_2x2.png new file mode 100644 index 0000000000000000000000000000000000000000..b4406ca155506bb7f230422377e5738926675956 GIT binary patch literal 924 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 bK~w_(&-s&y>`^~F00000NkvXXu0mjfDXvhR literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/lotus.png b/common/src/main/resources/assets/antarchy/textures/block/lotus.png new file mode 100644 index 0000000000000000000000000000000000000000..370266d77f07c5bf38dc494f59185e3748f304bc GIT binary patch literal 401 zcmV;C0dD?@P)Px$OG!jQR5*?8kuggGaTvybe>eyX?*xYoL`iV-L>wZ7hGq#tH=(7aMn8fdq0yEW zp(XrH74H0*32Wm%w&~kU;(GdL`jyq0}K0x$L@9@6Q`+J`k{`ChW(!k6x<1(wzn*YwyvzoweG7o(f1+&$W1)oY{a zYSfb~764EH-fo`>+yhj{_MzA2X@UHjyR3R`9NS0J)rc~c^T;+UC`)S^-8|0qrKYQt zIyGJ{CTz`JK4zbM+didEEuuTVIuihfK9nN8AtV4zSJwh`O)skBAuI7F$M#9(649;e v3buzI2(?B4aCdqs!*_-h;daONBm7W5X;GE)<;?}s00000NkvXXu0mjf<4UQe literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral.png b/common/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral.png new file mode 100644 index 0000000000000000000000000000000000000000..c457c8a48ecf01c0b89b991d3f7aead86fb10655 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~p#Yx{S0J5{ zl3bFN)>d6Ub8_#J1#`Ymz84A5tC**vb>Cwj=C8ik6$w_f<0a%PwlV8J})> z;=ts`9}t+)Q`URwmFSGx_Odljhx1>aQ7helaK@5~>YG)p6%4z47$+|cxX=T%kipZ{ K&t;ucLK6V@@l(10 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_block.png b/common/src/main/resources/assets/antarchy/textures/block/star_coral/dead_star_coral_block.png new file mode 100644 index 0000000000000000000000000000000000000000..82670cf5c8a83f75abec7447dac96c942b12f9da GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~p#Yx{S0J5{ zl3bFN)>d6Ub8_#J1#`Ymz84A2Gjg#Q@-RJK z@&Es)#P16NlCHd1TH|kF$S#x_aLeR*zE43<_060%k3;51qx~dH-X|}4&{k}fIoWRe z?8TF}T@(9$;%kB1ZjpOa-J0J=9{zIcd6Ub8_#J1#`Ymz84AZ literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png b/common/src/main/resources/assets/antarchy/textures/block/star_coral/star_coral.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ca10b415cef2cd5f13d01cd66fd9f3dd52b1ba GIT binary patch literal 1180 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 DpN>C) literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/cheep.png b/common/src/main/resources/assets/antarchy/textures/item/cheep.png new file mode 100644 index 0000000000000000000000000000000000000000..39b5499ac49541fc57bc398d11ccba0e2677c001 GIT binary patch literal 581 zcmV-L0=oT)P)Px$|4BqaR5*=|l09e>VHn4MmmU(oQWDcbsz!$n(X<4iMh8XFYOMqXmpC}6=uqks zF|%%pK@bsKigf5;_aJ_NSaDGitr`tjh&iN3X+CHp%|(uT9WM7K*JSXSo)_N#$Mb(4 zg)S9OjthUl2SBy5iqiu;e>AJK|5et5$0m|uV@L&HF;`(A8UUcKn;l>P&w6ETVVSya z0#K_oWM8eUb~D>@5KoSafoOobZlWzL6CUgX=;(jEeARt~JtvNd@L(VQH=8?Dwktl@ z``)+v66Yd_E$(Kdryqcz3Xx4-@@s|*Trxqo3`rsh&POkck)D1I`Mdz+*9=M~oSr=; z!B3OV0N9s_18{uooT9dagKF2DxPIvY0O`yHmI`GuH)mQIq$X1Wz%wTZdA!oTQ#)_R zW&bJtUXBKE@a-){xtO>jP9_fU@nO!T>X11VR3R4Wg&ob!|F)RVub@t6rxZYJV++<1 zJCbU#2ESV1;SF9J+ynwNv<4*;Q~;x3VI5VtdhIN_Rv{D)a5p`}kQPL@>@CdaS30t} z@#T)<0eF&o+;O7*U0Wp>?73r+USgwuVxxXa_JP_CQj;l>ICEI4f1dkEwOGRtwq5=< zNi;xn3(35f3S~Zg{m%a3y}Zc2V>&w}H&iaxc+DS5Z6mo3$@y3<)&OV*`(O1BK@Y`a T(B~`I00000NkvXXu0mjfd!qS< literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp.png b/common/src/main/resources/assets/antarchy/textures/item/krakens_grasp/krakens_grasp.png new file mode 100644 index 0000000000000000000000000000000000000000..1b802a2c47b52299089850ca572bd30b0a1f1f1a GIT binary patch literal 919 zcmV;I18Dq-P)S(FjTSA!O%!Dj5h#t0Ow(kpjA?#X&c~f^KEChz#&gfP=bp#^JLf*ssas#4Q5HWv zN48}W?Jb$!*Ik*8_A8n*N5ALbsk|6XrypfLo!^nCM<;}hGk@U{i}XsBmlvp_Wku>w zGOq36AA6Hp-o9#%=0O9=pw$`ehG5H8nNvJ`l&svI-GhE(t|( zJbhcCi&dWxmFCs}7FR`ePia9sF|0bCzSG31c>ejH4rUILP;`7PI++W%2EYlR05hVrLp7oDyej@21{K^}jXec`{#2QaHpZ zfSZQ3TN-nAJ8P8J1R;HA%_L{^_kcO~l}QQ+Xm`mE{SIKrW5kI-_7dd)8st2gH7U92 z3kd6fOiahg%6=ebtO8B@Z@Pc^0+_FbduetzVLai@ubfxi52pOEPx$j7da6R5*>5lDkVnQ5?rV$AloHZW0&s0Uk z5ZT%lpZ|pkC*kg{9y~4W0IaO7((Ct95k|Ilh4rrlo|blwQ*olPB)xtw72(F_Isg_k zaDHyw7#*7?r)7!8lDJg6gmYS!8~qM|UlZiCEPA2v4*PxI(zsN+QDX+Xoa&NzeWtOf zqqeo7Ivgb82PD$xvXm=LGcRE$nh>6HnVBgCt9HfN`Kg>lv+9tIHBAr-h7IdWiT)-F z9nBUF)3?~2O$-kO@pblboQjjV%zhu^*yMttU!PFd;6iZ+@ILMX@Kj$*x8DaqG?tVp z#aGzcIzTDChvE*9zt{#Kl{pdaR6fB*mh literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/rpo_launcher_item.png b/common/src/main/resources/assets/antarchy/textures/item/rpo_launcher_item.png new file mode 100644 index 0000000000000000000000000000000000000000..e6999aed2a848f3174aff0528e090ea4ed3ec050 GIT binary patch literal 525 zcmV+o0`mQdP)Px$$4Nv%R5*>5lRs!0VHn1LCqkzV7col<5>CV^*p?oxkR?V0gSWV)gIpm_9V*tb zn`^+OgJcL9dk~0O8i-pU2`)*xX#9hS$xy_zNuXedz8%_=CSE8$)AxPw{&=77d0&OU zN)*ci&^$e%yR)S*ixS1M)W;(AvB*N&l$nb^oww!v=P$Dt1D@vT39Uwpie(YJ`G&4X zCy+$3ERMAY0RR=t!gF@a_4Rk6`HvIGsMo|u#rPj&B25cRJf4(v`i(e{g|sR4v53B& zcZGQWy>vPaAMg|>3efEmXyAMQHRsf{7xp5~U&wZkQZjRy5X0*4BYGf!C zvJ7mSief?Jb_OV>+FN(scn$b3SQalYy)62kyIXi@k(_Bw{+MU@ z^M literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/models/item/rpo_launcher.png b/common/src/main/resources/assets/antarchy/textures/models/item/rpo_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..72bee15ec0db470634c471e2a3a2063ca612064a GIT binary patch literal 5809 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 HAS_STAR_CORAL = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "has_star_coral") + ); + private static final ResourceKey STAR_CORAL_PATCH = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "star_coral_patch") + ); @Override public void onInitialize() { AntarchyFabricNetworking.register(); @@ -205,6 +213,11 @@ public final class AntarchyFabric implements ModInitializer { GenerationStep.Decoration.VEGETAL_DECORATION, CORN_PATCH ); + BiomeModifications.addFeature( + BiomeSelectors.tag(HAS_STAR_CORAL), + GenerationStep.Decoration.VEGETAL_DECORATION, + STAR_CORAL_PATCH + ); BiomeModifications.addSpawn( BiomeSelectors.tag(APPLE_COW_SPAWN_BIOMES), net.minecraft.world.entity.MobCategory.CREATURE, diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 66211ecc..480bcd53 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -256,6 +256,10 @@ public final class AntarchyFabricContent { ); AntarchyObjects.setOctopusBomb(AntarchyFabricEntities.OCTOPUS_BOMB); + AntarchyObjects.setTentacle(AntarchyFabricEntities.TENTACLE); + AntarchyObjects.setKrakensGraspTrident(AntarchyFabricEntities.KRAKENS_GRASP_TRIDENT); + AntarchyObjects.setKrakenTentacle(() -> AntarchyFabricItems.KRAKEN_TENTACLE.get()); + AntarchyObjects.setKrakensGrasp(() -> AntarchyFabricItems.KRAKENS_GRASP.get()); AntarchyObjects.setOuranwoodDeer(AntarchyFabricEntities.OURANWOOD_DEER); AntarchyObjects.setGlimmer(AntarchyFabricEntities.GLIMMER); AntarchyObjects.setSpiritApple(() -> AntarchyFabricItems.SPIRIT_APPLE.get()); @@ -264,6 +268,9 @@ public final class AntarchyFabricContent { AntarchyObjects.setCorn(() -> AntarchyFabricItems.CORN.get()); AntarchyObjects.setCornSeeds(() -> AntarchyFabricItems.CORN_SEEDS.get()); AntarchyObjects.setWildCorn(() -> AntarchyFabricBlocks.WILD_CORN.get()); + AntarchyObjects.setStarCoralBlock(() -> AntarchyFabricBlocks.STAR_CORAL_BLOCK.get()); + AntarchyObjects.setStarCoral(() -> AntarchyFabricBlocks.STAR_CORAL.get()); + AntarchyObjects.setStarCoralFan(() -> AntarchyFabricBlocks.STAR_CORAL_FAN.get()); AntarchyObjects.setCookedCorndog(() -> AntarchyFabricItems.COOKED_CORNDOG.get()); AntarchyObjects.setGlimmerBottle(() -> AntarchyFabricItems.GLIMMER_BOTTLE.get()); AntarchyObjects.setGlimmerVariantComponent(() -> AntarchyFabricMisc.GLIMMER_VARIANT.get()); @@ -274,7 +281,6 @@ public final class AntarchyFabricContent { AntarchyObjects.setLumenBlock(() -> AntarchyFabricBlocks.LUMEN_BLOCK.get()); AntarchyObjects.setLumenFroglight(() -> AntarchyFabricBlocks.LUMEN_FROGLIGHT.get()); AntarchyObjects.setPeachLeavesParticle(() -> AntarchyFabricMisc.PEACH_LEAVES_PARTICLE.get()); - // Dorrie is not part of this update yet. // AntarchyObjects.setDorrieInventoryMenu(AntarchyFabricMisc.DORRIE_INVENTORY_MENU); AntarchyObjects.bind( AntarchyFabricEntities.EASTER_BUNNY, @@ -364,6 +370,7 @@ public final class AntarchyFabricContent { () -> AntarchyFabricBlocks.HUSHWEED.get(), () -> AntarchyFabricBlocks.OURANWOOD_SQUIRREL_NEST.get(), () -> AntarchyFabricBlocks.BRUTALFLY_COCOON_SPAWNER.get(), + () -> AntarchyFabricBlocks.GIANT_LILY_PAD.get(), () -> AntarchyFabricBlocks.ANT_NEST_BLOCK_ENTITY.get(), () -> AntarchyFabricBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), () -> AntarchyFabricBlocks.WASP_NEST_BLOCK_ENTITY.get(), diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index cbb7aa93..6b13c29e 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -21,6 +21,7 @@ import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.minecraft.server.level.ServerPlayer; import com.craisinlord.antarchy.content.SquidzookaDispenseBehavior; +import com.craisinlord.antarchy.content.RpoLauncherDispenseBehavior; import com.craisinlord.antarchy.content.WaterCannonDispenseBehavior; import net.minecraft.world.level.block.ComposterBlock; import net.minecraft.world.level.block.DispenserBlock; @@ -51,6 +52,7 @@ public final class AntarchyFabricEvents { }); DispenserBlock.registerBehavior(AntarchyFabricItems.SQUIDZOOKA.get(), new SquidzookaDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyFabricItems.RPO_LAUNCHER.get(), new RpoLauncherDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyFabricItems.WATER_CANNON.get(), new WaterCannonDispenseBehavior()); ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java index 860a545b..61b2ff3b 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java @@ -99,6 +99,8 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricEntities.CLOUD_SHARK.get(), CloudSharkRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN.get(), KrakenRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN_PART.get(), MultipartPartRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.TENTACLE.get(), com.craisinlord.antarchy.content.client.renderer.TentacleRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.KRAKENS_GRASP_TRIDENT.get(), ThrownItemRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), MissileSquidRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), OctopusBombRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE.get(), NightmareRenderer::new); @@ -111,6 +113,7 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricEntities.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.LUCID_BOLT.get(), LucidBoltRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.KRAKENS_GRASP_TRIDENT.get(), ThrownItemRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.HUSH_PROJECTILE.get(), HushProjectileRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.BRUTALFLY_ORB.get(), BrutalflyOrbRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.UPWARD_FALLING_BLOCK.get(), UpwardFallingBlockRenderer::new); @@ -249,6 +252,7 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PINK_MILKWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CAMELLIA.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIDER_LILY.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.GIANT_LILY_PAD.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.HUSHWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CORNEA_STALK.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CORN_CROP.get(), RenderType.cutout()); @@ -257,6 +261,12 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL_FAN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DEAD_STAR_CORAL.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DEAD_STAR_CORAL_FAN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DEAD_STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LARGE_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CrossbowArmPoseMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CrossbowArmPoseMixin.java index 2c3664a7..573165a4 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CrossbowArmPoseMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CrossbowArmPoseMixin.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.fabric.mixin.client; import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.RpoLauncherItem; import com.craisinlord.antarchy.content.item.SizeRayItem; import com.craisinlord.antarchy.content.item.SquidzookaItem; import com.craisinlord.antarchy.content.item.WaterCannonItem; @@ -25,7 +26,7 @@ public class CrossbowArmPoseMixin { ItemStack stack = player.getItemInHand(hand); Item item = stack.getItem(); - if (item instanceof GravityGunItem || item instanceof SquidzookaItem || item instanceof WaterCannonItem) { + if (item instanceof GravityGunItem || item instanceof SquidzookaItem || item instanceof RpoLauncherItem || item instanceof WaterCannonItem) { cir.setReturnValue(HumanoidModel.ArmPose.CROSSBOW_HOLD); } else if (item instanceof SizeRayItem) { if (player.isUsingItem() && player.getUsedItemHand() == hand) { diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java index 9670f0b2..e241c595 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java @@ -351,6 +351,10 @@ public final class AntarchyFabricBlocks { () -> new com.craisinlord.antarchy.content.block.SpiderLilyBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POPPY))); + public static final DeferredBlock GIANT_LILY_PAD = BLOCKS.register("giant_lily_pad", + () -> new GiantLilyPadBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.LILY_PAD))); + + public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", () -> new net.minecraft.world.level.block.StandingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); @@ -937,6 +941,38 @@ public final class AntarchyFabricBlocks { () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE_SLAB))); + public static final DeferredBlock DEAD_STAR_CORAL_BLOCK = BLOCKS.register("dead_star_coral_block", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_BLOCK))); + + + public static final DeferredBlock DEAD_STAR_CORAL = BLOCKS.register("dead_star_coral", + () -> new net.minecraft.world.level.block.BaseCoralPlantBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL))); + + + public static final DeferredBlock DEAD_STAR_CORAL_FAN = BLOCKS.register("dead_star_coral_fan", + () -> new net.minecraft.world.level.block.BaseCoralFanBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_FAN))); + + + public static final DeferredBlock DEAD_STAR_CORAL_WALL_FAN = BLOCKS.register("dead_star_coral_wall_fan", + () -> new net.minecraft.world.level.block.BaseCoralWallFanBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_WALL_FAN))); + + + public static final DeferredBlock STAR_CORAL_BLOCK = BLOCKS.register("star_coral_block", + () -> new StarCoralBlock(DEAD_STAR_CORAL_BLOCK.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_BLOCK).lightLevel(state -> 8))); + + + public static final DeferredBlock STAR_CORAL = BLOCKS.register("star_coral", + () -> new StarCoralPlantBlock(DEAD_STAR_CORAL.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL).lightLevel(state -> 8))); + + + public static final DeferredBlock STAR_CORAL_FAN = BLOCKS.register("star_coral_fan", + () -> new StarCoralFanBlock(DEAD_STAR_CORAL_FAN.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_FAN).lightLevel(state -> 8))); + + + public static final DeferredBlock STAR_CORAL_WALL_FAN = BLOCKS.register("star_coral_wall_fan", + () -> new StarCoralWallFanBlock(DEAD_STAR_CORAL_WALL_FAN.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_WALL_FAN).lightLevel(state -> 8))); + + public static final DeferredHolder, BlockEntityType> ANT_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("ant_nest", () -> BlockEntityType.Builder.of( AntNestBlockEntity::new, diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java index 2b01f8c3..f1f948e8 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java @@ -83,6 +83,8 @@ import com.craisinlord.antarchy.content.entity.WaterBombEntity; import com.craisinlord.antarchy.content.item.PrimordialArmorItem; import com.craisinlord.antarchy.content.item.WaterCannonItem; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.kraken.KrakensGraspThrownTrident; +import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.entity.MolevoreEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; @@ -504,6 +506,19 @@ public final class AntarchyFabricEntities { .updateInterval(1) .build("lucid_bolt")); + public static final DeferredHolder, EntityType> KRAKENS_GRASP_TRIDENT = ENTITY_TYPES.register("krakens_grasp_trident", + () -> EntityType.Builder.of(KrakensGraspThrownTrident::new, MobCategory.MISC) + .sized(0.5F, 0.5F) + .clientTrackingRange(8) + .updateInterval(1) + .build("krakens_grasp_trident")); + + public static final DeferredHolder, EntityType> TENTACLE = ENTITY_TYPES.register("tentacle", + () -> EntityType.Builder.of(TentacleEntity::new, MobCategory.MISC) + .sized(1.2F, 4.5F) + .clientTrackingRange(10) + .build("tentacle")); + public static final DeferredHolder, EntityType> SCORPION = ENTITY_TYPES.register("scorpion", () -> EntityType.Builder.of(ScorpionEntity::new, MobCategory.MONSTER) diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java index 44d49620..1c82accb 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java @@ -83,6 +83,7 @@ import com.craisinlord.antarchy.content.entity.WaterBombEntity; import com.craisinlord.antarchy.content.item.PrimordialArmorItem; import com.craisinlord.antarchy.content.item.WaterCannonItem; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.entity.MolevoreEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; @@ -292,6 +293,7 @@ public final class AntarchyFabricEntityAttributes { FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.KRAKEN.get(), KrakenEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.TENTACLE.get(), TentacleEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.NIGHTMARE.get(), NightmareEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.BED_BUG.get(), BedBugEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.WASP.get(), WaspEntity.createAttributes().build()); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java index 73ff588b..a7e9409d 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java @@ -97,6 +97,7 @@ import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; import com.craisinlord.antarchy.content.item.BattleAxeItem; import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.KrakensGraspItem; import com.craisinlord.antarchy.content.item.AntimetalBlockItem; import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem; import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem; @@ -119,6 +120,7 @@ import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; import com.craisinlord.antarchy.content.item.SizeRayItem; import com.craisinlord.antarchy.content.item.SquidzookaItem; +import com.craisinlord.antarchy.content.item.RpoLauncherItem; import com.craisinlord.antarchy.content.item.SimpleToolTier; import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem; import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem; @@ -215,6 +217,7 @@ import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.item.PlaceOnWaterBlockItem; import net.minecraft.world.item.Rarity; import net.minecraft.world.item.StandingAndWallBlockItem; import net.minecraft.world.food.FoodProperties; @@ -398,6 +401,10 @@ public final class AntarchyFabricItems { public static final DeferredItem SPIDER_LILY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.SPIDER_LILY); + public static final DeferredItem GIANT_LILY_PAD_ITEM = ITEMS.register("giant_lily_pad", + () -> new PlaceOnWaterBlockItem(AntarchyFabricBlocks.GIANT_LILY_PAD.get(), new Item.Properties())); + + public static final DeferredItem OURANWOOD_SIGN_ITEM = ITEMS.register("ouranwood_sign", () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyFabricBlocks.OURANWOOD_SIGN.get(), AntarchyFabricBlocks.OURANWOOD_WALL_SIGN.get())); @@ -580,6 +587,24 @@ public final class AntarchyFabricItems { public static final DeferredItem CUT_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_DREAM_SANDSTONE_SLAB); + public static final DeferredItem DEAD_STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEAD_STAR_CORAL_BLOCK); + + + public static final DeferredItem DEAD_STAR_CORAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEAD_STAR_CORAL); + + + public static final DeferredItem DEAD_STAR_CORAL_FAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEAD_STAR_CORAL_FAN); + + + public static final DeferredItem STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STAR_CORAL_BLOCK); + + + public static final DeferredItem STAR_CORAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STAR_CORAL); + + + public static final DeferredItem STAR_CORAL_FAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STAR_CORAL_FAN); + + public static final DeferredItem DUCT_TAPE_ITEM = ITEMS.register("duct_tape", () -> new DuctTapeBlockItem(AntarchyFabricBlocks.DUCT_TAPE.get(), new Item.Properties().stacksTo(1))); @@ -1221,6 +1246,9 @@ public final class AntarchyFabricItems { public static final DeferredItem SQUIDZOOKA = ITEMS.register("squidzooka", () -> new SquidzookaItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); + public static final DeferredItem RPO_LAUNCHER = ITEMS.register("rpo_launcher", + () -> new RpoLauncherItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); + public static final DeferredItem BATTLE_AXE = ITEMS.register("battle_axe", () -> new BattleAxeItem( @@ -1266,6 +1294,20 @@ public final class AntarchyFabricItems { .fireResistant() )); + public static final DeferredItem KRAKEN_TENTACLE = ITEMS.registerSimpleItem( + "kraken_tentacle", + new Item.Properties().rarity(Rarity.RARE) + ); + + public static final DeferredItem KRAKENS_GRASP = ITEMS.register("krakens_grasp", + () -> new KrakensGraspItem( + new Item.Properties() + .stacksTo(1) + .durability(250) + .rarity(Rarity.EPIC) + .fireResistant() + )); + public static final DeferredItem EASTER_BUNNY_SPAWN_EGG = ITEMS.register("easter_bunny_spawn_egg", diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java index 733835db..c6b3bf88 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -689,6 +689,10 @@ public final class AntarchyFabricMisc { () -> new CornPatchFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.ocean.StarCoralPatchFeature> STAR_CORAL_PATCH = FEATURES.register("star_coral_patch", + () -> new com.craisinlord.antarchy.content.worldgen.ocean.StarCoralPatchFeature(NoneFeatureConfiguration.CODEC)); + + public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_BUTTERFLY_FIELDS_FLORA = FEATURES.register("butterfly_fields_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.BUTTERFLY_FIELDS)); diff --git a/fabric/src/main/resources/assets/antarchy/models/item/krakens_grasp.json b/fabric/src/main/resources/assets/antarchy/models/item/krakens_grasp.json new file mode 100644 index 00000000..9a00568c --- /dev/null +++ b/fabric/src/main/resources/assets/antarchy/models/item/krakens_grasp.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/krakens_grasp_held" +} diff --git a/fabric/src/main/resources/assets/antarchy/models/item/rpo_launcher.json b/fabric/src/main/resources/assets/antarchy/models/item/rpo_launcher.json new file mode 100644 index 00000000..9d445ed8 --- /dev/null +++ b/fabric/src/main/resources/assets/antarchy/models/item/rpo_launcher.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:item/rpo_launcher_held_geo" +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java index 8f9cd5f8..d8e1c709 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java @@ -259,6 +259,16 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setBigBerthaBasiliskCooldownSeconds(AntarchyToolsConfig.bigBerthaBasiliskCooldownSeconds()); AntarchySettings.setBigBerthaLucidInvertedDurationSeconds(AntarchyToolsConfig.bigBerthaLucidInvertedDurationSeconds()); AntarchySettings.setBigBerthaLucidInvertedDamageBonusPercent(AntarchyToolsConfig.bigBerthaLucidInvertedDamageBonusPercent()); + AntarchySettings.setKrakensGraspAttackDamage(AntarchyToolsConfig.krakensGraspAttackDamage()); + AntarchySettings.setKrakensGraspAttackSpeed(AntarchyToolsConfig.krakensGraspAttackSpeed()); + AntarchySettings.setKrakensGraspThrownDamage(AntarchyToolsConfig.krakensGraspThrownDamage()); + AntarchySettings.setKrakensGraspLightningDamage(AntarchyToolsConfig.krakensGraspLightningDamage()); + AntarchySettings.setKrakensGraspInnateLoyalty(AntarchyToolsConfig.krakensGraspInnateLoyalty()); + AntarchySettings.setKrakensGraspInnateLoyaltyLevel(AntarchyToolsConfig.krakensGraspInnateLoyaltyLevel()); + AntarchySettings.setKrakensGraspTentacleDurationTicks(AntarchyToolsConfig.krakensGraspTentacleDurationTicks()); + AntarchySettings.setKrakensGraspTentacleDamage(AntarchyToolsConfig.krakensGraspTentacleDamage()); + AntarchySettings.setKrakensGraspTentacleRadius(AntarchyToolsConfig.krakensGraspTentacleRadius()); + AntarchySettings.setKrakensGraspTentacleDamageIntervalTicks(AntarchyToolsConfig.krakensGraspTentacleDamageIntervalTicks()); AntarchySettings.setScorpionWhipBaseDamage(AntarchyToolsConfig.scorpionWhipBaseDamage()); AntarchySettings.setScorpionWhipReachBonus(AntarchyToolsConfig.scorpionWhipReachBonus()); AntarchySettings.setScorpionWhipPoisonDurationTicks(AntarchyToolsConfig.scorpionWhipPoisonDurationTicks()); @@ -292,6 +302,10 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setSquidzookaCooldownSeconds(AntarchyToolsConfig.squidzookaCooldownSeconds()); AntarchySettings.setSquidzookaLaunchVelocity(AntarchyToolsConfig.squidzookaLaunchVelocity()); + AntarchySettings.setRpoLauncherCooldownSeconds(AntarchyToolsConfig.rpoLauncherCooldownSeconds()); + AntarchySettings.setRpoLauncherLaunchVelocity(AntarchyToolsConfig.rpoLauncherLaunchVelocity()); + AntarchySettings.setRpoLauncherExplosionDamage(AntarchyToolsConfig.rpoLauncherExplosionDamage()); + AntarchySettings.setRpoLauncherExplosionRadius(AntarchyToolsConfig.rpoLauncherExplosionRadius()); AntarchySettings.setSizeChangingRaysEnabled(AntarchyToolsConfig.sizeChangingRaysEnabled()); AntarchySettings.setSizeRayCooldownSeconds(AntarchyToolsConfig.sizeRayCooldownSeconds()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index b854ee91..0a4fee77 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -283,6 +283,7 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.HUSHWEED.get(), () -> AntarchyNeoforgeBlocks.OURANWOOD_SQUIRREL_NEST.get(), () -> AntarchyNeoforgeBlocks.BRUTALFLY_COCOON_SPAWNER.get(), + () -> AntarchyNeoforgeBlocks.GIANT_LILY_PAD.get(), () -> AntarchyNeoforgeBlocks.ANT_NEST_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeBlocks.WASP_NEST_BLOCK_ENTITY.get(), @@ -295,6 +296,10 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeMisc.BLOODGLASS_WARD ); AntarchyObjects.setOctopusBomb(AntarchyNeoforgeEntites.OCTOPUS_BOMB); + AntarchyObjects.setTentacle(AntarchyNeoforgeEntites.TENTACLE); + AntarchyObjects.setKrakensGraspTrident(AntarchyNeoforgeEntites.KRAKENS_GRASP_TRIDENT); + AntarchyObjects.setKrakenTentacle(() -> AntarchyNeoforgeItems.KRAKEN_TENTACLE.get()); + AntarchyObjects.setKrakensGrasp(() -> AntarchyNeoforgeItems.KRAKENS_GRASP.get()); AntarchyObjects.setOuranwoodDeer(AntarchyNeoforgeEntites.OURANWOOD_DEER); AntarchyObjects.setGlimmer(AntarchyNeoforgeEntites.GLIMMER); AntarchyObjects.setSpiritApple(() -> AntarchyNeoforgeItems.SPIRIT_APPLE.get()); @@ -302,6 +307,9 @@ public class AntarchyNeoforge { AntarchyObjects.setPeach(() -> AntarchyNeoforgeItems.PEACH.get()); AntarchyObjects.setCorn(() -> AntarchyNeoforgeItems.CORN.get()); AntarchyObjects.setCornSeeds(() -> AntarchyNeoforgeItems.CORN_SEEDS.get()); + AntarchyObjects.setStarCoralBlock(() -> AntarchyNeoforgeBlocks.STAR_CORAL_BLOCK.get()); + AntarchyObjects.setStarCoral(() -> AntarchyNeoforgeBlocks.STAR_CORAL.get()); + AntarchyObjects.setStarCoralFan(() -> AntarchyNeoforgeBlocks.STAR_CORAL_FAN.get()); AntarchyObjects.setCookedCorndog(() -> AntarchyNeoforgeItems.COOKED_CORNDOG.get()); AntarchyObjects.setGlimmerBottle(() -> AntarchyNeoforgeItems.GLIMMER_BOTTLE.get()); AntarchyObjects.setGlimmerVariantComponent(() -> AntarchyNeoforgeMisc.GLIMMER_VARIANT.get()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java index 2d2cb08f..c8db2817 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java @@ -79,6 +79,16 @@ public final class AntarchyToolsConfig { private static final ModConfigSpec.DoubleValue BIG_BERTHA_ATTACK_DAMAGE; private static final ModConfigSpec.DoubleValue BIG_BERTHA_REACH_BONUS; private static final ModConfigSpec.DoubleValue BIG_BERTHA_ATTACK_SPEED; + private static final ModConfigSpec.DoubleValue KRAKENS_GRASP_ATTACK_DAMAGE; + private static final ModConfigSpec.DoubleValue KRAKENS_GRASP_ATTACK_SPEED; + private static final ModConfigSpec.DoubleValue KRAKENS_GRASP_THROWN_DAMAGE; + private static final ModConfigSpec.DoubleValue KRAKENS_GRASP_LIGHTNING_DAMAGE; + private static final ModConfigSpec.BooleanValue KRAKENS_GRASP_INNATE_LOYALTY; + private static final ModConfigSpec.IntValue KRAKENS_GRASP_INNATE_LOYALTY_LEVEL; + private static final ModConfigSpec.IntValue KRAKENS_GRASP_TENTACLE_DURATION_TICKS; + private static final ModConfigSpec.DoubleValue KRAKENS_GRASP_TENTACLE_DAMAGE; + private static final ModConfigSpec.DoubleValue KRAKENS_GRASP_TENTACLE_RADIUS; + private static final ModConfigSpec.IntValue KRAKENS_GRASP_TENTACLE_DAMAGE_INTERVAL_TICKS; private static final ModConfigSpec.IntValue BIG_BERTHA_BASILISK_PARALYZE_DURATION_TICKS; private static final ModConfigSpec.IntValue BIG_BERTHA_KRAKEN_SLOW_TICKS; private static final ModConfigSpec.DoubleValue BIG_BERTHA_BASILISK_COOLDOWN_SECONDS; @@ -145,6 +155,10 @@ public final class AntarchyToolsConfig { private static final ModConfigSpec.DoubleValue SQUIDZOOKA_COOLDOWN_SECONDS; private static final ModConfigSpec.DoubleValue SQUIDZOOKA_LAUNCH_VELOCITY; + private static final ModConfigSpec.DoubleValue RPO_LAUNCHER_COOLDOWN_SECONDS; + private static final ModConfigSpec.DoubleValue RPO_LAUNCHER_LAUNCH_VELOCITY; + private static final ModConfigSpec.DoubleValue RPO_LAUNCHER_EXPLOSION_DAMAGE; + private static final ModConfigSpec.DoubleValue RPO_LAUNCHER_EXPLOSION_RADIUS; // Size Rays @@ -303,6 +317,19 @@ public final class AntarchyToolsConfig { BIG_BERTHA_LUCID_INVERTED_DAMAGE_BONUS_PERCENT = b.comment("Bonus damage percent from Lucid mode while the wielder is inverted.") .defineInRange("lucidModeInvertedDamageBonusPercent", 25.0D, 0.0D, 1000.0D); b.pop(); + b.push("krakensGrasp"); + KRAKENS_GRASP_ATTACK_DAMAGE = b.comment("Melee attack damage of Kraken's Grasp.") .defineInRange("attackDamage", 16.0D, 0.0D, 4096.0D); + KRAKENS_GRASP_ATTACK_SPEED = b.comment("Attack speed of Kraken's Grasp.") .defineInRange("attackSpeed", -2.9D, -10.0D, 10.0D); + KRAKENS_GRASP_THROWN_DAMAGE = b.comment("Damage dealt when the thrown trident hits an entity.") .defineInRange("thrownDamage", 16.0D, 0.0D, 4096.0D); + KRAKENS_GRASP_LIGHTNING_DAMAGE = b.comment("Bonus damage from the lightning strike on every hit.") .defineInRange("lightningDamage", 6.0D, 0.0D, 4096.0D); + KRAKENS_GRASP_INNATE_LOYALTY = b.comment("Whether Kraken's Grasp automatically returns to its thrower like an enchanted Loyalty trident.").define("innateLoyalty", true); + KRAKENS_GRASP_INNATE_LOYALTY_LEVEL = b.comment("Effective Loyalty level used for the innate return, from 1 to 3.") .defineInRange("innateLoyaltyLevel", 3, 1, 3); + KRAKENS_GRASP_TENTACLE_DURATION_TICKS = b.comment("How long a summoned tentacle lasts, in ticks.") .defineInRange("tentacleDurationTicks", 100, 1, 72000); + KRAKENS_GRASP_TENTACLE_DAMAGE = b.comment("Damage a tentacle deals per damage interval to nearby entities.") .defineInRange("tentacleDamage", 3.0D, 0.0D, 4096.0D); + KRAKENS_GRASP_TENTACLE_RADIUS = b.comment("Radius in blocks around a tentacle that it can grab and damage.") .defineInRange("tentacleRadius", 3.0D, 0.0D, 32.0D); + KRAKENS_GRASP_TENTACLE_DAMAGE_INTERVAL_TICKS = b.comment("How often, in ticks, a tentacle damages nearby entities.") .defineInRange("tentacleDamageIntervalTicks", 20, 1, 2000); + b.pop(); + b.push("scorpionWhip"); SCORPION_WHIP_BASE_DAMAGE = b.comment("Base lash damage of the Scorpion Stinger Whip.").defineInRange("baseDamage", 10.0D, 0.0D, 4096.0D); SCORPION_WHIP_REACH_BONUS = b.comment("Extra entity interaction range in blocks while held in main hand.").defineInRange("reachBonus", 5.0D, 0.0D, 32.0D); @@ -393,6 +420,13 @@ public final class AntarchyToolsConfig { SQUIDZOOKA_LAUNCH_VELOCITY = b.comment("Initial launch velocity applied to the Missile Squid.") .defineInRange("launchVelocity", 2.1D, 0.1D, 20.0D); b.pop(); + b.push("rpoLauncher"); + RPO_LAUNCHER_COOLDOWN_SECONDS = b.comment("Cooldown in seconds after firing. Set to 0 to disable.").defineInRange("cooldownSeconds", 1.0D, 0.0D, 3600.0D); + RPO_LAUNCHER_LAUNCH_VELOCITY = b.comment("Initial launch velocity applied to the Octopus Bomb.") .defineInRange("launchVelocity", 2.1D, 0.1D, 20.0D); + RPO_LAUNCHER_EXPLOSION_DAMAGE = b.comment("Max damage dealt at the center of the ink explosion.") .defineInRange("explosionDamage", 14.0D, 0.0D, 4096.0D); + RPO_LAUNCHER_EXPLOSION_RADIUS = b.comment("Radius in blocks of the ink explosion.") .defineInRange("explosionRadius", 4.0D, 0.5D, 32.0D); + b.pop(); + // Size Rays @@ -543,6 +577,17 @@ public final class AntarchyToolsConfig { static double bigBerthaBasiliskCooldownSeconds() { return BIG_BERTHA_BASILISK_COOLDOWN_SECONDS.get(); } static double bigBerthaLucidInvertedDurationSeconds() { return BIG_BERTHA_LUCID_INVERTED_DURATION_SECONDS.get(); } static double bigBerthaLucidInvertedDamageBonusPercent(){ return BIG_BERTHA_LUCID_INVERTED_DAMAGE_BONUS_PERCENT.get(); } + + static double krakensGraspAttackDamage() { return KRAKENS_GRASP_ATTACK_DAMAGE.get(); } + static double krakensGraspAttackSpeed() { return KRAKENS_GRASP_ATTACK_SPEED.get(); } + static double krakensGraspThrownDamage() { return KRAKENS_GRASP_THROWN_DAMAGE.get(); } + static double krakensGraspLightningDamage() { return KRAKENS_GRASP_LIGHTNING_DAMAGE.get(); } + static boolean krakensGraspInnateLoyalty() { return KRAKENS_GRASP_INNATE_LOYALTY.get(); } + static int krakensGraspInnateLoyaltyLevel() { return KRAKENS_GRASP_INNATE_LOYALTY_LEVEL.get(); } + static int krakensGraspTentacleDurationTicks() { return KRAKENS_GRASP_TENTACLE_DURATION_TICKS.get(); } + static double krakensGraspTentacleDamage() { return KRAKENS_GRASP_TENTACLE_DAMAGE.get(); } + static double krakensGraspTentacleRadius() { return KRAKENS_GRASP_TENTACLE_RADIUS.get(); } + static int krakensGraspTentacleDamageIntervalTicks() { return KRAKENS_GRASP_TENTACLE_DAMAGE_INTERVAL_TICKS.get(); } static double scorpionWhipBaseDamage() { return SCORPION_WHIP_BASE_DAMAGE.get(); } static double scorpionWhipReachBonus() { return SCORPION_WHIP_REACH_BONUS.get(); } static int scorpionWhipPoisonDurationTicks() { return SCORPION_WHIP_POISON_DURATION_TICKS.get(); } @@ -592,6 +637,10 @@ public final class AntarchyToolsConfig { static double squidzookaCooldownSeconds() { return SQUIDZOOKA_COOLDOWN_SECONDS.get(); } static double squidzookaLaunchVelocity() { return SQUIDZOOKA_LAUNCH_VELOCITY.get(); } + static double rpoLauncherCooldownSeconds() { return RPO_LAUNCHER_COOLDOWN_SECONDS.get(); } + static double rpoLauncherLaunchVelocity() { return RPO_LAUNCHER_LAUNCH_VELOCITY.get(); } + static double rpoLauncherExplosionDamage() { return RPO_LAUNCHER_EXPLOSION_DAMAGE.get(); } + static double rpoLauncherExplosionRadius() { return RPO_LAUNCHER_EXPLOSION_RADIUS.get(); } static boolean sizeChangingRaysEnabled() { return SIZE_CHANGING_RAYS_ENABLED.get(); } static double sizeRayCooldownSeconds() { return SIZE_RAY_COOLDOWN_SECONDS.get(); } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 51617eae..63396b67 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -110,6 +110,8 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, DR_TRAYAURUS_TEXTURE)); event.registerEntityRenderer(AntarchyNeoforgeEntites.CLOUD_SHARK.get(), context -> withParalyzedGeoLayer(new CloudSharkRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.KRAKEN.get(), context -> withParalyzedGeoLayer(new KrakenRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.TENTACLE.get(), com.craisinlord.antarchy.content.client.renderer.TentacleRenderer::new); + event.registerEntityRenderer(AntarchyNeoforgeEntites.KRAKENS_GRASP_TRIDENT.get(), ThrownItemRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), context -> withParalyzedGeoLayer(new MissileSquidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.OCTOPUS_BOMB.get(), context -> withParalyzedGeoLayer(new OctopusBombRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE.get(), context -> withParalyzedGeoLayer(new NightmareRenderer(context))); @@ -122,6 +124,7 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID_BOLT.get(), LucidBoltRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new); + event.registerEntityRenderer(AntarchyNeoforgeEntites.KRAKENS_GRASP_TRIDENT.get(), ThrownItemRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.HUSH_PROJECTILE.get(), HushProjectileRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.BRUTALFLY_ORB.get(), BrutalflyOrbRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.UPWARD_FALLING_BLOCK.get(), com.craisinlord.antarchy.content.client.renderer.UpwardFallingBlockRenderer::new); @@ -469,6 +472,7 @@ public final class AntarchyNeoForgeClient { registerGeoItemExtensionSizeRay(event, AntarchyNeoforgeItems.GROWTH_RAY.get()); registerGeoItemExtension(event, AntarchyNeoforgeItems.GRAVITY_GUN.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD); registerGeoItemExtension(event, AntarchyNeoforgeItems.SQUIDZOOKA.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD); + registerGeoItemExtension(event, AntarchyNeoforgeItems.RPO_LAUNCHER.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD); registerGeoItemExtension(event, AntarchyNeoforgeItems.WATER_CANNON.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD); registerGeoItemExtension(event, AntarchyNeoforgeItems.BATTLE_AXE.get()); registerGeoItemExtension(event, AntarchyNeoforgeItems.BIG_BERTHA.get()); @@ -493,6 +497,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CAMELLIA.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.SPIDER_LILY.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.GIANT_LILY_PAD.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.HUSHWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CORNEA_STALK.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CORN_CROP.get(), RenderType.cutout()); @@ -500,6 +505,12 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.STAR_CORAL.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.STAR_CORAL_FAN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL_FAN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL_WALL_FAN.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.LARGE_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index 3dc0fd81..4032a874 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -1153,6 +1153,7 @@ public final class AntarchyNeoForgeEvents { DispenserBlock.registerBehavior(AntarchyNeoforgeItems.SHRINK_RAY.get(), new com.craisinlord.antarchy.content.SizeRayDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyNeoforgeItems.GROWTH_RAY.get(), new com.craisinlord.antarchy.content.SizeRayDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyNeoforgeItems.SQUIDZOOKA.get(), new com.craisinlord.antarchy.content.SquidzookaDispenseBehavior()); + DispenserBlock.registerBehavior(AntarchyNeoforgeItems.RPO_LAUNCHER.get(), new com.craisinlord.antarchy.content.RpoLauncherDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyNeoforgeItems.WATER_CANNON.get(), new com.craisinlord.antarchy.content.WaterCannonDispenseBehavior()); LucidEyeProjectileEntity.defaultItemSupplier = () -> AntarchyNeoforgeItems.LUCID_PEARL.get(); LucidEntity.invertedEffectSupplier = () -> AntarchyNeoforgeMisc.INVERTED; diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index 0fc8d5e2..1fbfc3c0 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -89,6 +89,8 @@ public final class AntarchyNeoforgeBlocks { () -> new com.craisinlord.antarchy.content.block.CamelliaBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); public static final DeferredBlock SPIDER_LILY = BLOCKS.register("spider_lily", () -> new com.craisinlord.antarchy.content.block.SpiderLilyBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POPPY))); + public static final DeferredBlock GIANT_LILY_PAD = BLOCKS.register("giant_lily_pad", + () -> new GiantLilyPadBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.LILY_PAD))); public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", () -> new StandingSignBlock(AntarchyWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); public static final DeferredBlock OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign", @@ -399,6 +401,22 @@ public final class AntarchyNeoforgeBlocks { () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE_SLAB))); public static final DeferredBlock CUT_DREAM_SANDSTONE_SLAB = BLOCKS.register("cut_dream_sandstone_slab", () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE_SLAB))); + public static final DeferredBlock DEAD_STAR_CORAL_BLOCK = BLOCKS.register("dead_star_coral_block", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_BLOCK))); + public static final DeferredBlock DEAD_STAR_CORAL = BLOCKS.register("dead_star_coral", + () -> new net.minecraft.world.level.block.BaseCoralPlantBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL))); + public static final DeferredBlock DEAD_STAR_CORAL_FAN = BLOCKS.register("dead_star_coral_fan", + () -> new net.minecraft.world.level.block.BaseCoralFanBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_FAN))); + public static final DeferredBlock DEAD_STAR_CORAL_WALL_FAN = BLOCKS.register("dead_star_coral_wall_fan", + () -> new net.minecraft.world.level.block.BaseCoralWallFanBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_WALL_FAN))); + public static final DeferredBlock STAR_CORAL_BLOCK = BLOCKS.register("star_coral_block", + () -> new com.craisinlord.antarchy.content.block.StarCoralBlock(DEAD_STAR_CORAL_BLOCK.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_BLOCK).lightLevel(state -> 8))); + public static final DeferredBlock STAR_CORAL = BLOCKS.register("star_coral", + () -> new com.craisinlord.antarchy.content.block.StarCoralPlantBlock(DEAD_STAR_CORAL.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL).lightLevel(state -> 8))); + public static final DeferredBlock STAR_CORAL_FAN = BLOCKS.register("star_coral_fan", + () -> new com.craisinlord.antarchy.content.block.StarCoralFanBlock(DEAD_STAR_CORAL_FAN.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_FAN).lightLevel(state -> 8))); + public static final DeferredBlock STAR_CORAL_WALL_FAN = BLOCKS.register("star_coral_wall_fan", + () -> new com.craisinlord.antarchy.content.block.StarCoralWallFanBlock(DEAD_STAR_CORAL_WALL_FAN.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.TUBE_CORAL_WALL_FAN).lightLevel(state -> 8))); // Block entity types public static final DeferredHolder, BlockEntityType> ANT_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("ant_nest", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index 70dad670..b3175bfb 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -100,6 +100,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.PINK_MILKWEED_ITEM.get()); event.accept(AntarchyNeoforgeItems.CAMELLIA_ITEM.get()); event.accept(AntarchyNeoforgeItems.SPIDER_LILY_ITEM.get()); + event.accept(AntarchyNeoforgeItems.GIANT_LILY_PAD_ITEM.get()); event.accept(AntarchyNeoforgeItems.HUSHWEED_ITEM.get()); event.accept(AntarchyNeoforgeItems.INFESTED_ROOTED_DIRT_ITEM.get()); event.accept(AntarchyNeoforgeItems.INFESTED_COARSE_DIRT_ITEM.get()); @@ -116,6 +117,12 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.LUMEN_FROGLIGHT_ITEM.get()); event.accept(AntarchyNeoforgeItems.ROSEATE_FROGLIGHT_ITEM.get()); event.accept(AntarchyNeoforgeItems.CORN_SEEDS.get()); + event.accept(AntarchyNeoforgeItems.STAR_CORAL_ITEM.get()); + event.accept(AntarchyNeoforgeItems.STAR_CORAL_FAN_ITEM.get()); + event.accept(AntarchyNeoforgeItems.STAR_CORAL_BLOCK_ITEM.get()); + event.accept(AntarchyNeoforgeItems.DEAD_STAR_CORAL_ITEM.get()); + event.accept(AntarchyNeoforgeItems.DEAD_STAR_CORAL_FAN_ITEM.get()); + event.accept(AntarchyNeoforgeItems.DEAD_STAR_CORAL_BLOCK_ITEM.get()); } if (event.getTabKey() == CreativeModeTabs.TOOLS_AND_UTILITIES) { @@ -163,6 +170,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.VORTEX_EYE.get()); event.accept(AntarchyNeoforgeItems.EMPEROR_SCORPION_STINGER.get()); event.accept(AntarchyNeoforgeItems.KRAKEN_TOOTH.get()); + event.accept(AntarchyNeoforgeItems.KRAKEN_TENTACLE.get()); event.accept(AntarchyNeoforgeItems.JUMPY_BUG_LEG.get()); event.accept(AntarchyNeoforgeItems.CORNEA_EAR.get()); event.accept(AntarchyNeoforgeItems.CORN.get()); @@ -316,6 +324,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(UltimateGearHelper.createUltimateBowStack(AntarchyNeoforgeItems.ULTIMATE_BOW.get(), event.getParameters().holders())); event.accept(AntarchyNeoforgeItems.ULTIMATE_CROSSBOW.get()); event.accept(AntarchyNeoforgeItems.SQUIDZOOKA.get()); + event.accept(AntarchyNeoforgeItems.RPO_LAUNCHER.get()); + event.accept(AntarchyNeoforgeItems.KRAKENS_GRASP.get()); event.accept(AntarchyNeoforgeItems.SHRINK_RAY.get()); event.accept(AntarchyNeoforgeItems.GROWTH_RAY.get()); event.accept(AntarchyNeoforgeItems.GRAVITY_GUN.get()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 7630daa7..2d79e54e 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -47,6 +47,8 @@ import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.kraken.KrakensGraspThrownTrident; +import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; @@ -250,6 +252,20 @@ public final class AntarchyNeoforgeEntites { .clientTrackingRange(8) .updateInterval(1) .build("lucid_bolt")); + + public static final DeferredHolder, EntityType> KRAKENS_GRASP_TRIDENT = ENTITY_TYPES.register("krakens_grasp_trident", + () -> EntityType.Builder.of(KrakensGraspThrownTrident::new, MobCategory.MISC) + .sized(0.5F, 0.5F) + .clientTrackingRange(8) + .updateInterval(1) + .build("krakens_grasp_trident")); + + public static final DeferredHolder, EntityType> TENTACLE = ENTITY_TYPES.register("tentacle", + () -> EntityType.Builder.of(TentacleEntity::new, MobCategory.MISC) + .sized(1.2F, 4.5F) + .clientTrackingRange(10) + .build("tentacle")); + public static final DeferredHolder, EntityType> SCORPION = ENTITY_TYPES.register("scorpion", () -> EntityType.Builder.of(ScorpionEntity::new, MobCategory.MONSTER) .sized(1.5F, 1.0F) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java index a56d950b..1e84116e 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java @@ -9,6 +9,7 @@ import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.kraken.TentacleEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; @@ -51,6 +52,7 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.KRAKEN.get(), KrakenEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.TENTACLE.get(), TentacleEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.NIGHTMARE.get(), NightmareEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.BED_BUG.get(), BedBugEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.WASP.get(), WaspEntity.createAttributes().build()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index bdee968a..095af866 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -29,6 +29,7 @@ import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.*; +import net.minecraft.world.item.PlaceOnWaterBlockItem; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.block.entity.BlockEntityType; import net.neoforged.bus.api.IEventBus; @@ -178,6 +179,8 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PINK_MILKWEED); public static final DeferredItem CAMELLIA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CAMELLIA); public static final DeferredItem SPIDER_LILY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SPIDER_LILY); + public static final DeferredItem GIANT_LILY_PAD_ITEM = ITEMS.register("giant_lily_pad", + () -> new PlaceOnWaterBlockItem(AntarchyNeoforgeBlocks.GIANT_LILY_PAD.get(), new Item.Properties())); public static final DeferredItem OURANWOOD_SIGN_ITEM = ITEMS.register("ouranwood_sign", () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyNeoforgeBlocks.OURANWOOD_SIGN.get(), AntarchyNeoforgeBlocks.OURANWOOD_WALL_SIGN.get())); public static final DeferredItem OURANWOOD_HANGING_SIGN_ITEM = ITEMS.register("ouranwood_hanging_sign", @@ -248,6 +251,12 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem SMOOTH_DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SMOOTH_DREAM_SANDSTONE_STAIRS); public static final DeferredItem SMOOTH_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SMOOTH_DREAM_SANDSTONE_SLAB); public static final DeferredItem CUT_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_DREAM_SANDSTONE_SLAB); + public static final DeferredItem DEAD_STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL_BLOCK); + public static final DeferredItem DEAD_STAR_CORAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL); + public static final DeferredItem DEAD_STAR_CORAL_FAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEAD_STAR_CORAL_FAN); + public static final DeferredItem STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STAR_CORAL_BLOCK); + public static final DeferredItem STAR_CORAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STAR_CORAL); + public static final DeferredItem STAR_CORAL_FAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STAR_CORAL_FAN); public static final DeferredItem DUCT_TAPE_ITEM = ITEMS.register("duct_tape", () -> new DuctTapeBlockItem(AntarchyNeoforgeBlocks.DUCT_TAPE.get(), new Item.Properties().stacksTo(1))); public static final DeferredItem INFESTED_ROOTED_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.INFESTED_ROOTED_DIRT); @@ -567,6 +576,8 @@ public final class AntarchyNeoforgeItems { // () -> new MinersDreamItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE))); public static final DeferredItem SQUIDZOOKA = ITEMS.register("squidzooka", () -> new SquidzookaItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); + public static final DeferredItem RPO_LAUNCHER = ITEMS.register("rpo_launcher", + () -> new RpoLauncherItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE))); public static final DeferredItem BATTLE_AXE = ITEMS.register("battle_axe", () -> new BattleAxeItem(Tiers.NETHERITE, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant(), @@ -585,6 +596,13 @@ public final class AntarchyNeoforgeItems { () -> new BigBerthaItem(Tiers.NETHERITE, new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant())); + public static final DeferredItem KRAKEN_TENTACLE = ITEMS.registerSimpleItem("kraken_tentacle", + new Item.Properties().rarity(Rarity.RARE)); + + public static final DeferredItem KRAKENS_GRASP = ITEMS.register("krakens_grasp", + () -> new KrakensGraspItem( + new Item.Properties().stacksTo(1).durability(250).rarity(Rarity.EPIC).fireResistant())); + // Spawn eggs public static final DeferredItem EASTER_BUNNY_SPAWN_EGG = ITEMS.register("easter_bunny_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.EASTER_BUNNY, 0xFFF2B2, 0xFF85B5, new Item.Properties())); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index c43600f6..589a6f01 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -239,6 +239,8 @@ public final class AntarchyNeoforgeMisc { () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FLOWER_FOREST_MILKWEED)); public static final DeferredHolder, CornPatchFeature> CORN_PATCH = FEATURES.register("corn_patch", () -> new CornPatchFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.ocean.StarCoralPatchFeature> STAR_CORAL_PATCH = FEATURES.register("star_coral_patch", + () -> new com.craisinlord.antarchy.content.worldgen.ocean.StarCoralPatchFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_BUTTERFLY_FIELDS_FLORA = FEATURES.register("butterfly_fields_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.BUTTERFLY_FIELDS)); public static final DeferredHolder, ElythiaSurfaceCoverFeature> ELYTHIA_SURFACE_COVER = FEATURES.register("elythia_surface_cover", diff --git a/neoforge/src/main/resources/assets/antarchy/models/item/krakens_grasp.json b/neoforge/src/main/resources/assets/antarchy/models/item/krakens_grasp.json new file mode 100644 index 00000000..5331dc07 --- /dev/null +++ b/neoforge/src/main/resources/assets/antarchy/models/item/krakens_grasp.json @@ -0,0 +1,25 @@ +{ + "loader": "neoforge:separate_transforms", + "gui_light": "front", + "textures": { + "layer0": "antarchy:item/krakens_grasp/krakens_grasp_item" + }, + "base": { + "parent": "antarchy:item/krakens_grasp_held" + }, + "texture_size": [ + 64, + 64 + ], + "perspectives": { + "gui": { + "parent": "antarchy:item/krakens_grasp_gui" + }, + "ground": { + "parent": "antarchy:item/krakens_grasp_gui" + }, + "fixed": { + "parent": "antarchy:item/krakens_grasp_gui" + } + } +} diff --git a/neoforge/src/main/resources/assets/antarchy/models/item/rpo_launcher.json b/neoforge/src/main/resources/assets/antarchy/models/item/rpo_launcher.json new file mode 100644 index 00000000..5d625dfa --- /dev/null +++ b/neoforge/src/main/resources/assets/antarchy/models/item/rpo_launcher.json @@ -0,0 +1,18 @@ +{ + "loader": "neoforge:separate_transforms", + "gui_light": "front", + "base": { + "parent": "antarchy:item/rpo_launcher_held_geo" + }, + "perspectives": { + "gui": { + "parent": "antarchy:item/rpo_launcher_gui" + }, + "ground": { + "parent": "antarchy:item/rpo_launcher_gui" + }, + "fixed": { + "parent": "antarchy:item/rpo_launcher_gui" + } + } +} diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/star_coral_in_oceans.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/star_coral_in_oceans.json new file mode 100644 index 00000000..281f4a35 --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/star_coral_in_oceans.json @@ -0,0 +1,6 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:has_star_coral", + "features": ["antarchy:star_coral_patch"], + "step": "vegetal_decoration" +}