Too Many Attributes
Download 4.0.0Latest release · all versionsToo Many Attributes (TMA) is a Fabric mod for Minecraft 1.20.1 that adds new building blocks to Origins datapacks. Everything it adds is used from power JSON with "type": "too-many-attributes:<id>", the same way as Origins' own origins:<id> types.
What it adds:
- 41 entity conditions: attack cooldown, recent damage and damage blocked, knockback, crouch depth, sprint time, glide ratio, friction, light level at the eyes, moon phase, sleeping, redstone power, vanilla statistics, and more.
- A block condition for redstone signal strength (
redstone_power), usable wherever Origins checks a block. - Actions: turn an entity's view (
set_rotation,look_at), fake block-crack animations (play_block_crack), item and vibration cooldowns, fake mobs and fake players only chosen players can see, which powers can act on (spawn_fake_entity,fake_entity_action), and disguises that make an entity look like another type (disguise). - Mobs and effects: make a neutral mob angry at someone (
aggro_at), breed two animals on the spot (breed), trade places with an entity (swap), steal or give status effects (transfer_effects), sounds that follow an entity or reach the whole dimension (play_sound), mobs that flee the holder (scare_mobs), slow, freeze or speed up any entity (set_tick_rate,/tma tickrate), and actions when the holder kills something (action_on_kill). - Powers and blocks: switch off the holder's other powers while a condition holds (
prevent_powers), and run a block action on every block connected to one, like a whole tree (connected_blocks). - Signals: one power announces something by name (
emit_signal) and unrelated powers react (action_on_signal), so separately written origins can work together. - Fake blocks: show chosen players a different block at a position (
set_fake_block, thefake_blockspower,/tma fakeblock). - Zones: run any block action on every block in a box, sphere or cylinder, solid or hollow (
zone). Use it for ghost blocks or crack animations over an area. - Name obfuscation and tab-list hiding: scramble a player's name and Styled Nicknames nickname for chosen viewers (
obfuscate_name,/tma obfuscate), or leave a player out of chosen tab lists (hidden_from_tablist,hide_from_tablist,/tma tablist). - Cursor speed: slow down, speed up or freeze how fast a player's view turns with the mouse, while a power is active (
modify_cursor_speed) or for a set time (set_cursor_speed). - Field of view: zoom a player's view in or out, easing like sprinting does, while a power is active (
modify_fov) or for a set time (set_fov). - Camera: switch a player between first person and the two third-person views, like F5 (
set_perspective), and check which view they're in (perspective). - Keys: react to key combos (
action_on_key_sequence), block keys (prevent_key_press) and press keys for a player or mob (force_key_pressed), using any keybind's id, from vanilla, Origins or any mod. - Wider raycasts: a
radiusfield on Origins' ownorigins:raycastaction and condition, so the ray hits entities near it. - Custom status effects: data packs define their own status effects in
data/<namespace>/effects/, which work everywhere a status effect does and hold powers while active. - Entity-tied chunk loading: keep the chunks around an entity loaded like
/forceload, following it as it moves (thechunk_loaderpower,load_chunks,/tma chunkload). - Power tags: group powers in one datapack file (wildcards included) and check them with
has_power_tag. - 45 read-only attributes with the same values, readable with
/attributeand Origins'origins:attributecondition, with no power needed. - A settable
dragattribute on every living entity that replaces vanilla's fall-drag constant. - Variables and lists. Typed per-player data (
int,double,String, …) that you change and check with Java expressions. You can use it in any Origins field and in commands, and it can read scoreboards and the items in a power inventory. - A global store. Typed values and lists addressed by a key, saved with the world, with optional locking and automatic cleanup of keys tied to entities.
- Power inventories read and written from commands, including each slot's item id as plain text.
- Simple Voice Chat integration: conditions for talking, whispering and groups, plus voice broadcast, forced mute and forced deafen.
- Hardcore Revival integration: an
is_downedcondition for players knocked out in Hardcore Revival. - Styled Nicknames integration: name obfuscation covers nicknames too.
- Commands:
/tma with(variables in any command),/tma powerinv(read and writeorigins:inventorypowers),/tma fakeentity,/tma disguise,/tma global,/tma fakeblock,/tma tickrate,/tma keys,/tma chunkload,/tma obfuscate,/tma tablist,/tma powertag,/disableshield,/tmavc.
The pages read in order, like slides, and each one also works as a reference.
Pages
| # | Page | What's in it |
|---|---|---|
| 1 | Getting started | Requirements, installing, your first TMA power, how these docs are laid out |
| 2 | Entity conditions | The 41 condition types: combat, movement, body (including the camera perspective), world, mobs, items, integrations |
| 3 | Bi-entity conditions | is_observed_by, has_power_tag |
| 4 | Damage conditions | damage_source_nbt |
| 5 | Block conditions | redstone_power |
| 6 | Entity actions | radius on Origins' origins:raycast, signals, fake blocks, entity-tied chunk loading, name obfuscation, tab list hiding, cursor speed (modify_cursor_speed, set_cursor_speed), field of view (modify_fov, set_fov), set_perspective, keys (action_on_key_sequence, prevent_key_press, force_key_pressed), custom status effects from data packs, set_vibration_cooldown, set_item_cooldown, set_rotation, look_at, spawn_fake_entity, disguise, undisguise, the block action play_block_crack, zone, fake_entity_action, the fake_entity condition, action_on_fake_entity_hit, the event powers (death, kill, join, disconnect, start tracking, mob conversion, sleep start), aggro_at, breed, swap, transfer_effects, play_sound, set_tick_rate, scare_mobs, prevent_powers, connected_blocks, action_on_chat, and where the other actions live |
| 7 | Attributes | The 45 read-only attributes, plus the settable drag |
| 8 | Variables | Declaring, changing and checking per-player variables, and HUD bars |
| 9 | Variables in Origins fields, commands and scoreboards | with_variables, /tma with, Scoreboard.get, modifier resource |
| 10 | Language reference | The Java expression language: operators, types, built-ins (including Death, Stat and Global), errors |
| 11 | Lists and loops | list, power_list, for_each, for_each_read |
| 12 | Global store | Values shared by every entity: Global.*, global_variables, modify_global, locking, cleanup, /tma global |
| 13 | Voice chat | Simple Voice Chat conditions, broadcast, mute and deafen |
| 14 | Power inventories | Reading and writing origins:inventory powers |
| 15 | Commands | Every command in one place |
| 16 | Power tags | Grouping powers in a datapack file, the has_power_tag condition, /tma powertag |
| 17 | Cookbook | Complete powers that combine several features |
Every id
Condition types
| Id | Kind | Page |
|---|---|---|
attack_cooldown_progress | entity | 2 |
biome_temperature | entity | 2 |
critical_hit_eligible | entity | 2 |
crouch_depth | entity | 2 |
damage_source_nbt | damage | 4 |
distance_to_nearest_player | entity | 2 |
exhaustion | entity | 2 |
expression | entity, bi-entity | 8 |
friction | entity | 2 |
glide_ratio | entity | 2 |
has_attack_target | entity | 2 |
has_power_tag | entity, bi-entity | 16 |
hurt_time | entity | 2 |
in_same_voice_group | bi-entity | 13 |
in_voice_group | entity | 13 |
in_voice_range_of | bi-entity | 13 |
invulnerable_ticks | entity | 2 |
is_blocking | entity | 2 |
is_broadcasting_voice | entity | 13 |
is_deafened_voice | entity | 13 |
is_downed | entity | 2 |
is_jumping | entity | 2 |
is_moving_loudly | entity | 2 |
is_muted_voice | entity | 13 |
is_observed_by | bi-entity | 3 |
is_sleeping | entity | 2 |
is_talking | entity | 13 |
is_whispering | entity | 13 |
item_on_cooldown | entity | 2 |
last_attack_reach | entity | 2 |
last_damage_amount | entity | 2 |
last_damage_was_crit | entity | 2 |
last_damage_type | entity | 2 |
last_hit_was_crit | entity | 2 |
light_at_eyes | entity | 2 |
look_angle | entity | 2 |
moon_phase | entity | 2 |
fake_entity | entity | 6 |
perspective | entity | 2 |
projectile_age | entity | 2 |
recent_damage_taken | entity | 2 |
recent_damage_blocked | entity | 2 |
recent_knockback | entity | 2 |
redstone_power | block, entity | 5, 2 |
regional_difficulty | entity | 2 |
sprint_ticks | entity | 2 |
stat | entity | 2 |
submersion_depth | entity | 2 |
time_airborne | entity | 2 |
time_since_last_meal | entity | 2 |
velocity | entity | 2 |
vibration_on_cooldown | entity | 2 |
voice_installed | entity | 13 |
voice_mic_disabled | entity | 13 |
with_variables | entity, bi-entity | 9 |
xp_progress | entity | 2 |
Action types
| Id | Kind | Page |
|---|---|---|
aggro_at | bi-entity | 6 |
breed | bi-entity | 6 |
clear_fake_block | entity, block | 6 |
connected_blocks | block | 6 |
delete_global | entity, bi-entity | 12 |
despawn_fake_entity | entity | 6 |
disguise | entity | 6 |
execute | entity, bi-entity | 8 |
for_each | entity, bi-entity | 11 |
for_each_read | entity, bi-entity | 11 |
hide_from_tablist | entity | 6 |
load_chunks | entity | 6 |
emit_signal | entity | 6 |
look_at | entity, bi-entity | 6 |
modify_global | entity, bi-entity | 12 |
modify_variable | entity, bi-entity | 8 |
force_key_pressed | entity | 6 |
fake_entity_action | entity | 6 |
play_block_crack | block | 6 |
play_sound | entity | 6 |
set_fake_block | entity, block | 6 |
show_in_tablist | entity | 6 |
set_fov | entity | 6 |
set_item_cooldown | entity | 6 |
set_cursor_speed | entity | 6 |
set_perspective | entity | 6 |
set_rotation | entity | 6 |
set_tick_rate | entity | 6 |
set_vibration_cooldown | entity | 6 |
spawn_fake_entity | entity | 6 |
start_broadcast_voice | entity | 13 |
stop_broadcast_voice | entity | 13 |
stop_loading_chunks | entity | 6 |
swap | bi-entity | 6 |
transfer_effects | bi-entity | 6 |
undisguise | entity | 6 |
with_variables | entity, bi-entity | 9 |
zone | entity, block | 6 |
Power types
| Id | Page |
|---|---|
variables | 8 |
variable_bar | 8 |
global_variables | 12 |
list | 11 |
power_list | 11 |
item_list | 11 |
action_on_death | 6 |
action_on_kill | 6 |
action_on_key_sequence | 6 |
action_on_join | 6 |
action_on_disconnect | 6 |
action_on_start_tracking | 6 |
action_on_mob_conversion | 6 |
action_on_sleep_start | 6 |
action_on_signal | 6 |
prevent_powers | 6 |
prevent_key_press | 6 |
scare_mobs | 6 |
fake_blocks | 6 |
chunk_loader | 6 |
modify_cursor_speed | 6 |
modify_fov | 6 |
obfuscate_name | 6 |
hidden_from_tablist | 6 |
action_on_chat | 6 |
action_on_fake_entity_hit | 6 |
Commands
| Command | Page |
|---|---|
/tma with <targets> <command> | 9, 15 |
/tma fakeentity spawn|player <owner> <entity_type|username> <pos> <lifetime> [behavior …] [viewers …] [id …] | 6, 15 |
/tma fakeentity run <id> <command> | 6, 15 |
/tma disguise <targets> <entity_type> [duration …] [viewers …], /tma undisguise <targets> | 6, 15 |
/tma global get|set|delete|list|prune|lock|unlock … | 12, 15 |
/tma fakeblock set|fill|clear … | 6, 15 |
/tma chunkload start|stop|list … | 6, 15 |
/tma tickrate <targets> rate|freeze|unfreeze|step|sprint|reset|query … | 6, 15 |
/tma keys watch|stop … | 15 |
/tma obfuscate <targets> [duration …] [viewers …], /tma unobfuscate <targets> | 6, 15 |
/tma tablist hide|show … | 6, 15 |
/tma powertag list|of … | 16 |
/tma powerinv … | 14, 15 |
/disableshield <targets> <ticks> | 15 |
/tmavc broadcast|mute|deafen … | 13, 15 |
/gamerule whitelistFeedback <username> … | 15 |
/gamerule tmaPlayerExpiryDays <days> | 15 |
The 45 read-only attributes (plus drag) are listed on page 7.
Suspected bugs
Unconfirmed behavior worked out from the code.
| Where | Suspected behavior |
|---|---|
look_angle | The raw yaw is unwrapped, so after turning around several times it can leave the −180 to 180 range. The attribute is clamped to that range. |
| Variable bar | Origins' /resource command works on the bar too. |
Scoreboard.get | The client may only know objectives shown in a display slot, so conditions that Origins checks on the client may fail to read scores. |
Changelog
Every version's changes, newest first
4.0.0
First release, forked from Origins: Powerful Powers 1.0.0.
Added
zoneentity and block action: runs a block action on every block in a box, sphere or cylinder, solid or hollow. Use it withset_fake_blockfor ghost blocks over an area, orplay_block_crackto crack an area./tma fakeblock filland/tma fakeblock clear <from> <to>: fake blocks over a box, like/fill.Ported from Overgrown's Apoli, see Mobs and effects:
aggro_at: makes a neutral mob angry at the actor.breed: two animals have a baby on the spot.swap: the actor and target trade places, across dimensions too.transfer_effects: steals, gives or copies status effects.play_sound: addsfollow_entity,globalandhear_selfto Origins' fields.action_on_kill: actions on the holder and the victim when the holder kills something.connected_blocks: runs a block action on every block connected to one, like a whole tree or ore vein.prevent_powers: the listed powers stop working while it's active.scare_mobs: nearby mobs run away from the holder.set_tick_rateand/tma tickrate: slow, freeze, step or speed up single entities, players included. A frozen player can't attack, use items or break blocks.modify_cursor_speedpower andset_cursor_speedaction: scale how fast a player's view turns with the mouse. The action takes aduration.modify_fovpower andset_fovaction: zoom a player's view in or out. The action takes aduration.set_perspective: switches a player's camera like F5.perspectivecondition: checks which view a player's camera is in.action_on_key_sequencepower: actions on key combos, with taps, holds and time limits.prevent_key_presspower: blocks every keybind or the listed ones, checked on the server too.force_key_pressedaction: presses a key for a player, or runs a mob's key-bound powers.- All three take any keybind's id, like
key.jumpor a mod's own keybind. /tma keys watch: shows a player's held keybinds and key sequence progress in your action bar.radiusonorigins:raycast: Origins' raycast action and condition can hit entities near the ray.- Custom status effects: data packs define status effects in
data/<namespace>/effects/, holding powers while active. They're saved by id, so changing the effect files is safe.
Changed
- Placing many fake blocks at once is faster.