Too Many Attributes
» Contents

Too Many Attributes

Download 4.0.0Latest release · all versions

Too 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, the fake_blocks power, /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 radius field on Origins' own origins:raycast action 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 (the chunk_loader power, 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 /attribute and Origins' origins:attribute condition, with no power needed.
  • A settable drag attribute 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_downed condition 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 write origins:inventory powers), /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

#PageWhat's in it
1Getting startedRequirements, installing, your first TMA power, how these docs are laid out
2Entity conditionsThe 41 condition types: combat, movement, body (including the camera perspective), world, mobs, items, integrations
3Bi-entity conditionsis_observed_by, has_power_tag
4Damage conditionsdamage_source_nbt
5Block conditionsredstone_power
6Entity actionsradius 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
7AttributesThe 45 read-only attributes, plus the settable drag
8VariablesDeclaring, changing and checking per-player variables, and HUD bars
9Variables in Origins fields, commands and scoreboardswith_variables, /tma with, Scoreboard.get, modifier resource
10Language referenceThe Java expression language: operators, types, built-ins (including Death, Stat and Global), errors
11Lists and loopslist, power_list, for_each, for_each_read
12Global storeValues shared by every entity: Global.*, global_variables, modify_global, locking, cleanup, /tma global
13Voice chatSimple Voice Chat conditions, broadcast, mute and deafen
14Power inventoriesReading and writing origins:inventory powers
15CommandsEvery command in one place
16Power tagsGrouping powers in a datapack file, the has_power_tag condition, /tma powertag
17CookbookComplete powers that combine several features

Every id

Condition types

IdKindPage
attack_cooldown_progressentity2
biome_temperatureentity2
critical_hit_eligibleentity2
crouch_depthentity2
damage_source_nbtdamage4
distance_to_nearest_playerentity2
exhaustionentity2
expressionentity, bi-entity8
frictionentity2
glide_ratioentity2
has_attack_targetentity2
has_power_tagentity, bi-entity16
hurt_timeentity2
in_same_voice_groupbi-entity13
in_voice_groupentity13
in_voice_range_ofbi-entity13
invulnerable_ticksentity2
is_blockingentity2
is_broadcasting_voiceentity13
is_deafened_voiceentity13
is_downedentity2
is_jumpingentity2
is_moving_loudlyentity2
is_muted_voiceentity13
is_observed_bybi-entity3
is_sleepingentity2
is_talkingentity13
is_whisperingentity13
item_on_cooldownentity2
last_attack_reachentity2
last_damage_amountentity2
last_damage_was_critentity2
last_damage_typeentity2
last_hit_was_critentity2
light_at_eyesentity2
look_angleentity2
moon_phaseentity2
fake_entityentity6
perspectiveentity2
projectile_ageentity2
recent_damage_takenentity2
recent_damage_blockedentity2
recent_knockbackentity2
redstone_powerblock, entity5, 2
regional_difficultyentity2
sprint_ticksentity2
statentity2
submersion_depthentity2
time_airborneentity2
time_since_last_mealentity2
velocityentity2
vibration_on_cooldownentity2
voice_installedentity13
voice_mic_disabledentity13
with_variablesentity, bi-entity9
xp_progressentity2

Action types

IdKindPage
aggro_atbi-entity6
breedbi-entity6
clear_fake_blockentity, block6
connected_blocksblock6
delete_globalentity, bi-entity12
despawn_fake_entityentity6
disguiseentity6
executeentity, bi-entity8
for_eachentity, bi-entity11
for_each_readentity, bi-entity11
hide_from_tablistentity6
load_chunksentity6
emit_signalentity6
look_atentity, bi-entity6
modify_globalentity, bi-entity12
modify_variableentity, bi-entity8
force_key_pressedentity6
fake_entity_actionentity6
play_block_crackblock6
play_soundentity6
set_fake_blockentity, block6
show_in_tablistentity6
set_foventity6
set_item_cooldownentity6
set_cursor_speedentity6
set_perspectiveentity6
set_rotationentity6
set_tick_rateentity6
set_vibration_cooldownentity6
spawn_fake_entityentity6
start_broadcast_voiceentity13
stop_broadcast_voiceentity13
stop_loading_chunksentity6
swapbi-entity6
transfer_effectsbi-entity6
undisguiseentity6
with_variablesentity, bi-entity9
zoneentity, block6

Power types

IdPage
variables8
variable_bar8
global_variables12
list11
power_list11
item_list11
action_on_death6
action_on_kill6
action_on_key_sequence6
action_on_join6
action_on_disconnect6
action_on_start_tracking6
action_on_mob_conversion6
action_on_sleep_start6
action_on_signal6
prevent_powers6
prevent_key_press6
scare_mobs6
fake_blocks6
chunk_loader6
modify_cursor_speed6
modify_fov6
obfuscate_name6
hidden_from_tablist6
action_on_chat6
action_on_fake_entity_hit6

Commands

CommandPage
/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.

WhereSuspected behavior
look_angleThe 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 barOrigins' /resource command works on the bar too.
Scoreboard.getThe 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

  • zone entity and block action: runs a block action on every block in a box, sphere or cylinder, solid or hollow. Use it with set_fake_block for ghost blocks over an area, or play_block_crack to crack an area.
  • /tma fakeblock fill and /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: adds follow_entity, global and hear_self to 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_rate and /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_speed power and set_cursor_speed action: scale how fast a player's view turns with the mouse. The action takes a duration.
    • modify_fov power and set_fov action: zoom a player's view in or out. The action takes a duration.
    • set_perspective: switches a player's camera like F5.
    • perspective condition: checks which view a player's camera is in.
    • action_on_key_sequence power: actions on key combos, with taps, holds and time limits.
    • prevent_key_press power: blocks every keybind or the listed ones, checked on the server too.
    • force_key_pressed action: presses a key for a player, or runs a mob's key-bound powers.
    • All three take any keybind's id, like key.jump or a mod's own keybind.
    • /tma keys watch: shows a player's held keybinds and key sequence progress in your action bar.
    • radius on origins: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.