- Added
matchAnyInventorySlot(itemFilter)
andmatchAnyHotbarSlot(itemFilter)
- Fix loot modification being skipped when loot table doesn't contain any entries
- Fix
print
method for loot tables. Will now print the entries correctly. - Fix
matchCustomCondition
andjsonFunction
using wrong codec.
- Remove
addItem
for loot pools. Prefer to useaddEntry
- Deprecate
addTypeModifier
inLootJS.modifiers
and will be removed in future updates, useaddTableModifier
with a LootType instead. - Deprecate
modifyLootTypeTables
inLootJS.lootTables
and will be removed in future updates, usemodifyLootTables
with a LootType instead.
- Fix
.create
in loot tables event
- Bump kubejs version
- Add quick way to negate simple
ItemFilter
s like tag or id filter by using!
, e.g.!#c:tools
- Fix regex handling with id filters
- Rename
removeGlobalModifier
toremoveGlobalModifiers
inLootJS.modifiers
event.
Fixes
- Fix error
Tag does not exist
when using ItemPredicates with tags
Changes
- New wiki https://docs.almostreliable.com/lootjs/
- Now on
neoforge
- Added
LootJS.loot_tables
event for direct loot table modification - Add
LootBucket
as wrapper class for loot for easier execute some helper functions LootEntry
does not only represent single items anymore. It now represents all different loot entries vanilla minecraft has.LootEntry.of(item)
: Single itemLootEntry.empty()
: Empty entryLootEntry.tag(tag)
: Tag entryLootEntry.reference(lootTable)
: Reference to another loot table. For example,LootEntry.reference("minecraft:chests/abandoned_mineshaft")
LootEntry.alternative(lootEntries...)
: Alternative lootLootEntry.sequence(lootEntries...)
: Sequence lootLootEntry.group(lootEntries...)
: Grouped loot
- Changes to
LootJS.modifiers
event:- Loot modifiers are not executed in order anymore. It will now work like a loot table. First check for conditions and if it contains matching loot, then apply all actions and then apply loot functions.
addLootTableModifier
,addLootTypeModifier
,addBlockLootModifier
,addEntityLootModifier
renamed intoaddTableModifier
,addTypeModifier
,addBlockModifier
,addEntityModifier
.functions(itemFilter, (f) => {})
removed. Better to just usegroup
now- Added
.group((group) => {...})
or.group(itemFilter, (item) => {...})
. Second one will pre-filter current loot for further modifications..group()
can use.rolls(numberprovider)
to execute the group multiple times
.pool()
now actually consumes a vanillaLootPool
- Removed
addWeightedLoot()
, use.pool()
instead now matchLoot
renamed intocontainsLoot
.dropExperience
can now use a number provider instead of a fixed amountLootContextJS
wrapper removed. UsingLootContext
instead but added all helper methods fromLootContextJS
too
- Renamed some loot functions
- Renamed some loot conditions
- Changes to
ItemFilter
:.hasEnchantments(...)
only works for item enchantments now. Forstored
enchantments use.hasStoredEnchantments(...)
- Removed some filters as they are no longer needed with the new data components.
- Renamed
ALWAYS_TRUE
intoALL
andALWAYS_FALSE
intoNONE
- Added
vault
,block_use
andshearing
LootType - And probably more stuff I may missed, sorry! :D Feel free to ask in our discord.
Added
- Added
randomTableBonus(enchantment, chances)
for vanillastable_bonus
condition
Added
- Added
LootEntry.of("#tag")
,LootEntry.of("@modid")
to select a random entry from a tag or modid. - Added
LootEntry.ofJson(json)
to create a loot entry from JSON to support custom entries from other mods
Fixed
- Crash with newest kubejs version
Fixed
- Fixed null pointer exception when using
addLootTableModifier
and an entity dies
Add
- Add custom loot function
customFunction(json)