feat(monkey): add cheeky banana-throwing monkey addon
New silverlabs:cheeky_monkey mob that wanders the lobby watching players and throwing harmless (knockback-only) silverlabs:banana_projectile at them. Drops 1-2 silverlabs:banana (food) on death. Spawn rules target jungle biomes for future deployment to survival worlds; for now the pack is bind-mounted into the lobby service only. Also bundles a stray docker-compose tidy from earlier local work (Jamie's world seed pinned, pet addons dropped from Jamie). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"animation_controllers": {
|
||||
"controller.animation.cheeky_monkey": {
|
||||
"initial_state": "idle",
|
||||
"states": {
|
||||
"idle": {
|
||||
"animations": ["idle"],
|
||||
"transitions": [
|
||||
{ "walk": "query.modified_move_speed > 0.1" }
|
||||
]
|
||||
},
|
||||
"walk": {
|
||||
"animations": ["walk", "idle"],
|
||||
"transitions": [
|
||||
{ "idle": "query.modified_move_speed <= 0.1" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.banana_projectile.spin": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"banana": {
|
||||
"rotation": ["query.anim_time * 720", "0", "query.anim_time * 360"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.cheeky_monkey.idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": ["0", "math.sin(query.anim_time * 120) * 1.5", "0"]
|
||||
},
|
||||
"head": {
|
||||
"rotation": ["math.sin(query.anim_time * 90) * 3", "math.sin(query.anim_time * 60) * 5", "0"]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": ["25 + math.sin(query.anim_time * 180) * 8", "math.sin(query.anim_time * 140) * 10", "0"]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": ["math.sin(query.anim_time * 100) * 3", "0", "0"]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": ["-math.sin(query.anim_time * 100) * 3", "0", "0"]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"animation.cheeky_monkey.walk": {
|
||||
"loop": true,
|
||||
"anim_time_update": "query.modified_distance_moved * 1.5",
|
||||
"bones": {
|
||||
"leg_left": {
|
||||
"rotation": ["math.sin(query.anim_time * 240) * 30", "0", "0"]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": ["-math.sin(query.anim_time * 240) * 30", "0", "0"]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": ["-math.sin(query.anim_time * 240) * 25", "0", "0"]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": ["math.sin(query.anim_time * 240) * 25", "0", "0"]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": ["25 + math.sin(query.anim_time * 240) * 15", "0", "0"]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"animation.cheeky_monkey.throw": {
|
||||
"loop": false,
|
||||
"animation_length": 0.6,
|
||||
"bones": {
|
||||
"arm_right": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.15": [-110, 0, 15],
|
||||
"0.35": [60, 0, -10],
|
||||
"0.6": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"body": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.15": [0, -10, 0],
|
||||
"0.35": [0, 15, 0],
|
||||
"0.6": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
26
monkey-addon/monkey_RP/entity/banana_projectile.entity.json
Normal file
26
monkey-addon/monkey_RP/entity/banana_projectile.entity.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"minecraft:client_entity": {
|
||||
"description": {
|
||||
"identifier": "silverlabs:banana_projectile",
|
||||
"materials": {
|
||||
"default": "entity_alphatest"
|
||||
},
|
||||
"textures": {
|
||||
"default": "textures/entity/banana_projectile"
|
||||
},
|
||||
"geometry": {
|
||||
"default": "geometry.banana_projectile"
|
||||
},
|
||||
"render_controllers": [
|
||||
"controller.render.banana_projectile"
|
||||
],
|
||||
"animations": {
|
||||
"spin": "animation.banana_projectile.spin"
|
||||
},
|
||||
"scripts": {
|
||||
"animate": ["spin"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
33
monkey-addon/monkey_RP/entity/cheeky_monkey.entity.json
Normal file
33
monkey-addon/monkey_RP/entity/cheeky_monkey.entity.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"minecraft:client_entity": {
|
||||
"description": {
|
||||
"identifier": "silverlabs:cheeky_monkey",
|
||||
"materials": {
|
||||
"default": "entity_alphatest"
|
||||
},
|
||||
"textures": {
|
||||
"default": "textures/entity/cheeky_monkey"
|
||||
},
|
||||
"geometry": {
|
||||
"default": "geometry.cheeky_monkey"
|
||||
},
|
||||
"render_controllers": [
|
||||
"controller.render.cheeky_monkey"
|
||||
],
|
||||
"animations": {
|
||||
"idle": "animation.cheeky_monkey.idle",
|
||||
"walk": "animation.cheeky_monkey.walk",
|
||||
"throw": "animation.cheeky_monkey.throw",
|
||||
"controller": "controller.animation.cheeky_monkey"
|
||||
},
|
||||
"scripts": {
|
||||
"animate": ["controller"]
|
||||
},
|
||||
"spawn_egg": {
|
||||
"base_color": "#6B4423",
|
||||
"overlay_color": "#F4D03F"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
17
monkey-addon/monkey_RP/manifest.json
Normal file
17
monkey-addon/monkey_RP/manifest.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"format_version": 2,
|
||||
"header": {
|
||||
"name": "Cheeky Monkey Resources",
|
||||
"description": "Textures, models, and animations for the cheeky monkey.",
|
||||
"uuid": "7195b65a-171d-4324-a2df-e36ba75ec48a",
|
||||
"version": [1, 0, 0],
|
||||
"min_engine_version": [1, 21, 0]
|
||||
},
|
||||
"modules": [
|
||||
{
|
||||
"type": "resources",
|
||||
"uuid": "52b854fe-8b36-4a0d-a94a-d20b8fbca74a",
|
||||
"version": [1, 0, 0]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"format_version": "1.12.0",
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.banana_projectile",
|
||||
"texture_width": 16,
|
||||
"texture_height": 16,
|
||||
"visible_bounds_width": 1,
|
||||
"visible_bounds_height": 1,
|
||||
"visible_bounds_offset": [0, 0.25, 0]
|
||||
},
|
||||
"bones": [
|
||||
{ "name": "root", "pivot": [0, 0, 0] },
|
||||
{
|
||||
"name": "banana",
|
||||
"parent": "root",
|
||||
"pivot": [0, 0, 0],
|
||||
"rotation": [0, 0, 25],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-2, 0, -0.5],
|
||||
"size": [4, 1, 1],
|
||||
"uv": [0, 0]
|
||||
},
|
||||
{
|
||||
"origin": [-3, 0.5, -0.5],
|
||||
"size": [1, 1, 1],
|
||||
"uv": [0, 2]
|
||||
},
|
||||
{
|
||||
"origin": [2, 0.5, -0.5],
|
||||
"size": [1, 1, 1],
|
||||
"uv": [0, 2]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
152
monkey-addon/monkey_RP/models/entity/cheeky_monkey.geo.json
Normal file
152
monkey-addon/monkey_RP/models/entity/cheeky_monkey.geo.json
Normal file
@@ -0,0 +1,152 @@
|
||||
{
|
||||
"format_version": "1.12.0",
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.cheeky_monkey",
|
||||
"texture_width": 64,
|
||||
"texture_height": 32,
|
||||
"visible_bounds_width": 2,
|
||||
"visible_bounds_height": 2.5,
|
||||
"visible_bounds_offset": [0, 1, 0]
|
||||
},
|
||||
"bones": [
|
||||
{ "name": "root", "pivot": [0, 0, 0] },
|
||||
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "root",
|
||||
"pivot": [0, 8, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-3, 4, -2],
|
||||
"size": [6, 8, 4],
|
||||
"uv": [0, 0]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "body",
|
||||
"pivot": [0, 12, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-3, 12, -3],
|
||||
"size": [6, 6, 6],
|
||||
"uv": [20, 0]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"name": "muzzle",
|
||||
"parent": "head",
|
||||
"pivot": [0, 14, -3],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-1.5, 13, -5],
|
||||
"size": [3, 2, 2],
|
||||
"uv": [44, 0]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"name": "ear_left",
|
||||
"parent": "head",
|
||||
"pivot": [-3, 17, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-4, 16, -1],
|
||||
"size": [1, 2, 2],
|
||||
"uv": [50, 0]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"name": "ear_right",
|
||||
"parent": "head",
|
||||
"pivot": [3, 17, 0],
|
||||
"mirror": true,
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [3, 16, -1],
|
||||
"size": [1, 2, 2],
|
||||
"uv": [50, 0]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"name": "arm_left",
|
||||
"parent": "body",
|
||||
"pivot": [-3, 11, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-5, 5, -1],
|
||||
"size": [2, 6, 2],
|
||||
"uv": [0, 16]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"name": "arm_right",
|
||||
"parent": "body",
|
||||
"pivot": [3, 11, 0],
|
||||
"mirror": true,
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [3, 5, -1],
|
||||
"size": [2, 6, 2],
|
||||
"uv": [0, 16]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"name": "leg_left",
|
||||
"parent": "root",
|
||||
"pivot": [-1.5, 4, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-2.5, 0, -1],
|
||||
"size": [2, 4, 2],
|
||||
"uv": [16, 16]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"name": "leg_right",
|
||||
"parent": "root",
|
||||
"pivot": [1.5, 4, 0],
|
||||
"mirror": true,
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [0.5, 0, -1],
|
||||
"size": [2, 4, 2],
|
||||
"uv": [16, 16]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"name": "tail",
|
||||
"parent": "body",
|
||||
"pivot": [0, 5, 2],
|
||||
"rotation": [-25, 0, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-0.5, 4.5, 1],
|
||||
"size": [1, 1, 5],
|
||||
"uv": [32, 16]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
monkey-addon/monkey_RP/pack_icon.png
Normal file
BIN
monkey-addon/monkey_RP/pack_icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"render_controllers": {
|
||||
"controller.render.cheeky_monkey": {
|
||||
"geometry": "geometry.default",
|
||||
"materials": [
|
||||
{ "*": "material.default" }
|
||||
],
|
||||
"textures": ["texture.default"]
|
||||
},
|
||||
"controller.render.banana_projectile": {
|
||||
"geometry": "geometry.default",
|
||||
"materials": [
|
||||
{ "*": "material.default" }
|
||||
],
|
||||
"textures": ["texture.default"]
|
||||
}
|
||||
}
|
||||
}
|
||||
3
monkey-addon/monkey_RP/texts/en_US.lang
Normal file
3
monkey-addon/monkey_RP/texts/en_US.lang
Normal file
@@ -0,0 +1,3 @@
|
||||
entity.silverlabs:cheeky_monkey.name=Cheeky Monkey
|
||||
item.spawn_egg.entity.silverlabs:cheeky_monkey.name=Spawn Cheeky Monkey
|
||||
item.silverlabs:banana=Banana
|
||||
BIN
monkey-addon/monkey_RP/textures/entity/banana_projectile.png
Normal file
BIN
monkey-addon/monkey_RP/textures/entity/banana_projectile.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 99 B |
BIN
monkey-addon/monkey_RP/textures/entity/cheeky_monkey.png
Normal file
BIN
monkey-addon/monkey_RP/textures/entity/cheeky_monkey.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 254 B |
9
monkey-addon/monkey_RP/textures/item_texture.json
Normal file
9
monkey-addon/monkey_RP/textures/item_texture.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"resource_pack_name": "monkey_RP",
|
||||
"texture_name": "atlas.items",
|
||||
"texture_data": {
|
||||
"banana": {
|
||||
"textures": "textures/items/banana"
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
monkey-addon/monkey_RP/textures/items/banana.png
Normal file
BIN
monkey-addon/monkey_RP/textures/items/banana.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 215 B |
Reference in New Issue
Block a user