From dbec69fbb4e46660890faac5cca6393f0a9d55c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1=20Fabi=C3=A1nek?= Date: Thu, 12 Oct 2023 20:09:05 +0200 Subject: [PATCH 1/6] wip --- blockbench/rascal/Rascal.bbmodel | 1 + blockbench/rascal/rascal.animation.json | 215 +++++++++ .../CompleteHideAndSeekGameCriterion.java | 71 +++ .../entity/animation/RascalAnimations.java | 303 ++++++++++++ .../context/AnimationContextTracker.java | 10 +- .../entity/model/AnimatedEntityModel.java | 9 + .../entity/model/RascalEntityModel.java | 93 ++++ .../entity/model/TuffGolemEntityModel.java | 11 - .../entity/renderer/RascalEntityRenderer.java | 25 + .../config/FriendsAndFoesConfig.java | 7 + .../friendsandfoes/entity/RascalEntity.java | 442 ++++++++++++++++++ .../entity/TuffGolemEntity.java | 17 +- .../entity/WildfireShieldDebrisEntity.java | 2 +- .../entity/ai/brain/RascalBrain.java | 170 +++++++ .../entity/ai/brain/WildfireBrain.java | 3 +- .../RascalFindInteractionTargetTask.java | 34 ++ .../task/rascal/RascalWaitForPlayerTask.java | 197 ++++++++ .../entity/animation/AnimatedEntity.java | 22 +- .../entity/pose/RascalEntityPose.java | 22 + .../init/FriendAndFoesEntityRenderer.java | 1 + .../init/FriendsAndFoesActivities.java | 2 + .../init/FriendsAndFoesCriteria.java | 3 + .../init/FriendsAndFoesEntityModelLayer.java | 3 + .../init/FriendsAndFoesEntityTypes.java | 8 + .../init/FriendsAndFoesItems.java | 2 + .../init/FriendsAndFoesMemoryModuleTypes.java | 2 + .../init/FriendsAndFoesSoundEvents.java | 14 + .../mixin}/AddCustomEntityPoseMixin.java | 40 +- .../mixin/BundleItemAccessor.java | 16 + .../mixin/ChunkRegionAccessor.java | 13 + .../mixin/StrongholdGeneratorMixin.java | 2 +- .../platform/CustomSpawnGroup.java | 24 +- .../tag/FriendsAndFoesTags.java | 1 + .../world/spawner/IceologerSpawner.java | 2 +- .../assets/friendsandfoes/lang/en_us.json | 14 +- .../models/item/ rascal_spawn_egg.json | 3 + .../assets/friendsandfoes/sounds.json | 59 ++- .../friendsandfoes-common.mixins.json | 2 + .../fabric/AddCustomEntityPoseMixin.java | 74 --- .../main/resources/friendsandfoes.mixins.json | 1 - .../main/resources/friendsandfoes.mixins.json | 1 - 41 files changed, 1811 insertions(+), 130 deletions(-) create mode 100644 blockbench/rascal/Rascal.bbmodel create mode 100644 blockbench/rascal/rascal.animation.json create mode 100644 common/src/main/java/com/faboslav/friendsandfoes/advancements/criterion/CompleteHideAndSeekGameCriterion.java create mode 100644 common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/animation/RascalAnimations.java create mode 100644 common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/RascalEntityModel.java create mode 100644 common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/renderer/RascalEntityRenderer.java create mode 100644 common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java create mode 100644 common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/RascalBrain.java create mode 100644 common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalFindInteractionTargetTask.java create mode 100644 common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalWaitForPlayerTask.java create mode 100644 common/src/main/java/com/faboslav/friendsandfoes/entity/pose/RascalEntityPose.java rename {forge/src/main/java/com/faboslav/friendsandfoes/mixin/forge => common/src/main/java/com/faboslav/friendsandfoes/mixin}/AddCustomEntityPoseMixin.java (65%) create mode 100644 common/src/main/java/com/faboslav/friendsandfoes/mixin/BundleItemAccessor.java create mode 100644 common/src/main/java/com/faboslav/friendsandfoes/mixin/ChunkRegionAccessor.java create mode 100644 common/src/main/resources/assets/friendsandfoes/models/item/ rascal_spawn_egg.json delete mode 100644 fabric/src/main/java/com/faboslav/friendsandfoes/mixin/fabric/AddCustomEntityPoseMixin.java diff --git a/blockbench/rascal/Rascal.bbmodel b/blockbench/rascal/Rascal.bbmodel new file mode 100644 index 000000000..b684889b7 --- /dev/null +++ b/blockbench/rascal/Rascal.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"animated_entity_model","box_uv":true},"name":"Rascal","model_identifier":"rascal - Converted","visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"head","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,11,-10],"to":[4,17,-4],"autouv":0,"color":2,"origin":[0,0,0],"uv_offset":[0,52],"faces":{"north":{"uv":[6,58,14,64],"texture":0},"east":{"uv":[0,58,6,64],"texture":0},"south":{"uv":[20,58,28,64],"texture":0},"west":{"uv":[14,58,20,64],"texture":0},"up":{"uv":[14,58,6,52],"texture":0},"down":{"uv":[22,52,14,58],"texture":0}},"type":"cube","uuid":"5610797e-c25a-915d-ebd0-f98c266bd6b7"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,5,-4],"to":[6,20,4],"autouv":0,"color":2,"inflate":-0.01,"origin":[0,0,0],"faces":{"north":{"uv":[8,8,20,23],"texture":0},"east":{"uv":[0,8,8,23],"texture":0},"south":{"uv":[28,8,40,23],"texture":0},"west":{"uv":[20,8,28,23],"texture":0},"up":{"uv":[20,8,8,0],"texture":0},"down":{"uv":[32,0,20,8],"texture":0}},"type":"cube","uuid":"a1df3e93-d628-d164-4ae3-0d185d1c1fbb"},{"name":"rightArm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-9,5,-2],"to":[-6,15,2],"autouv":0,"color":2,"origin":[0,0,0],"uv_offset":[50,28],"faces":{"north":{"uv":[54,32,57,42],"texture":0},"east":{"uv":[50,32,54,42],"texture":0},"south":{"uv":[61,32,64,42],"texture":0},"west":{"uv":[57,32,61,42],"texture":0},"up":{"uv":[57,32,54,28],"texture":0},"down":{"uv":[60,28,57,32],"texture":0}},"type":"cube","uuid":"179fffc8-c3cf-90a5-5543-4ccb1bffc903"},{"name":"scarf","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-4,9,-10],"to":[4,18,-4],"autouv":0,"color":2,"inflate":0.5,"origin":[0,0,0],"uv_offset":[28,36],"faces":{"north":{"uv":[34,42,42,51],"texture":0},"east":{"uv":[28,42,34,51],"texture":0},"south":{"uv":[48,42,56,51],"texture":0},"west":{"uv":[42,42,48,51],"texture":0},"up":{"uv":[42,42,34,36],"texture":0},"down":{"uv":[50,36,42,42],"texture":0}},"type":"cube","uuid":"bbb571c5-d309-7dd3-bdcc-71b68f8e646f"},{"name":"rightLeg","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,0,-2],"to":[-1,6,2],"autouv":0,"color":2,"origin":[0,0,0],"uv_offset":[28,54],"faces":{"north":{"uv":[32,58,36,64],"texture":0},"east":{"uv":[28,58,32,64],"texture":0},"south":{"uv":[40,58,44,64],"texture":0},"west":{"uv":[36,58,40,64],"texture":0},"up":{"uv":[36,58,32,54],"texture":0},"down":{"uv":[40,54,36,58],"texture":0}},"type":"cube","uuid":"548a108b-1e45-1f74-efd6-bebd0ed5f3b7"},{"name":"bag","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-7,8,4],"to":[1,17,10],"autouv":0,"color":2,"origin":[0,0,0],"uv_offset":[0,36],"faces":{"north":{"uv":[6,42,14,51],"texture":0},"east":{"uv":[0,42,6,51],"texture":0},"south":{"uv":[20,42,28,51],"texture":0},"west":{"uv":[14,42,20,51],"texture":0},"up":{"uv":[14,42,6,36],"texture":0},"down":{"uv":[22,36,14,42],"texture":0}},"type":"cube","uuid":"5a216366-ff71-da02-7427-6cc984f4c655"},{"name":"cloth","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-6,3,-4],"to":[6,8,4],"autouv":0,"color":2,"inflate":-0.5,"origin":[0,0,0],"uv_offset":[0,23],"faces":{"north":{"uv":[8,31,20,36],"texture":0},"east":{"uv":[0,31,8,36],"texture":0},"south":{"uv":[28,31,40,36],"texture":0},"west":{"uv":[20,31,28,36],"texture":0},"up":{"uv":[20,31,8,23],"texture":0},"down":{"uv":[32,23,20,31],"texture":0}},"type":"cube","uuid":"bc1d7d9f-9e05-85f9-6464-7bbd7a2c3ea3"},{"name":"stripe","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[-5,5,-4],"to":[-3,20,4],"autouv":0,"color":2,"inflate":0.5,"origin":[0,0,0],"uv_offset":[44,0],"faces":{"north":{"uv":[52,8,54,23],"texture":0},"east":{"uv":[44,8,52,23],"texture":0},"south":{"uv":[62,8,64,23],"texture":0},"west":{"uv":[54,8,62,23],"texture":0},"up":{"uv":[54,8,52,0],"texture":0},"down":{"uv":[56,0,54,8],"texture":0}},"type":"cube","uuid":"950c57f0-4b76-bb9a-919b-156a5e446612"},{"name":"leftArm","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[6,5,-2],"to":[9,15,2],"autouv":0,"color":2,"mirror_uv":true,"origin":[0,0,0],"uv_offset":[50,28],"faces":{"north":{"uv":[57,32,54,42],"texture":0},"east":{"uv":[61,32,57,42],"texture":0},"south":{"uv":[64,32,61,42],"texture":0},"west":{"uv":[54,32,50,42],"texture":0},"up":{"uv":[54,32,57,28],"texture":0},"down":{"uv":[57,28,60,32],"texture":0}},"type":"cube","uuid":"cf4e7090-c4a4-3bb1-5445-12df476a2ce7"},{"name":"leftLeg","box_uv":true,"rescale":false,"locked":false,"render_order":"default","allow_mirror_modeling":true,"from":[1,0,-2],"to":[5,6,2],"autouv":0,"color":2,"mirror_uv":true,"origin":[0,0,0],"uv_offset":[28,54],"faces":{"north":{"uv":[36,58,32,64],"texture":0},"east":{"uv":[40,58,36,64],"texture":0},"south":{"uv":[44,58,40,64],"texture":0},"west":{"uv":[32,58,28,64],"texture":0},"up":{"uv":[32,58,36,54],"texture":0},"down":{"uv":[36,54,40,58],"texture":0}},"type":"cube","uuid":"13c935a5-2ec9-17ad-278b-f9863ee5654f"}],"outliner":[{"name":"head","origin":[0,15,-5],"color":0,"uuid":"133fc098-1dae-95b0-7cde-23c6f350c6c8","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5610797e-c25a-915d-ebd0-f98c266bd6b7","bbb571c5-d309-7dd3-bdcc-71b68f8e646f"]},{"name":"leftArm","origin":[6,13,0],"color":0,"uuid":"a0b7942c-2039-3008-d5d4-71874ab3159d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["cf4e7090-c4a4-3bb1-5445-12df476a2ce7"]},{"name":"rightArm","origin":[-6,13,0],"color":0,"uuid":"9325e427-5b09-6ca2-085d-c56aa11d6c95","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["179fffc8-c3cf-90a5-5543-4ccb1bffc903"]},{"name":"leftLeg","origin":[3,6,0],"color":0,"uuid":"616ae677-c704-3100-eb8c-5f389da56bab","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["13c935a5-2ec9-17ad-278b-f9863ee5654f"]},{"name":"rightLeg","origin":[-3,6,0],"color":0,"uuid":"e6ebbda9-64b3-bc6f-11c8-a889976b8bd8","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["548a108b-1e45-1f74-efd6-bebd0ed5f3b7"]},{"name":"bag","origin":[-3,16.5,4.5],"color":0,"uuid":"9f44f743-c317-b6a7-404d-9d80547e4fdb","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["5a216366-ff71-da02-7427-6cc984f4c655"]},{"name":"body","origin":[0,20,0],"color":0,"uuid":"ba135b89-9ee8-7155-efbf-7cd095edee53","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["a1df3e93-d628-d164-4ae3-0d185d1c1fbb","bc1d7d9f-9e05-85f9-6464-7bbd7a2c3ea3","950c57f0-4b76-bb9a-919b-156a5e446612"]}],"textures":[{"path":"/Users/alesfabianek/Projects/Minecraft/friends-and-foes/common/src/main/resources/assets/friendsandfoes/textures/entity/rascal/rascal.png","name":"rascal.png","folder":"entity/rascal","namespace":"friendsandfoes","id":"2","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"857975cb-cca7-d368-12c5-aa7266647fa0","relative_path":"../../../common/src/main/resources/assets/friendsandfoes/textures/entity/rascal/rascal.png","source":"data:image/png;base64,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"}],"animations":[{"uuid":"bf367973-9c39-500a-196f-41619e52a6bb","name":"nod","loop":"once","override":false,"length":0.4167,"snapping":12,"selected":false,"saved":true,"path":"/Users/alesfabianek/Downloads/rascal.animation.json","anim_time_update":"","blend_weight":"","start_delay":"","loop_delay":"","animators":{"133fc098-1dae-95b0-7cde-23c6f350c6c8":{"name":"head","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"68028f48-a178-14f8-c0eb-bf259bae56b0","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":15,"y":0,"z":0}],"uuid":"22970608-ef03-ea86-c1b4-fd10176bbad8","time":0.0833,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":20,"y":0,"z":0}],"uuid":"62bceae8-5e5c-a731-ed09-89c34a8d02e6","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":10,"y":0,"z":0}],"uuid":"feab9ad1-27a2-b6ad-c2af-2f7f4ae6df5e","time":0.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"b625a124-ccfc-830a-c361-6cabf7e0f4f8","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"d4ff9c9f-cbd6-0ac1-f743-48f5c423ab3d","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":2,"z":0}],"uuid":"3d68b782-37d0-3a4f-6842-7fd098e016e3","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"079ac161-dc3f-1219-6439-4b1dc0fbfb70","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]}]},"a0b7942c-2039-3008-d5d4-71874ab3159d":{"name":"leftArm","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"7443b36e-0fa5-b463-172f-23fdaef86121","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-15,"y":0,"z":0}],"uuid":"8edb7b07-3c44-a4c5-e566-849d21bb09eb","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-25,"y":0,"z":0}],"uuid":"b2f106ad-5a40-af54-1af9-be37b4edf2c2","time":0.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":5,"y":0,"z":0}],"uuid":"1a10873c-aecc-c6a0-bca6-fe90f4cdd145","time":0.3333,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"6917799d-823e-3f2d-e448-cc375227ff1b","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"3b3fc7c3-4f14-ae3d-4309-58b589436897","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":2,"z":0}],"uuid":"3145f830-5d86-b4f9-f616-93c964f17867","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"c19c59d2-a9ef-acd3-cf0e-fe6be92825ef","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]}]},"9325e427-5b09-6ca2-085d-c56aa11d6c95":{"name":"rightArm","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"258412cf-45da-0013-ad40-72b810439816","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":15,"y":0,"z":0}],"uuid":"14e62eb8-71e6-09c5-5b2a-4fb82f827868","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":25,"y":0,"z":0}],"uuid":"2d85af2f-719b-b030-bbf1-9f5772ce19d1","time":0.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":5,"y":0,"z":0}],"uuid":"17802068-56cd-2ead-3739-f2e2a4937e46","time":0.3333,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"9a5c4666-f2d3-1fef-b832-b59f00d213ba","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"15c49bee-d5bf-440e-d7cb-ebf1fd9b047e","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":2,"z":0}],"uuid":"86a0f4b5-3f05-57a7-e2bc-1afae5c689c8","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"d994ed99-4178-b5df-e0c7-f4f86c98a814","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]}]},"616ae677-c704-3100-eb8c-5f389da56bab":{"name":"leftLeg","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"e0fb010d-3190-1bfd-3c3c-1ddb974411b3","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":15,"y":0,"z":0}],"uuid":"54fa12c1-8ff4-103f-12d0-bc5f7f4232d8","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":20,"y":0,"z":0}],"uuid":"a08c38e3-7335-2277-8904-759d3d31b582","time":0.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-5,"y":0,"z":0}],"uuid":"ef99149c-46e5-875f-4d96-09f8526042fd","time":0.3333,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"688fcebb-0a6a-b5fe-201b-38bfe76ddda2","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"ac707ced-690a-2fa1-c0c6-2abddd4bee0f","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":2,"z":0}],"uuid":"597f296b-0077-a9f4-a098-9c27352d97cd","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"93a1388a-e424-f8bd-5054-eac62000e769","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]}]},"e6ebbda9-64b3-bc6f-11c8-a889976b8bd8":{"name":"rightLeg","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"74abd9e5-0153-9680-2cd8-30122acff1bf","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-15,"y":0,"z":0}],"uuid":"775fd33a-ff36-2fe3-41e1-7576e35617f5","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-20,"y":0,"z":0}],"uuid":"df2a9446-d289-1409-b614-a5e3824f4901","time":0.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":5,"y":0,"z":0}],"uuid":"26722351-d8b0-0dbe-24a2-707b608520ed","time":0.3333,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"6eda2e60-3fa9-6843-1e9e-a9c8c94ac152","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"533a7380-91b5-1866-b4de-537cf49caa22","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":2,"z":0}],"uuid":"c9c7491f-2940-9cff-51b7-f3f8a5c23183","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"2e87dab6-89db-cc98-f711-c33d4434bc51","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]}]},"9f44f743-c317-b6a7-404d-9d80547e4fdb":{"name":"bag","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"e2f72faf-db93-c0a0-06f0-50acbfd89f7e","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":10,"y":0,"z":0}],"uuid":"ecc16605-b850-408f-565d-e9aeb775f217","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":15,"y":0,"z":0}],"uuid":"d2a8b668-0103-b818-f347-789f05dabfb1","time":0.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-5,"y":0,"z":0}],"uuid":"fd3248c8-56b4-8769-953b-247b5ee358fe","time":0.3333,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"50bcaaa6-204e-a3aa-4aea-d47b55699cc7","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"492e2754-deb7-d08f-134e-d70259dab0d1","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":2,"z":0}],"uuid":"b3844fea-4d9e-b83b-25f0-feee279ef86b","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"2b00b14d-27a7-c131-8bf2-f45225967eb3","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]}]},"ba135b89-9ee8-7155-efbf-7cd095edee53":{"name":"body","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"63a39535-7992-ffb9-b413-9fdefc43b199","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-1,"y":0,"z":0}],"uuid":"adc19087-028d-13ae-627c-ef749b5b4fef","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":1,"y":0,"z":0}],"uuid":"6d9f4daf-ea8d-e10d-ba96-f0358b1d0fd8","time":0.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"feed89b5-6ab7-3500-07de-cb48fffa6067","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"a26179a9-17b9-e884-43d7-fd7b29958fb9","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":2,"z":0}],"uuid":"130c99a6-ad72-0883-4d49-d1b9fde1ad6c","time":0.1667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"857416d2-be89-963f-e3fc-d552f20047b7","time":0.4167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]}]}}},{"uuid":"bcc26bb9-6121-af56-f187-d95f289fd936","name":"give_reward","loop":"once","override":false,"length":1.5416666666666667,"snapping":24,"selected":true,"saved":true,"path":"/Users/alesfabianek/Downloads/rascal.animation.json","anim_time_update":"","blend_weight":"","start_delay":"","loop_delay":"","animators":{"133fc098-1dae-95b0-7cde-23c6f350c6c8":{"name":"head","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"49e58ef7-060e-09b5-3162-1e3b38fe5c62","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-7.5,"y":-50,"z":0}],"uuid":"8173b1e3-6850-3610-5087-f9391419bad4","time":0.375,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0],"easing":"linear"},{"channel":"rotation","data_points":[{"x":-7.5,"y":-40,"z":0}],"uuid":"f117fe51-5737-d098-376f-887fb96dc92d","time":0.4583,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"63e21710-b690-14f4-d808-ed11ddbfaef3","time":0.6667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":15,"y":0,"z":0}],"uuid":"5a846fcc-691d-1cd3-6540-6b0f2fda6c71","time":0.8333,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":15,"y":0,"z":0}],"uuid":"2ca86ac1-a646-27a8-d03a-9cc329d1b71f","time":0.9583,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"5f617e2c-4daa-0c4b-38f8-c544e0c37b91","time":1.0833,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"a48a6fbd-744a-1665-eee2-d5ed59790afb","time":1.5416666666666667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"cf6f312a-8336-20fa-13a6-afb684afd1e0","time":1.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]}]},"9325e427-5b09-6ca2-085d-c56aa11d6c95":{"name":"rightArm","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"a308f72c-d6be-228c-5ad8-f8b511f0134f","time":0,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-37.5,"y":0,"z":-20}],"uuid":"96e94fb3-8315-613b-e83e-bb50bfe48740","time":0.125,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-170,"y":0,"z":-20}],"uuid":"c433ea30-db65-356b-4b91-cde759f2183f","time":0.4583,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0],"easing":"easeInElastic"},{"channel":"rotation","data_points":[{"x":-170,"y":0,"z":-20}],"uuid":"ea446466-bf78-58ff-07dd-5c0b0845d7ae","time":0.5417,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0],"easing":"easeInElastic"},{"channel":"rotation","data_points":[{"x":-60,"y":0,"z":0}],"uuid":"82ef740b-7149-e41e-1a58-c4365d81599a","time":0.625,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-60,"y":20,"z":0}],"uuid":"58a5aa14-66b4-7f9a-64c8-2846495b34ec","time":0.75,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-60,"y":20,"z":0}],"uuid":"7cee4cd4-1dd6-ae95-7f0d-7fa24f96f1b6","time":1.0833,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"58719358-1807-6de2-7ea6-181a78595c84","time":1.5416666666666667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-60,"y":20,"z":0}],"uuid":"9f29bdf1-aabd-ef78-66c5-520570c16749","time":1.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"94e91bec-494a-31d2-b6c9-b2da81617a0a","time":0.625,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":-2,"z":-1}],"uuid":"3586756f-5f5e-b2a2-ee56-850d4a868eed","time":0.75,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":-2,"z":-1}],"uuid":"86061ca1-41f6-90f5-7c60-a2adaa80ebd4","time":1.0833,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"431e78a0-5fec-34ad-cfbc-a5994edd89df","time":1.5416666666666667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":-2,"z":-1}],"uuid":"639bc6db-a3c6-a813-473f-3fa5a2e2636e","time":1.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]}]},"9f44f743-c317-b6a7-404d-9d80547e4fdb":{"name":"bag","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"f6e6d089-b248-221d-7df0-096b7ebc4bf1","time":0.4583,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":5,"y":0,"z":0}],"uuid":"756e21b7-0366-2a50-044d-aecf84094338","time":0.5417,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":90,"z":0}],"uuid":"81cd931d-c61d-b78d-7489-9a16f8792c0d","time":0.625,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-30,"y":180,"z":0}],"uuid":"26521ef8-c3f3-a678-6e04-7f38d9d226b6","time":0.75,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-30,"y":180,"z":0}],"uuid":"18e1dcd5-4758-36bb-504f-aa929f5809a5","time":0.8333,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-30,"y":180,"z":0}],"uuid":"c6d41636-1b14-71c6-7330-982d4997b7a8","time":1.0833,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":90,"z":0}],"uuid":"f899f04a-93b5-c991-486f-e344a0c66b9e","time":1.375,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"8f43eabe-5cc0-fd8a-b527-efca9340afba","time":1.5416666666666667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":5,"y":0,"z":0}],"uuid":"964e7955-dfd3-e357-db7d-0e7862beaa4c","time":1.4583333333333333,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-30,"y":180,"z":0}],"uuid":"84b19f0f-3e27-9e68-6214-2b7c1c2a10cd","time":1.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"9671e34b-219e-9348-ed57-210eb8f32e73","time":0.4583,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":7,"y":0,"z":-6}],"uuid":"c52be187-6a5e-157e-a9e4-4edd37e4b41e","time":0.625,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":-3,"y":-7,"z":-12}],"uuid":"60788298-e846-1906-f9aa-6849c6ec9104","time":0.75,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":-3,"y":-7,"z":-12}],"uuid":"ab97aa43-f7bf-ca9f-cccb-2624003c9bad","time":1.0833,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":7,"y":0,"z":-6}],"uuid":"ce485e6f-73e9-caa3-81b6-0051e38b30e2","time":1.375,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"dcec27b5-fabd-256b-71a5-52004bfd6f56","time":1.5416666666666667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":-3,"y":-7,"z":-12}],"uuid":"21ff6a1c-dd05-b2b7-a956-d213e0c8e6f9","time":1.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]}]},"a0b7942c-2039-3008-d5d4-71874ab3159d":{"name":"leftArm","type":"bone","keyframes":[{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"31a52416-5b8b-2ff8-1c6c-cb9b7ffe3261","time":0.75,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-52.5,"y":0,"z":0}],"uuid":"0a82a540-e987-a54a-fc3c-831723f98629","time":0.8333,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-65,"y":-30,"z":0}],"uuid":"f7e9b8a2-9cf6-2586-1a47-5ac67bcb6126","time":0.9167,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-90,"y":0,"z":0}],"uuid":"9b9a0092-aaa6-2d7f-ac83-dc6ad98bf6ea","time":1.0833,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":0,"y":0,"z":0}],"uuid":"8ab3e61b-3787-0e68-cfa9-3cdcc7fa4121","time":1.5416666666666667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"rotation","data_points":[{"x":-90,"y":0,"z":0}],"uuid":"631fe700-be88-50aa-389f-102ba431cf21","time":1.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"dc4444ff-5e3a-06b8-c9c3-e99266b06cd5","time":0.4583,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":-0.25,"z":0}],"uuid":"4a4c2f63-0435-a266-ab4b-8e619b9a1198","time":0.5833,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0],"easing":"linear"},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"38ff154f-0a7b-fa1e-afa3-6510c45f4ead","time":0.6667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"27aa9190-9d64-be7d-0f3c-d8b165314435","time":0.75,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":-2,"z":-1}],"uuid":"94718078-eff9-6604-07f8-cbb0446483b6","time":0.8333,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"b3abc752-d378-2b06-5877-43d8754b8056","time":1.5416666666666667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":-2,"z":-1}],"uuid":"b625a61b-a63f-f9f0-e593-3dd1783ead2d","time":1.25,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]}]},"ba135b89-9ee8-7155-efbf-7cd095edee53":{"name":"body","type":"bone","keyframes":[{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"d92ad28c-4b83-fd20-b899-cfd457b112d9","time":0.4583,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":-0.25,"z":0}],"uuid":"d00881fe-1a7e-4859-da9c-28794c53a1ff","time":0.5833,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0],"easing":"linear"},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"f3a06a76-cbe6-20ab-d8f3-69d9fc46db37","time":0.6667,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"1de576d2-593a-16fd-8644-1ca2e815fb31","time":1.0833,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]},{"channel":"position","data_points":[{"x":0,"y":0,"z":0}],"uuid":"768ff7cb-2fbf-bfd8-52d9-b737bb907a59","time":1.5,"color":-1,"interpolation":"linear","bezier_linked":true,"bezier_left_time":[-0.1,-0.1,-0.1],"bezier_left_value":[0,0,0],"bezier_right_time":[0.1,0.1,0.1],"bezier_right_value":[0,0,0]}]}}}],"reference_images":[{"name":"Pasted","scope":"project","position":[960,0],"size":[653,653],"source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAE9klEQVR4nO3ZX0hbVxwH8K+ayDVktFu1mrlla5W1021SnEwRJsLcKHYrA4sbG2WFzYe+lRYGHfVBqE/t6x5a8WFI61Bpq+2EtUz2IGmRTtSl3YppZ6qN0TgFQ3JX0509pPc2N//8l+6e0u8HxHvPOffm5Pzu75x7bwAiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjJbltkdyKTaN14S6eqH7/wt3fe1mN2B1bTUO9MOqsY9E8T+t2yrNROyBUHqAGiD/+2R99O2O3jsJ33wJxez4Z4JJm1XXmwHJAuC1AEAgC/278b03blV200uZgOIZkL74XcBALfuTBnaHLl8D5WKPfOd3ARTr4Scxro1TS8am88DZVutoUxdGAYAfL7lSQAA4MsPChKO1wLADMCTwT/xUZOh/OTUbXz32pspjzs5dRtbxxdQXL4LADDjBpbe2YbzQ/16EMbtNnRdm08aBNmYOgXV1tXjF3VB33f551BTuN1QFsvln4NY8mPRCYR/HtTLhTNiaBdylGDc59GDEB+MVHdLZmSGNGvA8K9D0f9/uFFbV79qe7XGmbIuqygf8HkAAF3X5vWMAKILcemL/yYcc+n30Ea6vWnSBKC2rl7PgEzQskAzbrcBavDxGiHPQixNALQMGB3qN5Tv+ezrDZ8z5Cgx7FsDq99N/d9MD8BodwcAIPYRqqmxRd/u7T6jbysAwnveAwCI2QCAx9PNMyzb7A4I1YGmxhZc7ByEUB0QqiOhXqgOXOwcTH78bAB5ozewkuLqtvk8+p81f3t0KpKIaRlg83kw2u0BEB3wl191ovTDvQCA6soqvd3ockSvB4C80Rv61KJd/eGifFiuDiT9DC1jNGI2gPM+j37LajbTArD823QWANjLHKK6sgoP7ntx+qsDCe20sgf3vTjVehZHj7cie3c5xJI/7flTDb5sTF8DAKD09Vc23c5ir8A5PwBLIRSXF6fazxrqj7V9o2dOyFEiTRZIEYB4vtbv9W1H2+FV2ysuLy6d60xZ39V3IaFsJTAHbCnaWAczyPR3IoozV1jsFYgEx9bU3mKvwD97q/QpaD2D33vlDEKOElgnXDhYYhx890zw+X0SDu+wweZLfABbCczBmm8sF2ri8ZN/Ta/5s6wTLgDAD57Z9XXyKTE9AKr3YZYClwi9XQNbzJOrJv5hKu/exl8ZCNUB1TttetbHkqYzijM36QuySMPHCWXxt5wWewVOt7elPPf1myPo6RtAJDgG1ftQmu8MSJABmtiBsZdVibzinVAXhvFoa2FC20cHjK8nLIMjac/d0zeA8A4brBMZ6mwGSROAePuqy9F7ZVjfV4b6odZ/AgAQS35kxQXm6PHWlOfKUnwASlLWm0naAMRbCcwhp6dD39eyIKenAxEYs0Is+Q3TlFXJzBvWp0HqAMQO+gu7PtXLl/+8YCiP3ddY7BUAgEhwLHo3JeGbUECiRTiWvazKsCDnFe9c1/HhmbsJZTIuwICkGRC8NWJYkIHoVa/Rrvr4rNDqNNrDnZYNtAGKM1cozlxR0NAsDp1oE9p+7HaqskMn2kRBQ7O+b/Z3SUa6lEyloKFZ7KsuT1p3+bob6ermr/4o7feUcgpKJfZ3AiD6gLWWOpmZ/z72OfdMBUD7PSDZ7wLp6mQm7dwYr6ChecOLqMxrwH8ii9KT6rax3QAAAABJRU5ErkJggg=="}],"geckoSettings":{"formatVersion":2,"modSDK":"Forge 1.12 - 1.16","objectType":"OBJ_TYPE_ENTITY","entityType":"Entity","javaPackage":"com.example.mod","animFileNamespace":"MODID","animFilePath":"animations/ANIMATIONFILE.json"}} \ No newline at end of file diff --git a/blockbench/rascal/rascal.animation.json b/blockbench/rascal/rascal.animation.json new file mode 100644 index 000000000..f8dde1993 --- /dev/null +++ b/blockbench/rascal/rascal.animation.json @@ -0,0 +1,215 @@ +{ + "format_version": "1.8.0", + "animations": { + "give_reward": { + "animation_length": 1.54167, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "vector": [-7.5, -50, 0], + "easing": "linear" + }, + "0.4583": { + "vector": [-7.5, -40, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [15, 0, 0] + }, + "0.9583": { + "vector": [15, 0, 0] + }, + "1.0833": { + "vector": [0, 0, 0] + }, + "1.25": { + "vector": [0, 0, 0] + }, + "1.5417": { + "vector": [0, 0, 0] + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-37.5, 0, -20] + }, + "0.4583": { + "vector": [-170, 0, -20], + "easing": "easeInElastic" + }, + "0.5417": { + "vector": [-170, 0, -20], + "easing": "easeInElastic" + }, + "0.625": { + "vector": [-60, 0, 0] + }, + "0.75": { + "vector": [-60, 20, 0] + }, + "1.0833": { + "vector": [-60, 20, 0] + }, + "1.25": { + "vector": [-60, 20, 0] + }, + "1.5417": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.625": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, -2, -1] + }, + "1.0833": { + "vector": [0, -2, -1] + }, + "1.25": { + "vector": [0, -2, -1] + }, + "1.5417": { + "vector": [0, 0, 0] + } + } + }, + "bag": { + "rotation": { + "0.4583": { + "vector": [0, 0, 0] + }, + "0.5417": { + "vector": [5, 0, 0] + }, + "0.625": { + "vector": [0, 90, 0] + }, + "0.75": { + "vector": [-30, 180, 0] + }, + "0.8333": { + "vector": [-30, 180, 0] + }, + "1.0833": { + "vector": [-30, 180, 0] + }, + "1.25": { + "vector": [-30, 180, 0] + }, + "1.375": { + "vector": [0, 90, 0] + }, + "1.4583": { + "vector": [5, 0, 0] + }, + "1.5417": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.4583": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [7, 0, -6] + }, + "0.75": { + "vector": [-3, -7, -12] + }, + "1.0833": { + "vector": [-3, -7, -12] + }, + "1.25": { + "vector": [-3, -7, -12] + }, + "1.375": { + "vector": [7, 0, -6] + }, + "1.5417": { + "vector": [0, 0, 0] + } + } + }, + "leftArm": { + "rotation": { + "0.75": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [-52.5, 0, 0] + }, + "0.9167": { + "vector": [-65, -30, 0] + }, + "1.0833": { + "vector": [-90, 0, 0] + }, + "1.25": { + "vector": [-90, 0, 0] + }, + "1.5417": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.4583": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [0, -0.25, 0], + "easing": "linear" + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [0, -2, -1] + }, + "1.25": { + "vector": [0, -2, -1] + }, + "1.5417": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "position": { + "0.4583": { + "vector": [0, 0, 0] + }, + "0.5833": { + "vector": [0, -0.25, 0], + "easing": "linear" + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "1.0833": { + "vector": [0, 0, 0] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/advancements/criterion/CompleteHideAndSeekGameCriterion.java b/common/src/main/java/com/faboslav/friendsandfoes/advancements/criterion/CompleteHideAndSeekGameCriterion.java new file mode 100644 index 000000000..ae406ae1a --- /dev/null +++ b/common/src/main/java/com/faboslav/friendsandfoes/advancements/criterion/CompleteHideAndSeekGameCriterion.java @@ -0,0 +1,71 @@ +package com.faboslav.friendsandfoes.advancements.criterion; + +import com.faboslav.friendsandfoes.FriendsAndFoes; +import com.faboslav.friendsandfoes.entity.RascalEntity; +import com.google.gson.JsonObject; +import net.minecraft.advancement.criterion.AbstractCriterion; +import net.minecraft.advancement.criterion.AbstractCriterionConditions; +import net.minecraft.loot.context.LootContext; +import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; +import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; +import net.minecraft.predicate.entity.EntityPredicate; +import net.minecraft.predicate.entity.LootContextPredicate; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.Identifier; + +public final class CompleteHideAndSeekGameCriterion extends AbstractCriterion +{ + static final Identifier ID = FriendsAndFoes.makeID("complete_hide_and_seek_game"); + + public CompleteHideAndSeekGameCriterion() { + } + + public Identifier getId() { + return ID; + } + + public CompleteHideAndSeekGameCriterion.Conditions conditionsFromJson( + JsonObject jsonObject, + LootContextPredicate extended, + AdvancementEntityPredicateDeserializer advancementEntityPredicateDeserializer + ) { + LootContextPredicate extended2 = EntityPredicate.contextPredicateFromJson(jsonObject, "rascal", advancementEntityPredicateDeserializer); + + return new CompleteHideAndSeekGameCriterion.Conditions(extended, extended2); + } + + public void trigger(ServerPlayerEntity player, RascalEntity entity) { + LootContext lootContext = EntityPredicate.createAdvancementEntityLootContext(player, entity); + this.trigger(player, (conditions) -> { + return conditions.matches(lootContext); + }); + } + + public static class Conditions extends AbstractCriterionConditions + { + private final LootContextPredicate entity; + + public Conditions(LootContextPredicate player, LootContextPredicate entity) { + super(CompleteHideAndSeekGameCriterion.ID, player); + this.entity = entity; + } + + public static CompleteHideAndSeekGameCriterion.Conditions any() { + return new CompleteHideAndSeekGameCriterion.Conditions(LootContextPredicate.EMPTY, LootContextPredicate.EMPTY); + } + + public static CompleteHideAndSeekGameCriterion.Conditions create(EntityPredicate entity) { + return new CompleteHideAndSeekGameCriterion.Conditions(LootContextPredicate.EMPTY, EntityPredicate.asLootContextPredicate(entity)); + } + + public boolean matches(LootContext entityContext) { + return this.entity.test(entityContext); + } + + public JsonObject toJson(AdvancementEntityPredicateSerializer predicateSerializer) { + JsonObject jsonObject = super.toJson(predicateSerializer); + jsonObject.add("entity", this.entity.toJson(predicateSerializer)); + return jsonObject; + } + } +} diff --git a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/animation/RascalAnimations.java b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/animation/RascalAnimations.java new file mode 100644 index 000000000..7e1757046 --- /dev/null +++ b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/animation/RascalAnimations.java @@ -0,0 +1,303 @@ +package com.faboslav.friendsandfoes.client.render.entity.animation; + +import com.faboslav.friendsandfoes.entity.animation.Animation; +import com.faboslav.friendsandfoes.entity.animation.Keyframe; +import com.faboslav.friendsandfoes.entity.animation.Transformation; +import com.faboslav.friendsandfoes.entity.animation.VectorHelper; + +import java.util.ArrayList; + +public final class RascalAnimations +{ + public static final KeyframeAnimation DEFAULT; + public static final KeyframeAnimation NOD; + public static final KeyframeAnimation GIVE_REWARD; + public static final ArrayList ANIMATIONS; + + public RascalAnimations() { + } + + static { + DEFAULT = new KeyframeAnimation("default", Animation.Builder.create(0.0f).build()); + NOD = new KeyframeAnimation("nod", Animation.Builder.create(0.4167f) + .addBoneAnimation("head", + new Transformation(Transformation.Type.TRANSLATE, + new Keyframe(0f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createTranslationalVector(0f, 2f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("head", + new Transformation(Transformation.Type.ROTATE, + new Keyframe(0f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.0833f, VectorHelper.createRotationalVector(15f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createRotationalVector(20f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.25f, VectorHelper.createRotationalVector(10f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("leftArm", + new Transformation(Transformation.Type.TRANSLATE, + new Keyframe(0f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createTranslationalVector(0f, 2f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("leftArm", + new Transformation(Transformation.Type.ROTATE, + new Keyframe(0f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createRotationalVector(-15f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.25f, VectorHelper.createRotationalVector(-25f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.3333f, VectorHelper.createRotationalVector(5f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("rightArm", + new Transformation(Transformation.Type.TRANSLATE, + new Keyframe(0f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createTranslationalVector(0f, 2f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("rightArm", + new Transformation(Transformation.Type.ROTATE, + new Keyframe(0f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createRotationalVector(15f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.25f, VectorHelper.createRotationalVector(25f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.3333f, VectorHelper.createRotationalVector(5f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("leftLeg", + new Transformation(Transformation.Type.TRANSLATE, + new Keyframe(0f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createTranslationalVector(0f, 2f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("leftLeg", + new Transformation(Transformation.Type.ROTATE, + new Keyframe(0f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createRotationalVector(15f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.25f, VectorHelper.createRotationalVector(20f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.3333f, VectorHelper.createRotationalVector(-5f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("rightLeg", + new Transformation(Transformation.Type.TRANSLATE, + new Keyframe(0f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createTranslationalVector(0f, 2f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("rightLeg", + new Transformation(Transformation.Type.ROTATE, + new Keyframe(0f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createRotationalVector(-15f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.25f, VectorHelper.createRotationalVector(-20f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.3333f, VectorHelper.createRotationalVector(5f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("bag", + new Transformation(Transformation.Type.TRANSLATE, + new Keyframe(0f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createTranslationalVector(0f, 2f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("bag", + new Transformation(Transformation.Type.ROTATE, + new Keyframe(0f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createRotationalVector(10f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.25f, VectorHelper.createRotationalVector(15f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.3333f, VectorHelper.createRotationalVector(-5f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("body", + new Transformation(Transformation.Type.TRANSLATE, + new Keyframe(0f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createTranslationalVector(0f, 2f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("body", + new Transformation(Transformation.Type.ROTATE, + new Keyframe(0f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.1667f, VectorHelper.createRotationalVector(-1f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.25f, VectorHelper.createRotationalVector(1f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4167f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))).build() + ); + GIVE_REWARD = new KeyframeAnimation("giveReward", Animation.Builder.create(1.5416767f) + .addBoneAnimation("head", + new Transformation(Transformation.Type.ROTATE, + new Keyframe(0f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.375f, VectorHelper.createRotationalVector(-7.5f, -50f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4583f, VectorHelper.createRotationalVector(-7.5f, -40f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.6667f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.8333f, VectorHelper.createRotationalVector(15f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.9583f, VectorHelper.createRotationalVector(15f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.0833f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.25f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.5416767f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("rightArm", + new Transformation(Transformation.Type.TRANSLATE, + new Keyframe(0.625f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.75f, VectorHelper.createTranslationalVector(0f, -2f, -1f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.0833f, VectorHelper.createTranslationalVector(0f, -2f, -1f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.25f, VectorHelper.createTranslationalVector(0f, -2f, -1f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.5416767f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("rightArm", + new Transformation(Transformation.Type.ROTATE, + new Keyframe(0f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.125f, VectorHelper.createRotationalVector(-37.5f, 0f, -20f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.4583f, VectorHelper.createRotationalVector(-170f, 0f, -20f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.5417f, VectorHelper.createRotationalVector(-170f, 0f, -20f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.625f, VectorHelper.createRotationalVector(-60f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.75f, VectorHelper.createRotationalVector(-60f, 20f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.0833f, VectorHelper.createRotationalVector(-60f, 20f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.25f, VectorHelper.createRotationalVector(-60f, 20f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.5416767f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("bag", + new Transformation(Transformation.Type.TRANSLATE, + new Keyframe(0.4583f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.625f, VectorHelper.createTranslationalVector(7f, 0f, -6f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.75f, VectorHelper.createTranslationalVector(-3f, -7f, -12f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.0833f, VectorHelper.createTranslationalVector(-3f, -7f, -12f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.25f, VectorHelper.createTranslationalVector(-3f, -7f, -12f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.375f, VectorHelper.createTranslationalVector(7f, 0f, -6f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.5416767f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("bag", + new Transformation(Transformation.Type.ROTATE, + new Keyframe(0.4583f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.5417f, VectorHelper.createRotationalVector(5f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.625f, VectorHelper.createRotationalVector(0f, 90f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.75f, VectorHelper.createRotationalVector(-30f, 180f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.8333f, VectorHelper.createRotationalVector(-30f, 180f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.0833f, VectorHelper.createRotationalVector(-30f, 180f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.25f, VectorHelper.createRotationalVector(-30f, 180f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.375f, VectorHelper.createRotationalVector(0f, 90f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.4583433f, VectorHelper.createRotationalVector(5f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.5416767f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("leftArm", + new Transformation(Transformation.Type.TRANSLATE, + new Keyframe(0.4583f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.5833f, VectorHelper.createTranslationalVector(0f, -0.25f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.6667f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.75f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.8333f, VectorHelper.createTranslationalVector(0f, -2f, -1f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.25f, VectorHelper.createTranslationalVector(0f, -2f, -1f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.5416767f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("leftArm", + new Transformation(Transformation.Type.ROTATE, + new Keyframe(0.75f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.8333f, VectorHelper.createRotationalVector(-52.5f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.9167f, VectorHelper.createRotationalVector(-65f, -30f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.0833f, VectorHelper.createRotationalVector(-90f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.25f, VectorHelper.createRotationalVector(-90f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.5416767f, VectorHelper.createRotationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))) + .addBoneAnimation("body", + new Transformation(Transformation.Type.TRANSLATE, + new Keyframe(0.4583f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.5833f, VectorHelper.createTranslationalVector(0f, -0.25f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(0.6667f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.0833f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR), + new Keyframe(1.5f, VectorHelper.createTranslationalVector(0f, 0f, 0f), + Transformation.Interpolations.LINEAR))).build() + ); + ANIMATIONS = new ArrayList<>() + {{ + add(DEFAULT); + add(NOD); + add(GIVE_REWARD); + }}; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/animation/animator/context/AnimationContextTracker.java b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/animation/animator/context/AnimationContextTracker.java index 2f7b6716c..7a83e6682 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/animation/animator/context/AnimationContextTracker.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/animation/animator/context/AnimationContextTracker.java @@ -13,7 +13,13 @@ public final class AnimationContextTracker private final Map animationRotationContext = new HashMap<>(); public KeyframeAnimationContext get(KeyframeAnimation keyframeAnimation) { - return this.animationKeyframeContext.get(keyframeAnimation.getName()); + KeyframeAnimationContext keyframeAnimationContext = this.animationKeyframeContext.get(keyframeAnimation.getName()); + + if (keyframeAnimationContext == null) { + throw new RuntimeException(String.format("Keyframe animation '%s' is not added.", keyframeAnimation.getName())); + } + + return keyframeAnimationContext; } public void add(KeyframeAnimation keyframeAnimation) { @@ -61,4 +67,4 @@ public void remove(String modelPartName, ModelPartAnimationType type) { throw new RuntimeException(String.format("Invalid animation type '%s.'", type)); } } -} +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/AnimatedEntityModel.java b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/AnimatedEntityModel.java index d62f79e2e..50ce46c86 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/AnimatedEntityModel.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/AnimatedEntityModel.java @@ -288,4 +288,13 @@ public static void animateModelPartRotationBasedOnTicks( ticks ); } + + protected void updateKeyframeAnimations( + AnimatedEntity animatedEntity, + float animationProgress + ) { + animatedEntity.getAnimations().forEach((keyframeAnimation -> { + ModelAnimator.updateKeyframeAnimations(animatedEntity, this, keyframeAnimation, animationProgress); + })); + } } \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/RascalEntityModel.java b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/RascalEntityModel.java new file mode 100644 index 000000000..8919c16f7 --- /dev/null +++ b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/RascalEntityModel.java @@ -0,0 +1,93 @@ +package com.faboslav.friendsandfoes.client.render.entity.model; + +import com.faboslav.friendsandfoes.entity.RascalEntity; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.model.*; +import net.minecraft.util.math.MathHelper; + +@Environment(EnvType.CLIENT) +public final class RascalEntityModel extends AnimatedEntityModel +{ + private static final String MODEL_PART_HEAD = "head"; + private static final String MODEL_PART_BODY = "body"; + private static final String MODEL_PART_BAG = "bag"; + private static final String MODEL_PART_LEFT_ARM = "leftArm"; + private static final String MODEL_PART_RIGHT_ARM = "rightArm"; + private static final String MODEL_PART_LEFT_LEG = "leftLeg"; + private static final String MODEL_PART_RIGHT_LEG = "rightLeg"; + + private final ModelPart head; + private final ModelPart body; + private final ModelPart bag; + private final ModelPart leftArm; + private final ModelPart rightArm; + private final ModelPart leftLeg; + private final ModelPart rightLeg; + + public RascalEntityModel(ModelPart root) { + super(root); + this.head = this.root.getChild(MODEL_PART_HEAD); + this.body = this.root.getChild(MODEL_PART_BODY); + this.bag = this.root.getChild(MODEL_PART_BAG); + this.leftArm = this.root.getChild(MODEL_PART_LEFT_ARM); + this.rightArm = this.root.getChild(MODEL_PART_RIGHT_ARM); + this.leftLeg = this.root.getChild(MODEL_PART_LEFT_LEG); + this.rightLeg = this.root.getChild(MODEL_PART_RIGHT_LEG); + } + + public static TexturedModelData getTexturedModelData() { + ModelData modelData = new ModelData(); + ModelPartData root = modelData.getRoot(); + + root.addChild(MODEL_PART_HEAD, ModelPartBuilder.create().uv(0, 52).cuboid(-4.0F, -2.0F, -5.0F, 8.0F, 6.0F, 6.0F, new Dilation(0.0F)) + .uv(28, 36).cuboid(-4.0F, -3.0F, -5.0F, 8.0F, 9.0F, 6.0F, new Dilation(0.5F)), ModelTransform.pivot(0.0F, 9.0F, -5.0F)); + root.addChild(MODEL_PART_BODY, ModelPartBuilder.create().uv(0, 0).cuboid(-6.0F, 0.0F, -4.0F, 12.0F, 15.0F, 8.0F, new Dilation(-0.01F)) + .uv(0, 23).cuboid(-6.0F, 12.0F, -4.0F, 12.0F, 5.0F, 8.0F, new Dilation(-0.5F)) + .uv(44, 0).cuboid(3.0F, 0.0F, -4.0F, 2.0F, 15.0F, 8.0F, new Dilation(0.5F)), ModelTransform.pivot(0.0F, 4.0F, 0.0F)); + root.addChild(MODEL_PART_BAG, ModelPartBuilder.create().uv(0, 36).cuboid(-4.0F, -0.5F, -0.5F, 8.0F, 9.0F, 6.0F, new Dilation(0.0F)), ModelTransform.pivot(3.0F, 7.5F, 4.5F)); + root.addChild(MODEL_PART_LEFT_ARM, ModelPartBuilder.create().uv(50, 28).mirrored().cuboid(-3.0F, -2.0F, -2.0F, 3.0F, 10.0F, 4.0F, new Dilation(0.0F)).mirrored(false), ModelTransform.pivot(-6.0F, 11.0F, 0.0F)); + root.addChild(MODEL_PART_RIGHT_ARM, ModelPartBuilder.create().uv(50, 28).cuboid(0.0F, -2.0F, -2.0F, 3.0F, 10.0F, 4.0F, new Dilation(0.0F)), ModelTransform.pivot(6.0F, 11.0F, 0.0F)); + root.addChild(MODEL_PART_LEFT_LEG, ModelPartBuilder.create().uv(28, 54).mirrored().cuboid(-2.0F, 0.0F, -2.0F, 4.0F, 6.0F, 4.0F, new Dilation(0.0F)).mirrored(false), ModelTransform.pivot(-3.0F, 18.0F, 0.0F)); + root.addChild(MODEL_PART_RIGHT_LEG, ModelPartBuilder.create().uv(28, 54).cuboid(-2.0F, 0.0F, -2.0F, 4.0F, 6.0F, 4.0F, new Dilation(0.0F)), ModelTransform.pivot(3.0F, 18.0F, 0.0F)); + + return TexturedModelData.of(modelData, 64, 64); + } + + @Override + public void animateModel( + T rascal, + float limbAngle, + float limbDistance, + float tickDelta + ) { + this.updateAnimations(rascal, limbAngle, limbDistance); + } + + @Override + public void setAngles( + T rascal, + float limbAngle, + float limbDistance, + float animationProgress, + float headYaw, + float headPitch + ) { + this.updateKeyframeAnimations(rascal, animationProgress); + } + + private void updateAnimations( + T rascal, + float limbAngle, + float limbDistance + ) { + this.applyModelTransforms(MODEL_PART_ROOT, this.root); + + this.rightLeg.pitch = -2.0F * MathHelper.wrap(limbAngle, 13.0F) * limbDistance; + this.leftLeg.pitch = 2.0F * MathHelper.wrap(limbAngle, 13.0F) * limbDistance; + this.rightLeg.yaw = 0.0F; + this.leftLeg.yaw = 0.0F; + this.leftArm.pitch = (-0.2F + 2.0F * MathHelper.wrap(limbAngle, 13.0F)) * limbDistance; + this.rightArm.pitch = (-0.2F - 2.0F * MathHelper.wrap(limbAngle, 13.0F)) * limbDistance; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/TuffGolemEntityModel.java b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/TuffGolemEntityModel.java index 33664758b..d3209234a 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/TuffGolemEntityModel.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/TuffGolemEntityModel.java @@ -1,7 +1,5 @@ package com.faboslav.friendsandfoes.client.render.entity.model; -import com.faboslav.friendsandfoes.client.render.entity.animation.TuffGolemAnimations; -import com.faboslav.friendsandfoes.client.render.entity.animation.animator.ModelAnimator; import com.faboslav.friendsandfoes.entity.TuffGolemEntity; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -105,13 +103,4 @@ private void updateAnimations( this.rightArm.pitch = (-0.2F - 2.0F * MathHelper.wrap(limbAngle, 13.0F)) * limbDistance; } } - - private void updateKeyframeAnimations( - T tuffGolem, - float animationProgress - ) { - TuffGolemAnimations.ANIMATIONS.forEach((keyframeAnimation -> { - ModelAnimator.updateKeyframeAnimations(tuffGolem, this, keyframeAnimation, animationProgress); - })); - } } \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/renderer/RascalEntityRenderer.java b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/renderer/RascalEntityRenderer.java new file mode 100644 index 000000000..262594693 --- /dev/null +++ b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/renderer/RascalEntityRenderer.java @@ -0,0 +1,25 @@ +package com.faboslav.friendsandfoes.client.render.entity.renderer; + +import com.faboslav.friendsandfoes.FriendsAndFoes; +import com.faboslav.friendsandfoes.client.render.entity.model.RascalEntityModel; +import com.faboslav.friendsandfoes.entity.RascalEntity; +import com.faboslav.friendsandfoes.init.FriendsAndFoesEntityModelLayer; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.render.entity.MobEntityRenderer; +import net.minecraft.util.Identifier; + +@Environment(EnvType.CLIENT) +@SuppressWarnings({"rawtypes", "unchecked"}) +public final class RascalEntityRenderer extends MobEntityRenderer> +{ + public RascalEntityRenderer(EntityRendererFactory.Context context) { + super(context, new RascalEntityModel(context.getPart(FriendsAndFoesEntityModelLayer.RASCAL_LAYER)), 0.5F); + } + + @Override + public Identifier getTexture(RascalEntity entity) { + return FriendsAndFoes.makeID("textures/entity/rascal/rascal.png"); + } +} diff --git a/common/src/main/java/com/faboslav/friendsandfoes/config/FriendsAndFoesConfig.java b/common/src/main/java/com/faboslav/friendsandfoes/config/FriendsAndFoesConfig.java index 1cbf7e65f..0a47a5e8b 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/config/FriendsAndFoesConfig.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/config/FriendsAndFoesConfig.java @@ -132,6 +132,13 @@ public final class FriendsAndFoesConfig implements Config @Description("Enable trap") public boolean enableZombieHorseTrap = true; + @Category("Rascal") + @Description("Enable rascal") + public boolean enableRascal = true; + + @Description("Enable rascal spawn") + public boolean enableRascalSpawn = true; + @Category("Tuff Golem") @Description("Enable tuff golem") public boolean enableTuffGolem = true; diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java new file mode 100644 index 000000000..ea30f1382 --- /dev/null +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java @@ -0,0 +1,442 @@ +package com.faboslav.friendsandfoes.entity; + +import com.faboslav.friendsandfoes.FriendsAndFoes; +import com.faboslav.friendsandfoes.client.render.entity.animation.KeyframeAnimation; +import com.faboslav.friendsandfoes.client.render.entity.animation.RascalAnimations; +import com.faboslav.friendsandfoes.client.render.entity.animation.animator.context.AnimationContextTracker; +import com.faboslav.friendsandfoes.entity.ai.brain.RascalBrain; +import com.faboslav.friendsandfoes.entity.animation.AnimatedEntity; +import com.faboslav.friendsandfoes.entity.pose.RascalEntityPose; +import com.faboslav.friendsandfoes.init.FriendsAndFoesSoundEvents; +import com.faboslav.friendsandfoes.util.RandomGenerator; +import com.mojang.serialization.Dynamic; +import net.minecraft.block.BlockState; +import net.minecraft.entity.*; +import net.minecraft.entity.ai.brain.Brain; +import net.minecraft.entity.ai.brain.MemoryModuleType; +import net.minecraft.entity.ai.pathing.PathNodeType; +import net.minecraft.entity.attribute.DefaultAttributeContainer; +import net.minecraft.entity.attribute.EntityAttributes; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.entity.data.TrackedData; +import net.minecraft.entity.data.TrackedDataHandlerRegistry; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.entity.mob.MobEntity; +import net.minecraft.entity.passive.PassiveEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.particle.ParticleEffect; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.registry.tag.StructureTags; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.sound.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.util.math.random.Random; +import net.minecraft.world.LocalDifficulty; +import net.minecraft.world.ServerWorldAccess; +import net.minecraft.world.World; +import net.minecraft.world.gen.StructureAccessor; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public final class RascalEntity extends PassiveEntity implements AnimatedEntity +{ + private AnimationContextTracker animationContextTracker; + private static final TrackedData POSE_TICKS; + private static final TrackedData CAUGHT_COUNT; + private boolean ambientSounds; + + public RascalEntity(EntityType entityType, World world) { + super(entityType, world); + this.enableAmbientSounds(); + this.setPathfindingPenalty(PathNodeType.RAIL, 0.0F); + this.setPathfindingPenalty(PathNodeType.UNPASSABLE_RAIL, 0.0F); + this.setPathfindingPenalty(PathNodeType.WATER, 0.0F); + this.setPathfindingPenalty(PathNodeType.WATER_BORDER, 0.0F); + } + + @Override + public EntityData initialize( + ServerWorldAccess world, + LocalDifficulty difficulty, + SpawnReason spawnReason, + @Nullable EntityData entityData, + @Nullable NbtCompound entityNbt + ) { + EntityData superEntityData = super.initialize(world, difficulty, spawnReason, entityData, entityNbt); + + this.setPose(RascalEntityPose.DEFAULT); + RascalBrain.setNodCooldown(this); + + return superEntityData; + } + + public static boolean canSpawn( + EntityType rascalEntityType, + ServerWorldAccess serverWorldAccess, + SpawnReason spawnReason, + BlockPos blockPos, + Random random + ) { + if (spawnReason == SpawnReason.NATURAL) { + ServerWorld serverWorld = serverWorldAccess.toServerWorld(); + StructureAccessor structureAccessor = serverWorld.getStructureAccessor(); + + if (structureAccessor.getStructureContaining( + blockPos, + StructureTags.MINESHAFT + ).hasChildren() == false) { + return false; + } + + List nearbyRascals = serverWorld.getEntitiesByClass(RascalEntity.class, new Box(blockPos).expand(32.0F), (rascalEntity) -> true); + + if (nearbyRascals.isEmpty() == false) { + return false; + } + + if (blockPos.getY() < 63 && serverWorldAccess.isSkyVisible(blockPos) == false) { + return true; + } + } + + return false; + } + + @Override + public AnimationContextTracker getAnimationContextTracker() { + if (this.animationContextTracker == null) { + this.animationContextTracker = new AnimationContextTracker(); + + for (KeyframeAnimation keyframeAnimation : this.getAnimations()) { + this.animationContextTracker.add(keyframeAnimation); + } + } + + return this.animationContextTracker; + } + + @Override + public ArrayList getAnimations() { + return RascalAnimations.ANIMATIONS; + } + + @Override + public int getKeyframeAnimationTicks() { + return this.dataTracker.get(POSE_TICKS); + } + + public void setKeyframeAnimationTicks(int keyframeAnimationTicks) { + this.dataTracker.set(POSE_TICKS, keyframeAnimationTicks); + } + + @Override + protected void initDataTracker() { + super.initDataTracker(); + this.dataTracker.startTracking(POSE_TICKS, 0); + this.dataTracker.startTracking(CAUGHT_COUNT, 0); + } + + @Nullable + @Override + public PassiveEntity createChild(ServerWorld world, PassiveEntity entity) { + return null; + } + + @Override + protected Brain deserializeBrain(Dynamic dynamic) { + return RascalBrain.create(dynamic); + } + + @Override + @SuppressWarnings("all") + public Brain getBrain() { + return (Brain) super.getBrain(); + } + + @Override + protected void mobTick() { + this.getWorld().getProfiler().push("rascalBrain"); + this.getBrain().tick((ServerWorld) this.getWorld(), this); + this.getWorld().getProfiler().pop(); + this.getWorld().getProfiler().push("rascalActivityUpdate"); + RascalBrain.updateActivities(this); + this.getWorld().getProfiler().pop(); + + super.mobTick(); + } + + public static DefaultAttributeContainer.Builder createAttributes() { + return MobEntity.createMobAttributes() + .add(EntityAttributes.GENERIC_MAX_HEALTH, 20.0D) + .add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.55D) + .add(EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE, 1.0D); + } + + @Override + public void tick() { + if (FriendsAndFoes.getConfig().enableRascal == false) { + this.discard(); + } + + StatusEffectInstance invisibilityStatusEffect = this.getStatusEffect(StatusEffects.INVISIBILITY); + + if (this.isHidden() && invisibilityStatusEffect != null && invisibilityStatusEffect.getDuration() == 1) { + this.playReappearSound(); + } + + if (this.getWorld().isClient() == false && this.isAnyKeyframeAnimationRunning()) { + this.setKeyframeAnimationTicks(this.getKeyframeAnimationTicks() - 1); + } + + KeyframeAnimation keyframeAnimationToStart = this.getKeyframeAnimationByPose(); + + if ( + keyframeAnimationToStart != null + && this.isKeyframeAnimationRunning(keyframeAnimationToStart) == false + ) { + if (this.getWorld().isClient() == false) { + this.setKeyframeAnimationTicks(keyframeAnimationToStart.getAnimationLengthInTicks()); + } + + this.startKeyframeAnimation(keyframeAnimationToStart); + } + + super.tick(); + } + + @Nullable + private KeyframeAnimation getKeyframeAnimationByPose() { + KeyframeAnimation keyframeAnimation = null; + + if (this.isInPose(RascalEntityPose.DEFAULT)) { + keyframeAnimation = RascalAnimations.DEFAULT; + } else if (this.isInPose(RascalEntityPose.NOD)) { + keyframeAnimation = RascalAnimations.NOD; + } else if (this.isInPose(RascalEntityPose.GIVE_REWARD)) { + keyframeAnimation = RascalAnimations.GIVE_REWARD; + } + + return keyframeAnimation; + } + + private void startKeyframeAnimation(KeyframeAnimation keyframeAnimationToStart) { + for (KeyframeAnimation keyframeAnimation : RascalAnimations.ANIMATIONS) { + if (keyframeAnimation == keyframeAnimationToStart) { + continue; + } + + this.stopKeyframeAnimation(keyframeAnimation); + } + + this.startKeyframeAnimation(keyframeAnimationToStart, this.age); + } + + + @Override + public void setPose(EntityPose pose) { + if (this.getWorld().isClient()) { + return; + } + + super.setPose(pose); + } + + public void setPose(RascalEntityPose pose) { + if (this.getWorld().isClient()) { + return; + } + + super.setPose(pose.get()); + } + + public boolean isInPose(RascalEntityPose pose) { + return this.getPose() == pose.get(); + } + + public void startNodAnimation() { + if (this.isInPose(RascalEntityPose.NOD)) { + return; + } + + this.playNodSound(); + this.setPose(RascalEntityPose.NOD); + } + + public void startGiveRewardAnimation() { + if (this.isInPose(RascalEntityPose.GIVE_REWARD)) { + return; + } + + this.playRewardSound(); + this.setPose(RascalEntityPose.GIVE_REWARD); + } + + @Override + public boolean damage( + DamageSource source, float amount + ) { + Entity attacker = source.getAttacker(); + + if ( + attacker == null + || attacker instanceof PlayerEntity == false + ) { + return super.damage(source, amount); + } + + this.playHurtSound(source); + this.playDisappearSound(); + this.spawnCloudParticles(); + this.discard(); + + return false; + } + + public SoundEvent getNodSound() { + return FriendsAndFoesSoundEvents.ENTITY_RASCAL_NOD.get(); + } + + public void playNodSound() { + this.playSound(this.getNodSound(), 1.0F, RandomGenerator.generateFloat(1.15F, 1.3F)); + } + + public SoundEvent getRewardSound() { + return FriendsAndFoesSoundEvents.ENTITY_RASCAL_REWARD.get(); + } + + public void playRewardSound() { + this.playSound(this.getRewardSound(), 1.0F, RandomGenerator.generateFloat(1.15F, 1.3F)); + } + + public SoundEvent getBadRewardSound() { + return FriendsAndFoesSoundEvents.ENTITY_RASCAL_REWARD_BAD.get(); + } + + public void playBadRewardSound() { + this.playSound(this.getBadRewardSound(), 1.0F, RandomGenerator.generateFloat(1.15F, 1.3F)); + } + + @Override + protected SoundEvent getAmbientSound() { + return FriendsAndFoesSoundEvents.ENTITY_RASCAL_AMBIENT.get(); + } + + @Override + public void playAmbientSound() { + if (this.isHidden() || this.ambientSounds == false) { + return; + } + + SoundEvent soundEvent = this.getAmbientSound(); + this.playSound(soundEvent, 1.5F, RandomGenerator.generateFloat(1.15F, 1.3F)); + } + + @Override + protected SoundEvent getHurtSound(DamageSource source) { + return FriendsAndFoesSoundEvents.ENTITY_RASCAL_HURT.get(); + } + + @Override + protected void playHurtSound(DamageSource source) { + this.ambientSoundChance = -this.getMinAmbientSoundDelay(); + this.playSound(this.getHurtSound(source), 1.0F, RandomGenerator.generateFloat(1.15F, 1.3F)); + } + + public SoundEvent getDisappearSound() { + return FriendsAndFoesSoundEvents.ENTITY_RASCAL_DISAPPEAR.get(); + } + + public void playDisappearSound() { + SoundEvent soundEvent = this.getDisappearSound(); + this.playSound(soundEvent, 1.5F, RandomGenerator.generateFloat(1.5F, 1.6F)); + } + + public SoundEvent getReappearSound() { + return FriendsAndFoesSoundEvents.ENTITY_RASCAL_REAPPEAR.get(); + } + + public void playReappearSound() { + SoundEvent soundEvent = this.getReappearSound(); + this.playSound(soundEvent, 1.5F, RandomGenerator.generateFloat(1.5F, 1.6F)); + } + + @Override + protected void playStepSound( + BlockPos pos, + BlockState state + ) { + if ( + this.isHidden() + || state.isLiquid() + ) { + return; + } + + super.playStepSound(pos, state); + } + + public boolean isHidden() { + return this.getBrain().getOptionalRegisteredMemory(MemoryModuleType.AVOID_TARGET).orElse(null) instanceof PlayerEntity; + } + + public int getCaughtCount() { + return this.dataTracker.get(CAUGHT_COUNT); + } + + public void addToCaughtCount() { + this.dataTracker.set(CAUGHT_COUNT, this.getCaughtCount() + 1); + } + + public boolean shouldGiveReward() { + return this.getCaughtCount() >= 3; + } + + public boolean disableAmbientSounds() { + return this.ambientSounds = false; + } + + public boolean enableAmbientSounds() { + return this.ambientSounds = true; + } + + public void spawnCloudParticles() { + this.spawnParticles(ParticleTypes.CLOUD, 16, 0.1D); + } + + public void spawnParticles( + ParticleEffect particleEffect, + int amount, + double speed + ) { + World world = this.getWorld(); + + if (world.isClient()) { + return; + } + + for (int i = 0; i < amount; i++) { + ((ServerWorld) world).spawnParticles( + particleEffect, + this.getParticleX(1.0D), + this.getRandomBodyY() + 0.5D, + this.getParticleZ(1.0D), + 1, + this.getRandom().nextGaussian() * 0.02D, + this.getRandom().nextGaussian() * 0.02D, + this.getRandom().nextGaussian() * 0.02D, + speed + ); + } + } + + static { + POSE_TICKS = DataTracker.registerData(RascalEntity.class, TrackedDataHandlerRegistry.INTEGER); + CAUGHT_COUNT = DataTracker.registerData(RascalEntity.class, TrackedDataHandlerRegistry.INTEGER); + } +} diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/TuffGolemEntity.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/TuffGolemEntity.java index ca572196c..9b810cb71 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/TuffGolemEntity.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/TuffGolemEntity.java @@ -28,11 +28,11 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; +import net.minecraft.registry.tag.BlockTags; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvents; -import net.minecraft.tag.BlockTags; import net.minecraft.util.ActionResult; import net.minecraft.util.DyeColor; import net.minecraft.util.Hand; @@ -44,6 +44,8 @@ import net.minecraft.world.event.GameEvent; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; + public final class TuffGolemEntity extends GolemEntity implements AnimatedEntity { private static final TrackedData COLOR; @@ -84,7 +86,7 @@ public AnimationContextTracker getAnimationContextTracker() { if (this.animationContextTracker == null) { this.animationContextTracker = new AnimationContextTracker(); - for (KeyframeAnimation keyframeAnimation : TuffGolemAnimations.ANIMATIONS) { + for (KeyframeAnimation keyframeAnimation : this.getAnimations()) { this.animationContextTracker.add(keyframeAnimation); } } @@ -92,6 +94,11 @@ public AnimationContextTracker getAnimationContextTracker() { return this.animationContextTracker; } + @Override + public ArrayList getAnimations() { + return TuffGolemAnimations.ANIMATIONS; + } + @Override public int getKeyframeAnimationTicks() { return this.dataTracker.get(POSE_TICKS); @@ -106,7 +113,6 @@ public TuffGolemEntity( World world ) { super(entityType, world); - this.stepHeight = 1.0F; } @Override @@ -286,7 +292,7 @@ protected void playStepSound( ) { if ( this.isInSleepingPose() - || state.getMaterial().isLiquid() + || state.isLiquid() ) { return; } @@ -701,7 +707,7 @@ public boolean damage( if ( attacker == null || attacker instanceof LightningEntity - || source == DamageSource.SWEET_BERRY_BUSH + || source == this.getDamageSources().sweetBerryBush() ) { return false; } @@ -961,4 +967,3 @@ public static TuffGolemEntity.Color fromWool(Block block) { } } } - diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/WildfireShieldDebrisEntity.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/WildfireShieldDebrisEntity.java index 076eef104..73d3f8196 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/WildfireShieldDebrisEntity.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/WildfireShieldDebrisEntity.java @@ -100,7 +100,7 @@ private SoundEvent getImpactSound() { private void playImpactSound() { SoundEvent soundEvent = this.getImpactSound(); - this.playSound(soundEvent, 1.0F, 0.95F + RandomGenerator.generateFloat(0.95F, 1.05F)); + this.playSound(soundEvent, 1.0F, 0.95F + RandomGenerator.generateFloat(0.95F, 1.05F)); } } diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/RascalBrain.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/RascalBrain.java new file mode 100644 index 000000000..03ca550ab --- /dev/null +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/RascalBrain.java @@ -0,0 +1,170 @@ +package com.faboslav.friendsandfoes.entity.ai.brain; + +import com.faboslav.friendsandfoes.entity.RascalEntity; +import com.faboslav.friendsandfoes.entity.ai.brain.task.rascal.RascalFindInteractionTargetTask; +import com.faboslav.friendsandfoes.entity.ai.brain.task.rascal.RascalWaitForPlayerTask; +import com.faboslav.friendsandfoes.init.FriendsAndFoesActivities; +import com.faboslav.friendsandfoes.init.FriendsAndFoesMemoryModuleTypes; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.mojang.datafixers.util.Pair; +import com.mojang.serialization.Dynamic; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.ai.brain.Activity; +import net.minecraft.entity.ai.brain.Brain; +import net.minecraft.entity.ai.brain.MemoryModuleType; +import net.minecraft.entity.ai.brain.sensor.Sensor; +import net.minecraft.entity.ai.brain.sensor.SensorType; +import net.minecraft.entity.ai.brain.task.*; +import net.minecraft.util.TimeHelper; +import net.minecraft.util.math.intprovider.UniformIntProvider; + +import java.util.List; + +@SuppressWarnings({"rawtypes", "unchecked"}) +public final class RascalBrain +{ + public static final List> MEMORY_MODULES; + public static final List>> SENSORS; + public final static int NOD_COOLDOWN = 10; + private static final UniformIntProvider NOD_COOLDOWN_PROVIDER; + private static final UniformIntProvider AVOID_MEMORY_DURATION; + + public RascalBrain() { + } + + public static Brain create(Dynamic dynamic) { + Brain.Profile profile = Brain.createProfile(MEMORY_MODULES, SENSORS); + Brain brain = profile.deserialize(dynamic); + + addCoreActivities(brain); + addIdleActivities(brain); + addWaitActivities(brain); + addAvoidActivities(brain); + + brain.setCoreActivities(ImmutableSet.of(Activity.CORE)); + brain.setDefaultActivity(Activity.IDLE); + brain.resetPossibleActivities(); + + return brain; + } + + private static void addCoreActivities(Brain brain) { + brain.setTaskList(Activity.CORE, + 0, + ImmutableList.of( + new StayAboveWaterTask(0.8F), + new LookAroundTask(45, 90), + new WanderAroundTask(), + new TemptationCooldownTask(FriendsAndFoesMemoryModuleTypes.RASCAL_NOD_COOLDOWN.get()) + ) + ); + } + + private static void addIdleActivities(Brain brain) { + brain.setTaskList( + Activity.IDLE, + ImmutableList.of( + Pair.of(0, RascalFindInteractionTargetTask.create(6)), + Pair.of(0, makeRandomWanderTask()) + ) + ); + } + + private static void addWaitActivities( + Brain brain + ) { + brain.setTaskList( + FriendsAndFoesActivities.RASCAL_WAIT.get(), + 10, + ImmutableList.of( + new RascalWaitForPlayerTask() + ), MemoryModuleType.INTERACTION_TARGET + ); + } + + private static void addAvoidActivities(Brain brain) { + brain.setTaskList( + Activity.AVOID, + 10, + ImmutableList.of( + GoToRememberedPositionTask.createEntityBased(MemoryModuleType.AVOID_TARGET, 1.0F, 32, true) + ), + MemoryModuleType.AVOID_TARGET + ); + } + + public static void updateActivities(RascalEntity rascal) { + rascal.getBrain().resetPossibleActivities( + ImmutableList.of( + FriendsAndFoesActivities.RASCAL_WAIT.get(), + Activity.AVOID, + Activity.IDLE + ) + ); + } + + private static RandomTask makeRandomWanderTask() { + return new RandomTask( + ImmutableList.of( + Pair.of(StrollTask.create(0.6F), 2), + Pair.of(new WaitTask(30, 60), 1) + ) + ); + } + + public static void setNodCooldown(RascalEntity rascal) { + rascal.getBrain().remember(FriendsAndFoesMemoryModuleTypes.RASCAL_NOD_COOLDOWN.get(), NOD_COOLDOWN_PROVIDER.get(rascal.getRandom())); + onCooldown(rascal); + } + + public static boolean shouldRunAway(RascalEntity rascal) { + return rascal.getBrain().getOptionalRegisteredMemory(FriendsAndFoesMemoryModuleTypes.RASCAL_NOD_COOLDOWN.get()).isPresent(); + } + + public static void onCooldown(RascalEntity rascal) { + if (shouldRunAway(rascal) == false) { + return; + } + + if (rascal.hasCustomName()) { + return; + } + + LivingEntity nearestTarget = rascal.getBrain().getOptionalRegisteredMemory(MemoryModuleType.INTERACTION_TARGET).orElse(null); + + if (nearestTarget == null) { + return; + } + + runAwayFrom(rascal, nearestTarget); + } + + private static void runAwayFrom(RascalEntity rascal, LivingEntity target) { + rascal.getBrain().forget(MemoryModuleType.LOOK_TARGET); + rascal.getBrain().forget(MemoryModuleType.WALK_TARGET); + rascal.getBrain().forget(MemoryModuleType.INTERACTION_TARGET); + rascal.getBrain().remember(MemoryModuleType.AVOID_TARGET, target, AVOID_MEMORY_DURATION.get(rascal.getRandom())); + } + + static { + SENSORS = List.of( + SensorType.NEAREST_LIVING_ENTITIES, + SensorType.NEAREST_PLAYERS + ); + MEMORY_MODULES = List.of( + MemoryModuleType.VISIBLE_MOBS, + MemoryModuleType.PATH, + MemoryModuleType.LOOK_TARGET, + MemoryModuleType.WALK_TARGET, + MemoryModuleType.AVOID_TARGET, + MemoryModuleType.INTERACTION_TARGET, + MemoryModuleType.NEAREST_VISIBLE_TARGETABLE_PLAYER, + MemoryModuleType.NEAREST_PLAYERS, + MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE, + FriendsAndFoesMemoryModuleTypes.RASCAL_NOD_COOLDOWN.get() + ); + NOD_COOLDOWN_PROVIDER = TimeHelper.betweenSeconds(NOD_COOLDOWN, NOD_COOLDOWN); + AVOID_MEMORY_DURATION = TimeHelper.betweenSeconds(NOD_COOLDOWN, NOD_COOLDOWN); + } +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/WildfireBrain.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/WildfireBrain.java index a666e42ba..ad5c2dd62 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/WildfireBrain.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/WildfireBrain.java @@ -63,7 +63,8 @@ private static void addCoreActivities(Brain brain) { new TemptationCooldownTask(FriendsAndFoesMemoryModuleTypes.WILDFIRE_BARRAGE_ATTACK_COOLDOWN.get()), new TemptationCooldownTask(FriendsAndFoesMemoryModuleTypes.WILDFIRE_SHOCKWAVE_ATTACK_COOLDOWN.get()), new TemptationCooldownTask(FriendsAndFoesMemoryModuleTypes.WILDFIRE_SUMMON_BLAZE_COOLDOWN.get()) - )); + ) + ); } private static void addIdleActivities(Brain brain) { diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalFindInteractionTargetTask.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalFindInteractionTargetTask.java new file mode 100644 index 000000000..76d5c06d4 --- /dev/null +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalFindInteractionTargetTask.java @@ -0,0 +1,34 @@ +package com.faboslav.friendsandfoes.entity.ai.brain.task.rascal; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.ai.brain.EntityLookTarget; +import net.minecraft.entity.ai.brain.MemoryModuleType; +import net.minecraft.entity.ai.brain.task.Task; +import net.minecraft.entity.player.PlayerEntity; + +import java.util.Optional; + +public final class RascalFindInteractionTargetTask +{ + public static Task create(int maxDistance) { + int squaredMaxDistance = maxDistance * maxDistance; + return TaskTriggerer.task((context) -> { + return context.group(context.queryMemoryOptional(MemoryModuleType.LOOK_TARGET), context.queryMemoryAbsent(MemoryModuleType.INTERACTION_TARGET), context.queryMemoryValue(MemoryModuleType.VISIBLE_MOBS)).apply(context, (lookTarget, interactionTarget, visibleMobs) -> { + return (world, entity, time) -> { + Optional optional = context.getValue(visibleMobs).findFirst((target) -> { + return target.squaredDistanceTo(entity) <= (double) squaredMaxDistance && target instanceof PlayerEntity && !target.isSpectator() && !((PlayerEntity) target).isCreative(); + }); + + if (optional.isEmpty()) { + return false; + } else { + LivingEntity livingEntity = optional.get(); + interactionTarget.remember(livingEntity); + lookTarget.remember(new EntityLookTarget(livingEntity, true)); + return true; + } + }; + }); + }); + } +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalWaitForPlayerTask.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalWaitForPlayerTask.java new file mode 100644 index 000000000..86117edcc --- /dev/null +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalWaitForPlayerTask.java @@ -0,0 +1,197 @@ +package com.faboslav.friendsandfoes.entity.ai.brain.task.rascal; + +import com.faboslav.friendsandfoes.FriendsAndFoes; +import com.faboslav.friendsandfoes.entity.RascalEntity; +import com.faboslav.friendsandfoes.entity.ai.brain.RascalBrain; +import com.faboslav.friendsandfoes.entity.pose.RascalEntityPose; +import com.faboslav.friendsandfoes.init.FriendsAndFoesCriteria; +import com.faboslav.friendsandfoes.init.FriendsAndFoesMemoryModuleTypes; +import com.faboslav.friendsandfoes.mixin.BundleItemAccessor; +import com.google.common.collect.ImmutableMap; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.ai.brain.MemoryModuleState; +import net.minecraft.entity.ai.brain.MemoryModuleType; +import net.minecraft.entity.ai.brain.task.LookTargetUtil; +import net.minecraft.entity.ai.brain.task.MultiTickTask; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.loot.LootManager; +import net.minecraft.loot.LootTable; +import net.minecraft.loot.context.LootContextParameterSet; +import net.minecraft.loot.context.LootContextParameters; +import net.minecraft.loot.context.LootContextTypes; +import net.minecraft.registry.tag.StructureTags; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.gen.StructureAccessor; + +public final class RascalWaitForPlayerTask extends MultiTickTask +{ + private final static int NOD_DURATION = 90; + public final static float NOD_RANGE = 4F; + + private int nodTicks; + private LivingEntity nearestTarget; + + public RascalWaitForPlayerTask() { + super(ImmutableMap.of( + MemoryModuleType.NEAREST_VISIBLE_TARGETABLE_PLAYER, MemoryModuleState.REGISTERED, + MemoryModuleType.INTERACTION_TARGET, MemoryModuleState.VALUE_PRESENT, + FriendsAndFoesMemoryModuleTypes.RASCAL_NOD_COOLDOWN.get(), MemoryModuleState.VALUE_ABSENT + ), NOD_DURATION); + } + + @Override + protected boolean shouldRun(ServerWorld world, RascalEntity rascal) { + if (rascal.hasCustomName()) { + return false; + } + + LivingEntity nearestTarget = rascal.getBrain().getOptionalRegisteredMemory(MemoryModuleType.NEAREST_VISIBLE_TARGETABLE_PLAYER).orElse(null); + + if (nearestTarget == null) { + nearestTarget = rascal.getBrain().getOptionalRegisteredMemory(MemoryModuleType.INTERACTION_TARGET).orElse(null); + } + + if ( + nearestTarget == null + || rascal.distanceTo(nearestTarget) > NOD_RANGE + || nearestTarget.isAlive() == false + || ( + nearestTarget instanceof PlayerEntity + && ( + nearestTarget.isSpectator() + || ((PlayerEntity) nearestTarget).isCreative() + ) + ) + ) { + return false; + } + + this.nearestTarget = nearestTarget; + + return true; + } + + @Override + protected void run(ServerWorld world, RascalEntity rascal, long time) { + rascal.getBrain().forget(MemoryModuleType.WALK_TARGET); + rascal.getNavigation().setSpeed(0); + rascal.getNavigation().stop(); + rascal.getNavigation().tick(); + rascal.getMoveControl().tick(); + + rascal.setMovementSpeed(0.0F); + rascal.prevHorizontalSpeed = 0.0F; + rascal.horizontalSpeed = 0.0F; + rascal.sidewaysSpeed = 0.0F; + rascal.upwardSpeed = 0.0F; + + LookTargetUtil.lookAt(rascal, this.nearestTarget); + rascal.getLookControl().lookAt(this.nearestTarget); + rascal.getLookControl().tick(); + + this.nodTicks = 0; + rascal.addToCaughtCount(); + rascal.disableAmbientSounds(); + } + + @Override + protected boolean shouldKeepRunning(ServerWorld world, RascalEntity rascal, long time) { + return this.nodTicks <= NOD_DURATION; + } + + @Override + protected void keepRunning(ServerWorld world, RascalEntity rascal, long time) { + if (nodTicks == 20) { + rascal.startNodAnimation(); + rascal.getLookControl().lookAt(this.nearestTarget); + } + + if (nodTicks == 40 && rascal.shouldGiveReward()) { + rascal.startGiveRewardAnimation(); + } + + if (nodTicks == 62 && rascal.shouldGiveReward()) { + Vec3d targetPos = nearestTarget.getPos().add(0.0, 1.0, 0.0); + LootManager lootManager = world.getServer().getLootManager(); + + if (lootManager != null) { + LootTable rascalGoodItemsLootTable = lootManager.getLootTable( + FriendsAndFoes.makeID("rewards/rascal_good_reward") + ); + LootContextParameterSet lootContextParameterSet = new LootContextParameterSet.Builder(world) + .add(LootContextParameters.ORIGIN, targetPos) + .add(LootContextParameters.THIS_ENTITY, this.nearestTarget) + .build(LootContextTypes.GIFT); + ObjectArrayList rascalGoodRewards = rascalGoodItemsLootTable.generateLoot(lootContextParameterSet); + + for (ItemStack rascalReward : rascalGoodRewards) { + ItemStack bundleItemStack = Items.BUNDLE.getDefaultStack(); + ((BundleItemAccessor) bundleItemStack.getItem()).invokeAddToBundle(bundleItemStack, rascalReward); + LookTargetUtil.give(rascal, bundleItemStack, nearestTarget.getPos().add(0.0, 1.0, 0.0)); + } + } + + FriendsAndFoesCriteria.COMPLETE_HIDE_AND_SEEK_GAME.trigger((ServerPlayerEntity) this.nearestTarget, rascal); + } + + this.nodTicks++; + } + + @Override + protected void finishRunning(ServerWorld world, RascalEntity rascal, long time) { + if (rascal.hasCustomName()) { + RascalBrain.setNodCooldown(rascal); + return; + } + + rascal.spawnCloudParticles(); + rascal.playDisappearSound(); + + if (rascal.shouldGiveReward()) { + rascal.discard(); + return; + } + + rascal.setPose(RascalEntityPose.DEFAULT); + rascal.addStatusEffect(new StatusEffectInstance(StatusEffects.INVISIBILITY, RascalBrain.NOD_COOLDOWN * 20)); + this.tryToTeleport(world, rascal); + RascalBrain.setNodCooldown(rascal); + rascal.enableAmbientSounds(); + } + + private void tryToTeleport(ServerWorld world, RascalEntity rascal) { + StructureAccessor structureAccessor = world.getStructureAccessor(); + + for (int i = 0; i < 32; ++i) { + double x = rascal.getX() + (rascal.getRandom().nextDouble() - 0.5) * 24.0; + double y = MathHelper.clamp(rascal.getY() + (double) (rascal.getRandom().nextInt(16) - 8), world.getBottomY(), world.getBottomY() + world.getLogicalHeight() - 1); + double z = rascal.getZ() + (rascal.getRandom().nextDouble() - 0.5) * 24.0; + + if (structureAccessor.getStructureContaining( + new BlockPos((int) x, (int) y, (int) z), + StructureTags.MINESHAFT + ).hasChildren() == false) { + continue; + } + + if (rascal.hasVehicle()) { + rascal.stopRiding(); + } + + boolean teleportResult = rascal.teleport(x, y, z, false); + + if (teleportResult) { + return; + } + } + } +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/animation/AnimatedEntity.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/animation/AnimatedEntity.java index 28149315a..1aee62d18 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/animation/AnimatedEntity.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/animation/AnimatedEntity.java @@ -4,10 +4,16 @@ import com.faboslav.friendsandfoes.client.render.entity.animation.animator.context.AnimationContextTracker; import com.faboslav.friendsandfoes.client.render.entity.animation.animator.context.KeyframeAnimationContext; +import java.util.ArrayList; + public interface AnimatedEntity { AnimationContextTracker getAnimationContextTracker(); + default ArrayList getAnimations() { + return new ArrayList<>(); + } + default int getKeyframeAnimationTicks() { return 0; } @@ -33,10 +39,24 @@ default void startKeyframeAnimation(KeyframeAnimation keyframeAnimation, int ini keyframeAnimationContext.getAnimationState().startIfNotRunning(initialTick); } + default void forceStartKeyframeAnimation(KeyframeAnimation keyframeAnimation, int initialTick) { + KeyframeAnimationContext keyframeAnimationContext = this.getAnimationContextTracker().get(keyframeAnimation); + keyframeAnimationContext.setInitialTick(initialTick); + keyframeAnimationContext.getAnimationState().start(initialTick); + } + + default void stopRunningKeyframeAnimations() { + for (KeyframeAnimation keyframeAnimation : this.getAnimations()) { + if (this.getAnimationContextTracker().get(keyframeAnimation).isRunning() == false) { + this.stopKeyframeAnimation(keyframeAnimation); + } + } + } + default void stopKeyframeAnimation(KeyframeAnimation keyframeAnimation) { KeyframeAnimationContext keyframeAnimationContext = this.getAnimationContextTracker().get(keyframeAnimation); keyframeAnimationContext.setInitialTick(0); keyframeAnimationContext.setCurrentTick(0); keyframeAnimationContext.getAnimationState().stop(); } -} +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/pose/RascalEntityPose.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/pose/RascalEntityPose.java new file mode 100644 index 000000000..fbe2ac074 --- /dev/null +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/pose/RascalEntityPose.java @@ -0,0 +1,22 @@ +package com.faboslav.friendsandfoes.entity.pose; + +import net.minecraft.entity.EntityPose; + +public enum RascalEntityPose +{ + DEFAULT, + NOD, + GIVE_REWARD; + + public String getName() { + return "RASCAL_" + this.name(); + } + + public EntityPose get() { + return EntityPose.valueOf(this.getName()); + } + + static { + EntityPose.values(); + } +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendAndFoesEntityRenderer.java b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendAndFoesEntityRenderer.java index 96591ce57..58c3ae8f8 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendAndFoesEntityRenderer.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendAndFoesEntityRenderer.java @@ -27,6 +27,7 @@ public static void postInit() { RegistryHelper.registerEntityRenderer(FriendsAndFoesEntityTypes.ICE_CHUNK, IceologerIceChunkRenderer::new); RegistryHelper.registerEntityRenderer(FriendsAndFoesEntityTypes.MAULER, MaulerEntityRenderer::new); RegistryHelper.registerEntityRenderer(FriendsAndFoesEntityTypes.MOOBLOOM, MoobloomEntityRenderer::new); + RegistryHelper.registerEntityRenderer(FriendsAndFoesEntityTypes.RASCAL, RascalEntityRenderer::new); RegistryHelper.registerEntityRenderer(FriendsAndFoesEntityTypes.TUFF_GOLEM, TuffGolemEntityRenderer::new); RegistryHelper.registerEntityRenderer(FriendsAndFoesEntityTypes.WILDFIRE, WildfireEntityRenderer::new); } diff --git a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesActivities.java b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesActivities.java index 954e0d6d8..fbeb021f1 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesActivities.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesActivities.java @@ -11,9 +11,11 @@ public final class FriendsAndFoesActivities { public final static Supplier TUFF_GOLEM_HOME; + public final static Supplier RASCAL_WAIT; static { TUFF_GOLEM_HOME = RegistryHelper.registerActivity("tuff_golem_home", () -> new Activity("tuff_golem_home")); + RASCAL_WAIT = RegistryHelper.registerActivity("rascal_wait", () -> new Activity("rascal_wait")); } public static void init() { diff --git a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesCriteria.java b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesCriteria.java index 2dbc6e032..3f1f7037e 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesCriteria.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesCriteria.java @@ -1,6 +1,7 @@ package com.faboslav.friendsandfoes.init; import com.faboslav.friendsandfoes.advancements.criterion.ActivateZombieHorseTrapCriterion; +import com.faboslav.friendsandfoes.advancements.criterion.CompleteHideAndSeekGameCriterion; import com.faboslav.friendsandfoes.advancements.criterion.TameGlareCriterion; import net.minecraft.advancement.criterion.Criteria; import net.minecraft.advancement.criterion.Criterion; @@ -9,10 +10,12 @@ public final class FriendsAndFoesCriteria { public static final TameGlareCriterion TAME_GLARE; public static final ActivateZombieHorseTrapCriterion ACTIVATE_ZOMBIE_HORSE_TRAP; + public static final CompleteHideAndSeekGameCriterion COMPLETE_HIDE_AND_SEEK_GAME; static { TAME_GLARE = register(new TameGlareCriterion()); ACTIVATE_ZOMBIE_HORSE_TRAP = register(new ActivateZombieHorseTrapCriterion()); + COMPLETE_HIDE_AND_SEEK_GAME = register(new CompleteHideAndSeekGameCriterion()); } private static > T register(T criterion) { diff --git a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesEntityModelLayer.java b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesEntityModelLayer.java index 2a90747e7..0470802f5 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesEntityModelLayer.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesEntityModelLayer.java @@ -22,6 +22,7 @@ public final class FriendsAndFoesEntityModelLayer public static final EntityModelLayer ICEOLOGER_ICE_CHUNK_LAYER; public static final EntityModelLayer MAULER_LAYER; public static final EntityModelLayer MOOBLOOM_LAYER; + public static final EntityModelLayer RASCAL_LAYER; public static final EntityModelLayer TUFF_GOLEM_LAYER; public static final EntityModelLayer WILDFIRE_LAYER; public static final EntityModelLayer PLAYER_ILLUSION_LAYER; @@ -33,6 +34,7 @@ public final class FriendsAndFoesEntityModelLayer ICEOLOGER_ICE_CHUNK_LAYER = new EntityModelLayer(FriendsAndFoes.makeID("iceologer_ice_chunk"), "main"); MAULER_LAYER = new EntityModelLayer(FriendsAndFoes.makeID("mauler"), "main"); MOOBLOOM_LAYER = new EntityModelLayer(FriendsAndFoes.makeID("moobloom"), "main"); + RASCAL_LAYER = new EntityModelLayer(FriendsAndFoes.makeID("rascal"), "main"); TUFF_GOLEM_LAYER = new EntityModelLayer(FriendsAndFoes.makeID("tuff_golem"), "main"); WILDFIRE_LAYER = new EntityModelLayer(FriendsAndFoes.makeID("wildfire"), "main"); PLAYER_ILLUSION_LAYER = new EntityModelLayer(FriendsAndFoes.makeID("player_illusion"), "main"); @@ -45,6 +47,7 @@ public static void init() { RegistryHelper.registerEntityModelLayer(ICEOLOGER_ICE_CHUNK_LAYER, IceologerIceChunkModel::getTexturedModelData); RegistryHelper.registerEntityModelLayer(MAULER_LAYER, MaulerEntityModel::getTexturedModelData); RegistryHelper.registerEntityModelLayer(MOOBLOOM_LAYER, CowEntityModel::getTexturedModelData); + RegistryHelper.registerEntityModelLayer(RASCAL_LAYER, RascalEntityModel::getTexturedModelData); RegistryHelper.registerEntityModelLayer(TUFF_GOLEM_LAYER, TuffGolemEntityModel::getTexturedModelData); RegistryHelper.registerEntityModelLayer(WILDFIRE_LAYER, WildfireEntityModel::getTexturedModelData); } diff --git a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesEntityTypes.java b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesEntityTypes.java index 595090faf..fb9031318 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesEntityTypes.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesEntityTypes.java @@ -31,6 +31,7 @@ public final class FriendsAndFoesEntityTypes public static final Supplier> ICE_CHUNK; public static final Supplier> MAULER; public static final Supplier> MOOBLOOM; + public static final Supplier> RASCAL; public static final Supplier> TUFF_GOLEM; public static final Supplier> WILDFIRE; public static final Supplier> PLAYER_ILLUSION; @@ -43,6 +44,7 @@ public final class FriendsAndFoesEntityTypes ICE_CHUNK = RegistryHelper.registerEntityType("ice_chunk", () -> EntityType.Builder.create(IceologerIceChunkEntity::new, SpawnGroup.MISC).makeFireImmune().setDimensions(2.5F, 1.0F).maxTrackingRange(6).build(FriendsAndFoes.makeStringID("ice_chunk"))); MAULER = RegistryHelper.registerEntityType("mauler", () -> EntityType.Builder.create(MaulerEntity::new, SpawnGroup.CREATURE).setDimensions(0.5625F, 0.5625F).maxTrackingRange(10).build(FriendsAndFoes.makeStringID("mauler"))); MOOBLOOM = RegistryHelper.registerEntityType("moobloom", () -> EntityType.Builder.create(MoobloomEntity::new, SpawnGroup.CREATURE).setDimensions(0.9F, 1.4F).maxTrackingRange(10).build(FriendsAndFoes.makeStringID("moobloom"))); + RASCAL = RegistryHelper.registerEntityType("rascal", () -> EntityType.Builder.create(RascalEntity::new, CustomSpawnGroup.getRascalsCategory()).setDimensions(0.9F, 1.25F).maxTrackingRange(10).build(FriendsAndFoes.makeStringID("rascal"))); TUFF_GOLEM = RegistryHelper.registerEntityType("tuff_golem", () -> EntityType.Builder.create(TuffGolemEntity::new, SpawnGroup.MISC).setDimensions(0.75F, 1.0625F).maxTrackingRange(10).build(FriendsAndFoes.makeStringID("tuff_golem"))); WILDFIRE = RegistryHelper.registerEntityType("wildfire", () -> EntityType.Builder.create(WildfireEntity::new, SpawnGroup.MONSTER).setDimensions(0.7F * WildfireEntityRenderer.SCALE, 1.875F * WildfireEntityRenderer.SCALE).maxTrackingRange(10).makeFireImmune().build(FriendsAndFoes.makeStringID("wildfire"))); PLAYER_ILLUSION = RegistryHelper.registerEntityType("player_illusion", () -> EntityType.Builder.create(PlayerIllusionEntity::new, SpawnGroup.MISC).setDimensions(0.7F, 1.875F).maxTrackingRange(10).makeFireImmune().build(FriendsAndFoes.makeStringID("player_illusion"))); @@ -65,6 +67,7 @@ public static void createMobAttributes() { RegistryHelper.registerEntityAttribute(FriendsAndFoesEntityTypes.ICEOLOGER, IceologerEntity::createAttributes); RegistryHelper.registerEntityAttribute(FriendsAndFoesEntityTypes.MAULER, MaulerEntity::createAttributes); RegistryHelper.registerEntityAttribute(FriendsAndFoesEntityTypes.MOOBLOOM, MoobloomEntity::createCowAttributes); + RegistryHelper.registerEntityAttribute(FriendsAndFoesEntityTypes.RASCAL, RascalEntity::createAttributes); RegistryHelper.registerEntityAttribute(FriendsAndFoesEntityTypes.TUFF_GOLEM, TuffGolemEntity::createAttributes); RegistryHelper.registerEntityAttribute(FriendsAndFoesEntityTypes.WILDFIRE, WildfireEntity::createAttributes); RegistryHelper.registerEntityAttribute(FriendsAndFoesEntityTypes.PLAYER_ILLUSION, PlayerIllusionEntity::createMobAttributes); @@ -75,6 +78,7 @@ public static void initSpawnRestrictions() { SpawnRestrictionAccessor.callRegister(ICEOLOGER.get(), SpawnRestriction.Location.ON_GROUND, Heightmap.Type.MOTION_BLOCKING_NO_LEAVES, IceologerEntity::canSpawn); SpawnRestrictionAccessor.callRegister(MAULER.get(), SpawnRestriction.Location.ON_GROUND, Heightmap.Type.MOTION_BLOCKING_NO_LEAVES, MaulerEntity::canSpawn); SpawnRestrictionAccessor.callRegister(MOOBLOOM.get(), SpawnRestriction.Location.ON_GROUND, Heightmap.Type.MOTION_BLOCKING_NO_LEAVES, MoobloomEntity::canSpawn); + SpawnRestrictionAccessor.callRegister(RASCAL.get(), SpawnRestriction.Location.ON_GROUND, Heightmap.Type.MOTION_BLOCKING_NO_LEAVES, RascalEntity::canSpawn); } public static void addSpawns() { @@ -94,6 +98,10 @@ public static void addSpawns() { BiomeModifications.addMobSpawn(FriendsAndFoesTags.HAS_LESS_MOOBLOOMS, MOOBLOOM.get(), SpawnGroup.CREATURE, config.moobloomFlowerForestSpawnWeight, config.moobloomFlowerForestSpawnMinGroupSize, config.moobloomFlowerForestSpawnMaxGroupSize); BiomeModifications.addMobSpawn(FriendsAndFoesTags.HAS_MORE_MOOBLOOMS, MOOBLOOM.get(), SpawnGroup.CREATURE, config.moobloomMeadowSpawnWeight, config.moobloomMeadowSpawnMinGroupSize, config.moobloomMeadowSpawnMaxGroupSize); } + + if (config.enableRascal && config.enableRascalSpawn) { + BiomeModifications.addMobSpawn(FriendsAndFoesTags.HAS_RASCAL, RASCAL.get(), CustomSpawnGroup.getRascalsCategory(), 4, 1, 1); + } } public static void addMoobloomVariants() { diff --git a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesItems.java b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesItems.java index f31a12d25..14f3e60fb 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesItems.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesItems.java @@ -20,6 +20,7 @@ public final class FriendsAndFoesItems public final static Supplier ILLUSIONER_SPAWN_EGG; public final static Supplier MAULER_SPAWN_EGG; public final static Supplier MOOBLOOM_SPAWN_EGG; + public final static Supplier RASCAL_SPAWN_EGG; public final static Supplier TUFF_GOLEM_SPAWN_EGG; public final static Supplier WILDFIRE_SPAWN_EGG; public static final Supplier BUTTERCUP; @@ -58,6 +59,7 @@ public final class FriendsAndFoesItems ILLUSIONER_SPAWN_EGG = RegistryHelper.registerItem("illusioner_spawn_egg", () -> new SpawnEggItem(EntityType.ILLUSIONER, 0x603E5C, 0x888E8E, new Item.Settings().maxCount(64).group(ItemGroup.MISC))); MAULER_SPAWN_EGG = RegistryHelper.registerItem("mauler_spawn_egg", () -> new SpawnEggItem(FriendsAndFoesEntityTypes.MAULER.get(), 0x534F25, 0x817B39, new Item.Settings().maxCount(64).group(ItemGroup.MISC))); MOOBLOOM_SPAWN_EGG = RegistryHelper.registerItem("moobloom_spawn_egg", () -> new SpawnEggItem(FriendsAndFoesEntityTypes.MOOBLOOM.get(), 0xF7EDC1, 0xFACA00, new Item.Settings().maxCount(64).group(ItemGroup.MISC))); + RASCAL_SPAWN_EGG = RegistryHelper.registerSpawnEggItem("rascal_spawn_egg", FriendsAndFoesEntityTypes.RASCAL, 0x05736A, 0x8A521C, new Item.Settings().maxCount(64)); TUFF_GOLEM_SPAWN_EGG = RegistryHelper.registerItem("tuff_golem_spawn_egg", () -> new SpawnEggItem(FriendsAndFoesEntityTypes.TUFF_GOLEM.get(), 0xA0A297, 0x5D5D52, new Item.Settings().maxCount(64).group(ItemGroup.MISC))); WILDFIRE_SPAWN_EGG = RegistryHelper.registerItem("wildfire_spawn_egg", () -> new SpawnEggItem(FriendsAndFoesEntityTypes.WILDFIRE.get(), 0x6C3100, 0xFFD528, new Item.Settings().maxCount(64).group(ItemGroup.MISC))); BUTTERCUP = RegistryHelper.registerItem("buttercup", () -> new BlockItem(FriendsAndFoesBlocks.BUTTERCUP.get(), new Item.Settings().group(ItemGroup.DECORATIONS).maxCount(64))); diff --git a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesMemoryModuleTypes.java b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesMemoryModuleTypes.java index 75e3f6490..433ef2263 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesMemoryModuleTypes.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesMemoryModuleTypes.java @@ -16,12 +16,14 @@ public final class FriendsAndFoesMemoryModuleTypes public final static Supplier> WILDFIRE_SHOCKWAVE_ATTACK_COOLDOWN; public final static Supplier> WILDFIRE_SUMMON_BLAZE_COOLDOWN; public final static Supplier> TUFF_GOLEM_SLEEP_COOLDOWN; + public final static Supplier> RASCAL_NOD_COOLDOWN; static { WILDFIRE_BARRAGE_ATTACK_COOLDOWN = RegistryHelper.registerMemoryModuleType("wildfire_barrage_attack_cooldown", () -> new MemoryModuleType<>(Optional.of(Codec.INT))); WILDFIRE_SHOCKWAVE_ATTACK_COOLDOWN = RegistryHelper.registerMemoryModuleType("wildfire_shockwave_attack_cooldown", () -> new MemoryModuleType<>(Optional.of(Codec.INT))); WILDFIRE_SUMMON_BLAZE_COOLDOWN = RegistryHelper.registerMemoryModuleType("wildfire_summon_blazes_cooldown", () -> new MemoryModuleType<>(Optional.of(Codec.INT))); TUFF_GOLEM_SLEEP_COOLDOWN = RegistryHelper.registerMemoryModuleType("tuff_golem_sleep_cooldown", () -> new MemoryModuleType<>(Optional.of(Codec.INT))); + RASCAL_NOD_COOLDOWN = RegistryHelper.registerMemoryModuleType("rascal_nod_cooldown", () -> new MemoryModuleType<>(Optional.of(Codec.INT))); } public static void init() { diff --git a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesSoundEvents.java b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesSoundEvents.java index be87fb8b1..c968601ef 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesSoundEvents.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesSoundEvents.java @@ -39,6 +39,13 @@ public final class FriendsAndFoesSoundEvents public static final Supplier ENTITY_MAULER_HURT; public static final Supplier ENTITY_MOOBLOOM_CONVERT; public static final Supplier ENTITY_PLAYER_MIRROR_MOVE; + public static final Supplier ENTITY_RASCAL_AMBIENT; + public static final Supplier ENTITY_RASCAL_DISAPPEAR; + public static final Supplier ENTITY_RASCAL_HURT; + public static final Supplier ENTITY_RASCAL_NOD; + public static final Supplier ENTITY_RASCAL_REAPPEAR; + public static final Supplier ENTITY_RASCAL_REWARD; + public static final Supplier ENTITY_RASCAL_REWARD_BAD; public static final Supplier ENTITY_TUFF_GOLEM_GLUE_ON; public static final Supplier ENTITY_TUFF_GOLEM_GLUE_OFF; public static final Supplier ENTITY_TUFF_GOLEM_HURT; @@ -85,6 +92,13 @@ public final class FriendsAndFoesSoundEvents ENTITY_MAULER_HURT = register("entity", "mauler.hurt"); ENTITY_MOOBLOOM_CONVERT = register("entity", "moobloom.convert"); ENTITY_PLAYER_MIRROR_MOVE = register("entity", "player.mirror_move"); + ENTITY_RASCAL_AMBIENT = register("entity", "rascal.ambient"); + ENTITY_RASCAL_DISAPPEAR = register("entity", "rascal.disappear"); + ENTITY_RASCAL_HURT = register("entity", "rascal.hurt"); + ENTITY_RASCAL_NOD = register("entity", "rascal.nod"); + ENTITY_RASCAL_REAPPEAR = register("entity", "rascal.reappear"); + ENTITY_RASCAL_REWARD = register("entity", "rascal.reward"); + ENTITY_RASCAL_REWARD_BAD = register("entity", "rascal.reward_bad"); ENTITY_TUFF_GOLEM_GLUE_ON = register("entity", "tuff_golem.glue_on"); ENTITY_TUFF_GOLEM_GLUE_OFF = register("entity", "tuff_golem.glue_off"); ENTITY_TUFF_GOLEM_HURT = register("entity", "tuff_golem.hurt"); diff --git a/forge/src/main/java/com/faboslav/friendsandfoes/mixin/forge/AddCustomEntityPoseMixin.java b/common/src/main/java/com/faboslav/friendsandfoes/mixin/AddCustomEntityPoseMixin.java similarity index 65% rename from forge/src/main/java/com/faboslav/friendsandfoes/mixin/forge/AddCustomEntityPoseMixin.java rename to common/src/main/java/com/faboslav/friendsandfoes/mixin/AddCustomEntityPoseMixin.java index abcb8458b..094fb9a1c 100644 --- a/forge/src/main/java/com/faboslav/friendsandfoes/mixin/forge/AddCustomEntityPoseMixin.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/mixin/AddCustomEntityPoseMixin.java @@ -1,5 +1,6 @@ -package com.faboslav.friendsandfoes.mixin.forge; +package com.faboslav.friendsandfoes.mixin; +import com.faboslav.friendsandfoes.entity.pose.RascalEntityPose; import com.faboslav.friendsandfoes.entity.pose.TuffGolemEntityPose; import net.minecraft.entity.EntityPose; import org.objectweb.asm.Opcodes; @@ -44,31 +45,26 @@ private static EntityPose newEntityPose( private static void friendsandfoes_addCustomEntityPoses(CallbackInfo ci) { var entityPoses = new ArrayList<>(Arrays.asList(field_18083)); var lastEntityPose = entityPoses.get(entityPoses.size() - 1); + var nextEntityPoseIndex = lastEntityPose.ordinal(); - var tuffGolemStanding = newEntityPose( - TuffGolemEntityPose.STANDING.getName(), - lastEntityPose.ordinal() + 1 - ); - entityPoses.add(tuffGolemStanding); + for (TuffGolemEntityPose tuffGolemEntityPose : TuffGolemEntityPose.values()) { + var newEntityPose = newEntityPose( + tuffGolemEntityPose.getName(), + nextEntityPoseIndex++ + ); - var tuffGolemStandingWithItem = newEntityPose( - TuffGolemEntityPose.STANDING_WITH_ITEM.getName(), - lastEntityPose.ordinal() + 2 - ); - entityPoses.add(tuffGolemStandingWithItem); + entityPoses.add(newEntityPose); + } - var tuffGolemSleeping = newEntityPose( - TuffGolemEntityPose.SLEEPING.getName(), - lastEntityPose.ordinal() + 3 - ); - entityPoses.add(tuffGolemSleeping); + for (RascalEntityPose rascalEntityPose : RascalEntityPose.values()) { + var newEntityPose = newEntityPose( + rascalEntityPose.getName(), + nextEntityPoseIndex++ + ); - var tuffGolemSleepingWithItem = newEntityPose( - TuffGolemEntityPose.SLEEPING_WITH_ITEM.getName(), - lastEntityPose.ordinal() + 4 - ); - entityPoses.add(tuffGolemSleepingWithItem); + entityPoses.add(newEntityPose); + } field_18083 = entityPoses.toArray(new EntityPose[0]); } -} +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/mixin/BundleItemAccessor.java b/common/src/main/java/com/faboslav/friendsandfoes/mixin/BundleItemAccessor.java new file mode 100644 index 000000000..bceb37526 --- /dev/null +++ b/common/src/main/java/com/faboslav/friendsandfoes/mixin/BundleItemAccessor.java @@ -0,0 +1,16 @@ +package com.faboslav.friendsandfoes.mixin; + +import net.minecraft.item.BundleItem; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(BundleItem.class) +public interface BundleItemAccessor +{ + @Invoker("addToBundle") + int invokeAddToBundle( + ItemStack bundle, + ItemStack stack + ); +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/mixin/ChunkRegionAccessor.java b/common/src/main/java/com/faboslav/friendsandfoes/mixin/ChunkRegionAccessor.java new file mode 100644 index 000000000..03f3fde0b --- /dev/null +++ b/common/src/main/java/com/faboslav/friendsandfoes/mixin/ChunkRegionAccessor.java @@ -0,0 +1,13 @@ +package com.faboslav.friendsandfoes.mixin; + +import net.minecraft.world.ChunkRegion; +import net.minecraft.world.gen.StructureAccessor; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ChunkRegion.class) +public interface ChunkRegionAccessor +{ + @Accessor("structureAccessor") + StructureAccessor getStructureAccessor(); +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/mixin/StrongholdGeneratorMixin.java b/common/src/main/java/com/faboslav/friendsandfoes/mixin/StrongholdGeneratorMixin.java index cc05171e0..42e90000f 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/mixin/StrongholdGeneratorMixin.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/mixin/StrongholdGeneratorMixin.java @@ -95,7 +95,7 @@ private void friendsandfoes_generate( ItemStack enchantedItemStack = EnchantmentHelper.enchant( random, itemStack, - random.nextBetween(1, 3), + random.nextBetween(1, 30), true ); diff --git a/common/src/main/java/com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java b/common/src/main/java/com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java index 6d9ad33bf..2828ce98d 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java @@ -6,17 +6,29 @@ public final class CustomSpawnGroup { public static final String GLARES_INTERNAL_NAME = "GLARES"; - public static final String NAME = "glares"; - public static final int SPAWN_CAP = 15; - public static final boolean PEACEFUL = true; - public static final boolean RARE = false; - public static final int IMMEDIATE_DESPAWN_RANGE = 128; + public static final String GLARES_NAME = "glares"; + public static final int GLARES_SPAWN_CAP = 15; + public static final boolean GLARES_PEACEFUL = true; + public static final boolean GLARES_RARE = false; + public static final int GLARES_IMMEDIATE_DESPAWN_RANGE = 128; + + public static final String RASCALS_INTERNAL_NAME = "RASCALS"; + public static final String RASCALS_NAME = "rascals"; + public static final int RASCALS_SPAWN_CAP = 3; + public static final boolean RASCALS_PEACEFUL = true; + public static final boolean RASCALS_RARE = false; + public static final int RASCALS_IMMEDIATE_DESPAWN_RANGE = 128; @ExpectPlatform public static SpawnGroup getGlaresCategory() { throw new AssertionError(); } + @ExpectPlatform + public static SpawnGroup getRascalsCategory() { + throw new AssertionError(); + } + private CustomSpawnGroup() { } -} +} \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/tag/FriendsAndFoesTags.java b/common/src/main/java/com/faboslav/friendsandfoes/tag/FriendsAndFoesTags.java index 14978d4a3..0f7f70c0c 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/tag/FriendsAndFoesTags.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/tag/FriendsAndFoesTags.java @@ -32,6 +32,7 @@ public final class FriendsAndFoesTags public static final TagKey HAS_ILLUSIONER = biomeTag("has_illusioner"); public static final TagKey HAS_LESS_MOOBLOOMS = biomeTag("has_less_mooblooms"); public static final TagKey HAS_MORE_MOOBLOOMS = biomeTag("has_more_mooblooms"); + public static final TagKey HAS_RASCAL = biomeTag("has_rascal"); public static final TagKey HAS_SAVANNA_MAULER = biomeTag("has_savanna_mauler"); private static TagKey blockTag(String name) { diff --git a/common/src/main/java/com/faboslav/friendsandfoes/world/spawner/IceologerSpawner.java b/common/src/main/java/com/faboslav/friendsandfoes/world/spawner/IceologerSpawner.java index 87826b8fa..371146750 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/world/spawner/IceologerSpawner.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/world/spawner/IceologerSpawner.java @@ -43,7 +43,7 @@ public int spawn(ServerWorld world, boolean spawnMonsters, boolean spawnAnimals) if ( l < 5L || world.isDay() == false - || random.nextBetween(0, 1) != 0 + || random.nextBetween(0, 1) != 0 ) { return 0; } diff --git a/common/src/main/resources/assets/friendsandfoes/lang/en_us.json b/common/src/main/resources/assets/friendsandfoes/lang/en_us.json index 4bcf48be7..5e94b9d0c 100644 --- a/common/src/main/resources/assets/friendsandfoes/lang/en_us.json +++ b/common/src/main/resources/assets/friendsandfoes/lang/en_us.json @@ -21,12 +21,16 @@ "advancements.nether.find_citadel.description": "Enter a Nether citadel", "advancements.nether.kill_wildfire.title": "Drop it like it's hot", "advancements.nether.kill_wildfire.description": "Kill the wildfire", - "advancements.nether.obtain_wildfire_crown.title": "Who's da New King of Hell", + "advancements.nether.obtain_wildfire_crown.title": "Who's da New King of Hell?", "advancements.nether.obtain_wildfire_crown.description": "Have a wildfire crown in your inventory", + "advancements.adventure.complete_hide_and_seek_game.title": "Hide and Seek", + "advancements.adventure.complete_hide_and_seek_game.description": "Find a rascal three times in its little game", "block.friendsandfoes.buttercup": "Buttercup", "block.minecraft.beehive": "Oak Beehive", "block.friendsandfoes.acacia_beehive": "Acacia Beehive", + "block.friendsandfoes.bamboo_beehive": "Bamboo Beehive", "block.friendsandfoes.birch_beehive": "Birch Beehive", + "block.friendsandfoes.cherry_beehive": "Cherry Beehive", "block.friendsandfoes.crimson_beehive": "Crimson Beehive", "block.friendsandfoes.dark_oak_beehive": "Dark Oak Beehive", "block.friendsandfoes.jungle_beehive": "Jungle Beehive", @@ -65,6 +69,7 @@ "item.friendsandfoes.illusioner_spawn_egg": "Illusioner Spawn Egg", "item.friendsandfoes.mauler_spawn_egg": "Mauler Spawn Egg", "item.friendsandfoes.moobloom_spawn_egg": "Moobloom Spawn Egg", + "item.friendsandfoes.rascal_spawn_egg": "Rascal Spawn Egg", "item.friendsandfoes.tuff_golem_spawn_egg": "Tuff Golem Spawn Egg", "item.friendsandfoes.wildfire_spawn_egg": "Wildfire Spawn Egg", "item.friendsandfoes.totem_of_freezing": "Totem of Freezing", @@ -98,6 +103,13 @@ "subtitle.entity.friendsandfoes.mauler.hurt": "Mauler hurts", "subtitle.entity.friendsandfoes.moobloom.convert": "Moobloom transforms", "subtitle.entity.friendsandfoes.player.mirror_move": "Player displaces", + "subtitle.entity.friendsandfoes.rascal.ambient": "Rascal taunts", + "subtitle.entity.friendsandfoes.rascal.disappear": "Rascal disappears", + "subtitle.entity.friendsandfoes.rascal.nod": "Rascal nods", + "subtitle.entity.friendsandfoes.rascal.hurt": "Rascal hurts", + "subtitle.entity.friendsandfoes.rascal.reappear": "Rascal appears", + "subtitle.entity.friendsandfoes.rascal.reward": "Rascal gives reward", + "subtitle.entity.friendsandfoes.rascal.reward_bad": "Rascal gives bad reward", "subtitle.entity.friendsandfoes.shield_debris.impact": "Shield debris impacted", "subtitle.entity.friendsandfoes.tuff_golem.glue_on": "Tuff Golem glued", "subtitle.entity.friendsandfoes.tuff_golem.glue_off": "Tuff Golem unglued", diff --git a/common/src/main/resources/assets/friendsandfoes/models/item/ rascal_spawn_egg.json b/common/src/main/resources/assets/friendsandfoes/models/item/ rascal_spawn_egg.json new file mode 100644 index 000000000..debcb565c --- /dev/null +++ b/common/src/main/resources/assets/friendsandfoes/models/item/ rascal_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/friendsandfoes/sounds.json b/common/src/main/resources/assets/friendsandfoes/sounds.json index acbea69fd..edf849cd3 100644 --- a/common/src/main/resources/assets/friendsandfoes/sounds.json +++ b/common/src/main/resources/assets/friendsandfoes/sounds.json @@ -181,7 +181,64 @@ "friendsandfoes:entity/player/mirror_move1", "friendsandfoes:entity/player/mirror_move2" ], - "subtitle": "subtitle.entity.friendsandfoes.moobloom.convert" + "subtitle": "subtitle.entity.friendsandfoes.player.mirror_move" + }, + "entity.rascal.ambient": { + "sounds": [ + "friendsandfoes:entity/rascal/ambient1", + "friendsandfoes:entity/rascal/ambient2", + "friendsandfoes:entity/rascal/ambient3", + "friendsandfoes:entity/rascal/ambient4", + "friendsandfoes:entity/rascal/ambient5" + ], + "subtitle": "subtitle.entity.friendsandfoes.rascal.ambient" + }, + "entity.rascal.disappear": { + "sounds": [ + "friendsandfoes:entity/rascal/disappear1", + "friendsandfoes:entity/rascal/disappear2" + ], + "subtitle": "subtitle.entity.friendsandfoes.rascal.disappear" + }, + "entity.rascal.hurt": { + "sounds": [ + "friendsandfoes:entity/rascal/hurt1", + "friendsandfoes:entity/rascal/hurt2", + "friendsandfoes:entity/rascal/hurt3", + "friendsandfoes:entity/rascal/hurt4" + ], + "subtitle": "subtitle.entity.friendsandfoes.rascal.hurt" + }, + "entity.rascal.nod": { + "sounds": [ + "friendsandfoes:entity/rascal/nod1", + "friendsandfoes:entity/rascal/nod2", + "friendsandfoes:entity/rascal/nod3", + "friendsandfoes:entity/rascal/nod4" + ], + "subtitle": "subtitle.entity.friendsandfoes.rascal.nod" + }, + "entity.rascal.reappear": { + "sounds": [ + "friendsandfoes:entity/rascal/reappear1", + "friendsandfoes:entity/rascal/reappear2" + ], + "subtitle": "subtitle.entity.friendsandfoes.rascal.reappear" + }, + "entity.rascal.reward": { + "sounds": [ + "friendsandfoes:entity/rascal/reward1", + "friendsandfoes:entity/rascal/reward2" + ], + "subtitle": "subtitle.entity.friendsandfoes.rascal.reward" + }, + "entity.rascal.reward_bad": { + "sounds": [ + "friendsandfoes:entity/rascal/reward_bad1", + "friendsandfoes:entity/rascal/reward_bad2", + "friendsandfoes:entity/rascal/reward_bad3" + ], + "subtitle": "subtitle.entity.friendsandfoes.rascal.reward_bad" }, "entity.tuff_golem.glue_on": { "sounds": [ diff --git a/common/src/main/resources/friendsandfoes-common.mixins.json b/common/src/main/resources/friendsandfoes-common.mixins.json index 11e7bbfdc..6b15a49dd 100644 --- a/common/src/main/resources/friendsandfoes-common.mixins.json +++ b/common/src/main/resources/friendsandfoes-common.mixins.json @@ -8,6 +8,7 @@ }, "mixins": [ "AbstractButtonBlockMixin", + "AddCustomEntityPoseMixin", "AxeItemMixin", "BeeEntityAccessor", "BeeEntityMixin", @@ -16,6 +17,7 @@ "BlazeEntityMixin", "BlazeLivingEntityMixin", "BlindTargetGoalFactory", + "BundleItemAccessor", "CarvedPumpkinBlockMixin", "ChickenEntityMixin", "HoneycombItemMixin", diff --git a/fabric/src/main/java/com/faboslav/friendsandfoes/mixin/fabric/AddCustomEntityPoseMixin.java b/fabric/src/main/java/com/faboslav/friendsandfoes/mixin/fabric/AddCustomEntityPoseMixin.java deleted file mode 100644 index 77511df9c..000000000 --- a/fabric/src/main/java/com/faboslav/friendsandfoes/mixin/fabric/AddCustomEntityPoseMixin.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.faboslav.friendsandfoes.mixin.fabric; - -import com.faboslav.friendsandfoes.entity.pose.TuffGolemEntityPose; -import net.minecraft.entity.EntityPose; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.gen.Invoker; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.ArrayList; -import java.util.Arrays; - -@Mixin(EntityPose.class) -@SuppressWarnings({"ShadowTarget", "InvokerTarget"}) -public final class AddCustomEntityPoseMixin -{ - @Invoker("") - private static EntityPose newEntityPose( - String internalName, - int internalId - ) { - throw new AssertionError(); - } - - @Shadow - private static @Final - @Mutable - EntityPose[] field_18083; - - @Inject( - method = "", - at = @At( - value = "FIELD", - opcode = Opcodes.PUTSTATIC, - target = "Lnet/minecraft/entity/EntityPose;field_18083:[Lnet/minecraft/entity/EntityPose;", - shift = At.Shift.AFTER - ) - ) - private static void friendsandfoes_addCustomEntityPoses(CallbackInfo ci) { - var entityPoses = new ArrayList<>(Arrays.asList(field_18083)); - var lastEntityPose = entityPoses.get(entityPoses.size() - 1); - - var tuffGolemStanding = newEntityPose( - TuffGolemEntityPose.STANDING.getName(), - lastEntityPose.ordinal() + 1 - ); - entityPoses.add(tuffGolemStanding); - - var tuffGolemStandingWithItem = newEntityPose( - TuffGolemEntityPose.STANDING_WITH_ITEM.getName(), - lastEntityPose.ordinal() + 2 - ); - entityPoses.add(tuffGolemStandingWithItem); - - var tuffGolemSleeping = newEntityPose( - TuffGolemEntityPose.SLEEPING.getName(), - lastEntityPose.ordinal() + 3 - ); - entityPoses.add(tuffGolemSleeping); - - var tuffGolemSleepingWithItem = newEntityPose( - TuffGolemEntityPose.SLEEPING_WITH_ITEM.getName(), - lastEntityPose.ordinal() + 4 - ); - entityPoses.add(tuffGolemSleepingWithItem); - - field_18083 = entityPoses.toArray(new EntityPose[0]); - } -} diff --git a/fabric/src/main/resources/friendsandfoes.mixins.json b/fabric/src/main/resources/friendsandfoes.mixins.json index b3da463ee..9b19e2178 100644 --- a/fabric/src/main/resources/friendsandfoes.mixins.json +++ b/fabric/src/main/resources/friendsandfoes.mixins.json @@ -7,7 +7,6 @@ "defaultRequire": 1 }, "mixins": [ - "AddCustomEntityPoseMixin", "AddCustomRaidMemberMixin", "AddCustomSpawnGroupMixin", "StructureEntityProcessorMixin" diff --git a/forge/src/main/resources/friendsandfoes.mixins.json b/forge/src/main/resources/friendsandfoes.mixins.json index 147f95e2b..d26448435 100644 --- a/forge/src/main/resources/friendsandfoes.mixins.json +++ b/forge/src/main/resources/friendsandfoes.mixins.json @@ -7,7 +7,6 @@ "defaultRequire": 1 }, "mixins": [ - "AddCustomEntityPoseMixin", "FireBlockAccessor" ], "plugin": "com.faboslav.friendsandfoes.util.plugin.MixinExtrasPlugin" From 57816b91f27c9147b330c737ce2ebc8aad5c480d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1=20Fabi=C3=A1nek?= Date: Thu, 12 Oct 2023 21:55:10 +0200 Subject: [PATCH 2/6] Port? --- .../CompleteHideAndSeekGameCriterion.java | 14 ++-- .../entity/model/CopperGolemEntityModel.java | 2 +- .../render/entity/model/GlareEntityModel.java | 4 +- .../entity/model/MaulerEntityModel.java | 8 +- .../friendsandfoes/entity/GlareEntity.java | 2 +- .../friendsandfoes/entity/RascalEntity.java | 10 +-- .../entity/TuffGolemEntity.java | 6 +- .../entity/ai/brain/RascalBrain.java | 10 +-- .../RascalFindInteractionTargetTask.java | 74 ++++++++++++------ .../task/rascal/RascalWaitForPlayerTask.java | 20 ++--- .../wildfire/WildfireSummonBlazeTask.java | 2 +- .../init/FriendsAndFoesItems.java | 2 +- .../sounds/entity/rascal/ambient1.ogg | Bin 0 -> 6719 bytes .../sounds/entity/rascal/ambient2.ogg | Bin 0 -> 6879 bytes .../sounds/entity/rascal/ambient3.ogg | Bin 0 -> 8366 bytes .../sounds/entity/rascal/ambient4.ogg | Bin 0 -> 7000 bytes .../sounds/entity/rascal/ambient5.ogg | Bin 0 -> 5690 bytes .../sounds/entity/rascal/disappear1.ogg | Bin 0 -> 22762 bytes .../sounds/entity/rascal/disappear2.ogg | Bin 0 -> 28999 bytes .../sounds/entity/rascal/hurt1.ogg | Bin 0 -> 4909 bytes .../sounds/entity/rascal/hurt2.ogg | Bin 0 -> 5064 bytes .../sounds/entity/rascal/hurt3.ogg | Bin 0 -> 5814 bytes .../sounds/entity/rascal/hurt4.ogg | Bin 0 -> 6554 bytes .../sounds/entity/rascal/hurt5.ogg | Bin 0 -> 6172 bytes .../sounds/entity/rascal/nod1.ogg | Bin 0 -> 9727 bytes .../sounds/entity/rascal/nod2.ogg | Bin 0 -> 9751 bytes .../sounds/entity/rascal/nod3.ogg | Bin 0 -> 9250 bytes .../sounds/entity/rascal/nod4.ogg | Bin 0 -> 10210 bytes .../sounds/entity/rascal/reappear1.ogg | Bin 0 -> 35041 bytes .../sounds/entity/rascal/reappear2.ogg | Bin 0 -> 26562 bytes .../sounds/entity/rascal/reward1.ogg | Bin 0 -> 5090 bytes .../sounds/entity/rascal/reward2.ogg | Bin 0 -> 6339 bytes .../sounds/entity/rascal/reward_bad1.ogg | Bin 0 -> 7484 bytes .../sounds/entity/rascal/reward_bad2.ogg | Bin 0 -> 7290 bytes .../sounds/entity/rascal/reward_bad3.ogg | Bin 0 -> 6289 bytes .../textures/entity/rascal/rascal.png | Bin 0 -> 824 bytes .../complete_hide_and_seek_game.json | 33 ++++++++ .../loot_tables/entities/rascal.json | 4 + .../rewards/rascal_good_reward.json | 55 +++++++++++++ .../tags/worldgen/biome/has_rascal.json | 6 ++ .../fabric/AddCustomSpawnGroupMixin.java | 22 ++++-- .../platform/fabric/CustomSpawnGroupImpl.java | 11 ++- .../platform/forge/CustomSpawnGroupImpl.java | 38 +++++++-- .../forge/biome_modifier/rascal.json | 11 +++ 44 files changed, 256 insertions(+), 78 deletions(-) create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient1.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient2.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient3.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient4.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient5.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/disappear1.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/disappear2.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/hurt1.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/hurt2.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/hurt3.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/hurt4.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/hurt5.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/nod1.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/nod2.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/nod3.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/nod4.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reappear1.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reappear2.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward1.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward2.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward_bad1.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward_bad2.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward_bad3.ogg create mode 100644 common/src/main/resources/assets/friendsandfoes/textures/entity/rascal/rascal.png create mode 100644 common/src/main/resources/data/friendsandfoes/advancements/adventure/complete_hide_and_seek_game.json create mode 100644 common/src/main/resources/data/friendsandfoes/loot_tables/entities/rascal.json create mode 100644 common/src/main/resources/data/friendsandfoes/loot_tables/rewards/rascal_good_reward.json create mode 100644 common/src/main/resources/data/friendsandfoes/tags/worldgen/biome/has_rascal.json create mode 100644 forge/src/main/resources/data/friendsandfoes/forge/biome_modifier/rascal.json diff --git a/common/src/main/java/com/faboslav/friendsandfoes/advancements/criterion/CompleteHideAndSeekGameCriterion.java b/common/src/main/java/com/faboslav/friendsandfoes/advancements/criterion/CompleteHideAndSeekGameCriterion.java index ae406ae1a..83f38d587 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/advancements/criterion/CompleteHideAndSeekGameCriterion.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/advancements/criterion/CompleteHideAndSeekGameCriterion.java @@ -9,7 +9,7 @@ import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; import net.minecraft.predicate.entity.EntityPredicate; -import net.minecraft.predicate.entity.LootContextPredicate; +import net.minecraft.predicate.entity.EntityPredicate.Extended; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; @@ -26,10 +26,10 @@ public Identifier getId() { public CompleteHideAndSeekGameCriterion.Conditions conditionsFromJson( JsonObject jsonObject, - LootContextPredicate extended, + Extended extended, AdvancementEntityPredicateDeserializer advancementEntityPredicateDeserializer ) { - LootContextPredicate extended2 = EntityPredicate.contextPredicateFromJson(jsonObject, "rascal", advancementEntityPredicateDeserializer); + Extended extended2 = Extended.getInJson(jsonObject, "rascal", advancementEntityPredicateDeserializer); return new CompleteHideAndSeekGameCriterion.Conditions(extended, extended2); } @@ -43,19 +43,19 @@ public void trigger(ServerPlayerEntity player, RascalEntity entity) { public static class Conditions extends AbstractCriterionConditions { - private final LootContextPredicate entity; + private final Extended entity; - public Conditions(LootContextPredicate player, LootContextPredicate entity) { + public Conditions(Extended player, Extended entity) { super(CompleteHideAndSeekGameCriterion.ID, player); this.entity = entity; } public static CompleteHideAndSeekGameCriterion.Conditions any() { - return new CompleteHideAndSeekGameCriterion.Conditions(LootContextPredicate.EMPTY, LootContextPredicate.EMPTY); + return new CompleteHideAndSeekGameCriterion.Conditions(Extended.EMPTY, Extended.EMPTY); } public static CompleteHideAndSeekGameCriterion.Conditions create(EntityPredicate entity) { - return new CompleteHideAndSeekGameCriterion.Conditions(LootContextPredicate.EMPTY, EntityPredicate.asLootContextPredicate(entity)); + return new CompleteHideAndSeekGameCriterion.Conditions(Extended.EMPTY, Extended.ofLegacy(entity)); } public boolean matches(LootContext entityContext) { diff --git a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/CopperGolemEntityModel.java b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/CopperGolemEntityModel.java index ba876258b..342ac4a55 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/CopperGolemEntityModel.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/CopperGolemEntityModel.java @@ -132,7 +132,7 @@ public void setAngles( float rodPivotY = defaultRodPivotY + AnimationMath.absSin(animationProgress, 1.0F, 0.25F); this.animateModelPartYPositionBasedOnProgress(copperGolem, this.rod, rodPivotY, AnimationMath.absSin(animationProgress)); } else { - this.animateModelPartYPositionBasedOnTicks(copperGolem, this.rod, defaultRodPivotY, 10); + animateModelPartYPositionBasedOnTicks(copperGolem, this.rod, defaultRodPivotY, 10); } } diff --git a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/GlareEntityModel.java b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/GlareEntityModel.java index 32d551e8a..bfc0e38d8 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/GlareEntityModel.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/GlareEntityModel.java @@ -138,14 +138,14 @@ private void animateHead( ModelPartAnimator.setYRotation(this.root, AnimationMath.sin(animationProgress, 0.05F)); } else { float targetPivotY = glare.isSitting() ? 3.0F:0.0F; - this.animateModelPartYPositionBasedOnTicks(glare, this.root, targetPivotY, 10); + animateModelPartYPositionBasedOnTicks(glare, this.root, targetPivotY, 10); } } private void animateEyes(T glare) { Vec2f targetEyesPositionOffset = glare.getTargetEyesPositionOffset(); - this.animateModelPartPositionBasedOnTicks( + animateModelPartPositionBasedOnTicks( glare, this.eyes, this.eyes.pivotX + targetEyesPositionOffset.x, diff --git a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/MaulerEntityModel.java b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/MaulerEntityModel.java index c8f46abeb..3c94a2fe2 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/MaulerEntityModel.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/model/MaulerEntityModel.java @@ -113,11 +113,11 @@ public void setAngles( ) { float targetX = AnimationMath.toRadians(5) + AnimationMath.toRadians(-65) * AnimationMath.absSin(animationProgress, 1.0F, 0.35F); float delta = AnimationMath.absSin(animationProgress); - this.animateModelPartXRotationBasedOnProgress(mauler, this.upperJaw, targetX, delta); - this.animateModelPartXRotationBasedOnTicks(mauler, this.lowerJaw, AnimationMath.toRadians(-5), 10); + animateModelPartXRotationBasedOnProgress(mauler, this.upperJaw, targetX, delta); + animateModelPartXRotationBasedOnTicks(mauler, this.lowerJaw, AnimationMath.toRadians(-5), 10); } else { - this.animateModelPartXRotationBasedOnTicks(mauler, this.upperJaw, 0.0F, 10); - this.animateModelPartXRotationBasedOnTicks(mauler, this.lowerJaw, 0.0F, 10); + animateModelPartXRotationBasedOnTicks(mauler, this.upperJaw, 0.0F, 10); + animateModelPartXRotationBasedOnTicks(mauler, this.lowerJaw, 0.0F, 10); } } } \ No newline at end of file diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/GlareEntity.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/GlareEntity.java index dd2ba6434..43d2f8ad3 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/GlareEntity.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/GlareEntity.java @@ -273,7 +273,7 @@ private void updateTargetEyesPositionOffset() { } this.setTargetEyesPositionOffset( - -0.5F + this.getRandom().nextFloat() * (0.5F - -0.5F), + -0.5F + this.getRandom().nextFloat(), -0.4F + this.getRandom().nextFloat() * (0.4F - -0.4F) ); } diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java index ea30f1382..ff0924f03 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java @@ -29,9 +29,9 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; -import net.minecraft.registry.tag.StructureTags; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundEvent; +import net.minecraft.tag.StructureTags; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.util.math.random.Random; @@ -100,9 +100,7 @@ public static boolean canSpawn( return false; } - if (blockPos.getY() < 63 && serverWorldAccess.isSkyVisible(blockPos) == false) { - return true; - } + return blockPos.getY() < 63 && serverWorldAccess.isSkyVisible(blockPos) == false; } return false; @@ -373,7 +371,7 @@ protected void playStepSound( ) { if ( this.isHidden() - || state.isLiquid() + || state.getMaterial().isLiquid() ) { return; } @@ -382,7 +380,7 @@ protected void playStepSound( } public boolean isHidden() { - return this.getBrain().getOptionalRegisteredMemory(MemoryModuleType.AVOID_TARGET).orElse(null) instanceof PlayerEntity; + return this.getBrain().getOptionalMemory(MemoryModuleType.AVOID_TARGET).orElse(null) instanceof PlayerEntity; } public int getCaughtCount() { diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/TuffGolemEntity.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/TuffGolemEntity.java index 9b810cb71..b62a1f2fb 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/TuffGolemEntity.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/TuffGolemEntity.java @@ -28,11 +28,11 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; -import net.minecraft.registry.tag.BlockTags; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvents; +import net.minecraft.tag.BlockTags; import net.minecraft.util.ActionResult; import net.minecraft.util.DyeColor; import net.minecraft.util.Hand; @@ -292,7 +292,7 @@ protected void playStepSound( ) { if ( this.isInSleepingPose() - || state.isLiquid() + || state.getMaterial().isLiquid() ) { return; } @@ -707,7 +707,7 @@ public boolean damage( if ( attacker == null || attacker instanceof LightningEntity - || source == this.getDamageSources().sweetBerryBush() + || source == DamageSource.SWEET_BERRY_BUSH ) { return false; } diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/RascalBrain.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/RascalBrain.java index 03ca550ab..a4cf2ed32 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/RascalBrain.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/RascalBrain.java @@ -65,7 +65,7 @@ private static void addIdleActivities(Brain brain) { brain.setTaskList( Activity.IDLE, ImmutableList.of( - Pair.of(0, RascalFindInteractionTargetTask.create(6)), + Pair.of(0, new RascalFindInteractionTargetTask(6)), Pair.of(0, makeRandomWanderTask()) ) ); @@ -88,7 +88,7 @@ private static void addAvoidActivities(Brain brain) { Activity.AVOID, 10, ImmutableList.of( - GoToRememberedPositionTask.createEntityBased(MemoryModuleType.AVOID_TARGET, 1.0F, 32, true) + GoToRememberedPositionTask.toEntity(MemoryModuleType.AVOID_TARGET, 1.0F, 32, true) ), MemoryModuleType.AVOID_TARGET ); @@ -107,7 +107,7 @@ public static void updateActivities(RascalEntity rascal) { private static RandomTask makeRandomWanderTask() { return new RandomTask( ImmutableList.of( - Pair.of(StrollTask.create(0.6F), 2), + Pair.of(new StrollTask(0.6F), 2), Pair.of(new WaitTask(30, 60), 1) ) ); @@ -119,7 +119,7 @@ public static void setNodCooldown(RascalEntity rascal) { } public static boolean shouldRunAway(RascalEntity rascal) { - return rascal.getBrain().getOptionalRegisteredMemory(FriendsAndFoesMemoryModuleTypes.RASCAL_NOD_COOLDOWN.get()).isPresent(); + return rascal.getBrain().getOptionalMemory(FriendsAndFoesMemoryModuleTypes.RASCAL_NOD_COOLDOWN.get()).isPresent(); } public static void onCooldown(RascalEntity rascal) { @@ -131,7 +131,7 @@ public static void onCooldown(RascalEntity rascal) { return; } - LivingEntity nearestTarget = rascal.getBrain().getOptionalRegisteredMemory(MemoryModuleType.INTERACTION_TARGET).orElse(null); + LivingEntity nearestTarget = rascal.getBrain().getOptionalMemory(MemoryModuleType.INTERACTION_TARGET).orElse(null); if (nearestTarget == null) { return; diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalFindInteractionTargetTask.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalFindInteractionTargetTask.java index 76d5c06d4..23db0beff 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalFindInteractionTargetTask.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalFindInteractionTargetTask.java @@ -1,34 +1,62 @@ package com.faboslav.friendsandfoes.entity.ai.brain.task.rascal; +import com.google.common.collect.ImmutableMap; +import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.brain.EntityLookTarget; -import net.minecraft.entity.ai.brain.MemoryModuleType; +import net.minecraft.entity.ai.brain.*; import net.minecraft.entity.ai.brain.task.Task; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.world.ServerWorld; -import java.util.Optional; +import java.util.function.Predicate; -public final class RascalFindInteractionTargetTask +public class RascalFindInteractionTargetTask extends Task { - public static Task create(int maxDistance) { - int squaredMaxDistance = maxDistance * maxDistance; - return TaskTriggerer.task((context) -> { - return context.group(context.queryMemoryOptional(MemoryModuleType.LOOK_TARGET), context.queryMemoryAbsent(MemoryModuleType.INTERACTION_TARGET), context.queryMemoryValue(MemoryModuleType.VISIBLE_MOBS)).apply(context, (lookTarget, interactionTarget, visibleMobs) -> { - return (world, entity, time) -> { - Optional optional = context.getValue(visibleMobs).findFirst((target) -> { - return target.squaredDistanceTo(entity) <= (double) squaredMaxDistance && target instanceof PlayerEntity && !target.isSpectator() && !((PlayerEntity) target).isCreative(); - }); - - if (optional.isEmpty()) { - return false; - } else { - LivingEntity livingEntity = optional.get(); - interactionTarget.remember(livingEntity); - lookTarget.remember(new EntityLookTarget(livingEntity, true)); - return true; - } - }; + private final int maxSquaredDistance; + private final Predicate predicate; + private final Predicate shouldRunPredicate; + + public RascalFindInteractionTargetTask( + int maxDistance, + Predicate shouldRunPredicate, + Predicate predicate + ) { + super(ImmutableMap.of(MemoryModuleType.LOOK_TARGET, MemoryModuleState.REGISTERED, MemoryModuleType.INTERACTION_TARGET, MemoryModuleState.VALUE_ABSENT, MemoryModuleType.VISIBLE_MOBS, MemoryModuleState.VALUE_PRESENT)); + this.maxSquaredDistance = maxDistance * maxDistance; + this.predicate = predicate; + this.shouldRunPredicate = shouldRunPredicate; + } + + public RascalFindInteractionTargetTask(int maxDistance) { + this(maxDistance, (livingEntity) -> { + return true; + }, (livingEntity) -> { + return true; + }); + } + + public boolean shouldRun(ServerWorld world, LivingEntity entity) { + return this.shouldRunPredicate.test(entity) && this.getVisibleMobs(entity).anyMatch(this::test); + } + + public void run(ServerWorld world, LivingEntity entity, long time) { + super.run(world, entity, time); + Brain brain = entity.getBrain(); + brain.getOptionalMemory(MemoryModuleType.VISIBLE_MOBS).flatMap((livingTargetCache) -> { + return livingTargetCache.findFirst((target) -> { + return target.squaredDistanceTo(entity) <= (double) this.maxSquaredDistance && target instanceof PlayerEntity && !target.isSpectator() && !((PlayerEntity) target).isCreative(); }); + }).ifPresent((target) -> { + brain.remember(MemoryModuleType.INTERACTION_TARGET, target); + brain.remember(MemoryModuleType.LOOK_TARGET, new EntityLookTarget(target, true)); }); } -} \ No newline at end of file + + private boolean test(LivingEntity entity) { + return EntityType.PLAYER.equals(entity.getType()) && this.predicate.test(entity); + } + + private LivingTargetCache getVisibleMobs(LivingEntity entity) { + return entity.getBrain().getOptionalMemory(MemoryModuleType.VISIBLE_MOBS).get(); + } +} diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalWaitForPlayerTask.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalWaitForPlayerTask.java index 86117edcc..1107da336 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalWaitForPlayerTask.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalWaitForPlayerTask.java @@ -13,7 +13,7 @@ import net.minecraft.entity.ai.brain.MemoryModuleState; import net.minecraft.entity.ai.brain.MemoryModuleType; import net.minecraft.entity.ai.brain.task.LookTargetUtil; -import net.minecraft.entity.ai.brain.task.MultiTickTask; +import net.minecraft.entity.ai.brain.task.Task; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.player.PlayerEntity; @@ -21,18 +21,18 @@ import net.minecraft.item.Items; import net.minecraft.loot.LootManager; import net.minecraft.loot.LootTable; -import net.minecraft.loot.context.LootContextParameterSet; +import net.minecraft.loot.context.LootContext; import net.minecraft.loot.context.LootContextParameters; import net.minecraft.loot.context.LootContextTypes; -import net.minecraft.registry.tag.StructureTags; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; +import net.minecraft.tag.StructureTags; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.world.gen.StructureAccessor; -public final class RascalWaitForPlayerTask extends MultiTickTask +public final class RascalWaitForPlayerTask extends Task { private final static int NOD_DURATION = 90; public final static float NOD_RANGE = 4F; @@ -54,10 +54,10 @@ protected boolean shouldRun(ServerWorld world, RascalEntity rascal) { return false; } - LivingEntity nearestTarget = rascal.getBrain().getOptionalRegisteredMemory(MemoryModuleType.NEAREST_VISIBLE_TARGETABLE_PLAYER).orElse(null); + LivingEntity nearestTarget = rascal.getBrain().getOptionalMemory(MemoryModuleType.NEAREST_VISIBLE_TARGETABLE_PLAYER).orElse(null); if (nearestTarget == null) { - nearestTarget = rascal.getBrain().getOptionalRegisteredMemory(MemoryModuleType.INTERACTION_TARGET).orElse(null); + nearestTarget = rascal.getBrain().getOptionalMemory(MemoryModuleType.INTERACTION_TARGET).orElse(null); } if ( @@ -124,12 +124,12 @@ protected void keepRunning(ServerWorld world, RascalEntity rascal, long time) { LootManager lootManager = world.getServer().getLootManager(); if (lootManager != null) { - LootTable rascalGoodItemsLootTable = lootManager.getLootTable( + LootTable rascalGoodItemsLootTable = lootManager.getTable( FriendsAndFoes.makeID("rewards/rascal_good_reward") ); - LootContextParameterSet lootContextParameterSet = new LootContextParameterSet.Builder(world) - .add(LootContextParameters.ORIGIN, targetPos) - .add(LootContextParameters.THIS_ENTITY, this.nearestTarget) + LootContext lootContextParameterSet = new LootContext.Builder(world) + .parameter(LootContextParameters.ORIGIN, targetPos) + .parameter(LootContextParameters.THIS_ENTITY, this.nearestTarget) .build(LootContextTypes.GIFT); ObjectArrayList rascalGoodRewards = rascalGoodItemsLootTable.generateLoot(lootContextParameterSet); diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/wildfire/WildfireSummonBlazeTask.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/wildfire/WildfireSummonBlazeTask.java index 466ac0cea..e5a5c2043 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/wildfire/WildfireSummonBlazeTask.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/wildfire/WildfireSummonBlazeTask.java @@ -47,7 +47,7 @@ protected boolean shouldRun(ServerWorld world, WildfireEntity wildfire) { || ((PlayerEntity) attackTarget).isCreative() ) ) - || wildfire.getSummonedBlazesCount() == wildfire.MAXIMUM_SUMMONED_BLAZES_COUNT + || wildfire.getSummonedBlazesCount() == WildfireEntity.MAXIMUM_SUMMONED_BLAZES_COUNT ) { WildfireBrain.setSummonBlazeCooldown(wildfire); return false; diff --git a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesItems.java b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesItems.java index 14f3e60fb..44151872d 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesItems.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/init/FriendsAndFoesItems.java @@ -59,7 +59,7 @@ public final class FriendsAndFoesItems ILLUSIONER_SPAWN_EGG = RegistryHelper.registerItem("illusioner_spawn_egg", () -> new SpawnEggItem(EntityType.ILLUSIONER, 0x603E5C, 0x888E8E, new Item.Settings().maxCount(64).group(ItemGroup.MISC))); MAULER_SPAWN_EGG = RegistryHelper.registerItem("mauler_spawn_egg", () -> new SpawnEggItem(FriendsAndFoesEntityTypes.MAULER.get(), 0x534F25, 0x817B39, new Item.Settings().maxCount(64).group(ItemGroup.MISC))); MOOBLOOM_SPAWN_EGG = RegistryHelper.registerItem("moobloom_spawn_egg", () -> new SpawnEggItem(FriendsAndFoesEntityTypes.MOOBLOOM.get(), 0xF7EDC1, 0xFACA00, new Item.Settings().maxCount(64).group(ItemGroup.MISC))); - RASCAL_SPAWN_EGG = RegistryHelper.registerSpawnEggItem("rascal_spawn_egg", FriendsAndFoesEntityTypes.RASCAL, 0x05736A, 0x8A521C, new Item.Settings().maxCount(64)); + RASCAL_SPAWN_EGG = RegistryHelper.registerItem("rascal_spawn_egg", () -> new SpawnEggItem(FriendsAndFoesEntityTypes.RASCAL.get(), 0x05736A, 0x8A521C, new Item.Settings().maxCount(64).group(ItemGroup.MISC))); TUFF_GOLEM_SPAWN_EGG = RegistryHelper.registerItem("tuff_golem_spawn_egg", () -> new SpawnEggItem(FriendsAndFoesEntityTypes.TUFF_GOLEM.get(), 0xA0A297, 0x5D5D52, new Item.Settings().maxCount(64).group(ItemGroup.MISC))); WILDFIRE_SPAWN_EGG = RegistryHelper.registerItem("wildfire_spawn_egg", () -> new SpawnEggItem(FriendsAndFoesEntityTypes.WILDFIRE.get(), 0x6C3100, 0xFFD528, new Item.Settings().maxCount(64).group(ItemGroup.MISC))); BUTTERCUP = RegistryHelper.registerItem("buttercup", () -> new BlockItem(FriendsAndFoesBlocks.BUTTERCUP.get(), new Item.Settings().group(ItemGroup.DECORATIONS).maxCount(64))); diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient1.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ad2fe22d49ad566f5169cbb45ad0fa0c325aa09a GIT binary patch literal 6719 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient2.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c04118c545933d497d0981b9b38f0532b63979ae GIT binary patch literal 6879 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

a?V>dSW94S`G98cU)(CGM zL*vbVC6o?7^$s9Wi&T2K4D<^6EU56{OE*=LUW9QafohtJIr zc=Xr}Oe5@&v+0kR6DGC-V1;jYYp%_EUHf&hMRW>5&lz=Bb<=V8FgNuF(qud7iW(hlcYqbB0L>H|KR9y~3 zZX@==;9!jtnZ^Uh8^?5Vz}*VNg&j;{#)mQ^Onbk65RF~Inu|2t6|}v*dtkdI$^Akn z^@8Y1qpH7z^fM>-Ya>oADuI2CBW-tYwydk&ihSOuA%c=`*=^j}F@O5)JDcIF4me9Z z_aCDC<||CX?ubuL6t2`*=5RwjMqQWV4UXJyFZxbszteutM2kHye^Z}V#0w7Pg-!3h z6*mE!UUr=mkO{Sl#-nlfd^`{e*9RCq6cIlCpqJV9ap1*_;0V5uU-H%V3Hs%n{3&ul zHaGMGLwl~*Ba>HWwZ*T^x4ba*3WzjQc|R_($PDkFvf4}uwALf|Y4W4TXTtRE^xYGltiT-cT$9(9+TO)>2I+#Fk<`!+EynyL) zpdwn?fGq@R_{fWV9zo{S_*PsOpS$zYlw`=D7#GgO;k10)Eqtw`@aXo#7G8sIYCkAX z{7e-u(+RGuz$b#wS6h77?zcs;B_Eh0aby-IDTSx&-PfVGVOV|hUyY=Q#0rcigK(=U zJUD`7d`f#Ga?4QS!j$iFvjGm%>2WY{?$cI{!r@oE0CDX8NNHutIgN{MkuPtO%TKK| z@4jJrbo9YQn!cCB&v@f&WuX`CPhGEluNlG&`J&&v;8tMDrTpi%K9ZhvK+XJ6dAj(w z>BzO5T4zUak%qex)?a#ZPMaR?^`V*0Ro6Ly-f}1(-&@e<*G~QMP`e?f~)vHJNBQ z5?G#KJUkS2#FxWa`fFC+u*i?eV_}=D3@6fbpkj{2bmdCkFaS2;hd5rnUGlqst zN3nY;WZ@wO1M|E7`nIBx9I-6CPjb5#Y(CAd`-_x6IGoLL+i>BJ4?7)x4B2lq?L_pp zV63$X8_Unc{$f57i|BmaAR;oiz35>C%h}NY=RJd`>JVb@nl+oL9tH>n7Qs(CKh?x~l+dDY9wc9zRe}A|fcG&L7T9H3 z>s*%HG1WH-dL}6*q0D^KqIPWg%A7^E@Co9AYE#zi?X0P$b|{)uY#9`XlhxAi>1+~T zaaI`3-RM6HIE~0D`in@VIo}AxkoRJV(u0kK_d{ZK756XAUO;J9tyQ6OV+82bgxkC) z=TBt^zB_dd-{-t;e)X?U<*|mg{*$-1+~B^Q{sG5DZXF9&|FNSS>Gs$F%8f%eW=b_# zM0R7UKHI@S1iP(8k*J%MMQFZ84SB?k9%Y2$99z`}tmLHepxXr_-bc;iV2|)QJ<&m* z+bPHLZMb345!Mwuo$QRqTr|Vp)}r*7HO_uD(4CVG573mkBi7>jr7wcP$Fz+HbJotn z>r~%^D-8p*oCC+`669Kd^~$lw2dk3SH2Ty4?G?)f{@19>7Ap7WP9L?cO+VN;%$;?a z>w!YeSBt^kIh6gUr%E%Tr)?)8yBh>575sP-@#9x%IW0B!&)x3awP1%L=2jsg77q?S zRMM;q3*4e29_7FM(8zPJWKiW$3@UxM6tl^Ed+S=AZnBB^ETgjD;F6LUg?74{{aKN) zIr1yk@gNtYvd#-M3rH>Pp9zR=qf23VNN3Sx+iiH@l>UV^-j5{bN>7_9JJ9+Uhq^|^ ziH`6R+KAwIwo`Tg;7G`kb0Ix*E{ckSBa&C()8p|=w(*XrN0%N5UeD(Nvu_Sw=Vb^) zv=3!OW3p3OIB*PYyr!3om#ru8r{0vjig#8|ej2kmF_R%HrA9iMyI7?5+2H}xc`Yy1 zSs9~(=!dV>j+NDXzvMq~Fj)KX#TWoeQgwwdSxvi%6|W1R*=L3@_N>BtAz5b=)uyf2S%lx>8hd`>OK<*$%gKreOefVnTJrWHJjWKbqb3 z#|<9f!Zf31E_iN@${}tdsa<PE1SGt7Y({L7zl&d(dZ-cptWu)@4=)mwmE zn%`g=;Kcvp{T8L}*@`&XWAngC-hoFn7kU?Ivi$z31rl8P.h0v~#@hA_p)MSA08 zL=SMooF>lwGWp3P(;evY2ebud7xKG4u~|UC$Od-Gc?LW%1q=%e;JC;bld8>}al9H= zN6#~rS4>=P)I1s zkK&l;wk&w+@F6tm66|T1lk|Nt<;?Wlfs7Qo5g(hAWMm--Oy>JkJDA@@3%{zgQTamS z@>=A_r5cziRBH!)r^@K+%V#W&>*he83e8OmjCmP!F7&~we82?_fHecA?}ZsjM@E)i zLdr8(W{}6S&D#Ls8pY>)x=HT#k0+i%41#Wb9)F_Dk}5F~V$3IJ9-JFkE!qm;_*A<^ zY}N!8J-3^d-BE_%4&1`@o1Y2eHr+MVq$M;oc+}Q+0WEF$iHDqN(7Ek^DY>21MQrbH z7yxEl7|5J!V`|cRRHV`coVrC?-WbpBTbceVTa!ys5p|!Z=eB;ew^ob{A8S53z3On* zRaMgT%(k;&oQ8;;+h?%YeOv{ng{a$t_NkrwS(gu$sntFS{$(D13_3F|#ic3-zktfO z->qdPU8nv^czdQnx~_ZVX%tAk?FW|ffw!_m+iH^01Q@P0KWf41~4*gp9sJv`9D&BqxOE- F{vYv0`4<2H literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient4.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..16d62e4ebc291f61e4be621c7c69bf160491f00e GIT binary patch literal 7000 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient5.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/ambient5.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e7be41501367903e89c2d3514ec99e525e91a7a0 GIT binary patch literal 5690 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 z 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 bx~2kP4(0&BMt-vU+c^oK0Py*`-Km%ZXRCx1 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/disappear2.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/disappear2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0491d29a81594e5b66f04267acd968cdcd72c0f0 GIT binary patch literal 28999 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/hurt1.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/hurt1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..968ee55b992ad0829554e3cea1a8a164b76886cc GIT binary patch literal 4909 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 B($N3_ literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/hurt5.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/hurt5.ogg new file mode 100644 index 0000000000000000000000000000000000000000..72b2c8f98ac7134fcb0cad44de49f54e22382071 GIT binary patch literal 6172 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 B!CwFX literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/nod1.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/nod1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..9595f8c6c6ecfe2ef2127af799228c66dd0db593 GIT binary patch literal 9727 zcmaiZcU)6Vv+yQ_5PGCZ2?){=lrEtesu+48^xmZ_pjf~lRX{|f3y5fFg3_CUAVs7X zDS}`W1r!ufDN6ee_&o1@@AuE$-{xe_%5Xv&^MwaOgTl*1)z`I4D`*VZLUZ ztysiRG7;=Ih}8ΞCAk2}B92S*1jZszFd37Q&s~$DuX8=i6Qcn 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 CQePeb literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reappear1.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reappear1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4824defb85e055cbf16e218df45e0a9c2a2be501 GIT binary patch literal 35041 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 SvZ~C*aFkUr*VQiTkCy`Ae#d+O literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reappear2.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reappear2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a3a55e835f1124952197bc89988ecbc34913a21e GIT binary patch literal 26562 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%0Ao0w7F`gbOK1t3dXvB|k2TyiHOUH%ueod*l4=;tU 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�qdZV72afaqzt0?O@r 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 aeQ6YlquhjJ6w;>qN9Vwj#p%NNkct3*n5~Kc literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward1.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d269a36009c5e8e2bb8db922f760146c68414a04 GIT binary patch literal 5090 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward2.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e63178752f9b7ac8613ab357e7b4c616551f9f9a GIT binary patch literal 6339 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward_bad2.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward_bad2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4aae2bb2d748b3cdb0c4c4d36224ec355689207f GIT binary patch literal 7290 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward_bad3.ogg b/common/src/main/resources/assets/friendsandfoes/sounds/entity/rascal/reward_bad3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8a5f68d0d0fba05d1b7005139c788f42a331df76 GIT binary patch literal 6289 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 Hfb9PP#y;IQ literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/friendsandfoes/textures/entity/rascal/rascal.png b/common/src/main/resources/assets/friendsandfoes/textures/entity/rascal/rascal.png new file mode 100644 index 0000000000000000000000000000000000000000..b01701881d88f3faf616518f06c9ed7c8d58bda7 GIT binary patch literal 824 zcmV-81IPS{P)sY9~7; z5)CpOu5B(R8V-Pxlh^I>FmQgPPH7Tr+&BOL00DGTPE!Ct=GbNc00NjvL_t(o!>yHx zg5n?yhI>d_c6-|0Io|(8H)o{+wX*Y%l8`YUAtWfSoXw0UqgV;THB13Yu8fgZLCwZ&tACs+j-ig1BoKO9LFQ%=r#KZTTES6UL$~ znBztg0^I8Gjp9TS%}3E11FQl`asc%%^d%@nakBt$uEtl>EToSQ9MG>RNFY@W*;Bw3 z7kVK=Ar1KyK}&-;SwOQiBFr?UV)+UhmQ{TQ(*<&wF>MvJkRrg^Z>67?|pO%s%rqNU?O!i2!d=X z7Hz>Q(1o=CaZ|A{d1(-!#=bz4Ss_HR0H8Oe8f;$2jWa8L918&rWs5-o9RR+}qSGZ} z0YHDCYBcD2mK#)6AimauORZ&jR@-W@zq9&bAoB!}e$^qs&nmwI{*wAZKnDP52{!kr zw*a_4Kk#+{)la!T24uFd9Jb)C1cqE`BA-}x3;iEdkE7af#t&QSAnl=+nSF}{W@|gE z;5d`!;hP}!p_la~fTY+>&yy@5We8Bi26D%vQzro@qLcXyv)K+995tUtvEdAk z&om~0`T+oiDXif*gX43ZrZM0?;3w}iiVbJfy6pkjaGI##L>pMX5rQ84ux?K(0JNwZ z8dd>76I)e?7V1TS*|!0<1-t4B03xrt46xKzbvsoS&;|;4R{lX3vb{{ChY0cJm+0saBVOFZu6*jpt40000 Date: Fri, 13 Oct 2023 08:11:19 +0200 Subject: [PATCH 3/6] format --- .../animation/animator/context/AnimationContextTracker.java | 2 +- .../java/com/faboslav/friendsandfoes/entity/RascalEntity.java | 2 +- .../friendsandfoes/entity/animation/AnimatedEntity.java | 2 +- .../com/faboslav/friendsandfoes/mixin/BundleItemAccessor.java | 2 +- .../com/faboslav/friendsandfoes/mixin/ChunkRegionAccessor.java | 2 +- .../com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java | 2 +- .../data/friendsandfoes/tags/worldgen/biome/has_rascal.json | 2 +- .../friendsandfoes/platform/fabric/CustomSpawnGroupImpl.java | 2 +- .../friendsandfoes/platform/forge/CustomSpawnGroupImpl.java | 2 +- .../data/friendsandfoes/forge/biome_modifier/rascal.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/animation/animator/context/AnimationContextTracker.java b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/animation/animator/context/AnimationContextTracker.java index 7a83e6682..c98fcd2f0 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/animation/animator/context/AnimationContextTracker.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/client/render/entity/animation/animator/context/AnimationContextTracker.java @@ -67,4 +67,4 @@ public void remove(String modelPartName, ModelPartAnimationType type) { throw new RuntimeException(String.format("Invalid animation type '%s.'", type)); } } -} \ No newline at end of file +} diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java index ff0924f03..d6895b0d1 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java @@ -100,7 +100,7 @@ public static boolean canSpawn( return false; } - return blockPos.getY() < 63 && serverWorldAccess.isSkyVisible(blockPos) == false; + return blockPos.getY() < 63 && serverWorldAccess.isSkyVisible(blockPos) == false; } return false; diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/animation/AnimatedEntity.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/animation/AnimatedEntity.java index 1aee62d18..37ba3f9a8 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/animation/AnimatedEntity.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/animation/AnimatedEntity.java @@ -59,4 +59,4 @@ default void stopKeyframeAnimation(KeyframeAnimation keyframeAnimation) { keyframeAnimationContext.setCurrentTick(0); keyframeAnimationContext.getAnimationState().stop(); } -} \ No newline at end of file +} diff --git a/common/src/main/java/com/faboslav/friendsandfoes/mixin/BundleItemAccessor.java b/common/src/main/java/com/faboslav/friendsandfoes/mixin/BundleItemAccessor.java index bceb37526..fce9a225c 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/mixin/BundleItemAccessor.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/mixin/BundleItemAccessor.java @@ -13,4 +13,4 @@ int invokeAddToBundle( ItemStack bundle, ItemStack stack ); -} \ No newline at end of file +} diff --git a/common/src/main/java/com/faboslav/friendsandfoes/mixin/ChunkRegionAccessor.java b/common/src/main/java/com/faboslav/friendsandfoes/mixin/ChunkRegionAccessor.java index 03f3fde0b..f83bad9c4 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/mixin/ChunkRegionAccessor.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/mixin/ChunkRegionAccessor.java @@ -10,4 +10,4 @@ public interface ChunkRegionAccessor { @Accessor("structureAccessor") StructureAccessor getStructureAccessor(); -} \ No newline at end of file +} diff --git a/common/src/main/java/com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java b/common/src/main/java/com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java index 2828ce98d..2ddabcb0a 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java @@ -31,4 +31,4 @@ public static SpawnGroup getRascalsCategory() { private CustomSpawnGroup() { } -} \ No newline at end of file +} diff --git a/common/src/main/resources/data/friendsandfoes/tags/worldgen/biome/has_rascal.json b/common/src/main/resources/data/friendsandfoes/tags/worldgen/biome/has_rascal.json index 466bb9d2f..7b0d685c5 100644 --- a/common/src/main/resources/data/friendsandfoes/tags/worldgen/biome/has_rascal.json +++ b/common/src/main/resources/data/friendsandfoes/tags/worldgen/biome/has_rascal.json @@ -3,4 +3,4 @@ "#minecraft:has_structure/mineshaft", "#minecraft:has_structure/mineshaft_mesa" ] -} \ No newline at end of file +} diff --git a/fabric/src/main/java/com/faboslav/friendsandfoes/platform/fabric/CustomSpawnGroupImpl.java b/fabric/src/main/java/com/faboslav/friendsandfoes/platform/fabric/CustomSpawnGroupImpl.java index 94865e03a..3c73af815 100644 --- a/fabric/src/main/java/com/faboslav/friendsandfoes/platform/fabric/CustomSpawnGroupImpl.java +++ b/fabric/src/main/java/com/faboslav/friendsandfoes/platform/fabric/CustomSpawnGroupImpl.java @@ -26,4 +26,4 @@ public static SpawnGroup getGlaresCategory() { public static SpawnGroup getRascalsCategory() { return RASCALS; } -} \ No newline at end of file +} diff --git a/forge/src/main/java/com/faboslav/friendsandfoes/platform/forge/CustomSpawnGroupImpl.java b/forge/src/main/java/com/faboslav/friendsandfoes/platform/forge/CustomSpawnGroupImpl.java index 3cd89aceb..34a34c2f7 100644 --- a/forge/src/main/java/com/faboslav/friendsandfoes/platform/forge/CustomSpawnGroupImpl.java +++ b/forge/src/main/java/com/faboslav/friendsandfoes/platform/forge/CustomSpawnGroupImpl.java @@ -48,4 +48,4 @@ public static SpawnGroup getRascalsCategory() { return spawnGroup; } -} \ No newline at end of file +} diff --git a/forge/src/main/resources/data/friendsandfoes/forge/biome_modifier/rascal.json b/forge/src/main/resources/data/friendsandfoes/forge/biome_modifier/rascal.json index 09db614fa..f518d375e 100644 --- a/forge/src/main/resources/data/friendsandfoes/forge/biome_modifier/rascal.json +++ b/forge/src/main/resources/data/friendsandfoes/forge/biome_modifier/rascal.json @@ -8,4 +8,4 @@ "weight": 4 }, "category": "rascals" -} \ No newline at end of file +} From d82c31f8a6060dd1481c18bee3fdd532e79fea10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1=20Fabi=C3=A1nek?= Date: Fri, 13 Oct 2023 08:12:45 +0200 Subject: [PATCH 4/6] bumped versions --- .github/versions.json | 6 +++--- gradle.properties | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/versions.json b/.github/versions.json index a4014a142..d0bb57450 100644 --- a/.github/versions.json +++ b/.github/versions.json @@ -1,7 +1,7 @@ { - "1.19.2": "1.8.8", - "1.19.1": "1.8.8", - "1.19": "1.8.8", + "1.19.2": "1.8.9", + "1.19.1": "1.8.9", + "1.19": "1.8.9", "1.18.2": "1.4.8", "1.18.1": "1.2.5", "1.18": "1.2.5" diff --git a/gradle.properties b/gradle.properties index 3d75049f5..5f3af3131 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ org.gradle.configureondemand=false # Mod mod_name=Friends&Foes mod_id=friendsandfoes -mod_version=1.8.8 +mod_version=1.8.9 mod_author=Faboslav mod_description=Adds outvoted and forgotten mobs from the mob votes in a believable vanilla plus style. maven_group=com.faboslav.friendsandfoes From be9c73ec128d7351eab008ce949f4ded1c044878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1=20Fabi=C3=A1nek?= Date: Fri, 13 Oct 2023 11:42:57 +0200 Subject: [PATCH 5/6] Rascal balancing --- .../faboslav/friendsandfoes/entity/RascalEntity.java | 8 +++++--- .../ai/brain/task/rascal/RascalWaitForPlayerTask.java | 10 +++++----- .../friendsandfoes/platform/CustomSpawnGroup.java | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java index d6895b0d1..b8d398140 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java @@ -94,7 +94,9 @@ public static boolean canSpawn( return false; } - List nearbyRascals = serverWorld.getEntitiesByClass(RascalEntity.class, new Box(blockPos).expand(32.0F), (rascalEntity) -> true); + List nearbyRascals = serverWorld.getEntitiesByClass(LivingEntity.class, new Box(blockPos).expand(32.0F), (livingEntity) -> { + return livingEntity instanceof RascalEntity || livingEntity instanceof PlayerEntity; + }); if (nearbyRascals.isEmpty() == false) { return false; @@ -352,7 +354,7 @@ public SoundEvent getDisappearSound() { public void playDisappearSound() { SoundEvent soundEvent = this.getDisappearSound(); - this.playSound(soundEvent, 1.5F, RandomGenerator.generateFloat(1.5F, 1.6F)); + this.playSound(soundEvent, 2.0F, RandomGenerator.generateFloat(1.5F, 1.6F)); } public SoundEvent getReappearSound() { @@ -361,7 +363,7 @@ public SoundEvent getReappearSound() { public void playReappearSound() { SoundEvent soundEvent = this.getReappearSound(); - this.playSound(soundEvent, 1.5F, RandomGenerator.generateFloat(1.5F, 1.6F)); + this.playSound(soundEvent, 2.0F, RandomGenerator.generateFloat(1.5F, 1.6F)); } @Override diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalWaitForPlayerTask.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalWaitForPlayerTask.java index 1107da336..9c2135300 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalWaitForPlayerTask.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/ai/brain/task/rascal/RascalWaitForPlayerTask.java @@ -171,10 +171,10 @@ protected void finishRunning(ServerWorld world, RascalEntity rascal, long time) private void tryToTeleport(ServerWorld world, RascalEntity rascal) { StructureAccessor structureAccessor = world.getStructureAccessor(); - for (int i = 0; i < 32; ++i) { - double x = rascal.getX() + (rascal.getRandom().nextDouble() - 0.5) * 24.0; - double y = MathHelper.clamp(rascal.getY() + (double) (rascal.getRandom().nextInt(16) - 8), world.getBottomY(), world.getBottomY() + world.getLogicalHeight() - 1); - double z = rascal.getZ() + (rascal.getRandom().nextDouble() - 0.5) * 24.0; + for (int i = 0; i < 64; ++i) { + double x = rascal.getX() + (rascal.getRandom().nextDouble() - 0.5) * 16.0; + double y = MathHelper.clamp(rascal.getY() + (double) (rascal.getRandom().nextInt(8) - 4), world.getBottomY(), world.getBottomY() + world.getLogicalHeight() - 1); + double z = rascal.getZ() + (rascal.getRandom().nextDouble() - 0.5) * 16.0; if (structureAccessor.getStructureContaining( new BlockPos((int) x, (int) y, (int) z), @@ -189,7 +189,7 @@ private void tryToTeleport(ServerWorld world, RascalEntity rascal) { boolean teleportResult = rascal.teleport(x, y, z, false); - if (teleportResult) { + if (teleportResult && rascal.distanceTo(this.nearestTarget) > 10.0) { return; } } diff --git a/common/src/main/java/com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java b/common/src/main/java/com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java index 2ddabcb0a..82ae46d88 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/platform/CustomSpawnGroup.java @@ -14,7 +14,7 @@ public final class CustomSpawnGroup public static final String RASCALS_INTERNAL_NAME = "RASCALS"; public static final String RASCALS_NAME = "rascals"; - public static final int RASCALS_SPAWN_CAP = 3; + public static final int RASCALS_SPAWN_CAP = 1; public static final boolean RASCALS_PEACEFUL = true; public static final boolean RASCALS_RARE = false; public static final int RASCALS_IMMEDIATE_DESPAWN_RANGE = 128; From 134b3a01170c5b0083cba88719fe3a4294150c0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1=20Fabi=C3=A1nek?= Date: Fri, 13 Oct 2023 15:33:30 +0200 Subject: [PATCH 6/6] dont despawn when named --- .../java/com/faboslav/friendsandfoes/entity/RascalEntity.java | 1 + .../item/{ rascal_spawn_egg.json => rascal_spawn_egg.json} | 0 2 files changed, 1 insertion(+) rename common/src/main/resources/assets/friendsandfoes/models/item/{ rascal_spawn_egg.json => rascal_spawn_egg.json} (100%) diff --git a/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java b/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java index b8d398140..9fe33b596 100644 --- a/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java +++ b/common/src/main/java/com/faboslav/friendsandfoes/entity/RascalEntity.java @@ -286,6 +286,7 @@ public boolean damage( if ( attacker == null || attacker instanceof PlayerEntity == false + || this.hasCustomName() ) { return super.damage(source, amount); } diff --git a/common/src/main/resources/assets/friendsandfoes/models/item/ rascal_spawn_egg.json b/common/src/main/resources/assets/friendsandfoes/models/item/rascal_spawn_egg.json similarity index 100% rename from common/src/main/resources/assets/friendsandfoes/models/item/ rascal_spawn_egg.json rename to common/src/main/resources/assets/friendsandfoes/models/item/rascal_spawn_egg.json