From 0b75b1ab1d446bb70561885b4a917d009ad8595a Mon Sep 17 00:00:00 2001 From: craisinlord Date: Sun, 23 Aug 2026 01:40:03 -0500 Subject: [PATCH] truffalo, hoverboard first drafts, underside music disc --- .../block/PortalGunPortalBaseBlock.java | 76 + .../block/PortalGunPortalMasterBlock.java | 76 + .../content/block/RoyalSaplingBlock.java | 60 + .../content/block/TruffaloLogBlock.java | 52 + .../content/block/TruffaloSaplingBlock.java | 110 + .../content/block/TruffaloTuftBlock.java | 33 + .../PortalGunPortalBaseBlockEntity.java | 148 + .../PortalGunPortalMasterBlockEntity.java | 300 ++ .../client/PortalGunPortalRenderState.java | 75 + .../client/PortalGunRollClientState.java | 108 + .../content/client/model/HoverboardModel.java | 32 + .../client/renderer/HoverboardRenderer.java | 13 + .../renderer/PortalGunPortalRenderer.java | 23 +- .../renderer/PortalGunPortalViewRenderer.java | 410 +++ .../renderer/PortalGunProjectileRenderer.java | 80 + .../content/creative/CreativeTabContents.java | 72 + .../content/entity/HoverboardEntity.java | 243 ++ .../content/entity/RoyalBoatEntity.java | 21 + .../content/entity/RoyalChestBoatEntity.java | 22 + .../content/entity/TruffaloBoatEntity.java | 21 + .../entity/TruffaloChestBoatEntity.java | 22 + .../antarchy/content/item/HoverboardItem.java | 74 + .../antarchy/content/item/PortalGunItem.java | 318 +- .../content/item/RoyalBoatOnlyItem.java | 31 + .../content/item/RoyalChestBoatItem.java | 31 + .../content/item/TruffaloBoatOnlyItem.java | 31 + .../content/item/TruffaloChestBoatItem.java | 31 + .../antarchy/content/item/WormHookItem.java | 1 + .../content/item/WormHookTetherManager.java | 62 +- .../portalgun/PortalGunCollisionHelper.java | 203 ++ .../content/portalgun/PortalGunPlacement.java | 50 + .../portalgun/PortalGunPortalEntity.java | 416 ++- .../portalgun/PortalGunProjectileEntity.java | 166 ++ .../content/portalgun/PortalGunSavedData.java | 15 + .../portalgun/PortalGunTransformUtil.java | 93 + .../portalgun/PortalGunWorldPortalShape.java | 165 ++ .../truffalo/TruffaloTreeConfiguration.java | 17 + .../truffalo/TruffaloTreeFeature.java | 88 + .../truffalo/TruffaloTreeGrowers.java | 18 + .../mixins/AbstractArrowAccessor.java | 17 + .../mixins/BlockEntityTypeSignMixin.java | 88 +- .../mixins/LivingEntityJumpingAccessor.java | 11 + .../mixins/PortalGunEntityCollisionMixin.java | 33 + .../mixins/PortalGunEntityInWallMixin.java | 25 + ...lockEntityRenderDispatcherPortalMixin.java | 39 + .../EntityRenderDispatcherPortalMixin.java | 34 + .../client/HoverboardRiderPoseMixin.java | 48 + .../mixins/client/LocalPlayerPortalMixin.java | 30 + .../ScreenEffectRendererPortalMixin.java | 22 + .../mixins/gravity/EntityMoveMixin.java | 7 +- .../gravity/client/CameraGravityMixin.java | 4 + .../resources/antarchy-common.mixins.json | 9 + .../animations/hoverboard.animation.json | 361 +++ .../portal_gun_portal.animation.json | 15 +- .../blockstates/black_truffalo_tuft.json | 7 + .../blockstates/blue_truffalo_tuft.json | 7 + .../blockstates/brown_truffalo_tuft.json | 7 + .../blockstates/cyan_truffalo_tuft.json | 7 + .../blockstates/gray_truffalo_tuft.json | 7 + .../blockstates/green_truffalo_tuft.json | 7 + .../blockstates/light_blue_truffalo_tuft.json | 7 + .../blockstates/light_gray_truffalo_tuft.json | 7 + .../blockstates/lime_truffalo_tuft.json | 7 + .../blockstates/magenta_truffalo_tuft.json | 7 + .../blockstates/orange_truffalo_tuft.json | 7 + .../blockstates/pink_truffalo_tuft.json | 7 + .../blockstates/potted_royal_sapling.json | 7 + .../blockstates/potted_truffalo_sapling.json | 7 + .../blockstates/purple_truffalo_tuft.json | 7 + .../blockstates/red_truffalo_tuft.json | 7 + .../antarchy/blockstates/royal_button.json | 119 + .../antarchy/blockstates/royal_door.json | 125 + .../antarchy/blockstates/royal_fence.json | 49 + .../blockstates/royal_fence_gate.json | 81 + .../blockstates/royal_flowering_leaves.json | 5 + .../blockstates/royal_hanging_sign.json | 7 + .../antarchy/blockstates/royal_leaves.json | 5 + .../antarchy/blockstates/royal_log.json | 16 + .../antarchy/blockstates/royal_planks.json | 7 + .../blockstates/royal_pressure_plate.json | 10 + .../antarchy/blockstates/royal_sapling.json | 7 + .../antarchy/blockstates/royal_sign.json | 7 + .../antarchy/blockstates/royal_slab.json | 13 + .../antarchy/blockstates/royal_stairs.json | 210 ++ .../antarchy/blockstates/royal_trapdoor.json | 70 + .../blockstates/royal_wall_hanging_sign.json | 7 + .../antarchy/blockstates/royal_wall_sign.json | 7 + .../antarchy/blockstates/royal_wood.json | 16 + .../blockstates/stripped_royal_log.json | 16 + .../blockstates/stripped_royal_wood.json | 7 + .../blockstates/stripped_truffalo_log.json | 14 + .../blockstates/stripped_truffalo_wood.json | 7 + .../antarchy/blockstates/truffalo_button.json | 119 + .../antarchy/blockstates/truffalo_door.json | 125 + .../antarchy/blockstates/truffalo_fence.json | 49 + .../blockstates/truffalo_fence_gate.json | 81 + .../blockstates/truffalo_hanging_sign.json | 7 + .../antarchy/blockstates/truffalo_log.json | 14 + .../antarchy/blockstates/truffalo_planks.json | 7 + .../blockstates/truffalo_pressure_plate.json | 10 + .../blockstates/truffalo_sapling.json | 7 + .../antarchy/blockstates/truffalo_sign.json | 7 + .../antarchy/blockstates/truffalo_slab.json | 13 + .../antarchy/blockstates/truffalo_stairs.json | 210 ++ .../blockstates/truffalo_trapdoor.json | 70 + .../truffalo_wall_hanging_sign.json | 7 + .../blockstates/truffalo_wall_sign.json | 7 + .../antarchy/blockstates/truffalo_wood.json | 16 + .../blockstates/white_truffalo_tuft.json | 7 + .../blockstates/yellow_truffalo_tuft.json | 7 + .../assets/antarchy/geo/hoverboard.geo.json | 75 + .../resources/assets/antarchy/lang/en_us.json | 81 + .../models/block/magenta_truffalo_tuft.json | 576 ++++ .../models/block/potted_royal_sapling.json | 6 + .../models/block/potted_truffalo_sapling.json | 6 + .../antarchy/models/block/royal_button.json | 7 + .../models/block/royal_button_inventory.json | 7 + .../models/block/royal_button_pressed.json | 7 + .../models/block/royal_door_bottom_left.json | 8 + .../block/royal_door_bottom_left_open.json | 8 + .../models/block/royal_door_bottom_right.json | 8 + .../block/royal_door_bottom_right_open.json | 8 + .../models/block/royal_door_top_left.json | 8 + .../block/royal_door_top_left_open.json | 8 + .../models/block/royal_door_top_right.json | 8 + .../block/royal_door_top_right_open.json | 8 + .../models/block/royal_fence_gate.json | 7 + .../models/block/royal_fence_gate_open.json | 7 + .../models/block/royal_fence_gate_wall.json | 7 + .../block/royal_fence_gate_wall_open.json | 7 + .../models/block/royal_fence_inventory.json | 7 + .../models/block/royal_fence_post.json | 7 + .../models/block/royal_fence_side.json | 7 + .../models/block/royal_flowering_leaves.json | 7 + .../models/block/royal_hanging_sign.json | 5 + .../antarchy/models/block/royal_leaves.json | 7 + .../antarchy/models/block/royal_log.json | 7 + .../models/block/royal_log_horizontal.json | 7 + .../antarchy/models/block/royal_planks.json | 6 + .../models/block/royal_pressure_plate.json | 7 + .../block/royal_pressure_plate_down.json | 7 + .../antarchy/models/block/royal_sapling.json | 6 + .../antarchy/models/block/royal_sign.json | 5 + .../antarchy/models/block/royal_slab.json | 9 + .../antarchy/models/block/royal_slab_top.json | 9 + .../antarchy/models/block/royal_stairs.json | 9 + .../models/block/royal_stairs_inner.json | 9 + .../models/block/royal_stairs_outer.json | 9 + .../models/block/royal_trapdoor_bottom.json | 7 + .../models/block/royal_trapdoor_open.json | 7 + .../models/block/royal_trapdoor_top.json | 7 + .../models/block/royal_wall_hanging_sign.json | 5 + .../models/block/royal_wall_sign.json | 5 + .../antarchy/models/block/royal_wood.json | 7 + .../models/block/stripped_royal_log.json | 7 + .../block/stripped_royal_log_horizontal.json | 7 + .../models/block/stripped_royal_wood.json | 7 + .../models/block/stripped_truffalo_log.json | 22 + .../stripped_truffalo_log_horizontal.json | 22 + .../models/block/stripped_truffalo_wood.json | 7 + .../models/block/truffalo_button.json | 7 + .../block/truffalo_button_inventory.json | 7 + .../models/block/truffalo_button_pressed.json | 7 + .../block/truffalo_door_bottom_left.json | 8 + .../block/truffalo_door_bottom_left_open.json | 8 + .../block/truffalo_door_bottom_right.json | 8 + .../truffalo_door_bottom_right_open.json | 8 + .../models/block/truffalo_door_top_left.json | 8 + .../block/truffalo_door_top_left_open.json | 8 + .../models/block/truffalo_door_top_right.json | 8 + .../block/truffalo_door_top_right_open.json | 8 + .../models/block/truffalo_fence_gate.json | 7 + .../block/truffalo_fence_gate_open.json | 7 + .../block/truffalo_fence_gate_wall.json | 7 + .../block/truffalo_fence_gate_wall_open.json | 7 + .../block/truffalo_fence_inventory.json | 7 + .../models/block/truffalo_fence_post.json | 7 + .../models/block/truffalo_fence_side.json | 7 + .../models/block/truffalo_hanging_sign.json | 5 + .../antarchy/models/block/truffalo_log.json | 22 + .../models/block/truffalo_log_horizontal.json | 22 + .../models/block/truffalo_planks.json | 6 + .../models/block/truffalo_pressure_plate.json | 7 + .../block/truffalo_pressure_plate_down.json | 7 + .../models/block/truffalo_sapling.json | 6 + .../antarchy/models/block/truffalo_sign.json | 5 + .../antarchy/models/block/truffalo_slab.json | 9 + .../models/block/truffalo_slab_top.json | 9 + .../models/block/truffalo_stairs.json | 9 + .../models/block/truffalo_stairs_inner.json | 9 + .../models/block/truffalo_stairs_outer.json | 9 + .../block/truffalo_trapdoor_bottom.json | 7 + .../models/block/truffalo_trapdoor_open.json | 7 + .../models/block/truffalo_trapdoor_top.json | 7 + .../models/block/truffalo_tuft_black.json | 6 + .../models/block/truffalo_tuft_blue.json | 6 + .../models/block/truffalo_tuft_brown.json | 6 + .../models/block/truffalo_tuft_cyan.json | 6 + .../models/block/truffalo_tuft_gray.json | 6 + .../models/block/truffalo_tuft_green.json | 6 + .../block/truffalo_tuft_light_blue.json | 6 + .../block/truffalo_tuft_light_gray.json | 6 + .../models/block/truffalo_tuft_lime.json | 6 + .../models/block/truffalo_tuft_magenta.json | 6 + .../models/block/truffalo_tuft_orange.json | 6 + .../models/block/truffalo_tuft_pink.json | 6 + .../models/block/truffalo_tuft_purple.json | 6 + .../models/block/truffalo_tuft_red.json | 6 + .../models/block/truffalo_tuft_template.json | 2552 +++++++++++++++++ .../models/block/truffalo_tuft_white.json | 6 + .../models/block/truffalo_tuft_yellow.json | 6 + .../block/truffalo_wall_hanging_sign.json | 5 + .../models/block/truffalo_wall_sign.json | 5 + .../antarchy/models/block/truffalo_wood.json | 7 + .../models/item/black_truffalo_tuft.json | 3 + .../models/item/blue_truffalo_tuft.json | 3 + .../models/item/brown_truffalo_tuft.json | 3 + .../models/item/cyan_truffalo_tuft.json | 3 + .../models/item/gray_truffalo_tuft.json | 3 + .../models/item/green_truffalo_tuft.json | 3 + .../antarchy/models/item/hoverboard.json | 6 + .../models/item/hoverboard_black.json | 6 + .../antarchy/models/item/hoverboard_blue.json | 6 + .../models/item/hoverboard_brown.json | 6 + .../antarchy/models/item/hoverboard_cyan.json | 6 + .../antarchy/models/item/hoverboard_gray.json | 6 + .../models/item/hoverboard_green.json | 6 + .../models/item/hoverboard_light_blue.json | 6 + .../models/item/hoverboard_light_gray.json | 6 + .../antarchy/models/item/hoverboard_lime.json | 6 + .../models/item/hoverboard_magenta.json | 6 + .../models/item/hoverboard_orange.json | 6 + .../antarchy/models/item/hoverboard_pink.json | 6 + .../models/item/hoverboard_purple.json | 6 + .../antarchy/models/item/hoverboard_red.json | 6 + .../models/item/hoverboard_white.json | 6 + .../models/item/hoverboard_yellow.json | 6 + .../models/item/light_blue_truffalo_tuft.json | 3 + .../models/item/light_gray_truffalo_tuft.json | 3 + .../models/item/lime_truffalo_tuft.json | 3 + .../models/item/magenta_truffalo_tuft.json | 3 + .../models/item/music_disc_underside.json | 6 + .../models/item/orange_truffalo_tuft.json | 3 + .../models/item/pink_truffalo_tuft.json | 3 + .../models/item/purple_truffalo_tuft.json | 3 + .../models/item/red_truffalo_tuft.json | 3 + .../antarchy/models/item/royal_boat.json | 7 + .../antarchy/models/item/royal_button.json | 4 + .../models/item/royal_chest_boat.json | 7 + .../antarchy/models/item/royal_door.json | 6 + .../antarchy/models/item/royal_fence.json | 4 + .../models/item/royal_fence_gate.json | 4 + .../models/item/royal_flowering_leaves.json | 3 + .../models/item/royal_hanging_sign.json | 7 + .../antarchy/models/item/royal_leaves.json | 3 + .../antarchy/models/item/royal_log.json | 4 + .../antarchy/models/item/royal_planks.json | 4 + .../models/item/royal_pressure_plate.json | 4 + .../antarchy/models/item/royal_sapling.json | 6 + .../antarchy/models/item/royal_sign.json | 7 + .../antarchy/models/item/royal_slab.json | 4 + .../antarchy/models/item/royal_stairs.json | 4 + .../antarchy/models/item/royal_trapdoor.json | 3 + .../antarchy/models/item/royal_wood.json | 4 + .../models/item/stripped_royal_log.json | 4 + .../models/item/stripped_royal_wood.json | 4 + .../models/item/stripped_truffalo_log.json | 4 + .../models/item/stripped_truffalo_wood.json | 4 + .../antarchy/models/item/truffalo_boat.json | 7 + .../antarchy/models/item/truffalo_button.json | 4 + .../models/item/truffalo_chest_boat.json | 7 + .../antarchy/models/item/truffalo_door.json | 6 + .../antarchy/models/item/truffalo_fence.json | 4 + .../models/item/truffalo_fence_gate.json | 4 + .../models/item/truffalo_hanging_sign.json | 7 + .../antarchy/models/item/truffalo_log.json | 4 + .../antarchy/models/item/truffalo_planks.json | 4 + .../models/item/truffalo_pressure_plate.json | 4 + .../models/item/truffalo_sapling.json | 6 + .../antarchy/models/item/truffalo_sign.json | 7 + .../antarchy/models/item/truffalo_slab.json | 4 + .../antarchy/models/item/truffalo_stairs.json | 4 + .../models/item/truffalo_trapdoor.json | 3 + .../antarchy/models/item/truffalo_wood.json | 4 + .../models/item/white_truffalo_tuft.json | 3 + .../models/item/yellow_truffalo_tuft.json | 3 + .../resources/assets/antarchy/sounds.json | 8 + .../block/truffalo/black_truffalo_tuft.png | Bin 0 -> 377 bytes .../block/truffalo/blue_truffalo_tuft.png | Bin 0 -> 413 bytes .../block/truffalo/brown_truffalo_tuft.png | Bin 0 -> 434 bytes .../block/truffalo/cyan_truffalo_tuft.png | Bin 0 -> 443 bytes .../block/truffalo/gray_truffalo_tuft.png | Bin 0 -> 385 bytes .../block/truffalo/green_truffalo_tuft.png | Bin 0 -> 416 bytes .../truffalo/light_blue_truffalo_tuft.png | Bin 0 -> 411 bytes .../truffalo/light_gray_truffalo_tuft.png | Bin 0 -> 394 bytes .../block/truffalo/lime_truffalo_tuft.png | Bin 0 -> 425 bytes .../block/truffalo/magenta_truffalo_tuft.png | Bin 0 -> 379 bytes .../block/truffalo/orange_truffalo_tuft.png | Bin 0 -> 450 bytes .../block/truffalo/pink_truffalo_tuft.png | Bin 0 -> 442 bytes .../block/truffalo/purple_truffalo_tuft.png | Bin 0 -> 422 bytes .../block/truffalo/red_truffalo_tuft.png | Bin 0 -> 443 bytes .../block/truffalo/truffalo_door_bottom.png | Bin 0 -> 613 bytes .../block/truffalo/truffalo_door_top.png | Bin 0 -> 555 bytes .../textures/block/truffalo/truffalo_log.png | Bin 0 -> 432 bytes .../block/truffalo/truffalo_log_stripped.png | Bin 0 -> 347 bytes .../block/truffalo/truffalo_log_top.png | Bin 0 -> 321 bytes .../block/truffalo/truffalo_planks.png | Bin 0 -> 459 bytes .../block/truffalo/truffalo_sapling.png | Bin 0 -> 376 bytes .../truffalo/truffalo_stripped_log_top.png | Bin 0 -> 299 bytes .../block/truffalo/truffalo_trapdoor.png | Bin 0 -> 654 bytes .../block/truffalo/white_truffalo_tuft.png | Bin 0 -> 382 bytes .../block/truffalo/yellow_truffalo_tuft.png | Bin 0 -> 420 bytes .../antarchy/textures/entity/boat/royal.png | Bin 0 -> 4090 bytes .../textures/entity/boat/truffalo.png | Bin 0 -> 3622 bytes .../textures/entity/chest_boat/royal.png | Bin 0 -> 6521 bytes .../textures/entity/chest_boat/truffalo.png | Bin 0 -> 6054 bytes .../textures/entity/hoverboard/hoverboard.png | Bin 0 -> 2591 bytes .../entity/hoverboard/hoverboard_black.png | Bin 0 -> 2593 bytes .../entity/hoverboard/hoverboard_blue.png | Bin 0 -> 2627 bytes .../entity/hoverboard/hoverboard_brown.png | Bin 0 -> 2590 bytes .../entity/hoverboard/hoverboard_cyan.png | Bin 0 -> 2611 bytes .../entity/hoverboard/hoverboard_gray.png | Bin 0 -> 2627 bytes .../entity/hoverboard/hoverboard_green.png | Bin 0 -> 2577 bytes .../hoverboard/hoverboard_light_blue.png | Bin 0 -> 2680 bytes .../hoverboard/hoverboard_light_gray.png | Bin 0 -> 2593 bytes .../entity/hoverboard/hoverboard_lime.png | Bin 0 -> 2585 bytes .../entity/hoverboard/hoverboard_magenta.png | Bin 0 -> 2589 bytes .../entity/hoverboard/hoverboard_orange.png | Bin 0 -> 2600 bytes .../entity/hoverboard/hoverboard_pink.png | Bin 0 -> 2606 bytes .../entity/hoverboard/hoverboard_purple.png | Bin 0 -> 2605 bytes .../entity/hoverboard/hoverboard_red.png | Bin 0 -> 2597 bytes .../entity/hoverboard/hoverboard_white.png | Bin 0 -> 2536 bytes .../entity/hoverboard/hoverboard_yellow.png | Bin 0 -> 2621 bytes .../textures/entity/signs/hanging/royal.png | Bin 0 -> 1045 bytes .../entity/signs/hanging/truffalo.png | Bin 0 -> 1251 bytes .../antarchy/textures/entity/signs/royal.png | Bin 0 -> 1195 bytes .../textures/entity/signs/truffalo.png | Bin 0 -> 1284 bytes .../textures/gui/hanging_signs/royal.png | Bin 0 -> 471 bytes .../textures/item/hoverboard/hoverboard.png | Bin 0 -> 556 bytes .../item/hoverboard/hoverboard_black.png | Bin 0 -> 547 bytes .../item/hoverboard/hoverboard_blue.png | Bin 0 -> 614 bytes .../item/hoverboard/hoverboard_brown.png | Bin 0 -> 614 bytes .../item/hoverboard/hoverboard_cyan.png | Bin 0 -> 630 bytes .../item/hoverboard/hoverboard_gray.png | Bin 0 -> 596 bytes .../item/hoverboard/hoverboard_green.png | Bin 0 -> 626 bytes .../item/hoverboard/hoverboard_light_blue.png | Bin 0 -> 635 bytes .../item/hoverboard/hoverboard_light_gray.png | Bin 0 -> 608 bytes .../item/hoverboard/hoverboard_lime.png | Bin 0 -> 630 bytes .../item/hoverboard/hoverboard_magenta.png | Bin 0 -> 620 bytes .../item/hoverboard/hoverboard_orange.png | Bin 0 -> 595 bytes .../item/hoverboard/hoverboard_pink.png | Bin 0 -> 621 bytes .../item/hoverboard/hoverboard_purple.png | Bin 0 -> 626 bytes .../item/hoverboard/hoverboard_red.png | Bin 0 -> 629 bytes .../item/hoverboard/hoverboard_white.png | Bin 0 -> 619 bytes .../item/hoverboard/hoverboard_yellow.png | Bin 0 -> 633 bytes .../textures/item/music_disc_underside.png | Bin 0 -> 340 bytes .../antarchy/textures/item/royal_boat.png | Bin 0 -> 497 bytes .../textures/item/royal_chest_boat.png | Bin 0 -> 555 bytes .../royal_guardian_shield.png | Bin 2142 -> 0 bytes .../textures/item/royal_hanging_sign.png | Bin 0 -> 453 bytes .../antarchy/textures/item/royal_sign.png | Bin 0 -> 405 bytes .../antarchy/textures/item/truffalo_boat.png | Bin 0 -> 489 bytes .../textures/item/truffalo_chest_boat.png | Bin 0 -> 561 bytes .../textures/item/truffalo_door_icon.png | Bin 0 -> 255 bytes .../textures/item/truffalo_hanging_sign.png | Bin 0 -> 445 bytes .../antarchy/textures/item/truffalo_sign.png | Bin 0 -> 427 bytes .../data/antarchy/jukebox_song/underside.json | 8 + .../blocks/black_truffalo_tuft.json | 21 + .../loot_table/blocks/blue_truffalo_tuft.json | 21 + .../blocks/brown_truffalo_tuft.json | 21 + .../loot_table/blocks/cyan_truffalo_tuft.json | 21 + .../loot_table/blocks/gray_truffalo_tuft.json | 21 + .../blocks/green_truffalo_tuft.json | 21 + .../blocks/light_blue_truffalo_tuft.json | 21 + .../blocks/light_gray_truffalo_tuft.json | 21 + .../loot_table/blocks/lime_truffalo_tuft.json | 21 + .../blocks/magenta_truffalo_tuft.json | 21 + .../blocks/orange_truffalo_tuft.json | 21 + .../loot_table/blocks/pink_truffalo_tuft.json | 21 + .../blocks/potted_truffalo_sapling.json | 24 + .../blocks/purple_truffalo_tuft.json | 21 + .../loot_table/blocks/red_truffalo_tuft.json | 21 + .../loot_table/blocks/royal_button.json | 21 + .../loot_table/blocks/royal_door.json | 30 + .../loot_table/blocks/royal_fence.json | 21 + .../loot_table/blocks/royal_fence_gate.json | 21 + .../blocks/royal_flowering_leaves.json | 137 + .../loot_table/blocks/royal_hanging_sign.json | 21 + .../loot_table/blocks/royal_leaves.json | 137 + .../antarchy/loot_table/blocks/royal_log.json | 21 + .../loot_table/blocks/royal_planks.json | 21 + .../blocks/royal_pressure_plate.json | 21 + .../loot_table/blocks/royal_sapling.json | 15 + .../loot_table/blocks/royal_sign.json | 21 + .../loot_table/blocks/royal_slab.json | 35 + .../loot_table/blocks/royal_stairs.json | 21 + .../loot_table/blocks/royal_trapdoor.json | 21 + .../blocks/royal_wall_hanging_sign.json | 21 + .../loot_table/blocks/royal_wall_sign.json | 21 + .../loot_table/blocks/royal_wood.json | 21 + .../loot_table/blocks/stripped_royal_log.json | 21 + .../blocks/stripped_royal_wood.json | 21 + .../blocks/stripped_truffalo_log.json | 21 + .../blocks/stripped_truffalo_wood.json | 21 + .../loot_table/blocks/truffalo_button.json | 21 + .../loot_table/blocks/truffalo_door.json | 30 + .../loot_table/blocks/truffalo_fence.json | 21 + .../blocks/truffalo_fence_gate.json | 21 + .../blocks/truffalo_hanging_sign.json | 21 + .../loot_table/blocks/truffalo_log.json | 21 + .../loot_table/blocks/truffalo_planks.json | 21 + .../blocks/truffalo_pressure_plate.json | 21 + .../loot_table/blocks/truffalo_sapling.json | 15 + .../loot_table/blocks/truffalo_sign.json | 21 + .../loot_table/blocks/truffalo_slab.json | 35 + .../loot_table/blocks/truffalo_stairs.json | 21 + .../loot_table/blocks/truffalo_trapdoor.json | 21 + .../blocks/truffalo_wall_hanging_sign.json | 21 + .../loot_table/blocks/truffalo_wall_sign.json | 21 + .../loot_table/blocks/truffalo_wood.json | 21 + .../blocks/white_truffalo_tuft.json | 21 + .../blocks/yellow_truffalo_tuft.json | 21 + .../data/antarchy/recipe/hoverboard.json | 30 + .../antarchy/recipe/hoverboard_black.json | 17 + .../data/antarchy/recipe/hoverboard_blue.json | 17 + .../antarchy/recipe/hoverboard_brown.json | 17 + .../data/antarchy/recipe/hoverboard_cyan.json | 17 + .../data/antarchy/recipe/hoverboard_gray.json | 17 + .../antarchy/recipe/hoverboard_green.json | 17 + .../recipe/hoverboard_light_blue.json | 17 + .../recipe/hoverboard_light_gray.json | 17 + .../data/antarchy/recipe/hoverboard_lime.json | 17 + .../antarchy/recipe/hoverboard_magenta.json | 17 + .../antarchy/recipe/hoverboard_orange.json | 17 + .../data/antarchy/recipe/hoverboard_pink.json | 17 + .../antarchy/recipe/hoverboard_purple.json | 17 + .../data/antarchy/recipe/hoverboard_red.json | 17 + .../antarchy/recipe/hoverboard_white.json | 17 + .../antarchy/recipe/hoverboard_yellow.json | 17 + .../antarchy/recipe/royal/royal_boat.json | 18 + .../antarchy/recipe/royal/royal_button.json | 14 + .../recipe/royal/royal_chest_boat.json | 17 + .../antarchy/recipe/royal/royal_door.json | 19 + .../antarchy/recipe/royal/royal_fence.json | 21 + .../recipe/royal/royal_fence_gate.json | 21 + .../recipe/royal/royal_hanging_sign.json | 22 + .../antarchy/recipe/royal/royal_planks.json | 14 + .../recipe/royal/royal_pressure_plate.json | 17 + .../antarchy/recipe/royal/royal_sign.json | 22 + .../antarchy/recipe/royal/royal_slab.json | 17 + .../antarchy/recipe/royal/royal_stairs.json | 19 + .../antarchy/recipe/royal/royal_trapdoor.json | 18 + .../antarchy/recipe/royal/royal_wood.json | 18 + .../recipe/royal/stripped_royal_wood.json | 18 + .../recipe/truffalo/black_truffalo_tuft.json | 13 + .../recipe/truffalo/blue_truffalo_tuft.json | 13 + .../recipe/truffalo/brown_truffalo_tuft.json | 13 + .../recipe/truffalo/cyan_truffalo_tuft.json | 13 + .../recipe/truffalo/gray_truffalo_tuft.json | 13 + .../recipe/truffalo/green_truffalo_tuft.json | 13 + .../truffalo/light_blue_truffalo_tuft.json | 13 + .../truffalo/light_gray_truffalo_tuft.json | 13 + .../recipe/truffalo/lime_truffalo_tuft.json | 13 + .../truffalo/magenta_truffalo_tuft.json | 13 + .../recipe/truffalo/orange_truffalo_tuft.json | 13 + .../recipe/truffalo/pink_truffalo_tuft.json | 13 + .../recipe/truffalo/purple_truffalo_tuft.json | 13 + .../recipe/truffalo/red_truffalo_tuft.json | 13 + .../truffalo/stripped_truffalo_wood.json | 18 + .../recipe/truffalo/truffalo_boat.json | 18 + .../recipe/truffalo/truffalo_button.json | 14 + .../recipe/truffalo/truffalo_chest_boat.json | 17 + .../recipe/truffalo/truffalo_door.json | 19 + .../recipe/truffalo/truffalo_fence.json | 21 + .../recipe/truffalo/truffalo_fence_gate.json | 21 + .../truffalo/truffalo_hanging_sign.json | 22 + .../recipe/truffalo/truffalo_planks.json | 14 + .../truffalo/truffalo_pressure_plate.json | 17 + .../recipe/truffalo/truffalo_sign.json | 22 + .../recipe/truffalo/truffalo_slab.json | 17 + .../recipe/truffalo/truffalo_stairs.json | 19 + .../recipe/truffalo/truffalo_trapdoor.json | 18 + .../recipe/truffalo/truffalo_wood.json | 18 + .../recipe/truffalo/white_truffalo_tuft.json | 13 + .../recipe/truffalo/yellow_truffalo_tuft.json | 13 + .../data/antarchy/tags/block/royal_logs.json | 9 + .../antarchy/tags/block/truffalo_logs.json | 9 + .../tags/block/truffalo_sapling_supports.json | 14 + .../antarchy/tags/block/truffalo_tuft.json | 21 + .../data/antarchy/tags/item/hoverboards.json | 22 + .../data/antarchy/tags/item/royal_logs.json | 9 + .../antarchy/tags/item/truffalo_logs.json | 9 + .../antarchy/tags/item/truffalo_tuft.json | 21 + .../antarchy/worldgen/biome/dream_dunes.json | 3 +- .../blush_moss_vegetation.json | 6 + .../configured_feature/truffalo_tree.json | 19 + .../tags/block/all_hanging_signs.json | 22 +- .../tags/block/ceiling_hanging_signs.json | 14 +- .../data/minecraft/tags/block/doors.json | 14 +- .../minecraft/tags/block/fence_gates.json | 14 +- .../data/minecraft/tags/block/logs.json | 44 +- .../minecraft/tags/block/logs_that_burn.json | 44 +- .../minecraft/tags/block/mineable/axe.json | 154 +- .../minecraft/tags/block/mineable/hoe.json | 52 +- .../data/minecraft/tags/block/planks.json | 14 +- .../data/minecraft/tags/block/saplings.json | 14 +- .../minecraft/tags/block/standing_signs.json | 14 +- .../data/minecraft/tags/block/trapdoors.json | 14 +- .../tags/block/wall_hanging_signs.json | 14 +- .../data/minecraft/tags/block/wall_signs.json | 14 +- .../minecraft/tags/block/wooden_buttons.json | 14 +- .../minecraft/tags/block/wooden_doors.json | 14 +- .../minecraft/tags/block/wooden_fences.json | 14 +- .../tags/block/wooden_pressure_plates.json | 14 +- .../minecraft/tags/block/wooden_slabs.json | 14 +- .../minecraft/tags/block/wooden_stairs.json | 14 +- .../tags/block/wooden_trapdoors.json | 14 +- .../data/minecraft/tags/item/boats.json | 16 +- .../data/minecraft/tags/item/chest_boats.json | 14 +- .../data/minecraft/tags/item/doors.json | 14 +- .../data/minecraft/tags/item/fence_gates.json | 14 +- .../minecraft/tags/item/hanging_signs.json | 14 +- .../data/minecraft/tags/item/logs.json | 44 +- .../minecraft/tags/item/logs_that_burn.json | 44 +- .../data/minecraft/tags/item/planks.json | 14 +- .../data/minecraft/tags/item/saplings.json | 14 +- .../data/minecraft/tags/item/signs.json | 14 +- .../data/minecraft/tags/item/trapdoors.json | 14 +- .../minecraft/tags/item/wooden_buttons.json | 14 +- .../minecraft/tags/item/wooden_doors.json | 14 +- .../minecraft/tags/item/wooden_fences.json | 14 +- .../tags/item/wooden_pressure_plates.json | 14 +- .../minecraft/tags/item/wooden_slabs.json | 14 +- .../minecraft/tags/item/wooden_stairs.json | 14 +- .../minecraft/tags/item/wooden_trapdoors.json | 14 +- .../antarchy/fabric/AntarchyWoodTypes.java | 2 + .../client/AntarchyFabricClientBootstrap.java | 19 + .../fabric/registry/AntarchyFabricBlocks.java | 214 ++ .../registry/AntarchyFabricEntities.java | 51 + .../AntarchyFabricEntityAttributes.java | 1 + .../fabric/registry/AntarchyFabricItems.java | 193 +- .../fabric/registry/AntarchyFabricMisc.java | 6 + .../fabric/registry/AntarchyFabricSounds.java | 1 + gradle.properties | 2 +- .../antarchy/neoforge/AntarchyWoodTypes.java | 2 + .../client/AntarchyNeoForgeClient.java | 16 + .../PortalGunPortalViewRenderHandler.java | 22 + .../client/PortalGunRollClientHandler.java | 20 + .../registry/AntarchyNeoforgeBlocks.java | 136 + .../registry/AntarchyNeoforgeEntites.java | 41 + .../AntarchyNeoforgeEntityAttributes.java | 1 + .../registry/AntarchyNeoforgeItems.java | 111 +- .../registry/AntarchyNeoforgeMisc.java | 3 + .../registry/AntarchyNeoforgeSounds.java | 1 + 554 files changed, 14434 insertions(+), 512 deletions(-) create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/PortalGunPortalBaseBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/PortalGunPortalMasterBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/RoyalSaplingBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TruffaloLogBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TruffaloSaplingBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TruffaloTuftBlock.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalBaseBlockEntity.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalMasterBlockEntity.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunPortalRenderState.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunRollClientState.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/HoverboardModel.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/HoverboardRenderer.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalViewRenderer.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunProjectileRenderer.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HoverboardEntity.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RoyalBoatEntity.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RoyalChestBoatEntity.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TruffaloBoatEntity.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TruffaloChestBoatEntity.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/HoverboardItem.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalBoatOnlyItem.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalChestBoatItem.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloBoatOnlyItem.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloChestBoatItem.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunCollisionHelper.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPlacement.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectileEntity.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransformUtil.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunWorldPortalShape.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/truffalo/TruffaloTreeConfiguration.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/truffalo/TruffaloTreeFeature.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/truffalo/TruffaloTreeGrowers.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractArrowAccessor.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/LivingEntityJumpingAccessor.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityCollisionMixin.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityInWallMixin.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/BlockEntityRenderDispatcherPortalMixin.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityRenderDispatcherPortalMixin.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/HoverboardRiderPoseMixin.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalMixin.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererPortalMixin.java create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/animations/hoverboard.animation.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/black_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/blue_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/brown_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/cyan_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/gray_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/green_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/light_blue_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/light_gray_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/lime_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/magenta_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/orange_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/pink_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/potted_royal_sapling.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/potted_truffalo_sapling.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/purple_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/red_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_button.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_door.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_fence.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_fence_gate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_flowering_leaves.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_leaves.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_log.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_planks.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_pressure_plate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_sapling.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_slab.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_stairs.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_trapdoor.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_wall_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_wall_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_wood.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_royal_log.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_royal_wood.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_truffalo_log.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_truffalo_wood.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_button.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_door.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_fence.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_fence_gate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_log.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_planks.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_pressure_plate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_sapling.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_slab.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_stairs.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_trapdoor.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_wall_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_wall_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_wood.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/white_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/blockstates/yellow_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/geo/hoverboard.geo.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/magenta_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/potted_royal_sapling.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/potted_truffalo_sapling.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_button.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_button_inventory.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_button_pressed.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_left.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_left_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_right.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_right_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_left.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_left_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_right.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_right_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate_wall.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate_wall_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_inventory.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_post.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_side.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_flowering_leaves.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_leaves.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_log.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_log_horizontal.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_planks.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_pressure_plate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_pressure_plate_down.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_sapling.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_slab.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_slab_top.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_stairs.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_stairs_inner.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_stairs_outer.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_trapdoor_bottom.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_trapdoor_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_trapdoor_top.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_wall_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_wall_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_wood.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_royal_log.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_royal_log_horizontal.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_royal_wood.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_truffalo_log.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_truffalo_log_horizontal.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_truffalo_wood.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_button.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_button_inventory.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_button_pressed.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_left.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_left_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_right.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_right_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_left.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_left_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_right.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_right_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate_wall.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate_wall_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_inventory.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_post.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_side.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_log.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_log_horizontal.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_planks.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_pressure_plate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_pressure_plate_down.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_sapling.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_slab.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_slab_top.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_stairs.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_stairs_inner.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_stairs_outer.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_trapdoor_bottom.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_trapdoor_open.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_trapdoor_top.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_black.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_blue.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_brown.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_cyan.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_gray.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_green.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_light_blue.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_light_gray.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_lime.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_magenta.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_orange.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_pink.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_purple.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_red.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_template.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_white.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_yellow.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_wall_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_wall_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_wood.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/black_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/blue_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/brown_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/cyan_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/gray_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/green_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_black.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_blue.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_brown.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_cyan.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_gray.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_green.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_light_blue.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_light_gray.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_lime.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_magenta.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_orange.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_pink.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_purple.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_red.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_white.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_yellow.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/light_blue_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/light_gray_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/lime_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/magenta_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/music_disc_underside.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/orange_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/pink_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/purple_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/red_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_boat.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_button.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_chest_boat.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_door.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_fence.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_fence_gate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_flowering_leaves.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_leaves.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_log.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_planks.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_pressure_plate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_sapling.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_slab.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_stairs.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_trapdoor.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_wood.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_royal_log.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_royal_wood.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_truffalo_log.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_truffalo_wood.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_boat.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_button.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_chest_boat.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_door.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_fence.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_fence_gate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_log.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_planks.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_pressure_plate.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_sapling.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_sign.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_slab.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_stairs.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_trapdoor.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_wood.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/white_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/models/item/yellow_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/black_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/blue_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/brown_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/cyan_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/gray_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/green_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/light_blue_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/light_gray_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/lime_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/magenta_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/orange_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/pink_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/purple_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/red_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_door_bottom.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_door_top.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_log.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_log_stripped.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_log_top.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_planks.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_sapling.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_stripped_log_top.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_trapdoor.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/white_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/yellow_truffalo_tuft.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/boat/royal.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/boat/truffalo.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/royal.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/truffalo.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_black.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_blue.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_brown.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_cyan.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_gray.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_green.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_light_blue.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_light_gray.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_lime.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_magenta.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_orange.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_pink.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_purple.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_red.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_white.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_yellow.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/royal.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/truffalo.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/signs/royal.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/entity/signs/truffalo.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/gui/hanging_signs/royal.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_black.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_blue.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_brown.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_cyan.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_gray.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_green.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_light_blue.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_light_gray.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_lime.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_magenta.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_orange.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_pink.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_purple.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_red.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_white.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_yellow.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/music_disc_underside.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/royal_boat.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/royal_chest_boat.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/royal_gaurdian_shield/royal_guardian_shield.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/royal_hanging_sign.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/royal_sign.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/truffalo_boat.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/truffalo_chest_boat.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/truffalo_door_icon.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/truffalo_hanging_sign.png create mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/item/truffalo_sign.png create mode 100644 common-1.21.1/src/main/resources/data/antarchy/jukebox_song/underside.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/black_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/blue_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/brown_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/cyan_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/gray_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/green_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/light_blue_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/light_gray_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/lime_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/magenta_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/orange_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/pink_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/potted_truffalo_sapling.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/purple_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/red_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_button.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_door.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_fence.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_fence_gate.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_flowering_leaves.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_leaves.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_log.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_planks.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_pressure_plate.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_sapling.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_sign.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_slab.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_stairs.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_trapdoor.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_wall_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_wall_sign.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/royal_wood.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_royal_log.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_royal_wood.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_truffalo_log.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/stripped_truffalo_wood.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_button.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_door.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_fence.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_fence_gate.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_log.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_planks.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_pressure_plate.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_sapling.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_sign.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_slab.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_stairs.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_trapdoor.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_wall_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_wall_sign.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/truffalo_wood.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/white_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/loot_table/blocks/yellow_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_black.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_blue.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_brown.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_cyan.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_gray.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_green.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_light_blue.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_light_gray.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_lime.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_magenta.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_orange.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_pink.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_purple.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_red.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_white.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/hoverboard_yellow.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_boat.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_button.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_chest_boat.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_door.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_fence.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_fence_gate.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_planks.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_pressure_plate.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_sign.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_slab.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_stairs.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_trapdoor.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/royal_wood.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/royal/stripped_royal_wood.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/black_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/blue_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/brown_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/cyan_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/gray_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/green_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/light_blue_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/light_gray_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/lime_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/magenta_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/orange_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/pink_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/purple_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/red_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/stripped_truffalo_wood.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_boat.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_button.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_chest_boat.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_door.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_fence.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_fence_gate.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_hanging_sign.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_planks.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_pressure_plate.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_sign.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_slab.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_stairs.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_trapdoor.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/truffalo_wood.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/white_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/recipe/truffalo/yellow_truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/block/royal_logs.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/block/truffalo_logs.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/block/truffalo_sapling_supports.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/block/truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/item/hoverboards.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/item/royal_logs.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/item/truffalo_logs.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/tags/item/truffalo_tuft.json create mode 100644 common-1.21.1/src/main/resources/data/antarchy/worldgen/configured_feature/truffalo_tree.json create mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunPortalViewRenderHandler.java create mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunRollClientHandler.java diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/PortalGunPortalBaseBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/PortalGunPortalBaseBlock.java new file mode 100644 index 00000000..289e9a01 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/PortalGunPortalBaseBlock.java @@ -0,0 +1,76 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalBaseBlockEntity; +import com.mojang.serialization.MapCodec; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +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.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class PortalGunPortalBaseBlock extends BaseEntityBlock { + private static final VoxelShape EMPTY = Shapes.empty(); + private final Supplier> blockEntityTypeSupplier; + private final MapCodec codec; + + public PortalGunPortalBaseBlock(Supplier> blockEntityTypeSupplier, BlockBehaviour.Properties properties) { + super(properties); + this.blockEntityTypeSupplier = blockEntityTypeSupplier; + this.codec = Block.simpleCodec(ignored -> this); + } + + @Override + public MapCodec codec() { + return this.codec; + } + + @Override + protected RenderShape getRenderShape(BlockState state) { + return RenderShape.INVISIBLE; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return EMPTY; + } + + @Override + protected VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return EMPTY; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new PortalGunPortalBaseBlockEntity(pos, state, this.blockEntityTypeSupplier); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + if (level.isClientSide) { + return null; + } + return createTickerHelper(blockEntityType, this.blockEntityTypeSupplier.get(), (tickLevel, tickPos, tickState, blockEntity) -> { + if (tickLevel instanceof net.minecraft.server.level.ServerLevel serverLevel) { + PortalGunPortalBaseBlockEntity.serverTick(serverLevel, tickPos, tickState, blockEntity); + } + }); + } + + @Override + protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!state.is(newState.getBlock()) && level.getBlockEntity(pos) instanceof PortalGunPortalBaseBlockEntity blockEntity) { + blockEntity.onBroken(); + } + super.onRemove(state, level, pos, newState, movedByPiston); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/PortalGunPortalMasterBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/PortalGunPortalMasterBlock.java new file mode 100644 index 00000000..c0c92814 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/PortalGunPortalMasterBlock.java @@ -0,0 +1,76 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalMasterBlockEntity; +import com.mojang.serialization.MapCodec; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +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.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class PortalGunPortalMasterBlock extends BaseEntityBlock { + private static final VoxelShape EMPTY = Shapes.empty(); + private final Supplier> blockEntityTypeSupplier; + private final MapCodec codec; + + public PortalGunPortalMasterBlock(Supplier> blockEntityTypeSupplier, BlockBehaviour.Properties properties) { + super(properties); + this.blockEntityTypeSupplier = blockEntityTypeSupplier; + this.codec = Block.simpleCodec(ignored -> this); + } + + @Override + public MapCodec codec() { + return this.codec; + } + + @Override + protected RenderShape getRenderShape(BlockState state) { + return RenderShape.INVISIBLE; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return EMPTY; + } + + @Override + protected VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return EMPTY; + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new PortalGunPortalMasterBlockEntity(pos, state, this.blockEntityTypeSupplier); + } + + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + if (level.isClientSide) { + return null; + } + return createTickerHelper(blockEntityType, this.blockEntityTypeSupplier.get(), (tickLevel, tickPos, tickState, blockEntity) -> { + if (tickLevel instanceof net.minecraft.server.level.ServerLevel serverLevel) { + PortalGunPortalMasterBlockEntity.serverTick(serverLevel, tickPos, tickState, blockEntity); + } + }); + } + + @Override + protected void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) { + if (!state.is(newState.getBlock()) && level.getBlockEntity(pos) instanceof PortalGunPortalMasterBlockEntity blockEntity) { + blockEntity.onBroken(); + } + super.onRemove(state, level, pos, newState, movedByPiston); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/RoyalSaplingBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/RoyalSaplingBlock.java new file mode 100644 index 00000000..913edc31 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/RoyalSaplingBlock.java @@ -0,0 +1,60 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; +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.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.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class RoyalSaplingBlock extends BushBlock { + public static final MapCodec CODEC = Block.simpleCodec(RoyalSaplingBlock::new); + private static final VoxelShape SHAPE = Block.box(2.0D, 0.0D, 2.0D, 14.0D, 12.0D, 14.0D); + + public RoyalSaplingBlock(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 boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(BlockTags.DIRT); + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + BlockState belowState = level.getBlockState(pos.below()); + return belowState.is(BlockTags.DIRT); + } + + @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-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TruffaloLogBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TruffaloLogBlock.java new file mode 100644 index 00000000..2e3f3e20 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TruffaloLogBlock.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RotatedPillarBlock; +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 TruffaloLogBlock extends RotatedPillarBlock { + public static final MapCodec CODEC = Block.simpleCodec(TruffaloLogBlock::new); + + private static final VoxelShape SHAPE_Y = Block.box(4.0D, 0.0D, 4.0D, 12.0D, 16.0D, 12.0D); + private static final VoxelShape SHAPE_X = Block.box(0.0D, 4.0D, 4.0D, 16.0D, 12.0D, 12.0D); + private static final VoxelShape SHAPE_Z = Block.box(4.0D, 4.0D, 0.0D, 12.0D, 12.0D, 16.0D); + + public TruffaloLogBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return shapeFor(state); + } + + @Override + protected VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return shapeFor(state); + } + + @Override + protected VoxelShape getOcclusionShape(BlockState state, BlockGetter level, BlockPos pos) { + return shapeFor(state); + } + + private static VoxelShape shapeFor(BlockState state) { + return switch (state.getValue(AXIS)) { + case X -> SHAPE_X; + case Z -> SHAPE_Z; + default -> SHAPE_Y; + }; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TruffaloSaplingBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TruffaloSaplingBlock.java new file mode 100644 index 00000000..96decdb2 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TruffaloSaplingBlock.java @@ -0,0 +1,110 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.worldgen.truffalo.TruffaloTreeGrowers; +import com.mojang.serialization.MapCodec; +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.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.TagKey; +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.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; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class TruffaloSaplingBlock extends BushBlock implements BonemealableBlock { + public static final MapCodec CODEC = Block.simpleCodec(TruffaloSaplingBlock::new); + private static final TagKey SUPPORTS = TagKey.create( + Registries.BLOCK, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "truffalo_sapling_supports") + ); + private static final VoxelShape SHAPE = Block.box(2.0D, 4.0D, 2.0D, 14.0D, 16.0D, 14.0D); + + public TruffaloSaplingBlock(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 boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) { + return state.is(SUPPORTS); + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + BlockPos supportPos = pos.below(); + BlockState supportState = level.getBlockState(supportPos); + return supportState.is(SUPPORTS) && supportState.isFaceSturdy(level, supportPos, Direction.UP); + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (random.nextInt(7) == 0) { + this.growConfiguredTree(level, pos, state, random); + } + } + + @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(); + } + + @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) { + Holder.Reference> feature = level.registryAccess() + .lookupOrThrow(Registries.CONFIGURED_FEATURE) + .getOrThrow(TruffaloTreeGrowers.TRUFFALO_TREE); + + level.removeBlock(pos, false); + if (feature.value().place(level, level.getChunkSource().getGenerator(), random, pos)) { + return; + } + + level.setBlock(pos, state, Block.UPDATE_ALL); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TruffaloTuftBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TruffaloTuftBlock.java new file mode 100644 index 00000000..d4c6a504 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/TruffaloTuftBlock.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ShearsItem; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public class TruffaloTuftBlock extends Block { + public static final MapCodec CODEC = Block.simpleCodec(TruffaloTuftBlock::new); + private static final float SHEARS_DESTROY_SPEED = 10.0F; + + public TruffaloTuftBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected float getDestroyProgress(BlockState state, Player player, BlockGetter level, BlockPos pos) { + if (player.getMainHandItem().getItem() instanceof ShearsItem) { + return SHEARS_DESTROY_SPEED; + } + + return super.getDestroyProgress(state, player, level, pos); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalBaseBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalBaseBlockEntity.java new file mode 100644 index 00000000..be1b9709 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalBaseBlockEntity.java @@ -0,0 +1,148 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import java.util.UUID; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +public class PortalGunPortalBaseBlockEntity extends BlockEntity { + private UUID ownerId; + private UUID portalId; + private PortalGunPortalEntity.PortalSide side = PortalGunPortalEntity.PortalSide.BLUE; + private BlockPos masterPos = BlockPos.ZERO; + private UUID linkedPortalId; + private int pairTime; + + public PortalGunPortalBaseBlockEntity(BlockPos pos, BlockState state, Supplier> typeSupplier) { + super(typeSupplier.get(), pos, state); + } + + public void configure(UUID ownerId, UUID portalId, PortalGunPortalEntity.PortalSide side, BlockPos masterPos) { + this.ownerId = ownerId; + this.portalId = portalId; + this.side = side; + this.masterPos = masterPos.immutable(); + this.setChanged(); + } + + public UUID getOwnerId() { + return this.ownerId; + } + + public UUID getPortalId() { + return this.portalId; + } + + public PortalGunPortalEntity.PortalSide getSide() { + return this.side; + } + + public BlockPos getMasterPos() { + return this.masterPos; + } + + public UUID getLinkedPortalId() { + return this.linkedPortalId; + } + + public int getPairTime() { + return this.pairTime; + } + + public void updatePair(UUID linkedPortalId, int pairTime) { + this.linkedPortalId = linkedPortalId; + this.pairTime = pairTime; + this.setChanged(); + } + + public boolean matches(UUID ownerId, UUID portalId, PortalGunPortalEntity.PortalSide side) { + return ownerId != null && portalId != null && ownerId.equals(this.ownerId) && portalId.equals(this.portalId) && this.side == side; + } + + public void onBroken() { + if (!(this.level instanceof ServerLevel serverLevel) || this.portalId == null) { + return; + } + if (serverLevel.getEntity(this.portalId) instanceof PortalGunPortalEntity portal && !portal.isRemoved()) { + portal.discard(); + } + } + + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, PortalGunPortalBaseBlockEntity blockEntity) { + if (((level.getGameTime() + pos.asLong()) & 15L) != 0L) { + return; + } + if (!(level.getBlockEntity(blockEntity.masterPos) instanceof PortalGunPortalMasterBlockEntity master) + || !master.matches(blockEntity.ownerId, blockEntity.portalId, blockEntity.side) + || !pos.equals(master.getBasePos())) { + level.removeBlock(pos, false); + return; + } + if (!(level.getEntity(blockEntity.portalId) instanceof PortalGunPortalEntity portal) + || portal.isRemoved() + || !pos.equals(portal.getBasePos()) + || blockEntity.ownerId == null + || !blockEntity.ownerId.equals(portal.getOwnerId()) + || blockEntity.side != portal.getPortalSide()) { + level.removeBlock(pos, false); + return; + } + UUID linkedPortalId = portal.getLinkedPortalId(); + if ((linkedPortalId == null && blockEntity.linkedPortalId != null) + || (linkedPortalId != null && !linkedPortalId.equals(blockEntity.linkedPortalId)) + || blockEntity.pairTime != portal.getPairTime()) { + blockEntity.linkedPortalId = linkedPortalId; + blockEntity.pairTime = portal.getPairTime(); + blockEntity.setChanged(); + } + } + + @Override + protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.saveAdditional(tag, registries); + if (this.ownerId != null) { + tag.putUUID("OwnerId", this.ownerId); + } + if (this.portalId != null) { + tag.putUUID("PortalId", this.portalId); + } + if (this.linkedPortalId != null) { + tag.putUUID("LinkedPortalId", this.linkedPortalId); + } + tag.putInt("Side", this.side.ordinal()); + tag.putInt("MasterX", this.masterPos.getX()); + tag.putInt("MasterY", this.masterPos.getY()); + tag.putInt("MasterZ", this.masterPos.getZ()); + tag.putInt("PairTime", this.pairTime); + } + + @Override + protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.loadAdditional(tag, registries); + this.ownerId = tag.hasUUID("OwnerId") ? tag.getUUID("OwnerId") : null; + this.portalId = tag.hasUUID("PortalId") ? tag.getUUID("PortalId") : null; + this.linkedPortalId = tag.hasUUID("LinkedPortalId") ? tag.getUUID("LinkedPortalId") : null; + this.side = tag.getInt("Side") == PortalGunPortalEntity.PortalSide.ORANGE.ordinal() ? PortalGunPortalEntity.PortalSide.ORANGE : PortalGunPortalEntity.PortalSide.BLUE; + this.masterPos = new BlockPos(tag.getInt("MasterX"), tag.getInt("MasterY"), tag.getInt("MasterZ")); + this.pairTime = tag.getInt("PairTime"); + } + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + return this.saveWithoutMetadata(registries); + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalMasterBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalMasterBlockEntity.java new file mode 100644 index 00000000..a0c1f10d --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PortalGunPortalMasterBlockEntity.java @@ -0,0 +1,300 @@ +package com.craisinlord.antarchy.content.block.entity; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunPlacement; +import com.craisinlord.antarchy.content.portalgun.PortalGunSavedData; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; + +public class PortalGunPortalMasterBlockEntity extends BlockEntity { + private UUID ownerId; + private UUID portalId; + private PortalGunPortalEntity.PortalSide side = PortalGunPortalEntity.PortalSide.BLUE; + private Direction facing = Direction.NORTH; + private Direction upAxis = Direction.UP; + private BlockPos basePos = BlockPos.ZERO; + private BlockPos[] portalSpots = new BlockPos[] {BlockPos.ZERO, BlockPos.ZERO}; + private Set compensatedSpots = Set.of(); + private UUID linkedPortalId; + private int pairTime; + + public PortalGunPortalMasterBlockEntity(BlockPos pos, BlockState state, Supplier> typeSupplier) { + super(typeSupplier.get(), pos, state); + } + + public void configure( + UUID ownerId, + UUID portalId, + PortalGunPortalEntity.PortalSide side, + Direction facing, + Direction upAxis, + BlockPos basePos, + BlockPos[] portalSpots, + Set compensatedSpots, + int pairTime + ) { + this.ownerId = ownerId; + this.portalId = portalId; + this.side = side; + this.facing = facing; + this.upAxis = upAxis; + this.basePos = basePos.immutable(); + this.portalSpots = new BlockPos[] {portalSpots[0].immutable(), portalSpots[1].immutable()}; + this.compensatedSpots = new HashSet<>(compensatedSpots); + this.pairTime = pairTime; + this.setChanged(); + } + + public UUID getPortalId() { + return this.portalId; + } + + public UUID getOwnerId() { + return this.ownerId; + } + + public PortalGunPortalEntity.PortalSide getSide() { + return this.side; + } + + public Direction getFacing() { + return this.facing; + } + + public Direction getUpAxis() { + return this.upAxis; + } + + public BlockPos getBasePos() { + return this.basePos; + } + + public BlockPos[] getPortalSpots() { + return new BlockPos[] {this.portalSpots[0], this.portalSpots[1]}; + } + + public Set getCompensatedSpots() { + return Set.copyOf(this.compensatedSpots); + } + + public int getPairTime() { + return this.pairTime; + } + + public UUID getLinkedPortalId() { + return this.linkedPortalId; + } + + public void updatePair(UUID linkedPortalId, int pairTime) { + this.linkedPortalId = linkedPortalId; + this.pairTime = pairTime; + this.setChanged(); + } + + public boolean matches(UUID ownerId, UUID portalId, PortalGunPortalEntity.PortalSide side) { + return ownerId != null && portalId != null && ownerId.equals(this.ownerId) && portalId.equals(this.portalId) && this.side == side; + } + + public void onBroken() { + if (!(this.level instanceof ServerLevel serverLevel) || this.portalId == null) { + return; + } + if (serverLevel.getEntity(this.portalId) instanceof PortalGunPortalEntity portal && !portal.isRemoved()) { + portal.discard(); + } + } + + public static void serverTick(ServerLevel level, BlockPos pos, BlockState state, PortalGunPortalMasterBlockEntity blockEntity) { + if (((level.getGameTime() + pos.asLong()) & 15L) != 0L) { + return; + } + if (!blockEntity.hasValidFootprint(level, pos)) { + level.removeBlock(pos, false); + return; + } + PortalGunPortalEntity portal = blockEntity.ensurePortalEntity(level); + if (portal == null + || portal.isRemoved() + || !pos.equals(portal.getMasterPos()) + || blockEntity.ownerId == null + || !blockEntity.ownerId.equals(portal.getOwnerId()) + || blockEntity.side != portal.getPortalSide()) { + level.removeBlock(pos, false); + return; + } + blockEntity.ensureLinkedPortal(level, portal); + UUID linkedPortalId = portal.getLinkedPortalId(); + if ((linkedPortalId == null && blockEntity.linkedPortalId != null) + || (linkedPortalId != null && !linkedPortalId.equals(blockEntity.linkedPortalId)) + || blockEntity.pairTime != portal.getPairTime()) { + blockEntity.linkedPortalId = linkedPortalId; + blockEntity.pairTime = portal.getPairTime(); + blockEntity.setChanged(); + } + } + + private boolean hasValidFootprint(ServerLevel level, BlockPos pos) { + if (this.ownerId == null || this.portalId == null || !pos.equals(this.worldPosition)) { + return false; + } + if (!(level.getBlockEntity(this.basePos) instanceof PortalGunPortalBaseBlockEntity base) + || !base.matches(this.ownerId, this.portalId, this.side) + || !pos.equals(base.getMasterPos())) { + return false; + } + List supportPositions = new ArrayList<>(2); + for (BlockPos portalSpot : this.portalSpots) { + if (portalSpot == null || BlockPos.ZERO.equals(portalSpot)) { + return false; + } + supportPositions.add(portalSpot.relative(this.facing.getOpposite())); + } + for (BlockPos supportPos : supportPositions) { + BlockState supportState = level.getBlockState(supportPos); + if (!supportState.isFaceSturdy(level, supportPos, this.facing)) { + return false; + } + } + return true; + } + + private PortalGunPortalEntity ensurePortalEntity(ServerLevel level) { + if (this.portalId == null || this.ownerId == null) { + return null; + } + if (level.getEntity(this.portalId) instanceof PortalGunPortalEntity portal && !portal.isRemoved()) { + return portal; + } + EntityType rawType = BuiltInRegistries.ENTITY_TYPE.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "portal_gun_portal")); + if (!(rawType instanceof EntityType)) { + return null; + } + PortalGunPlacement placement = PortalGunPlacement.fromStored(this.facing, this.upAxis, this.worldPosition, this.basePos, this.compensatedSpots); + @SuppressWarnings("unchecked") + PortalGunPortalEntity restored = new PortalGunPortalEntity((EntityType) rawType, level); + restored.setUUID(this.portalId); + restored.configure(this.ownerId, this.side, placement); + restored.restorePair(this.linkedPortalId, this.pairTime); + Vec3 center = placement.center(); + restored.moveTo(center.x, center.y, center.z, placement.yaw(), 0.0F); + level.addFreshEntity(restored); + PortalGunSavedData.setPortal(level.getServer(), this.ownerId, this.side, restored.getUUID()); + return restored; + } + + private void ensureLinkedPortal(ServerLevel level, PortalGunPortalEntity portal) { + if (this.ownerId == null) { + return; + } + PortalGunPortalEntity counterpart = PortalGunSavedData.findLoadedPortal( + level.getServer(), + this.ownerId, + this.side == PortalGunPortalEntity.PortalSide.BLUE ? PortalGunPortalEntity.PortalSide.ORANGE : PortalGunPortalEntity.PortalSide.BLUE + ); + if (counterpart == null || counterpart == portal || counterpart.isRemoved()) { + return; + } + if (!counterpart.getUUID().equals(portal.getLinkedPortalId()) || !portal.getUUID().equals(counterpart.getLinkedPortalId())) { + portal.linkTo(counterpart); + counterpart.linkTo(portal); + } + } + + @Override + protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.saveAdditional(tag, registries); + if (this.ownerId != null) { + tag.putUUID("OwnerId", this.ownerId); + } + if (this.portalId != null) { + tag.putUUID("PortalId", this.portalId); + } + if (this.linkedPortalId != null) { + tag.putUUID("LinkedPortalId", this.linkedPortalId); + } + tag.putInt("Side", this.side.ordinal()); + tag.putInt("Facing", this.facing.get3DDataValue()); + tag.putInt("UpAxis", this.upAxis.get3DDataValue()); + tag.putInt("BaseX", this.basePos.getX()); + tag.putInt("BaseY", this.basePos.getY()); + tag.putInt("BaseZ", this.basePos.getZ()); + tag.putInt("PairTime", this.pairTime); + ListTag spots = new ListTag(); + for (BlockPos portalSpot : this.portalSpots) { + CompoundTag spot = new CompoundTag(); + spot.putInt("X", portalSpot.getX()); + spot.putInt("Y", portalSpot.getY()); + spot.putInt("Z", portalSpot.getZ()); + spots.add(spot); + } + tag.put("PortalSpots", spots); + ListTag compensated = new ListTag(); + for (BlockPos compensatedSpot : this.compensatedSpots) { + CompoundTag spot = new CompoundTag(); + spot.putInt("X", compensatedSpot.getX()); + spot.putInt("Y", compensatedSpot.getY()); + spot.putInt("Z", compensatedSpot.getZ()); + compensated.add(spot); + } + tag.put("CompensatedSpots", compensated); + } + + @Override + protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.loadAdditional(tag, registries); + this.ownerId = tag.hasUUID("OwnerId") ? tag.getUUID("OwnerId") : null; + this.portalId = tag.hasUUID("PortalId") ? tag.getUUID("PortalId") : null; + this.linkedPortalId = tag.hasUUID("LinkedPortalId") ? tag.getUUID("LinkedPortalId") : null; + this.side = tag.getInt("Side") == PortalGunPortalEntity.PortalSide.ORANGE.ordinal() ? PortalGunPortalEntity.PortalSide.ORANGE : PortalGunPortalEntity.PortalSide.BLUE; + this.facing = Direction.from3DDataValue(tag.getInt("Facing")); + this.upAxis = Direction.from3DDataValue(tag.getInt("UpAxis")); + this.basePos = new BlockPos(tag.getInt("BaseX"), tag.getInt("BaseY"), tag.getInt("BaseZ")); + this.pairTime = tag.getInt("PairTime"); + ListTag spots = tag.getList("PortalSpots", Tag.TAG_COMPOUND); + for (int i = 0; i < Math.min(2, spots.size()); i++) { + CompoundTag spot = spots.getCompound(i); + this.portalSpots[i] = new BlockPos(spot.getInt("X"), spot.getInt("Y"), spot.getInt("Z")); + } + ListTag compensated = tag.getList("CompensatedSpots", Tag.TAG_COMPOUND); + Set compensatedSpots = new HashSet<>(); + for (int i = 0; i < compensated.size(); i++) { + CompoundTag spot = compensated.getCompound(i); + compensatedSpots.add(new BlockPos(spot.getInt("X"), spot.getInt("Y"), spot.getInt("Z"))); + } + this.compensatedSpots = compensatedSpots; + } + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + return this.saveWithoutMetadata(registries); + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunPortalRenderState.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunPortalRenderState.java new file mode 100644 index 00000000..d5832608 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunPortalRenderState.java @@ -0,0 +1,75 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.portalgun.PortalGunWorldPortalShape; +import java.util.ArrayDeque; +import java.util.Deque; + +public final class PortalGunPortalRenderState { + private static final ThreadLocal> ACTIVE_DESTINATION_SHAPES = ThreadLocal.withInitial(ArrayDeque::new); + private static final ThreadLocal> ACTIVE_SOURCE_SHAPES = ThreadLocal.withInitial(ArrayDeque::new); + private static final ThreadLocal RENDER_ALL_DEPTH = ThreadLocal.withInitial(() -> 0); + + private PortalGunPortalRenderState() { + } + + public static void pushPortalView(PortalGunWorldPortalShape sourceShape, PortalGunWorldPortalShape destinationShape, boolean renderAll) { + ACTIVE_SOURCE_SHAPES.get().push(sourceShape); + ACTIVE_DESTINATION_SHAPES.get().push(destinationShape); + if (renderAll) { + RENDER_ALL_DEPTH.set(RENDER_ALL_DEPTH.get() + 1); + } + } + + public static void popPortalView(boolean renderAll) { + Deque sourceShapes = ACTIVE_SOURCE_SHAPES.get(); + if (!sourceShapes.isEmpty()) { + sourceShapes.pop(); + } + if (sourceShapes.isEmpty()) { + ACTIVE_SOURCE_SHAPES.remove(); + } + Deque destinationShapes = ACTIVE_DESTINATION_SHAPES.get(); + if (!destinationShapes.isEmpty()) { + destinationShapes.pop(); + } + if (destinationShapes.isEmpty()) { + ACTIVE_DESTINATION_SHAPES.remove(); + } + if (renderAll) { + int depth = Math.max(0, RENDER_ALL_DEPTH.get() - 1); + if (depth == 0) { + RENDER_ALL_DEPTH.remove(); + } else { + RENDER_ALL_DEPTH.set(depth); + } + } + } + + public static void pushDestinationShape(PortalGunWorldPortalShape shape) { + ACTIVE_DESTINATION_SHAPES.get().push(shape); + } + + public static void popDestinationShape() { + Deque shapes = ACTIVE_DESTINATION_SHAPES.get(); + if (!shapes.isEmpty()) { + shapes.pop(); + } + if (shapes.isEmpty()) { + ACTIVE_DESTINATION_SHAPES.remove(); + } + } + + public static PortalGunWorldPortalShape getDestinationShape() { + Deque shapes = ACTIVE_DESTINATION_SHAPES.get(); + return shapes.isEmpty() ? null : shapes.peek(); + } + + public static PortalGunWorldPortalShape getSourceShape() { + Deque shapes = ACTIVE_SOURCE_SHAPES.get(); + return shapes.isEmpty() ? null : shapes.peek(); + } + + public static boolean renderAll() { + return RENDER_ALL_DEPTH.get() > 0; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunRollClientState.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunRollClientState.java new file mode 100644 index 00000000..c9066d17 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunRollClientState.java @@ -0,0 +1,108 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunTransformUtil; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.Vec3; +import org.joml.Quaternionf; + +public final class PortalGunRollClientState { + private static final int TELEPORT_COOLDOWN_TICKS = 15; + private static final float ROLL_DECAY = 0.85F; + private static final float ROLL_EPSILON = 0.05F; + private static final Map TELEPORT_COOLDOWNS = new HashMap<>(); + private static float previousRollDegrees; + private static float rollDegrees; + + private PortalGunRollClientState() { + } + + public static float getRollDegrees() { + return rollDegrees; + } + + public static float getRollDegrees(float partialTick) { + return previousRollDegrees + (rollDegrees - previousRollDegrees) * partialTick; + } + + public static boolean isEntityInsidePortal(Minecraft minecraft, Entity entity) { + if (minecraft.level == null || entity == null) { + return false; + } + for (Entity renderEntity : minecraft.level.entitiesForRendering()) { + if (renderEntity instanceof PortalGunPortalEntity portal && portal.isAlive() && portal.intersectsEntityBounds(entity)) { + return true; + } + } + return false; + } + + public static boolean isCameraInsidePortal(Minecraft minecraft) { + Entity cameraEntity = minecraft.getCameraEntity(); + return cameraEntity != null && isEntityInsidePortal(minecraft, cameraEntity); + } + + public static void clear() { + previousRollDegrees = 0.0F; + rollDegrees = 0.0F; + TELEPORT_COOLDOWNS.clear(); + } + + public static void tick(Minecraft minecraft) { + if (minecraft.level == null || minecraft.player == null) { + clear(); + return; + } + Entity cameraEntity = minecraft.getCameraEntity(); + if (cameraEntity == null) { + return; + } + previousRollDegrees = rollDegrees; + rollDegrees *= ROLL_DECAY; + if (Math.abs(rollDegrees) < ROLL_EPSILON) { + rollDegrees = 0.0F; + } + long gameTime = minecraft.level.getGameTime(); + TELEPORT_COOLDOWNS.entrySet().removeIf(entry -> entry.getValue() <= gameTime); + for (Entity entity : minecraft.level.entitiesForRendering()) { + if (!(entity instanceof PortalGunPortalEntity portal) || !portal.isAlive()) { + continue; + } + PortalGunPortalEntity linkedPortal = portal.getLinkedPortal(); + if (linkedPortal == null || !linkedPortal.isAlive()) { + continue; + } + if (!portal.shouldRenderFront(cameraEntity.position())) { + continue; + } + if (!canTeleport(cameraEntity, gameTime)) { + continue; + } + if (portal.resolveCrossingProbe(cameraEntity) == null) { + continue; + } + applyPredictedTeleport(cameraEntity, portal, linkedPortal, gameTime); + break; + } + } + + private static boolean canTeleport(Entity entity, long gameTime) { + if (!entity.isAlive() || entity instanceof PortalGunPortalEntity || entity.isPassenger() || entity.isVehicle()) { + return false; + } + long cooldownUntil = TELEPORT_COOLDOWNS.getOrDefault(entity.getUUID(), 0L); + return cooldownUntil <= gameTime; + } + + private static void applyPredictedTeleport(Entity entity, PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, long gameTime) { + Quaternionf transform = PortalGunTransformUtil.createTransform(sourcePortal, destinationPortal); + Vec3 transformedLook = PortalGunTransformUtil.transform(entity.getLookAngle(), transform).normalize(); + Vec3 transformedUp = PortalGunTransformUtil.transform(PortalGunTransformUtil.upVectorFromLookAndRoll(entity.getLookAngle(), rollDegrees), transform).normalize(); + rollDegrees = PortalGunTransformUtil.rollFromOrientation(transformedLook, transformedUp); + TELEPORT_COOLDOWNS.put(entity.getUUID(), gameTime + TELEPORT_COOLDOWN_TICKS); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/HoverboardModel.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/HoverboardModel.java new file mode 100644 index 00000000..8c8b58a7 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/HoverboardModel.java @@ -0,0 +1,32 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.HoverboardEntity; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.DyeColor; +import software.bernie.geckolib.model.GeoModel; + +public class HoverboardModel extends GeoModel { + private static final ResourceLocation MODEL = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/hoverboard.geo.json"); + private static final ResourceLocation ANIMATION = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/hoverboard.animation.json"); + private static final ResourceLocation BASE_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/hoverboard/hoverboard.png"); + + @Override + public ResourceLocation getModelResource(HoverboardEntity animatable) { + return MODEL; + } + + @Override + public ResourceLocation getTextureResource(HoverboardEntity animatable) { + DyeColor color = animatable.getColor(); + if (color == null) { + return BASE_TEXTURE; + } + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/hoverboard/hoverboard_" + color.getName() + ".png"); + } + + @Override + public ResourceLocation getAnimationResource(HoverboardEntity animatable) { + return ANIMATION; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/HoverboardRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/HoverboardRenderer.java new file mode 100644 index 00000000..4c764495 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/HoverboardRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.HoverboardModel; +import com.craisinlord.antarchy.content.entity.HoverboardEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class HoverboardRenderer extends GeoEntityRenderer { + public HoverboardRenderer(EntityRendererProvider.Context context) { + super(context, new HoverboardModel()); + this.shadowRadius = 0.5F; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRenderer.java index dd3c7bc7..ec9a555d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRenderer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRenderer.java @@ -3,13 +3,15 @@ package com.craisinlord.antarchy.content.client.renderer; import com.craisinlord.antarchy.content.client.model.PortalGunPortalModel; import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Axis; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; +import org.joml.Matrix3f; +import org.joml.Quaternionf; import software.bernie.geckolib.renderer.GeoEntityRenderer; public class PortalGunPortalRenderer extends GeoEntityRenderer { @@ -20,13 +22,20 @@ public class PortalGunPortalRenderer extends GeoEntityRenderer portals = collectVisiblePortals(minecraft, camera); + if (portals.isEmpty()) { + return; + } + ensureTargets(minecraft); + if (PORTAL_TARGETS[0] == null) { + return; + } + Vec3 cameraPos = camera.getPosition(); + Vec3 rootLook = new Vec3(camera.getLookVector()).normalize(); + Vec3 rootUp = new Vec3(camera.getUpVector()).normalize(); + Matrix4f rootViewMatrix = new Matrix4f().rotation(PortalGunTransformUtil.orientationQuaternion(rootLook, rootUp).conjugate(new Quaternionf())); + RenderContext rootContext = new RenderContext(cameraPos, rootLook, rootUp, rootViewMatrix); + renderingPortalView = true; + RenderSystem.backupProjectionMatrix(); + for (PortalGunPortalEntity portal : portals) { + PortalGunPortalEntity linkedPortal = portal.getLinkedPortal(); + if (linkedPortal == null || !linkedPortal.isAlive()) { + continue; + } + int textureId = renderPortalSurface(minecraft, cameraEntity, tickCounter, rootContext, portal, linkedPortal, 0); + minecraft.getMainRenderTarget().bindWrite(true); + drawPortalQuad(cameraPos, poseMatrix, portal, textureId); + drawPortalOverlay(minecraft, cameraPos, poseMatrix, portal); + } + RenderSystem.restoreProjectionMatrix(); + renderingPortalView = false; + } + + private static List collectVisiblePortals(Minecraft minecraft, Camera camera) { + return collectVisiblePortals(minecraft, camera.getPosition()); + } + + private static List collectVisiblePortals(Minecraft minecraft, Vec3 cameraPos) { + List portals = new ArrayList<>(); + for (Entity entity : minecraft.level.entitiesForRendering()) { + if (!(entity instanceof PortalGunPortalEntity portal) || !portal.isAlive()) { + continue; + } + if (portal.getLinkedPortalId() == null) { + continue; + } + if (!portal.shouldRenderFront(cameraPos)) { + continue; + } + portals.add(portal); + } + portals.sort((left, right) -> Double.compare(left.distanceToSqr(cameraPos), right.distanceToSqr(cameraPos))); + return portals; + } + + private static void ensureTargets(Minecraft minecraft) { + int width = minecraft.getWindow().getWidth(); + int height = minecraft.getWindow().getHeight(); + if (width <= 0 || height <= 0) { + return; + } + for (int i = 0; i < PORTAL_TARGETS.length; i++) { + TextureTarget target = PORTAL_TARGETS[i]; + if (target == null) { + target = new TextureTarget(width, height, true, Minecraft.ON_OSX); + target.setClearColor(0.0F, 0.0F, 0.0F, 1.0F); + PORTAL_TARGETS[i] = target; + continue; + } + if (target.width != width || target.height != height) { + target.resize(width, height, Minecraft.ON_OSX); + } + } + } + + private static int renderPortalSurface( + Minecraft minecraft, + Entity cameraEntity, + DeltaTracker tickCounter, + RenderContext currentContext, + PortalGunPortalEntity sourcePortal, + PortalGunPortalEntity destinationPortal, + int depth + ) { + TextureTarget target = PORTAL_TARGETS[depth]; + RenderContext transformedContext = transformContext(currentContext, sourcePortal, destinationPortal); + PortalCamera portalCamera = new PortalCamera(); + portalCamera.setup(minecraft.level, cameraEntity, tickCounter.getGameTimeDeltaPartialTick(true), transformedContext.cameraPos(), transformedContext.look(), transformedContext.up()); + target.bindWrite(true); + target.clear(Minecraft.ON_OSX); + double fov = minecraft.options.fov().get(); + Matrix4f baseProjectionMatrix = minecraft.gameRenderer.getProjectionMatrix(fov); + Matrix4f clippedProjectionMatrix = applyPortalClipPlane(baseProjectionMatrix, transformedContext, destinationPortal); + minecraft.gameRenderer.resetProjectionMatrix(clippedProjectionMatrix); + ScreenClip clip = computeScreenClip(minecraft, currentContext.cameraPos(), currentContext.viewMatrix(), baseProjectionMatrix, sourcePortal); + boolean clipEnabled = clip != null; + boolean renderAll = clip == null || clip.area() >= widthTimesHeight(minecraft); + if (clipEnabled) { + RenderSystem.enableScissor(clip.x(), clip.y(), clip.width(), clip.height()); + } + PortalGunPortalRenderState.pushPortalView(sourcePortal.getWorldPortalShape(), destinationPortal.getWorldPortalShape(), renderAll); + try { + minecraft.levelRenderer.prepareCullFrustum(portalCamera.getPosition(), transformedContext.viewMatrix(), clippedProjectionMatrix); + minecraft.levelRenderer.renderLevel(tickCounter, false, portalCamera, minecraft.gameRenderer, minecraft.gameRenderer.lightTexture(), transformedContext.viewMatrix(), clippedProjectionMatrix); + if (depth < MAX_RECURSION_DEPTH) { + List nestedPortals = collectVisiblePortals(minecraft, transformedContext.cameraPos()); + Matrix4f nestedPose = new Matrix4f().identity(); + for (PortalGunPortalEntity nestedPortal : nestedPortals) { + PortalGunPortalEntity nestedLinked = nestedPortal.getLinkedPortal(); + if (nestedLinked == null || !nestedLinked.isAlive() || nestedPortal == destinationPortal || nestedPortal == sourcePortal) { + continue; + } + if (clip != null && clip.area() < 6400) { + continue; + } + int nestedTextureId = renderPortalSurface(minecraft, cameraEntity, tickCounter, transformedContext, nestedPortal, nestedLinked, depth + 1); + target.bindWrite(true); + drawPortalQuad(transformedContext.cameraPos(), nestedPose, nestedPortal, nestedTextureId); + drawPortalOverlay(minecraft, transformedContext.cameraPos(), nestedPose, nestedPortal); + } + } + } finally { + PortalGunPortalRenderState.popPortalView(renderAll); + } + if (clipEnabled) { + RenderSystem.disableScissor(); + } + return target.getColorTextureId(); + } + + private static RenderContext transformContext(RenderContext currentContext, PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal) { + Quaternionf transform = PortalGunTransformUtil.createTransform(sourcePortal, destinationPortal); + Vec3 destinationNormal = destinationPortal.getNormalVec().normalize(); + Vec3 relativeEye = currentContext.cameraPos().subtract(sourcePortal.position()); + double depthOffset = Math.max(CAMERA_OFFSET, relativeEye.dot(sourcePortal.getNormalVec().normalize())); + Vec3 transformedEyeOffset = PortalGunTransformUtil.transformRelativePosition(sourcePortal, destinationPortal, relativeEye); + Vec3 destinationEye = destinationPortal.position() + .add(transformedEyeOffset) + .add(destinationNormal.scale(depthOffset + CAMERA_OFFSET - transformedEyeOffset.dot(destinationNormal))); + Vec3 transformedLook = PortalGunTransformUtil.transform(currentContext.look(), transform).normalize(); + Vec3 transformedUp = PortalGunTransformUtil.transform(currentContext.up(), transform).normalize(); + Matrix4f viewMatrix = new Matrix4f().rotation(PortalGunTransformUtil.orientationQuaternion(transformedLook, transformedUp).conjugate(new Quaternionf())); + return new RenderContext(destinationEye, transformedLook, transformedUp, viewMatrix); + } + + private static Matrix4f applyPortalClipPlane(Matrix4f projectionMatrix, RenderContext renderContext, PortalGunPortalEntity destinationPortal) { + Vec3 planePointWorld = destinationPortal.position().add(destinationPortal.getNormalVec().normalize().scale(0.01D)); + Vec3 planeNormalWorld = destinationPortal.getNormalVec().normalize(); + Vector4f clipPlane = portalPlaneToCameraSpace(renderContext, planePointWorld, planeNormalWorld); + if (clipPlane.lengthSquared() <= 1.0E-6F) { + return projectionMatrix; + } + Matrix4f clippedProjection = new Matrix4f(projectionMatrix); + Vector4f q = new Vector4f( + signNonZero(clipPlane.x()) / clippedProjection.m00(), + signNonZero(clipPlane.y()) / clippedProjection.m11(), + -1.0F, + (1.0F + clippedProjection.m22()) / clippedProjection.m32() + ); + float scale = 2.0F / clipPlane.dot(q); + Vector4f c = clipPlane.mul(scale, new Vector4f()); + clippedProjection.m02(c.x()); + clippedProjection.m12(c.y()); + clippedProjection.m22(c.z() + 1.0F); + clippedProjection.m32(c.w()); + return clippedProjection; + } + + private static Vector4f portalPlaneToCameraSpace(RenderContext renderContext, Vec3 planePointWorld, Vec3 planeNormalWorld) { + Vec3 look = renderContext.look().normalize(); + Vec3 up = renderContext.up().normalize(); + Vec3 right = up.cross(look).normalize(); + Vec3 relativePoint = planePointWorld.subtract(renderContext.cameraPos()); + Vector4f point = new Vector4f( + (float) relativePoint.dot(right), + (float) relativePoint.dot(up), + (float) -relativePoint.dot(look), + 1.0F + ); + Vector4f normal = new Vector4f( + (float) planeNormalWorld.dot(right), + (float) planeNormalWorld.dot(up), + (float) -planeNormalWorld.dot(look), + 0.0F + ); + if (normal.z() > 0.0F) { + normal.mul(-1.0F); + } + return new Vector4f(normal.x(), normal.y(), normal.z(), -(normal.x() * point.x() + normal.y() * point.y() + normal.z() * point.z())); + } + + private static float signNonZero(float value) { + return value >= 0.0F ? 1.0F : -1.0F; + } + + private static ScreenClip computeScreenClip(Minecraft minecraft, Vec3 cameraPos, Matrix4f viewMatrix, Matrix4f projectionMatrix, PortalGunPortalEntity portal) { + Vec3[] worldCorners = portal.getWorldPortalShape().getCorners(SURFACE_OFFSET); + int width = minecraft.getWindow().getWidth(); + int height = minecraft.getWindow().getHeight(); + float minX = Float.POSITIVE_INFINITY; + float minY = Float.POSITIVE_INFINITY; + float maxX = Float.NEGATIVE_INFINITY; + float maxY = Float.NEGATIVE_INFINITY; + boolean visible = false; + Matrix4f combined = new Matrix4f(projectionMatrix).mul(viewMatrix); + for (Vec3 worldCorner : worldCorners) { + Vec3 corner = worldCorner.subtract(cameraPos); + Vector4f projected = new Vector4f((float) corner.x, (float) corner.y, (float) corner.z, 1.0F).mul(combined); + if (projected.w <= 0.001F) { + continue; + } + float invW = 1.0F / projected.w; + float ndcX = projected.x * invW; + float ndcY = projected.y * invW; + if (ndcX < -1.25F || ndcX > 1.25F || ndcY < -1.25F || ndcY > 1.25F) { + continue; + } + visible = true; + float screenX = (ndcX * 0.5F + 0.5F) * width; + float screenY = (ndcY * 0.5F + 0.5F) * height; + minX = Math.min(minX, screenX); + minY = Math.min(minY, screenY); + maxX = Math.max(maxX, screenX); + maxY = Math.max(maxY, screenY); + } + if (!visible) { + return null; + } + int scissorX = Mth.clamp((int) Math.floor(minX), 0, width - 1); + int scissorMaxX = Mth.clamp((int) Math.ceil(maxX), scissorX + 1, width); + int scissorYTop = Mth.clamp((int) Math.floor(minY), 0, height - 1); + int scissorYBottom = Mth.clamp((int) Math.ceil(maxY), scissorYTop + 1, height); + int scissorY = height - scissorYBottom; + int scissorWidth = Math.max(1, scissorMaxX - scissorX); + int scissorHeight = Math.max(1, scissorYBottom - scissorYTop); + return new ScreenClip(scissorX, scissorY, scissorWidth, scissorHeight); + } + + private static void drawPortalQuad(Vec3 cameraPos, Matrix4f poseMatrix, PortalGunPortalEntity portal, int textureId) { + drawTexturedPortal(cameraPos, poseMatrix, portal, textureId, SURFACE_OFFSET, 1.0F, 1.0F, 1.0F, 1.0F, false); + } + + private static int widthTimesHeight(Minecraft minecraft) { + return minecraft.getWindow().getWidth() * minecraft.getWindow().getHeight(); + } + + private static void drawPortalOverlay(Minecraft minecraft, Vec3 cameraPos, Matrix4f poseMatrix, PortalGunPortalEntity portal) { + float time = (minecraft.level.getGameTime() + minecraft.getTimer().getGameTimeDeltaPartialTick(false)) * 0.075F; + float pulse = 0.72F + 0.18F * (float) Math.sin(time); + float edge = 0.38F + 0.08F * (float) Math.cos(time * 1.7F); + if (portal.getPortalSide() == PortalGunPortalEntity.PortalSide.BLUE) { + drawTexturedPortal(cameraPos, poseMatrix, portal, BLUE_OVERLAY, OVERLAY_OFFSET, 0.78F, 0.94F, 1.0F, pulse, false); + drawTexturedPortal(cameraPos, poseMatrix, portal, BLUE_OVERLAY, OVERLAY_OFFSET + 0.0008D, 0.26F, 0.62F, 1.0F, edge, true); + return; + } + drawTexturedPortal(cameraPos, poseMatrix, portal, ORANGE_OVERLAY, OVERLAY_OFFSET, 1.0F, 0.84F, 0.46F, pulse, false); + drawTexturedPortal(cameraPos, poseMatrix, portal, ORANGE_OVERLAY, OVERLAY_OFFSET + 0.0008D, 1.0F, 0.48F, 0.16F, edge, true); + } + + private static void drawTexturedPortal(Vec3 cameraPos, Matrix4f poseMatrix, PortalGunPortalEntity portal, ResourceLocation texture, double offset, float red, float green, float blue, float alpha, boolean additive) { + Vec3 widthVec = portal.getWidthVec().normalize().scale(0.5D); + Vec3 upVec = portal.getUpVec().normalize().scale(1.0D); + Vec3 normalVec = portal.getNormalVec().normalize().scale(offset); + Vec3 center = portal.position().add(normalVec); + Vec3 bottomLeft = center.subtract(widthVec).subtract(upVec).subtract(cameraPos); + Vec3 topLeft = center.subtract(widthVec).add(upVec).subtract(cameraPos); + Vec3 topRight = center.add(widthVec).add(upVec).subtract(cameraPos); + Vec3 bottomRight = center.add(widthVec).subtract(upVec).subtract(cameraPos); + + RenderSystem.enableBlend(); + if (additive) { + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + } else { + RenderSystem.defaultBlendFunc(); + } + RenderSystem.depthMask(false); + RenderSystem.disableCull(); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderTexture(0, texture); + RenderSystem.setShaderColor(red, green, blue, alpha); + + BufferBuilder buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + buffer.addVertex(poseMatrix, (float) bottomLeft.x, (float) bottomLeft.y, (float) bottomLeft.z).setUv(0.0F, 1.0F); + buffer.addVertex(poseMatrix, (float) topLeft.x, (float) topLeft.y, (float) topLeft.z).setUv(0.0F, 0.0F); + buffer.addVertex(poseMatrix, (float) topRight.x, (float) topRight.y, (float) topRight.z).setUv(1.0F, 0.0F); + buffer.addVertex(poseMatrix, (float) bottomRight.x, (float) bottomRight.y, (float) bottomRight.z).setUv(1.0F, 1.0F); + MeshData mesh = buffer.build(); + if (mesh != null) { + BufferUploader.drawWithShader(mesh); + } + + RenderSystem.enableCull(); + RenderSystem.depthMask(true); + RenderSystem.disableBlend(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + } + + private static void drawTexturedPortal(Vec3 cameraPos, Matrix4f poseMatrix, PortalGunPortalEntity portal, int textureId, double offset, float red, float green, float blue, float alpha, boolean additive) { + Vec3 widthVec = portal.getWidthVec().normalize().scale(0.5D); + Vec3 upVec = portal.getUpVec().normalize().scale(1.0D); + Vec3 normalVec = portal.getNormalVec().normalize().scale(offset); + Vec3 center = portal.position().add(normalVec); + Vec3 bottomLeft = center.subtract(widthVec).subtract(upVec).subtract(cameraPos); + Vec3 topLeft = center.subtract(widthVec).add(upVec).subtract(cameraPos); + Vec3 topRight = center.add(widthVec).add(upVec).subtract(cameraPos); + Vec3 bottomRight = center.add(widthVec).subtract(upVec).subtract(cameraPos); + + RenderSystem.enableBlend(); + if (additive) { + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + } else { + RenderSystem.defaultBlendFunc(); + } + RenderSystem.depthMask(false); + RenderSystem.disableCull(); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderTexture(0, textureId); + RenderSystem.setShaderColor(red, green, blue, alpha); + + BufferBuilder buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + buffer.addVertex(poseMatrix, (float) bottomLeft.x, (float) bottomLeft.y, (float) bottomLeft.z).setUv(0.0F, 1.0F); + buffer.addVertex(poseMatrix, (float) topLeft.x, (float) topLeft.y, (float) topLeft.z).setUv(0.0F, 0.0F); + buffer.addVertex(poseMatrix, (float) topRight.x, (float) topRight.y, (float) topRight.z).setUv(1.0F, 0.0F); + buffer.addVertex(poseMatrix, (float) bottomRight.x, (float) bottomRight.y, (float) bottomRight.z).setUv(1.0F, 1.0F); + MeshData mesh = buffer.build(); + if (mesh != null) { + BufferUploader.drawWithShader(mesh); + } + + RenderSystem.enableCull(); + RenderSystem.depthMask(true); + RenderSystem.disableBlend(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + } + + private static final class PortalCamera extends Camera { + private void setup(net.minecraft.world.level.BlockGetter level, Entity cameraEntity, float partialTick, Vec3 position, Vec3 look, Vec3 up) { + super.setup(level, cameraEntity, false, false, partialTick); + Vec3 normalizedLook = look.normalize(); + Vec3 normalizedUp = up.subtract(normalizedLook.scale(up.dot(normalizedLook))).normalize(); + float yaw = PortalGunTransformUtil.yawFromLook(normalizedLook); + float pitch = PortalGunTransformUtil.pitchFromLook(normalizedLook); + this.setPosition(position); + this.setRotation(yaw, pitch); + Vec3 currentUp = new Vec3(this.getUpVector()).normalize(); + if (currentUp.dot(normalizedUp) < 0.0D) { + this.setRotation(yaw + 180.0F, -pitch); + } + } + } + + private record RenderContext(Vec3 cameraPos, Vec3 look, Vec3 up, Matrix4f viewMatrix) { + } + + private record ScreenClip(int x, int y, int width, int height) { + private int area() { + return this.width * this.height; + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunProjectileRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunProjectileRenderer.java new file mode 100644 index 00000000..e7a6721f --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunProjectileRenderer.java @@ -0,0 +1,80 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity; +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.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import org.joml.Matrix4f; + +public class PortalGunProjectileRenderer extends EntityRenderer { + private static final ResourceLocation BLUE_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/portal_gun_portal_blue.png"); + private static final ResourceLocation ORANGE_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/portal_gun_portal_orange.png"); + + public PortalGunProjectileRenderer(EntityRendererProvider.Context context) { + super(context); + } + + @Override + public void render(PortalGunProjectileEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { + poseStack.pushPose(); + poseStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); + float age = entity.tickCount + partialTick; + float pulse = 0.8F + 0.2F * (float) Math.sin(age * 0.9F); + float trailStretch = 1.1F + (float) Math.min(entity.getDeltaMovement().length() * 0.3D, 1.4D); + float baseScale = entity.getPortalSide() == com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity.PortalSide.BLUE ? 0.44F : 0.48F; + ResourceLocation texture = entity.getPortalSide() == com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity.PortalSide.BLUE ? BLUE_TEXTURE : ORANGE_TEXTURE; + float red = entity.getPortalSide() == com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity.PortalSide.BLUE ? 0.55F : 1.0F; + float green = entity.getPortalSide() == com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity.PortalSide.BLUE ? 0.82F : 0.56F; + float blue = entity.getPortalSide() == com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity.PortalSide.BLUE ? 1.0F : 0.18F; + + poseStack.scale(baseScale * trailStretch, baseScale, baseScale); + PoseStack.Pose pose = poseStack.last(); + Matrix4f matrix = pose.pose(); + VertexConsumer core = bufferSource.getBuffer(RenderType.entityTranslucent(texture)); + addQuad(core, pose, matrix, red, green, blue, 0.92F, packedLight, -0.9F, -0.5F, 0.9F, 0.5F); + VertexConsumer glow = bufferSource.getBuffer(RenderType.entityTranslucentEmissive(texture)); + addQuad(glow, pose, matrix, 1.0F, 1.0F, 1.0F, 0.8F * pulse, 0xF000F0, -1.15F, -0.7F, 1.15F, 0.7F); + + poseStack.mulPose(com.mojang.math.Axis.ZP.rotationDegrees(90.0F)); + pose = poseStack.last(); + matrix = pose.pose(); + core = bufferSource.getBuffer(RenderType.entityTranslucent(texture)); + addQuad(core, pose, matrix, red, green, blue, 0.74F, packedLight, -0.45F, -0.95F, 0.45F, 0.95F); + glow = bufferSource.getBuffer(RenderType.entityTranslucentEmissive(texture)); + addQuad(glow, pose, matrix, 1.0F, 1.0F, 1.0F, 0.52F * pulse, 0xF000F0, -0.62F, -1.15F, 0.62F, 1.15F); + poseStack.popPose(); + } + + @Override + protected int getBlockLightLevel(PortalGunProjectileEntity entity, BlockPos pos) { + return 15; + } + + @Override + public ResourceLocation getTextureLocation(PortalGunProjectileEntity entity) { + return entity.getPortalSide() == com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity.PortalSide.BLUE ? BLUE_TEXTURE : ORANGE_TEXTURE; + } + + private static void addQuad(VertexConsumer consumer, PoseStack.Pose pose, Matrix4f matrix, float red, float green, float blue, float alpha, int packedLight, float minX, float minY, float maxX, float maxY) { + addVertex(consumer, pose, matrix, minX, minY, 0.0F, 1.0F, red, green, blue, alpha, packedLight); + addVertex(consumer, pose, matrix, maxX, minY, 1.0F, 1.0F, red, green, blue, alpha, packedLight); + addVertex(consumer, pose, matrix, maxX, maxY, 1.0F, 0.0F, red, green, blue, alpha, packedLight); + addVertex(consumer, pose, matrix, minX, maxY, 0.0F, 0.0F, red, green, blue, alpha, packedLight); + } + + private static void addVertex(VertexConsumer consumer, PoseStack.Pose pose, Matrix4f matrix, float x, float y, float u, float v, float red, float green, float blue, float alpha, int packedLight) { + consumer.addVertex(matrix, x, y, 0.0F) + .setColor(red, green, blue, alpha) + .setUv(u, v) + .setOverlay(OverlayTexture.NO_OVERLAY) + .setLight(packedLight) + .setNormal(pose, 0.0F, 0.0F, 1.0F); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java index 3c999bd0..e57eccb9 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/creative/CreativeTabContents.java @@ -72,6 +72,40 @@ public final class CreativeTabContents { entry("peach_button", "building_blocks"), entry("peach_sign", "building_blocks"), entry("peach_hanging_sign", "building_blocks"), + entry("truffalo_log", "building_blocks"), + entry("truffalo_wood", "building_blocks"), + entry("stripped_truffalo_log", "building_blocks"), + entry("stripped_truffalo_wood", "building_blocks"), + entry("truffalo_planks", "building_blocks"), + entry("truffalo_stairs", "building_blocks"), + entry("truffalo_slab", "building_blocks"), + entry("truffalo_fence", "building_blocks"), + entry("truffalo_fence_gate", "building_blocks"), + entry("truffalo_boat", "building_blocks"), + entry("truffalo_chest_boat", "building_blocks"), + entry("truffalo_door", "building_blocks"), + entry("truffalo_trapdoor", "building_blocks"), + entry("truffalo_pressure_plate", "building_blocks"), + entry("truffalo_button", "building_blocks"), + entry("truffalo_sign", "building_blocks"), + entry("truffalo_hanging_sign", "building_blocks"), + entry("royal_log", "building_blocks"), + entry("royal_wood", "building_blocks"), + entry("stripped_royal_log", "building_blocks"), + entry("stripped_royal_wood", "building_blocks"), + entry("royal_planks", "building_blocks"), + entry("royal_stairs", "building_blocks"), + entry("royal_slab", "building_blocks"), + entry("royal_fence", "building_blocks"), + entry("royal_fence_gate", "building_blocks"), + entry("royal_boat", "building_blocks"), + entry("royal_chest_boat", "building_blocks"), + entry("royal_door", "building_blocks"), + entry("royal_trapdoor", "building_blocks"), + entry("royal_pressure_plate", "building_blocks"), + entry("royal_button", "building_blocks"), + entry("royal_sign", "building_blocks"), + entry("royal_hanging_sign", "building_blocks"), entry("shellstone", "building_blocks"), entry("shellstone_stairs", "building_blocks"), entry("shellstone_slab", "building_blocks"), @@ -254,8 +288,28 @@ public final class CreativeTabContents { entry("ouranwood_acorn", "natural_blocks"), entry("peach_leaves", "natural_blocks"), entry("peach_sapling", "natural_blocks"), + entry("truffalo_sapling", "natural_blocks"), + entry("royal_leaves", "natural_blocks"), + entry("royal_flowering_leaves", "natural_blocks"), + entry("royal_sapling", "natural_blocks"), entry("nadir_veil", "natural_blocks"), entry("nadir_sapling", "natural_blocks"), + entry("white_truffalo_tuft", "natural_blocks"), + entry("orange_truffalo_tuft", "natural_blocks"), + entry("magenta_truffalo_tuft", "natural_blocks"), + entry("light_blue_truffalo_tuft", "natural_blocks"), + entry("yellow_truffalo_tuft", "natural_blocks"), + entry("lime_truffalo_tuft", "natural_blocks"), + entry("pink_truffalo_tuft", "natural_blocks"), + entry("gray_truffalo_tuft", "natural_blocks"), + entry("light_gray_truffalo_tuft", "natural_blocks"), + entry("cyan_truffalo_tuft", "natural_blocks"), + entry("purple_truffalo_tuft", "natural_blocks"), + entry("blue_truffalo_tuft", "natural_blocks"), + entry("brown_truffalo_tuft", "natural_blocks"), + entry("green_truffalo_tuft", "natural_blocks"), + entry("red_truffalo_tuft", "natural_blocks"), + entry("black_truffalo_tuft", "natural_blocks"), entry("duplicator_log", "natural_blocks"), entry("duplicator_sapling", "natural_blocks"), entry("orange_milkweed", "natural_blocks"), @@ -300,6 +354,7 @@ public final class CreativeTabContents { entry("dead_star_coral_fan", "natural_blocks"), entry("dead_star_coral_block", "natural_blocks"), entry("duct_tape", "tools_and_utilities", "shears"), + entry("music_disc_underside", "tools_and_utilities"), entry("diamond_minecart", "tools_and_utilities", "minecart"), entry("bile_bucket", "tools_and_utilities"), entry("ichor_bucket", "tools_and_utilities"), @@ -419,6 +474,23 @@ public final class CreativeTabContents { entry("big_bertha_blade", "ingredients"), entry("big_bertha_handle", "ingredients"), entry("big_bertha_hilt", "ingredients"), + entry("hoverboard", "building_blocks"), + entry("hoverboard_white", "building_blocks"), + entry("hoverboard_orange", "building_blocks"), + entry("hoverboard_magenta", "building_blocks"), + entry("hoverboard_light_blue", "building_blocks"), + entry("hoverboard_yellow", "building_blocks"), + entry("hoverboard_lime", "building_blocks"), + entry("hoverboard_pink", "building_blocks"), + entry("hoverboard_gray", "building_blocks"), + entry("hoverboard_light_gray", "building_blocks"), + entry("hoverboard_cyan", "building_blocks"), + entry("hoverboard_purple", "building_blocks"), + entry("hoverboard_blue", "building_blocks"), + entry("hoverboard_brown", "building_blocks"), + entry("hoverboard_green", "building_blocks"), + entry("hoverboard_red", "building_blocks"), + entry("hoverboard_black", "building_blocks"), entry("easter_bunny_spawn_egg", "spawn_eggs"), entry("flying_squirrel_spawn_egg", "spawn_eggs"), entry("caterpillar_spawn_egg", "spawn_eggs"), diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HoverboardEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HoverboardEntity.java new file mode 100644 index 00000000..977ce215 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HoverboardEntity.java @@ -0,0 +1,243 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.mixins.LivingEntityJumpingAccessor; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +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.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +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.Mob; +import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.DyeColor; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +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 HoverboardEntity extends PathfinderMob implements GeoEntity { + private static final EntityDataAccessor COLOR = SynchedEntityData.defineId(HoverboardEntity.class, EntityDataSerializers.INT); + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation MOVE_ANIM = RawAnimation.begin().thenLoop("move"); + + private static final double MAX_HOVER_HEIGHT = 5.0D; + private static final double ACCELERATION = 0.08D; + private static final double MAX_SPEED = 1.8D; + private static final double ASCEND_SPEED = 0.15D; + private static final double DAMPING = 0.955D; + private static final double RIDER_Y_OFFSET = 0.65D; + private static final float RIDER_FORWARD_HEAD_OFFSET = 90.0F; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public HoverboardEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setNoGravity(true); + this.setPersistenceRequired(); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 6.0D); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (this.level().isClientSide || !this.isAlive()) { + return false; + } + if (this.isInvulnerableTo(source)) { + return false; + } + this.ejectPassengers(); + this.playSound(SoundEvents.WOOD_BREAK, 1.0F, 1.0F); + this.spawnAtLocation(this.getDropStack()); + this.discard(); + return true; + } + + @Override + protected void registerGoals() { + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(COLOR, -1); + } + + @Nullable + public DyeColor getColor() { + int id = this.entityData.get(COLOR); + return id < 0 ? null : DyeColor.byId(id); + } + + public void setColor(@Nullable DyeColor color) { + this.entityData.set(COLOR, color == null ? -1 : color.getId()); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + if (this.getColor() != null) { + tag.putString("Color", this.getColor().getName()); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.setColor(tag.contains("Color") ? DyeColor.byName(tag.getString("Color"), null) : null); + } + + @Override + protected InteractionResult mobInteract(Player player, InteractionHand hand) { + if (!this.isVehicle() && !player.isSecondaryUseActive()) { + if (!this.level().isClientSide) { + player.startRiding(this); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + return super.mobInteract(player, hand); + } + + @Override + @Nullable + public LivingEntity getControllingPassenger() { + Entity passenger = this.getFirstPassenger(); + return passenger instanceof Player player ? player : null; + } + + @Override + public boolean canAddPassenger(Entity passenger) { + return this.getPassengers().isEmpty(); + } + + @Override + protected void positionRider(Entity passenger, MoveFunction moveFunction) { + if (!this.hasPassenger(passenger)) { + return; + } + moveFunction.accept(passenger, this.getX(), this.getY() + RIDER_Y_OFFSET, this.getZ()); + } + + @Override + public void travel(Vec3 travelVector) { + if (this.getControllingPassenger() instanceof Player rider) { + this.setYRot(rider.getYRot()); + this.yRotO = this.getYRot(); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + this.setXRot(0.0F); + rider.setYHeadRot(rider.getYRot() + RIDER_FORWARD_HEAD_OFFSET); + + Vec3 look = Vec3.directionFromRotation(0.0F, this.getYRot()); + float forward = rider.zza; + boolean holdingJump = ((LivingEntityJumpingAccessor) rider).antarchy$isJumping(); + double ascend = holdingJump ? ASCEND_SPEED : (rider.isShiftKeyDown() ? -ASCEND_SPEED : 0.0D); + + double groundHeight = this.findGroundHeight(); + double maxY = groundHeight + MAX_HOVER_HEIGHT; + + Vec3 currentHorizontal = new Vec3(this.getDeltaMovement().x, 0.0D, this.getDeltaMovement().z); + Vec3 horizontalMotion = currentHorizontal.scale(DAMPING).add(look.scale(forward * ACCELERATION)); + + double horizontalSpeed = horizontalMotion.horizontalDistance(); + if (horizontalSpeed > MAX_SPEED) { + double scale = MAX_SPEED / horizontalSpeed; + horizontalMotion = new Vec3(horizontalMotion.x * scale, 0.0D, horizontalMotion.z * scale); + } + + double verticalMotion = ascend; + if (this.getY() >= maxY && verticalMotion > 0.0D) { + verticalMotion = 0.0D; + } + if (this.getY() <= groundHeight && verticalMotion < 0.0D) { + verticalMotion = 0.0D; + } + + this.setDeltaMovement(horizontalMotion.x, verticalMotion, horizontalMotion.z); + this.move(MoverType.SELF, this.getDeltaMovement()); + return; + } + + this.setDeltaMovement(this.getDeltaMovement().scale(DAMPING)); + this.move(MoverType.SELF, this.getDeltaMovement()); + } + + private double findGroundHeight() { + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(Mth.floor(this.getX()), Mth.floor(this.getY()), Mth.floor(this.getZ())); + int minY = this.level().getMinBuildHeight(); + while (pos.getY() > minY && this.level().getBlockState(pos).isAir()) { + pos.move(Direction.DOWN); + } + return pos.getY() + 1.0D; + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + public void die(DamageSource damageSource) { + super.die(damageSource); + if (!this.level().isClientSide) { + this.spawnAtLocation(this.getDropStack()); + } + } + + public ItemStack getDropStack() { + String path = this.getColor() == null ? "hoverboard" : "hoverboard_" + this.getColor().getName(); + Item item = BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); + return new ItemStack(item); + } + + @Override + public ItemStack getPickResult() { + return this.getDropStack(); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "movement", 0, this::movementController)); + } + + private PlayState movementController(AnimationState state) { + return state.setAndContinue(this.getDeltaMovement().horizontalDistanceSqr() > 0.0025D ? MOVE_ANIM : IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RoyalBoatEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RoyalBoatEntity.java new file mode 100644 index 00000000..0e914e66 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RoyalBoatEntity.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 RoyalBoatEntity extends Boat { + public RoyalBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "royal_boat")); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RoyalChestBoatEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RoyalChestBoatEntity.java new file mode 100644 index 00000000..ec5cb353 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RoyalChestBoatEntity.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 RoyalChestBoatEntity extends ChestBoat { + public RoyalChestBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "royal_chest_boat")); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TruffaloBoatEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TruffaloBoatEntity.java new file mode 100644 index 00000000..4ad8d50c --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TruffaloBoatEntity.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 TruffaloBoatEntity extends Boat { + public TruffaloBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "truffalo_boat")); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TruffaloChestBoatEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TruffaloChestBoatEntity.java new file mode 100644 index 00000000..cfe361e3 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/TruffaloChestBoatEntity.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 TruffaloChestBoatEntity extends ChestBoat { + public TruffaloChestBoatEntity(EntityType entityType, Level level) { + super(entityType, level); + this.setVariant(Type.OAK); + } + + @Override + public Item getDropItem() { + return BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "truffalo_chest_boat")); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/HoverboardItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/HoverboardItem.java new file mode 100644 index 00000000..5ac59576 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/HoverboardItem.java @@ -0,0 +1,74 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.HoverboardEntity; +import java.util.function.Predicate; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntitySelector; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.DyeColor; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +public class HoverboardItem extends Item { + private static final Predicate ENTITY_PREDICATE = EntitySelector.NO_SPECTATORS.and(Entity::isPickable); + + private final EntityType entityType; + @Nullable + private final DyeColor color; + + public HoverboardItem(EntityType entityType, @Nullable DyeColor color, Properties properties) { + super(properties); + this.entityType = entityType; + this.color = color; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + BlockHitResult hitResult = getPlayerPOVHitResult(level, player, ClipContext.Fluid.ANY); + if (hitResult.getType() == HitResult.Type.MISS) { + return InteractionResultHolder.pass(stack); + } + + Vec3 viewVector = player.getViewVector(1.0F); + for (Entity entity : level.getEntities(player, player.getBoundingBox().expandTowards(viewVector.scale(5.0D)).inflate(1.0D), ENTITY_PREDICATE)) { + if (entity.getBoundingBox().inflate(entity.getPickRadius()).contains(player.getEyePosition())) { + return InteractionResultHolder.pass(stack); + } + } + + if (hitResult.getType() != HitResult.Type.BLOCK) { + return InteractionResultHolder.pass(stack); + } + + HoverboardEntity hoverboard = new HoverboardEntity(this.entityType, level); + Vec3 spawnPos = hitResult.getLocation(); + hoverboard.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, player.getYRot(), 0.0F); + hoverboard.setColor(this.color); + if (!level.noCollision(hoverboard, hoverboard.getBoundingBox())) { + return InteractionResultHolder.fail(stack); + } + + if (!level.isClientSide) { + level.addFreshEntity(hoverboard); + level.gameEvent(player, GameEvent.ENTITY_PLACE, hitResult.getLocation()); + if (!player.getAbilities().instabuild) { + stack.consume(1, player); + } + } + + player.awardStat(Stats.ITEM_USED.get(this)); + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide()); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PortalGunItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PortalGunItem.java index d583ddd6..24386848 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PortalGunItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PortalGunItem.java @@ -1,14 +1,20 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalBaseBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalMasterBlockEntity; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; import com.craisinlord.antarchy.content.network.PortalGunPrimaryPayload; import com.craisinlord.antarchy.content.portalgun.PortalGunBlackHoleEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunPlacement; import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity; import com.craisinlord.antarchy.content.portalgun.PortalGunSavedData; +import java.util.HashSet; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.UUID; import java.util.function.Consumer; import java.util.function.Supplier; @@ -38,6 +44,9 @@ import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.UseAnim; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.BlockHitResult; @@ -58,17 +67,32 @@ public class PortalGunItem extends Item implements GeoItem { private static final String LED_CONTROLLER = "led_controller"; private static final String FIRE_CONTROLLER = "fire_controller"; private static final String LAST_SIDE_TAG = "antarchy.portal_gun_last_side"; + private static final String MOON_SIDE_TAG = "antarchy.portal_gun_moon_side"; + public static final String GUN_ID_TAG = "antarchy.portal_gun_id"; private static final ResourceLocation MODEL_LOCATION = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/portal_gun.geo.json"); private static final ResourceLocation TEXTURE_LOCATION = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/models/item/portal_gun.png"); private static final ResourceLocation ANIMATION_LOCATION = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/portal_gun.animation.json"); private final Supplier> portalType; private final Supplier> blackHoleType; + private final Supplier> projectileType; + private final Supplier portalMasterBlock; + private final Supplier portalBaseBlock; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - public PortalGunItem(Item.Properties properties, Supplier> portalType, Supplier> blackHoleType) { + public PortalGunItem( + Item.Properties properties, + Supplier> portalType, + Supplier> blackHoleType, + Supplier> projectileType, + Supplier portalMasterBlock, + Supplier portalBaseBlock + ) { super(properties); this.portalType = portalType; this.blackHoleType = blackHoleType; + this.projectileType = projectileType; + this.portalMasterBlock = portalMasterBlock; + this.portalBaseBlock = portalBaseBlock; GeoItem.registerSyncedAnimatable(this); } @@ -82,6 +106,7 @@ public class PortalGunItem extends Item implements GeoItem { if (player.isShiftKeyDown()) { PortalGunSavedData.clearAllPortals(serverLevel.getServer(), player.getUUID()); this.setLastSide(stack, null); + this.setMoonSide(stack, null); level.playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound("portal_fizzle", SoundEvents.ENDER_CHEST_CLOSE), SoundSource.PLAYERS, 0.6F, 1.0F); return InteractionResultHolder.consume(stack); } @@ -94,66 +119,105 @@ public class PortalGunItem extends Item implements GeoItem { } private boolean firePortal(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side) { - BlockHitResult hitResult = this.raycast(level, player); - if (hitResult.getType() == HitResult.Type.MISS) { - if (this.tryShootMoon(level, player, stack, side)) { + if (this.raycast(level, player).getType() == HitResult.Type.MISS) { + if (this.tryArmMoonShot(level, player, stack, side)) { return true; } level.playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound("portal_gun_invalid_surface", SoundEvents.DISPENSER_FAIL), SoundSource.PLAYERS, 0.55F, 1.0F); return false; } - this.spawnShotTrail(level, player, hitResult.getLocation(), side); - Placement placement = this.findPlacement(level, player, hitResult); - if (placement == null) { - level.playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound("portal_gun_invalid_surface", SoundEvents.DISPENSER_FAIL), SoundSource.PLAYERS, 0.55F, 1.0F); - return false; - } + this.triggerFireAnimation(level, player, stack); + this.setLastSide(stack, side); + stack.hurtAndBreak(1, player, EquipmentSlot.MAINHAND); + player.awardStat(Stats.ITEM_USED.get(this)); + player.getCooldowns().addCooldown(this, 6); + String firePath = side == PortalGunPortalEntity.PortalSide.BLUE ? "portal_gun_fire_blue" : "portal_gun_fire_orange"; + level.playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound(firePath, SoundEvents.BEACON_ACTIVATE), SoundSource.PLAYERS, 0.65F, side == PortalGunPortalEntity.PortalSide.BLUE ? 1.15F : 0.88F); + this.spawnProjectile(level, player, stack, side); + return true; + } + public void handlePortalImpact(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side, BlockHitResult hitResult, Vec3 impactPos) { + PortalGunPortalEntity existing = this.findPlacedPortal(level, player.getUUID(), side); + PortalGunPlacement placement = this.findPlacement(level, player, side, hitResult, existing); + if (placement == null) { + level.playSound(null, impactPos.x, impactPos.y, impactPos.z, PortalGunPortalEntity.sound("portal_gun_invalid_surface", SoundEvents.DISPENSER_FAIL), SoundSource.PLAYERS, 0.55F, 1.0F); + return; + } + if (existing != null) { + existing.discard(); + } + if (this.isMoonSideArmed(stack, side)) { + this.setMoonSide(stack, null); + } + if (this.isMoonSideArmed(stack, this.otherSide(side))) { + this.spawnBlackHole(level, player, stack, side, placement.center()); + return; + } PortalGunPortalEntity portal = new PortalGunPortalEntity(this.portalType.get(), level); - portal.configure(player.getUUID(), side, placement.facing(), placement.upAxis(), placement.supportOrigin()); + portal.configure(player.getUUID(), side, placement); portal.moveTo(placement.center().x, placement.center().y, placement.center().z, placement.yaw(), 0.0F); + if (!this.placePortalBlocks(level, player.getUUID(), side, portal, placement)) { + level.playSound(null, impactPos.x, impactPos.y, impactPos.z, PortalGunPortalEntity.sound("portal_gun_invalid_surface", SoundEvents.DISPENSER_FAIL), SoundSource.PLAYERS, 0.55F, 1.0F); + return; + } level.addFreshEntity(portal); PortalGunSavedData.setPortal(level.getServer(), player.getUUID(), side, portal.getUUID()); PortalGunPortalEntity other = this.findCounterpart(level, player.getUUID(), side); if (other != null) { portal.linkTo(other); other.linkTo(portal); + this.syncPortalBlocks(level, portal); + this.syncPortalBlocks(level, other); } + String openPath = side == PortalGunPortalEntity.PortalSide.BLUE ? "portal_open_blue" : "portal_open_orange"; + level.playSound(null, portal.getX(), portal.getY(), portal.getZ(), PortalGunPortalEntity.sound(openPath, SoundEvents.END_PORTAL_SPAWN), SoundSource.PLAYERS, 0.45F, side == PortalGunPortalEntity.PortalSide.BLUE ? 1.05F : 0.92F); + } + + public ItemStack findMatchingGunStack(Player player, UUID gunId) { + ItemStack mainHand = player.getMainHandItem(); + if (this.matchesGunId(mainHand, gunId)) { + return mainHand; + } + ItemStack offhand = player.getOffhandItem(); + if (this.matchesGunId(offhand, gunId)) { + return offhand; + } + for (int slot = 0; slot < player.getInventory().getContainerSize(); slot++) { + ItemStack stack = player.getInventory().getItem(slot); + if (this.matchesGunId(stack, gunId)) { + return stack; + } + } + return ItemStack.EMPTY; + } + + private boolean tryArmMoonShot(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side) { + if (!level.dimensionType().hasSkyLight() || !level.isNight() || player.getXRot() > -40.0F) { + return false; + } + PortalGunPortalEntity existing = this.findPlacedPortal(level, player.getUUID(), side); + if (existing != null) { + existing.discard(); + } + this.setMoonSide(stack, side); this.setLastSide(stack, side); this.triggerFireAnimation(level, player, stack); stack.hurtAndBreak(1, player, EquipmentSlot.MAINHAND); player.awardStat(Stats.ITEM_USED.get(this)); player.getCooldowns().addCooldown(this, 6); - String firePath = side == PortalGunPortalEntity.PortalSide.BLUE ? "portal_gun_fire_blue" : "portal_gun_fire_orange"; - String openPath = side == PortalGunPortalEntity.PortalSide.BLUE ? "portal_open_blue" : "portal_open_orange"; - level.playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound(firePath, SoundEvents.BEACON_ACTIVATE), SoundSource.PLAYERS, 0.65F, side == PortalGunPortalEntity.PortalSide.BLUE ? 1.15F : 0.88F); - level.playSound(null, portal.getX(), portal.getY(), portal.getZ(), PortalGunPortalEntity.sound(openPath, SoundEvents.END_PORTAL_SPAWN), SoundSource.PLAYERS, 0.45F, side == PortalGunPortalEntity.PortalSide.BLUE ? 1.05F : 0.92F); + level.playSound(null, player.getX(), player.getY(), player.getZ(), PortalGunPortalEntity.sound(side == PortalGunPortalEntity.PortalSide.BLUE ? "portal_gun_fire_blue" : "portal_gun_fire_orange", SoundEvents.BEACON_ACTIVATE), SoundSource.PLAYERS, 0.65F, side == PortalGunPortalEntity.PortalSide.BLUE ? 1.15F : 0.88F); + this.spawnShotTrail(level, player, player.getEyePosition().add(player.getLookAngle().scale(64.0D)), side); return true; } - private boolean tryShootMoon(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side) { - if (!level.dimensionType().hasSkyLight() || !level.isNight() || player.getXRot() > -40.0F) { - return false; - } - PortalGunPortalEntity counterpart = this.findCounterpart(level, player.getUUID(), side); - Vec3 spawnPos; - if (counterpart != null) { - spawnPos = counterpart.position(); - counterpart.discard(); - } else { - spawnPos = player.getEyePosition().add(player.getLookAngle().scale(20.0D)); - } + private boolean spawnBlackHole(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side, Vec3 spawnPos) { + this.setMoonSide(stack, null); PortalGunBlackHoleEntity blackHole = new PortalGunBlackHoleEntity(this.blackHoleType.get(), level); blackHole.configure(player.getUUID()); blackHole.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, 0.0F, 0.0F); level.addFreshEntity(blackHole); - this.setLastSide(stack, side); - this.triggerFireAnimation(level, player, stack); - stack.hurtAndBreak(1, player, EquipmentSlot.MAINHAND); - player.awardStat(Stats.ITEM_USED.get(this)); - player.getCooldowns().addCooldown(this, 6); level.playSound(null, spawnPos.x, spawnPos.y, spawnPos.z, PortalGunPortalEntity.sound("portal_gun_black_hole", SoundEvents.WARDEN_SONIC_BOOM), SoundSource.PLAYERS, 0.6F, 0.6F); - this.spawnShotTrail(level, player, spawnPos, side); return true; } @@ -170,6 +234,17 @@ public class PortalGunItem extends Item implements GeoItem { } } + private void spawnProjectile(ServerLevel level, Player player, ItemStack stack, PortalGunPortalEntity.PortalSide side) { + UUID gunId = this.ensureGunId(stack); + PortalGunProjectileEntity projectile = new PortalGunProjectileEntity(this.projectileType.get(), player, level); + projectile.configure(side, gunId, stack); + Vec3 look = player.getLookAngle(); + Vec3 start = player.getEyePosition().add(look.scale(0.4D)); + projectile.setPos(start.x, start.y, start.z); + projectile.setDeltaMovement(look.scale(2.5D)); + level.addFreshEntity(projectile); + } + private PortalGunPortalEntity findCounterpart(ServerLevel level, UUID owner, PortalGunPortalEntity.PortalSide side) { PortalGunPortalEntity.PortalSide otherSide = side == PortalGunPortalEntity.PortalSide.BLUE ? PortalGunPortalEntity.PortalSide.ORANGE : PortalGunPortalEntity.PortalSide.BLUE; Optional otherId = PortalGunSavedData.getPortalId(level.getServer(), owner, otherSide); @@ -180,37 +255,90 @@ public class PortalGunItem extends Item implements GeoItem { return entity instanceof PortalGunPortalEntity portal ? portal : null; } + private PortalGunPortalEntity findPlacedPortal(ServerLevel level, UUID owner, PortalGunPortalEntity.PortalSide side) { + Optional portalId = PortalGunSavedData.getPortalId(level.getServer(), owner, side); + if (portalId.isEmpty()) { + return null; + } + Entity entity = level.getEntity(portalId.get()); + return entity instanceof PortalGunPortalEntity portal ? portal : null; + } + + private PortalGunPortalEntity.PortalSide otherSide(PortalGunPortalEntity.PortalSide side) { + return side == PortalGunPortalEntity.PortalSide.BLUE ? PortalGunPortalEntity.PortalSide.ORANGE : PortalGunPortalEntity.PortalSide.BLUE; + } + private BlockHitResult raycast(Level level, Player player) { Vec3 start = player.getEyePosition(); Vec3 end = start.add(player.getLookAngle().scale(64.0D)); return level.clip(new ClipContext(start, end, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, player)); } - private Placement findPlacement(Level level, Player player, BlockHitResult hitResult) { + private PortalGunPlacement findPlacement(Level level, Player player, PortalGunPortalEntity.PortalSide side, BlockHitResult hitResult, PortalGunPortalEntity replacingPortal) { Direction facing = hitResult.getDirection(); - Direction heightAxis; - float yaw; - if (facing.getAxis() == Direction.Axis.Y) { - heightAxis = Direction.fromYRot(player.getYRot()); - yaw = heightAxis.toYRot(); - } else { - heightAxis = Direction.UP; - yaw = facing.toYRot(); - } + Direction heightAxis = this.resolveUpAxis(player, facing); + Direction widthAxis = PortalGunPlacement.widthAxis(facing, heightAxis); + float yaw = PortalGunPlacement.yawFor(facing, heightAxis); BlockPos hitPos = hitResult.getBlockPos(); - for (int offset = -1; offset <= 0; offset++) { - BlockPos supportOrigin = hitPos.relative(heightAxis, offset); - if (this.canPlaceAt(level, supportOrigin, facing, heightAxis)) { - Vec3 firstCellCenter = supportOrigin.relative(facing).getCenter(); - Vec3 halfStep = Vec3.atLowerCornerOf(heightAxis.getNormal()).scale(0.5D); - Vec3 center = firstCellCenter.add(halfStep); - return new Placement(center, facing, heightAxis, yaw, supportOrigin); + Vec3 hitLocation = hitResult.getLocation(); + UUID replacingPortalId = replacingPortal == null ? null : replacingPortal.getUUID(); + PortalGunPlacement bestPlacement = null; + double bestScore = Double.MAX_VALUE; + for (int widthOffset = -3; widthOffset <= 3; widthOffset++) { + for (int heightOffset = -4; heightOffset <= 3; heightOffset++) { + BlockPos supportOrigin = hitPos.relative(widthAxis, widthOffset).relative(heightAxis, heightOffset); + if (!this.canPlaceAt(level, player.getUUID(), side, supportOrigin, facing, heightAxis, replacingPortalId)) { + continue; + } + BlockPos masterPos = supportOrigin.relative(facing); + BlockPos basePos = masterPos.relative(heightAxis); + BlockPos[] portalSpots = new BlockPos[] {masterPos, basePos}; + Vec3 firstCellCenter = masterPos.getCenter(); + Vec3 center = firstCellCenter + .add(Vec3.atLowerCornerOf(heightAxis.getNormal()).scale(0.5D)) + .subtract(Vec3.atLowerCornerOf(facing.getNormal()).scale(0.5D)); + Vec3 local = hitLocation.subtract(center); + double widthLocal = local.dot(Vec3.atLowerCornerOf(widthAxis.getNormal())); + double heightLocal = local.dot(Vec3.atLowerCornerOf(heightAxis.getNormal())); + double depthLocal = local.dot(Vec3.atLowerCornerOf(facing.getNormal())); + double widthDistance = Math.max(0.0D, Math.abs(widthLocal) - 0.5D); + double heightDistance = Math.max(0.0D, Math.abs(heightLocal) - 1.0D); + double score = widthDistance * widthDistance + + heightDistance * heightDistance + + Math.abs(depthLocal) * 0.25D + + supportOrigin.distSqr(hitPos) * 0.12D + + Math.abs(widthOffset) * 0.04D + + Math.abs(heightOffset) * 0.025D + + (widthOffset != 0 || heightOffset != 0 ? 0.02D : 0.0D); + if (score < bestScore) { + bestScore = score; + Set compensatedSpots = new HashSet<>(); + if (widthOffset != 0 || heightOffset != 0) { + compensatedSpots.add(hitPos.relative(facing)); + compensatedSpots.add(masterPos); + compensatedSpots.add(basePos); + compensatedSpots.add(supportOrigin); + compensatedSpots.add(basePos.relative(facing.getOpposite())); + } + bestPlacement = new PortalGunPlacement(center, facing, heightAxis, widthAxis, yaw, supportOrigin, masterPos, basePos, portalSpots, compensatedSpots); + } } } - return null; + return bestPlacement; } - private boolean canPlaceAt(Level level, BlockPos supportOrigin, Direction facing, Direction heightAxis) { + private Direction resolveUpAxis(Player player, Direction facing) { + if (facing.getAxis() != Direction.Axis.Y) { + return Direction.UP; + } + Direction horizontal = player.getDirection(); + if (horizontal.getAxis() == Direction.Axis.Y) { + return Direction.NORTH; + } + return horizontal.getOpposite(); + } + + private boolean canPlaceAt(Level level, UUID ownerId, PortalGunPortalEntity.PortalSide side, BlockPos supportOrigin, Direction facing, Direction heightAxis, UUID replacingPortalId) { for (int h = 0; h < 2; h++) { BlockPos supportPos = supportOrigin.relative(heightAxis, h); BlockPos airPos = supportPos.relative(facing); @@ -220,7 +348,7 @@ public class PortalGunItem extends Item implements GeoItem { if (!supportState.isFaceSturdy(level, supportPos, facing)) { return false; } - if (!airState.isAir() && !airState.canBeReplaced()) { + if (!this.isPortalSpaceAvailable(level, airPos, airState, ownerId, side, replacingPortalId)) { return false; } if (!fluidState.isEmpty()) { @@ -230,6 +358,53 @@ public class PortalGunItem extends Item implements GeoItem { return true; } + private boolean isPortalSpaceAvailable(Level level, BlockPos pos, BlockState state, UUID ownerId, PortalGunPortalEntity.PortalSide side, UUID replacingPortalId) { + if (state.isAir() || state.canBeReplaced()) { + return true; + } + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof PortalGunPortalMasterBlockEntity master) { + return ownerId != null + && ownerId.equals(master.getOwnerId()) + && master.getSide() == side + && (replacingPortalId == null || replacingPortalId.equals(master.getPortalId())); + } + if (blockEntity instanceof PortalGunPortalBaseBlockEntity base) { + return ownerId != null + && ownerId.equals(base.getOwnerId()) + && base.getSide() == side + && (replacingPortalId == null || replacingPortalId.equals(base.getPortalId())); + } + return false; + } + + private boolean placePortalBlocks(ServerLevel level, UUID ownerId, PortalGunPortalEntity.PortalSide side, PortalGunPortalEntity portal, PortalGunPlacement placement) { + if (!level.setBlock(placement.masterPos(), this.portalMasterBlock.get().defaultBlockState(), 3)) { + return false; + } + if (!level.setBlock(placement.basePos(), this.portalBaseBlock.get().defaultBlockState(), 3)) { + level.setBlock(placement.masterPos(), Blocks.AIR.defaultBlockState(), 3); + return false; + } + if (!(level.getBlockEntity(placement.masterPos()) instanceof PortalGunPortalMasterBlockEntity master) || !(level.getBlockEntity(placement.basePos()) instanceof PortalGunPortalBaseBlockEntity base)) { + level.setBlock(placement.masterPos(), Blocks.AIR.defaultBlockState(), 3); + level.setBlock(placement.basePos(), Blocks.AIR.defaultBlockState(), 3); + return false; + } + master.configure(ownerId, portal.getUUID(), side, placement.facing(), placement.upAxis(), placement.basePos(), placement.portalSpots(), placement.compensatedSpots(), level.getServer().getTickCount()); + base.configure(ownerId, portal.getUUID(), side, placement.masterPos()); + return true; + } + + private void syncPortalBlocks(ServerLevel level, PortalGunPortalEntity portal) { + if (level.getBlockEntity(portal.getMasterPos()) instanceof PortalGunPortalMasterBlockEntity master) { + master.updatePair(portal.getLinkedPortalId(), portal.getPairTime()); + } + if (level.getBlockEntity(portal.getBasePos()) instanceof PortalGunPortalBaseBlockEntity base) { + base.updatePair(portal.getLinkedPortalId(), portal.getPairTime()); + } + } + private void setLastSide(ItemStack stack, PortalGunPortalEntity.PortalSide side) { if (side == null) { net.minecraft.world.item.component.CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> tag.remove(LAST_SIDE_TAG)); @@ -238,6 +413,14 @@ public class PortalGunItem extends Item implements GeoItem { net.minecraft.world.item.component.CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> tag.putString(LAST_SIDE_TAG, side.name())); } + private void setMoonSide(ItemStack stack, PortalGunPortalEntity.PortalSide side) { + if (side == null) { + net.minecraft.world.item.component.CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> tag.remove(MOON_SIDE_TAG)); + return; + } + net.minecraft.world.item.component.CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> tag.putString(MOON_SIDE_TAG, side.name())); + } + private PortalGunPortalEntity.PortalSide getLastSide(ItemStack stack) { net.minecraft.world.item.component.CustomData customData = stack.get(DataComponents.CUSTOM_DATA); if (customData == null) { @@ -253,6 +436,33 @@ public class PortalGunItem extends Item implements GeoItem { return null; } + private boolean isMoonSideArmed(ItemStack stack, PortalGunPortalEntity.PortalSide side) { + net.minecraft.world.item.component.CustomData customData = stack.get(DataComponents.CUSTOM_DATA); + if (customData == null) { + return false; + } + String sideName = customData.copyTag().getString(MOON_SIDE_TAG); + return side.name().equals(sideName); + } + + private UUID ensureGunId(ItemStack stack) { + net.minecraft.world.item.component.CustomData customData = stack.get(DataComponents.CUSTOM_DATA); + if (customData != null && customData.copyTag().hasUUID(GUN_ID_TAG)) { + return customData.copyTag().getUUID(GUN_ID_TAG); + } + UUID gunId = UUID.randomUUID(); + net.minecraft.world.item.component.CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> tag.putUUID(GUN_ID_TAG, gunId)); + return gunId; + } + + private boolean matchesGunId(ItemStack stack, UUID gunId) { + if (stack.isEmpty() || stack.getItem() != this) { + return false; + } + net.minecraft.world.item.component.CustomData customData = stack.get(DataComponents.CUSTOM_DATA); + return customData != null && customData.copyTag().hasUUID(GUN_ID_TAG) && gunId.equals(customData.copyTag().getUUID(GUN_ID_TAG)); + } + private void triggerFireAnimation(ServerLevel level, LivingEntity livingEntity, ItemStack stack) { long animatableId = GeoItem.getOrAssignId(stack, level); triggerAnim(livingEntity, animatableId, FIRE_CONTROLLER, "fire"); @@ -302,6 +512,4 @@ public class PortalGunItem extends Item implements GeoItem { }); } - private record Placement(Vec3 center, Direction facing, Direction upAxis, float yaw, BlockPos supportOrigin) { - } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalBoatOnlyItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalBoatOnlyItem.java new file mode 100644 index 00000000..2ad9ae00 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalBoatOnlyItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.RoyalBoatEntity; +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 RoyalBoatOnlyItem extends OuranwoodBoatItem { + private final EntityType entityType; + + public RoyalBoatOnlyItem(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(); + RoyalBoatEntity boat = new RoyalBoatEntity(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-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalChestBoatItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalChestBoatItem.java new file mode 100644 index 00000000..e22aac82 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalChestBoatItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.RoyalChestBoatEntity; +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 RoyalChestBoatItem extends OuranwoodBoatItem { + private final EntityType entityType; + + public RoyalChestBoatItem(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(); + RoyalChestBoatEntity boat = new RoyalChestBoatEntity(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-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloBoatOnlyItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloBoatOnlyItem.java new file mode 100644 index 00000000..985a1b1b --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloBoatOnlyItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.TruffaloBoatEntity; +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 TruffaloBoatOnlyItem extends OuranwoodBoatItem { + private final EntityType entityType; + + public TruffaloBoatOnlyItem(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(); + TruffaloBoatEntity boat = new TruffaloBoatEntity(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-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloChestBoatItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloChestBoatItem.java new file mode 100644 index 00000000..6ddce3c4 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TruffaloChestBoatItem.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.content.item; + +import com.craisinlord.antarchy.content.entity.TruffaloChestBoatEntity; +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 TruffaloChestBoatItem extends OuranwoodBoatItem { + private final EntityType entityType; + + public TruffaloChestBoatItem(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(); + TruffaloChestBoatEntity boat = new TruffaloChestBoatEntity(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-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookItem.java index ebae707b..11a7a66d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookItem.java @@ -36,6 +36,7 @@ public final class WormHookItem extends Item { WormHookProjectileEntity hook = new WormHookProjectileEntity(AntarchyObjects.WORM_HOOK_PROJECTILE.get(), player, level); hook.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, 2.2F, 0.5F); level.addFreshEntity(hook); + WormHookTetherManager.launch(serverPlayer, hook); stack.hurtAndBreak(1, serverPlayer, LivingEntity.getSlotForHand(hand)); level.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.FISHING_BOBBER_THROW, SoundSource.PLAYERS, 0.7F, 0.9F); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookTetherManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookTetherManager.java index c0bb2f67..a77a701d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookTetherManager.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookTetherManager.java @@ -17,12 +17,16 @@ import net.minecraft.world.phys.Vec3; * a rope anchored to a stuck {@link WormHookProjectileEntity}, wrapping the rope around block * corners via {@link WormHookRope} so the swing radius shortens realistically when the player * swings around an obstacle. + * + * A tether entry is created the moment the hook is thrown (so the rope can be rendered following + * the flying projectile) and only gains real swing physics once the hook sticks into a block. */ public final class WormHookTetherManager { - private static final double DEFAULT_MAX_LEN = 24.0D; private static final double MIN_LEN = 2.0D; private static final double REEL_SPEED = 0.12D; + private static final double REEL_PULL_STRENGTH = 0.16D; private static final double BREAK_RANGE_MULTIPLIER = 1.5D; + private static final double DEFAULT_BREAK_RANGE = 48.0D; private static final double SNAP_BUFFER = 4.0D; private static final double PULL_CORRECTION = 0.35D; @@ -44,18 +48,28 @@ public final class WormHookTetherManager { return hook instanceof WormHookProjectileEntity wormHook ? wormHook : null; } - public static boolean attach(ServerPlayer player, WormHookProjectileEntity hook) { + /** Registers the hook the moment it's thrown, purely so the rope can be rendered following it. */ + public static void launch(ServerPlayer player, WormHookProjectileEntity hook) { clear(player); + TETHERS.put(player.getUUID(), new TetherState(hook.getId())); + WormHookTetherSync.send(player, hook.getId()); + } - double dist = player.getEyePosition().distanceTo(hook.position()); - if (dist < MIN_LEN) { + /** Called once the hook sticks into a block; turns the cosmetic tether into real swing physics. */ + public static boolean attach(ServerPlayer player, WormHookProjectileEntity hook) { + TetherState state = TETHERS.get(player.getUUID()); + if (state == null || state.hookEntityId != hook.getId()) { return false; } - TetherState state = new TetherState(hook.getId(), Math.max(DEFAULT_MAX_LEN, dist)); + double dist = player.getEyePosition().distanceTo(hook.position()); + if (dist < MIN_LEN) { + clear(player); + return false; + } + + state.maxLen = Math.max(MIN_LEN, dist); state.rope = new WormHookRope(hook.position(), player.getEyePosition()); - TETHERS.put(player.getUUID(), state); - WormHookTetherSync.send(player, hook.getId()); return true; } @@ -90,7 +104,13 @@ public final class WormHookTetherManager { return; } - if (player.isShiftKeyDown()) { + if (state.rope == null) { + // Hook is still flying; nothing to simulate yet, just tracking it for the render sync. + return; + } + + boolean reeling = player.isShiftKeyDown(); + if (reeling) { state.maxLen = Math.max(MIN_LEN, state.maxLen - REEL_SPEED); } @@ -109,6 +129,19 @@ public final class WormHookTetherManager { return; } + Vec3 towardPivot = toPlayer.scale(1.0D / dist); + + // Sneaking actively winds the player in toward the anchor, not just shortening + // the max length (which alone has no effect until the rope goes taut). + if (reeling && dist > MIN_LEN) { + Vec3 pull = towardPivot.scale(-REEL_PULL_STRENGTH); + Vec3 reelMotion = player.getDeltaMovement().add(pull); + reelMotion = new Vec3(reelMotion.x, Mth.clamp(reelMotion.y, -0.6D, 0.6D), reelMotion.z); + player.setDeltaMovement(reelMotion); + player.hurtMarked = true; + player.fallDistance = 0; + } + if (dist <= remaining) { return; } @@ -121,14 +154,13 @@ public final class WormHookTetherManager { return; } - Vec3 direction = toPlayer.scale(1.0D / dist); Vec3 motion = player.getDeltaMovement(); - double outward = motion.dot(direction); + double outward = motion.dot(towardPivot); if (outward > 0) { - motion = motion.subtract(direction.scale(outward)); + motion = motion.subtract(towardPivot.scale(outward)); } - Vec3 correction = direction.scale(-overshoot * PULL_CORRECTION); + Vec3 correction = towardPivot.scale(-overshoot * PULL_CORRECTION); Vec3 newMotion = motion.add(correction); newMotion = new Vec3(newMotion.x, Mth.clamp(newMotion.y, -1.0D, 1.0D), newMotion.z); player.setDeltaMovement(newMotion); @@ -137,12 +169,11 @@ public final class WormHookTetherManager { } private static boolean isValid(ServerPlayer player, WormHookProjectileEntity hook, TetherState state) { - double breakRange = state.maxLen * BREAK_RANGE_MULTIPLIER; + double breakRange = (state.rope == null ? DEFAULT_BREAK_RANGE : state.maxLen) * BREAK_RANGE_MULTIPLIER; return player.isAlive() && hook != null && hook.isAlive() && !hook.isRemoved() - && hook.isStuck() && player.level() == hook.level() && isHoldingHook(player) && player.distanceToSqr(hook) <= breakRange * breakRange; @@ -158,9 +189,8 @@ public final class WormHookTetherManager { private double maxLen; private WormHookRope rope; - private TetherState(int hookEntityId, double maxLen) { + private TetherState(int hookEntityId) { this.hookEntityId = hookEntityId; - this.maxLen = maxLen; } } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunCollisionHelper.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunCollisionHelper.java new file mode 100644 index 00000000..b826c81f --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunCollisionHelper.java @@ -0,0 +1,203 @@ +package com.craisinlord.antarchy.content.portalgun; + +import java.util.List; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public final class PortalGunCollisionHelper { + private static final double SEARCH_PADDING = 1.5D; + private static final double PLANE_TOLERANCE = 0.06D; + private static final double EDGE_PADDING = 0.2D; + private static final double DEPTH_PADDING = 0.45D; + private static final double BORDER_TOLERANCE = 0.02D; + private static final double BORDER_THICKNESS = 0.0125D; + + private PortalGunCollisionHelper() { + } + + public static Vec3 resolveCollision(Entity entity, AABB startBox, Vec3 movement, Vec3 collided) { + if (movement.lengthSqr() <= 1.0E-7D) { + return collided; + } + AABB pathBox = startBox.expandTowards(movement).inflate(SEARCH_PADDING); + List nearby = entity.level().getEntities(entity, pathBox, candidate -> candidate instanceof PortalGunPortalEntity && candidate.isAlive()); + if (nearby.isEmpty()) { + return collided; + } + Vec3 adjusted = collided; + for (Entity candidate : nearby) { + PortalGunPortalEntity portal = (PortalGunPortalEntity) candidate; + Vec3 candidateAdjusted = resolveCollisionAgainstPortal(entity, startBox, movement, adjusted, portal); + if (candidateAdjusted.distanceToSqr(movement) < adjusted.distanceToSqr(movement)) { + adjusted = candidateAdjusted; + } + } + return adjusted; + } + + private static Vec3 resolveCollisionAgainstPortal(Entity entity, AABB startBox, Vec3 movement, Vec3 collided, PortalGunPortalEntity portal) { + PortalGunWorldPortalShape shape = portal.getWorldPortalShape(); + Vec3 normal = portal.getNormalVec().normalize(); + double desiredNormal = movement.dot(normal); + double collidedNormal = collided.dot(normal); + if (desiredNormal >= -1.0E-5D || desiredNormal >= collidedNormal - 1.0E-5D) { + return collided; + } + if (!canUsePortalPassThrough(entity, startBox, movement, portal, shape)) { + return collided; + } + double restoreAmount = desiredNormal - collidedNormal; + Vec3 adjusted = collided.add(normal.scale(restoreAmount)); + return applyBorderCollision(entity, startBox, adjusted, portal); + } + + private static boolean canUsePortalPassThrough(Entity entity, AABB startBox, Vec3 movement, PortalGunPortalEntity portal, PortalGunWorldPortalShape shape) { + AABB endBox = startBox.move(movement); + if (!portal.getPortalInsides(entity).intersects(startBox) + && !portal.getPortalInsides(entity).intersects(endBox) + && !intersectsPortalWindow(startBox, shape) + && !intersectsPortalWindow(endBox, shape) + && !segmentIntersectsPortalWindow(shape, startBox, endBox)) { + return false; + } + if (crossesPortal(shape, entity, startBox, movement)) { + return true; + } + Vec3 startCenter = startBox.getCenter(); + Vec3 endCenter = endBox.getCenter(); + PortalGunWorldPortalShape.PortalLocalCoords startCoords = shape.localCoords(startCenter); + PortalGunWorldPortalShape.PortalLocalCoords endCoords = shape.localCoords(endCenter); + return startCoords.depth() < 0.0D + && endCoords.depth() <= PLANE_TOLERANCE + && Math.abs(endCoords.horizontal()) <= shape.halfWidth() + EDGE_PADDING + && Math.abs(endCoords.vertical()) <= shape.halfHeight() + EDGE_PADDING + && projectedWindowOverlap(shape, startBox, endBox); + } + + private static boolean intersectsPortalWindow(AABB box, PortalGunWorldPortalShape shape) { + for (Vec3 corner : corners(box)) { + PortalGunWorldPortalShape.PortalLocalCoords coords = shape.localCoords(corner); + if (Math.abs(coords.horizontal()) <= shape.halfWidth() + EDGE_PADDING + && Math.abs(coords.vertical()) <= shape.halfHeight() + EDGE_PADDING + && coords.depth() >= -DEPTH_PADDING + && coords.depth() <= PLANE_TOLERANCE) { + return true; + } + } + return false; + } + + private static boolean segmentIntersectsPortalWindow(PortalGunWorldPortalShape shape, AABB startBox, AABB endBox) { + for (Vec3 startCorner : corners(startBox)) { + Vec3 endCorner = matchSample(startCorner, startBox, endBox); + if (shape.crosses(startCorner, endCorner)) { + return true; + } + } + return false; + } + + private static boolean projectedWindowOverlap(PortalGunWorldPortalShape shape, AABB startBox, AABB endBox) { + double minHorizontal = Double.POSITIVE_INFINITY; + double maxHorizontal = Double.NEGATIVE_INFINITY; + double minVertical = Double.POSITIVE_INFINITY; + double maxVertical = Double.NEGATIVE_INFINITY; + for (Vec3 corner : corners(startBox)) { + PortalGunWorldPortalShape.PortalLocalCoords coords = shape.localCoords(corner); + minHorizontal = Math.min(minHorizontal, coords.horizontal()); + maxHorizontal = Math.max(maxHorizontal, coords.horizontal()); + minVertical = Math.min(minVertical, coords.vertical()); + maxVertical = Math.max(maxVertical, coords.vertical()); + } + for (Vec3 corner : corners(endBox)) { + PortalGunWorldPortalShape.PortalLocalCoords coords = shape.localCoords(corner); + minHorizontal = Math.min(minHorizontal, coords.horizontal()); + maxHorizontal = Math.max(maxHorizontal, coords.horizontal()); + minVertical = Math.min(minVertical, coords.vertical()); + maxVertical = Math.max(maxVertical, coords.vertical()); + } + return maxHorizontal >= -shape.halfWidth() - BORDER_TOLERANCE + && minHorizontal <= shape.halfWidth() + BORDER_TOLERANCE + && maxVertical >= -shape.halfHeight() - BORDER_TOLERANCE + && minVertical <= shape.halfHeight() + BORDER_TOLERANCE; + } + + private static Vec3 applyBorderCollision(Entity entity, AABB startBox, Vec3 movement, PortalGunPortalEntity portal) { + if (movement.lengthSqr() <= 1.0E-7D) { + return movement; + } + AABB endBox = startBox.move(movement); + if (!portal.getPortalInsides(entity).intersects(startBox) + && !portal.getPortalInsides(entity).intersects(endBox) + && !intersectsPortalWindow(startBox, portal.getWorldPortalShape()) + && !intersectsPortalWindow(endBox, portal.getWorldPortalShape())) { + return movement; + } + List shapes = portal.getWorldPortalShape().getCollisionBoundaries(BORDER_THICKNESS).stream() + .map(Shapes::create) + .toList(); + Vec3 collided = Entity.collideBoundingBox(entity, movement, startBox, entity.level(), shapes); + return collided.distanceToSqr(movement) < 1.0E-7D ? movement : collided; + } + + private static boolean crossesPortal(PortalGunWorldPortalShape shape, Entity entity, AABB startBox, Vec3 movement) { + AABB endBox = startBox.move(movement); + for (Vec3 startSample : portalSamples(entity, startBox, true)) { + Vec3 endSample = matchSample(startSample, startBox, endBox); + if (shape.crosses(startSample, endSample)) { + return true; + } + } + return false; + } + + private static List portalSamples(Entity entity, AABB box, boolean includeEye) { + Vec3 center = new Vec3((box.minX + box.maxX) * 0.5D, (box.minY + box.maxY) * 0.5D, (box.minZ + box.maxZ) * 0.5D); + Vec3 topCenter = new Vec3(center.x, box.maxY, center.z); + Vec3 bottomCenter = new Vec3(center.x, box.minY, center.z); + if (includeEye) { + Vec3 eye = new Vec3(entity.getX(), entity.getY() + entity.getEyeHeight(), entity.getZ()); + return List.of(center, eye, topCenter, bottomCenter); + } + return List.of(center, topCenter, bottomCenter); + } + + private static Vec3 matchSample(Vec3 startSample, AABB startBox, AABB endBox) { + double xLerp = axisRatio(startSample.x, startBox.minX, startBox.maxX); + double yLerp = axisRatio(startSample.y, startBox.minY, startBox.maxY); + double zLerp = axisRatio(startSample.z, startBox.minZ, startBox.maxZ); + return new Vec3( + lerp(endBox.minX, endBox.maxX, xLerp), + lerp(endBox.minY, endBox.maxY, yLerp), + lerp(endBox.minZ, endBox.maxZ, zLerp) + ); + } + + private static double axisRatio(double value, double min, double max) { + double size = max - min; + if (Math.abs(size) < 1.0E-6D) { + return 0.5D; + } + return (value - min) / size; + } + + private static double lerp(double min, double max, double delta) { + return min + (max - min) * delta; + } + + private static Vec3[] corners(AABB box) { + return new Vec3[] { + new Vec3(box.minX, box.minY, box.minZ), + new Vec3(box.minX, box.minY, box.maxZ), + new Vec3(box.minX, box.maxY, box.minZ), + new Vec3(box.minX, box.maxY, box.maxZ), + new Vec3(box.maxX, box.minY, box.minZ), + new Vec3(box.maxX, box.minY, box.maxZ), + new Vec3(box.maxX, box.maxY, box.minZ), + new Vec3(box.maxX, box.maxY, box.maxZ) + }; + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPlacement.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPlacement.java new file mode 100644 index 00000000..944f4291 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPlacement.java @@ -0,0 +1,50 @@ +package com.craisinlord.antarchy.content.portalgun; + +import java.util.Set; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.Vec3; + +public record PortalGunPlacement( + Vec3 center, + Direction facing, + Direction upAxis, + Direction widthAxis, + float yaw, + BlockPos supportOrigin, + BlockPos masterPos, + BlockPos basePos, + BlockPos[] portalSpots, + Set compensatedSpots +) { + public static PortalGunPlacement fromStored(Direction facing, Direction upAxis, BlockPos masterPos, BlockPos basePos, Set compensatedSpots) { + Direction widthAxis = widthAxis(facing, upAxis); + BlockPos supportOrigin = masterPos.relative(facing.getOpposite()); + Vec3 center = masterPos.getCenter() + .add(Vec3.atLowerCornerOf(upAxis.getNormal()).scale(0.5D)) + .subtract(Vec3.atLowerCornerOf(facing.getNormal()).scale(0.5D)); + return new PortalGunPlacement( + center, + facing, + upAxis, + widthAxis, + yawFor(facing, upAxis), + supportOrigin, + masterPos, + basePos, + new BlockPos[] {masterPos, basePos}, + compensatedSpots + ); + } + + public static Direction widthAxis(Direction facing, Direction upAxis) { + Vec3 normal = Vec3.atLowerCornerOf(facing.getNormal()); + Vec3 up = Vec3.atLowerCornerOf(upAxis.getNormal()); + Vec3 width = normal.cross(up); + return Direction.getNearest(width.x, width.y, width.z); + } + + public static float yawFor(Direction facing, Direction upAxis) { + return facing.getAxis() == Direction.Axis.Y ? upAxis.toYRot() : facing.toYRot(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java index 785004a9..655693f9 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java @@ -1,12 +1,22 @@ package com.craisinlord.antarchy.content.portalgun; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalBaseBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalMasterBlockEntity; +import com.craisinlord.antarchy.mixins.AbstractArrowAccessor; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.UUID; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; @@ -15,16 +25,18 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; 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.player.Player; +import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import org.joml.Quaternionf; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.AnimatableManager; @@ -51,15 +63,21 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { private static final int CLOSE_TICKS = 10; private static final int MAX_LIFETIME_TICKS = 20 * 60 * 20; private static final int TELEPORT_COOLDOWN_TICKS = 15; + private static final double PLAYER_PORTAL_INSIDE_SHIFT = 0.05D; private static final double HALF_WIDTH = 0.5D; private static final double HALF_HEIGHT = 1.0D; private static final double HALF_DEPTH = 0.35D; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private final Map teleportCooldowns = new HashMap<>(); private UUID ownerId; private UUID linkedPortalId; private int ageTicks; + private int pairTime; private BlockPos supportOrigin = BlockPos.ZERO; - private static final java.util.Map TELEPORT_COOLDOWNS = new java.util.HashMap<>(); + private BlockPos masterPos = BlockPos.ZERO; + private BlockPos basePos = BlockPos.ZERO; + private BlockPos[] portalSpots = new BlockPos[] {BlockPos.ZERO, BlockPos.ZERO}; + private Set compensatedSpots = Set.of(); public PortalGunPortalEntity(EntityType entityType, Level level) { super(entityType, level); @@ -76,16 +94,26 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { builder.define(CLOSING, false); } - public void configure(UUID ownerId, PortalSide side, Direction facing, Direction upAxis, BlockPos supportOrigin) { + public void configure(UUID ownerId, PortalSide side, PortalGunPlacement placement) { this.ownerId = ownerId; this.entityData.set(SIDE, side.ordinal()); - this.entityData.set(FACING, facing.get3DDataValue()); - this.entityData.set(UP_AXIS, upAxis.get3DDataValue()); - this.supportOrigin = supportOrigin.immutable(); + this.entityData.set(FACING, placement.facing().get3DDataValue()); + this.entityData.set(UP_AXIS, placement.upAxis().get3DDataValue()); + this.supportOrigin = placement.supportOrigin().immutable(); + this.masterPos = placement.masterPos().immutable(); + this.basePos = placement.basePos().immutable(); + this.portalSpots = new BlockPos[] {placement.portalSpots()[0].immutable(), placement.portalSpots()[1].immutable()}; + this.compensatedSpots = Set.copyOf(placement.compensatedSpots()); } public void linkTo(PortalGunPortalEntity other) { this.linkedPortalId = other.getUUID(); + this.pairTime = (int) this.level().getGameTime(); + } + + public void restorePair(UUID linkedPortalId, int pairTime) { + this.linkedPortalId = linkedPortalId; + this.pairTime = pairTime; } public PortalSide getPortalSide() { @@ -101,6 +129,46 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { return Direction.from3DDataValue(this.entityData.get(UP_AXIS)); } + public UUID getLinkedPortalId() { + return this.linkedPortalId; + } + + public BlockPos getMasterPos() { + return this.masterPos; + } + + public UUID getOwnerId() { + return this.ownerId; + } + + public BlockPos getBasePos() { + return this.basePos; + } + + public BlockPos[] getPortalSpots() { + return new BlockPos[] {this.portalSpots[0], this.portalSpots[1]}; + } + + public Set getCompensatedSpots() { + return Set.copyOf(this.compensatedSpots); + } + + public int getPairTime() { + return this.pairTime; + } + + public PortalGunPortalEntity getLinkedPortal() { + if (this.linkedPortalId == null) { + return null; + } + List entities = this.level().getEntities(this, new AABB(-3.0E7D, -3.0E7D, -3.0E7D, 3.0E7D, 3.0E7D, 3.0E7D), entity -> this.linkedPortalId.equals(entity.getUUID())); + if (entities.isEmpty()) { + return null; + } + Entity entity = entities.getFirst(); + return entity instanceof PortalGunPortalEntity portal ? portal : null; + } + public Vec3 getNormalVec() { return Vec3.atLowerCornerOf(this.getFacingDirection().getNormal()); } @@ -113,16 +181,125 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { return this.getNormalVec().cross(this.getUpVec()).normalize(); } + public PortalGunWorldPortalShape getWorldPortalShape() { + return new PortalGunWorldPortalShape(this.position(), this.getNormalVec().normalize(), this.getUpVec().normalize(), this.getWidthVec().normalize(), HALF_WIDTH, HALF_HEIGHT, HALF_DEPTH); + } + + public AABB getPlane() { + return this.getWorldPortalShape().getPlane(); + } + + public AABB getFlatPlane() { + return this.getWorldPortalShape().getFlatPlane(); + } + + public AABB getScanRange() { + return this.getWorldPortalShape().getScanRange(); + } + + public AABB getPortalInsides() { + return this.getWorldPortalShape().getPortalInsides(); + } + + public AABB getPortalInsides(Entity entity) { + if (!(entity instanceof Player)) { + return this.getPortalInsides(); + } + double shiftAmount = Math.min(PLAYER_PORTAL_INSIDE_SHIFT, Math.abs(this.getWorldPortalShape().localCoords(entity.position()).depth())); + return this.getPortalInsides().move(this.getNormalVec().normalize().scale(shiftAmount)); + } + + public AABB getTeleportPlane(double offset) { + return this.getWorldPortalShape().getTeleportPlane(offset); + } + + public AABB getCollisionRemovalAabbForEntity(Entity entity) { + double speed = entity.getDeltaMovement().length(); + double extent = Math.max(1.0D, Math.max(entity.getBbWidth(), entity.getBbHeight()) + speed); + return this.getFlatPlane().expandTowards(this.getNormalVec().normalize().scale(-extent)); + } + + public Vec3 teleportProbePosition(Entity entity) { + if (entity instanceof Player player) { + return player.getEyePosition(); + } + if (entity instanceof LivingEntity living) { + return entity.position().add(0.0D, living.getBbHeight() * 0.5D, 0.0D); + } + return entity.position(); + } + + public Vec3 previousTeleportProbePosition(Entity entity) { + double prevX = entity.xo; + double prevY = entity.yo; + double prevZ = entity.zo; + if (entity instanceof Player player) { + return new Vec3(prevX, prevY + player.getEyeHeight(player.getPose()), prevZ); + } + if (entity instanceof LivingEntity living) { + return new Vec3(prevX, prevY + living.getBbHeight() * 0.5D, prevZ); + } + return new Vec3(prevX, prevY, prevZ); + } + + public Vec3 resolveCrossingProbe(Entity entity) { + AABB currentBox = entity.getBoundingBox(); + AABB previousBox = currentBox.move(entity.xo - entity.getX(), entity.yo - entity.getY(), entity.zo - entity.getZ()); + for (Vec3 currentSample : portalSamples(entity, currentBox, false)) { + Vec3 previousSample = matchPreviousSample(currentSample, currentBox, previousBox); + if (this.crossesPortal(previousSample, currentSample)) { + return currentSample; + } + } + Vec3 previousProbe = this.previousTeleportProbePosition(entity); + Vec3 currentProbe = this.teleportProbePosition(entity); + return this.crossesPortal(previousProbe, currentProbe) ? currentProbe : null; + } + + public boolean containsPoint(Vec3 position) { + return this.getWorldPortalShape().contains(position, 0.0D); + } + + public boolean intersectsEntityBounds(Entity entity) { + AABB bounds = entity.getBoundingBox(); + for (Vec3 corner : new Vec3[] { + new Vec3(bounds.minX, bounds.minY, bounds.minZ), + new Vec3(bounds.minX, bounds.minY, bounds.maxZ), + new Vec3(bounds.minX, bounds.maxY, bounds.minZ), + new Vec3(bounds.minX, bounds.maxY, bounds.maxZ), + new Vec3(bounds.maxX, bounds.minY, bounds.minZ), + new Vec3(bounds.maxX, bounds.minY, bounds.maxZ), + new Vec3(bounds.maxX, bounds.maxY, bounds.minZ), + new Vec3(bounds.maxX, bounds.maxY, bounds.maxZ) + }) { + if (this.getWorldPortalShape().contains(corner, 0.08D)) { + return true; + } + } + return this.getPortalInsides(entity).intersects(bounds); + } + + public boolean crossesPortal(Vec3 previousProbePosition, Vec3 currentProbePosition) { + return this.getWorldPortalShape().crosses(previousProbePosition, currentProbePosition); + } + + public boolean shouldRenderFront(Vec3 cameraPos) { + return this.getWorldPortalShape().shouldRenderFront(cameraPos); + } + @Override public void tick() { super.tick(); this.ageTicks++; + this.yRotO = this.getYRot(); + this.xRotO = this.getXRot(); if (this.level().isClientSide) { return; } if (!(this.level() instanceof ServerLevel serverLevel)) { return; } + this.tickTeleportCooldowns(); if (this.ownerId == null || !this.isStillRegistered(serverLevel)) { this.discard(); return; @@ -151,32 +328,35 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { private boolean hasValidSurface() { Direction facing = this.getFacingDirection(); - Direction heightAxis = this.getUpAxis(); - for (int h = 0; h < 2; h++) { - BlockPos supportPos = this.supportOrigin.relative(heightAxis, h); - BlockPos airPos = supportPos.relative(facing); + for (int i = 0; i < this.portalSpots.length; i++) { + BlockPos portalSpot = this.portalSpots[i]; + BlockPos supportPos = portalSpot.relative(facing.getOpposite()); BlockState supportState = this.level().getBlockState(supportPos); - BlockState airState = this.level().getBlockState(airPos); - FluidState fluidState = this.level().getFluidState(airPos); if (!supportState.isFaceSturdy(this.level(), supportPos, facing)) { return false; } - if (!airState.isAir() && !airState.canBeReplaced()) { - return false; - } - if (!fluidState.isEmpty()) { - return false; + BlockEntity blockEntity = this.level().getBlockEntity(portalSpot); + if (i == 0) { + if (!(blockEntity instanceof PortalGunPortalMasterBlockEntity master) || !master.matches(this.ownerId, this.getUUID(), this.getPortalSide())) { + return false; + } + } else { + if (!(blockEntity instanceof PortalGunPortalBaseBlockEntity base) || !base.matches(this.ownerId, this.getUUID(), this.getPortalSide())) { + return false; + } } } return true; } private void tickTeleport(PortalGunPortalEntity linked) { - List entities = this.level().getEntities(this, this.getBoundingBox().inflate(0.75D), this::canTeleportEntity); + List entities = this.level().getEntities(this, this.getScanRange(), this::canTeleportEntity); for (Entity entity : entities) { - if (this.isInsidePortal(entity.position())) { - this.teleportEntity(entity, linked); + Vec3 crossingProbe = this.resolveCrossingProbe(entity); + if (crossingProbe == null) { + continue; } + this.teleportEntity(entity, linked, crossingProbe); } } @@ -184,45 +364,109 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { if (!entity.isAlive() || entity instanceof PortalGunPortalEntity || entity.isPassenger() || entity.isVehicle()) { return false; } - long gameTime = this.level().getGameTime(); - long cooldownUntil = TELEPORT_COOLDOWNS.getOrDefault(entity.getUUID(), 0L); - if (cooldownUntil <= gameTime) { - TELEPORT_COOLDOWNS.remove(entity.getUUID()); - return true; - } - return false; + return !this.teleportCooldowns.containsKey(entity.getUUID()); } private boolean isInsidePortal(Vec3 position) { - Vec3 relative = position.subtract(this.position()); - double horizontal = relative.dot(this.getWidthVec()); - double vertical = relative.dot(this.getUpVec()); - double depth = Math.abs(relative.dot(this.getNormalVec())); - return Math.abs(horizontal) <= HALF_WIDTH && Math.abs(vertical) <= HALF_HEIGHT && depth <= HALF_DEPTH; + return this.getWorldPortalShape().contains(position, 0.0D); } - private void teleportEntity(Entity entity, PortalGunPortalEntity destination) { - Vec3 sourceNormal = this.getNormalVec(); - Vec3 sourceUp = this.getUpVec(); - Vec3 sourceWidth = this.getWidthVec(); - Vec3 destinationNormal = destination.getNormalVec(); - Vec3 destinationUp = destination.getUpVec(); - Vec3 destinationWidth = destination.getWidthVec(); - Vec3 motion = entity.getDeltaMovement(); - double widthComponent = motion.dot(sourceWidth); - double upComponent = motion.dot(sourceUp); - double forward = -motion.dot(sourceNormal); - Vec3 transformedMotion = destinationWidth.scale(widthComponent).add(destinationUp.scale(upComponent)).add(destinationNormal.scale(forward)); - Vec3 exitPos = destination.position().add(destinationNormal.scale(1.0D)); - TELEPORT_COOLDOWNS.put(entity.getUUID(), this.level().getGameTime() + TELEPORT_COOLDOWN_TICKS); + private PortalLocalCoords localCoords(Vec3 position) { + PortalGunWorldPortalShape.PortalLocalCoords coords = this.getWorldPortalShape().localCoords(position); + return new PortalLocalCoords(coords.horizontal(), coords.vertical(), coords.depth()); + } + + private List portalSamples(Entity entity, AABB box, boolean previous) { + Vec3 center = new Vec3((box.minX + box.maxX) * 0.5D, (box.minY + box.maxY) * 0.5D, (box.minZ + box.maxZ) * 0.5D); + Vec3 topCenter = new Vec3(center.x, box.maxY, center.z); + Vec3 bottomCenter = new Vec3(center.x, box.minY, center.z); + if (entity instanceof Player player) { + Vec3 eye = previous ? this.previousTeleportProbePosition(player) : this.teleportProbePosition(player); + return List.of(center, eye, topCenter, bottomCenter); + } + if (entity instanceof LivingEntity) { + return List.of(center, topCenter, bottomCenter); + } + return List.of(center); + } + + private Vec3 matchPreviousSample(Vec3 currentSample, AABB currentBox, AABB previousBox) { + double xLerp = axisRatio(currentSample.x, currentBox.minX, currentBox.maxX); + double yLerp = axisRatio(currentSample.y, currentBox.minY, currentBox.maxY); + double zLerp = axisRatio(currentSample.z, currentBox.minZ, currentBox.maxZ); + return new Vec3( + lerp(previousBox.minX, previousBox.maxX, xLerp), + lerp(previousBox.minY, previousBox.maxY, yLerp), + lerp(previousBox.minZ, previousBox.maxZ, zLerp) + ); + } + + private static double axisRatio(double value, double min, double max) { + double size = max - min; + if (Math.abs(size) < 1.0E-6D) { + return 0.5D; + } + return (value - min) / size; + } + + private static double lerp(double min, double max, double delta) { + return min + (max - min) * delta; + } + + private void teleportEntity(Entity entity, PortalGunPortalEntity destination, Vec3 currentProbe) { + Quaternionf transform = PortalGunTransformUtil.createTransform(this, destination); + Vec3 relativeProbe = currentProbe.subtract(this.position()); + Vec3 transformedProbe = PortalGunTransformUtil.transform(relativeProbe, transform); + Vec3 entityOffsetFromProbe = entity.position().subtract(currentProbe); + Vec3 transformedEntityOffset = PortalGunTransformUtil.transform(entityOffsetFromProbe, transform); + Vec3 transformedLook = PortalGunTransformUtil.transform(entity.getLookAngle(), transform).normalize(); + Vec3 transformedMotion = PortalGunTransformUtil.transform(entity.getDeltaMovement(), transform); + Vec3 exitProbe = destination.position().add(transformedProbe).add(destination.getNormalVec().normalize().scale(0.08D - transformedProbe.dot(destination.getNormalVec().normalize()))); + Vec3 exitPos = exitProbe.add(transformedEntityOffset); + float yaw = PortalGunTransformUtil.yawFromLook(transformedLook); + float pitch = PortalGunTransformUtil.pitchFromLook(transformedLook); + this.applyTeleportCooldown(entity, destination); if (entity instanceof ServerPlayer player && destination.level() instanceof ServerLevel destinationLevel) { - player.teleportTo(destinationLevel, exitPos.x, exitPos.y, exitPos.z, player.getYRot(), player.getXRot()); + player.teleportTo(destinationLevel, exitPos.x, exitPos.y, exitPos.z, yaw, pitch); } else { entity.teleportTo(exitPos.x, exitPos.y, exitPos.z); + entity.setYRot(yaw); + entity.setXRot(pitch); + entity.setYHeadRot(yaw); + entity.setYBodyRot(yaw); } entity.setDeltaMovement(transformedMotion); entity.hasImpulse = true; entity.fallDistance = 0.0F; + this.handleSpecialEntityPostTeleport(entity); + } + + private void tickTeleportCooldowns() { + Iterator> iterator = this.teleportCooldowns.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + int cooldown = entry.getValue() - 1; + if (cooldown < 0) { + iterator.remove(); + } else { + entry.setValue(cooldown); + } + } + } + + private void applyTeleportCooldown(Entity entity, PortalGunPortalEntity destination) { + UUID entityId = entity.getUUID(); + this.teleportCooldowns.put(entityId, TELEPORT_COOLDOWN_TICKS); + destination.teleportCooldowns.put(entityId, TELEPORT_COOLDOWN_TICKS); + } + + private void handleSpecialEntityPostTeleport(Entity entity) { + if (entity instanceof AbstractArrow arrow) { + ((AbstractArrowAccessor) arrow).antarchy$setInGround(false); + ((AbstractArrowAccessor) arrow).antarchy$setInGroundTime(0); + ((AbstractArrowAccessor) arrow).antarchy$setShakeTime(0); + arrow.setNoPhysics(false); + } } private PortalGunPortalEntity findLinkedPortal(ServerLevel level) { @@ -235,18 +479,12 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { @Override public AABB getBoundingBoxForCulling() { - return this.getBoundingBox().inflate(1.5D); + return this.getWorldPortalShape().getBoundsForCulling(); } @Override protected AABB makeBoundingBox() { - Vec3 widthVec = this.getWidthVec(); - Vec3 upVec = this.getUpVec(); - Vec3 normalVec = this.getNormalVec(); - double halfX = HALF_WIDTH * Math.abs(widthVec.x) + HALF_HEIGHT * Math.abs(upVec.x) + HALF_DEPTH * Math.abs(normalVec.x); - double halfY = HALF_WIDTH * Math.abs(widthVec.y) + HALF_HEIGHT * Math.abs(upVec.y) + HALF_DEPTH * Math.abs(normalVec.y); - double halfZ = HALF_WIDTH * Math.abs(widthVec.z) + HALF_HEIGHT * Math.abs(upVec.z) + HALF_DEPTH * Math.abs(normalVec.z); - return new AABB(this.getX() - halfX, this.getY() - halfY, this.getZ() - halfZ, this.getX() + halfX, this.getY() + halfY, this.getZ() + halfZ); + return this.getPortalInsides(); } @Override @@ -258,11 +496,37 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { tag.putUUID("LinkedPortalId", this.linkedPortalId); } tag.putInt("AgeTicks", this.ageTicks); + tag.putInt("PairTime", this.pairTime); tag.putInt("Side", this.getPortalSide().ordinal()); tag.putInt("Facing", this.getFacingDirection().get3DDataValue()); + tag.putInt("UpAxis", this.getUpAxis().get3DDataValue()); tag.putInt("SupportX", this.supportOrigin.getX()); tag.putInt("SupportY", this.supportOrigin.getY()); tag.putInt("SupportZ", this.supportOrigin.getZ()); + tag.putInt("MasterX", this.masterPos.getX()); + tag.putInt("MasterY", this.masterPos.getY()); + tag.putInt("MasterZ", this.masterPos.getZ()); + tag.putInt("BaseX", this.basePos.getX()); + tag.putInt("BaseY", this.basePos.getY()); + tag.putInt("BaseZ", this.basePos.getZ()); + ListTag spots = new ListTag(); + for (BlockPos portalSpot : this.portalSpots) { + CompoundTag spot = new CompoundTag(); + spot.putInt("X", portalSpot.getX()); + spot.putInt("Y", portalSpot.getY()); + spot.putInt("Z", portalSpot.getZ()); + spots.add(spot); + } + tag.put("PortalSpots", spots); + ListTag compensated = new ListTag(); + for (BlockPos compensatedSpot : this.compensatedSpots) { + CompoundTag spot = new CompoundTag(); + spot.putInt("X", compensatedSpot.getX()); + spot.putInt("Y", compensatedSpot.getY()); + spot.putInt("Z", compensatedSpot.getZ()); + compensated.add(spot); + } + tag.put("CompensatedSpots", compensated); } @Override @@ -274,17 +538,48 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { this.linkedPortalId = tag.getUUID("LinkedPortalId"); } this.ageTicks = tag.getInt("AgeTicks"); + this.pairTime = tag.getInt("PairTime"); this.entityData.set(SIDE, tag.getInt("Side")); this.entityData.set(FACING, tag.getInt("Facing")); + this.entityData.set(UP_AXIS, tag.getInt("UpAxis")); this.supportOrigin = new BlockPos(tag.getInt("SupportX"), tag.getInt("SupportY"), tag.getInt("SupportZ")); + this.masterPos = new BlockPos(tag.getInt("MasterX"), tag.getInt("MasterY"), tag.getInt("MasterZ")); + this.basePos = new BlockPos(tag.getInt("BaseX"), tag.getInt("BaseY"), tag.getInt("BaseZ")); + ListTag spots = tag.getList("PortalSpots", Tag.TAG_COMPOUND); + for (int i = 0; i < Math.min(2, spots.size()); i++) { + CompoundTag spot = spots.getCompound(i); + this.portalSpots[i] = new BlockPos(spot.getInt("X"), spot.getInt("Y"), spot.getInt("Z")); + } + ListTag compensated = tag.getList("CompensatedSpots", Tag.TAG_COMPOUND); + Set compensatedSpots = new HashSet<>(); + for (int i = 0; i < compensated.size(); i++) { + CompoundTag spot = compensated.getCompound(i); + compensatedSpots.add(new BlockPos(spot.getInt("X"), spot.getInt("Y"), spot.getInt("Z"))); + } + this.compensatedSpots = compensatedSpots; } @Override public void remove(Entity.RemovalReason reason) { - if (!this.level().isClientSide && this.ownerId != null && this.level() instanceof ServerLevel serverLevel) { - PortalGunSavedData.clearPortal(serverLevel.getServer(), this.ownerId, this.getPortalSide(), this.getUUID()); - } + Level level = this.level(); + UUID ownerId = this.ownerId; super.remove(reason); + if (!level.isClientSide && ownerId != null && level instanceof ServerLevel serverLevel) { + PortalGunSavedData.clearPortal(serverLevel.getServer(), ownerId, this.getPortalSide(), this.getUUID()); + this.clearPortalBlocks(serverLevel); + } + } + + private void clearPortalBlocks(ServerLevel level) { + for (BlockPos portalSpot : this.portalSpots) { + if (level.getBlockEntity(portalSpot) instanceof PortalGunPortalMasterBlockEntity master && this.getUUID().equals(master.getPortalId())) { + level.removeBlock(portalSpot, false); + continue; + } + if (level.getBlockEntity(portalSpot) instanceof PortalGunPortalBaseBlockEntity base && this.getUUID().equals(base.getPortalId())) { + level.removeBlock(portalSpot, false); + } + } } @Override @@ -340,4 +635,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { public static SoundEvent sound(String path, SoundEvent fallback) { return BuiltInRegistries.SOUND_EVENT.getOptional(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)).orElse(fallback); } + + private record PortalLocalCoords(double horizontal, double vertical, double depth) { + } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectileEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectileEntity.java new file mode 100644 index 00000000..0f4c0a44 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectileEntity.java @@ -0,0 +1,166 @@ +package com.craisinlord.antarchy.content.portalgun; + +import com.craisinlord.antarchy.content.item.PortalGunItem; +import java.util.UUID; +import net.minecraft.core.component.DataComponents; +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.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.ThrowableItemProjectile; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +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 PortalGunProjectileEntity extends ThrowableItemProjectile { + private static final EntityDataAccessor SIDE = SynchedEntityData.defineId(PortalGunProjectileEntity.class, EntityDataSerializers.INT); + private static final int MAX_FLIGHT_TICKS = 80; + private UUID gunId; + + public PortalGunProjectileEntity(EntityType entityType, Level level) { + super(entityType, level); + this.configureProjectile(); + } + + public PortalGunProjectileEntity(EntityType entityType, LivingEntity owner, Level level) { + super(entityType, owner, level); + this.configureProjectile(); + } + + private void configureProjectile() { + this.setNoGravity(true); + this.noCulling = true; + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(SIDE, PortalGunPortalEntity.PortalSide.BLUE.ordinal()); + } + + public void configure(PortalGunPortalEntity.PortalSide side, UUID gunId, ItemStack gunStack) { + this.entityData.set(SIDE, side.ordinal()); + this.gunId = gunId; + this.setItem(gunStack.copyWithCount(1)); + } + + public PortalGunPortalEntity.PortalSide getPortalSide() { + return this.entityData.get(SIDE) == PortalGunPortalEntity.PortalSide.ORANGE.ordinal() ? PortalGunPortalEntity.PortalSide.ORANGE : PortalGunPortalEntity.PortalSide.BLUE; + } + + @Override + protected Item getDefaultItem() { + return Items.AIR; + } + + @Override + protected double getDefaultGravity() { + return 0.0D; + } + + @Override + protected boolean canHitEntity(Entity target) { + return false; + } + + @Override + public boolean canBeCollidedWith() { + return false; + } + + @Override + public boolean isAttackable() { + return false; + } + + @Override + public void tick() { + super.tick(); + if (this.tickCount > MAX_FLIGHT_TICKS) { + this.discard(); + return; + } + Vec3 motion = this.getDeltaMovement(); + if (motion.lengthSqr() > 1.0E-6D) { + double horizontal = Math.sqrt(motion.x * motion.x + motion.z * motion.z); + this.setYRot((float) (net.minecraft.util.Mth.atan2(motion.z, motion.x) * (180.0D / Math.PI)) - 90.0F); + this.setXRot((float) (-(net.minecraft.util.Mth.atan2(motion.y, horizontal) * (180.0D / Math.PI)))); + } + if (this.level().isClientSide) { + Vec3 point = this.position(); + if (this.getPortalSide() == PortalGunPortalEntity.PortalSide.BLUE) { + this.level().addParticle(net.minecraft.core.particles.ParticleTypes.SOUL_FIRE_FLAME, point.x, point.y, point.z, 0.0D, 0.0D, 0.0D); + this.level().addParticle(net.minecraft.core.particles.ParticleTypes.END_ROD, point.x, point.y, point.z, 0.0D, 0.0D, 0.0D); + } else { + this.level().addParticle(net.minecraft.core.particles.ParticleTypes.FLAME, point.x, point.y, point.z, 0.0D, 0.0D, 0.0D); + this.level().addParticle(net.minecraft.core.particles.ParticleTypes.CRIT, point.x, point.y, point.z, 0.0D, 0.0D, 0.0D); + } + } + } + + @Override + protected void onHitEntity(EntityHitResult result) { + } + + @Override + protected void onHitBlock(BlockHitResult result) { + if (!this.level().isClientSide && this.level() instanceof ServerLevel serverLevel) { + this.spawnImpactParticles(serverLevel, result.getLocation()); + ItemStack sourceStack = this.resolveSourceStack(); + if (this.getOwner() instanceof Player player && sourceStack.getItem() instanceof PortalGunItem portalGunItem) { + portalGunItem.handlePortalImpact(serverLevel, player, sourceStack, this.getPortalSide(), result, this.position()); + } + } + this.discard(); + } + + private void spawnImpactParticles(ServerLevel level, Vec3 impactPos) { + if (this.getPortalSide() == PortalGunPortalEntity.PortalSide.BLUE) { + level.sendParticles(net.minecraft.core.particles.ParticleTypes.SOUL_FIRE_FLAME, impactPos.x, impactPos.y, impactPos.z, 10, 0.08D, 0.08D, 0.08D, 0.01D); + level.sendParticles(net.minecraft.core.particles.ParticleTypes.END_ROD, impactPos.x, impactPos.y, impactPos.z, 6, 0.04D, 0.04D, 0.04D, 0.01D); + return; + } + level.sendParticles(net.minecraft.core.particles.ParticleTypes.FLAME, impactPos.x, impactPos.y, impactPos.z, 10, 0.08D, 0.08D, 0.08D, 0.01D); + level.sendParticles(net.minecraft.core.particles.ParticleTypes.CRIT, impactPos.x, impactPos.y, impactPos.z, 6, 0.04D, 0.04D, 0.04D, 0.01D); + } + + private ItemStack resolveSourceStack() { + ItemStack projectileStack = this.getItem(); + if (!(this.getOwner() instanceof Player player) || !(projectileStack.getItem() instanceof PortalGunItem portalGunItem) || this.gunId == null) { + return projectileStack; + } + ItemStack matching = portalGunItem.findMatchingGunStack(player, this.gunId); + return matching.isEmpty() ? projectileStack : matching; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt("Side", this.entityData.get(SIDE)); + if (this.gunId != null) { + tag.putUUID("GunId", this.gunId); + } + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.entityData.set(SIDE, tag.getInt("Side")); + if (tag.hasUUID("GunId")) { + this.gunId = tag.getUUID("GunId"); + } + ItemStack itemStack = this.getItem(); + if (this.gunId != null && !itemStack.isEmpty()) { + net.minecraft.world.item.component.CustomData.update(DataComponents.CUSTOM_DATA, itemStack, customData -> customData.putUUID(PortalGunItem.GUN_ID_TAG, this.gunId)); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunSavedData.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunSavedData.java index 5f06a112..f636bb99 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunSavedData.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunSavedData.java @@ -9,6 +9,7 @@ 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; public final class PortalGunSavedData extends SavedData { @@ -119,6 +120,20 @@ public final class PortalGunSavedData extends SavedData { discardIfLoaded(server, current.orangePortalId()); } + public static PortalGunPortalEntity findLoadedPortal(MinecraftServer server, UUID owner, PortalGunPortalEntity.PortalSide side) { + Optional portalId = getPortalId(server, owner, side); + if (portalId.isEmpty()) { + return null; + } + for (ServerLevel level : server.getAllLevels()) { + Entity entity = level.getEntity(portalId.get()); + if (entity instanceof PortalGunPortalEntity portal && !portal.isRemoved()) { + return portal; + } + } + return null; + } + private static void discardIfLoaded(MinecraftServer server, UUID portalId) { if (portalId == null) { return; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransformUtil.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransformUtil.java new file mode 100644 index 00000000..8a0c802d --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransformUtil.java @@ -0,0 +1,93 @@ +package com.craisinlord.antarchy.content.portalgun; + +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; +import org.joml.Matrix3f; +import org.joml.Quaternionf; +import org.joml.Vector3f; + +public final class PortalGunTransformUtil { + private static final Vec3 WORLD_UP = new Vec3(0.0D, 1.0D, 0.0D); + private static final Vec3 WORLD_FORWARD_FALLBACK = new Vec3(0.0D, 0.0D, 1.0D); + + private PortalGunTransformUtil() { + } + + public static Quaternionf createTransform(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal) { + return createTransform(sourcePortal.getWidthVec(), sourcePortal.getUpVec(), sourcePortal.getNormalVec().scale(-1.0D), destinationPortal.getWidthVec(), destinationPortal.getUpVec(), destinationPortal.getNormalVec()); + } + + public static Quaternionf createTransform(Vec3 sourceWidth, Vec3 sourceUp, Vec3 sourceForward, Vec3 destinationWidth, Vec3 destinationUp, Vec3 destinationForward) { + Matrix3f sourceBasis = new Matrix3f( + (float) sourceWidth.x, (float) sourceUp.x, (float) sourceForward.x, + (float) sourceWidth.y, (float) sourceUp.y, (float) sourceForward.y, + (float) sourceWidth.z, (float) sourceUp.z, (float) sourceForward.z + ); + Matrix3f destinationBasis = new Matrix3f( + (float) destinationWidth.x, (float) destinationUp.x, (float) destinationForward.x, + (float) destinationWidth.y, (float) destinationUp.y, (float) destinationForward.y, + (float) destinationWidth.z, (float) destinationUp.z, (float) destinationForward.z + ); + Matrix3f transform = destinationBasis.mul(sourceBasis.transpose(new Matrix3f()), new Matrix3f()); + return transform.getNormalizedRotation(new Quaternionf()); + } + + public static Vec3 transform(Vec3 vector, Quaternionf quaternion) { + Vector3f rotated = new Vector3f((float) vector.x, (float) vector.y, (float) vector.z).rotate(quaternion); + return new Vec3(rotated.x(), rotated.y(), rotated.z()); + } + + public static Vec3 transformRelativePosition(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, Vec3 relativePosition) { + return transform(relativePosition, createTransform(sourcePortal, destinationPortal)); + } + + public static float yawFromLook(Vec3 look) { + return (float) Math.toDegrees(Math.atan2(-look.x, look.z)); + } + + public static float pitchFromLook(Vec3 look) { + return (float) Math.toDegrees(-Math.asin(Mth.clamp(look.y, -1.0D, 1.0D))); + } + + public static Vec3 upVectorFromLookAndRoll(Vec3 look, float rollDegrees) { + Vec3 normalizedLook = look.normalize(); + Vec3 referenceUp = Math.abs(normalizedLook.dot(WORLD_UP)) > 0.999D ? WORLD_FORWARD_FALLBACK : WORLD_UP; + Vec3 right = referenceUp.cross(normalizedLook).normalize(); + Vec3 up = normalizedLook.cross(right).normalize(); + if (Math.abs(rollDegrees) <= 1.0E-4F) { + return up; + } + Quaternionf roll = new Quaternionf().fromAxisAngleDeg((float) normalizedLook.x, (float) normalizedLook.y, (float) normalizedLook.z, rollDegrees); + return transform(up, roll).normalize(); + } + + public static float rollFromOrientation(Vec3 look, Vec3 up) { + Vec3 normalizedLook = look.normalize(); + Vec3 normalizedUp = up.normalize(); + Vec3 baseUp = upVectorFromLookAndRoll(normalizedLook, 0.0F); + Vec3 projectedUp = normalizedUp.subtract(normalizedLook.scale(normalizedUp.dot(normalizedLook))); + if (projectedUp.lengthSqr() < 1.0E-8D) { + return 0.0F; + } + projectedUp = projectedUp.normalize(); + double sin = normalizedLook.dot(baseUp.cross(projectedUp)); + double cos = Mth.clamp(baseUp.dot(projectedUp), -1.0D, 1.0D); + return normalizeDegrees((float) Math.toDegrees(Math.atan2(sin, cos))); + } + + public static Quaternionf orientationQuaternion(Vec3 look, Vec3 up) { + Vec3 forward = look.normalize(); + Vec3 correctedUp = up.subtract(forward.scale(up.dot(forward))).normalize(); + Vec3 right = correctedUp.cross(forward).normalize(); + Matrix3f basis = new Matrix3f( + (float) right.x, (float) correctedUp.x, (float) (-forward.x), + (float) right.y, (float) correctedUp.y, (float) (-forward.y), + (float) right.z, (float) correctedUp.z, (float) (-forward.z) + ); + return basis.getNormalizedRotation(new Quaternionf()); + } + + public static float normalizeDegrees(float degrees) { + return Mth.wrapDegrees(degrees); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunWorldPortalShape.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunWorldPortalShape.java new file mode 100644 index 00000000..8fd85cfb --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunWorldPortalShape.java @@ -0,0 +1,165 @@ +package com.craisinlord.antarchy.content.portalgun; + +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import java.util.List; + +public record PortalGunWorldPortalShape( + Vec3 center, + Vec3 normal, + Vec3 up, + Vec3 right, + double halfWidth, + double halfHeight, + double halfDepth +) { + public static final double DEFAULT_SCAN_DISTANCE = 3.0D; + + public AABB getPlane() { + return this.createPlaneAround(0.0D, 0.0125D); + } + + public AABB getFlatPlane() { + return this.createPlaneAround(0.0D, 0.0D); + } + + public AABB getScanRange() { + return this.getFlatPlane().expandTowards(this.normal.scale(-DEFAULT_SCAN_DISTANCE)); + } + + public AABB getPortalInsides() { + return this.createPlaneAround(0.0D, this.halfDepth); + } + + public AABB getTeleportPlane(double offset) { + return this.createPlaneAround(offset, this.halfDepth); + } + + public Vec3[] getCorners(double normalOffset) { + Vec3 center = this.center.add(this.normal.scale(normalOffset)); + Vec3 width = this.right.scale(this.halfWidth); + Vec3 height = this.up.scale(this.halfHeight); + return new Vec3[] { + center.subtract(width).subtract(height), + center.subtract(width).add(height), + center.add(width).add(height), + center.add(width).subtract(height) + }; + } + + public PortalLocalCoords localCoords(Vec3 position) { + Vec3 relative = position.subtract(this.center); + return new PortalLocalCoords(relative.dot(this.right), relative.dot(this.up), relative.dot(this.normal)); + } + + public boolean contains(Vec3 position, double depthPadding) { + PortalLocalCoords coords = this.localCoords(position); + return Math.abs(coords.horizontal()) <= this.halfWidth + && Math.abs(coords.vertical()) <= this.halfHeight + && Math.abs(coords.depth()) <= this.halfDepth + depthPadding; + } + + public boolean crosses(Vec3 previousPosition, Vec3 currentPosition) { + PortalLocalCoords previous = this.localCoords(previousPosition); + PortalLocalCoords current = this.localCoords(currentPosition); + double depthDelta = current.depth() - previous.depth(); + if (depthDelta > -1.0E-6D || previous.depth() <= 0.0D || current.depth() > 0.0D) { + return false; + } + double t = -previous.depth() / depthDelta; + if (t < 0.0D || t > 1.0D) { + return false; + } + double horizontal = previous.horizontal() + (current.horizontal() - previous.horizontal()) * t; + double vertical = previous.vertical() + (current.vertical() - previous.vertical()) * t; + return Math.abs(horizontal) <= this.halfWidth && Math.abs(vertical) <= this.halfHeight; + } + + public boolean shouldRenderFront(Vec3 cameraPos) { + PortalLocalCoords coords = this.localCoords(cameraPos); + if (coords.depth() <= 0.0D) { + return false; + } + double depthScale = Math.min(DEFAULT_SCAN_DISTANCE, Math.max(0.0D, coords.depth())); + return Math.abs(coords.horizontal()) <= this.halfWidth + depthScale + && Math.abs(coords.vertical()) <= this.halfHeight + depthScale; + } + + public boolean intersectsFront(AABB box, double tolerance) { + double maxDepth = Double.NEGATIVE_INFINITY; + for (Vec3 corner : corners(box)) { + maxDepth = Math.max(maxDepth, this.localCoords(corner).depth()); + if (maxDepth >= -tolerance) { + return true; + } + } + return false; + } + + public AABB getBoundsForCulling() { + return this.createPlaneAround(0.0D, this.halfDepth).inflate(1.5D); + } + + public List getCollisionBoundaries(double borderThickness) { + double horizontalOuter = this.halfWidth + borderThickness; + double verticalOuter = this.halfHeight + borderThickness; + return List.of( + this.createLocalBox(-horizontalOuter, this.halfWidth, -verticalOuter, verticalOuter, -this.halfDepth, this.halfDepth), + this.createLocalBox(-this.halfWidth, horizontalOuter, -verticalOuter, verticalOuter, -this.halfDepth, this.halfDepth), + this.createLocalBox(-this.halfWidth, this.halfWidth, -verticalOuter, -this.halfHeight, -this.halfDepth, this.halfDepth), + this.createLocalBox(-this.halfWidth, this.halfWidth, this.halfHeight, verticalOuter, -this.halfDepth, this.halfDepth) + ); + } + + private AABB createPlaneAround(double planeOffset, double thickness) { + Vec3 boxCenter = this.center.add(this.normal.scale(planeOffset)); + double halfX = this.halfWidth * Math.abs(this.right.x) + this.halfHeight * Math.abs(this.up.x) + thickness * Math.abs(this.normal.x); + double halfY = this.halfWidth * Math.abs(this.right.y) + this.halfHeight * Math.abs(this.up.y) + thickness * Math.abs(this.normal.y); + double halfZ = this.halfWidth * Math.abs(this.right.z) + this.halfHeight * Math.abs(this.up.z) + thickness * Math.abs(this.normal.z); + return new AABB(boxCenter.x - halfX, boxCenter.y - halfY, boxCenter.z - halfZ, boxCenter.x + halfX, boxCenter.y + halfY, boxCenter.z + halfZ); + } + + private AABB createLocalBox(double minHorizontal, double maxHorizontal, double minVertical, double maxVertical, double minDepth, double maxDepth) { + Vec3[] corners = new Vec3[] { + this.center.add(this.right.scale(minHorizontal)).add(this.up.scale(minVertical)).add(this.normal.scale(minDepth)), + this.center.add(this.right.scale(minHorizontal)).add(this.up.scale(minVertical)).add(this.normal.scale(maxDepth)), + this.center.add(this.right.scale(minHorizontal)).add(this.up.scale(maxVertical)).add(this.normal.scale(minDepth)), + this.center.add(this.right.scale(minHorizontal)).add(this.up.scale(maxVertical)).add(this.normal.scale(maxDepth)), + this.center.add(this.right.scale(maxHorizontal)).add(this.up.scale(minVertical)).add(this.normal.scale(minDepth)), + this.center.add(this.right.scale(maxHorizontal)).add(this.up.scale(minVertical)).add(this.normal.scale(maxDepth)), + this.center.add(this.right.scale(maxHorizontal)).add(this.up.scale(maxVertical)).add(this.normal.scale(minDepth)), + this.center.add(this.right.scale(maxHorizontal)).add(this.up.scale(maxVertical)).add(this.normal.scale(maxDepth)) + }; + double minX = Double.POSITIVE_INFINITY; + double minY = Double.POSITIVE_INFINITY; + double minZ = Double.POSITIVE_INFINITY; + double maxX = Double.NEGATIVE_INFINITY; + double maxY = Double.NEGATIVE_INFINITY; + double maxZ = Double.NEGATIVE_INFINITY; + for (Vec3 corner : corners) { + minX = Math.min(minX, corner.x); + minY = Math.min(minY, corner.y); + minZ = Math.min(minZ, corner.z); + maxX = Math.max(maxX, corner.x); + maxY = Math.max(maxY, corner.y); + maxZ = Math.max(maxZ, corner.z); + } + return new AABB(minX, minY, minZ, maxX, maxY, maxZ); + } + + private static Vec3[] corners(AABB box) { + return new Vec3[] { + new Vec3(box.minX, box.minY, box.minZ), + new Vec3(box.minX, box.minY, box.maxZ), + new Vec3(box.minX, box.maxY, box.minZ), + new Vec3(box.minX, box.maxY, box.maxZ), + new Vec3(box.maxX, box.minY, box.minZ), + new Vec3(box.maxX, box.minY, box.maxZ), + new Vec3(box.maxX, box.maxY, box.minZ), + new Vec3(box.maxX, box.maxY, box.maxZ) + }; + } + + public record PortalLocalCoords(double horizontal, double vertical, double depth) { + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/truffalo/TruffaloTreeConfiguration.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/truffalo/TruffaloTreeConfiguration.java new file mode 100644 index 00000000..e0654ec1 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/truffalo/TruffaloTreeConfiguration.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.content.worldgen.truffalo; + +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 TruffaloTreeConfiguration( + BlockStateProvider trunkProvider, + IntProvider height +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + BlockStateProvider.CODEC.fieldOf("trunk_provider").forGetter(TruffaloTreeConfiguration::trunkProvider), + IntProvider.codec(4, 9).fieldOf("height").forGetter(TruffaloTreeConfiguration::height) + ).apply(instance, TruffaloTreeConfiguration::new)); +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/truffalo/TruffaloTreeFeature.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/truffalo/TruffaloTreeFeature.java new file mode 100644 index 00000000..e741835f --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/truffalo/TruffaloTreeFeature.java @@ -0,0 +1,88 @@ +package com.craisinlord.antarchy.content.worldgen.truffalo; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +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.RandomSource; +import net.minecraft.world.item.DyeColor; +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.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +public class TruffaloTreeFeature extends Feature { + private static final DyeColor[] TUFT_COLORS = { + DyeColor.MAGENTA, + DyeColor.ORANGE, + DyeColor.RED, + DyeColor.YELLOW, + DyeColor.LIME, + DyeColor.GREEN, + DyeColor.BLUE, + DyeColor.CYAN, + DyeColor.LIGHT_BLUE, + DyeColor.PINK, + DyeColor.PURPLE + }; + + public TruffaloTreeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + BlockPos supportPos = origin.below(); + if (!level.getBlockState(supportPos).isFaceSturdy(level, supportPos, Direction.UP)) { + return false; + } + + RandomSource random = context.random(); + TruffaloTreeConfiguration config = context.config(); + int height = config.height().sample(random); + DyeColor color = TUFT_COLORS[random.nextInt(TUFT_COLORS.length)]; + + BlockPos[] trunk = new BlockPos[height]; + for (int i = 0; i < height; i++) { + trunk[i] = origin.above(i); + } + BlockPos capCenter = trunk[height - 1].above(); + + for (BlockPos pos : trunk) { + if (!canReplace(level, pos)) { + return false; + } + } + for (int dx = -1; dx <= 1; dx++) { + for (int dz = -1; dz <= 1; dz++) { + if (!canReplace(level, capCenter.offset(dx, 0, dz))) { + return false; + } + } + } + + for (BlockPos pos : trunk) { + setBlock(level, pos, config.trunkProvider().getState(random, pos)); + } + + Block tuft = BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, color.getName() + "_truffalo_tuft")); + BlockState tuftState = tuft.defaultBlockState(); + for (int dx = -1; dx <= 1; dx++) { + for (int dz = -1; dz <= 1; dz++) { + setBlock(level, capCenter.offset(dx, 0, dz), tuftState); + } + } + + return true; + } + + private static boolean canReplace(WorldGenLevel level, BlockPos pos) { + BlockState state = level.getBlockState(pos); + return state.isAir() || state.canBeReplaced(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/truffalo/TruffaloTreeGrowers.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/truffalo/TruffaloTreeGrowers.java new file mode 100644 index 00000000..ff6879a8 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/truffalo/TruffaloTreeGrowers.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.content.worldgen.truffalo; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +public final class TruffaloTreeGrowers { + public static final ResourceKey> TRUFFALO_TREE = featureKey("truffalo_tree"); + + private TruffaloTreeGrowers() { + } + + private static ResourceKey> featureKey(String path) { + return ResourceKey.create(Registries.CONFIGURED_FEATURE, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractArrowAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractArrowAccessor.java new file mode 100644 index 00000000..e5afd28f --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractArrowAccessor.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.mixins; + +import net.minecraft.world.entity.projectile.AbstractArrow; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(AbstractArrow.class) +public interface AbstractArrowAccessor { + @Accessor("inGround") + void antarchy$setInGround(boolean inGround); + + @Accessor("inGroundTime") + void antarchy$setInGroundTime(int inGroundTime); + + @Accessor("shakeTime") + void antarchy$setShakeTime(int shakeTime); +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java index 9a08aa71..a1c3f06a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java @@ -38,6 +38,22 @@ public abstract class BlockEntityTypeSignMixin { private static Block antarchy$nadirHangingSign; @Unique private static Block antarchy$nadirWallHangingSign; + @Unique + private static Block antarchy$royalSign; + @Unique + private static Block antarchy$royalWallSign; + @Unique + private static Block antarchy$royalHangingSign; + @Unique + private static Block antarchy$royalWallHangingSign; + @Unique + private static Block antarchy$truffaloSign; + @Unique + private static Block antarchy$truffaloWallSign; + @Unique + private static Block antarchy$truffaloHangingSign; + @Unique + private static Block antarchy$truffaloWallHangingSign; @Inject(method = "isValid", at = @At("HEAD"), cancellable = true) private void antarchy$allowOuranwoodSigns(BlockState state, CallbackInfoReturnable cir) { @@ -45,13 +61,17 @@ public abstract class BlockEntityTypeSignMixin { if (self == BlockEntityType.SIGN) { if (state.is(antarchy$sign()) || state.is(antarchy$wallSign()) || state.is(antarchy$peachSign()) || state.is(antarchy$peachWallSign()) - || state.is(antarchy$nadirSign()) || state.is(antarchy$nadirWallSign())) { + || state.is(antarchy$nadirSign()) || state.is(antarchy$nadirWallSign()) + || state.is(antarchy$royalSign()) || state.is(antarchy$royalWallSign()) + || state.is(antarchy$truffaloSign()) || state.is(antarchy$truffaloWallSign())) { cir.setReturnValue(true); } } else if (self == BlockEntityType.HANGING_SIGN) { if (state.is(antarchy$hangingSign()) || state.is(antarchy$wallHangingSign()) || state.is(antarchy$peachHangingSign()) || state.is(antarchy$peachWallHangingSign()) - || state.is(antarchy$nadirHangingSign()) || state.is(antarchy$nadirWallHangingSign())) { + || state.is(antarchy$nadirHangingSign()) || state.is(antarchy$nadirWallHangingSign()) + || state.is(antarchy$royalHangingSign()) || state.is(antarchy$royalWallHangingSign()) + || state.is(antarchy$truffaloHangingSign()) || state.is(antarchy$truffaloWallHangingSign())) { cir.setReturnValue(true); } } @@ -153,6 +173,70 @@ public abstract class BlockEntityTypeSignMixin { return antarchy$nadirWallHangingSign; } + @Unique + private static Block antarchy$royalSign() { + if (antarchy$royalSign == null) { + antarchy$royalSign = antarchy$resolve("royal_sign"); + } + return antarchy$royalSign; + } + + @Unique + private static Block antarchy$royalWallSign() { + if (antarchy$royalWallSign == null) { + antarchy$royalWallSign = antarchy$resolve("royal_wall_sign"); + } + return antarchy$royalWallSign; + } + + @Unique + private static Block antarchy$royalHangingSign() { + if (antarchy$royalHangingSign == null) { + antarchy$royalHangingSign = antarchy$resolve("royal_hanging_sign"); + } + return antarchy$royalHangingSign; + } + + @Unique + private static Block antarchy$royalWallHangingSign() { + if (antarchy$royalWallHangingSign == null) { + antarchy$royalWallHangingSign = antarchy$resolve("royal_wall_hanging_sign"); + } + return antarchy$royalWallHangingSign; + } + + @Unique + private static Block antarchy$truffaloSign() { + if (antarchy$truffaloSign == null) { + antarchy$truffaloSign = antarchy$resolve("truffalo_sign"); + } + return antarchy$truffaloSign; + } + + @Unique + private static Block antarchy$truffaloWallSign() { + if (antarchy$truffaloWallSign == null) { + antarchy$truffaloWallSign = antarchy$resolve("truffalo_wall_sign"); + } + return antarchy$truffaloWallSign; + } + + @Unique + private static Block antarchy$truffaloHangingSign() { + if (antarchy$truffaloHangingSign == null) { + antarchy$truffaloHangingSign = antarchy$resolve("truffalo_hanging_sign"); + } + return antarchy$truffaloHangingSign; + } + + @Unique + private static Block antarchy$truffaloWallHangingSign() { + if (antarchy$truffaloWallHangingSign == null) { + antarchy$truffaloWallHangingSign = antarchy$resolve("truffalo_wall_hanging_sign"); + } + return antarchy$truffaloWallHangingSign; + } + @Unique private static Block antarchy$resolve(String path) { return BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/LivingEntityJumpingAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/LivingEntityJumpingAccessor.java new file mode 100644 index 00000000..b6535d74 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/LivingEntityJumpingAccessor.java @@ -0,0 +1,11 @@ +package com.craisinlord.antarchy.mixins; + +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(LivingEntity.class) +public interface LivingEntityJumpingAccessor { + @Accessor("jumping") + boolean antarchy$isJumping(); +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityCollisionMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityCollisionMixin.java new file mode 100644 index 00000000..f5fa8a2e --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityCollisionMixin.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.antarchy.content.portalgun.PortalGunCollisionHelper; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Entity.class) +public abstract class PortalGunEntityCollisionMixin { + @Unique + private AABB antarchy$portalGunStartBox; + + @Inject(method = "collide", at = @At("HEAD")) + private void antarchy$capturePortalGunStartBox(Vec3 movement, CallbackInfoReturnable cir) { + this.antarchy$portalGunStartBox = ((Entity) (Object) this).getBoundingBox(); + } + + @Inject(method = "collide", at = @At("RETURN"), cancellable = true) + private void antarchy$restorePortalCrossingMotion(Vec3 movement, CallbackInfoReturnable cir) { + Entity entity = (Entity) (Object) this; + if (this.antarchy$portalGunStartBox == null || AntarchyGravityApi.isGravityInverted(entity)) { + return; + } + Vec3 adjusted = PortalGunCollisionHelper.resolveCollision(entity, this.antarchy$portalGunStartBox, movement, cir.getReturnValue()); + cir.setReturnValue(adjusted); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityInWallMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityInWallMixin.java new file mode 100644 index 00000000..1d0db749 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityInWallMixin.java @@ -0,0 +1,25 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import net.minecraft.world.entity.Entity; +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(Entity.class) +public abstract class PortalGunEntityInWallMixin { + @Inject(method = "isInWall", at = @At("HEAD"), cancellable = true) + private void antarchy$ignorePortalInWall(CallbackInfoReturnable cir) { + Entity entity = (Entity) (Object) this; + if (entity.level() == null) { + return; + } + for (PortalGunPortalEntity portal : entity.level().getEntitiesOfClass(PortalGunPortalEntity.class, entity.getBoundingBox().inflate(2.0D), PortalGunPortalEntity::isAlive)) { + if (portal.intersectsEntityBounds(entity) || portal.getCollisionRemovalAabbForEntity(entity).intersects(entity.getBoundingBox())) { + cir.setReturnValue(false); + return; + } + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/BlockEntityRenderDispatcherPortalMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/BlockEntityRenderDispatcherPortalMixin.java new file mode 100644 index 00000000..ee695901 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/BlockEntityRenderDispatcherPortalMixin.java @@ -0,0 +1,39 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.PortalGunPortalRenderState; +import com.craisinlord.antarchy.content.portalgun.PortalGunWorldPortalShape; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.phys.AABB; +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.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(BlockEntityRenderDispatcher.class) +public abstract class BlockEntityRenderDispatcherPortalMixin { + @Inject(method = "render(Lnet/minecraft/world/level/block/entity/BlockEntity;FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;)V", at = @At("HEAD"), cancellable = true) + private void antarchy$clipPortalViewBlockEntities(E blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, CallbackInfo ci) { + if (PortalGunPortalRenderState.renderAll() || blockEntity == null || blockEntity.isRemoved()) { + return; + } + PortalGunWorldPortalShape destinationShape = PortalGunPortalRenderState.getDestinationShape(); + PortalGunWorldPortalShape sourceShape = PortalGunPortalRenderState.getSourceShape(); + if (destinationShape == null) { + return; + } + BlockPos pos = blockEntity.getBlockPos(); + AABB bounds = new AABB(pos); + if (!destinationShape.intersectsFront(bounds, 0.1D)) { + ci.cancel(); + return; + } + if (sourceShape != null && sourceShape.intersectsFront(bounds, -0.02D)) { + ci.cancel(); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityRenderDispatcherPortalMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityRenderDispatcherPortalMixin.java new file mode 100644 index 00000000..c94aeef5 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityRenderDispatcherPortalMixin.java @@ -0,0 +1,34 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.PortalGunPortalRenderState; +import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunWorldPortalShape; +import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.world.entity.Entity; +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(EntityRenderDispatcher.class) +public abstract class EntityRenderDispatcherPortalMixin { + @Inject(method = "shouldRender", at = @At("HEAD"), cancellable = true) + private void antarchy$clipPortalViewEntities(E entity, Frustum frustum, double x, double y, double z, CallbackInfoReturnable cir) { + if (PortalGunPortalRenderState.renderAll() || entity instanceof PortalGunPortalEntity) { + return; + } + PortalGunWorldPortalShape destinationShape = PortalGunPortalRenderState.getDestinationShape(); + PortalGunWorldPortalShape sourceShape = PortalGunPortalRenderState.getSourceShape(); + if (destinationShape == null) { + return; + } + if (!destinationShape.intersectsFront(entity.getBoundingBox(), 0.1D)) { + cir.setReturnValue(false); + return; + } + if (sourceShape != null && sourceShape.intersectsFront(entity.getBoundingBox(), -0.02D)) { + cir.setReturnValue(false); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/HoverboardRiderPoseMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/HoverboardRiderPoseMixin.java new file mode 100644 index 00000000..bda60ba5 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/HoverboardRiderPoseMixin.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.entity.HoverboardEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.world.entity.LivingEntity; +import com.mojang.math.Axis; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Mixin; +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(LivingEntityRenderer.class) +public abstract class HoverboardRiderPoseMixin> { + private static final float HOVERBOARD_RIDER_RENDER_YAW = -90.0F; + + @Shadow + public abstract M getModel(); + + @Inject( + method = "setupRotations(Lnet/minecraft/world/entity/LivingEntity;Lcom/mojang/blaze3d/vertex/PoseStack;FFFF)V", + at = @At("TAIL") + ) + private void antarchy$rotateHoverboardRider(T entity, PoseStack poseStack, float ageInTicks, float rotationYaw, float partialTick, float scale, CallbackInfo ci) { + if (entity.getVehicle() instanceof HoverboardEntity) { + poseStack.mulPose(Axis.YP.rotationDegrees(HOVERBOARD_RIDER_RENDER_YAW)); + } + } + + @Inject( + method = "render(Lnet/minecraft/world/entity/LivingEntity;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/client/model/EntityModel;riding:Z", + opcode = Opcodes.PUTFIELD, + shift = At.Shift.AFTER + ) + ) + private void antarchy$standOnHoverboard(T entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, CallbackInfo ci) { + if (entity.getVehicle() instanceof HoverboardEntity) { + this.getModel().riding = false; + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalMixin.java new file mode 100644 index 00000000..ec680db5 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalMixin.java @@ -0,0 +1,30 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.PortalGunRollClientState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +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.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(LocalPlayer.class) +public abstract class LocalPlayerPortalMixin { + @Inject(method = "suffocatesAt", at = @At("HEAD"), cancellable = true) + private void antarchy$ignorePortalSuffocation(BlockPos pos, CallbackInfoReturnable cir) { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player != null && PortalGunRollClientState.isEntityInsidePortal(minecraft, minecraft.player)) { + cir.setReturnValue(false); + } + } + + @Inject(method = "moveTowardsClosestSpace", at = @At("HEAD"), cancellable = true) + private void antarchy$cancelPortalPushOut(double x, double z, CallbackInfo ci) { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player != null && PortalGunRollClientState.isEntityInsidePortal(minecraft, minecraft.player)) { + ci.cancel(); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererPortalMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererPortalMixin.java new file mode 100644 index 00000000..49327550 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererPortalMixin.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.PortalGunRollClientState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ScreenEffectRenderer; +import net.minecraft.world.entity.player.Player; +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(ScreenEffectRenderer.class) +public abstract class ScreenEffectRendererPortalMixin { + @Inject(method = "getViewBlockingState", at = @At("HEAD"), cancellable = true) + private static void antarchy$ignorePortalViewBlock(Player player, CallbackInfoReturnable cir) { + Minecraft minecraft = Minecraft.getInstance(); + if (player != null && PortalGunRollClientState.isEntityInsidePortal(minecraft, player)) { + cir.setReturnValue(Blocks.AIR.defaultBlockState()); + } + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java index e187d93b..752911cb 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; +import com.craisinlord.antarchy.content.portalgun.PortalGunCollisionHelper; import java.util.ArrayList; import java.util.List; import java.util.TreeSet; @@ -174,7 +175,7 @@ public abstract class EntityMoveMixin { float maxUpStep = entity.maxUpStep(); if (!(maxUpStep > 0.0F) || !(pressingIntoCeiling || entity.onGround()) || !(movedX || movedZ)) { - cir.setReturnValue(collided); + cir.setReturnValue(PortalGunCollisionHelper.resolveCollision(entity, aabb, movement, collided)); return; } @@ -193,12 +194,12 @@ public abstract class EntityMoveMixin { Vec3 stepped = Entity.collideBoundingBox(entity, new Vec3(movement.x, -(double) candidate, movement.z), steppedBox, entity.level(), stepShapes); if (stepped.horizontalDistanceSqr() > collided.horizontalDistanceSqr()) { double offset = steppedBox.maxY - aabb.maxY; - cir.setReturnValue(stepped.add(0.0, offset, 0.0)); + cir.setReturnValue(PortalGunCollisionHelper.resolveCollision(entity, aabb, movement, stepped.add(0.0, offset, 0.0))); return; } } - cir.setReturnValue(collided); + cir.setReturnValue(PortalGunCollisionHelper.resolveCollision(entity, aabb, movement, collided)); } @Unique diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/CameraGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/CameraGravityMixin.java index be9f4f46..3481cb58 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/CameraGravityMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/CameraGravityMixin.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.mixins.gravity.client; +import com.craisinlord.antarchy.content.client.PortalGunRollClientState; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; import net.minecraft.client.Camera; @@ -128,9 +129,12 @@ public abstract class CameraGravityMixin { return; } if (!AntarchyGravityApi.isGravityInverted(this.entity) && AntarchyGravityApi.getGravityFlipProgress(this.entity, this.antarchy$storedTickDelta) <= 0.0F) { + this.rotation.premul(new Quaternionf().fromAxisAngleDeg(0.0F, 0.0F, -1.0F, PortalGunRollClientState.getRollDegrees(this.antarchy$storedTickDelta))); + this.antarchy$gravityApplied = true; return; } this.rotation.premul(AntarchyGravityRotationUtil.getCameraRotationQuaternion(this.entity, this.antarchy$storedTickDelta)); + this.rotation.premul(new Quaternionf().fromAxisAngleDeg(0.0F, 0.0F, -1.0F, PortalGunRollClientState.getRollDegrees(this.antarchy$storedTickDelta))); this.antarchy$gravityApplied = true; } } diff --git a/common-1.21.1/src/main/resources/antarchy-common.mixins.json b/common-1.21.1/src/main/resources/antarchy-common.mixins.json index 948c2d00..743fd7db 100644 --- a/common-1.21.1/src/main/resources/antarchy-common.mixins.json +++ b/common-1.21.1/src/main/resources/antarchy-common.mixins.json @@ -5,6 +5,7 @@ "compatibilityLevel": "JAVA_21", "mixins": [ "AbstractMinecartMixin", + "AbstractArrowAccessor", "AccessorFireBlock", "AccessorRangedAttribute", "AmericanFoodConsumeMixin", @@ -27,6 +28,7 @@ "GlowSquidLumenSpawnMixin", "GlowVinesUnderLeavesMixin", "GrindstoneMenuMixin", + "LivingEntityJumpingAccessor", "MantisClawWallClimbMixin", "MilkBucketSizeResetMixin", "MinecartItemMixin", @@ -35,6 +37,8 @@ "NightmareSwordDamageMixin", "NightmareArmorEffectImmunityMixin", "PotionBrewingMixin", + "PortalGunEntityCollisionMixin", + "PortalGunEntityInWallMixin", "RedStoneWireBlockMixin", "StinkyCrouchMixin", "VillagerTradesMixin", @@ -78,9 +82,11 @@ ], "client": [ "client.AbstractMinecartRendererMixin", + "client.BlockEntityRenderDispatcherPortalMixin", "client.EntityLightProbeMixin", "client.CustomBossBarMixin", "client.DimensionMusicMixin", + "client.EntityRenderDispatcherPortalMixin", "client.CavarynSkyMixin", "client.CavarynHordeFogMixin", "client.CavarynHordeLightTextureMixin", @@ -93,8 +99,11 @@ "client.LightningBoltRendererMixin", "client.MountedVehicleCameraMixin", "client.ParalyzedMouseTurnMixin", + "client.LocalPlayerPortalMixin", + "client.ScreenEffectRendererPortalMixin", "client.ScreenEffectRendererFireVisualMixin", "client.GlimmeringTranslucencyMixin", + "client.HoverboardRiderPoseMixin", "client.SplashManagerMixin", "client.ThoraxisFogMixin", "client.TigerEyeArmorHideMixin", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/hoverboard.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/hoverboard.animation.json new file mode 100644 index 00000000..0bf85f4c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/hoverboard.animation.json @@ -0,0 +1,361 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 1, + "bones": { + "hoverboard": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -9.85] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 3, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "disk_front": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.35282, -2.97918, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "disk_back": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.00833, -1.99998, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "motor_right": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.1, 1, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.1, 1, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "motor_left": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.1, 1, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.1, 1, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "move": { + "loop": true, + "animation_length": 1, + "bones": { + "hoverboard": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -9.85] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 3.16, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 2.2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 2.28, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 2.94, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "disk_front": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.35282, -2.97918, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "disk_back": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.00833, -1.99998, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "motor_right": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.1, 1, 1.4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.1, 1, 1.4] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "motor_left": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.1, 1, 1.4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.1, 1, 1.4] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/portal_gun_portal.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/portal_gun_portal.animation.json index ee9796f3..02c2cc9f 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/animations/portal_gun_portal.animation.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/animations/portal_gun_portal.animation.json @@ -4,20 +4,7 @@ "idle": { "loop": true, "animation_length": 4.0, - "bones": { - "Portal_Layer": { - "rotation": { - "0.0": {"vector": [0, 0, 0]}, - "4.0": {"vector": [0, 0, 360]} - } - }, - "Portal_Layer2": { - "rotation": { - "0.0": {"vector": [0, 0, 0]}, - "4.0": {"vector": [0, 0, -360]} - } - } - } + "bones": {} }, "open": { "loop": false, diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/black_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/black_truffalo_tuft.json new file mode 100644 index 00000000..e605dcdc --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/black_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_black" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/blue_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/blue_truffalo_tuft.json new file mode 100644 index 00000000..a52b32f3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/blue_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_blue" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/brown_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/brown_truffalo_tuft.json new file mode 100644 index 00000000..41cc6cb5 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/brown_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_brown" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cyan_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cyan_truffalo_tuft.json new file mode 100644 index 00000000..7ebbddd6 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/cyan_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_cyan" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/gray_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/gray_truffalo_tuft.json new file mode 100644 index 00000000..851f95b7 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/gray_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_gray" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/green_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/green_truffalo_tuft.json new file mode 100644 index 00000000..933f9bb4 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/green_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_green" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/light_blue_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/light_blue_truffalo_tuft.json new file mode 100644 index 00000000..c6f61e04 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/light_blue_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_light_blue" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/light_gray_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/light_gray_truffalo_tuft.json new file mode 100644 index 00000000..c577cbd0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/light_gray_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_light_gray" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/lime_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/lime_truffalo_tuft.json new file mode 100644 index 00000000..aa33a6ad --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/lime_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_lime" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/magenta_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/magenta_truffalo_tuft.json new file mode 100644 index 00000000..69a63007 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/magenta_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_magenta" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/orange_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/orange_truffalo_tuft.json new file mode 100644 index 00000000..7c7a51ea --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/orange_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_orange" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/pink_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/pink_truffalo_tuft.json new file mode 100644 index 00000000..5ab5db31 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/pink_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_pink" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/potted_royal_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/potted_royal_sapling.json new file mode 100644 index 00000000..7ebf3af3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/potted_royal_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/potted_royal_sapling" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/potted_truffalo_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/potted_truffalo_sapling.json new file mode 100644 index 00000000..c713772a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/potted_truffalo_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/potted_truffalo_sapling" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/purple_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/purple_truffalo_tuft.json new file mode 100644 index 00000000..d6a20a04 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/purple_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_purple" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/red_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/red_truffalo_tuft.json new file mode 100644 index 00000000..e2e927df --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/red_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_red" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_button.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_button.json new file mode 100644 index 00000000..22d07a2c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_button.json @@ -0,0 +1,119 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "antarchy:block/royal_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,powered=true": { + "model": "antarchy:block/royal_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,powered=false": { + "model": "antarchy:block/royal_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "antarchy:block/royal_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "antarchy:block/royal_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "antarchy:block/royal_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "antarchy:block/royal_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,powered=true": { + "model": "antarchy:block/royal_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "antarchy:block/royal_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "antarchy:block/royal_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "antarchy:block/royal_button" + }, + "face=floor,facing=north,powered=true": { + "model": "antarchy:block/royal_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "antarchy:block/royal_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "antarchy:block/royal_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "antarchy:block/royal_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "antarchy:block/royal_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "antarchy:block/royal_button", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "antarchy:block/royal_button_pressed", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=north,powered=false": { + "model": "antarchy:block/royal_button", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=north,powered=true": { + "model": "antarchy:block/royal_button_pressed", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=south,powered=false": { + "model": "antarchy:block/royal_button", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "antarchy:block/royal_button_pressed", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=west,powered=false": { + "model": "antarchy:block/royal_button", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "antarchy:block/royal_button_pressed", + "uvlock": true, + "x": 90, + "y": 270 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_door.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_door.json new file mode 100644 index 00000000..01888cdb --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_door.json @@ -0,0 +1,125 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "antarchy:block/royal_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "antarchy:block/royal_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "antarchy:block/royal_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "antarchy:block/royal_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "antarchy:block/royal_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "antarchy:block/royal_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "antarchy:block/royal_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "antarchy:block/royal_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "antarchy:block/royal_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "antarchy:block/royal_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "antarchy:block/royal_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "antarchy:block/royal_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "antarchy:block/royal_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "antarchy:block/royal_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "antarchy:block/royal_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "antarchy:block/royal_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "antarchy:block/royal_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "antarchy:block/royal_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "antarchy:block/royal_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "antarchy:block/royal_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "antarchy:block/royal_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "antarchy:block/royal_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "antarchy:block/royal_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "antarchy:block/royal_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "antarchy:block/royal_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "antarchy:block/royal_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "antarchy:block/royal_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "antarchy:block/royal_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "antarchy:block/royal_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "antarchy:block/royal_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "antarchy:block/royal_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "antarchy:block/royal_door_top_right_open", + "y": 90 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_fence.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_fence.json new file mode 100644 index 00000000..944fe8b0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_fence.json @@ -0,0 +1,49 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/royal_fence_post" + } + }, + { + "apply": { + "model": "antarchy:block/royal_fence_side", + "uvlock": true + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/royal_fence_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/royal_fence_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/royal_fence_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + } + ] +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_fence_gate.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_fence_gate.json new file mode 100644 index 00000000..98a8dc44 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_fence_gate.json @@ -0,0 +1,81 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "model": "antarchy:block/royal_fence_gate", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=false,open=true": { + "model": "antarchy:block/royal_fence_gate_open", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=false": { + "model": "antarchy:block/royal_fence_gate_wall", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=true": { + "model": "antarchy:block/royal_fence_gate_wall_open", + "uvlock": true, + "y": 270 + }, + "facing=north,in_wall=false,open=false": { + "model": "antarchy:block/royal_fence_gate", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=false,open=true": { + "model": "antarchy:block/royal_fence_gate_open", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=false": { + "model": "antarchy:block/royal_fence_gate_wall", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=true": { + "model": "antarchy:block/royal_fence_gate_wall_open", + "uvlock": true, + "y": 180 + }, + "facing=south,in_wall=false,open=false": { + "model": "antarchy:block/royal_fence_gate", + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "antarchy:block/royal_fence_gate_open", + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "antarchy:block/royal_fence_gate_wall", + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "antarchy:block/royal_fence_gate_wall_open", + "uvlock": true + }, + "facing=west,in_wall=false,open=false": { + "model": "antarchy:block/royal_fence_gate", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=false,open=true": { + "model": "antarchy:block/royal_fence_gate_open", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=false": { + "model": "antarchy:block/royal_fence_gate_wall", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=true": { + "model": "antarchy:block/royal_fence_gate_wall_open", + "uvlock": true, + "y": 90 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_flowering_leaves.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_flowering_leaves.json new file mode 100644 index 00000000..1fee65ca --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_flowering_leaves.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "antarchy:block/royal_flowering_leaves" } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_hanging_sign.json new file mode 100644 index 00000000..dac9b579 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/royal_hanging_sign" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_leaves.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_leaves.json new file mode 100644 index 00000000..1fa0e4ca --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_leaves.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "antarchy:block/royal_leaves" } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_log.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_log.json new file mode 100644 index 00000000..081bfac7 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/royal_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/royal_log" + }, + "axis=z": { + "model": "antarchy:block/royal_log_horizontal", + "x": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_planks.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_planks.json new file mode 100644 index 00000000..7019354a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_planks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/royal_planks" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_pressure_plate.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_pressure_plate.json new file mode 100644 index 00000000..33378daa --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "antarchy:block/royal_pressure_plate" + }, + "powered=true": { + "model": "antarchy:block/royal_pressure_plate_down" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_sapling.json new file mode 100644 index 00000000..022f1ec9 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/royal_sapling" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_sign.json new file mode 100644 index 00000000..dce6c6ab --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/royal_sign" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_slab.json new file mode 100644 index 00000000..4cbd3f3e --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "antarchy:block/royal_slab" + }, + "type=double": { + "model": "antarchy:block/royal_planks" + }, + "type=top": { + "model": "antarchy:block/royal_slab_top" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_stairs.json new file mode 100644 index 00000000..fb10d2e3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_stairs.json @@ -0,0 +1,210 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/royal_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/royal_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/royal_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/royal_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/royal_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/royal_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/royal_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/royal_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/royal_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/royal_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/royal_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/royal_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/royal_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/royal_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_trapdoor.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_trapdoor.json new file mode 100644 index 00000000..3029c0cb --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_trapdoor.json @@ -0,0 +1,70 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "antarchy:block/royal_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "antarchy:block/royal_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "antarchy:block/royal_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "antarchy:block/royal_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "antarchy:block/royal_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "antarchy:block/royal_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "antarchy:block/royal_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "antarchy:block/royal_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "antarchy:block/royal_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "antarchy:block/royal_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "antarchy:block/royal_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "antarchy:block/royal_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "antarchy:block/royal_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "antarchy:block/royal_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "antarchy:block/royal_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "antarchy:block/royal_trapdoor_open", + "x": 180, + "y": 90 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_wall_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_wall_hanging_sign.json new file mode 100644 index 00000000..d47ca965 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_wall_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/royal_wall_hanging_sign" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_wall_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_wall_sign.json new file mode 100644 index 00000000..1bd469d0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/royal_wall_sign" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_wood.json new file mode 100644 index 00000000..8c8fbf23 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/royal_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/royal_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/royal_wood" + }, + "axis=z": { + "model": "antarchy:block/royal_wood", + "x": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_royal_log.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_royal_log.json new file mode 100644 index 00000000..cdc9230d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_royal_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/stripped_royal_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/stripped_royal_log" + }, + "axis=z": { + "model": "antarchy:block/stripped_royal_log_horizontal", + "x": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_royal_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_royal_wood.json new file mode 100644 index 00000000..356657d4 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_royal_wood.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/stripped_royal_wood" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_truffalo_log.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_truffalo_log.json new file mode 100644 index 00000000..8b18eecb --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_truffalo_log.json @@ -0,0 +1,14 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/stripped_truffalo_log_horizontal" + }, + "axis=y": { + "model": "antarchy:block/stripped_truffalo_log" + }, + "axis=z": { + "model": "antarchy:block/stripped_truffalo_log_horizontal", + "y": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_truffalo_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_truffalo_wood.json new file mode 100644 index 00000000..08001920 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/stripped_truffalo_wood.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/stripped_truffalo_wood" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_button.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_button.json new file mode 100644 index 00000000..1e026ad1 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_button.json @@ -0,0 +1,119 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "antarchy:block/truffalo_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,powered=true": { + "model": "antarchy:block/truffalo_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,powered=false": { + "model": "antarchy:block/truffalo_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "antarchy:block/truffalo_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "antarchy:block/truffalo_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "antarchy:block/truffalo_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "antarchy:block/truffalo_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,powered=true": { + "model": "antarchy:block/truffalo_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "antarchy:block/truffalo_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "antarchy:block/truffalo_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "antarchy:block/truffalo_button" + }, + "face=floor,facing=north,powered=true": { + "model": "antarchy:block/truffalo_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "antarchy:block/truffalo_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "antarchy:block/truffalo_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "antarchy:block/truffalo_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "antarchy:block/truffalo_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "antarchy:block/truffalo_button", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "antarchy:block/truffalo_button_pressed", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=north,powered=false": { + "model": "antarchy:block/truffalo_button", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=north,powered=true": { + "model": "antarchy:block/truffalo_button_pressed", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=south,powered=false": { + "model": "antarchy:block/truffalo_button", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "antarchy:block/truffalo_button_pressed", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=west,powered=false": { + "model": "antarchy:block/truffalo_button", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "antarchy:block/truffalo_button_pressed", + "uvlock": true, + "x": 90, + "y": 270 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_door.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_door.json new file mode 100644 index 00000000..5b247211 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_door.json @@ -0,0 +1,125 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "antarchy:block/truffalo_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "antarchy:block/truffalo_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "antarchy:block/truffalo_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "antarchy:block/truffalo_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "antarchy:block/truffalo_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "antarchy:block/truffalo_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "antarchy:block/truffalo_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "antarchy:block/truffalo_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "antarchy:block/truffalo_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "antarchy:block/truffalo_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "antarchy:block/truffalo_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "antarchy:block/truffalo_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "antarchy:block/truffalo_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "antarchy:block/truffalo_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "antarchy:block/truffalo_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "antarchy:block/truffalo_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "antarchy:block/truffalo_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "antarchy:block/truffalo_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "antarchy:block/truffalo_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "antarchy:block/truffalo_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "antarchy:block/truffalo_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "antarchy:block/truffalo_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "antarchy:block/truffalo_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "antarchy:block/truffalo_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "antarchy:block/truffalo_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "antarchy:block/truffalo_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "antarchy:block/truffalo_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "antarchy:block/truffalo_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "antarchy:block/truffalo_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "antarchy:block/truffalo_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "antarchy:block/truffalo_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "antarchy:block/truffalo_door_top_right_open", + "y": 90 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_fence.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_fence.json new file mode 100644 index 00000000..f6e05b9b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_fence.json @@ -0,0 +1,49 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/truffalo_fence_post" + } + }, + { + "apply": { + "model": "antarchy:block/truffalo_fence_side", + "uvlock": true + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/truffalo_fence_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/truffalo_fence_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/truffalo_fence_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + } + ] +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_fence_gate.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_fence_gate.json new file mode 100644 index 00000000..af596f37 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_fence_gate.json @@ -0,0 +1,81 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "model": "antarchy:block/truffalo_fence_gate", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=false,open=true": { + "model": "antarchy:block/truffalo_fence_gate_open", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=false": { + "model": "antarchy:block/truffalo_fence_gate_wall", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=true": { + "model": "antarchy:block/truffalo_fence_gate_wall_open", + "uvlock": true, + "y": 270 + }, + "facing=north,in_wall=false,open=false": { + "model": "antarchy:block/truffalo_fence_gate", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=false,open=true": { + "model": "antarchy:block/truffalo_fence_gate_open", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=false": { + "model": "antarchy:block/truffalo_fence_gate_wall", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=true": { + "model": "antarchy:block/truffalo_fence_gate_wall_open", + "uvlock": true, + "y": 180 + }, + "facing=south,in_wall=false,open=false": { + "model": "antarchy:block/truffalo_fence_gate", + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "antarchy:block/truffalo_fence_gate_open", + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "antarchy:block/truffalo_fence_gate_wall", + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "antarchy:block/truffalo_fence_gate_wall_open", + "uvlock": true + }, + "facing=west,in_wall=false,open=false": { + "model": "antarchy:block/truffalo_fence_gate", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=false,open=true": { + "model": "antarchy:block/truffalo_fence_gate_open", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=false": { + "model": "antarchy:block/truffalo_fence_gate_wall", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=true": { + "model": "antarchy:block/truffalo_fence_gate_wall_open", + "uvlock": true, + "y": 90 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_hanging_sign.json new file mode 100644 index 00000000..ca9077ec --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_hanging_sign" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_log.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_log.json new file mode 100644 index 00000000..1369d404 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_log.json @@ -0,0 +1,14 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/truffalo_log_horizontal" + }, + "axis=y": { + "model": "antarchy:block/truffalo_log" + }, + "axis=z": { + "model": "antarchy:block/truffalo_log_horizontal", + "y": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_planks.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_planks.json new file mode 100644 index 00000000..725a3452 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_planks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_planks" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_pressure_plate.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_pressure_plate.json new file mode 100644 index 00000000..bced016f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "antarchy:block/truffalo_pressure_plate" + }, + "powered=true": { + "model": "antarchy:block/truffalo_pressure_plate_down" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_sapling.json new file mode 100644 index 00000000..e35deabc --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_sapling.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_sapling" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_sign.json new file mode 100644 index 00000000..cc22d4e5 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_sign" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_slab.json new file mode 100644 index 00000000..2ca5b864 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "antarchy:block/truffalo_slab" + }, + "type=double": { + "model": "antarchy:block/truffalo_planks" + }, + "type=top": { + "model": "antarchy:block/truffalo_slab_top" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_stairs.json new file mode 100644 index 00000000..9fa999b5 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_stairs.json @@ -0,0 +1,210 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/truffalo_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/truffalo_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/truffalo_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/truffalo_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/truffalo_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/truffalo_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/truffalo_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/truffalo_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/truffalo_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/truffalo_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/truffalo_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/truffalo_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/truffalo_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/truffalo_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_trapdoor.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_trapdoor.json new file mode 100644 index 00000000..b96f1c2c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_trapdoor.json @@ -0,0 +1,70 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "antarchy:block/truffalo_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "antarchy:block/truffalo_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "antarchy:block/truffalo_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "antarchy:block/truffalo_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "antarchy:block/truffalo_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "antarchy:block/truffalo_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "antarchy:block/truffalo_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "antarchy:block/truffalo_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "antarchy:block/truffalo_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "antarchy:block/truffalo_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "antarchy:block/truffalo_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "antarchy:block/truffalo_trapdoor_open", + "x": 180, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "antarchy:block/truffalo_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "antarchy:block/truffalo_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "antarchy:block/truffalo_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "antarchy:block/truffalo_trapdoor_open", + "x": 180, + "y": 90 + } + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_wall_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_wall_hanging_sign.json new file mode 100644 index 00000000..bd349912 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_wall_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_wall_hanging_sign" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_wall_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_wall_sign.json new file mode 100644 index 00000000..7968d0ee --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_wall_sign" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_wood.json new file mode 100644 index 00000000..16eb8297 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/truffalo_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/truffalo_wood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/truffalo_wood" + }, + "axis=z": { + "model": "antarchy:block/truffalo_wood", + "x": 90 + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/white_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/white_truffalo_tuft.json new file mode 100644 index 00000000..ae692741 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/white_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_white" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/blockstates/yellow_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/yellow_truffalo_tuft.json new file mode 100644 index 00000000..c552abcc --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/blockstates/yellow_truffalo_tuft.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/truffalo_tuft_yellow" + } + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/hoverboard.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/hoverboard.geo.json new file mode 100644 index 00000000..0a140e50 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/geo/hoverboard.geo.json @@ -0,0 +1,75 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 4, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "hoverboard", + "pivot": [0, 5.54167, -1.56398], + "cubes": [ + {"origin": [-4.5, 5, -11], "size": [9, 1, 8], "uv": [0, 0]}, + {"origin": [-2.5, 5, -2], "size": [5, 1, 5], "uv": [34, 12]}, + {"origin": [-9, 5, -15], "size": [3, 1, 8], "pivot": [-9.5, 5.5, -9], "rotation": [0, -22.5, 0], "uv": [0, 35]}, + {"origin": [-10, 5, -13], "size": [1, 1, 2], "pivot": [-9.5, 5.5, -9], "rotation": [0, -22.5, 0], "uv": [44, 21]}, + {"origin": [-9, 6, -18], "size": [3, 0, 3], "pivot": [-9.5, 5.5, -9], "rotation": [0, -22.5, 0], "uv": [18, 44]}, + {"origin": [9, 5, -13], "size": [1, 1, 2], "pivot": [9.5, 5.5, -9], "rotation": [0, 22.5, 0], "uv": [44, 24]}, + {"origin": [6, 6, -18], "size": [3, 0, 3], "pivot": [9.5, 5.5, -9], "rotation": [0, 22.5, 0], "uv": [44, 18]}, + {"origin": [6, 5, -15], "size": [3, 1, 8], "pivot": [9.5, 5.5, -9], "rotation": [0, 22.5, 0], "uv": [22, 35]}, + {"origin": [-3.5, 6, -15], "size": [7, 0, 4], "uv": [-1, 44]}, + {"origin": [-4.5, 5, 4], "size": [9, 1, 8], "uv": [0, 9]}, + {"origin": [-1.5, 9, 13], "size": [3, 1, 5], "uv": [0, 55]}, + {"origin": [-4.5, 5, 13], "size": [9, 4, 3], "uv": [0, 48]}, + {"origin": [-8.5, 5, -6], "size": [2, 4, 4], "uv": [46, 27]}, + {"origin": [6.5, 5, -6], "size": [2, 4, 4], "uv": [46, 27], "mirror": true}, + {"origin": [-5, 4, -6], "size": [0, 4, 4], "pivot": [-5, 6, -4], "rotation": [45, 0, 0], "uv": [36, 31]}, + {"origin": [5, 4, -6], "size": [0, 4, 4], "pivot": [5, 6, -4], "rotation": [45, 0, 0], "uv": [36, 31], "mirror": true} + ] + }, + { + "name": "disk_front", + "parent": "hoverboard", + "pivot": [0, 2, -7], + "cubes": [ + {"origin": [-3.5, 3, -10], "size": [7, 0, 6], "uv": [26, 29]}, + {"origin": [-3.5, 1, -10], "size": [7, 0, 6], "uv": [0, 29]} + ] + }, + { + "name": "disk_back", + "parent": "hoverboard", + "pivot": [0, 2, 8], + "cubes": [ + {"origin": [-3.5, 3, 5], "size": [7, 0, 6], "uv": [34, 6]}, + {"origin": [-3.5, 1, 5], "size": [7, 0, 6], "uv": [34, 0]} + ] + }, + { + "name": "motor_right", + "parent": "hoverboard", + "pivot": [-9.06066, 6.5, 8], + "cubes": [ + {"origin": [-8.5, 5, 4], "size": [3, 3, 8], "pivot": [-7, 6.5, 8], "rotation": [0, 0, -45], "uv": [0, 18], "mirror": true}, + {"origin": [-13.12132, 6.5, 4], "size": [4, 0, 8], "uv": [6, 18], "mirror": true} + ] + }, + { + "name": "motor_left", + "parent": "hoverboard", + "pivot": [9.06066, 6.5, 8], + "cubes": [ + {"origin": [5.5, 5, 4], "size": [3, 3, 8], "pivot": [7, 6.5, 8], "rotation": [0, 0, 45], "uv": [0, 18]}, + {"origin": [9.12132, 6.5, 4], "size": [4, 0, 8], "uv": [6, 18]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json index b731f31c..9d27355f 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json @@ -54,6 +54,56 @@ "block.antarchy.nadir_sapling": "Nadir Sapling", "block.antarchy.nadir_sign": "Nadir Sign", "block.antarchy.nadir_hanging_sign": "Nadir Hanging Sign", + "block.antarchy.royal_log": "Royal Log", + "block.antarchy.royal_wood": "Royal Wood", + "block.antarchy.stripped_royal_log": "Stripped Royal Log", + "block.antarchy.stripped_royal_wood": "Stripped Royal Wood", + "block.antarchy.royal_planks": "Royal Planks", + "block.antarchy.royal_stairs": "Royal Stairs", + "block.antarchy.royal_slab": "Royal Slab", + "block.antarchy.royal_fence": "Royal Fence", + "block.antarchy.royal_fence_gate": "Royal Fence Gate", + "block.antarchy.royal_door": "Royal Door", + "block.antarchy.royal_trapdoor": "Royal Trapdoor", + "block.antarchy.royal_pressure_plate": "Royal Pressure Plate", + "block.antarchy.royal_button": "Royal Button", + "block.antarchy.royal_leaves": "Royal Leaves", + "block.antarchy.royal_flowering_leaves": "Flowering Royal Leaves", + "block.antarchy.royal_sapling": "Royal Sapling", + "block.antarchy.royal_sign": "Royal Sign", + "block.antarchy.royal_hanging_sign": "Royal Hanging Sign", + "block.antarchy.truffalo_log": "Truffalo Log", + "block.antarchy.truffalo_wood": "Truffalo Wood", + "block.antarchy.stripped_truffalo_log": "Stripped Truffalo Log", + "block.antarchy.stripped_truffalo_wood": "Stripped Truffalo Wood", + "block.antarchy.truffalo_planks": "Truffalo Planks", + "block.antarchy.truffalo_stairs": "Truffalo Stairs", + "block.antarchy.truffalo_slab": "Truffalo Slab", + "block.antarchy.truffalo_fence": "Truffalo Fence", + "block.antarchy.truffalo_fence_gate": "Truffalo Fence Gate", + "block.antarchy.truffalo_door": "Truffalo Door", + "block.antarchy.truffalo_trapdoor": "Truffalo Trapdoor", + "block.antarchy.truffalo_pressure_plate": "Truffalo Pressure Plate", + "block.antarchy.truffalo_button": "Truffalo Button", + "block.antarchy.truffalo_sapling": "Truffalo Sapling", + "block.antarchy.truffalo_sign": "Truffalo Sign", + "block.antarchy.truffalo_hanging_sign": "Truffalo Hanging Sign", + "block.antarchy.white_truffalo_tuft": "White Truffalo Tuft", + "block.antarchy.orange_truffalo_tuft": "Orange Truffalo Tuft", + "block.antarchy.magenta_truffalo_tuft": "Magenta Truffalo Tuft", + "block.antarchy.light_blue_truffalo_tuft": "Light Blue Truffalo Tuft", + "block.antarchy.yellow_truffalo_tuft": "Yellow Truffalo Tuft", + "block.antarchy.lime_truffalo_tuft": "Lime Truffalo Tuft", + "block.antarchy.pink_truffalo_tuft": "Pink Truffalo Tuft", + "block.antarchy.gray_truffalo_tuft": "Gray Truffalo Tuft", + "block.antarchy.light_gray_truffalo_tuft": "Light Gray Truffalo Tuft", + "block.antarchy.cyan_truffalo_tuft": "Cyan Truffalo Tuft", + "block.antarchy.purple_truffalo_tuft": "Purple Truffalo Tuft", + "block.antarchy.blue_truffalo_tuft": "Blue Truffalo Tuft", + "block.antarchy.brown_truffalo_tuft": "Brown Truffalo Tuft", + "block.antarchy.green_truffalo_tuft": "Green Truffalo Tuft", + "block.antarchy.red_truffalo_tuft": "Red Truffalo Tuft", + "block.antarchy.black_truffalo_tuft": "Black Truffalo Tuft", "block.antarchy.orange_milkweed": "Orange Milkweed", "block.antarchy.pink_milkweed": "Pink Milkweed", "block.antarchy.camellia": "Camellia", @@ -293,6 +343,8 @@ "item.antarchy.giant_lily_pad": "Giant Lily Pad", "item.antarchy.seashell": "Seashell", "item.antarchy.nightmare_scale": "Nightmare Scale", + "item.antarchy.music_disc_underside": "Music Disc", + "jukebox_song.antarchy.underside": "docshrekbot - Underside", "item.antarchy.nightmare_helmet": "Nightmare Helmet", "item.antarchy.nightmare_chestplate": "Nightmare Chestplate", "item.antarchy.nightmare_leggings": "Nightmare Leggings", @@ -358,6 +410,23 @@ "item.antarchy.ouranwood_acorn": "Ouranwood Acorn", "item.antarchy.ouranwood_boat": "Ouranwood Boat", "item.antarchy.ouranwood_chest_boat": "Ouranwood Chest Boat", + "item.antarchy.hoverboard": "Hoverboard", + "item.antarchy.hoverboard_white": "White Hoverboard", + "item.antarchy.hoverboard_orange": "Orange Hoverboard", + "item.antarchy.hoverboard_magenta": "Magenta Hoverboard", + "item.antarchy.hoverboard_light_blue": "Light Blue Hoverboard", + "item.antarchy.hoverboard_yellow": "Yellow Hoverboard", + "item.antarchy.hoverboard_lime": "Lime Hoverboard", + "item.antarchy.hoverboard_pink": "Pink Hoverboard", + "item.antarchy.hoverboard_gray": "Gray Hoverboard", + "item.antarchy.hoverboard_light_gray": "Light Gray Hoverboard", + "item.antarchy.hoverboard_cyan": "Cyan Hoverboard", + "item.antarchy.hoverboard_purple": "Purple Hoverboard", + "item.antarchy.hoverboard_blue": "Blue Hoverboard", + "item.antarchy.hoverboard_brown": "Brown Hoverboard", + "item.antarchy.hoverboard_green": "Green Hoverboard", + "item.antarchy.hoverboard_red": "Red Hoverboard", + "item.antarchy.hoverboard_black": "Black Hoverboard", "item.antarchy.raw_venison": "Raw Venison", "item.antarchy.cooked_venison": "Cooked Venison", "item.antarchy.peach_sapling": "Peach Sapling", @@ -375,6 +444,18 @@ "item.antarchy.nadir_chest_boat": "Nadir Chest Boat", "entity.antarchy.nadir_boat": "Nadir Boat", "entity.antarchy.nadir_chest_boat": "Nadir Chest Boat", + "item.antarchy.royal_sign": "Royal Sign", + "item.antarchy.royal_hanging_sign": "Royal Hanging Sign", + "item.antarchy.royal_boat": "Royal Boat", + "item.antarchy.royal_chest_boat": "Royal Chest Boat", + "entity.antarchy.royal_boat": "Royal Boat", + "entity.antarchy.royal_chest_boat": "Royal Chest Boat", + "item.antarchy.truffalo_sign": "Truffalo Sign", + "item.antarchy.truffalo_hanging_sign": "Truffalo Hanging Sign", + "item.antarchy.truffalo_boat": "Truffalo Boat", + "item.antarchy.truffalo_chest_boat": "Truffalo Chest Boat", + "entity.antarchy.truffalo_boat": "Truffalo Boat", + "entity.antarchy.truffalo_chest_boat": "Truffalo Chest Boat", "item.antarchy.orange_milkweed": "Orange Milkweed", "item.antarchy.pink_milkweed": "Pink Milkweed", "item.antarchy.camellia": "Camellia", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/magenta_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/magenta_truffalo_tuft.json new file mode 100644 index 00000000..3ef874db --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/magenta_truffalo_tuft.json @@ -0,0 +1,576 @@ +{ + "parent": "block/block", + "textures": { + "particle": "antarchy:block/truffalo/magenta_truffalo_tuft" + }, + "elements": [ + { + "name": "block", + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#all", "cullface": "north", "tintindex": 0}, + "east": {"uv": [0, 0, 16, 16], "texture": "#all", "cullface": "east", "tintindex": 0}, + "south": {"uv": [0, 0, 16, 16], "texture": "#all", "cullface": "south", "tintindex": 0}, + "west": {"uv": [0, 0, 16, 16], "texture": "#all", "cullface": "west", "tintindex": 0}, + "up": {"uv": [0, 0, 16, 16], "texture": "#all", "cullface": "up", "tintindex": 0}, + "down": {"uv": [0, 0, 16, 16], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "name": "top", + "from": [8, 20, 3.3], + "to": [8, 21, 13.3], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 18.25, 8.3]}, + "faces": { + "east": {"uv": [3, 2, 13, 1], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0}, + "west": {"uv": [3, 2, 13, 1], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0} + } + }, + { + "name": "top", + "from": [8, 18, 1.3], + "to": [8, 20, 15.3], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 18.25, 8.3]}, + "faces": { + "east": {"uv": [1, 4, 15, 2], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0}, + "west": {"uv": [1, 4, 15, 2], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0} + } + }, + { + "name": "top", + "from": [8, 16, 8.3], + "to": [8, 18, 17.3], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 18.25, 8.3]}, + "faces": { + "east": {"uv": [7, 6, 16, 4], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0}, + "west": {"uv": [7, 6, 16, 4], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0} + } + }, + { + "name": "top", + "from": [8, 16, -0.7], + "to": [8, 18, 8.3], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 18.25, 8.3]}, + "faces": { + "east": {"uv": [0, 6, 9, 4], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0}, + "west": {"uv": [0, 6, 9, 4], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0} + } + }, + { + "name": "top", + "from": [-1, 16, 8.3], + "to": [8, 18, 8.3], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 18.25, 8.3]}, + "faces": { + "north": {"uv": [0, 7, 9, 5], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0}, + "south": {"uv": [0, 7, 9, 5], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0} + } + }, + { + "name": "top", + "from": [3, 20, 8.3], + "to": [13, 21, 8.3], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 18.25, 8.3]}, + "faces": { + "north": {"uv": [4, 3, 14, 2], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0}, + "south": {"uv": [4, 3, 14, 2], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0} + } + }, + { + "name": "top", + "from": [1, 18, 8.3], + "to": [15, 20, 8.3], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 18.25, 8.3]}, + "faces": { + "north": {"uv": [2, 5, 16, 3], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0}, + "south": {"uv": [2, 5, 16, 3], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0} + } + }, + { + "name": "top", + "from": [8, 16, 8.3], + "to": [17, 18, 8.3], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 18.25, 8.3]}, + "faces": { + "north": {"uv": [7, 7, 16, 5], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0}, + "south": {"uv": [7, 7, 16, 5], "rotation": 180, "texture": "#all", "cullface": "up", "tintindex": 0} + } + }, + { + "name": "down", + "from": [8, -5, 3.3], + "to": [8, -4, 13.3], + "rotation": {"angle": -45, "axis": "y", "origin": [8, -2.25, 8.3]}, + "faces": { + "east": {"uv": [4, 15, 14, 14], "texture": "#all", "cullface": "down", "tintindex": 0}, + "west": {"uv": [3, 14, 13, 13], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "name": "down", + "from": [8, -4, 1.3], + "to": [8, -2, 15.3], + "rotation": {"angle": -45, "axis": "y", "origin": [8, -2.25, 8.3]}, + "faces": { + "east": {"uv": [1, 14, 15, 12], "texture": "#all", "cullface": "down", "tintindex": 0}, + "west": {"uv": [1, 14, 15, 12], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "name": "down", + "from": [8, -2, 8.3], + "to": [8, 0, 17.3], + "rotation": {"angle": -45, "axis": "y", "origin": [8, -2.25, 8.3]}, + "faces": { + "east": {"uv": [7, 6, 16, 4], "texture": "#all", "cullface": "down", "tintindex": 0}, + "west": {"uv": [7, 12, 16, 10], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "name": "down", + "from": [8, -2, -0.7], + "to": [8, 0, 8.3], + "rotation": {"angle": -45, "axis": "y", "origin": [8, -2.25, 8.3]}, + "faces": { + "east": {"uv": [0, 6, 9, 4], "texture": "#all", "cullface": "down", "tintindex": 0}, + "west": {"uv": [0, 12, 9, 10], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "name": "down", + "from": [8, -2, 8.3], + "to": [17, 0, 8.3], + "rotation": {"angle": -45, "axis": "y", "origin": [8, -2.25, 8.3]}, + "faces": { + "north": {"uv": [0, 13, 9, 11], "texture": "#all", "cullface": "down", "tintindex": 0}, + "south": {"uv": [0, 13, 9, 11], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "name": "down", + "from": [3, -5, 8.3], + "to": [13, -4, 8.3], + "rotation": {"angle": -45, "axis": "y", "origin": [8, -2.25, 8.3]}, + "faces": { + "north": {"uv": [4, 3, 14, 2], "texture": "#all", "cullface": "down", "tintindex": 0}, + "south": {"uv": [4, 15, 14, 14], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "name": "down", + "from": [1, -4, 8.3], + "to": [15, -2, 8.3], + "rotation": {"angle": -45, "axis": "y", "origin": [8, -2.25, 8.3]}, + "faces": { + "north": {"uv": [2, 5, 16, 3], "texture": "#all", "cullface": "down", "tintindex": 0}, + "south": {"uv": [2, 15, 16, 13], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "name": "down", + "from": [-1, -2, 8.3], + "to": [8, 0, 8.3], + "rotation": {"angle": -45, "axis": "y", "origin": [8, -2.25, 8.3]}, + "faces": { + "north": {"uv": [7, 13, 16, 11], "texture": "#all", "cullface": "down", "tintindex": 0}, + "south": {"uv": [7, 13, 16, 11], "texture": "#all", "cullface": "down", "tintindex": 0} + } + }, + { + "name": "west", + "from": [20.25, 7.75, 3.3], + "to": [21.25, 7.75, 13.3], + "rotation": {"angle": 45, "axis": "x", "origin": [18.5, 7.75, 8.3]}, + "faces": { + "up": {"uv": [3, 6, 13, 5], "rotation": 270, "texture": "#all", "cullface": "east", "tintindex": 0}, + "down": {"uv": [3, 6, 13, 5], "rotation": 270, "texture": "#all", "cullface": "east", "tintindex": 0} + } + }, + { + "name": "west", + "from": [18.25, 7.75, 1.3], + "to": [20.25, 7.75, 15.3], + "rotation": {"angle": 45, "axis": "x", "origin": [18.5, 7.75, 8.3]}, + "faces": { + "up": {"uv": [1, 8, 15, 6], "rotation": 270, "texture": "#all", "cullface": "east", "tintindex": 0}, + "down": {"uv": [1, 8, 15, 6], "rotation": 270, "texture": "#all", "cullface": "east", "tintindex": 0} + } + }, + { + "name": "west", + "from": [16.25, 7.75, 8.3], + "to": [18.25, 7.75, 17.3], + "rotation": {"angle": 45, "axis": "x", "origin": [18.5, 7.75, 8.3]}, + "faces": { + "up": {"uv": [7, 10, 16, 8], "rotation": 270, "texture": "#all", "cullface": "east", "tintindex": 0}, + "down": {"uv": [7, 10, 16, 8], "rotation": 270, "texture": "#all", "cullface": "east", "tintindex": 0} + } + }, + { + "name": "west", + "from": [16.25, 7.75, -0.7], + "to": [18.25, 7.75, 8.3], + "rotation": {"angle": 45, "axis": "x", "origin": [18.5, 7.75, 8.3]}, + "faces": { + "up": {"uv": [0, 10, 9, 8], "rotation": 270, "texture": "#all", "cullface": "east", "tintindex": 0}, + "down": {"uv": [0, 10, 9, 8], "rotation": 270, "texture": "#all", "cullface": "east", "tintindex": 0} + } + }, + { + "name": "west", + "from": [16.25, 7.75, 8.3], + "to": [18.25, 16.75, 8.3], + "rotation": {"angle": 45, "axis": "x", "origin": [18.5, 7.75, 8.3]}, + "faces": { + "north": {"uv": [0, 13, 9, 11], "rotation": 90, "texture": "#all", "cullface": "east", "tintindex": 0}, + "south": {"uv": [0, 13, 9, 11], "rotation": 270, "texture": "#all", "cullface": "east", "tintindex": 0} + } + }, + { + "name": "west", + "from": [20.25, 2.75, 8.3], + "to": [21.25, 12.75, 8.3], + "rotation": {"angle": 45, "axis": "x", "origin": [18.5, 7.75, 8.3]}, + "faces": { + "north": {"uv": [1, 9, 11, 8], "rotation": 90, "texture": "#all", "cullface": "east", "tintindex": 0}, + "south": {"uv": [1, 9, 11, 8], "rotation": 270, "texture": "#all", "cullface": "east", "tintindex": 0} + } + }, + { + "name": "west", + "from": [18.25, 0.75, 8.3], + "to": [20.25, 14.75, 8.3], + "rotation": {"angle": 45, "axis": "x", "origin": [18.5, 7.75, 8.3]}, + "faces": { + "north": {"uv": [0, 11, 14, 9], "rotation": 90, "texture": "#all", "cullface": "east", "tintindex": 0}, + "south": {"uv": [0, 11, 14, 9], "rotation": 270, "texture": "#all", "cullface": "east", "tintindex": 0} + } + }, + { + "name": "west", + "from": [16.25, -1.25, 8.3], + "to": [18.25, 7.75, 8.3], + "rotation": {"angle": 45, "axis": "x", "origin": [18.5, 7.75, 8.3]}, + "faces": { + "north": {"uv": [7, 13, 16, 11], "rotation": 90, "texture": "#all", "cullface": "east", "tintindex": 0}, + "south": {"uv": [7, 13, 16, 11], "rotation": 270, "texture": "#all", "cullface": "east", "tintindex": 0} + } + }, + { + "name": "east", + "from": [-5.05, 7.75, 3.3], + "to": [-4.05, 7.75, 13.3], + "rotation": {"angle": -45, "axis": "x", "origin": [-2.8, 7.75, 8.3]}, + "faces": { + "up": {"uv": [3, 6, 13, 5], "rotation": 90, "texture": "#all", "cullface": "west", "tintindex": 0}, + "down": {"uv": [3, 6, 13, 5], "rotation": 90, "texture": "#all", "cullface": "west", "tintindex": 0} + } + }, + { + "name": "east", + "from": [-4.05, 7.75, 1.3], + "to": [-2.05, 7.75, 15.3], + "rotation": {"angle": -45, "axis": "x", "origin": [-2.8, 7.75, 8.3]}, + "faces": { + "up": {"uv": [1, 8, 15, 6], "rotation": 90, "texture": "#all", "cullface": "west", "tintindex": 0}, + "down": {"uv": [1, 8, 15, 6], "rotation": 90, "texture": "#all", "cullface": "west", "tintindex": 0} + } + }, + { + "name": "east", + "from": [-2.05, 7.75, 8.3], + "to": [-0.05, 7.75, 17.3], + "rotation": {"angle": -45, "axis": "x", "origin": [-2.8, 7.75, 8.3]}, + "faces": { + "up": {"uv": [7, 10, 16, 8], "rotation": 90, "texture": "#all", "cullface": "west", "tintindex": 0}, + "down": {"uv": [7, 10, 16, 8], "rotation": 90, "texture": "#all", "cullface": "west", "tintindex": 0} + } + }, + { + "name": "east", + "from": [-2.05, 7.75, -0.7], + "to": [-0.05, 7.75, 8.3], + "rotation": {"angle": -45, "axis": "x", "origin": [-2.8, 7.75, 8.3]}, + "faces": { + "up": {"uv": [0, 10, 9, 8], "rotation": 90, "texture": "#all", "cullface": "west", "tintindex": 0}, + "down": {"uv": [0, 10, 9, 8], "rotation": 90, "texture": "#all", "cullface": "west", "tintindex": 0} + } + }, + { + "name": "east", + "from": [-2.05, -1.25, 8.3], + "to": [-0.05, 7.75, 8.3], + "rotation": {"angle": -45, "axis": "x", "origin": [-2.8, 7.75, 8.3]}, + "faces": { + "north": {"uv": [0, 13, 9, 11], "rotation": 270, "texture": "#all", "cullface": "west", "tintindex": 0}, + "south": {"uv": [0, 13, 9, 11], "rotation": 90, "texture": "#all", "cullface": "west", "tintindex": 0} + } + }, + { + "name": "east", + "from": [-5.05, 2.75, 8.3], + "to": [-4.05, 12.75, 8.3], + "rotation": {"angle": -45, "axis": "x", "origin": [-2.8, 7.75, 8.3]}, + "faces": { + "north": {"uv": [1, 9, 11, 8], "rotation": 270, "texture": "#all", "cullface": "west", "tintindex": 0}, + "south": {"uv": [1, 9, 11, 8], "rotation": 90, "texture": "#all", "cullface": "west", "tintindex": 0} + } + }, + { + "name": "east", + "from": [-4.05, 0.75, 8.3], + "to": [-2.05, 14.75, 8.3], + "rotation": {"angle": -45, "axis": "x", "origin": [-2.8, 7.75, 8.3]}, + "faces": { + "north": {"uv": [0, 11, 14, 9], "rotation": 270, "texture": "#all", "cullface": "west", "tintindex": 0}, + "south": {"uv": [0, 11, 14, 9], "rotation": 90, "texture": "#all", "cullface": "west", "tintindex": 0} + } + }, + { + "name": "east", + "from": [-2.05, 7.75, 8.3], + "to": [-0.05, 16.75, 8.3], + "rotation": {"angle": -45, "axis": "x", "origin": [-2.8, 7.75, 8.3]}, + "faces": { + "north": {"uv": [7, 13, 16, 11], "rotation": 270, "texture": "#all", "cullface": "west", "tintindex": 0}, + "south": {"uv": [7, 13, 16, 11], "rotation": 90, "texture": "#all", "cullface": "west", "tintindex": 0} + } + }, + { + "name": "north", + "from": [8.2, 2.75, -5.05], + "to": [8.2, 12.75, -4.05], + "rotation": {"angle": 45, "axis": "z", "origin": [8.2, 7.75, -2.8]}, + "faces": { + "east": {"uv": [3, 6, 13, 5], "rotation": 270, "texture": "#all", "cullface": "north", "tintindex": 0}, + "west": {"uv": [3, 6, 13, 5], "rotation": 90, "texture": "#all", "cullface": "north", "tintindex": 0} + } + }, + { + "name": "north", + "from": [8.2, 0.75, -4.05], + "to": [8.2, 14.75, -2.05], + "rotation": {"angle": 45, "axis": "z", "origin": [8.2, 7.75, -2.8]}, + "faces": { + "east": {"uv": [1, 8, 15, 6], "rotation": 270, "texture": "#all", "cullface": "north", "tintindex": 0}, + "west": {"uv": [1, 8, 15, 6], "rotation": 90, "texture": "#all", "cullface": "north", "tintindex": 0} + } + }, + { + "name": "north", + "from": [8.2, 7.75, -2.05], + "to": [8.2, 16.75, -0.05], + "rotation": {"angle": 45, "axis": "z", "origin": [8.2, 7.75, -2.8]}, + "faces": { + "east": {"uv": [7, 10, 16, 8], "rotation": 270, "texture": "#all", "cullface": "north", "tintindex": 0}, + "west": {"uv": [7, 10, 16, 8], "rotation": 90, "texture": "#all", "cullface": "north", "tintindex": 0} + } + }, + { + "name": "north", + "from": [8.2, -1.25, -2.05], + "to": [8.2, 7.75, -0.05], + "rotation": {"angle": 45, "axis": "z", "origin": [8.2, 7.75, -2.8]}, + "faces": { + "east": {"uv": [0, 10, 9, 8], "rotation": 270, "texture": "#all", "cullface": "north", "tintindex": 0}, + "west": {"uv": [0, 10, 9, 8], "rotation": 90, "texture": "#all", "cullface": "north", "tintindex": 0} + } + }, + { + "name": "north", + "from": [-0.8, 7.75, -2.05], + "to": [8.2, 7.75, -0.05], + "rotation": {"angle": 45, "axis": "z", "origin": [8.2, 7.75, -2.8]}, + "faces": { + "up": {"uv": [0, 13, 9, 11], "rotation": 180, "texture": "#all", "cullface": "north", "tintindex": 0}, + "down": {"uv": [0, 13, 9, 11], "texture": "#all", "cullface": "north", "tintindex": 0} + } + }, + { + "name": "north", + "from": [3.2, 7.75, -5.05], + "to": [13.2, 7.75, -4.05], + "rotation": {"angle": 45, "axis": "z", "origin": [8.2, 7.75, -2.8]}, + "faces": { + "up": {"uv": [1, 9, 11, 8], "rotation": 180, "texture": "#all", "cullface": "north", "tintindex": 0}, + "down": {"uv": [1, 9, 11, 8], "texture": "#all", "cullface": "north", "tintindex": 0} + } + }, + { + "name": "north", + "from": [1.2, 7.75, -4.05], + "to": [15.2, 7.75, -2.05], + "rotation": {"angle": 45, "axis": "z", "origin": [8.2, 7.75, -2.8]}, + "faces": { + "up": {"uv": [0, 11, 14, 9], "rotation": 180, "texture": "#all", "cullface": "north", "tintindex": 0}, + "down": {"uv": [0, 11, 14, 9], "texture": "#all", "cullface": "north", "tintindex": 0} + } + }, + { + "name": "north", + "from": [8.2, 7.75, -2.05], + "to": [17.2, 7.75, -0.05], + "rotation": {"angle": 45, "axis": "z", "origin": [8.2, 7.75, -2.8]}, + "faces": { + "up": {"uv": [7, 13, 16, 11], "rotation": 180, "texture": "#all", "cullface": "north", "tintindex": 0}, + "down": {"uv": [7, 13, 16, 11], "texture": "#all", "cullface": "north", "tintindex": 0} + } + }, + { + "name": "south", + "from": [8.2, 2.75, 19.95], + "to": [8.2, 12.75, 20.95], + "rotation": {"angle": -45, "axis": "z", "origin": [8.2, 7.75, 18.7]}, + "faces": { + "east": {"uv": [3, 6, 13, 5], "rotation": 90, "texture": "#all", "cullface": "south", "tintindex": 0}, + "west": {"uv": [3, 6, 13, 5], "rotation": 270, "texture": "#all", "cullface": "south", "tintindex": 0} + } + }, + { + "name": "south", + "from": [8.2, 0.75, 17.95], + "to": [8.2, 14.75, 19.95], + "rotation": {"angle": -45, "axis": "z", "origin": [8.2, 7.75, 18.7]}, + "faces": { + "east": {"uv": [1, 8, 15, 6], "rotation": 90, "texture": "#all", "cullface": "south", "tintindex": 0}, + "west": {"uv": [1, 8, 15, 6], "rotation": 270, "texture": "#all", "cullface": "south", "tintindex": 0} + } + }, + { + "name": "south", + "from": [8.2, 7.75, 15.95], + "to": [8.2, 16.75, 17.95], + "rotation": {"angle": -45, "axis": "z", "origin": [8.2, 7.75, 18.7]}, + "faces": { + "east": {"uv": [7, 10, 16, 8], "rotation": 90, "texture": "#all", "cullface": "south", "tintindex": 0}, + "west": {"uv": [7, 10, 16, 8], "rotation": 270, "texture": "#all", "cullface": "south", "tintindex": 0} + } + }, + { + "name": "south", + "from": [8.2, -1.25, 15.95], + "to": [8.2, 7.75, 17.95], + "rotation": {"angle": -45, "axis": "z", "origin": [8.2, 7.75, 18.7]}, + "faces": { + "east": {"uv": [0, 10, 9, 8], "rotation": 90, "texture": "#all", "cullface": "south", "tintindex": 0}, + "west": {"uv": [0, 10, 9, 8], "rotation": 270, "texture": "#all", "cullface": "south", "tintindex": 0} + } + }, + { + "name": "south", + "from": [8.2, 7.75, 15.95], + "to": [17.2, 7.75, 17.95], + "rotation": {"angle": -45, "axis": "z", "origin": [8.2, 7.75, 18.7]}, + "faces": { + "up": {"uv": [0, 13, 9, 11], "texture": "#all", "cullface": "south", "tintindex": 0}, + "down": {"uv": [0, 13, 9, 11], "rotation": 180, "texture": "#all", "cullface": "south", "tintindex": 0} + } + }, + { + "name": "south", + "from": [3.2, 7.75, 19.95], + "to": [13.2, 7.75, 20.95], + "rotation": {"angle": -45, "axis": "z", "origin": [8.2, 7.75, 18.7]}, + "faces": { + "up": {"uv": [1, 9, 11, 8], "texture": "#all", "cullface": "south", "tintindex": 0}, + "down": {"uv": [1, 9, 11, 8], "rotation": 180, "texture": "#all", "cullface": "south", "tintindex": 0} + } + }, + { + "name": "south", + "from": [1.2, 7.75, 17.95], + "to": [15.2, 7.75, 19.95], + "rotation": {"angle": -45, "axis": "z", "origin": [8.2, 7.75, 18.7]}, + "faces": { + "up": {"uv": [0, 11, 14, 9], "texture": "#all", "cullface": "south", "tintindex": 0}, + "down": {"uv": [0, 11, 14, 9], "rotation": 180, "texture": "#all", "cullface": "south", "tintindex": 0} + } + }, + { + "name": "south", + "from": [-0.8, 7.75, 15.95], + "to": [8.2, 7.75, 17.95], + "rotation": {"angle": -45, "axis": "z", "origin": [8.2, 7.75, 18.7]}, + "faces": { + "up": {"uv": [7, 13, 16, 11], "texture": "#all", "cullface": "south", "tintindex": 0}, + "down": {"uv": [7, 13, 16, 11], "rotation": 180, "texture": "#all", "cullface": "south", "tintindex": 0} + } + } + ], + "groups": [ + 0, + { + "name": "top1", + "origin": [8, 18.25, 8], + "color": 0, + "children": [1, 2, 3, 4] + }, + { + "name": "top2", + "origin": [8, 18.25, 8], + "color": 0, + "children": [5, 6, 7, 8] + }, + { + "name": "down1", + "origin": [8, 18.25, 8], + "color": 0, + "children": [9, 10, 11, 12] + }, + { + "name": "down2", + "origin": [8, 18.25, 8], + "color": 0, + "children": [13, 14, 15, 16] + }, + { + "name": "west1", + "origin": [8, 18.25, 8], + "color": 0, + "children": [17, 18, 19, 20] + }, + { + "name": "west2", + "origin": [8, 18.25, 8], + "color": 0, + "children": [21, 22, 23, 24] + }, + { + "name": "east1", + "origin": [8, 18.25, 8], + "color": 0, + "children": [25, 26, 27, 28] + }, + { + "name": "east2", + "origin": [8, 18.25, 8], + "color": 0, + "children": [29, 30, 31, 32] + }, + { + "name": "north", + "origin": [8, 18.25, 8], + "color": 0, + "children": [33, 34, 35, 36] + }, + { + "name": "north2", + "origin": [8, 18.25, 8], + "color": 0, + "children": [37, 38, 39, 40] + }, + { + "name": "south", + "origin": [8, 18.25, 8], + "color": 0, + "children": [41, 42, 43, 44] + }, + { + "name": "south2", + "origin": [8, 18.25, 8], + "color": 0, + "children": [45, 46, 47, 48] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/potted_royal_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/potted_royal_sapling.json new file mode 100644 index 00000000..3005fa99 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/potted_royal_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "antarchy:block/royal/royal_sapling" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/potted_truffalo_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/potted_truffalo_sapling.json new file mode 100644 index 00000000..588cbb79 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/potted_truffalo_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/flower_pot_cross", + "textures": { + "plant": "antarchy:block/truffalo/truffalo_sapling" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_button.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_button.json new file mode 100644 index 00000000..36e030a1 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_button.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button", + "textures": { + "texture": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_button_inventory.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_button_inventory.json new file mode 100644 index 00000000..ceffb84e --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_button_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button_inventory", + "textures": { + "texture": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_button_pressed.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_button_pressed.json new file mode 100644 index 00000000..79c0b4f2 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_button_pressed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button_pressed", + "textures": { + "texture": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_left.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_left.json new file mode 100644 index 00000000..09343280 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left", + "textures": { + "bottom": "antarchy:block/royal/royal_door_bottom", + "top": "antarchy:block/royal/royal_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_left_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_left_open.json new file mode 100644 index 00000000..c80e4635 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left_open", + "textures": { + "bottom": "antarchy:block/royal/royal_door_bottom", + "top": "antarchy:block/royal/royal_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_right.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_right.json new file mode 100644 index 00000000..61ad1a23 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right", + "textures": { + "bottom": "antarchy:block/royal/royal_door_bottom", + "top": "antarchy:block/royal/royal_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_right_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_right_open.json new file mode 100644 index 00000000..ae549f13 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_bottom_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right_open", + "textures": { + "bottom": "antarchy:block/royal/royal_door_bottom", + "top": "antarchy:block/royal/royal_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_left.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_left.json new file mode 100644 index 00000000..293f2820 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_left", + "textures": { + "bottom": "antarchy:block/royal/royal_door_bottom", + "top": "antarchy:block/royal/royal_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_left_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_left_open.json new file mode 100644 index 00000000..b368a9ce --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_left_open", + "textures": { + "bottom": "antarchy:block/royal/royal_door_bottom", + "top": "antarchy:block/royal/royal_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_right.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_right.json new file mode 100644 index 00000000..ea6f79f9 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_right", + "textures": { + "bottom": "antarchy:block/royal/royal_door_bottom", + "top": "antarchy:block/royal/royal_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_right_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_right_open.json new file mode 100644 index 00000000..3931cc09 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_door_top_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_right_open", + "textures": { + "bottom": "antarchy:block/royal/royal_door_bottom", + "top": "antarchy:block/royal/royal_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate.json new file mode 100644 index 00000000..11b31689 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate", + "textures": { + "texture": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate_open.json new file mode 100644 index 00000000..f3d12ece --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_open", + "textures": { + "texture": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate_wall.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate_wall.json new file mode 100644 index 00000000..b9f32fa1 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate_wall.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall", + "textures": { + "texture": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate_wall_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate_wall_open.json new file mode 100644 index 00000000..db7fd6fd --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_gate_wall_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall_open", + "textures": { + "texture": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_inventory.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_inventory.json new file mode 100644 index 00000000..fa9f309e --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_inventory", + "textures": { + "texture": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_post.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_post.json new file mode 100644 index 00000000..01224b40 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_post", + "textures": { + "texture": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_side.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_side.json new file mode 100644 index 00000000..3c84fe64 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_fence_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_side", + "textures": { + "texture": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_flowering_leaves.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_flowering_leaves.json new file mode 100644 index 00000000..6a43deb3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_flowering_leaves.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/leaves", + "ambientocclusion": false, + "textures": { + "all": "antarchy:block/royal/flowering_royal_leaves" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_hanging_sign.json new file mode 100644 index 00000000..2361c164 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/royal/royal_planks" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_leaves.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_leaves.json new file mode 100644 index 00000000..86719f8a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_leaves.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/leaves", + "ambientocclusion": false, + "textures": { + "all": "antarchy:block/royal/royal_leaves" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_log.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_log.json new file mode 100644 index 00000000..dbca3e81 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_log", + "textures": { + "end": "antarchy:block/royal/royal_log_top", + "side": "antarchy:block/royal/royal_log" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_log_horizontal.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_log_horizontal.json new file mode 100644 index 00000000..f82cdd90 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_log_horizontal", + "textures": { + "end": "antarchy:block/royal/royal_log_top", + "side": "antarchy:block/royal/royal_log" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_planks.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_planks.json new file mode 100644 index 00000000..f8e251e2 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_planks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/royal/royal_planks" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_pressure_plate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_pressure_plate.json new file mode 100644 index 00000000..7a81d495 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_pressure_plate.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate", + "textures": { + "texture": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_pressure_plate_down.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_pressure_plate_down.json new file mode 100644 index 00000000..daffbc5b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_pressure_plate_down.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate_down", + "textures": { + "texture": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_sapling.json new file mode 100644 index 00000000..2b894332 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/royal/royal_sapling" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_sign.json new file mode 100644 index 00000000..8fe4b43a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:item/royal_sign" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_slab.json new file mode 100644 index 00000000..5ec959ed --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_slab.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_slab", + "textures": { + "bottom": "antarchy:block/royal/royal_planks", + "side": "antarchy:block/royal/royal_planks", + "top": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_slab_top.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_slab_top.json new file mode 100644 index 00000000..29c1dc4c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_slab_top.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_slab_top", + "textures": { + "bottom": "antarchy:block/royal/royal_planks", + "side": "antarchy:block/royal/royal_planks", + "top": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_stairs.json new file mode 100644 index 00000000..ee5be360 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_stairs.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs", + "textures": { + "bottom": "antarchy:block/royal/royal_planks", + "side": "antarchy:block/royal/royal_planks", + "top": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_stairs_inner.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_stairs_inner.json new file mode 100644 index 00000000..e7f09bb9 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_stairs_inner.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs_inner", + "textures": { + "bottom": "antarchy:block/royal/royal_planks", + "side": "antarchy:block/royal/royal_planks", + "top": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_stairs_outer.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_stairs_outer.json new file mode 100644 index 00000000..4a1952ab --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_stairs_outer.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs_outer", + "textures": { + "bottom": "antarchy:block/royal/royal_planks", + "side": "antarchy:block/royal/royal_planks", + "top": "antarchy:block/royal/royal_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_trapdoor_bottom.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_trapdoor_bottom.json new file mode 100644 index 00000000..df801129 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_trapdoor_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_bottom", + "textures": { + "texture": "antarchy:block/royal/royal_trapdoor" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_trapdoor_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_trapdoor_open.json new file mode 100644 index 00000000..b02ecc2c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_trapdoor_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_open", + "textures": { + "texture": "antarchy:block/royal/royal_trapdoor" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_trapdoor_top.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_trapdoor_top.json new file mode 100644 index 00000000..22f65c69 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_trapdoor_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_top", + "textures": { + "texture": "antarchy:block/royal/royal_trapdoor" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_wall_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_wall_hanging_sign.json new file mode 100644 index 00000000..2361c164 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_wall_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/royal/royal_planks" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_wall_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_wall_sign.json new file mode 100644 index 00000000..8fe4b43a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_wall_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:item/royal_sign" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_wood.json new file mode 100644 index 00000000..a11d1ac2 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/royal_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_wood", + "textures": { + "end": "antarchy:block/royal/royal_log", + "side": "antarchy:block/royal/royal_log" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_royal_log.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_royal_log.json new file mode 100644 index 00000000..a322e498 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_royal_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/stripped_jungle_log", + "textures": { + "end": "antarchy:block/royal/stripped_royal_log_top", + "side": "antarchy:block/royal/stripped_royal_log" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_royal_log_horizontal.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_royal_log_horizontal.json new file mode 100644 index 00000000..d5ca1dc7 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_royal_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/stripped_jungle_log_horizontal", + "textures": { + "end": "antarchy:block/royal/stripped_royal_log_top", + "side": "antarchy:block/royal/stripped_royal_log" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_royal_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_royal_wood.json new file mode 100644 index 00000000..aff9c269 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_royal_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/stripped_jungle_wood", + "textures": { + "end": "antarchy:block/royal/stripped_royal_log", + "side": "antarchy:block/royal/stripped_royal_log" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_truffalo_log.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_truffalo_log.json new file mode 100644 index 00000000..f68503ff --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_truffalo_log.json @@ -0,0 +1,22 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#side", + "end": "antarchy:block/truffalo/truffalo_stripped_log_top", + "side": "antarchy:block/truffalo/truffalo_log_stripped" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [4, 0, 12, 16], "texture": "#side"}, + "south": {"uv": [4, 0, 12, 16], "texture": "#side"}, + "east": {"uv": [4, 0, 12, 16], "texture": "#side"}, + "west": {"uv": [4, 0, 12, 16], "texture": "#side"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#end"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#end"} + } + } + ] +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_truffalo_log_horizontal.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_truffalo_log_horizontal.json new file mode 100644 index 00000000..e1e2c109 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_truffalo_log_horizontal.json @@ -0,0 +1,22 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#side", + "end": "antarchy:block/truffalo/truffalo_stripped_log_top", + "side": "antarchy:block/truffalo/truffalo_log_stripped" + }, + "elements": [ + { + "from": [0, 4, 4], + "to": [16, 12, 12], + "faces": { + "north": {"uv": [0, 4, 16, 12], "texture": "#side"}, + "south": {"uv": [0, 4, 16, 12], "texture": "#side"}, + "up": {"uv": [0, 4, 16, 12], "texture": "#side"}, + "down": {"uv": [0, 4, 16, 12], "texture": "#side"}, + "east": {"uv": [4, 4, 12, 12], "texture": "#end"}, + "west": {"uv": [4, 4, 12, 12], "texture": "#end"} + } + } + ] +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_truffalo_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_truffalo_wood.json new file mode 100644 index 00000000..8e9862c5 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/stripped_truffalo_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/stripped_jungle_wood", + "textures": { + "end": "antarchy:block/truffalo/truffalo_log_stripped", + "side": "antarchy:block/truffalo/truffalo_log_stripped" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_button.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_button.json new file mode 100644 index 00000000..843aa16e --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_button.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_button_inventory.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_button_inventory.json new file mode 100644 index 00000000..50a4be40 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_button_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button_inventory", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_button_pressed.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_button_pressed.json new file mode 100644 index 00000000..0c3582ff --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_button_pressed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_button_pressed", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_left.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_left.json new file mode 100644 index 00000000..e41b0925 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_door_bottom", + "top": "antarchy:block/truffalo/truffalo_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_left_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_left_open.json new file mode 100644 index 00000000..c6962b38 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_left_open", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_door_bottom", + "top": "antarchy:block/truffalo/truffalo_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_right.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_right.json new file mode 100644 index 00000000..0979ae2c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_door_bottom", + "top": "antarchy:block/truffalo/truffalo_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_right_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_right_open.json new file mode 100644 index 00000000..af35d714 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_bottom_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_bottom_right_open", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_door_bottom", + "top": "antarchy:block/truffalo/truffalo_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_left.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_left.json new file mode 100644 index 00000000..2a492b22 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_left", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_door_bottom", + "top": "antarchy:block/truffalo/truffalo_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_left_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_left_open.json new file mode 100644 index 00000000..2e21673b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_left_open", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_door_bottom", + "top": "antarchy:block/truffalo/truffalo_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_right.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_right.json new file mode 100644 index 00000000..95279c03 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_right", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_door_bottom", + "top": "antarchy:block/truffalo/truffalo_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_right_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_right_open.json new file mode 100644 index 00000000..a949ce80 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_door_top_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/jungle_door_top_right_open", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_door_bottom", + "top": "antarchy:block/truffalo/truffalo_door_top" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate.json new file mode 100644 index 00000000..b396e727 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate_open.json new file mode 100644 index 00000000..f6c1ed03 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_open", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate_wall.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate_wall.json new file mode 100644 index 00000000..6db550ea --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate_wall.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate_wall_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate_wall_open.json new file mode 100644 index 00000000..9772ded0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_gate_wall_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_gate_wall_open", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_inventory.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_inventory.json new file mode 100644 index 00000000..fd4486f3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_inventory.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_inventory", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_post.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_post.json new file mode 100644 index 00000000..5850ae3f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_post.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_post", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_side.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_side.json new file mode 100644 index 00000000..74b43126 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_fence_side.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_fence_side", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_hanging_sign.json new file mode 100644 index 00000000..7bce3536 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/truffalo/truffalo_planks" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_log.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_log.json new file mode 100644 index 00000000..5c167672 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_log.json @@ -0,0 +1,22 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#side", + "end": "antarchy:block/truffalo/truffalo_log_top", + "side": "antarchy:block/truffalo/truffalo_log" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 16, 12], + "faces": { + "north": {"uv": [4, 0, 12, 16], "texture": "#side"}, + "south": {"uv": [4, 0, 12, 16], "texture": "#side"}, + "east": {"uv": [4, 0, 12, 16], "texture": "#side"}, + "west": {"uv": [4, 0, 12, 16], "texture": "#side"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#end"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#end"} + } + } + ] +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_log_horizontal.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_log_horizontal.json new file mode 100644 index 00000000..48abda41 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_log_horizontal.json @@ -0,0 +1,22 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#side", + "end": "antarchy:block/truffalo/truffalo_log_top", + "side": "antarchy:block/truffalo/truffalo_log" + }, + "elements": [ + { + "from": [0, 4, 4], + "to": [16, 12, 12], + "faces": { + "north": {"uv": [0, 4, 16, 12], "texture": "#side"}, + "south": {"uv": [0, 4, 16, 12], "texture": "#side"}, + "up": {"uv": [0, 4, 16, 12], "texture": "#side"}, + "down": {"uv": [0, 4, 16, 12], "texture": "#side"}, + "east": {"uv": [4, 4, 12, 12], "texture": "#end"}, + "west": {"uv": [4, 4, 12, 12], "texture": "#end"} + } + } + ] +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_planks.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_planks.json new file mode 100644 index 00000000..e539b1a7 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_planks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/truffalo/truffalo_planks" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_pressure_plate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_pressure_plate.json new file mode 100644 index 00000000..d1c22644 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_pressure_plate.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_pressure_plate_down.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_pressure_plate_down.json new file mode 100644 index 00000000..ac9d101f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_pressure_plate_down.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_pressure_plate_down", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_sapling.json new file mode 100644 index 00000000..47883c27 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/truffalo/truffalo_sapling" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_sign.json new file mode 100644 index 00000000..4be93de3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:item/truffalo_sign" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_slab.json new file mode 100644 index 00000000..cba4d3f9 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_slab.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_slab", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_planks", + "side": "antarchy:block/truffalo/truffalo_planks", + "top": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_slab_top.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_slab_top.json new file mode 100644 index 00000000..f8642fc2 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_slab_top.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_slab_top", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_planks", + "side": "antarchy:block/truffalo/truffalo_planks", + "top": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_stairs.json new file mode 100644 index 00000000..885d55dd --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_stairs.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_planks", + "side": "antarchy:block/truffalo/truffalo_planks", + "top": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_stairs_inner.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_stairs_inner.json new file mode 100644 index 00000000..99a194ca --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_stairs_inner.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs_inner", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_planks", + "side": "antarchy:block/truffalo/truffalo_planks", + "top": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_stairs_outer.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_stairs_outer.json new file mode 100644 index 00000000..4f09e29a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_stairs_outer.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/jungle_stairs_outer", + "textures": { + "bottom": "antarchy:block/truffalo/truffalo_planks", + "side": "antarchy:block/truffalo/truffalo_planks", + "top": "antarchy:block/truffalo/truffalo_planks" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_trapdoor_bottom.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_trapdoor_bottom.json new file mode 100644 index 00000000..297268dd --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_trapdoor_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_bottom", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_trapdoor" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_trapdoor_open.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_trapdoor_open.json new file mode 100644 index 00000000..d1d02cbb --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_trapdoor_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_open", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_trapdoor" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_trapdoor_top.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_trapdoor_top.json new file mode 100644 index 00000000..fe3304e6 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_trapdoor_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_trapdoor_top", + "textures": { + "texture": "antarchy:block/truffalo/truffalo_trapdoor" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_black.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_black.json new file mode 100644 index 00000000..c280c5fa --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_black.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/black_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_blue.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_blue.json new file mode 100644 index 00000000..b83e93f3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/blue_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_brown.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_brown.json new file mode 100644 index 00000000..8ff127f8 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_brown.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/brown_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_cyan.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_cyan.json new file mode 100644 index 00000000..d073d3ef --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_cyan.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/cyan_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_gray.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_gray.json new file mode 100644 index 00000000..e904d084 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_gray.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/gray_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_green.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_green.json new file mode 100644 index 00000000..d68de396 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_green.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/green_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_light_blue.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_light_blue.json new file mode 100644 index 00000000..05591ee1 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_light_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/light_blue_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_light_gray.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_light_gray.json new file mode 100644 index 00000000..a3acbb35 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_light_gray.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/light_gray_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_lime.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_lime.json new file mode 100644 index 00000000..04c2d91c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_lime.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/lime_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_magenta.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_magenta.json new file mode 100644 index 00000000..e65a5269 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_magenta.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/magenta_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_orange.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_orange.json new file mode 100644 index 00000000..5a8806ab --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_orange.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/orange_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_pink.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_pink.json new file mode 100644 index 00000000..9e7ade11 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_pink.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/pink_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_purple.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_purple.json new file mode 100644 index 00000000..738191ba --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_purple.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/purple_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_red.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_red.json new file mode 100644 index 00000000..f95dacdc --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_red.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/red_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_template.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_template.json new file mode 100644 index 00000000..a6c7c377 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_template.json @@ -0,0 +1,2552 @@ +{ + "parent": "block/block", + "textures": { + "particle": "#all" + }, + "elements": [ + { + "name": "block", + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "north": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#all", + "cullface": "north", + "tintindex": 0 + }, + "east": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#all", + "cullface": "east", + "tintindex": 0 + }, + "south": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#all", + "cullface": "south", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#all", + "cullface": "west", + "tintindex": 0 + }, + "up": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#all", + "cullface": "up", + "tintindex": 0 + }, + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + } + } + }, + { + "name": "top", + "from": [ + 8, + 20, + 3.3 + ], + "to": [ + 8, + 21, + 13.3 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 8, + 18.25, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 3, + 2, + 13, + 1 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 2, + 13, + 1 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + } + } + }, + { + "name": "top", + "from": [ + 8, + 18, + 1.3 + ], + "to": [ + 8, + 20, + 15.3 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 8, + 18.25, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 1, + 4, + 15, + 2 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 4, + 15, + 2 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + } + } + }, + { + "name": "top", + "from": [ + 8, + 16, + 8.3 + ], + "to": [ + 8, + 18, + 17.3 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 8, + 18.25, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 7, + 6, + 16, + 4 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + }, + "west": { + "uv": [ + 7, + 6, + 16, + 4 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + } + } + }, + { + "name": "top", + "from": [ + 8, + 16, + -0.7 + ], + "to": [ + 8, + 18, + 8.3 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 8, + 18.25, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 0, + 6, + 9, + 4 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 6, + 9, + 4 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + } + } + }, + { + "name": "top", + "from": [ + -1, + 16, + 8.3 + ], + "to": [ + 8, + 18, + 8.3 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 8, + 18.25, + 8.3 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 7, + 9, + 5 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + }, + "south": { + "uv": [ + 0, + 7, + 9, + 5 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + } + } + }, + { + "name": "top", + "from": [ + 3, + 20, + 8.3 + ], + "to": [ + 13, + 21, + 8.3 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 8, + 18.25, + 8.3 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 3, + 14, + 2 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + }, + "south": { + "uv": [ + 4, + 3, + 14, + 2 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + } + } + }, + { + "name": "top", + "from": [ + 1, + 18, + 8.3 + ], + "to": [ + 15, + 20, + 8.3 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 8, + 18.25, + 8.3 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 5, + 16, + 3 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + }, + "south": { + "uv": [ + 2, + 5, + 16, + 3 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + } + } + }, + { + "name": "top", + "from": [ + 8, + 16, + 8.3 + ], + "to": [ + 17, + 18, + 8.3 + ], + "rotation": { + "angle": 45, + "axis": "y", + "origin": [ + 8, + 18.25, + 8.3 + ] + }, + "faces": { + "north": { + "uv": [ + 7, + 7, + 16, + 5 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + }, + "south": { + "uv": [ + 7, + 7, + 16, + 5 + ], + "rotation": 180, + "texture": "#all", + "cullface": "up", + "tintindex": 0 + } + } + }, + { + "name": "down", + "from": [ + 8, + -5, + 3.3 + ], + "to": [ + 8, + -4, + 13.3 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8, + -2.25, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 4, + 15, + 14, + 14 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 14, + 13, + 13 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + } + } + }, + { + "name": "down", + "from": [ + 8, + -4, + 1.3 + ], + "to": [ + 8, + -2, + 15.3 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8, + -2.25, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 1, + 14, + 15, + 12 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 14, + 15, + 12 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + } + } + }, + { + "name": "down", + "from": [ + 8, + -2, + 8.3 + ], + "to": [ + 8, + 0, + 17.3 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8, + -2.25, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 7, + 6, + 16, + 4 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + }, + "west": { + "uv": [ + 7, + 12, + 16, + 10 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + } + } + }, + { + "name": "down", + "from": [ + 8, + -2, + -0.7 + ], + "to": [ + 8, + 0, + 8.3 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8, + -2.25, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 0, + 6, + 9, + 4 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 12, + 9, + 10 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + } + } + }, + { + "name": "down", + "from": [ + 8, + -2, + 8.3 + ], + "to": [ + 17, + 0, + 8.3 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8, + -2.25, + 8.3 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 13, + 9, + 11 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + }, + "south": { + "uv": [ + 0, + 13, + 9, + 11 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + } + } + }, + { + "name": "down", + "from": [ + 3, + -5, + 8.3 + ], + "to": [ + 13, + -4, + 8.3 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8, + -2.25, + 8.3 + ] + }, + "faces": { + "north": { + "uv": [ + 4, + 3, + 14, + 2 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + }, + "south": { + "uv": [ + 4, + 15, + 14, + 14 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + } + } + }, + { + "name": "down", + "from": [ + 1, + -4, + 8.3 + ], + "to": [ + 15, + -2, + 8.3 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8, + -2.25, + 8.3 + ] + }, + "faces": { + "north": { + "uv": [ + 2, + 5, + 16, + 3 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + }, + "south": { + "uv": [ + 2, + 15, + 16, + 13 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + } + } + }, + { + "name": "down", + "from": [ + -1, + -2, + 8.3 + ], + "to": [ + 8, + 0, + 8.3 + ], + "rotation": { + "angle": -45, + "axis": "y", + "origin": [ + 8, + -2.25, + 8.3 + ] + }, + "faces": { + "north": { + "uv": [ + 7, + 13, + 16, + 11 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + }, + "south": { + "uv": [ + 7, + 13, + 16, + 11 + ], + "texture": "#all", + "cullface": "down", + "tintindex": 0 + } + } + }, + { + "name": "west", + "from": [ + 20.25, + 7.75, + 3.3 + ], + "to": [ + 21.25, + 7.75, + 13.3 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 18.5, + 7.75, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 3, + 6, + 13, + 5 + ], + "rotation": 270, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + }, + "west": { + "uv": [ + 3, + 6, + 13, + 5 + ], + "rotation": 270, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + } + } + }, + { + "name": "west", + "from": [ + 18.25, + 7.75, + 1.3 + ], + "to": [ + 20.25, + 7.75, + 15.3 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 18.5, + 7.75, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 1, + 8, + 15, + 6 + ], + "rotation": 270, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 8, + 15, + 6 + ], + "rotation": 270, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + } + } + }, + { + "name": "west", + "from": [ + 16.25, + 7.75, + 8.3 + ], + "to": [ + 18.25, + 7.75, + 17.3 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 18.5, + 7.75, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 7, + 10, + 16, + 8 + ], + "rotation": 270, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + }, + "west": { + "uv": [ + 7, + 10, + 16, + 8 + ], + "rotation": 270, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + } + } + }, + { + "name": "west", + "from": [ + 16.25, + 7.75, + -0.7 + ], + "to": [ + 18.25, + 7.75, + 8.3 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 18.5, + 7.75, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 0, + 10, + 9, + 8 + ], + "rotation": 270, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 10, + 9, + 8 + ], + "rotation": 270, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + } + } + }, + { + "name": "west", + "from": [ + 16.25, + 7.75, + 8.3 + ], + "to": [ + 18.25, + 16.75, + 8.3 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 18.5, + 7.75, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 0, + 13, + 9, + 11 + ], + "rotation": 90, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 13, + 9, + 11 + ], + "rotation": 270, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + } + } + }, + { + "name": "west", + "from": [ + 20.25, + 2.75, + 8.3 + ], + "to": [ + 21.25, + 12.75, + 8.3 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 18.5, + 7.75, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 1, + 9, + 11, + 8 + ], + "rotation": 90, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + }, + "west": { + "uv": [ + 1, + 9, + 11, + 8 + ], + "rotation": 270, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + } + } + }, + { + "name": "west", + "from": [ + 18.25, + 0.75, + 8.3 + ], + "to": [ + 20.25, + 14.75, + 8.3 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 18.5, + 7.75, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 0, + 11, + 14, + 9 + ], + "rotation": 90, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + }, + "west": { + "uv": [ + 0, + 11, + 14, + 9 + ], + "rotation": 270, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + } + } + }, + { + "name": "west", + "from": [ + 16.25, + -1.25, + 8.3 + ], + "to": [ + 18.25, + 7.75, + 8.3 + ], + "rotation": { + "angle": 45, + "axis": "x", + "origin": [ + 18.5, + 7.75, + 8.3 + ] + }, + "faces": { + "east": { + "uv": [ + 7, + 13, + 16, + 11 + ], + "rotation": 90, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + }, + "west": { + "uv": [ + 7, + 13, + 16, + 11 + ], + "rotation": 270, + "texture": "#all", + "cullface": "east", + "tintindex": 0 + } + } + }, + { + "name": "east", + "from": [ + -5.05, + 7.75, + 3.3 + ], + "to": [ + -4.05, + 7.75, + 13.3 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + -2.8, + 7.75, + 8.3 + ] + }, + "faces": { + "west": { + "uv": [ + 3, + 6, + 13, + 5 + ], + "rotation": 90, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + }, + "east": { + "uv": [ + 3, + 6, + 13, + 5 + ], + "rotation": 90, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + } + } + }, + { + "name": "east", + "from": [ + -4.05, + 7.75, + 1.3 + ], + "to": [ + -2.05, + 7.75, + 15.3 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + -2.8, + 7.75, + 8.3 + ] + }, + "faces": { + "west": { + "uv": [ + 1, + 8, + 15, + 6 + ], + "rotation": 90, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + }, + "east": { + "uv": [ + 1, + 8, + 15, + 6 + ], + "rotation": 90, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + } + } + }, + { + "name": "east", + "from": [ + -2.05, + 7.75, + 8.3 + ], + "to": [ + -0.05, + 7.75, + 17.3 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + -2.8, + 7.75, + 8.3 + ] + }, + "faces": { + "west": { + "uv": [ + 7, + 10, + 16, + 8 + ], + "rotation": 90, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + }, + "east": { + "uv": [ + 7, + 10, + 16, + 8 + ], + "rotation": 90, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + } + } + }, + { + "name": "east", + "from": [ + -2.05, + 7.75, + -0.7 + ], + "to": [ + -0.05, + 7.75, + 8.3 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + -2.8, + 7.75, + 8.3 + ] + }, + "faces": { + "west": { + "uv": [ + 0, + 10, + 9, + 8 + ], + "rotation": 90, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + }, + "east": { + "uv": [ + 0, + 10, + 9, + 8 + ], + "rotation": 90, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + } + } + }, + { + "name": "east", + "from": [ + -2.05, + -1.25, + 8.3 + ], + "to": [ + -0.05, + 7.75, + 8.3 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + -2.8, + 7.75, + 8.3 + ] + }, + "faces": { + "west": { + "uv": [ + 0, + 13, + 9, + 11 + ], + "rotation": 270, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + }, + "east": { + "uv": [ + 0, + 13, + 9, + 11 + ], + "rotation": 90, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + } + } + }, + { + "name": "east", + "from": [ + -5.05, + 2.75, + 8.3 + ], + "to": [ + -4.05, + 12.75, + 8.3 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + -2.8, + 7.75, + 8.3 + ] + }, + "faces": { + "west": { + "uv": [ + 1, + 9, + 11, + 8 + ], + "rotation": 270, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + }, + "east": { + "uv": [ + 1, + 9, + 11, + 8 + ], + "rotation": 90, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + } + } + }, + { + "name": "east", + "from": [ + -4.05, + 0.75, + 8.3 + ], + "to": [ + -2.05, + 14.75, + 8.3 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + -2.8, + 7.75, + 8.3 + ] + }, + "faces": { + "west": { + "uv": [ + 0, + 11, + 14, + 9 + ], + "rotation": 270, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + }, + "east": { + "uv": [ + 0, + 11, + 14, + 9 + ], + "rotation": 90, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + } + } + }, + { + "name": "east", + "from": [ + -2.05, + 7.75, + 8.3 + ], + "to": [ + -0.05, + 16.75, + 8.3 + ], + "rotation": { + "angle": -45, + "axis": "x", + "origin": [ + -2.8, + 7.75, + 8.3 + ] + }, + "faces": { + "west": { + "uv": [ + 7, + 13, + 16, + 11 + ], + "rotation": 270, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + }, + "east": { + "uv": [ + 7, + 13, + 16, + 11 + ], + "rotation": 90, + "texture": "#all", + "cullface": "west", + "tintindex": 0 + } + } + }, + { + "name": "north", + "from": [ + 8.2, + 2.75, + -5.05 + ], + "to": [ + 8.2, + 12.75, + -4.05 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + -2.8 + ] + }, + "faces": { + "north": { + "uv": [ + 3, + 6, + 13, + 5 + ], + "rotation": 270, + "texture": "#all", + "cullface": "north", + "tintindex": 0 + }, + "south": { + "uv": [ + 3, + 6, + 13, + 5 + ], + "rotation": 90, + "texture": "#all", + "cullface": "north", + "tintindex": 0 + } + } + }, + { + "name": "north", + "from": [ + 8.2, + 0.75, + -4.05 + ], + "to": [ + 8.2, + 14.75, + -2.05 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + -2.8 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 8, + 15, + 6 + ], + "rotation": 270, + "texture": "#all", + "cullface": "north", + "tintindex": 0 + }, + "south": { + "uv": [ + 1, + 8, + 15, + 6 + ], + "rotation": 90, + "texture": "#all", + "cullface": "north", + "tintindex": 0 + } + } + }, + { + "name": "north", + "from": [ + 8.2, + 7.75, + -2.05 + ], + "to": [ + 8.2, + 16.75, + -0.05 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + -2.8 + ] + }, + "faces": { + "north": { + "uv": [ + 7, + 10, + 16, + 8 + ], + "rotation": 270, + "texture": "#all", + "cullface": "north", + "tintindex": 0 + }, + "south": { + "uv": [ + 7, + 10, + 16, + 8 + ], + "rotation": 90, + "texture": "#all", + "cullface": "north", + "tintindex": 0 + } + } + }, + { + "name": "north", + "from": [ + 8.2, + -1.25, + -2.05 + ], + "to": [ + 8.2, + 7.75, + -0.05 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + -2.8 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 10, + 9, + 8 + ], + "rotation": 270, + "texture": "#all", + "cullface": "north", + "tintindex": 0 + }, + "south": { + "uv": [ + 0, + 10, + 9, + 8 + ], + "rotation": 90, + "texture": "#all", + "cullface": "north", + "tintindex": 0 + } + } + }, + { + "name": "north", + "from": [ + -0.8, + 7.75, + -2.05 + ], + "to": [ + 8.2, + 7.75, + -0.05 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + -2.8 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 13, + 9, + 11 + ], + "rotation": 180, + "texture": "#all", + "cullface": "north", + "tintindex": 0 + }, + "south": { + "uv": [ + 0, + 13, + 9, + 11 + ], + "texture": "#all", + "cullface": "north", + "tintindex": 0 + } + } + }, + { + "name": "north", + "from": [ + 3.2, + 7.75, + -5.05 + ], + "to": [ + 13.2, + 7.75, + -4.05 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + -2.8 + ] + }, + "faces": { + "north": { + "uv": [ + 1, + 9, + 11, + 8 + ], + "rotation": 180, + "texture": "#all", + "cullface": "north", + "tintindex": 0 + }, + "south": { + "uv": [ + 1, + 9, + 11, + 8 + ], + "texture": "#all", + "cullface": "north", + "tintindex": 0 + } + } + }, + { + "name": "north", + "from": [ + 1.2, + 7.75, + -4.05 + ], + "to": [ + 15.2, + 7.75, + -2.05 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + -2.8 + ] + }, + "faces": { + "north": { + "uv": [ + 0, + 11, + 14, + 9 + ], + "rotation": 180, + "texture": "#all", + "cullface": "north", + "tintindex": 0 + }, + "south": { + "uv": [ + 0, + 11, + 14, + 9 + ], + "texture": "#all", + "cullface": "north", + "tintindex": 0 + } + } + }, + { + "name": "north", + "from": [ + 8.2, + 7.75, + -2.05 + ], + "to": [ + 17.2, + 7.75, + -0.05 + ], + "rotation": { + "angle": 45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + -2.8 + ] + }, + "faces": { + "north": { + "uv": [ + 7, + 13, + 16, + 11 + ], + "rotation": 180, + "texture": "#all", + "cullface": "north", + "tintindex": 0 + }, + "south": { + "uv": [ + 7, + 13, + 16, + 11 + ], + "texture": "#all", + "cullface": "north", + "tintindex": 0 + } + } + }, + { + "name": "south", + "from": [ + 8.2, + 2.75, + 19.95 + ], + "to": [ + 8.2, + 12.75, + 20.95 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + 18.7 + ] + }, + "faces": { + "south": { + "uv": [ + 3, + 6, + 13, + 5 + ], + "rotation": 90, + "texture": "#all", + "cullface": "south", + "tintindex": 0 + }, + "north": { + "uv": [ + 3, + 6, + 13, + 5 + ], + "rotation": 270, + "texture": "#all", + "cullface": "south", + "tintindex": 0 + } + } + }, + { + "name": "south", + "from": [ + 8.2, + 0.75, + 17.95 + ], + "to": [ + 8.2, + 14.75, + 19.95 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + 18.7 + ] + }, + "faces": { + "south": { + "uv": [ + 1, + 8, + 15, + 6 + ], + "rotation": 90, + "texture": "#all", + "cullface": "south", + "tintindex": 0 + }, + "north": { + "uv": [ + 1, + 8, + 15, + 6 + ], + "rotation": 270, + "texture": "#all", + "cullface": "south", + "tintindex": 0 + } + } + }, + { + "name": "south", + "from": [ + 8.2, + 7.75, + 15.95 + ], + "to": [ + 8.2, + 16.75, + 17.95 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + 18.7 + ] + }, + "faces": { + "south": { + "uv": [ + 7, + 10, + 16, + 8 + ], + "rotation": 90, + "texture": "#all", + "cullface": "south", + "tintindex": 0 + }, + "north": { + "uv": [ + 7, + 10, + 16, + 8 + ], + "rotation": 270, + "texture": "#all", + "cullface": "south", + "tintindex": 0 + } + } + }, + { + "name": "south", + "from": [ + 8.2, + -1.25, + 15.95 + ], + "to": [ + 8.2, + 7.75, + 17.95 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + 18.7 + ] + }, + "faces": { + "south": { + "uv": [ + 0, + 10, + 9, + 8 + ], + "rotation": 90, + "texture": "#all", + "cullface": "south", + "tintindex": 0 + }, + "north": { + "uv": [ + 0, + 10, + 9, + 8 + ], + "rotation": 270, + "texture": "#all", + "cullface": "south", + "tintindex": 0 + } + } + }, + { + "name": "south", + "from": [ + 8.2, + 7.75, + 15.95 + ], + "to": [ + 17.2, + 7.75, + 17.95 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + 18.7 + ] + }, + "faces": { + "south": { + "uv": [ + 0, + 13, + 9, + 11 + ], + "texture": "#all", + "cullface": "south", + "tintindex": 0 + }, + "north": { + "uv": [ + 0, + 13, + 9, + 11 + ], + "rotation": 180, + "texture": "#all", + "cullface": "south", + "tintindex": 0 + } + } + }, + { + "name": "south", + "from": [ + 3.2, + 7.75, + 19.95 + ], + "to": [ + 13.2, + 7.75, + 20.95 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + 18.7 + ] + }, + "faces": { + "south": { + "uv": [ + 1, + 9, + 11, + 8 + ], + "texture": "#all", + "cullface": "south", + "tintindex": 0 + }, + "north": { + "uv": [ + 1, + 9, + 11, + 8 + ], + "rotation": 180, + "texture": "#all", + "cullface": "south", + "tintindex": 0 + } + } + }, + { + "name": "south", + "from": [ + 1.2, + 7.75, + 17.95 + ], + "to": [ + 15.2, + 7.75, + 19.95 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + 18.7 + ] + }, + "faces": { + "south": { + "uv": [ + 0, + 11, + 14, + 9 + ], + "texture": "#all", + "cullface": "south", + "tintindex": 0 + }, + "north": { + "uv": [ + 0, + 11, + 14, + 9 + ], + "rotation": 180, + "texture": "#all", + "cullface": "south", + "tintindex": 0 + } + } + }, + { + "name": "south", + "from": [ + -0.8, + 7.75, + 15.95 + ], + "to": [ + 8.2, + 7.75, + 17.95 + ], + "rotation": { + "angle": -45, + "axis": "z", + "origin": [ + 8.2, + 7.75, + 18.7 + ] + }, + "faces": { + "south": { + "uv": [ + 7, + 13, + 16, + 11 + ], + "texture": "#all", + "cullface": "south", + "tintindex": 0 + }, + "north": { + "uv": [ + 7, + 13, + 16, + 11 + ], + "rotation": 180, + "texture": "#all", + "cullface": "south", + "tintindex": 0 + } + } + } + ], + "groups": [ + 0, + { + "name": "top1", + "origin": [ + 8, + 18.25, + 8 + ], + "color": 0, + "children": [ + 1, + 2, + 3, + 4 + ] + }, + { + "name": "top2", + "origin": [ + 8, + 18.25, + 8 + ], + "color": 0, + "children": [ + 5, + 6, + 7, + 8 + ] + }, + { + "name": "down1", + "origin": [ + 8, + 18.25, + 8 + ], + "color": 0, + "children": [ + 9, + 10, + 11, + 12 + ] + }, + { + "name": "down2", + "origin": [ + 8, + 18.25, + 8 + ], + "color": 0, + "children": [ + 13, + 14, + 15, + 16 + ] + }, + { + "name": "west1", + "origin": [ + 8, + 18.25, + 8 + ], + "color": 0, + "children": [ + 17, + 18, + 19, + 20 + ] + }, + { + "name": "west2", + "origin": [ + 8, + 18.25, + 8 + ], + "color": 0, + "children": [ + 21, + 22, + 23, + 24 + ] + }, + { + "name": "east1", + "origin": [ + 8, + 18.25, + 8 + ], + "color": 0, + "children": [ + 25, + 26, + 27, + 28 + ] + }, + { + "name": "east2", + "origin": [ + 8, + 18.25, + 8 + ], + "color": 0, + "children": [ + 29, + 30, + 31, + 32 + ] + }, + { + "name": "north", + "origin": [ + 8, + 18.25, + 8 + ], + "color": 0, + "children": [ + 33, + 34, + 35, + 36 + ] + }, + { + "name": "north2", + "origin": [ + 8, + 18.25, + 8 + ], + "color": 0, + "children": [ + 37, + 38, + 39, + 40 + ] + }, + { + "name": "south", + "origin": [ + 8, + 18.25, + 8 + ], + "color": 0, + "children": [ + 41, + 42, + 43, + 44 + ] + }, + { + "name": "south2", + "origin": [ + 8, + 18.25, + 8 + ], + "color": 0, + "children": [ + 45, + 46, + 47, + 48 + ] + } + ] +} \ No newline at end of file diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_white.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_white.json new file mode 100644 index 00000000..1eca9371 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_white.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/white_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_yellow.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_yellow.json new file mode 100644 index 00000000..37c419cc --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_tuft_yellow.json @@ -0,0 +1,6 @@ +{ + "parent": "antarchy:block/truffalo_tuft_template", + "textures": { + "all": "antarchy:block/truffalo/yellow_truffalo_tuft" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_wall_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_wall_hanging_sign.json new file mode 100644 index 00000000..7bce3536 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_wall_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:block/truffalo/truffalo_planks" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_wall_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_wall_sign.json new file mode 100644 index 00000000..4be93de3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_wall_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "antarchy:item/truffalo_sign" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_wood.json new file mode 100644 index 00000000..bce9c92c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/block/truffalo_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/jungle_wood", + "textures": { + "end": "antarchy:block/truffalo/truffalo_log", + "side": "antarchy:block/truffalo/truffalo_log" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/black_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/black_truffalo_tuft.json new file mode 100644 index 00000000..3a85639b --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/black_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_black" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/blue_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/blue_truffalo_tuft.json new file mode 100644 index 00000000..31bfa44d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/blue_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_blue" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/brown_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/brown_truffalo_tuft.json new file mode 100644 index 00000000..bb2b0bf4 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/brown_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_brown" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/cyan_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/cyan_truffalo_tuft.json new file mode 100644 index 00000000..f374d9d8 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/cyan_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_cyan" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/gray_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/gray_truffalo_tuft.json new file mode 100644 index 00000000..16a21056 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/gray_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_gray" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/green_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/green_truffalo_tuft.json new file mode 100644 index 00000000..6cf274a0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/green_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_green" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard.json new file mode 100644 index 00000000..8b4ffc58 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_black.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_black.json new file mode 100644 index 00000000..ca7358df --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_black.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_black" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_blue.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_blue.json new file mode 100644 index 00000000..5fe34395 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_blue" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_brown.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_brown.json new file mode 100644 index 00000000..92d059b8 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_brown.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_brown" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_cyan.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_cyan.json new file mode 100644 index 00000000..cbe7c5fb --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_cyan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_cyan" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_gray.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_gray.json new file mode 100644 index 00000000..64045068 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_gray.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_gray" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_green.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_green.json new file mode 100644 index 00000000..7c516302 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_green.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_green" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_light_blue.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_light_blue.json new file mode 100644 index 00000000..3f32efa3 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_light_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_light_blue" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_light_gray.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_light_gray.json new file mode 100644 index 00000000..7adc8656 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_light_gray.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_light_gray" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_lime.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_lime.json new file mode 100644 index 00000000..191665aa --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_lime.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_lime" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_magenta.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_magenta.json new file mode 100644 index 00000000..ea49d703 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_magenta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_magenta" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_orange.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_orange.json new file mode 100644 index 00000000..168240e1 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_orange.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_orange" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_pink.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_pink.json new file mode 100644 index 00000000..35fe893c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_pink.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_pink" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_purple.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_purple.json new file mode 100644 index 00000000..5af639fc --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_purple.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_purple" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_red.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_red.json new file mode 100644 index 00000000..b2801760 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_red.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_red" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_white.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_white.json new file mode 100644 index 00000000..8464ccf6 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_white.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_white" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_yellow.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_yellow.json new file mode 100644 index 00000000..0264df18 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/hoverboard_yellow.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/hoverboard/hoverboard_yellow" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/light_blue_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/light_blue_truffalo_tuft.json new file mode 100644 index 00000000..10f474fa --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/light_blue_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_light_blue" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/light_gray_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/light_gray_truffalo_tuft.json new file mode 100644 index 00000000..e75f9e5f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/light_gray_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_light_gray" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/lime_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/lime_truffalo_tuft.json new file mode 100644 index 00000000..cee6305a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/lime_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_lime" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/magenta_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/magenta_truffalo_tuft.json new file mode 100644 index 00000000..8060ad9a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/magenta_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_magenta" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/music_disc_underside.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/music_disc_underside.json new file mode 100644 index 00000000..8f74d5dc --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/music_disc_underside.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/music_disc_underside" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/orange_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/orange_truffalo_tuft.json new file mode 100644 index 00000000..3e4b2c1a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/orange_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_orange" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/pink_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/pink_truffalo_tuft.json new file mode 100644 index 00000000..fd57d7e5 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/pink_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_pink" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/purple_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/purple_truffalo_tuft.json new file mode 100644 index 00000000..89d391ba --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/purple_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_purple" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/red_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/red_truffalo_tuft.json new file mode 100644 index 00000000..59ab0272 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/red_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_red" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_boat.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_boat.json new file mode 100644 index 00000000..5d9cd98d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_boat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/royal_boat" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_button.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_button.json new file mode 100644 index 00000000..44f6f576 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_button.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/royal_button_inventory" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_chest_boat.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_chest_boat.json new file mode 100644 index 00000000..f93241d4 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_chest_boat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/royal_chest_boat" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_door.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_door.json new file mode 100644 index 00000000..3f22e637 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/royal_door" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_fence.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_fence.json new file mode 100644 index 00000000..077c93c7 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_fence.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/royal_fence_inventory" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_fence_gate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_fence_gate.json new file mode 100644 index 00000000..38ab16b5 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_fence_gate.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/royal_fence_gate" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_flowering_leaves.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_flowering_leaves.json new file mode 100644 index 00000000..581868a9 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_flowering_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/royal_flowering_leaves" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_hanging_sign.json new file mode 100644 index 00000000..834b318f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/royal_hanging_sign" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_leaves.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_leaves.json new file mode 100644 index 00000000..8ddad63f --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/royal_leaves" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_log.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_log.json new file mode 100644 index 00000000..07579509 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/royal_log" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_planks.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_planks.json new file mode 100644 index 00000000..dd927174 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_planks.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/royal_planks" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_pressure_plate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_pressure_plate.json new file mode 100644 index 00000000..d15606c7 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_pressure_plate.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/royal_pressure_plate" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_sapling.json new file mode 100644 index 00000000..38e384b1 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/royal/royal_sapling" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_sign.json new file mode 100644 index 00000000..64c35d26 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/royal_sign" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_slab.json new file mode 100644 index 00000000..1ccd35dc --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_slab.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/royal_slab" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_stairs.json new file mode 100644 index 00000000..88702599 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_stairs.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/royal_stairs" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_trapdoor.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_trapdoor.json new file mode 100644 index 00000000..36ef37ec --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/royal_trapdoor_bottom" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_wood.json new file mode 100644 index 00000000..cd402133 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/royal_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/royal_wood" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_royal_log.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_royal_log.json new file mode 100644 index 00000000..0a0dcadc --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_royal_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/stripped_royal_log" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_royal_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_royal_wood.json new file mode 100644 index 00000000..a6cd2cd8 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_royal_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/stripped_royal_wood" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_truffalo_log.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_truffalo_log.json new file mode 100644 index 00000000..9a94f22d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_truffalo_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/stripped_truffalo_log" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_truffalo_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_truffalo_wood.json new file mode 100644 index 00000000..e8177a87 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/stripped_truffalo_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/stripped_truffalo_wood" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_boat.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_boat.json new file mode 100644 index 00000000..0cd6be3a --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_boat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/truffalo_boat" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_button.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_button.json new file mode 100644 index 00000000..c2e537d5 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_button.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/truffalo_button_inventory" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_chest_boat.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_chest_boat.json new file mode 100644 index 00000000..f56d001d --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_chest_boat.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/truffalo_chest_boat" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_door.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_door.json new file mode 100644 index 00000000..f17cc2af --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/truffalo_door_icon" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_fence.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_fence.json new file mode 100644 index 00000000..84d3cfc5 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_fence.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/truffalo_fence_inventory" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_fence_gate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_fence_gate.json new file mode 100644 index 00000000..de020a1c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_fence_gate.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/truffalo_fence_gate" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_hanging_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_hanging_sign.json new file mode 100644 index 00000000..17b9e158 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/truffalo_hanging_sign" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_log.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_log.json new file mode 100644 index 00000000..48291bb5 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_log.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/truffalo_log" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_planks.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_planks.json new file mode 100644 index 00000000..da2c17aa --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_planks.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/truffalo_planks" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_pressure_plate.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_pressure_plate.json new file mode 100644 index 00000000..a3cb5958 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_pressure_plate.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/truffalo_pressure_plate" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_sapling.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_sapling.json new file mode 100644 index 00000000..5b511f0c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_sapling.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/truffalo/truffalo_sapling" + } +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_sign.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_sign.json new file mode 100644 index 00000000..6e4306fa --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/truffalo_sign" + } +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_slab.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_slab.json new file mode 100644 index 00000000..e51ff718 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_slab.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/truffalo_slab" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_stairs.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_stairs.json new file mode 100644 index 00000000..ff7b4285 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_stairs.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/truffalo_stairs" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_trapdoor.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_trapdoor.json new file mode 100644 index 00000000..fb71d598 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_trapdoor_bottom" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_wood.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_wood.json new file mode 100644 index 00000000..e49ad0c7 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/truffalo_wood.json @@ -0,0 +1,4 @@ +{ + "parent": "antarchy:block/truffalo_wood" +} + diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/white_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/white_truffalo_tuft.json new file mode 100644 index 00000000..986b18b0 --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/white_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_white" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/models/item/yellow_truffalo_tuft.json b/common-1.21.1/src/main/resources/assets/antarchy/models/item/yellow_truffalo_tuft.json new file mode 100644 index 00000000..dcee9c1c --- /dev/null +++ b/common-1.21.1/src/main/resources/assets/antarchy/models/item/yellow_truffalo_tuft.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/truffalo_tuft_yellow" +} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/sounds.json b/common-1.21.1/src/main/resources/assets/antarchy/sounds.json index 19997bc4..6bda0918 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/sounds.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/sounds.json @@ -986,6 +986,14 @@ } ] }, + "music_disc_underside": { + "sounds": [ + { + "name": "antarchy:records/underside", + "stream": true + } + ] + }, "lucid_lullaby": { "sounds": [ { diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/black_truffalo_tuft.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/black_truffalo_tuft.png new file mode 100644 index 0000000000000000000000000000000000000000..ef62679f567b12fa2f453a09f8876ab5713395df GIT binary patch literal 377 zcmV-<0fzpGP)Jo~=i!|B7s2=EwvzZriR0NgEXH(40z5sj`g6! zh1Oe85M3}G;zF|(?s-5urMu4lkNbWDU!COtJ<2-X+UTxO6) z+_tUWGYzLRLOfdtr`1nj5X2x|O;el57>!2_ot8=P*K`;3O%<#buC5JCK!{S+%r0hS zntr^Hw*nYlAmlKcgeQdO>Ba9q5~Ea;o^>=Ah3diZKL7v#|NkgknQ#CA00v1!K~w_( XQQ;B)6DW0~00000NkvXXu0mjfVep^_ literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/blue_truffalo_tuft.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/blue_truffalo_tuft.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e2aa2b0a88442e76a9696e9635360198e6f323 GIT binary patch literal 413 zcmV;O0b>4%P)CT=7Huah2r2*yuWRoAa> zm}&E;zIJ`BT~=H~Y+C%^(6nraInxImhNt4$M7C8`w!yM)(PFh8!B8z4ji zgCJUAL2ykiu8td2vkzjx>)bA`@`o-iG@k-Mbis5L7g}54cQc<6bcinlkXjjb1kspa z^?e=rxb<;^^EY51Iwq=4P3kpU2-X+UTxO6){8)YF6dF!vRPowEI4!>dgCGX!Fby`5 zu{0i7by`hQPfcI_M83ZIrV56I!?}S82vI7`Y?4=ZaS{3W^vkRAW&ooLggVS7;r;jS zz3z-J5~Ebpdt91}LiN<*I{*Lx|Njq>*k=F$00v1!K~w_(tQrj?x2NPv00000NkvXX Hu0mjfaN4gC literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/brown_truffalo_tuft.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/brown_truffalo_tuft.png new file mode 100644 index 0000000000000000000000000000000000000000..1fdf62372f139f28e58b58e6f4c6b6e5836b2a64 GIT binary patch literal 434 zcmV;j0ZsmiP)Iiu3)y zJ>TBV)a=JxV*b8~Sr;9m{DyE==y-Z8JGf7Z)oY13&*>{5L9k7t3qldZCTUq#+_ zCS}YkqM`r=jhRDmFz<(79u_~tI@%w|S3&GIzOsmbB6K^DhG8t{z6*+IPMj2*og|zbstXg0Y-Qb=Va}U#gJLM*}zG`ZE%D8|YVI={eQweSP1ZLDqd3+RZkGNJ_}FN6-}3~w)&0O7K;v$M1N zE>Pm>dE32xY~$s%#uHAO$@|Q8Yn!};Uj6Dny3uuH6y^8iZt56U;zjBhSS(dLDO ziVFaa8Ze`YnC57{e&%%;d7&7~g(nzez!67a3rtc2=QGrci(-g464MCG7S4yQjHPFD zYWodTgo8kU5rV`Rf!P9G=ES-|77?To0`ffF{ev&M=DK))3w9Sv1Jj901Jg7ke;nTu z%mdKbfFxHo)(1v#h`_|p#jn2smAwgreFq32IZPz_3^(0!-eR~jObg8jaHFaJo_Pu! zIXprldEG+haDD^?7$IP7FdUeP2rDNMSi$d-lZfZ0&-+c#K%Gm)*jSGN_6AHKVIsE1 zT9HP6y3_8$mqtCcM6@@$A?MlzE;%>$-lHWqI+xhHu*z zecqav=KHy>tLgi`N&HIj9mg@S>$>K7o~YZlZE9W+9S!Kvgt-JWoaZ=>cNktY@B5Ak zY5@)n+Cm5}kmlg9XeyvYm_cfn@Z3txkL$$-2$8@bh?cb=bxutV-wm=^2QlDzrfG^l zI=Rqz3JRhNrbAq4ZiNrS02;c2F9MKUS?vg-F{$Bsp78|qaf9POU?4gsLMJEHnk@wD z3n?x$NF(n19#d#Ioe|=>g>YK@1O`D2($zGziHxc7sG(DG68tsYBp3A6g4M#+v4IH) zQL38RMXxTM2Ga|9BY@EbLLO$5@cMVxUU%LXiBYOab)A}vLiJ$sKL7v#|NmhG8;1Y@ f00v1!K~w_(D$X1zF&=8!00000NkvXXu0mjf`k|t! literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/green_truffalo_tuft.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/green_truffalo_tuft.png new file mode 100644 index 0000000000000000000000000000000000000000..0ed3065a96d69b1eff4aabd54f844031697e29d8 GIT binary patch literal 416 zcmV;R0bl-!P)8;W1vV@U2@9h{S&;y*CN*>jgwC)3 z>-Vn$hWhYYcF*tK?&<+U7M>)&MSXQW zDJ`#vjs|pS!d!wG&a?cQkHhe)x&0X?s0BDQXbT~@K$?TYs;PhyVFsyP!gDJ%Kdu)W zAVdO#AX?Uf)HyXd95={j8^nO;xtk4NbaJ8bD=3IAm=1BFxfR||9zmfi_#yzwmDP?Q z8j~8%SD*0<=;H>*cfde&OoUEOYBgI3))!J;W{^hwUJMTv4W~0gJhu=|i;ut{h(WrV zrZ$l=H6Ar|YEFXZrY|>(;)1@Zg4M#+v4IH)QL38RMUU?Eau)v+{q#cK2w-%9kcZhM zy#3s**PZb}Vw7rnTc_rtP(7G@4*&rF|Bf@s9{>OV21!IgR09A5;s?F-Aep!T0000< KMNUMnLSTZps3t{^M;HLS%T;~Qg1A&uW!31WA6R_Mg6*5P;jMRqUx=KwC>*WOi5<$QS zS2ZJbZ7nQM7gV!1B7iGyuV?u|7iOAIL4h=2y9_g}tKf%AuMv0^T^ay&vRW|05vk>u zuki`!!xrafK!6lB%Az*)oGTdXGiinixFO#c>wL~Q7*8m}bp>-=z6AnC1l-j)wT*RpefL^3 z(-(=5tL=SVoI$2~a^VdC00960o-1iT00006Nkly*D$)Zw5F&v=5G`v#>YSP!UK?by4PwCa zbX^yJbaJ8b6cj`kOozD8+zNlaUZBtwd=Y@;%4$atjY$pHb&V&Wj~g8S0Rz!75jr`k z)odYHUr2SCK^k$M=a@pn>5LH1EriqJCol+NkglewO=L`sM-82tli;uE`@RbsvvMJU;#OLf!~qbb*kE*(ALE-L2Q1>qTOeYI<9z=AuwNnEVd_ o0RR7XxWPaG000I_L_t&o00SE)kcV}caR2}S07*qoM6N<$f&jOvEC2ui literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/lime_truffalo_tuft.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/lime_truffalo_tuft.png new file mode 100644 index 0000000000000000000000000000000000000000..8b51565bc1bec47a848c600e8077c19d020cd725 GIT binary patch literal 425 zcmV;a0apHrP)5_Z{b6G+{ zmNVzf*)x;eTW=qG^ZViD{O)D9!&MC*OmCvk+wxkLpWo42+3BB_#HAG9gOjVkt^Q`2 z{C!5<+de8SuZWHYbZEj{f*H>9{r=Dm!>i{1XdDyN0vsB&g%DgI&B0;SR6vO^gVZkJ zxs{q9*NY7hB7s2=Eo(vQoSGbV8)UN$V!-npo?XNrom^-<1qIOs(;+T2x5AJ2u0f$I z_#yzwmDP?Q8j~7+{0!m==;H>*f51R=OoUEOYBgI3))!J;W{^hwdVPv1G@Q-|@!Uc< zEq(%nAO`7bn%YFh)Ogg;sW}O*n?9U97Z>zR6|5Gnjtxveh*H(eE_!wMH_qen>8BU+ zMgXG=ggne9;qC8kz3y}`5~Ebp+d4HDh3diN3jhEB|Nj^-FJS-x00v1!K~w_(-}fV* TrpI1D00000NkvXXu0mjfzN5HY literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/magenta_truffalo_tuft.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/magenta_truffalo_tuft.png new file mode 100644 index 0000000000000000000000000000000000000000..85d3c10deac1494a667900c68970d8b469f68292 GIT binary patch literal 379 zcmV->0fhdEP)Px$HAzH4R5*=oQ$1_MFbsV)H;Du+II@HmGW6))Khi(iztbU0p(RT=P{2h~X*=9K zpB$r;L@5pc%{c*Rin9tB_YX$^z#v+S z`(B!J8boV?F^FO_M=9Pk?|Z@L$GJJDtb)}IrL^d)TV+96M2-2h+2xWQqYSdhDwP#; zl#!SOP#;q#zgbAsD62AHGB#q4!O1YP%4G_XG7;G{dZSavalog#S4m?{w;_XPY@v-%CStUKV7PTC`sGBJ5jk6c zb1QQ6U~1mL09F$$&~e~0$A~B5ayl z3CHq=dze>-&IZc;YSIYI^WYeW$Q@U&ego9O==}^3K>E@|N8NG~M-rU>+5%$$CdJKa z!VU6!^*K)w2Zl#T1V`Nhb2uLXfsLfFdwmYhH4!0o>!cwkaFw>6CLWp|<43qbb*9=x zIp*ZvfC&IdT*(pB$fp~_rC%TQ)DqF!0HGUT>V>#%*PXl9($hX9`fz1>pEpj=#ilAc sR=fiM0RR7zP$^UZ000I_L_t&o02i+gJQ!q88~^|S07*qoM6N<$f~2X&X#fBK literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/pink_truffalo_tuft.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/pink_truffalo_tuft.png new file mode 100644 index 0000000000000000000000000000000000000000..1835151acef2dfe9b26238205d5f8720756ff425 GIT binary patch literal 442 zcmV;r0Y(0aP)2xWi6BC5<^?>37Z6-~18?9t0wRbj7m1PsOzPF|{+Wb`KiySbUEMQ( z+V=5fnx5aM>FI66bI$nnqt~UK;}-n={zu#_BPzmi)_45IYO#p;lLmCPJi*PyED$*6 zFr$fB=4y`3_i>nTWAbjlk3ftN2OV>Y!4@(xMgyl~tk}G^5=S{YmXR9Ecx;t5V;On_ z158A)QOL*~V&!F8QwtNv2BSDPVgqoV)x&Ln(TN$>Z-GgWG}J_4o7PssvA*Xw%#%sq z4Ftx@%Ka}Ra}x1LtQ(uJegg>LHQ4XK0!R)Mi8^D_jAIKMtBz@NGXlB6?LL3{6gUX@ zoCd5dY_3{=1O!?cf!)c)Ip?`0^dNC)oI8nVzGr|YUY@=UH&Ew;!$i5wmG=#pAYc+R z&2-o!v>j zy;%)U51Zls?sv@pHT?N;6Lq~kucdvKtD(%!CM9!|;(K*5i99<#Dqrh>$|5KAnk^Vd-7|1l12^K!VjY)?hSPHzo?9?ii=Uu@kp}KC z4UUQJmZqi$mPO4;@}cRUA46PUbyFF`%;DI;DhQD)tl1=2_w;=CKWYDovA1odHw-j7 zK*(Tb65jvrzSo)YB56$b9;fCY)2OvglK%k!0RR7dbfNhG000I_L_t&o03wGKbU6M} Q?*IS*07*qoM6N<$f=X7jSO5S3 literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/red_truffalo_tuft.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/red_truffalo_tuft.png new file mode 100644 index 0000000000000000000000000000000000000000..e44eafedec45210411bc138da818623a0920feda GIT binary patch literal 443 zcmV;s0Yv_ZP)eak`TycQ?GV<7(zmJyQ;gox@ULG z`@{Y4`}#b5JUzB}oHKuWaUE^XOX#=z`;Y16MPyXU|LNk|aXveX*ldksb{;)1CX`el zaFN4|CSsb?yj%XXVemq6z1e#L7y~Zn1lR%-^V~vtbHzeY(d**~Pa`l}z;i1wdN?(2 zU_w?CEYNYtCB_JxQm(>=m@ zA#^qn_Nz%FIM0J)AOaJIuTQ@L>TvXa1_(&{(nLqyauP=p^`9*;hG0_MtR~z@elJ(! z6y@OL5fb6K1?J>@1Ozsc!tV7sfSHJpx^>ck30$SEr-`Sg59?L9L3O6uL>P0hH(&yU zB(7k@H1g?A=Hu(5o?0SW8z6K8nR+44?fP@~T6)@tL?5n9?{UlNx!6=i$I1@?00960 lJb6u100006Nkl$2002ovPDHLkV1iVBz=!|< literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_door_bottom.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_door_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..77d00dc295eca70f135c9fd608e67383ec1835d4 GIT binary patch literal 613 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 B*lYj* literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_sapling.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..6c3760133d61190a0a1687e71630e133689fb6eb GIT binary patch literal 376 zcmV-;0f+vHP)Px$GD$>1R5*=eU>MZkaMbhvm$N_qr%2P&`v3nAM?L?~z`($O%`hf(0o!Ggj33^A zV|ZHsAH|@{*&qL3dGr9oLPliHdAwts9Wny);1z#u0f%HY3N2g5>?Kz#D~6+`4^ zeMSL6E{4^6cEH6WH|sO*y>JX`EMNu8eJ}oJU|?W)xi{Px#F8*=K-!#+mTS;ctV9tc5ONwD zWk=R-=O`4xMeIoA0Quz~&C?qVoHFVc^XIp%Sc8ZFpsJ{E5NlB1@Uocg?VR@k-Ewh# zL7t9)F{`+xtiwTrAwYzOn=!8+9v1?BtrXLo+svY>{{sMA)e=JBX*OjQ3*55AM|05N ztY3V6eq+-FzgAq;Qr0^QnECxIygDVgOLzAR^oqmptBI x;i?v!Cb(sJoIzdx>_BR89q{jk-RzY8`~s9}U~E=%Q`rCj002ovPDHLkV1miGfi3_5 literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_trapdoor.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/truffalo_trapdoor.png new file mode 100644 index 0000000000000000000000000000000000000000..f22f3e8399c7a16f722438d94c49d56ca50c12c1 GIT binary patch literal 654 zcmV;90&)F`P)Px%NJ&INR5*=ol21q!aU8`zKX=5{-He&pwFU_cBn8b&8+oY?fkZ{e&U#R&a~E%W z2oe>#6?L*>)GbTt5U3ZU4KWG{M4`}io1Gc|>`Wu8{W{G4rrqd!{PKJ6``-IK@pSD# z0$kglW_PE=%j^WX&K9iJ1OUZf#{d+z4jD~6Vt1#+r*l)-AuNCVig>VcAbSiAH#ov* z)8fY`Y6J&0f?Q_{_2ULdykFTw%O<16hIfn|MgY%om|t2Xt!JrtHkU46p@2y>^l46} z$aS`0hY?N#uv!!GMbB~gu(ZhP1B&QA#;3gb<^zH)J*Rfp!4=N>=1ekjpk$upk6@?u93xu09?lfph?N~9H%~;7%Zh6QmTwLEw*5o z2A)%nLUep)1`x?AY#mY! zeJXw!15`eq<1`THX6CO2LvN33JobAE>*95!_YHuZ^-c1nVfy-e?C^jJ|)}VR$7FLc&LXO#)ot?cz>pah&<2XLcvb^|T!|(f! zK5xrw`F{3&FT*gD#IF?JaU28tzAx8xMcs8>X?aC-G@wHhW(a0D&$eyvGQ4V@=NTK+ z0vsB23n92bnuEitselq;2B{6H0L^FeMK{O^cG?*S-9sdD?A;(7O7=W!N)S(Nhh8d(0 z*L98OOvCAn5ErUWjGw?Dh(WrVrgjXZ#-oN#%}wyv_UCzu0exEqs|Bm$1~wo>scL3} zUfo)2JU;#OLf!~qG(gD1Y!j|$0JdKIeUTWMY;Wt-3<}kQ$^QTV0RR8=W9^&(000I_ cL_t&o0H+T!em74Ar2qf`07*qoM6N<$g7(~?kN^Mx literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/yellow_truffalo_tuft.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/block/truffalo/yellow_truffalo_tuft.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7273a89ea9585a5c8a51dc85971ce218b6a36b GIT binary patch literal 420 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 literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/boat/truffalo.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/boat/truffalo.png new file mode 100644 index 0000000000000000000000000000000000000000..f31cbffa464f72143f81b2c2d2cae2499eaa5255 GIT binary patch literal 3622 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 literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/royal.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/chest_boat/royal.png new file mode 100644 index 0000000000000000000000000000000000000000..4b533b601307497f10293954bc481fabfe9e4699 GIT binary patch literal 6521 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 V{L59N)N>1?35$ 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 Zz`{3Rs!Z04&f^t;{!L@;GA+Aj{|9nh1~dQw literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef485c470263991bf340c554bec86a3cd14bc8f GIT binary patch literal 2591 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 DsB01Y literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_blue.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..9c50a66ede0a32ceab65aabd0f7c26e380b6d442 GIT binary patch literal 2627 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 A3;+NC literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_cyan.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..ae6d82e59438a66a5c1e3831c9578b8e5f14df81 GIT binary patch literal 2611 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 DEeZ=l literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_lime.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_lime.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e14bff74bc4393c531f8404746eba3ee0c3f9b GIT binary patch literal 2585 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 literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_pink.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..65450f02d5a6b872447487a8ff5f5543f9d6e9a4 GIT binary patch literal 2606 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 Q1poj507*qoM6N<$f-I&h{{R30 literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_purple.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_purple.png new file mode 100644 index 0000000000000000000000000000000000000000..c17e5ac96c0d546e72851a3ee4f0bfb38ce018e5 GIT binary patch literal 2605 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 P00000NkvXXu0mjfiv0=Y literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_red.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_red.png new file mode 100644 index 0000000000000000000000000000000000000000..2d666c5a81fdbbd677f89054d75a91fe90d9aa6d GIT binary patch literal 2597 zcmV+=3flFFP)R-|@{(p+W)D62U=4PE z^D{Nr_{F8Q=RbXCM$1ZVWRx0U@YLzl*VmUZFffqj&7GUjkjXFNl@o8LKvCXCpUx>d z^U*bxYoGda#-iV>uiW?7e^<^a)S;l%0Q09!eRuFzU!D4cQ)`>Po*>_47XcWeC67Oy?b*9Gp?J7_+O&Keqxg397R#3!z;4df zxqTzZ<(p{`_?YFDYYDs-GB0A z4zkpvCxCBOubHeK2nmKjPyzxX(0MLwFv|}gP9Pd27ceO!3PjZddIES5@I(NF@+dGE zZVdJgW$6O?qaKPU2jw2V?WR1YuU-PXHHr^8u#Biy|3P0tjoIKJSTWUH%*or!0xL7n-N+Z zFt?pQ?XuL(4A9vLJgjYfV}B=A&#F^u0HtHM4P$VB=Wo#%%AHSaIQnM&DYct+OAYX~ zV+XT-o8KLSgUQ*R1*1QcG5cn|ctS|SXm>jLFExN!j+r;>cIs%!EJXTzQOnIK;N;Oa zY3Q{5QUg45$FlT^yYEiBmMu%`?z}7gdcn63@+tXXywY4wbwRnN-(%}tMcjoEt}IV8#bgLPMwj|0rkNnD|l?BV=QE4 zO@79zQ_PF1jY}frZO;=U?_WEUQ#fG3He>5)B4SCzM4AW~Z@X1Hy22hf#Mjol5YwhNG&Gc-!khw*LA;1i zd7GgKQACKhKMWl>mE6}e1ljpSOia6NR)vi}J8+=#r}gVA>o;!9Abb3~pG>QkpGi;O z)1RJOF*p6{u7ULMe_u~4uK!q)4}uVgv=ifW2GN_cu|6T?w^<7_9a)RxdZ(f z&FZxp;H=U27sU;_Rk=oaUILB6;3x7rI@&;c(T*cIyphiFqNM@CjcsaRV;is1cFJ|y zj{bnYLA1#Wz&-$Ae~A1>+R^~Ak?G(>yp)WNblQ&n<_j+#O<#WYL{>F;>P&t>!`Q?< z!$`y6=qrA-8Cn`33R}uWybJ~D*+VO7C#{BbJ`?9JSxY=I$&i|5=EN7Jbv^0Q?3D*2{WBT!Lcchm$9L)3= ze;G{HRf*oxY(Wh@^gr?ae~tXYiWR}ux|9J z%cc?*4tckfK6>dd>S7rD;OLr;G=8E`Y5E^wJ+X$+)tYtp+b0c@srT4WQw{(PPAH0p3iZ-GDB7=?HyfcmoIN ziAJdbL|8iEOAu};-3!o1Pw1EKrGEOxgHi*866-Q%h^vOYQ%Yad4Sk_M6F58ZS`zoh8}<$H?<@n@Y~1pC%`6?jlNWii#@F0r%Cy^w$t-`C0R~4S zKDWcZz$kVKPcEMvf9&}2{Edz@1TX($!dV8;aks-a-SqBzcRb+9rNJ%nl{01}G!VS} ziwQXnaK3_$yGe1&vS#+2^vCOONGP6MJ}+?D;L_od%cj&nR+0z4BDEA^$&g*hsC$5* z1PqkBdl}-RC=^dFABqDaw*(qNUMzQ^rt2?8#N%Lgy&wT@k3yDDt=8WR@dWT9MLAFo z1#cFF4br10TO=yPA9+-U;$mK^lX^`i2nzB3v#gogw(2?H^2{Q#Q!ccVn!i5QL zT)a3_=|9|ZYl?j31My*!51#@dQ|5vPBd40E7Ra zprrv~<}Y%%00000NkvXX Hu0mjfHc1$s literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_white.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/hoverboard/hoverboard_white.png new file mode 100644 index 0000000000000000000000000000000000000000..e031f0ea2791b52e08524c6d4032f0ffb7d7748c GIT binary patch literal 2536 zcmVP)7<uE z$>p1A7}&Kd_W-jGcyds#BUl2Vz%n@b;ov%=lQIC8-hb#&T6n_^HQ>p$ZW(}?xBdfo za!{^aOzA1$tls|2GgTCv;nnQ#(xppPxP19?zP@$-$4@<#0(fg%{zrRz6L9z9V0ppG zGiMTr89*Enz=L+_YlyL#FD`?I<=PbXtn2HmeCzJJD=2(o>C%e7*|TR?;4epxq&siB zEr(tGp7rbV-9BXU1L5k706Zc3HT1?C6*zMIcqM=b?MAtAbf!-MZXP?n0LUqThD?4D zW<5}pj~iHvf*Csn^wVIQodWWUGmWoDS$=)_dcNrXGj<9Hd}8-U@o@?`?ko?m@fk3R z2l@4bnhbAmxcv`*OM&4Z?MTDF*q(0x`>C|yoeQaS|CmH0rKf_}6N(>Ku?0b?0qDv*A@*+&2+6nmgPAt-0X#V< z*D4tI;>C;U_=yt<#l!4bv-0B@#kZ=rSiaN%c5|-I?dw4<-%NwR$IJ)t* zpVy&yF!SL7_{r*1t{$ZZP=T8Xe5N}P;yGqMJOHmhW?o-Vd?)C!(FlYBcn}alE6N2t z$}<@71TwH;MF3Q!_sB@?DYcV!OAYYzr=QOC+x))%&_l`Do(r;{nV5YuUpyhCA?r?C z|D^^n%Q5q2-A)}XnT1GC7q#4+0!|)%lZJNNFEzlXO`FoH?521BlTW56vQ6;*`|eA> z-LWGHb319c-3~`R#&7o-BXpp(Kxj>0U-k2A*5u$)*`-i*M)<z72xCrfh=aJGxBg`DDhw>@iDudeAJ z$1GT|Aldn)pFemo9XxzE{rb7*u%mE&wfmiv;udFA+SOlPS41ocF^NeCOt#S;JG#Oi zIK6;-liAaKJwp&qBVuA&ZL&w$xVgW- z^2bAmDu;%Ka**}!{b}01@a?qc#<}T*PcBX`EVwakf9ZVczyBvmJ_te}(!E|>K=vN5 zI7<_y=WX4ba@_mXG!O3lTAKISZ{%oHuh{@?h{X-MS-E<7Hf8mq_xY*3j()$Dl)BN5 zBRRaWsJkrP+yG;4T-?~ol(m)LW;^+-^6U*!^e@`x1rU1yYJZ6QdfMCov61QEtKEMo zS?frfT!@=M8LpW13CdpBrf-t(b(xvChr*>*xX$?}Yn zpQZ-LH>QDSD;K^$kOsfKC0*G4o16|l{M}?-mFO+a7Szy_>tDYq4MNtAlVsuk18MHd z&rhhsS0c*h$WEPgV{f?PL_&*brmU#}qQbrd2a-)CEFAJqDShw>m->z4V7pGOp}ptHDc0 z-c-?218CUBVzvNprqE767rk_ZJ~F(4gY;CR)BxNuI>9X?-7PxR`pf!RYJgCnqcKBV zHRSD5`l4>=3;iLV4q9peyRnW04RzpFVmmF?y7vBl;yxFDTzl;$5KD&aYDUci1SMdg+}+C% zA4Q>fa`{jk5V<8#5AtHUt2JGFF(MuZv+D&3aC;QU<%7ZS1n?q7IZzG-a{0<$&8T^R z=WiV~!)6c6J__XWqntFz^Eypgo`T}Zo;r<3#^00030|Gq+lwEzGB21!IgR09Aaf*ICap=fJCD5Rwjh1>fX_T2pTa_|23{@Go?O}=~P zoHKJ~=FFLybAP{IUn==~W#z2u>`N}GW7f=>^)fkq5d-VyR0BnMNjELk&#kCd;h~=# zs={r{cU0#t-IUR?Q5%X<2W;PYI8B~BIb-_t>1pQq=O;8|^hLb<=D$*)C~sp-$5p-Y z?n>ps$Ii%ja^*#p*Viqm99OABL8${Sy>Qa8$%SYWvnd z4`;O~08x+yJ^I%-8asRT>`6O!>_`Ix19jlZwZCq`^mOYj=Vx4h^*PCe(U8%r*9opV zcT#S~5x?2KGrjQc=FIo%U#SCToINE)xC{S4$mj?E^ihJ%oA%`J7y7mVo*cRzuq{vw z|I5$5q+64@eW?RxUHPf(fE@Bowg7#=N?Z8=K6I&zKcNr8-yw*0VQyH{QU@HFdPfrK z#qf_ZIlYyJr`EieBf#ndo*aht+5uw=L^Io9+lTK2+Z8Q!0PBDL?Kx?~igVMnsZ;B~ zlhfMl9;p3%IMFyzjy)3hwagz_r!tmK!oo+p#Y1Z-amQ2ZvGsZ*SAj zy7+S`qqbd&lNANKKir={&H(a=03P(qUNgkX+XB$b@Yi48{N;m{+aB3jL7{)?mP)1n z)k;A^f>V)KyCpvWb{Q?^*~YHY;x_$ChQh4NRw@K3(yx=8sCUAePjJbUg(4HANO0p zV4U_6pE&(dJUPAVE|MMxp9!NOqgSt8I2-PN;)^M;@Z#BN*;U_2>(*bE-hSoVX?E>5 ziaPDuE!Ho+1x!W+fbb9Cf!<*Vt~=o`^ie!H6gwSlnH_z^mczrL!-vz}eftuMAFaJ+ z^-3L}Q67ZczeyrQAIXlDw(~yqcwmDzap?I+J5drwo+EcF)r4GUxG*=0|!AJp1U>oRHo9 zy^nH|r5!r~e6x1VWc5TyG6a$mkPv~v3t^MF<2(Bk$Og$JOzOx2QSE@803IYfkpQ70 z3QR^AgR?_jwt)R;hvLaWy_@fTD9`EE@6Jy20exr1DE^gh0V@e?9X#}Lf;R{Lo5*6d z=q3`f)=v8`b-=3Ur=*|%`e<7F;^))a-=Cenb?tfS>i#q9{l&hl3&y!161wTKudK1t zR~?5DTAZ-3O$Vl>ZdQQJPT6jG8j%LD0P5Uj+M9SPU`5$Dnxm_sO{z! zaPt_OGIZL1sRM3*?91u$xpULTfw^hLAFfP4eCnLE{;kWCG`E|MI~{PeLVR^4FM6Yx~k4pZ!c) z`{1$X_BB!R`0C-!FQs^jL)L4Ex*}pr#6nsK7;V3OPIQ(1;Fwl>=xM)8F&%pQ_wUcY z!rTI`LA;DmeTSh8QAUV&KKyO}2g&n#jvyOP#KN@OXP>n3uE*c6y!6^@mDjdz%^;gT zV@JAq{dsAzW8kV{xiSGXx6UP1RaRQ1G-hcMtR->jl$r^@^N(Zf%c@I+Lav9$mVF#(g6|1 z4mEJFjn-&8^*Zgxc)-{o`ViLDo zOr5ni#d+os_Z#MzBGu)=7imieL?!##zK(bD4!O|vl6KOMgL%*H-TC&3oFKLV-Dt)) zq635$2(?~6jxG*PAJ9%e-VHjKFPr~DHWd>W1uK8tm)vAoQSz^)0~}27rJ2{HnWy!q zdlxRw^!jOEP4-oZ-BPurh8_0z?7k?0eni`S_dK0e-+t$aHeO%1prS5_9ygNP2#RGq zv@+Jx0ny-hufCrgD&gUfcT3r0m;ItGj>&v&PuI&?FgE{69pK@IJ689S9kf?qm;JEE zKF4_BYELVNZmejj1N`Wb@yWEHR|8>-UG~E!neg?p)#Q~!H&(RN0XlZDSS`R?DYP4~ z#V#9Rj|^|(pgh(ncR($}G6-LS2utN&fW2&I$i8wf?Xx!;lsjO^ihUU?BvgmQ9TWDV zao7v{As-J~?tt29Y#>K2T8iXP;BukMe_<~T*^h0|rP;Qd=Ql%7{OG*=iHwIJt{(89 z0nehrSutUI-JJgPg|FR}=+u*EgR*-a@IGga*<+V|E6=Vizz*AN z#JH5%1@(K0{AS3{VTXT5!PCXKl-Y$mrXKzqwgpbF4NPc; zBTzhfJAHCiJM|~B?l1=!NKDqmi@b6>uxjnppQyUWIlw?TA%O1`Y;@YT({}B)8|DCq zjiYOYz=K=0lFlbLwJY{*{scGqvXD&!6o}6A3 zc-Y{f!EL@?yOc zwOoHOA|D51rUR_5sUcE+~%#%0vmRo@GlYo=n0o^Xr{{a91|Nm-gvhe@_ f00v1!K~w_(`Ef()gS01v00000NkvXXu0mjf4;xGu literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/royal.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/entity/signs/hanging/royal.png new file mode 100644 index 0000000000000000000000000000000000000000..6ab7ac11f29e4ff4d46749effe578113bb10f53f GIT binary patch literal 1045 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 QD*ylh07*qoM6N<$f+u7kfdBvi literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_gray.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..574b6e1979189280cb010820f053c7e1c02ccbb0 GIT binary patch literal 596 zcmV-a0;~OrP)lz}UkFUKD*(TU%B^a7aTh$|{ZbsJT>gxmFNy>vRHCrFvy@ zM&Q$YUHSZeBV@^ld4q2}#4imFCBO+lqI$H{Qax-aURgHX;D-ooVkVOjXf7_wCjhA4 zYDGFx?9-Xcr*-jKS$7ZI)5zIzO_b+EHx`T-$FZiLJ@tGo|JF`Fr`3fYs=lgf=6S`O zR33hLRp8d#6-?tN&WMFVwSzZvqRhWZ8aoXH<$FM@qR(CC*PW#q^9})8^>XG z5QZPPi}|^5;^VaT|0i*?1AX73`0J|b@4moUhlAaDbsayVuD(vU&~=2=@U`ui7^BeJ zV~D+{j+!%#nFX@M$LD4-RV)={%>6at1PZEdXTmM75U#%T%ImEC)q zNwO+!37Ew0GjmBq#-mu8PslX%Gm$Wb*~b)!#Plj0 z1_*YKj;!JGonI&qj-uh|7@mYKqP4JAz-bJ);=+uFuOH`>lbs46FY`VY|J}pDhb!o9 zD-y}h!J}UgjK4u+(R-TWXPhgR-Od0TJCWpD6x?h<*4dYm#L-33kJ*8%_}f`1H_@hi zx5w#_8~p5ArVj2;g_1r>WAB!X%MG$tD}d+?O!QVUX9sf5d`EuCAWoP5um|0dpbckw z`7^ji@!c*-JXbj+QpeD$$^IaZ(_8s1dX-d z5Qz66(AS3W>l8Yg7r;XP0*8;M^ zf_0XFQ;^+^nUT|vk>4qF=j$6Wlkn$){|`gN8cV=&^85#63KFrfySyIo=dx7bK5JHj zSM5q1`e6yQF8i^V%&tz7WL?DAUf2Kt0RR6{Xug;L000I_L_t&o0LVWkv%4B@H~;_u M07*qoM6N<$g3H<`NdN!< literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_light_blue.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..cd5cc5345263ef20a149a0c0fd8753ea3d9efbd5 GIT binary patch literal 635 zcmV->0)+jEP)kVYqODp$-%>CHAFDT8Ao9CUBVHB~>EK^p4$jRd7RgJlya@^z7LxYg4MrF`EXMAQQYwuJ35~t*?s_n_B8>!(cp-)KYWZdmRok&^H#WT@4~s) zj9ls{yoQ4!S$SXORqTwNLBsZTs$!>~Bkpq7gN5y(L@n}bn&2I3lpwY)7xjtVNg~&D zSazaRIsf`;kR1$s8sis!*pQ_84tGR{w`VO8KMTfn(Ew|)oI=SJU4rIAzH ztjxO$a_8&0uQ&Ch zpu8x|R$o42V&lUeOQ~`U0W~HPWMjem}x=qNjkyJmER z0jV*Z&QO4= zR6lz$EztisrN=0ST-JYL&_d{c)*&29~ z)9rMhu68}Jlge|l9Rl&U7ck9FoDrKE8bx8hqT-j@wyaY9>S`m=x?O^w-s~&gy4hhtQ<%==)?b>9-wjJy23}UuGmbkE`3sa|$?UsuV55M`pL^cU-WHR=Em>b-^Kd8ph z>-un|S&usF^{_uHI3)59L}QiO-r8KY9hiLZ!(7bm-T`*twn~>TrMv|Py6w*FfLJI% z7pS{7mo2XnHc1dc?c9iX&iLSiP=Iz4i5gMWC9Xd@Ad*N1JY#TvtvqZH3Sf{3P=*8< u5StGF00030|Gy*uBLDyZ21!IgR09ADCMFvc7@YM00000JP)YU0e@6QD7dj8E)+_sf*ONRS4y)HMTA7~ zgKi9>i^heDq7`kKAZpV#kfxh<+N5nZ?R3s<-lHuP8gkx!_jm4RW=vFnE$NM}Le;b) zp$QmW=LZN9eY%);3%7;@^eqQX@c3BK72Nxw^I0tT_VGcko?VFZnItf^Xv#_(&zB6 z>jW}wA-uU16v@huqPx)%+Jm>}Pg4~;{T%Vo{zkB{IlDKF!?7RO+WJz0*t%T2<{ESB!vk1Gc^&ounFT!yf zT<{`iRWa9uGvFA}2SXAVxt|wFe`}@}MC|)Fs<`rc8p>bjnVer@rn78to5@74yg;0r z_}U(X-F^zU8-i#tx1sxU7O#?hU?QKudTSMq#%f$ssJ+8iYk+fcZuK5euZ+7=DRtH{ zt`FLB=j?=+22H>&$gbK9M6>AcF5`}qWt_kYxZwAph?t`Z*iL=ZTIqsBOib0-V3K5e zNBxaW265nFKz|^b!1K#|OeQmf7);Q&9OeK30RR68y8TQ5000I_L_t&o0GGHaxZFg! QjsO4v07*qoM6N<$f{&Rbq5uE@ literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_magenta.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..ee2566741aa4f8b9ce34db82cf4323929ccf4de2 GIT binary patch literal 620 zcmV-y0+aoTP)%jD5wm+@PUs}MpUl%J9qx;0|bZp=Ks$*-}%mCegpAO+oL8^BksD=;RukO znv?>9LS~U^n*VGtb{QOjx8V{#tiH9gkCmlW#G<>>4gDk%I`Qs}dmuIrH(@Y9 zu=@7yA!-x9p&_Llomsz;oB0x+JTE-OUg?G%5gc*-U=6?K1Ih@w$1(C`5e*Oe;4|v* zHTqXhR&F0^1~J+jqA7mHIpXuo$6#S2H=K@=&3t@X$P*GEo&GiznlG~|E6|)y;E%D8l_cYOx`W-qx9i6t97>EQFx7iu)l?TMRiOTC87@ZBl z*Ha2#pcKQiW9Xh702BES+(}5rkBkyic0hU8H5WJ+=hp9lcI-GNm5OJ|R7JjD?wp-q zo+H36sIJ>AICzSQ?Fsl_)skl;8{l)+Ld+VGC3D<0ssL2|K=#{bN~PV21!IgR09BcLMLP0HD6Hx0000d^FNP#0iECCIjlz~v@Vkhh@H*n z5F}K-W$o2^0_E01DzIe?6Sn3dS|Zz>;mWk(aMjTI{J+!-O58_N0d-aPVk3_*FyBv4 zU(N}6vcxJSVLY`hkSD{|LDP6>#ice3JjDc+)%jY>F#NzU@+K?S z#a%vLvu9TZH4e`F9jCVQF139PM{=XPFF5(G#NMfbyGbXMtmd8Ax*LR_qWBZEzdmFY zllA^;tGv6x^iOynkcSZMOBFqs~71tE5V(?K1r@wo8Z5nt}_6vWBV zK8sL2YGV&(j?LlouRf3*@%%JK*BqOQ+ym0y!og-gwJ6Jp`-bf|40CTI?!1mrq5gs1 z%`kBY>uwb1yoc|~3)O#Cq@3?hcwY#9YR6tWm-H&;>yGi{$G=`G#Mb2*p zJ!dbZnp8mJ6t^W)NJxd>M=UB*v7l!xj9)NDzK{yYQK2AZkwg}hTMPdH00960RV}hv h00006NklGD7{;F&Dhfi75LBq3jF3QzutQziVo$PB5s^VffqN(e4XHy0k}d=t6j>t-strOg zScF9|1UHa6Bzv)Bla>w!>xzW2D1RbG7<>YKeOmtET@F z0Rhp~b=3k8Z5sEyeY0iYTMq%ju1Bp-Ay<&Qy;8NIdZi!tXt1kCALst0T0+RJH6WlW z)sH{y6^LfjI4_+3Prvzi#gKKtMnc)xQ?MsgPgL%5uqcgPlNN6Kl3s3M>}C z$i)Gu{_FFSrkbznUCS-a+`XrYs$&XW=~T3<({w{efDz}HmvnNp&v9d=_v&{Sbb0!f z!lO^sIP}0sDt{Or5XfXEP>mfwBOZ(#7KPoYSEEGJDLrX8YJzCp9Q@CP*)fIF39}Pl zHSgbk3}y%Ube6N2p92yb((3<8{ALIDOF6a9PwLF%3u4w_us)<`jVF|9JRK}_O@Obs z*SG8xV$HlFY(;V0f%jlB$DO=F*k@zB~@IU z&~RV7VmI2ANxjk7^OQ*B4^&lb(@0aBXLbPn<_#OgT+D6n0s6|%AEwfgp*zmmwqA2) zc0gW0Ko_vvHeFr!r7dzs_8SL31ah)v@IROFfG}P9aE+8VYyFV_HOt$~w8iVg) z$MIG31_Wp%0+cgts6Q5jOaLy?q$yef|+#>^dtUK zqiY8>Sly?Aif)rs-gu!~U{}W_RI}q}#PyYHMB!lQS%aF>`?Pvws|C@z9o)}I?SO{V zV>@wGd;j)hupPW9zT+(B=YYh9^z?rve%rxhV_KgYQ+m4mCNXocVQP=!POIXDgul=^ z0j?5^jMj@WwtYNqfh}q`>H2JeEb;aEUR1Re &CpUA)cv&5m?#Q@t(W%}&`F*kS= zN$SAm`>H$Dszq&E^dkRC52sQhkv~u!s?&~WN6B^o{ep^!n2Wi+dw~9PwqTW#pAQDc zJFnWA*#UVz0bRiEwHeE8)`#44WxH+@XNWA0iReB4PHp8%>jEMYXRZy4B+GU` zTw{dNi2!DT2nP7(!*2ip0RR6hJof+q000I_L_t&o0EEse)=#rafdBvi M07*qoM6N<$f&&sRH2?qr literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_red.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/hoverboard/hoverboard_red.png new file mode 100644 index 0000000000000000000000000000000000000000..c09ce14b9e4fd3c49e470f94f955524d706a96f9 GIT binary patch literal 629 zcmV-*0*d{KP)TusC!h^@=Pc|7->!2K1k z?8H&!-t4DAc91Jocn0U^fs!^#rEiz?%ML!ZoW$GKQ|N1GVayg>u_h2%na1tKgkI>D z07o&~evN=*Tu=Rwz;@s*xpk7#BmP$Q;6UL>p zjdJGf1oJcjyCA!2vorq>!*fMM&Nnem5C|WH<@_Ith&h^o?XRqP&dvZ+RQ*8VGYp`NKT6g8KW8_s3-($6;X>>2>rOpvA;nV zE_@W!M3^GtVg^B6%((Ce(S@Tf-XM;MvwGg|=)I^QIK1!Pd(QdJckVg!o{jzA(#ndj zvF|$3W(3GS<2WEFUNR^K;K^R>0sn&%-92;f{z4d&kWVeUx^SoBP;cjdY- zP~zHY1Xz{TFE`x;@u2M)F4onFkS62Q2Ar{f7R7Ugf=?I$l30CXa~o@=b?j_a?~{s2v)CFtC-6F#Y}Mm3-gmGUyGo==cRzR(O`?Km* z#*6@OL3Mr2u2dIjGl@jO1qYt`KIkK#Fao?zG!g-;>crOJ?|@2@WVJZytR)!9TgsHj z2+(38L1jmggshSnI}W=500960q>(A{00006Nkln>1W*XdbW?Zj$o*J+J#dP!Rmtv-kYGhy8Ou0heYEMW;W#%T%I zmEFT_9uUW3^#}z6LWJV8uBryzu?9u*-k9GdEP>?c?vuGG3};7B`1co_hJGdzrf{vN z3dE1}G#my9c1LbC`tMX=AYP4u=Owt(^#BGy;}juYNi4R$3F3%&Ij zut=))S94S;;==WErA_%*0$MC2$jl@r6O1i|IRF3v|NjH<#906U00v1!K~w_(?4T*n Tye^1D00000NkvXXu0mjfhxH-s literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/music_disc_underside.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/music_disc_underside.png new file mode 100644 index 0000000000000000000000000000000000000000..53b90928be58c55f11e1e6a8244eee0f24de17e5 GIT binary patch literal 340 zcmV-a0jvIrP)Lfq)WfQu?u!$V`ewK6C#LKrm(UxdIl#v z974{sqsk|YJD zyYK)60aIcX)rRu_^Q}A{oHoy2kf!NZmSx&vBAV5 zpP6~^>@m|D&@eP%7)(XxQQ={b25?|#0`g@Z72Z?^*nkS;i+PnQ1FFDRv$q5800030 m|LSWt{Qv*}21!IgR09Afsiz_E0ibpO00001uY3B^K5LuP~VQJ95n$I6DSts?va8^3{tow6V)Wuw_DcFu|gH7tCLEM~-* zC^ch7;drm-IA_kxq?Bpy_xrxy`+Yi={PR}>NN){0=xAxk`3t)SfGILLM<+KcgHE+{ zBhXX;xH&S~E2-@b>1cH%I@087qF`CS$e_-$b=@Ew&Nx zYKVoAn3%mA)nv@1KwSeNLBN4jB>2t9q3Fy4owU?jDsE@t;Wu9 zbyMH|c>iH$q7WSf8n*`7jKmk`b(ve*JL@zuv3WZM1kxOC&>H1lOL~^Z1u%NDg~-HZ z>h(cL>a?JVV%-fKQI!Eq4WxN|mXV6@fuea3l8H%6A_~tTYi#)+`%0?El@F!3%IQo_nb2dlKk45YeQ6$vVFIgU?Ih( zf%b3YX82H-6Toa87xj%~LaKJPtr2pgET%r2vkI-?RFVRy+w!sWQyUl=wwBA*api0xzw zI5&$1$7Ki|gEh!1G~&zkBVsy4Y|yu8H*79gIW!_RtDf`DBc7S>0)?d!h??UO02&ga zuE;GoiJKiCdB7Yul@L=UzO1)wg9OlHA)C0(fyFHv8DoypAq1US1K?jE2EZaV=%ODl tLZbBt009607~$^u00006Nkl6 zw(#@iFf7H{n_=jpwB0R-Upy9OfuwkScJ!Pb(TEo?a$>y>l&k7K#AMT|IM! z_RiJIL;+6>D82dxkwtxe&<0J6ar%nZMf0X7$j}-Y02znBJTJ#jj!gk|!(X2lptBFH z;`otqiSWTMGV=bra`DgsFK9b%Xd-&Ut8#oPD^Kg^+^4yGQ)>XVFzJH!xdNDVz>HI` zDDD1{H7(M&p|yyu4@mdsRnoC}n-{e885*UBw^ZJpE*I3Yoh`+#wM-14hB5{rpM>k9 z|BJMHCkd4Ycq8WU$ToKwGU5 zGXNbX8G$whF@ZdOj8AtzI!8Lzc1OOCzq^Ryf}w#H9(a*KoB`}KF4&c5uO(szAnF5* zppl;exOvJhm{EX#tN)XCF{OSYW*~!^*WHCaTrdt$%UECy;BGezN@rK|y5!w@+7$RR zvxLfv;baY z)Du$-K%mpXBpCr$P#V%p7jN3<0DPL+#pkWBd!7eqg9ch+2E53qCklPD_sFKMLG$cC zAe}7(($_m^AQn9f$4q?@oh@UwU1Y$Fcc92Kwp~{4`YE{Q#UBGwKtAaIHt>NqXn^J` z34*5M+~0Nu1l?~3L9o}sJd^jqp)owUkERX+3$h}^w=G$C9c51sK9oKZI(&I#?Fz_4 zP!<`u!LiqRLx3?9l!2DB^pV7C46rMyEk%76-lF(*Z=MWX5FZp;Pq}-`Q$>cHKaBx$ zme^q8i~$BS3^@yLh28#osX~Ty+PbMn z#t#oy!I{hwTLI>W81vp^t!y&p9nU9=t6j_Z>A!0tJZ1oU(u-!+ocg@^nvA8q&>F-6 zj{#n{0|`HWK9nP;ih2BweCYs6%a*#aJ__Pff)n2Ti;J3QyOxW!b^HAHw_CaP9bW-w zwhJ>)u)*&vOyJRSuDw?%jImV6BIW2~2CxrC8$Sx>ynNJ)asn%DXIrx{E{EFzw!2bP zDmN{C%m8T_^P;l`H&2#ZEFhv6P`n7Zbmc(9Tg^134{;Ofq2MUh2sV#9*{U#0&c zAw_3?18@!iM!++@T|pMao;9MAr4c>@-f;uCfz8cl80_rjEuzREMoPEFD?6SHlaRKb zxB)CD-}C?x;=mLT8>WM^pTlRx<@CYRpvB62rPW~m#s!gK)xesj?J~gt4m+y=Y*-}% zaE%pvMZ7RyutEdi0p=*pVC}%oEyU=2?pSs9v~7O zRI2#e9A0a*4ew1F4CBbmdBqK2W-J<>n~y3h%Us?0O|%2B6I8}sd+N9W=#xkdOuo2} zvzJd`!pBWhb?*te)iLMK42e;!aCBS5RVlr?}7HbRPG+;UMPpg7=; zlPb^sLsu8S0XV_}m$E_fD5ypl{!;`bDUV8i1JKgIaE-ufVA)gWQ>k!t@v8yg3M$~i z!bWWKMJ0J3QzO)&Fe?F&Pa1Pmt^idQ#etT6X;T>BpMwvFAo~B}(3UXtVd6iI&;kt7 z6b9hR9k))ofyy03doxvUs5&Wa&_D}M(-;6nxKG5*Q|=&lEWNw<@0GRPlc}kr4H{_S z0Zp+2Pz30#atqboTpztq{1=-^ZJi-f8k4o}rZNB;se&l%!fhk3XgUL+7)HR)xr+?Q zQ%74Vn$iF$iJ$Y&6hNLj9~#~OKBcryFKlbsm)-^d0RR7H5-ITj000I_L_t&o0OMxz U%!;Z%jsO4v07*qoM6N<$f*y?O=Kufz diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/royal_hanging_sign.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/royal_hanging_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..6a69c8f8c42fadd065233fc21ec10dbd41b2a9ea GIT binary patch literal 453 zcmV;$0XqJPP)U+M=^L+Pw&vTyloS6Lcrv@gMG3H?2tgp_Q&CHTnTTE-N^$4x9Gh?{7 z8WfK&rEu~gg@ebR0e^;~&Y~$#7w-oO_Re(7eP3#5DNklZ?$jQ9w~ zJ9oU9_jY!W>`rp$-h0k{_nkADB07A!w;&4EBP$xqaj&z!7 z)iWywmsarT)WA$m&oDEr1#I%-_3kQ(cYlqWo0FTzWywlm86nJ)gEnFgHug}W z$MgEscb;u2<*E1g_xtsIe?L8b`RCUHSl+sIP-=DG`3t)RfN5qpN+%2JXHK(p!_zbX zxH&n{D;v9c355faNDQhbMv{U$BN2sq{89&Cu2idXaD1gE%(=r8LFvqqAmGgqKSp9= z#)L2-QlNM|DhN1`h6KMEIW#{tL?^*;NX6|eyuR3UDnFC1K$}M8Hl#alvu5S=?WJPL zorywp;Ayl5&-Rxrrp9!cTVnB;5E=1y3J4_7(XKW6s8#eVjRF|l*^UsIxXexOg%k?c zny5S4#}QQ>zzoQEe~6)q|AC?z2+2rGA_~tTzqK^!+uO-7Rv8GO^YW))C>HN!c6wBJ zg8lZcYX+hT(kpX5Yjaxxroqhk@u4idnOab617Qy-fPsNec#>~8IoemtSpR@1`8~d1!7|(@dqgEl%TMH3;{@kHN@spmjn6#B#pn0Ea@lkc%%*4PA5_! z@lLC4Ouw^i{NZ3Cggzmg{f*xsTKDWpEOHw{oi7&y(>HiC?-4Q#Ttq+MFPjk2=K<{V z78S%#`Ldc3iHLiA`CmbpnDb4cwYG#VILreiu*}1~Y1#OrG3XA25q&v_4dDRGp?P(3_)I|7UA0?Fz1qusjV%Ekd+9}UG30HZTAmIPsr z8$FNKD@ZVSD6m{tAU*RuakP4B8nTUuCTzsQCR zE*aRldXs_E({nV`Rl<>x4)f_*ayCRZ2=q0l=`-^JunmXlUtV0vo%t?u9DfvqHA(<< zYzSB67CecY9qsQyYSyMU#GRLk(Dft7pa6{6$RXX@W@~j-2AN}x;&ln3_IHEeCy)eS z69;TDP8A`E`UC&~|Nj?YVCnz>00v1!K~w_(G7AnC5$KZn!<= z-=FXQh5PFhBo4HkPD?q<0|fgft?3clB=duJ#jlW#^X@Hs8+gp@|NoVbJ@X>YvRROs z*;!kW`3vtB$qhfRcQiI8N@Xhp#pLUlFF4B|^H1kUp0P64{{}0_s6$DMB>tFPTq*Ht y#q0?QFBztbOKecln6#&XH^5$B!Fsv`1B2p5$H_U1r>_Hgg2B_(&t;ucLK6UfSz!eL literal 0 HcmV?d00001 diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/item/truffalo_hanging_sign.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/item/truffalo_hanging_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..553c00fdcceb79ac1ff2a93b41a3efcbb31464da GIT binary patch literal 445 zcmV;u0Yd(XP)Qg%yo>R^y|aQSAq zw;G%kpXBKWpUz7w4(mL;L`b7=$8wP&VZ)md{WBy&nm!dUz6Si&F1zA^vZuvfgmv&NOCGB>C_yl^6GNh z#b`F4nVr@;7dHV3uy=t$e~rBR@d+uM0Y_kLMnxHm$AuUZVq1eFkHBb*+Uov@jTzfN z76xcAa1#`2ZDBMv3saxAlO?ATKWNkg?9P_5(t)JB?wx?#==*2QBl}6 z(NzqXtbz~LoD2854_pKdOwO4zb7#(M2mbi`zX4_E-4Dj9^(JzO(b~enlTY&@2V479 z+Y8#gkcPR`9lYTnB$;oAXE zxW98ji+n(owxc><{&)hda}$xac?LN{>KqU|;qayj=b`oMh@DV9v*6fHV#ppMgHF^( z+@70Cm1f36v0-dtEw_&O^a@y$Jw!%m0F!8#mo=33Y*bDf(UQuQ1EmB=dFLFqQ%7-3 z3#eh5IAC#h63a`|C=`anuL4=(fKII&kJoOXJx;#>00960 new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/peach.png"), true)); EntityRendererRegistry.register(AntarchyFabricEntities.NADIR_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/nadir.png"), false)); EntityRendererRegistry.register(AntarchyFabricEntities.NADIR_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/nadir.png"), true)); + EntityRendererRegistry.register(AntarchyFabricEntities.ROYAL_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/royal.png"), false)); + EntityRendererRegistry.register(AntarchyFabricEntities.ROYAL_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/royal.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); @@ -126,7 +129,9 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE_PORTAL.get(), NightmarePortalRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.DIMENSIONAL_TEAR.get(), DimensionalTearRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.PORTAL_GUN_PORTAL.get(), PortalGunPortalRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.HOVERBOARD.get(), com.craisinlord.antarchy.content.client.renderer.HoverboardRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.PORTAL_GUN_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.PortalGunBlackHoleRenderer::new); + EntityRendererRegistry.register(AntarchyFabricEntities.PORTAL_GUN_PROJECTILE.get(), com.craisinlord.antarchy.content.client.renderer.PortalGunProjectileRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE_BITE.get(), NightmareBiteRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.LUCID.get(), LucidRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.BED_BUG.get(), BedBugRenderer::new); @@ -322,6 +327,16 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NADIR_TRAPDOOR.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NADIR_SAPLING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.POTTED_NADIR_SAPLING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ROYAL_LEAVES.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ROYAL_FLOWERING_LEAVES.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ROYAL_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ROYAL_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ROYAL_SAPLING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.POTTED_ROYAL_SAPLING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TRUFFALO_DOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TRUFFALO_TRAPDOOR.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TRUFFALO_SAPLING.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.POTTED_TRUFFALO_SAPLING.get(), RenderType.cutout()); 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()); @@ -487,6 +502,7 @@ public final class AntarchyFabricClientBootstrap { CameraShakeClientState.tick(); HerculesBeetleImpactShakeClientState.tick(); HordeClientState.tick(); + PortalGunRollClientState.tick(client); if (client.player != null) { ParalyzedClientHandler.clampPlayerInput(client.player); } @@ -530,6 +546,9 @@ public final class AntarchyFabricClientBootstrap { BloodCrystalKatanaTrailHandler.render(context); ScorpionWhipTetherRenderHandler.render(context); WormHookTetherRenderHandler.render(context); + if (context.matrixStack() != null) { + com.craisinlord.antarchy.content.client.renderer.PortalGunPortalViewRenderer.render(context.camera(), context.matrixStack().last().pose(), context.tickCounter()); + } }); } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java index 475b2bad..9e8cb88a 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java @@ -9,6 +9,8 @@ import com.craisinlord.antarchy.content.block.entity.CritterCageBlockEntity; import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalBaseBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalMasterBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; import com.craisinlord.antarchy.content.block.entity.UpperBlockEntity; @@ -155,6 +157,10 @@ public final class AntarchyFabricBlocks { () -> new LucidAnchorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BEACON).strength(3.0F))); public static final DeferredBlock CRITTER_CAGE_BLOCK = BLOCKS.register("critter_cage_block", () -> new CritterCageBlock(BlockBehaviour.Properties.of().strength(5.0F, 6.0F).sound(net.minecraft.world.level.block.SoundType.METAL).noOcclusion())); + public static final DeferredBlock PORTAL_GUN_PORTAL_MASTER = BLOCKS.register("portal_gun_portal_master", + () -> new PortalGunPortalMasterBlock(AntarchyFabricBlocks::portalGunPortalMasterBlockEntityType, portalProperties())); + public static final DeferredBlock PORTAL_GUN_PORTAL_BASE = BLOCKS.register("portal_gun_portal_base", + () -> new PortalGunPortalBaseBlock(AntarchyFabricBlocks::portalGunPortalBaseBlockEntityType, portalProperties())); public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", @@ -337,6 +343,196 @@ public final class AntarchyFabricBlocks { () -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + public static final DeferredBlock ROYAL_LOG = BLOCKS.register("royal_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + + + public static final DeferredBlock ROYAL_WOOD = BLOCKS.register("royal_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + + + public static final DeferredBlock STRIPPED_ROYAL_LOG = BLOCKS.register("stripped_royal_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); + + + public static final DeferredBlock STRIPPED_ROYAL_WOOD = BLOCKS.register("stripped_royal_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); + + + public static final DeferredBlock ROYAL_PLANKS = BLOCKS.register("royal_planks", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); + + + public static final DeferredBlock ROYAL_STAIRS = BLOCKS.register("royal_stairs", + () -> new net.minecraft.world.level.block.StairBlock(ROYAL_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); + + + public static final DeferredBlock ROYAL_SLAB = BLOCKS.register("royal_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); + + + public static final DeferredBlock ROYAL_FENCE = BLOCKS.register("royal_fence", + () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); + + + public static final DeferredBlock ROYAL_FENCE_GATE = BLOCKS.register("royal_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 ROYAL_DOOR = BLOCKS.register("royal_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 ROYAL_TRAPDOOR = BLOCKS.register("royal_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 ROYAL_PRESSURE_PLATE = BLOCKS.register("royal_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 ROYAL_BUTTON = BLOCKS.register("royal_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 ROYAL_LEAVES = BLOCKS.register("royal_leaves", + () -> new net.minecraft.world.level.block.LeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); + + + public static final DeferredBlock ROYAL_FLOWERING_LEAVES = BLOCKS.register("royal_flowering_leaves", + () -> new net.minecraft.world.level.block.LeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks().lightLevel(state -> 12))); + + + public static final DeferredBlock ROYAL_SAPLING = BLOCKS.register("royal_sapling", + () -> new com.craisinlord.antarchy.content.block.RoyalSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).noCollission())); + public static final DeferredBlock POTTED_ROYAL_SAPLING = BLOCKS.register("potted_royal_sapling", + () -> new net.minecraft.world.level.block.FlowerPotBlock(ROYAL_SAPLING.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.POTTED_DANDELION))); + + + public static final DeferredBlock ROYAL_SIGN = BLOCKS.register("royal_sign", + () -> new net.minecraft.world.level.block.StandingSignBlock(AntarchyWoodTypes.ROYAL, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + + + public static final DeferredBlock ROYAL_WALL_SIGN = BLOCKS.register("royal_wall_sign", + () -> new net.minecraft.world.level.block.WallSignBlock(AntarchyWoodTypes.ROYAL, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + + + public static final DeferredBlock ROYAL_HANGING_SIGN = BLOCKS.register("royal_hanging_sign", + () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(AntarchyWoodTypes.ROYAL, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + + + public static final DeferredBlock ROYAL_WALL_HANGING_SIGN = BLOCKS.register("royal_wall_hanging_sign", + () -> new net.minecraft.world.level.block.WallHangingSignBlock(AntarchyWoodTypes.ROYAL, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + + + public static final DeferredBlock TRUFFALO_LOG = BLOCKS.register("truffalo_log", + () -> new com.craisinlord.antarchy.content.block.TruffaloLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + + + public static final DeferredBlock TRUFFALO_WOOD = BLOCKS.register("truffalo_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + + + public static final DeferredBlock STRIPPED_TRUFFALO_LOG = BLOCKS.register("stripped_truffalo_log", + () -> new com.craisinlord.antarchy.content.block.TruffaloLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); + + + public static final DeferredBlock STRIPPED_TRUFFALO_WOOD = BLOCKS.register("stripped_truffalo_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); + + + public static final DeferredBlock TRUFFALO_PLANKS = BLOCKS.register("truffalo_planks", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); + + + public static final DeferredBlock TRUFFALO_STAIRS = BLOCKS.register("truffalo_stairs", + () -> new net.minecraft.world.level.block.StairBlock(TRUFFALO_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); + + + public static final DeferredBlock TRUFFALO_SLAB = BLOCKS.register("truffalo_slab", + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); + + + public static final DeferredBlock TRUFFALO_FENCE = BLOCKS.register("truffalo_fence", + () -> new net.minecraft.world.level.block.FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); + + + public static final DeferredBlock TRUFFALO_FENCE_GATE = BLOCKS.register("truffalo_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 TRUFFALO_DOOR = BLOCKS.register("truffalo_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 TRUFFALO_TRAPDOOR = BLOCKS.register("truffalo_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 TRUFFALO_PRESSURE_PLATE = BLOCKS.register("truffalo_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 TRUFFALO_BUTTON = BLOCKS.register("truffalo_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 TRUFFALO_SAPLING = BLOCKS.register("truffalo_sapling", + () -> new com.craisinlord.antarchy.content.block.TruffaloSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + public static final DeferredBlock POTTED_TRUFFALO_SAPLING = BLOCKS.register("potted_truffalo_sapling", + () -> new net.minecraft.world.level.block.FlowerPotBlock(TRUFFALO_SAPLING.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.POTTED_DANDELION))); + + + public static final DeferredBlock TRUFFALO_SIGN = BLOCKS.register("truffalo_sign", + () -> new net.minecraft.world.level.block.StandingSignBlock(AntarchyWoodTypes.TRUFFALO, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + + + public static final DeferredBlock TRUFFALO_WALL_SIGN = BLOCKS.register("truffalo_wall_sign", + () -> new net.minecraft.world.level.block.WallSignBlock(AntarchyWoodTypes.TRUFFALO, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + + + public static final DeferredBlock TRUFFALO_HANGING_SIGN = BLOCKS.register("truffalo_hanging_sign", + () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(AntarchyWoodTypes.TRUFFALO, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + + + public static final DeferredBlock TRUFFALO_WALL_HANGING_SIGN = BLOCKS.register("truffalo_wall_hanging_sign", + () -> new net.minecraft.world.level.block.WallHangingSignBlock(AntarchyWoodTypes.TRUFFALO, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + + + public static final DeferredBlock TRUFFALO_TUFT_WHITE = BLOCKS.register("white_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHITE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_ORANGE = BLOCKS.register("orange_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.ORANGE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_MAGENTA = BLOCKS.register("magenta_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MAGENTA_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_LIGHT_BLUE = BLOCKS.register("light_blue_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.LIGHT_BLUE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_YELLOW = BLOCKS.register("yellow_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.YELLOW_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_LIME = BLOCKS.register("lime_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.LIME_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_PINK = BLOCKS.register("pink_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PINK_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_GRAY = BLOCKS.register("gray_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GRAY_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_LIGHT_GRAY = BLOCKS.register("light_gray_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.LIGHT_GRAY_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_CYAN = BLOCKS.register("cyan_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CYAN_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_PURPLE = BLOCKS.register("purple_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PURPLE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_BLUE = BLOCKS.register("blue_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BLUE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_BROWN = BLOCKS.register("brown_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BROWN_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_GREEN = BLOCKS.register("green_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GREEN_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_RED = BLOCKS.register("red_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.RED_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_BLACK = BLOCKS.register("black_truffalo_tuft", + () -> new com.craisinlord.antarchy.content.block.TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BLACK_WOOL))); + + public static final DeferredBlock DUCT_TAPE = BLOCKS.register("duct_tape", () -> new DuctTapeBlock(BlockBehaviour.Properties.of() .strength(0.2F) @@ -1222,6 +1418,16 @@ public final class AntarchyFabricBlocks { (pos, state) -> new UpperBlockEntity(pos, state, AntarchyFabricBlocks::upperBlockEntityType), UPPER.get() ).build(null)); + public static final DeferredHolder, BlockEntityType> PORTAL_GUN_PORTAL_MASTER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("portal_gun_portal_master", + () -> BlockEntityType.Builder.of( + (pos, state) -> new PortalGunPortalMasterBlockEntity(pos, state, AntarchyFabricBlocks::portalGunPortalMasterBlockEntityType), + PORTAL_GUN_PORTAL_MASTER.get() + ).build(null)); + public static final DeferredHolder, BlockEntityType> PORTAL_GUN_PORTAL_BASE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("portal_gun_portal_base", + () -> BlockEntityType.Builder.of( + (pos, state) -> new PortalGunPortalBaseBlockEntity(pos, state, AntarchyFabricBlocks::portalGunPortalBaseBlockEntityType), + PORTAL_GUN_PORTAL_BASE.get() + ).build(null)); @@ -1253,6 +1459,14 @@ public final class AntarchyFabricBlocks { return UPPER_BLOCK_ENTITY.get(); } + private static BlockEntityType portalGunPortalMasterBlockEntityType() { + return PORTAL_GUN_PORTAL_MASTER_BLOCK_ENTITY.get(); + } + + private static BlockEntityType portalGunPortalBaseBlockEntityType() { + return PORTAL_GUN_PORTAL_BASE_BLOCK_ENTITY.get(); + } + private static Block smallBloodCrystalBudBlock() { diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java index 6bd48265..b8ecccdb 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java @@ -24,10 +24,15 @@ import com.craisinlord.antarchy.content.entity.CritterCageProjectileEntity; import com.craisinlord.antarchy.content.entity.WormHookProjectileEntity; import com.craisinlord.antarchy.content.entity.JumpyBugEntity; import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import com.craisinlord.antarchy.content.entity.HoverboardEntity; import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; import com.craisinlord.antarchy.content.entity.NadirBoatEntity; import com.craisinlord.antarchy.content.entity.NadirChestBoatEntity; +import com.craisinlord.antarchy.content.entity.RoyalBoatEntity; +import com.craisinlord.antarchy.content.entity.RoyalChestBoatEntity; +import com.craisinlord.antarchy.content.entity.TruffaloBoatEntity; +import com.craisinlord.antarchy.content.entity.TruffaloChestBoatEntity; import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; import com.craisinlord.antarchy.content.entity.RollyPollyEntity; @@ -39,6 +44,7 @@ import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; @@ -89,6 +95,13 @@ public final class AntarchyFabricEntities { .build("rolly_polly")); + public static final DeferredHolder, EntityType> HOVERBOARD = ENTITY_TYPES.register("hoverboard", + () -> EntityType.Builder.of(HoverboardEntity::new, MobCategory.MISC) + .sized(1.5F, 0.6875F) + .clientTrackingRange(10) + .build("hoverboard")); + + public static final DeferredHolder, EntityType> MOLEWORM = ENTITY_TYPES.register("moleworm", () -> EntityType.Builder.of(MolewormEntity::new, MobCategory.MONSTER) .sized(0.4F, 0.3F) @@ -163,6 +176,38 @@ public final class AntarchyFabricEntities { .build("nadir_chest_boat")); + public static final DeferredHolder, EntityType> ROYAL_BOAT_ENTITY = ENTITY_TYPES.register("royal_boat", + () -> EntityType.Builder.of(RoyalBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("royal_boat")); + + + public static final DeferredHolder, EntityType> ROYAL_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("royal_chest_boat", + () -> EntityType.Builder.of(RoyalChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("royal_chest_boat")); + + + public static final DeferredHolder, EntityType> TRUFFALO_BOAT_ENTITY = ENTITY_TYPES.register("truffalo_boat", + () -> EntityType.Builder.of(TruffaloBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("truffalo_boat")); + + + public static final DeferredHolder, EntityType> TRUFFALO_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("truffalo_chest_boat", + () -> EntityType.Builder.of(TruffaloChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("truffalo_chest_boat")); + + public static final DeferredHolder, EntityType> MOLEVORE = ENTITY_TYPES.register("molevore", () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) .sized(1.95F, 1.1F) @@ -384,6 +429,12 @@ public final class AntarchyFabricEntities { .clientTrackingRange(10) .updateInterval(1) .build("portal_gun_black_hole")); + public static final DeferredHolder, EntityType> PORTAL_GUN_PROJECTILE = ENTITY_TYPES.register("portal_gun_projectile", + () -> EntityType.Builder.of(PortalGunProjectileEntity::new, MobCategory.MISC) + .sized(0.25F, 0.25F) + .clientTrackingRange(8) + .updateInterval(1) + .build("portal_gun_projectile")); public static final DeferredHolder, EntityType> NIGHTMARE_BITE = ENTITY_TYPES.register("nightmare_bite", () -> EntityType.Builder.of(NightmareBiteEntity::new, MobCategory.MISC) diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java index 89b4a3d9..9505209b 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntityAttributes.java @@ -100,6 +100,7 @@ public final class AntarchyFabricEntityAttributes { 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.HOVERBOARD.get(), com.craisinlord.antarchy.content.entity.HoverboardEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(AntarchyFabricEntities.RED_ANT.get(), buildAntAttributes( AntarchySettings.redAntHealth(), diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java index 37e4ab7c..f42b7cb3 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java @@ -14,11 +14,14 @@ 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 net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; import net.minecraft.world.item.MobBucketItem; @@ -66,6 +69,11 @@ public final class AntarchyFabricItems { public static final DeferredItem NIGHTMARE_SCALE = ITEMS.registerSimpleItem("nightmare_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant()); + public static final DeferredItem MUSIC_DISC_UNDERSIDE = ITEMS.registerSimpleItem("music_disc_underside", + new Item.Properties().stacksTo(1).rarity(Rarity.RARE) + .jukeboxPlayable(ResourceKey.create(Registries.JUKEBOX_SONG, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "underside")))); + public static final DeferredItem PRIMORDIAL_SCUTE = ITEMS.registerSimpleItem("primordial_scute", new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -252,6 +260,42 @@ public final class AntarchyFabricItems { () -> new OuranwoodChestBoatItem(AntarchyFabricEntities.OURANWOOD_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD = ITEMS.register("hoverboard", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), null, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_WHITE = ITEMS.register("hoverboard_white", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.WHITE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_ORANGE = ITEMS.register("hoverboard_orange", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.ORANGE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_MAGENTA = ITEMS.register("hoverboard_magenta", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.MAGENTA, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_LIGHT_BLUE = ITEMS.register("hoverboard_light_blue", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.LIGHT_BLUE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_YELLOW = ITEMS.register("hoverboard_yellow", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.YELLOW, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_LIME = ITEMS.register("hoverboard_lime", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.LIME, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_PINK = ITEMS.register("hoverboard_pink", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.PINK, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_GRAY = ITEMS.register("hoverboard_gray", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.GRAY, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_LIGHT_GRAY = ITEMS.register("hoverboard_light_gray", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.LIGHT_GRAY, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_CYAN = ITEMS.register("hoverboard_cyan", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.CYAN, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_PURPLE = ITEMS.register("hoverboard_purple", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.PURPLE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_BLUE = ITEMS.register("hoverboard_blue", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.BLUE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_BROWN = ITEMS.register("hoverboard_brown", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.BROWN, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_GREEN = ITEMS.register("hoverboard_green", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.GREEN, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_RED = ITEMS.register("hoverboard_red", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.RED, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_BLACK = ITEMS.register("hoverboard_black", + () -> new HoverboardItem(AntarchyFabricEntities.HOVERBOARD.get(), DyeColor.BLACK, 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())); @@ -284,6 +328,146 @@ public final class AntarchyFabricItems { () -> new com.craisinlord.antarchy.content.item.NadirChestBoatItem(AntarchyFabricEntities.NADIR_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem ROYAL_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_LOG); + + + public static final DeferredItem ROYAL_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_WOOD); + + + public static final DeferredItem STRIPPED_ROYAL_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_ROYAL_LOG); + + + public static final DeferredItem STRIPPED_ROYAL_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_ROYAL_WOOD); + + + public static final DeferredItem ROYAL_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_PLANKS); + + + public static final DeferredItem ROYAL_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_STAIRS); + + + public static final DeferredItem ROYAL_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_SLAB); + + + public static final DeferredItem ROYAL_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_FENCE); + + + public static final DeferredItem ROYAL_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_FENCE_GATE); + + + public static final DeferredItem ROYAL_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_DOOR); + + + public static final DeferredItem ROYAL_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_TRAPDOOR); + + + public static final DeferredItem ROYAL_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_PRESSURE_PLATE); + + + public static final DeferredItem ROYAL_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_BUTTON); + + + public static final DeferredItem ROYAL_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_LEAVES); + + + public static final DeferredItem ROYAL_FLOWERING_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_FLOWERING_LEAVES); + + + public static final DeferredItem ROYAL_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.ROYAL_SAPLING); + + + public static final DeferredItem ROYAL_SIGN_ITEM = ITEMS.register("royal_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyFabricBlocks.ROYAL_SIGN.get(), AntarchyFabricBlocks.ROYAL_WALL_SIGN.get())); + + + public static final DeferredItem ROYAL_HANGING_SIGN_ITEM = ITEMS.register("royal_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyFabricBlocks.ROYAL_HANGING_SIGN.get(), AntarchyFabricBlocks.ROYAL_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + + + public static final DeferredItem ROYAL_BOAT = ITEMS.register("royal_boat", + () -> new com.craisinlord.antarchy.content.item.RoyalBoatOnlyItem(AntarchyFabricEntities.ROYAL_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem ROYAL_CHEST_BOAT = ITEMS.register("royal_chest_boat", + () -> new com.craisinlord.antarchy.content.item.RoyalChestBoatItem(AntarchyFabricEntities.ROYAL_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem TRUFFALO_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_LOG); + + + public static final DeferredItem TRUFFALO_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_WOOD); + + + public static final DeferredItem STRIPPED_TRUFFALO_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_TRUFFALO_LOG); + + + public static final DeferredItem STRIPPED_TRUFFALO_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STRIPPED_TRUFFALO_WOOD); + + + public static final DeferredItem TRUFFALO_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_PLANKS); + + + public static final DeferredItem TRUFFALO_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_STAIRS); + + + public static final DeferredItem TRUFFALO_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_SLAB); + + + public static final DeferredItem TRUFFALO_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_FENCE); + + + public static final DeferredItem TRUFFALO_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_FENCE_GATE); + + + public static final DeferredItem TRUFFALO_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_DOOR); + + + public static final DeferredItem TRUFFALO_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TRAPDOOR); + + + public static final DeferredItem TRUFFALO_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_PRESSURE_PLATE); + + + public static final DeferredItem TRUFFALO_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_BUTTON); + + + public static final DeferredItem TRUFFALO_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_SAPLING); + + + public static final DeferredItem TRUFFALO_SIGN_ITEM = ITEMS.register("truffalo_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyFabricBlocks.TRUFFALO_SIGN.get(), AntarchyFabricBlocks.TRUFFALO_WALL_SIGN.get())); + + + public static final DeferredItem TRUFFALO_HANGING_SIGN_ITEM = ITEMS.register("truffalo_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyFabricBlocks.TRUFFALO_HANGING_SIGN.get(), AntarchyFabricBlocks.TRUFFALO_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + + + public static final DeferredItem TRUFFALO_BOAT = ITEMS.register("truffalo_boat", + () -> new com.craisinlord.antarchy.content.item.TruffaloBoatOnlyItem(AntarchyFabricEntities.TRUFFALO_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem TRUFFALO_CHEST_BOAT = ITEMS.register("truffalo_chest_boat", + () -> new com.craisinlord.antarchy.content.item.TruffaloChestBoatItem(AntarchyFabricEntities.TRUFFALO_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + + + public static final DeferredItem TRUFFALO_TUFT_WHITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_WHITE); + public static final DeferredItem TRUFFALO_TUFT_ORANGE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_ORANGE); + public static final DeferredItem TRUFFALO_TUFT_MAGENTA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_MAGENTA); + public static final DeferredItem TRUFFALO_TUFT_LIGHT_BLUE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_LIGHT_BLUE); + public static final DeferredItem TRUFFALO_TUFT_YELLOW_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_YELLOW); + public static final DeferredItem TRUFFALO_TUFT_LIME_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_LIME); + public static final DeferredItem TRUFFALO_TUFT_PINK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_PINK); + public static final DeferredItem TRUFFALO_TUFT_GRAY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_GRAY); + public static final DeferredItem TRUFFALO_TUFT_LIGHT_GRAY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_LIGHT_GRAY); + public static final DeferredItem TRUFFALO_TUFT_CYAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_CYAN); + public static final DeferredItem TRUFFALO_TUFT_PURPLE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_PURPLE); + public static final DeferredItem TRUFFALO_TUFT_BLUE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_BLUE); + public static final DeferredItem TRUFFALO_TUFT_BROWN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_BROWN); + public static final DeferredItem TRUFFALO_TUFT_GREEN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_GREEN); + public static final DeferredItem TRUFFALO_TUFT_RED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_RED); + public static final DeferredItem TRUFFALO_TUFT_BLACK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TRUFFALO_TUFT_BLACK); + + public static final DeferredItem CRITTER_CAGE = ITEMS.register("critter_cage", () -> new CritterCageItem(new Item.Properties().stacksTo(16))); @@ -1248,7 +1432,14 @@ public final class AntarchyFabricItems { () -> new GravityGunItem(new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant())); public static final DeferredItem PORTAL_GUN = ITEMS.register("portal_gun", - () -> new PortalGunItem(new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), AntarchyFabricEntities.PORTAL_GUN_PORTAL, AntarchyFabricEntities.PORTAL_GUN_BLACK_HOLE)); + () -> new PortalGunItem( + new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), + AntarchyFabricEntities.PORTAL_GUN_PORTAL, + AntarchyFabricEntities.PORTAL_GUN_BLACK_HOLE, + AntarchyFabricEntities.PORTAL_GUN_PROJECTILE, + AntarchyFabricBlocks.PORTAL_GUN_PORTAL_MASTER, + AntarchyFabricBlocks.PORTAL_GUN_PORTAL_BASE + )); // Temporarily disabled: keeping the code but not registering the item for now. diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java index 1862b49c..f335ba3a 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -65,6 +65,8 @@ import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaCloudFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.LucidAntiwaterPoolFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.NadirTreeConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.NadirTreeFeature; +import com.craisinlord.antarchy.content.worldgen.truffalo.TruffaloTreeConfiguration; +import com.craisinlord.antarchy.content.worldgen.truffalo.TruffaloTreeFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisBiomeSource; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisDuneFeature; @@ -578,6 +580,10 @@ public final class AntarchyFabricMisc { () -> new NadirTreeFeature(NadirTreeConfiguration.CODEC)); + public static final DeferredHolder, TruffaloTreeFeature> TRUFFALO_TREE_FEATURE = FEATURES.register("truffalo_tree", + () -> new TruffaloTreeFeature(TruffaloTreeConfiguration.CODEC)); + + public static final DeferredHolder, ElythiaFloraFeature> ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora", () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST)); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java index 8fe096bf..dd70d90f 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java @@ -515,6 +515,7 @@ public final class AntarchyFabricSounds { public static final DeferredHolder POTENT_NYXITE_GEYSER_CONTINUOUS_ACTIVE = registerSoundEvent("potent_nyxite_geyser_continuous_active"); + public static final DeferredHolder MUSIC_DISC_UNDERSIDE = registerSoundEvent("music_disc_underside"); diff --git a/gradle.properties b/gradle.properties index 79e241f9..c73771d9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ org.gradle.configureondemand=true minecraft_version_1_21_1=1.21.1 modid=antarchy mod_id=antarchy -mod_version=1.1.1 +mod_version=1.2.0 maven_group=com.craisinlord mixin_version=0.15.4+mixin.0.8.7 diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyWoodTypes.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyWoodTypes.java index ba506aa6..e294bebb 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyWoodTypes.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyWoodTypes.java @@ -8,6 +8,8 @@ public final class AntarchyWoodTypes { public static final WoodType OURANWOOD = register("ouranwood"); public static final WoodType PEACH = register("peach"); public static final WoodType NADIR = register("nadir"); + public static final WoodType ROYAL = register("royal"); + public static final WoodType TRUFFALO = register("truffalo"); private AntarchyWoodTypes() { } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 1deb6370..8e435634 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -78,6 +78,8 @@ public final class AntarchyNeoForgeClient { private static final ResourceLocation PEACH_CHEST_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/peach.png"); private static final ResourceLocation NADIR_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/nadir.png"); private static final ResourceLocation NADIR_CHEST_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/nadir.png"); + private static final ResourceLocation ROYAL_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/royal.png"); + private static final ResourceLocation ROYAL_CHEST_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/royal.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"); @@ -108,6 +110,7 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.WORM.get(), context -> withParalyzedGeoLayer(new WormRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.MANTIS.get(), context -> withParalyzedGeoLayer(new MantisRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.ALPHA_MANTIS.get(), context -> withParalyzedGeoLayer(new AlphaMantisRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.HOVERBOARD.get(), com.craisinlord.antarchy.content.client.renderer.HoverboardRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.MOLEVORE.get(), context -> withParalyzedGeoLayer(new MolevoreRenderer(context))); 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)); @@ -116,6 +119,8 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.PEACH_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, PEACH_CHEST_BOAT_TEXTURE, true)); event.registerEntityRenderer(AntarchyNeoforgeEntites.NADIR_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, NADIR_BOAT_TEXTURE, false)); event.registerEntityRenderer(AntarchyNeoforgeEntites.NADIR_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, NADIR_CHEST_BOAT_TEXTURE, true)); + event.registerEntityRenderer(AntarchyNeoforgeEntites.ROYAL_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ROYAL_BOAT_TEXTURE, false)); + event.registerEntityRenderer(AntarchyNeoforgeEntites.ROYAL_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ROYAL_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))); @@ -132,6 +137,7 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.DIMENSIONAL_TEAR.get(), DimensionalTearRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.PORTAL_GUN_PORTAL.get(), PortalGunPortalRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.PORTAL_GUN_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.PortalGunBlackHoleRenderer::new); + event.registerEntityRenderer(AntarchyNeoforgeEntites.PORTAL_GUN_PROJECTILE.get(), com.craisinlord.antarchy.content.client.renderer.PortalGunProjectileRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE_BITE.get(), NightmareBiteRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID.get(), context -> withParalyzedGeoLayer(new LucidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.BED_BUG.get(), context -> withParalyzedGeoLayer(new BedBugRenderer(context))); @@ -586,6 +592,16 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.NADIR_TRAPDOOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.NADIR_SAPLING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.POTTED_NADIR_SAPLING.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ROYAL_LEAVES.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ROYAL_FLOWERING_LEAVES.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ROYAL_DOOR.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ROYAL_TRAPDOOR.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ROYAL_SAPLING.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.POTTED_ROYAL_SAPLING.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TRUFFALO_DOOR.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TRUFFALO_TRAPDOOR.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TRUFFALO_SAPLING.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.POTTED_TRUFFALO_SAPLING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), RenderType.cutout()); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunPortalViewRenderHandler.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunPortalViewRenderHandler.java new file mode 100644 index 00000000..5e74f391 --- /dev/null +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunPortalViewRenderHandler.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.renderer.PortalGunPortalViewRenderer; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.RenderLevelStageEvent; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.GAME) +public final class PortalGunPortalViewRenderHandler { + private PortalGunPortalViewRenderHandler() { + } + + @SubscribeEvent + public static void onRenderLevelStage(RenderLevelStageEvent event) { + if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_PARTICLES) { + return; + } + PortalGunPortalViewRenderer.render(event.getCamera(), event.getPoseStack().last().pose(), event.getPartialTick()); + } +} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunRollClientHandler.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunRollClientHandler.java new file mode 100644 index 00000000..7a9c7329 --- /dev/null +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunRollClientHandler.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.PortalGunRollClientState; +import net.minecraft.client.Minecraft; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.GAME) +public final class PortalGunRollClientHandler { + private PortalGunRollClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(ClientTickEvent.Post event) { + PortalGunRollClientState.tick(Minecraft.getInstance()); + } +} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index 0dec6de5..a347f58d 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -9,6 +9,8 @@ import com.craisinlord.antarchy.content.block.entity.CritterCageBlockEntity; import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; import com.craisinlord.antarchy.content.block.entity.LucidAnchorBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalBaseBlockEntity; +import com.craisinlord.antarchy.content.block.entity.PortalGunPortalMasterBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.SeashellBlockEntity; import com.craisinlord.antarchy.content.block.entity.UpperBlockEntity; @@ -103,6 +105,10 @@ public final class AntarchyNeoforgeBlocks { () -> new LucidAnchorBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BEACON).strength(3.0F))); public static final DeferredBlock CRITTER_CAGE_BLOCK = BLOCKS.register("critter_cage_block", () -> new CritterCageBlock(BlockBehaviour.Properties.of().strength(5.0F, 6.0F).sound(net.minecraft.world.level.block.SoundType.METAL).noOcclusion())); + public static final DeferredBlock PORTAL_GUN_PORTAL_MASTER = BLOCKS.register("portal_gun_portal_master", + () -> new PortalGunPortalMasterBlock(AntarchyNeoforgeBlocks::portalGunPortalMasterBlockEntityType, portalProperties())); + public static final DeferredBlock PORTAL_GUN_PORTAL_BASE = BLOCKS.register("portal_gun_portal_base", + () -> new PortalGunPortalBaseBlock(AntarchyNeoforgeBlocks::portalGunPortalBaseBlockEntityType, portalProperties())); 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", @@ -195,6 +201,118 @@ public final class AntarchyNeoforgeBlocks { () -> new WallHangingSignBlock(AntarchyWoodTypes.NADIR, 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 ROYAL_LOG = BLOCKS.register("royal_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + public static final DeferredBlock ROYAL_WOOD = BLOCKS.register("royal_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + public static final DeferredBlock STRIPPED_ROYAL_LOG = BLOCKS.register("stripped_royal_log", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); + public static final DeferredBlock STRIPPED_ROYAL_WOOD = BLOCKS.register("stripped_royal_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); + public static final DeferredBlock ROYAL_PLANKS = BLOCKS.register("royal_planks", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); + public static final DeferredBlock ROYAL_STAIRS = BLOCKS.register("royal_stairs", + () -> new StairBlock(ROYAL_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); + public static final DeferredBlock ROYAL_SLAB = BLOCKS.register("royal_slab", + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); + public static final DeferredBlock ROYAL_FENCE = BLOCKS.register("royal_fence", + () -> new FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); + public static final DeferredBlock ROYAL_FENCE_GATE = BLOCKS.register("royal_fence_gate", + () -> new FenceGateBlock(WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE))); + public static final DeferredBlock ROYAL_DOOR = BLOCKS.register("royal_door", + () -> new DoorBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR))); + public static final DeferredBlock ROYAL_TRAPDOOR = BLOCKS.register("royal_trapdoor", + () -> new TrapDoorBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR))); + public static final DeferredBlock ROYAL_PRESSURE_PLATE = BLOCKS.register("royal_pressure_plate", + () -> new PressurePlateBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE))); + public static final DeferredBlock ROYAL_BUTTON = BLOCKS.register("royal_button", + () -> new ButtonBlock(BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON))); + public static final DeferredBlock ROYAL_LEAVES = BLOCKS.register("royal_leaves", + () -> new LeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); + public static final DeferredBlock ROYAL_FLOWERING_LEAVES = BLOCKS.register("royal_flowering_leaves", + () -> new LeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks().lightLevel(state -> 12))); + public static final DeferredBlock ROYAL_SAPLING = BLOCKS.register("royal_sapling", + () -> new RoyalSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).noCollission())); + public static final DeferredBlock POTTED_ROYAL_SAPLING = BLOCKS.register("potted_royal_sapling", + () -> new FlowerPotBlock(ROYAL_SAPLING.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.POTTED_DANDELION))); + public static final DeferredBlock ROYAL_SIGN = BLOCKS.register("royal_sign", + () -> new StandingSignBlock(AntarchyWoodTypes.ROYAL, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + public static final DeferredBlock ROYAL_WALL_SIGN = BLOCKS.register("royal_wall_sign", + () -> new WallSignBlock(AntarchyWoodTypes.ROYAL, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + public static final DeferredBlock ROYAL_HANGING_SIGN = BLOCKS.register("royal_hanging_sign", + () -> new CeilingHangingSignBlock(AntarchyWoodTypes.ROYAL, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + public static final DeferredBlock ROYAL_WALL_HANGING_SIGN = BLOCKS.register("royal_wall_hanging_sign", + () -> new WallHangingSignBlock(AntarchyWoodTypes.ROYAL, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + public static final DeferredBlock TRUFFALO_LOG = BLOCKS.register("truffalo_log", + () -> new TruffaloLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG))); + public static final DeferredBlock TRUFFALO_WOOD = BLOCKS.register("truffalo_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD))); + public static final DeferredBlock STRIPPED_TRUFFALO_LOG = BLOCKS.register("stripped_truffalo_log", + () -> new TruffaloLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG))); + public static final DeferredBlock STRIPPED_TRUFFALO_WOOD = BLOCKS.register("stripped_truffalo_wood", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD))); + public static final DeferredBlock TRUFFALO_PLANKS = BLOCKS.register("truffalo_planks", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS))); + public static final DeferredBlock TRUFFALO_STAIRS = BLOCKS.register("truffalo_stairs", + () -> new StairBlock(TRUFFALO_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS))); + public static final DeferredBlock TRUFFALO_SLAB = BLOCKS.register("truffalo_slab", + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB))); + public static final DeferredBlock TRUFFALO_FENCE = BLOCKS.register("truffalo_fence", + () -> new FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE))); + public static final DeferredBlock TRUFFALO_FENCE_GATE = BLOCKS.register("truffalo_fence_gate", + () -> new FenceGateBlock(WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE))); + public static final DeferredBlock TRUFFALO_DOOR = BLOCKS.register("truffalo_door", + () -> new DoorBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR))); + public static final DeferredBlock TRUFFALO_TRAPDOOR = BLOCKS.register("truffalo_trapdoor", + () -> new TrapDoorBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR))); + public static final DeferredBlock TRUFFALO_PRESSURE_PLATE = BLOCKS.register("truffalo_pressure_plate", + () -> new PressurePlateBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE))); + public static final DeferredBlock TRUFFALO_BUTTON = BLOCKS.register("truffalo_button", + () -> new ButtonBlock(BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON))); + public static final DeferredBlock TRUFFALO_SAPLING = BLOCKS.register("truffalo_sapling", + () -> new TruffaloSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + public static final DeferredBlock POTTED_TRUFFALO_SAPLING = BLOCKS.register("potted_truffalo_sapling", + () -> new FlowerPotBlock(TRUFFALO_SAPLING.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.POTTED_DANDELION))); + public static final DeferredBlock TRUFFALO_SIGN = BLOCKS.register("truffalo_sign", + () -> new StandingSignBlock(AntarchyWoodTypes.TRUFFALO, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + public static final DeferredBlock TRUFFALO_WALL_SIGN = BLOCKS.register("truffalo_wall_sign", + () -> new WallSignBlock(AntarchyWoodTypes.TRUFFALO, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + public static final DeferredBlock TRUFFALO_HANGING_SIGN = BLOCKS.register("truffalo_hanging_sign", + () -> new CeilingHangingSignBlock(AntarchyWoodTypes.TRUFFALO, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + public static final DeferredBlock TRUFFALO_WALL_HANGING_SIGN = BLOCKS.register("truffalo_wall_hanging_sign", + () -> new WallHangingSignBlock(AntarchyWoodTypes.TRUFFALO, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + public static final DeferredBlock TRUFFALO_TUFT_WHITE = BLOCKS.register("white_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WHITE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_ORANGE = BLOCKS.register("orange_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.ORANGE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_MAGENTA = BLOCKS.register("magenta_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MAGENTA_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_LIGHT_BLUE = BLOCKS.register("light_blue_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.LIGHT_BLUE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_YELLOW = BLOCKS.register("yellow_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.YELLOW_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_LIME = BLOCKS.register("lime_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.LIME_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_PINK = BLOCKS.register("pink_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PINK_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_GRAY = BLOCKS.register("gray_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GRAY_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_LIGHT_GRAY = BLOCKS.register("light_gray_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.LIGHT_GRAY_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_CYAN = BLOCKS.register("cyan_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CYAN_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_PURPLE = BLOCKS.register("purple_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PURPLE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_BLUE = BLOCKS.register("blue_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BLUE_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_BROWN = BLOCKS.register("brown_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BROWN_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_GREEN = BLOCKS.register("green_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GREEN_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_RED = BLOCKS.register("red_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.RED_WOOL))); + public static final DeferredBlock TRUFFALO_TUFT_BLACK = BLOCKS.register("black_truffalo_tuft", + () -> new TruffaloTuftBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BLACK_WOOL))); public static final DeferredBlock DUCT_TAPE = BLOCKS.register("duct_tape", () -> new DuctTapeBlock(BlockBehaviour.Properties.of() .strength(0.2F) @@ -724,6 +842,16 @@ public final class AntarchyNeoforgeBlocks { (pos, state) -> new UpperBlockEntity(pos, state, AntarchyNeoforgeBlocks::upperBlockEntityType), UPPER.get() ).build(null)); + public static final DeferredHolder, BlockEntityType> PORTAL_GUN_PORTAL_MASTER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("portal_gun_portal_master", + () -> BlockEntityType.Builder.of( + (pos, state) -> new PortalGunPortalMasterBlockEntity(pos, state, AntarchyNeoforgeBlocks::portalGunPortalMasterBlockEntityType), + PORTAL_GUN_PORTAL_MASTER.get() + ).build(null)); + public static final DeferredHolder, BlockEntityType> PORTAL_GUN_PORTAL_BASE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("portal_gun_portal_base", + () -> BlockEntityType.Builder.of( + (pos, state) -> new PortalGunPortalBaseBlockEntity(pos, state, AntarchyNeoforgeBlocks::portalGunPortalBaseBlockEntityType), + PORTAL_GUN_PORTAL_BASE.get() + ).build(null)); private AntarchyNeoforgeBlocks() {} @@ -791,6 +919,14 @@ public final class AntarchyNeoforgeBlocks { return UPPER_BLOCK_ENTITY.get(); } + private static BlockEntityType portalGunPortalMasterBlockEntityType() { + return PORTAL_GUN_PORTAL_MASTER_BLOCK_ENTITY.get(); + } + + private static BlockEntityType portalGunPortalBaseBlockEntityType() { + return PORTAL_GUN_PORTAL_BASE_BLOCK_ENTITY.get(); + } + private static final class SimpleHorizontalFacingBlock extends HorizontalDirectionalBlock { private static final MapCodec CODEC = simpleCodec(SimpleHorizontalFacingBlock::new); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index b7ef9a84..66b6962b 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -20,6 +20,7 @@ import com.craisinlord.antarchy.content.entity.HushProjectileEntity; import com.craisinlord.antarchy.content.entity.CritterCageProjectileEntity; import com.craisinlord.antarchy.content.entity.WormHookProjectileEntity; import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; +import com.craisinlord.antarchy.content.entity.HoverboardEntity; import com.craisinlord.antarchy.content.entity.JerryEntity; import com.craisinlord.antarchy.content.entity.JumpyBugEntity; import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; @@ -34,6 +35,10 @@ import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; import com.craisinlord.antarchy.content.entity.NadirBoatEntity; import com.craisinlord.antarchy.content.entity.NadirChestBoatEntity; +import com.craisinlord.antarchy.content.entity.RoyalBoatEntity; +import com.craisinlord.antarchy.content.entity.RoyalChestBoatEntity; +import com.craisinlord.antarchy.content.entity.TruffaloBoatEntity; +import com.craisinlord.antarchy.content.entity.TruffaloChestBoatEntity; import com.craisinlord.antarchy.content.entity.PeachBoatEntity; import com.craisinlord.antarchy.content.entity.PeachChestBoatEntity; import com.craisinlord.antarchy.content.entity.ReverieEntity; @@ -71,6 +76,7 @@ import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity; import net.minecraft.core.registries.Registries; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobCategory; @@ -162,6 +168,35 @@ public final class AntarchyNeoforgeEntites { .clientTrackingRange(10) .updateInterval(10) .build("nadir_chest_boat")); + public static final DeferredHolder, EntityType> ROYAL_BOAT_ENTITY = ENTITY_TYPES.register("royal_boat", + () -> EntityType.Builder.of(RoyalBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("royal_boat")); + public static final DeferredHolder, EntityType> ROYAL_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("royal_chest_boat", + () -> EntityType.Builder.of(RoyalChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("royal_chest_boat")); + public static final DeferredHolder, EntityType> TRUFFALO_BOAT_ENTITY = ENTITY_TYPES.register("truffalo_boat", + () -> EntityType.Builder.of(TruffaloBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("truffalo_boat")); + public static final DeferredHolder, EntityType> TRUFFALO_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("truffalo_chest_boat", + () -> EntityType.Builder.of(TruffaloChestBoatEntity::new, MobCategory.MISC) + .sized(1.375F, 0.5625F) + .clientTrackingRange(10) + .updateInterval(10) + .build("truffalo_chest_boat")); + public static final DeferredHolder, EntityType> HOVERBOARD = ENTITY_TYPES.register("hoverboard", + () -> EntityType.Builder.of(HoverboardEntity::new, MobCategory.MISC) + .sized(1.5F, 0.6875F) + .clientTrackingRange(10) + .build("hoverboard")); public static final DeferredHolder, EntityType> MOLEVORE = ENTITY_TYPES.register("molevore", () -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER) .sized(1.95F, 1.1F) @@ -316,6 +351,12 @@ public final class AntarchyNeoforgeEntites { .clientTrackingRange(10) .updateInterval(1) .build("portal_gun_black_hole")); + public static final DeferredHolder, EntityType> PORTAL_GUN_PROJECTILE = ENTITY_TYPES.register("portal_gun_projectile", + () -> EntityType.Builder.of(PortalGunProjectileEntity::new, MobCategory.MISC) + .sized(0.25F, 0.25F) + .clientTrackingRange(8) + .updateInterval(1) + .build("portal_gun_projectile")); public static final DeferredHolder, EntityType> NIGHTMARE_BITE = ENTITY_TYPES.register("nightmare_bite", () -> EntityType.Builder.of(NightmareBiteEntity::new, MobCategory.MISC) .sized(2.5F, 2.0F) diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java index cebbad46..f074f93e 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java @@ -87,6 +87,7 @@ public class AntarchyNeoforgeEntityAttributes { 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()); + event.put(AntarchyNeoforgeEntites.HOVERBOARD.get(), com.craisinlord.antarchy.content.entity.HoverboardEntity.createAttributes().build()); } private static AttributeSupplier.Builder buildAntAttributes(double health, double speed, double attackDamage) { diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 0bf7637b..f725951b 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -24,6 +24,7 @@ import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; import com.craisinlord.antarchy.content.item.RainbowSugarItem; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; @@ -75,6 +76,11 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem NIGHTMARE_SCALE = ITEMS.registerSimpleItem("nightmare_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant()); + public static final DeferredItem MUSIC_DISC_UNDERSIDE = ITEMS.registerSimpleItem("music_disc_underside", + new Item.Properties().stacksTo(1).rarity(Rarity.RARE) + .jukeboxPlayable(ResourceKey.create(Registries.JUKEBOX_SONG, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "underside")))); + private static final DeferredHolder ULTIMATE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("ultimate", () -> new ArmorMaterial( createUltimateArmorDefense(), @@ -225,6 +231,40 @@ 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 HOVERBOARD = ITEMS.register("hoverboard", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), null, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_WHITE = ITEMS.register("hoverboard_white", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.WHITE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_ORANGE = ITEMS.register("hoverboard_orange", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.ORANGE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_MAGENTA = ITEMS.register("hoverboard_magenta", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.MAGENTA, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_LIGHT_BLUE = ITEMS.register("hoverboard_light_blue", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.LIGHT_BLUE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_YELLOW = ITEMS.register("hoverboard_yellow", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.YELLOW, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_LIME = ITEMS.register("hoverboard_lime", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.LIME, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_PINK = ITEMS.register("hoverboard_pink", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.PINK, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_GRAY = ITEMS.register("hoverboard_gray", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.GRAY, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_LIGHT_GRAY = ITEMS.register("hoverboard_light_gray", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.LIGHT_GRAY, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_CYAN = ITEMS.register("hoverboard_cyan", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.CYAN, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_PURPLE = ITEMS.register("hoverboard_purple", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.PURPLE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_BLUE = ITEMS.register("hoverboard_blue", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.BLUE, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_BROWN = ITEMS.register("hoverboard_brown", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.BROWN, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_GREEN = ITEMS.register("hoverboard_green", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.GREEN, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_RED = ITEMS.register("hoverboard_red", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.RED, new Item.Properties().stacksTo(1))); + public static final DeferredItem HOVERBOARD_BLACK = ITEMS.register("hoverboard_black", + () -> new HoverboardItem(AntarchyNeoforgeEntites.HOVERBOARD.get(), DyeColor.BLACK, 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", @@ -241,6 +281,68 @@ public final class AntarchyNeoforgeItems { () -> new NadirBoatOnlyItem(AntarchyNeoforgeEntites.NADIR_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); public static final DeferredItem NADIR_CHEST_BOAT = ITEMS.register("nadir_chest_boat", () -> new NadirChestBoatItem(AntarchyNeoforgeEntites.NADIR_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem ROYAL_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_LOG); + public static final DeferredItem ROYAL_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_WOOD); + public static final DeferredItem STRIPPED_ROYAL_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STRIPPED_ROYAL_LOG); + public static final DeferredItem STRIPPED_ROYAL_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STRIPPED_ROYAL_WOOD); + public static final DeferredItem ROYAL_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_PLANKS); + public static final DeferredItem ROYAL_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_STAIRS); + public static final DeferredItem ROYAL_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_SLAB); + public static final DeferredItem ROYAL_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_FENCE); + public static final DeferredItem ROYAL_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_FENCE_GATE); + public static final DeferredItem ROYAL_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_DOOR); + public static final DeferredItem ROYAL_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_TRAPDOOR); + public static final DeferredItem ROYAL_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_PRESSURE_PLATE); + public static final DeferredItem ROYAL_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_BUTTON); + public static final DeferredItem ROYAL_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_LEAVES); + public static final DeferredItem ROYAL_FLOWERING_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_FLOWERING_LEAVES); + public static final DeferredItem ROYAL_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ROYAL_SAPLING); + public static final DeferredItem ROYAL_SIGN_ITEM = ITEMS.register("royal_sign", + () -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyNeoforgeBlocks.ROYAL_SIGN.get(), AntarchyNeoforgeBlocks.ROYAL_WALL_SIGN.get())); + public static final DeferredItem ROYAL_HANGING_SIGN_ITEM = ITEMS.register("royal_hanging_sign", + () -> new net.minecraft.world.item.HangingSignItem(AntarchyNeoforgeBlocks.ROYAL_HANGING_SIGN.get(), AntarchyNeoforgeBlocks.ROYAL_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + public static final DeferredItem ROYAL_BOAT = ITEMS.register("royal_boat", + () -> new RoyalBoatOnlyItem(AntarchyNeoforgeEntites.ROYAL_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem ROYAL_CHEST_BOAT = ITEMS.register("royal_chest_boat", + () -> new RoyalChestBoatItem(AntarchyNeoforgeEntites.ROYAL_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem TRUFFALO_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_LOG); + public static final DeferredItem TRUFFALO_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_WOOD); + public static final DeferredItem STRIPPED_TRUFFALO_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STRIPPED_TRUFFALO_LOG); + public static final DeferredItem STRIPPED_TRUFFALO_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STRIPPED_TRUFFALO_WOOD); + public static final DeferredItem TRUFFALO_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_PLANKS); + public static final DeferredItem TRUFFALO_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_STAIRS); + public static final DeferredItem TRUFFALO_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_SLAB); + public static final DeferredItem TRUFFALO_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_FENCE); + public static final DeferredItem TRUFFALO_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_FENCE_GATE); + public static final DeferredItem TRUFFALO_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_DOOR); + public static final DeferredItem TRUFFALO_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TRAPDOOR); + public static final DeferredItem TRUFFALO_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_PRESSURE_PLATE); + public static final DeferredItem TRUFFALO_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_BUTTON); + public static final DeferredItem TRUFFALO_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_SAPLING); + public static final DeferredItem TRUFFALO_SIGN_ITEM = ITEMS.register("truffalo_sign", + () -> new SignItem(new Item.Properties().stacksTo(16), AntarchyNeoforgeBlocks.TRUFFALO_SIGN.get(), AntarchyNeoforgeBlocks.TRUFFALO_WALL_SIGN.get())); + public static final DeferredItem TRUFFALO_HANGING_SIGN_ITEM = ITEMS.register("truffalo_hanging_sign", + () -> new HangingSignItem(AntarchyNeoforgeBlocks.TRUFFALO_HANGING_SIGN.get(), AntarchyNeoforgeBlocks.TRUFFALO_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16))); + public static final DeferredItem TRUFFALO_BOAT = ITEMS.register("truffalo_boat", + () -> new TruffaloBoatOnlyItem(AntarchyNeoforgeEntites.TRUFFALO_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem TRUFFALO_CHEST_BOAT = ITEMS.register("truffalo_chest_boat", + () -> new TruffaloChestBoatItem(AntarchyNeoforgeEntites.TRUFFALO_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1))); + public static final DeferredItem TRUFFALO_TUFT_WHITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_WHITE); + public static final DeferredItem TRUFFALO_TUFT_ORANGE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_ORANGE); + public static final DeferredItem TRUFFALO_TUFT_MAGENTA_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_MAGENTA); + public static final DeferredItem TRUFFALO_TUFT_LIGHT_BLUE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_LIGHT_BLUE); + public static final DeferredItem TRUFFALO_TUFT_YELLOW_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_YELLOW); + public static final DeferredItem TRUFFALO_TUFT_LIME_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_LIME); + public static final DeferredItem TRUFFALO_TUFT_PINK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_PINK); + public static final DeferredItem TRUFFALO_TUFT_GRAY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_GRAY); + public static final DeferredItem TRUFFALO_TUFT_LIGHT_GRAY_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_LIGHT_GRAY); + public static final DeferredItem TRUFFALO_TUFT_CYAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_CYAN); + public static final DeferredItem TRUFFALO_TUFT_PURPLE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_PURPLE); + public static final DeferredItem TRUFFALO_TUFT_BLUE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_BLUE); + public static final DeferredItem TRUFFALO_TUFT_BROWN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_BROWN); + public static final DeferredItem TRUFFALO_TUFT_GREEN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_GREEN); + public static final DeferredItem TRUFFALO_TUFT_RED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_RED); + public static final DeferredItem TRUFFALO_TUFT_BLACK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TRUFFALO_TUFT_BLACK); public static final DeferredItem CRITTER_CAGE = ITEMS.register("critter_cage", () -> new CritterCageItem(new Item.Properties().stacksTo(16))); public static final DeferredItem DUPLICATOR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING); @@ -795,7 +897,14 @@ 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 PORTAL_GUN = ITEMS.register("portal_gun", - () -> new PortalGunItem(new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), AntarchyNeoforgeEntites.PORTAL_GUN_PORTAL, AntarchyNeoforgeEntites.PORTAL_GUN_BLACK_HOLE)); + () -> new PortalGunItem( + new Item.Properties().stacksTo(1).durability(256).rarity(Rarity.RARE), + AntarchyNeoforgeEntites.PORTAL_GUN_PORTAL, + AntarchyNeoforgeEntites.PORTAL_GUN_BLACK_HOLE, + AntarchyNeoforgeEntites.PORTAL_GUN_PROJECTILE, + AntarchyNeoforgeBlocks.PORTAL_GUN_PORTAL_MASTER, + AntarchyNeoforgeBlocks.PORTAL_GUN_PORTAL_BASE + )); // 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))); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index 08f4b53f..846a3476 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -29,6 +29,7 @@ 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.content.worldgen.truffalo.*; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluid; import com.mojang.serialization.MapCodec; import net.minecraft.advancements.critereon.EntitySubPredicate; @@ -242,6 +243,8 @@ public final class AntarchyNeoforgeMisc { () -> new PeachTreeFeature(PeachTreeConfiguration.CODEC)); public static final DeferredHolder, NadirTreeFeature> NADIR_TREE_FEATURE = FEATURES.register("nadir_tree", () -> new NadirTreeFeature(NadirTreeConfiguration.CODEC)); + public static final DeferredHolder, TruffaloTreeFeature> TRUFFALO_TREE_FEATURE = FEATURES.register("truffalo_tree", + () -> new TruffaloTreeFeature(TruffaloTreeConfiguration.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", diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java index 225c4c7c..b79c25e1 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java @@ -196,6 +196,7 @@ public final class AntarchyNeoforgeSounds { 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"); + public static final DeferredHolder MUSIC_DISC_UNDERSIDE = registerSoundEvent("music_disc_underside"); private AntarchyNeoforgeSounds() {}