Loot Table Modifier generator (#758)
Some checks failed
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled

* Loot Table Modifier loot_modifier generator

Should support everything currently implemented

* Translation keys

* Make 'actions' and 'predicates' always a list

Seems simpler to understand and a list of one entry behaves exactly the same

* Update loot-table-modifier.mcdoc

Should match currently latest commit

* Fix loot modifier path in datapack being incorrect

* Match v2 alpha 1

* Import LootPoolEntry

* Add files via upload

* Revert "Add files via upload"

This reverts commit 7e9c50ee10.

* add condition_add action

* Add union member name overrides

Co-authored-by: Misode <misoloo64@gmail.com>

---------

Co-authored-by: Misode <misoloo64@gmail.com>
This commit is contained in:
OffsetMonkey538
2026-01-19 22:06:31 +02:00
committed by GitHub
parent e02c26f6db
commit 1f8be81f50
4 changed files with 126 additions and 0 deletions

View File

@@ -0,0 +1,113 @@
use ::java::data::loot::LootPool
use ::java::data::loot::LootPoolEntry
use ::java::data::loot::LootContextType
use ::java::data::loot::LootCondition
dispatch minecraft:resource[loot-table-modifier:loot_modifier] to struct {
actions: [Action],
predicate: Predicate,
}
struct Action {
type: #[id] ActionType,
...loot-table-modifier:loot_modifier_action_types[[type]],
}
struct Predicate {
type: #[id] PredicateType,
...loot-table-modifier:loot_modifier_predicate_types[[type]],
}
enum(string) ActionType {
PoolAdd = "loot-table-modifier:pool_add",
PoolRemove = "loot-table-modifier:pool_remove",
EntryAdd = "loot-table-modifier:entry_add",
EntryRemove = "loot-table-modifier:entry_remove",
EntryItemSet = "loot-table-modifier:entry_item_set",
ConditionAdd = "loot-table-modifier:condition_add"
}
enum(string) PredicateType {
Inverted = "loot-table-modifier:inverted",
AnyOf = "loot-table-modifier:any_of",
AllOf = "loot-table-modifier:all_of",
EntryItem = "loot-table-modifier:entry_item",
Table = "loot-table-modifier:table",
}
/// Utils
struct Pattern {
regexPattern: #[regex_pattern] string,
}
type LiteralOrPattern<T> = (
#[misode_member_name="Literal"] T |
#[misode_member_name="Regex pattern"] Pattern |
)
/// Actions
dispatch loot-table-modifier:loot_modifier_action_types[loot-table-modifier:pool_add] to struct {
pools: [LootPool],
}
dispatch loot-table-modifier:loot_modifier_action_types[loot-table-modifier:pool_remove] to struct {
}
dispatch loot-table-modifier:loot_modifier_action_types[loot-table-modifier:entry_add] to struct {
entries: [LootPoolEntry],
}
dispatch loot-table-modifier:loot_modifier_action_types[loot-table-modifier:entry_remove] to struct {
}
dispatch loot-table-modifier:loot_modifier_action_types[loot-table-modifier:entry_item_set] to struct {
name: #[id="item"] string,
canReplaceEntry?: boolean,
}
dispatch loot-table-modifier:loot_modifier_action_types[loot-table-modifier:condition_add] to struct {
conditions: [LootCondition],
includePools?: boolean,
includeEntries?: boolean,
}
/// Predicates
/// # op
dispatch loot-table-modifier:loot_modifier_predicate_types[loot-table-modifier:inverted] to struct {
term: Predicate,
}
dispatch loot-table-modifier:loot_modifier_predicate_types[loot-table-modifier:any_of] to struct {
terms: [Predicate],
}
dispatch loot-table-modifier:loot_modifier_predicate_types[loot-table-modifier:all_of] to struct {
terms: [Predicate],
}
/// # entry
dispatch loot-table-modifier:loot_modifier_predicate_types[loot-table-modifier:entry_item] to struct {
name: LiteralOrPattern<#[id="item"] string>,
}
/// # table
dispatch loot-table-modifier:loot_modifier_predicate_types[loot-table-modifier:table] to struct {
identifiers?: [LiteralOrPattern<#[id="loot_table"] string>],
types?: [LiteralOrPattern<LootContextType>],
}

View File

@@ -432,6 +432,10 @@ function UnionHead({ type, optional, node, ctx }: Props<UnionType<SimplifiedMcdo
} }
function formatUnionMember(type: SimplifiedMcdocTypeNoUnion, others: SimplifiedMcdocTypeNoUnion[]): string { function formatUnionMember(type: SimplifiedMcdocTypeNoUnion, others: SimplifiedMcdocTypeNoUnion[]): string {
const memberNameAttribute = type.attributes?.find(a => a.name === 'misode_member_name')?.value
if (memberNameAttribute?.kind === 'literal' && memberNameAttribute.value.kind === 'string') {
return memberNameAttribute.value.value
}
if (type.kind === 'literal') { if (type.kind === 'literal') {
return formatIdentifier(type.value.value.toString()) return formatIdentifier(type.value.value.toString())
} }

View File

@@ -948,6 +948,13 @@
"tags": ["partners"], "tags": ["partners"],
"dependency": "create" "dependency": "create"
}, },
{
"id": "loot-table-modifier:loot_modifier",
"url": "loot-table-modifier/loot_modifier",
"path": "loot-table-modifier/loot_modifier",
"tags": ["partners"],
"dependency": "loot-table-modifier"
},
{ {
"id": "thermoo:environment_provider", "id": "thermoo:environment_provider",
"url": "thermoo/environment_provider", "url": "thermoo/environment_provider",

View File

@@ -92,6 +92,7 @@
"generator.jukebox_song": "Jukebox Song", "generator.jukebox_song": "Jukebox Song",
"generator.lang": "Language", "generator.lang": "Language",
"generator.loot_table": "Loot Table", "generator.loot_table": "Loot Table",
"generator.loot-table-modifier:loot_modifier": "Loot Modifier",
"generator.model": "Model", "generator.model": "Model",
"generator.texture_meta": "Texture Metadata", "generator.texture_meta": "Texture Metadata",
"generator.neoforge:biome_modifier": "Biome Modifier", "generator.neoforge:biome_modifier": "Biome Modifier",
@@ -229,6 +230,7 @@
"partner.fabric": "Fabric", "partner.fabric": "Fabric",
"partner.immersive_weathering": "Immersive Weathering", "partner.immersive_weathering": "Immersive Weathering",
"partner.lithostitched": "Lithostitched", "partner.lithostitched": "Lithostitched",
"partner.loot-table-modifier": "Loot Table Modifier",
"partner.neoforge": "NeoForge", "partner.neoforge": "NeoForge",
"partner.obsidian": "Obsidian", "partner.obsidian": "Obsidian",
"partner.ohthetreesyoullgrow": "Oh The Trees You'll Grow", "partner.ohthetreesyoullgrow": "Oh The Trees You'll Grow",