-
Notifications
You must be signed in to change notification settings - Fork 0
Ultimate Mod Additions 1.21.1 Wiki ES
Todo el contenido del mod se define en JSON y, si KubeJS está instalado, también por script. Nada está grabado en el código: dificultades, drops, bolsas e intercambios se cambian desde un datapack sin recompilar nada.
Los ejemplos de esta página usan el namespace nadien_teaks:. Poné el tuyo — el mod nunca mira
el namespace, sólo la carpeta.
| Sección | De qué trata |
|---|---|
| Datapacks | Dónde van los archivos, cómo se recargan, tipos compartidos |
| Dificultades |
uma/difficulty — escalado de mobs |
| Reglas de mobs |
uma/mob_rules — qué suelta cada mob y qué tan duro es |
| Bolsas de botín |
uma/loot_bags y uma/loot_bag_additions
|
| Intercambios |
uma/trades — el puesto de intercambio |
| Monedas | Las nueve denominaciones y cómo se usan |
| Coliseo | La dimensión, el anfiteatro, el portal y la llave |
| KubeJS | El binding UMA y todos sus métodos |
| Comandos |
/uma y /ums
|
| Configuración | El TOML de configuración |
| Ejemplo completo | Un archivo de cada tipo, en JSON y en KubeJS |
| Cosa | Id | Qué hace |
|---|---|---|
| Dimensión coliseo | ultimatemodadditions:coliseum |
Una dimensión propia con un anfiteatro romano que el mod construye solo. A los mobs de adentro los escala la dificultad activa y sueltan monedas y bolsas. |
| Portal del coliseo | ultimatemodadditions:coliseum_portal |
El bloque que llena un marco de obsidiana llorosa prendido. Caminás adentro y te lleva; comprueba el requisito jugador por jugador. No se craftea ni se levanta: aparece al prender un marco. |
| Llave del coliseo | ultimatemodadditions:coliseum_key |
Prende un portal. Clic derecho en cada una de las cuatro esquinas del marco de obsidiana llorosa; en la cuarta se gasta la llave. Se craftea, nunca se compra. |
| Puesto de intercambio | ultimatemodadditions:exchange_stand |
El bloque de la tienda. Clic derecho abre la lista de ofertas, que sale de uma/trades/. Se paga con cualquier mezcla de monedas y devuelve el vuelto. |
| Monedas |
coin_10 … coin_20000
|
Nueve denominaciones de dinero. Clic derecho junta toda la plata suelta en la menor cantidad de monedas, agachado + clic derecho rompe una en más chicas. Los mobs las sueltan. |
| Bolsas de botín |
loot_bag_common … loot_bag_enchantment
|
Ocho rarezas de contenedor. Clic derecho abre una, agachado abre la pila. Lo que sale se define en uma/loot_bags/. |
Todo cuelga de data/<cualquier_namespace>/uma/…. El namespace no importa, usá el tuyo. Sirven
tres lugares:
- un datapack normal, en
world/datapacks/nadien_teaks/data/nadien_teaks/uma/… - la carpeta de KubeJS, en
kubejs/data/nadien_teaks/uma/… - el propio mod, si lo estás compilando
Se recargan con /reload. No hace falta reiniciar.
| Carpeta | Qué define |
|---|---|
uma/difficulty/ |
Perfiles de escalado de mobs |
uma/mob_rules/ |
Qué mob usa qué dificultad y qué suelta |
uma/loot_bags/ |
El contenido de cada bolsa |
uma/loot_bag_additions/ |
Botín extra agregado a bolsas que ya existen |
uma/trades/ |
Ofertas del puesto de intercambio |
Donde esta página diga rango, podés escribir un número suelto o un objeto:
"count": 3
"count": { "min": 1, "max": 4 }"match": {
"items": ["minecraft:diamond_pickaxe"],
"tags": ["c:tools/pickaxe"],
"blocks": ["minecraft:stone"],
"block_tags": ["minecraft:mineable/pickaxe"],
"regex": ["^minecraft:.*_ore$"],
"exclude": ["minecraft:bedrock"]
}-
itemsytagsse comparan contra objetos;blocksyblock_tagscontra bloques. -
regexcorre sobre el id completo (minecraft:diamond) y sólo se consulta cuando no coincidió nada por lista ni por etiqueta. -
excludele gana a todo lo demás.
"entity": {
"entities": ["minecraft:zombie"],
"tags": ["minecraft:skeletons"],
"regex": ["^minecraft:.*_zombie$"],
"categories": ["monster"],
"exclude": ["minecraft:villager"],
"boss": true,
"baby": false
}-
categoriesaceptamonster,creature,ambient,water_creature,axolotls,underground_water_creature,water_ambientymisc. -
bossmira la etiquetac:bosses. - Si dejás
entities,tagsyregexvacíos, coincide con cualquier entidad que pase los demás filtros.
Cualquier entrada que entregue un objeto acepta components, con el formato de componentes de 1.21:
{
"item": "minecraft:enchanted_book",
"components": {
"minecraft:stored_enchantments": { "levels": { "minecraft:mending": 1 } }
}
}data/<namespace>/uma/difficulty/<id>.json
Un perfil de dificultad es un paquete de multiplicadores que se le aplica a un mob al aparecer.
easy, normal, hard y nightmare vienen con el mod.
{
"name": "Dificil",
"health_multiplier": 2.5,
"damage_multiplier": 1.75,
"speed_multiplier": 1.1,
"armor_bonus": 4.0,
"armor_toughness_bonus": 2.0,
"knockback_resistance": 0.2,
"follow_range_bonus": 12.0,
"experience_multiplier": 2.0,
"coin_multiplier": 2.0,
"bag_chance_bonus": 0.05,
"extra_loot_rolls": 1,
"glowing": false,
"effects": [
{ "effect": "minecraft:strength", "amplifier": 0, "duration": -1, "chance": 1.0 }
],
"equipment": {
"mainhand": { "item": "minecraft:netherite_sword", "chance": 0.35, "drop_chance": 0.02 }
}
}| Campo | Tipo | Por defecto | Qué hace |
|---|---|---|---|
name |
texto | — | Nombre visible, opcional |
health_multiplier |
decimal | 1.0 | Multiplica la vida máxima |
damage_multiplier |
decimal | 1.0 | Multiplica el daño de ataque |
speed_multiplier |
decimal | 1.0 | Multiplica la velocidad de movimiento |
armor_bonus |
decimal | 0.0 | Suma armadura |
armor_toughness_bonus |
decimal | 0.0 | Suma dureza de armadura |
knockback_resistance |
decimal | 0.0 | Suma resistencia al empuje (0–1) |
follow_range_bonus |
decimal | 0.0 | Suma rango de persecución |
experience_multiplier |
decimal | 1.0 | Multiplica la experiencia que suelta |
coin_multiplier |
decimal | 1.0 | Multiplica las monedas que suelta |
bag_chance_bonus |
decimal | 0.0 | Suma a la probabilidad de bolsa |
extra_loot_rolls |
entero | 0 | Tiradas extra de botín |
glowing |
booleano | false | Deja al mob brillando |
effects |
lista | vacía | Efectos de poción permanentes o temporales |
equipment |
objeto | vacío | Equipo por ranura |
{ "effect": "minecraft:strength", "amplifier": 0, "duration": -1, "chance": 1.0 }duration: -1 es permanente. chance va de 0 a 1.
Las claves son ranuras: mainhand, offhand, head, chest, legs, feet.
"equipment": {
"head": { "item": "minecraft:netherite_helmet", "chance": 0.5, "drop_chance": 0.01 },
"chest": { "item": "minecraft:netherite_chestplate", "chance": 0.5 }
}| Campo | Por defecto | Qué hace |
|---|---|---|
item |
obligatorio | Qué se equipa |
count |
1 | Cantidad |
chance |
1.0 | Probabilidad de que lo lleve |
drop_chance |
0.085 | Probabilidad de que lo suelte al morir |
components |
— | Componentes del objeto |
- Si la regla de mob que coincide trae
difficulty, se usa ese perfil. - Si trae
inline_difficulty, se usa ese perfil escrito en línea. - Si no, se usa la dificultad activa del coliseo (
/uma difficulty set).
Ver Reglas de mobs.
data/<namespace>/uma/mob_rules/<id>.json
Deciden qué dificultad usa cada mob y qué suelta al morir. Se comprueban de mayor a menor
priority; la primera que coincide gana.
{
"priority": 0,
"match": { "categories": ["monster"] },
"dimensions": ["ultimatemodadditions:coliseum"],
"difficulty": "ultimatemodadditions:hard",
"replace_vanilla_drops": true,
"experience_multiplier": 2.0,
"stop_matching": false,
"drops": [
{ "item": "minecraft:diamond", "count": { "min": 1, "max": 3 }, "chance": 0.5, "looting_bonus": 0.1 },
{ "loot_table": "minecraft:chests/simple_dungeon", "chance": 0.1 },
{ "bag": "ultimatemodadditions:epic", "chance": 0.02 }
],
"coins": [ { "tier": "500", "count": { "min": 1, "max": 3 }, "chance": 0.5 } ],
"bags": [ { "bag": "ultimatemodadditions:common", "chance": 0.06 } ]
}| Campo | Tipo | Por defecto | Qué hace |
|---|---|---|---|
priority |
entero | 0 | Más alto se comprueba antes |
match |
filtro de entidad | cualquiera | A qué mobs aplica |
dimensions |
lista de ids | vacía = todas | En qué dimensiones aplica |
difficulty |
id | — | Perfil de dificultad a usar |
inline_difficulty |
objeto | — | Un perfil escrito en línea en vez de difficulty
|
replace_vanilla_drops |
booleano | false | Borra el botín vanilla del mob |
drops |
lista | vacía | Botín propio |
coins |
lista | vacía | Monedas que suelta |
bags |
lista | vacía | Bolsas que suelta |
experience_multiplier |
decimal | 1.0 | Multiplica la experiencia que suelta |
stop_matching |
booleano | false | Corta la búsqueda aunque no aplique nada |
El filtro va en match y usa el formato de filtro de entidades.
Cada entrada puede entregar un objeto, una tabla de botín o una bolsa.
| Campo | Por defecto | Qué hace |
|---|---|---|
item |
— | Objeto a soltar |
count |
1 | Cantidad (rango) |
chance |
1.0 | Probabilidad, de 0 a 1 |
weight |
1 | Sólo se usa dentro de bolsas |
looting_bonus |
0.0 | Se suma a chance por nivel de saqueo |
components |
— | Componentes del objeto |
loot_table |
— | Tira una tabla de botín entera |
bag |
— | Entrega una bolsa por su id |
Si hay bag, se ignora item.
{ "tier": "500", "count": { "min": 1, "max": 3 }, "chance": 0.5 }tier es la denominación: "10", "20", "50", "100", "200", "500", "1000", "10000"
o "20000". Se aceptan los nombres viejos bronze, silver y gold, que valen 10, 100 y 1000.
La cantidad final se multiplica por el coin_multiplier de la dificultad.
{ "bag": "ultimatemodadditions:common", "count": 1, "chance": 0.06 }A chance se le suma el bag_chance_bonus de la dificultad.
Cada archivo es una bolsa. Hacé todas las que quieras: tier decide sobre cuál de los ocho items
se apoya, y con eso su textura y su rareza.
{
"name": "Bolsa epica",
"tier": "epic",
"color": 12213503,
"sort_order": 30,
"rolls": { "min": 3, "max": 5 },
"unique_rolls": true,
"announce": false,
"open_sound": "ultimatemodadditions:loot_bag_open",
"guaranteed": [
{ "item": "ultimatemodadditions:coin_500", "count": { "min": 1, "max": 3 } }
],
"entries": [
{ "item": "minecraft:diamond_block", "count": 1, "weight": 16 },
{ "bag": "ultimatemodadditions:enchantment", "count": 1, "weight": 8 }
]
}| Campo | Tipo | Por defecto | Qué hace |
|---|---|---|---|
name |
texto | — | Nombre visible de la bolsa |
tier |
texto | common |
Rareza, ver la tabla de abajo |
rolls |
rango | 1 | Cuántas entradas se sortean |
guaranteed |
lista | vacía | Botín fijo, siempre sale |
entries |
lista | vacía | Pozo aleatorio, se sortea por weight
|
unique_rolls |
booleano | false | Impide que salga dos veces la misma entrada |
color |
entero | 0xFFFFFF | Color decimal del nombre |
open_sound |
id | — | Sonido al abrirla |
announce |
booleano | false | Le avisa a todo el servidor cuando se abre |
sort_order |
entero | 0 | Orden en JEI |
Las entradas usan el mismo formato que los drops de una regla de mob, incluidos
loot_table y bag para bolsas anidadas.
tier |
Item base | Se compra en el puesto |
|---|---|---|
common |
loot_bag_common |
sí |
uncommon |
loot_bag_uncommon |
sí |
epic |
loot_bag_epic |
no |
mythic |
loot_bag_mythic |
no |
legendary |
loot_bag_legendary |
no |
omega |
loot_bag_omega |
no |
food |
loot_bag_food |
no |
enchantment |
loot_bag_enchantment |
no |
rare sigue aceptándose como alias de epic para datapacks viejos.
Para agregar botín a bolsas que ya existen sin reescribirlas. Se aplican después de que cargaron todas las bolsas, así que funcionan sobre las del mod, las de otro datapack o las de KubeJS.
{
"bag": "ultimatemodadditions:common",
"bags": ["ultimatemodadditions:uncommon"],
"tiers": ["legendary", "omega"],
"entries": [
{ "item": "minecraft:copper_ingot", "count": { "min": 2, "max": 6 }, "weight": 12 }
],
"guaranteed": [
{ "item": "ultimatemodadditions:coin_50", "count": 1 }
],
"replace": false
}| Campo | Por defecto | Qué hace |
|---|---|---|
bag |
— | Una bolsa concreta |
bags |
vacía | Varias bolsas concretas |
tiers |
vacía | Todas las bolsas de esas rarezas; ["all"] alcanza a todas |
entries |
vacía | Se suma al pozo aleatorio |
guaranteed |
vacía | Se suma al botín fijo |
replace |
false | Si es true, borra el contenido previo antes de agregar |
bag, bags y tiers se suman: la adición se aplica a toda bolsa que encaje con cualquiera de
los tres.
Clic derecho abre una. Agachado abre la pila entera. El botín va al inventario y lo que no entra cae al piso.
data/<namespace>/uma/trades/<id>.json
Son las ofertas del puesto de intercambio (ultimatemodadditions:exchange_stand).
{
"name": "Bolsa poco comun",
"category": "bags",
"sort_order": 20,
"price": 700,
"cost": [ { "item": "minecraft:emerald", "count": 4 } ],
"result": { "bag": "ultimatemodadditions:uncommon", "count": 1 },
"stock": -1,
"enabled": true
}| Campo | Tipo | Por defecto | Qué hace |
|---|---|---|---|
name |
texto | el nombre del resultado | Etiqueta en la lista |
category |
texto | general |
Agrupación libre |
price |
entero | 0 | Precio en dinero |
cost |
lista | vacía | Objetos concretos que además hay que pagar |
result |
objeto | obligatorio | Qué se entrega |
sort_order |
entero | 0 | Orden en la lista |
stock |
entero | -1 | Reservado, -1 es ilimitado |
enabled |
booleano | true | Si está en false la oferta no aparece |
price se paga con cualquier mezcla de monedas y devuelve el vuelto. cost pide objetos
exactos. Se pueden usar los dos a la vez.
"cost": [ { "item": "minecraft:emerald", "count": 4 } ]"result": { "item": "minecraft:golden_apple", "count": 1 }
"result": { "bag": "ultimatemodadditions:common", "count": 1 }| Campo | Por defecto | Qué hace |
|---|---|---|
item |
— | Objeto a entregar |
count |
1 | Cantidad |
bag |
— | Entrega una bolsa por su id; le gana a item
|
components |
— | Componentes del objeto |
El puesto rechaza ciertas ofertas aunque las definas, y tampoco las muestra en la pantalla ni en JEI:
- Bolsas de rareza
epico superior, más las de comida y encantamiento. Sólocommonyuncommonse compran. - Cualquier cosa que esté en la etiqueta
ultimatemodadditions:not_purchasable. La llave del coliseo está ahí de fábrica.
Para permitir o bloquear más cosas, editá esa etiqueta desde un datapack:
{
"replace": false,
"values": ["nadien_teaks:mi_objeto"]
}Clic derecho en el puesto para abrirlo. Clic en una fila compra una; con shift, ocho. Arriba a la derecha se ve cuánta plata llevás encima.
Las denominaciones son las argentinas: 10, 20, 50, 100, 200, 500, 1000, 10000 y 20000. Del 10 al 500 son mangos, del 1000 al 20000 son lucas.
| Item | Valor | Nombre |
|---|---|---|
coin_10 |
10 | 10 mangos |
coin_20 |
20 | 20 mangos |
coin_50 |
50 | 50 mangos |
coin_100 |
100 | 100 mangos |
coin_200 |
200 | 200 mangos |
coin_500 |
500 | 500 mangos |
coin_1000 |
1000 | 1 luca |
coin_10000 |
10000 | 10 lucas |
coin_20000 |
20000 | 20 lucas |
No hay recetas de conversión. Se usan con una moneda en la mano:
- Clic derecho junta toda la plata suelta del inventario y te la devuelve en la menor cantidad de monedas posible, avisándote el total.
- Agachado + clic derecho rompe una moneda en las denominaciones que le siguen para abajo.
Las dos cosas funcionan estés apuntando a un bloque o al cielo.
El precio de una oferta del puesto de intercambio se paga con cualquier combinación y devuelve el vuelto solo.
Donde una regla de mob pida una denominación, se escribe como texto:
"coins": [ { "tier": "500", "count": { "min": 1, "max": 3 }, "chance": 0.5 } ]Se aceptan los nombres viejos bronze, silver y gold, que valen 10, 100 y 1000.
ultimatemodadditions:coliseum
Una dimensión propia con un anfiteatro romano construido por el mod. No es un mundo plano: el generador está vacío y la arena se levanta sola la primera vez que carga la dimensión.
- Arena de arena con muro de podio alrededor.
- Cinco gradas escalonadas.
- Muralla exterior con arcos en dos niveles.
- Cuatro puertas en cruz.
- Iluminación y un portal de vuelta junto a la puerta norte.
Se entra por el portal o con /uma coliseum enter. Siempre aparecés sobre la arena.
Si te caés fuera del anfiteatro, el mod te devuelve a la arena en vez de dejarte caer al vacío.
Se arma igual que uno del Nether pero con obsidiana llorosa: marco rectangular, mínimo 4×5 contando el marco (2×3 de hueco), hasta 23×23. Las cuatro esquinas tienen que estar.
Para prenderlo, clic derecho con la llave del coliseo en cada una de las cuatro
esquinas. El mod te va avisando por cuántas vas (Esquina 2 de 4). En la cuarta se gasta una
llave y el portal se abre. El orden no importa y podés dar la vuelta al marco entre clic y clic.
Si rompés un bloque del marco, el portal se apaga solo, como el del Nether.
Adentro del coliseo hay un portal ya abierto junto a la puerta norte que te devuelve de donde viniste. Ese no pide nada.
Que el portal esté abierto no alcanza: te tiene que dejar pasar a vos. Hacen falta 100 niveles de experiencia de vanilla, que no se gastan.
Si no cumplís, el portal te rechaza y te dice por chat qué te falta y cuánto llevás. Se comprueba por jugador: no podés meter ni arrastrar a alguien que no cumpla, porque a cada uno se le mira lo suyo al entrar. Salir del coliseo no pide nada.
Todo esto se cambia en [coliseum.portal]:
| Opción | Por defecto | Qué hace |
|---|---|---|
enforce_requirements |
true | Si es false el portal deja pasar a cualquiera |
required_experience_levels |
100 | Niveles de experiencia; no se gastan |
Para probarlo sin farmear: /xp set @s 100 levels.
Al construir la arena se ponen generadores repartidos en un anillo sobre la arena, cada uno sobre un bloque de arenisca cincelada. Cada generador lleva un tipo de mob, repartidos en orden por la lista de la config, así que aparecen todos los tipos que pongas. El que caería sobre el punto de aparición se saltea.
De serie son doce: zombi, esqueleto, araña, creeper, husk, stray, bruja, saqueador, blaze, esqueleto wither, vindicador y enderman.
/uma spawners list
/uma spawners place
/uma spawners clear
clear saca todos los generadores del coliseo, incluidos los que pongas a mano. place los
vuelve a poner según la config, borrando los anteriores primero. Los dos piden permiso 2; list lo
puede usar cualquiera.
Para sacarlos para siempre, poné enabled = false en [coliseum.spawners] y corré
/uma spawners clear.
En [coliseum.spawners]:
| Opción | Por defecto | Qué hace |
|---|---|---|
enabled |
true | Pone generadores al construir la arena |
entities |
12 mobs hostiles | Qué tipos usar, uno por generador |
count |
12 | Cuántos poner; 0 no pone ninguno |
min_spawn_delay |
200 | Espera mínima entre tandas, en ticks |
max_spawn_delay |
600 | Espera máxima entre tandas, en ticks |
spawn_count |
4 | Cuántos mobs intenta sacar cada tanda |
max_nearby_entities |
8 | Se frena si ya hay tantos vivos cerca |
required_player_range |
24 | A qué distancia tiene que haber un jugador |
spawn_range |
6 | A cuántos bloques del generador pueden salir |
Los ids que no existan se saltean con un aviso en el log, así que podés poner mobs de otros mods sin romper nada si no están instalados.
Los mobs que salen de estos generadores igual pasan por las reglas de mobs y por la dificultad activa: salen escalados y sueltan monedas y bolsas como cualquier otro.
ultimatemodadditions:coliseum_key se craftea con un lingote de oro, una perla de ender y una
pepita de oro en columna. No se puede comprar en el puesto de intercambio: está en la etiqueta
ultimatemodadditions:not_purchasable.
Sirve para prender el portal y se gasta al completar las cuatro esquinas. Una llave abre un portal; después el portal queda abierto para siempre, hasta que rompas el marco.
La dimensión tiene una dificultad activa que vale para toda la partida, y la usan todas las reglas de mob que no declaran una propia:
/uma difficulty get
/uma difficulty list
/uma difficulty set ultimatemodadditions:nightmare
Ver Dificultades y Reglas de mobs.
/uma rebuild_arena
Sirve si cambiaste el radio o la altura en la config, o si alguien lo destrozó. Pide permiso 2.
En [coliseum]:
| Opción | Por defecto | Qué hace |
|---|---|---|
enabled |
true | Activa la dimensión |
build_arena |
true | Construye el anfiteatro al cargar |
arena_radius |
30 | Radio en bloques del piso de arena |
arena_floor_y |
64 | Altura del piso |
player_count_scaling |
0.25 | Cuánto escala por jugador |
Si KubeJS está instalado, el mod agrega el binding global UMA. Sólo funciona en los scripts de
servidor (kubejs/server_scripts/), porque los datos cargan junto con el datapack. Si lo llamás
desde startup_scripts o client_scripts, la entrada se descarta al entrar al mundo y el mod te
avisa en el log. Se vuelven a inyectar en cada /reload, así que el orden de carga no es algo de lo
que tengas que preocuparte.
La API es de builders encadenados. Cada uno arranca con UMA.<tipo>('id'), le vas pegando
métodos, y termina con .register(). Sin .register() no pasa nada.
Los ids sin namespace se resuelven a ultimatemodadditions:.
UMA.lootBag('nadien_teaks:mitica')
.name('Bolsa mitica')
.tier('mythic')
.rolls(5, 7)
.guaranteed('ultimatemodadditions:coin_10000', 1)
.entry('minecraft:netherite_block', 1, 2, 10)
.register()| Builder | Equivale a |
|---|---|
UMA.difficulty(id) |
uma/difficulty/ |
UMA.mobRule(id) |
uma/mob_rules/ |
UMA.lootBag(id) |
uma/loot_bags/ |
UMA.bagDrop(id) |
uma/loot_bag_additions/ |
UMA.trade(id) |
uma/trades/ |
UMA.difficulty('nadien_teaks:brutal')
.name('Brutal')
.health(10).damage(4).speed(1.2)
.armor(8).armorToughness(4).knockbackResistance(0.5).followRange(16)
.experience(3).coins(8).bagChance(0.1).extraRolls(2)
.glowing(true)
.effect('minecraft:strength', 1, -1, 1.0)
.equipment('mainhand', 'minecraft:netherite_sword', 0.5, 0.02)
.register()effect(id, amplificador, duracion, probabilidad) — una duración de -1 es permanente.
equipment(ranura, item, probabilidad, probabilidadDeSoltarlo) — ranuras: mainhand, offhand,
head, chest, legs, feet.
UMA.mobRule('nadien_teaks:zombis')
.priority(50)
.entities('minecraft:zombie', 'minecraft:husk')
.categories('monster')
.boss(false)
.dimensions('ultimatemodadditions:coliseum')
.difficulty('nadien_teaks:brutal')
.replaceVanillaDrops(true)
.experienceMultiplier(2)
.drop('minecraft:netherite_scrap', 1, 2, 0.25)
.coin('1000', 1, 1, 0.2)
.bag('ultimatemodadditions:common', 0.1)
.register()drop(item, min, max, probabilidad) · coin(denominacion, min, max, probabilidad) ·
bag(idBolsa, probabilidad).
UMA.lootBag('nadien_teaks:mitica')
.name('Bolsa mitica')
.tier('mythic')
.color(0xFF5C5C)
.rolls(5, 7)
.uniqueRolls(true)
.announce(true)
.openSound('ultimatemodadditions:loot_bag_open')
.sortOrder(40)
.guaranteed('ultimatemodadditions:coin_10000', 1)
.entry('minecraft:netherite_block', 1, 2, 10)
.bagEntry('ultimatemodadditions:enchantment', 5)
.lootTableEntry('minecraft:chests/end_city_treasure', 0.5, 3)
.register()entry(item, peso) o entry(item, min, max, peso). guaranteed(item), guaranteed(item, cantidad)
o guaranteed(item, min, max).
Agrega botín a bolsas que ya existen, sin reescribirlas.
UMA.bagDrop('nadien_teaks:cobre_en_todas')
.allTiers()
.entry('minecraft:copper_ingot', 2, 8, 10)
.register()
UMA.bagDrop('nadien_teaks:extra_legendaria')
.bag('ultimatemodadditions:legendary')
.guaranteed('ultimatemodadditions:coin_20000', 1)
.register()
UMA.bagDrop('nadien_teaks:solo_altas')
.tiers('epic', 'mythic', 'legendary', 'omega')
.entry('minecraft:nether_star', 1, 1, 4)
.register()bag(id), bags(...) y tiers(...) se suman. allTiers() es atajo de tiers('all').
replace(true) borra el contenido previo antes de agregar.
UMA.trade('nadien_teaks:mitica')
.name('Bolsa mitica')
.category('bags')
.price(50000)
.cost('minecraft:emerald', 8)
.resultBag('nadien_teaks:mitica')
.sortOrder(90)
.register()result(item) / result(item, cantidad) para objetos, resultBag(id) para bolsas. price es
dinero y se paga con cualquier combinación de monedas, con vuelto.
Cuando un builder no cubre algo, los métodos raw* aceptan un objeto tal cual:
UMA.mobRule('nadien_teaks:raro')
.rawMatch({ regex: ['^minecraft:.*_zombie$'], exclude: ['minecraft:drowned'] })
.register()
UMA.lootBag('nadien_teaks:libros')
.rawEntry({
item: 'minecraft:enchanted_book',
weight: 10,
components: { 'minecraft:stored_enchantments': { levels: { 'minecraft:mending': 1 } } }
})
.register()También siguen los métodos viejos UMA.addLootBag(id, obj), UMA.addTrade(id, obj) y compañía,
que reciben el JSON entero. Sirven para portar datapacks tal cual, pero para escribir de cero
conviene el builder.
En run/kubejs/ hay un uma_ejemplos.js en cada carpeta, comentado y probado:
-
server_scripts/uma_ejemplos.js— todo lo de UMA: bolsas, adiciones, trades, una dificultad, una regla de mob y una oferta con precio. Usaminecraft:bedrockyminecraft:iron_golem_spawn_eggcomo items de referencia. -
startup_scripts/uma_ejemplos.js— explica por qué UMA no va ahí y muestra qué sí: registrar items nuevos conStartupEvents.registry, para después repartirlos con las bolsas de UMA. -
client_scripts/uma_ejemplos.js— tooltips avisando qué pide cada objeto.
KubeJS también carga kubejs/data/, así que podés dejar los JSON en
kubejs/data/nadien_teaks/uma/mob_rules/… y funciona igual.
Los errores de formato salen en el log del servidor con el id de la entrada, y esa entrada se descarta sin romper el resto.
/ums es un alias de /uma: todo funciona con los dos nombres.
/uma tps
/uma ping [jugadores]
/uma coliseum enter | leave
/uma rebuild_arena
/uma spawners list | place | clear
/uma difficulty get | list | set <id>
/uma bag <jugadores> <bolsa> [cantidad]
Muestra el rendimiento real del servidor, que casi todos los mods reportan mal:
- TPS y MSPT medio de los últimos 100 ticks, contra el presupuesto de 50 ms.
- El peor tick de ese periodo.
- El MSPT de cada dimensión por separado.
Los colores marcan cuándo va justo (amarillo) o mal (rojo).
Sin argumentos muestra el tuyo. Con un selector, el de todos. Verde por debajo de 100 ms, amarillo hasta 250, rojo por encima.
enter te lleva a la arena y guarda de dónde veniste; leave te devuelve ahí.
list cuenta los generadores del coliseo, place los pone según la config borrando los que haya, y
clear los saca todos. place y clear piden permiso 2. Ver
Coliseo.
Reconstruye el anfiteatro. Sirve si cambiaste el radio o la altura en la config, o si alguien lo destrozó. Pide permiso 2.
get muestra la dificultad activa, list las disponibles, set la cambia para toda la partida. Es
la que usan las reglas de mob que no declaran una propia. set pide permiso 2.
Entrega bolsas por id. Pide permiso 2.
config/ultimatemodadditions-common.toml
Son los interruptores generales. El contenido en sí vive en JSON, no acá.
| Opción | Por defecto | Qué hace |
|---|---|---|
enabled |
true | Activa la dimensión |
build_arena |
true | Construye el anfiteatro la primera vez |
arena_radius |
30 | Radio del piso de arena |
arena_floor_y |
64 | Altura del piso |
player_count_scaling |
0.25 | Escalado extra por jugador |
También la dificultad por defecto y si el botín custom sólo aplica dentro del coliseo.
| Opción | Por defecto | Qué hace |
|---|---|---|
enforce_requirements |
true | Si es false el portal deja pasar a cualquiera |
required_experience_levels |
100 | Niveles de experiencia; no se gastan |
Ver Coliseo.
| Opción | Por defecto | Qué hace |
|---|---|---|
enabled |
true | Pone generadores al construir la arena |
entities |
12 mobs hostiles | Qué tipos usar, uno por generador |
count |
12 | Cuántos poner; 0 no pone ninguno |
min_spawn_delay |
200 | Espera mínima entre tandas, en ticks |
max_spawn_delay |
600 | Espera máxima entre tandas, en ticks |
spawn_count |
4 | Cuántos mobs intenta sacar cada tanda |
max_nearby_entities |
8 | Se frena si ya hay tantos vivos cerca |
required_player_range |
24 | A qué distancia tiene que haber un jugador |
spawn_range |
6 | A cuántos bloques del generador pueden salir |
Ver Coliseo.
Activa el escalado, si sólo aplica dentro del coliseo, multiplicadores globales y tope de vida.
Activan cada sistema, si sólo funcionan dentro del coliseo, probabilidad y cantidades base, y si sólo cuentan las muertes hechas por un jugador.
Un pack chiquito que toca todo: una dificultad, una regla de mob, una bolsa, una adición a las
bolsas que ya existen y una oferta. Todo bajo el namespace nadien_teaks.
Va en config/openloader/data/nadien_teaks/ con
OpenLoader, o en
world/datapacks/nadien_teaks/data/nadien_teaks/ si preferís un datapack normal.
{
"name": "Brutal",
"health_multiplier": 6.0,
"damage_multiplier": 3.0,
"speed_multiplier": 1.15,
"armor_bonus": 8.0,
"armor_toughness_bonus": 3.0,
"knockback_resistance": 0.3,
"follow_range_bonus": 16.0,
"experience_multiplier": 3.0,
"coin_multiplier": 4.0,
"bag_chance_bonus": 0.08,
"extra_loot_rolls": 1,
"glowing": true,
"effects": [
{ "effect": "minecraft:strength", "amplifier": 1, "duration": -1, "chance": 1.0 }
],
"equipment": {
"mainhand": { "item": "minecraft:netherite_sword", "chance": 0.4, "drop_chance": 0.02 },
"head": { "item": "minecraft:netherite_helmet", "chance": 0.3 }
}
}{
"priority": 50,
"match": { "entities": ["minecraft:wither_skeleton"] },
"dimensions": ["ultimatemodadditions:coliseum"],
"difficulty": "nadien_teaks:brutal",
"replace_vanilla_drops": false,
"experience_multiplier": 2.0,
"drops": [
{ "item": "minecraft:netherite_scrap", "count": { "min": 1, "max": 2 }, "chance": 0.25,
"looting_bonus": 0.05 }
],
"coins": [
{ "tier": "1000", "count": 1, "chance": 0.35 }
],
"bags": [
{ "bag": "nadien_teaks:premio_jefe", "chance": 0.05 }
]
}{
"name": "Premio de jefe",
"tier": "legendary",
"color": 16733525,
"sort_order": 45,
"rolls": { "min": 3, "max": 5 },
"unique_rolls": true,
"announce": true,
"open_sound": "ultimatemodadditions:loot_bag_open",
"guaranteed": [
{ "item": "ultimatemodadditions:coin_20000", "count": { "min": 1, "max": 2 } }
],
"entries": [
{ "item": "minecraft:netherite_ingot", "count": { "min": 1, "max": 2 }, "weight": 10 },
{ "item": "minecraft:elytra", "count": 1, "weight": 2 },
{ "bag": "ultimatemodadditions:enchantment", "count": 1, "weight": 6 },
{ "loot_table": "minecraft:chests/end_city_treasure", "weight": 4 }
]
}{
"tiers": ["all"],
"entries": [
{ "item": "minecraft:copper_ingot", "count": { "min": 2, "max": 8 }, "weight": 10 }
],
"replace": false
}{
"name": "Premio de jefe",
"category": "bags",
"sort_order": 90,
"price": 50000,
"cost": [ { "item": "minecraft:emerald", "count": 8 } ],
"result": { "bag": "nadien_teaks:premio_jefe", "count": 1 },
"enabled": true
}Todo lo de arriba en un solo archivo, kubejs/server_scripts/nadien_teaks.js:
UMA.difficulty('nadien_teaks:brutal')
.name('Brutal')
.health(6).damage(3).speed(1.15)
.armor(8).armorToughness(3).knockbackResistance(0.3).followRange(16)
.experience(3).coins(4).bagChance(0.08).extraRolls(1)
.glowing(true)
.effect('minecraft:strength', 1, -1, 1.0)
.equipment('mainhand', 'minecraft:netherite_sword', 0.4, 0.02)
.register()
UMA.lootBag('nadien_teaks:premio_jefe')
.name('Premio de jefe')
.tier('legendary')
.color(0xFF5555)
.rolls(3, 5)
.uniqueRolls(true)
.announce(true)
.guaranteed('ultimatemodadditions:coin_20000', 1, 2)
.entry('minecraft:netherite_ingot', 1, 2, 10)
.entry('minecraft:elytra', 2)
.bagEntry('ultimatemodadditions:enchantment', 6)
.lootTableEntry('minecraft:chests/end_city_treasure', 1.0, 4)
.register()
UMA.mobRule('nadien_teaks:esqueletos_wither')
.priority(50)
.entities('minecraft:wither_skeleton')
.dimensions('ultimatemodadditions:coliseum')
.difficulty('nadien_teaks:brutal')
.experienceMultiplier(2)
.drop('minecraft:netherite_scrap', 1, 2, 0.25)
.coin('1000', 1, 1, 0.35)
.bag('nadien_teaks:premio_jefe', 0.05)
.register()
UMA.bagDrop('nadien_teaks:cobre_en_todas')
.allTiers()
.entry('minecraft:copper_ingot', 2, 8, 10)
.register()
UMA.trade('nadien_teaks:premio_jefe')
.name('Premio de jefe')
.category('bags')
.price(50000)
.cost('minecraft:emerald', 8)
.resultBag('nadien_teaks:premio_jefe')
.sortOrder(90)
.register()/reload y listo. Los errores de formato salen en el log del servidor con el id de la entrada, y
esa entrada se descarta sin romper el resto.
Estaba acá y ahora tiene mod propio: Ultimate Skills, un árbol de nodos donde cada nodo, cada conexión, cada bono y cada efecto se define en JSON o KubeJS. Los dos mods son independientes: se instala cualquiera de los dos suelto, o los dos.