Suspicious Delivery - unfamily/iskandert_utilities GitHub Wiki
Requires Iskandert's Utilities 3.4.0.0.0 or newer (not present in earlier mod releases).
| Topic | Page |
|---|---|
| Ancient Tablet & Ancient Table | Ancient-Tablet-and-Table |
Suspicious Delivery (iska_utils:suspicious_delivery) is a consumable item that grants a random reward when used. Pack developers configure the loot table via datapack; obtaining (Wandering Trader drop and trade) is handled by the mod.
| Source | Behavior |
|---|---|
| Wandering Trader β trade | Listed in the wandering_trader/uncommon trade pool (data/iska_utils/villager_trade/wandering_trader/suspicious_delivery_12.json β¦ _16.json). Cost: 12 emeralds (datapack), up to 8 uses per offer. |
| Wandering Trader β fallback trade | If a trader spawns without a Suspicious Delivery offer from datapacks, the mod injects one offer (12β16 emeralds, 8 uses). At most one Suspicious Delivery trade per trader (duplicates are removed). |
| Wandering Trader β drop | 50% chance to drop one Suspicious Delivery when the trader is killed. |
| Mimic (optional) | If the Artifacts mod is loaded, a 5% loot pool on the Mimic can drop one item from tag iska_utils:curio_compat/mimic (default: suspicious_delivery only). Artifacts inside the Suspicious Delivery are not dropped directly by the Mimic. |
Tooltip lines (lang keys):
-
tooltip.iska_utils.suspicious_delivery.obtaining0β dropped by Wandering Trader -
tooltip.iska_utils.suspicious_delivery.obtaining1β traded by Wandering Trader -
tooltip.iska_utils.suspicious_delivery.obtaining2β optional Mimic line (only when Artifacts is loaded)
-
Use (right-click): server picks one weighted entry from the loaded definition, runs all actions in that entryβs
dolist, then consumes one item from the stack. -
Shift+use (sneak + right-click): 3.8.0.0.0+ β opens packages in a loop while the stack still has items. After each roll, if the entry has
quick_open: true, continues; ifquick_openisfalseor omitted, opens that package once and then stops (remaining stack is kept). - Items are dropped at the playerβs position (
dropaction). Messages use the samemessageformat as Command Items. - If no definition is loaded or all weights are zero, the item is still consumed but nothing is granted.
Place JSON under:
data/<namespace>/load/iska_utils_suspicious_delivery/
Or a flat file under data/<namespace>/load/ with "type": "iska_utils:suspicious_delivery" (routed by type).
Reload: /iska_lib_dev reload or /reload.
Important: Only one definition file is kept at runtime β the last matching file in datapack load order replaces the entire table (entries are not merged across files). Use a single file or namespace priority you control.
{
"type": "iska_utils:suspicious_delivery",
"overwritable": true,
"entries": [
{
"weight": 1,
"luck": 0,
"do": [
{ "drop": "iska_utils:drop_of_entropy" }
]
},
{
"weight": 3,
"luck": 0,
"do": [
{ "message": {
"target": "@s",
"distance": 0,
"color": "#FFD700",
"in": "action_bar",
"text": "message.suspicious_delivery.mining_equitizer"
}},
{ "drop": "iska_utils:mining_equitizer" }
]
}
]
}| Field | Description |
|---|---|
type |
Must be iska_utils:suspicious_delivery
|
overwritable |
Optional; same semantics as other load JSON (default generation / overwrite protection) |
entries |
Array of loot entries (preferred key) |
entrities |
Legacy alias for entries (typo kept for backward compatibility) |
| Field | Default | Description |
|---|---|---|
weight |
0 |
Relative weight. Entries with weight β€ 0 are skipped in the roll total. |
luck |
0 |
Signed tier for fortune / unluck rerolls (see below). |
jeimode |
show |
JEI display: show, hidden, or mask. |
stages |
[] |
Stage conditions (same objects as Command Items). |
stages_logic |
AND |
AND, OR, DEF_AND, or DEF_OR. |
mods |
β | Mod presence pool (see Mod and stage gates). |
mods_logic |
AND |
AND, OR, DEF_AND, or DEF_OR. |
do |
[] |
Ordered script actions when this entry wins. |
quick_open |
false |
3.8.0.0.0+ β when true, this entry may continue in a shift+use bulk open chain. Leave false or omit for entries with delay, execute, or long scripts (e.g. fake TNT bomb). |
Same action types as command items (execute, message, delay, if, per-action stages). Suspicious Delivery also supports:
| Action | JSON | Description |
|---|---|---|
| Drop | { "drop": "namespace:item_id" } |
Spawns one item entity at the player (optional β entries can be message/command only). |
| Message | { "message": { ... } } |
See Command Items β Message action. |
| Execute | { "execute": "..." } |
Runs as the player (@s, ~ ~ ~). Command text is passed through unchanged. |
| Delay | { "delay": 20 } |
Waits N ticks before the next action (async per player). |
item: delete/consume/... actions are ignored with a log warning.
Same layout as Factory: one input slot (Suspicious Delivery) and a 9Γ3 output grid per page (up to 27 visible entries per JEI page; extra pages if needed).
-
show β one grid slot per entry; if
dohas severaldropactions, they alternate in that same slot (addItemStacks). -
hidden β not shown in the grid;
weightstill counts in the percentage denominator. -
mask β wins over drops; that slot always shows
iska_utils:suspicious_delivery_undefined.
Per-slot tooltip: 30.0% (one decimal) and optional luck: <value> when luck β 0. Percentages use the eligible pool for the current player context (mods always; stages on SP / integrated server). JEI refreshes when opening the category or the Suspicious Delivery GUI β no /reload required after stage changes.
While opening a Suspicious Delivery, the playerβs Luck and Bad Luck effects adjust the weighted roll:
-
Net =
(LUCK level) β (UNLUCK level)where level = amplifier + 1 (0 if absent).
Fortune (net β₯ 0):
| Phase | Reroll chance if entry luck below threshold |
|---|---|
| Tier 1 |
min(50, 30 + netΓ5)% while luck < 0
|
| Tier 2 (net β₯ 5) |
min(100, 50 + (netβ4)Γ10)% while luck < 0
|
| Tier 3 (net β₯ 10) | Reroll until luck β₯ 1000 (max 64 tries) |
| Tier 4 | Reroll until luck β₯ 10000 (max 64 tries) |
Unluck (net < 0): symmetric with effective = βnet, rerolling while luck > 0 and toward luck β€ β1000 / β€ β10000.
If no entry in the pool reaches the forced threshold, the current pick is kept (debug log).
{
"weight": 2,
"luck": 0,
"jeimode": "show",
"do": [
{ "message": { "target": "@s", "in": "action_bar", "text": "message.iska_utils.suspicious_delivery.nested" } },
{ "drop": "iska_utils:suspicious_delivery" }
]
}Use these exact execute strings (do not alter NBT or selectors):
{
"weight": 3,
"luck": -10,
"jeimode": "mask",
"do": [
{ "message": { "target": "@s", "in": "action_bar", "text": "message.iska_utils.suspicious_delivery.bomb_tickle" } },
{ "delay": 20 },
{ "message": { "target": "@s", "in": "action_bar", "color": "#FF0000", "text": "message.iska_utils.suspicious_delivery.bomb_alarm" } },
{ "execute": "summon tnt ~ ~ ~ {fuse:5000, Tags:[\"fake_tnt\"]}" },
{ "delay": 100 },
{ "execute": "kill @e[type=tnt,tag=fake_tnt]" },
{ "message": { "target": "@s", "in": "action_bar", "text": "message.iska_utils.suspicious_delivery.bomb_clock" } },
{ "drop": "minecraft:clock" }
]
}Requires Iskandert's Utilities 3.8.0.0.0 or newer.
- Normal use: one package per click (unchanged).
-
Shift+use: server opens packages in a loop while the stack still has items:
- Weighted roll β run
do[]β consume 1 item. - If the winning entry has
quick_open: trueand the stack is not empty β repeat. - If
quick_openisfalseor omitted β open this package, then stop (remaining stack is kept).
- Weighted roll β run
Pack authors should set "quick_open": true on instant rewards (drops, messages) and omit it or set false on entries with delay, execute, or other long scripts (e.g. fake TNT bomb).
Example β instant reward (bulk-eligible):
{
"weight": 100,
"luck": 500,
"quick_open": true,
"do": [{ "drop": "iska_utils:chosen_cheese" }]
}Example β bomb (not bulk-eligible; default quick_open: false):
{
"weight": 50,
"luck": -10,
"jeimode": "mask",
"do": [
{ "message": { "target": "@s", "in": "action_bar", "text": "message.iska_utils.suspicious_delivery.bomb_tickle" } },
{ "delay": 20 },
{ "execute": "summon tnt ~ ~ ~ {fuse:5000, Tags:[\"fake_tnt\"]}" }
]
}Built-in data/iska_utils/load/iska_utils_suspicious_delivery/suspicious_delivery.json includes:
-
drop_of_entropy(luck: 10000) β only when Artifacts is not loaded (mods: [{ "mod": "artifacts", "is": false }]) -
cursed_key(luck: 10000) β only when Artifacts is loaded (mods: [{ "mod": "artifacts", "is": true }]); same weight slot as Drop of Entropy, mutually exclusive - Artifacts
luck100β1200 (weight 100,cursed_candle75); nested 85; bomb (mask) 50; Arcane Dictionary 50 /luck: 30; entropy 30 (rarest by weight among scripted outcomes) - Nested Suspicious Delivery (
luck: 0, drops anothersuspicious_delivery) - Bomb entry above (
luck: -10,jeimode: mask)
Override by adding your own file in a datapack with the same type; ensure it is the winning file if multiple packs define one.
Add keys under assets/<namespace>/lang/ for any message actions, for example:
"message.suspicious_delivery.mining_equitizer": "Mining Equitizer found"Requires Iskandert's Utilities 3.5.0.0.0 or newer.
Entry-level gates use the same field names as Command Items: mods, mods_logic, stages, stages_logic. Entries are always loaded at /reload (no load-time stripping when a mod is missing).
stages_logic / mods_logic
|
Entry in weighted roll |
|---|---|
AND / OR
|
Only when both mod and stage sides pass (isFullyEligible) |
DEF_AND / DEF_OR
|
Always in the pool; gates run inside do[] via if blocks |
For DEF_*, stages[] / mods[] are an indexed pool. Inside each if block, conditions / mod_conditions list indices (same layout as command items). Multiple sibling if blocks in one action are evaluated in order; the first block whose conditions pass runs its payload.
{
"weight": 10,
"stages_logic": "DEF_OR",
"stages": [
{ "stage_type": "player", "stage": "early", "is": true },
{ "stage_type": "player", "stage": "late", "is": true }
],
"do": [{
"if": [
[{ "conditions": [0] }, { "drop": "iska_utils:entropy_crystal_early" }],
[{ "conditions": [1] }, { "drop": "iska_utils:entropy_crystal_late" }]
]
}]
}-
jeimode: hidden+ entry not eligible β hidden from grid and excluded from%denominator. -
jeimode: show+ several{ "drop" }indo[]β one slot with alternating stacks (unchanged). - Missing mod β entry hidden on client.
-
DEF entries stay visible in JEI;
%uses the AND/OR eligible pool; DEF entries count in the rollable denominator (documented for pack authors).
When stages_logic and mods_logic are AND or OR only, the whole entry must pass before it enters the roll pool:
{
"weight": 50,
"mods": [{ "mod": "artifacts", "is": true }],
"mods_logic": "AND",
"stages": [{ "stage_type": "player", "stage": "chapter_2", "is": true }],
"do": [{ "drop": "artifacts:everlasting_beef" }]
}| Field | Description |
|---|---|
mod |
NeoForge mod ID |
is |
true = mod must be loaded; false = mod must not be loaded |
stage_type |
player, world, or team
|
stage |
Stage id string |
is (stage) |
Stage must be set (true) or unset (false) |
-
Optional Mimic drop: tag
iska_utils:curio_compat/mimic(Dev) β see Home β Configurable Tags. Default tag value is onlysuspicious_delivery. -
Command items (same
messageaction): Command-Items