Effect Control

Quick rating

Community listing page, reviews here may not be monitored by the author.

Effect Control

No reviews yet

Highly customizable potion effect applier & remover.

Mod Loaders
Minecraft

About

Description

description_0d52f801-1e0d-4836-a0e1-ebce9568226f.png

Highly customizable potion effect applier & remover.

Effect Control is a compliment for In Control! that adds more control over potion effects.

Config

config/effectcontrol-common.toml

Each entry in effects is one rule: comma separated key=value pairs.

effects = [
    "effect=minecraft:strength, duration=30, trigger=kill, entity=minecraft:zombie",
    "effect=minecraft:regeneration, duration=20, trigger=consume, item=minecraft:golden_apple",
    "effect=minecraft:fire_resistance, duration=infinite, trigger=enter, dimension=minecraft:the_nether",
    "effect=minecraft:fire_resistance, trigger=leave, dimension=minecraft:the_nether, action=remove"
]

Effect Attributes

Key Meaning Default
trigger What makes the rule activate. respawn
effect Potion effect id. Required unless the rule only writes flags.  
duration Seconds, or infinite. 30
level 1 is level I, 2 is level II. 1
action give or remove. give
ambient Softer beacon particles. false
particles Show the particles. true
icon Show the HUD icon. true
hidden Shorthand for particles=false, icon=false. false

Triggers

Activated by something the player does:

Trigger Activates when Useful filters
join Player logs in  
first_join First login ever, once per player  
respawn Player respawns after dying dimension
end_return Player leaves the End through the exit portal  
any join, respawn or end_return  
enter / leave Dimension entered / left dimension (required)
kill Player kills something entity, source
hurt Player damages something entity, source
hurt_by Player is damaged entity, source
use Player right-clicks an item in the air, e.g. an ender pearl or a bucket item
consume Player finishes eating or drinking item
shoot Player fires a bow item
release Player releases a held item, e.g. a trident item
pickup Player picks an item up item
container Player opens a container or their inventory  
advancement Player earns an advancement advancement
craft / smelt Item crafted / smelted item
fish Player reels something in item
tame / breed Animal tamed / bred entity
trade Villager trade completed item
level_up Player gains XP levels  
tool_broken Held item breaks item

Continuous player state, activated when entering or leaving it. They come in pairs, so you pair the give with the matching remove:

Trigger Becomes true when Needs
near / away Something is within radius radius and block or entity
looking / not_looking Player is looking at it block or entity, radius optional (default 5)
sneaking / not_sneaking Player is crouching  
sprinting / not_sprinting Player is sprinting  
on_fire / not_on_fire Player is burning  
in_fluid / not_in_fluid Player is in a fluid fluid
riding / not_riding Player is on a mount entity optional
sleeping / not_sleeping Player is in a bed  
underwater / not_underwater Player's head is submerged  

Most triggers accept alternative spellings, so write whichever you prefer. damage or attack for hurt; takedamagefrom or damaged_by for hurt_by; eat or drink for consume; use_item or interact for use; inventory or open for container; achievement for advancement; always for any; every_join or login for join; every_respawn or death for respawn; end for end_return; enter_dimension for enter; leave_dimension or exit for leave; fire for shoot; when_near for near; not_near or leave_near for away; once for first_join; look or looking_at for looking; look_away for not_looking; sneak or crouching for sneaking; sprint for sprinting; burning for on_fire; mounted for riding; dismounted for not_riding; asleep for sleeping; awake for not_sleeping; submerged for underwater; in_liquid / not_in_liquid for in_fluid / not_in_fluid; levelup for level_up; item_broken for tool_broken.

Filter keys have aliases too: mob for entity, armor for wearing, damage_type for source, liquid for fluid, xp for xp_level, tag for nbt, has/without for requires/missing, and set_flag/clear_flag/flagged/unflagged for set/unset/if_set/if_unset.

Filters

Any of these narrow a rule. Repeat a key to accept more than one value; the rule needs one match from each key you used.

Key Matches Example
dimension Dimension the rule is about dimension=minecraft:the_nether
block Block id block=minecraft:diamond_ore
entity Entity type id entity=minecraft:creeper
item Item id item=minecraft:golden_apple
source Damage type, as vanilla names it source=lava
advancement Advancement id advancement=minecraft:story/mine_diamond
radius Blocks, 1 to 64 radius=8
x y z Coordinate, exact or a range y=50..100, y=..0, x=64..
time Day tick 0..24000, or a name time=night, time=0..6000
weather clear, rain or thunder weather=thunder
days In-world days elapsed days=100..
stat + count A player statistic and its value stat=killed:minecraft:zombie, count=100..
nbt Item NBT, matched as a subset nbt={Damage:0}
health Player health in points health=..6
xp_level Experience level xp_level=30..
light Light level where the player stands light=..7
biome Biome id biome=minecraft:desert
tag Scoreboard tag on the player tag=vip
gamemode survival creative adventure spectator gamemode=survival
difficulty peaceful easy normal hard difficulty=hard
wearing Item worn in an armor slot wearing=minecraft:diamond_helmet
fluid water or lava fluid=lava
chance Percent chance the rule fires, 1 to 100 chance=25
cooldown Seconds before the rule may fire again cooldown=60

Time names: day, night, noon, midnight, sunrise (or dawn), sunset (or dusk).

Stat types: mined, killed, killed_by, used, crafted, broken, picked_up, dropped, custom. count defaults to 1.., meaning at least once.

Everything from x downwards works on every trigger:

effects = [
    "effect=minecraft:poison, duration=10, trigger=pickup, item=minecraft:diamond, y=..0, time=night",
    "effect=minecraft:strength, duration=60, trigger=join, stat=killed:minecraft:zombie, count=100.."
]

Conditions

requires and missing gate a rule on effects the player already has. Both repeat, and all must pass. has and without are aliases.

effects = [
    "effect=minecraft:regeneration, duration=15, trigger=join, requires=minecraft:poison",
    "effect=minecraft:strength, duration=30, trigger=respawn, missing=minecraft:weakness"
]

Conditions read the player's state from before the rule set runs, so rules in one event cannot see each other's work. A rule blocked by a condition does not count against its limit.

Flags

Flags are permanent per-player marks, saved in the world. You can use them to make something like "once this happens, never again".

Key Does
set Set the flag when the rule fires
unset Clear the flag when the rule fires
if_set Only fire if the flag is set
if_unset Only fire if the flag is not set
effects = [
    "trigger=advancement, advancement=minecraft:end/kill_dragon, set=dragon_slain",
    "effect=minecraft:strength, duration=60, trigger=join, if_unset=dragon_slain",
    "trigger=consume, item=minecraft:milk_bucket, unset=dragon_slain"
]

Kill the dragon and the strength stops forever. Drink milk and it comes back. A rule that only writes flags needs no effect.

Curios

The wearing filter checks armour slots and, when Curios is installed, curio slots as well:

effects = [
    "effect=minecraft:speed, duration=30, trigger=consume, item=minecraft:bread, wearing=curios:ring"
]

Limits

limit stops a rule after that many grants per player, 0 never stops. id names the counter, defaulting to the effect, trigger and filters combined, so give two rules the same id when they should share a counter.

Timing

apply_delay_ticks (0 to 200) waits before applying. Use it if another mod clears effects when a player spawns.

scan_interval_ticks (1 to 200, default 20) is how often the continuous triggers re-check. Block scans for near sweep a sphere of radius.

Command

This clears saved limit counters and flags.

Command Clears
/effectcontrol reset Whoever ran it
/effectcontrol reset <targets> The players a selector picks out
/effectcontrol reset all Every stored player, online or not

Notes

Effects, blocks, items, entities and dimensions from other mods all work, just use their ids. A namespace-less id is assumed to be minecraft:. Entries that cannot be read are skipped and reported in the log, as is any id that is not installed.

FAQ

Found a bug? 

Submit a issue request on the Github issues page with:
- A description of the problem.

- Any relevant logs.
- The version of Effect Control.
- What loader you are using (ex: Forge 1.20.1, NeoForge 1.21.1)

Want to suggest a feature?

You can submit a feature request in the Github issues page or in the comments.