Skip to content

Instantly share code, notes, and snippets.

@Shadows-of-Fire
Last active August 7, 2023 16:38
Show Gist options
  • Save Shadows-of-Fire/937a6f2403928dea773e4de1081e401e to your computer and use it in GitHub Desktop.
Save Shadows-of-Fire/937a6f2403928dea773e4de1081e401e to your computer and use it in GitHub Desktop.
Apotheosis 1.16.5 JSON Schema
{
"width": integer, // [Mandatory]
"height": integer // [Mandatory]
}
// This one should be self explanatory, I hope...
{
"item": "string", // [Mandatory] || Registry Name of item to load.
"optional": boolean, // [Optional, defaults to false] || If False, then the parser will error if the item is not located in the registry.
"count": integer, // [Optional, defaults to 1] || Stack Size
"nbt": CompoundTag, // [Optional] || Vanilla Item NBT -- See CompoundTag.json
"cap_nbt": CompoundTag, // [Optional] || Forge Item Capability NBT -- See CompoundTag.json
}
// This element has two forms:
// Form 1:
float // [Mandatory] || Single float that will represent both the min and max. Creates a fixed value range that only ever returns the one element.
// Form 2:
{
"min": float, // [Mandatory] || Min value (inclusive) of the distribution.
"max": float // [Mandatory] || Max value (exclusive) of the distribution.
}
{
"stack": ItemStack, // [Mandatory] || See ItemStack.json
"weight": integer // [Mandatory] || Weight (relative to other weighted entries in the same list) of this object.
}
"string" // [Mandatory] || Mojangson string representation of a Compound Tag -- See https://github.com/aramperes/Mojangson for spec
// Note for objects that use CompoundTag, "nbt": CompoundTag implies -> "nbt": "{Data:0}", not "nbt": { <stuff> }, since this class is a string primitive.
{
"chance": float, // [Mandatory] || Chance that this potion will be applied. 1.0 = 100% chance.
"effect": "string", // [Mandatory] || Registry name of the Effect to use.
"ambient": boolean, // [Optional, defaults to true] || If this effect is marked as ambient.
"visible": boolean, // [Optional, defaults to false] || If this effect is marked as visible.
"amplifier": { // [Optional] || Range of possible amplifiers. Amplifier is always zero if not present.
"min": integer, // Min (inclusive) and Max (exclusive) of the range of amplifier values. Amplifiers are uniformly distributed across this range.
"max": integer
}
}
{
"attribute": "string", // [Mandatory] || Registry name of the Attribute to use.
"operation": "String", // [Mandatory] || One of ADDITION, MULTIPLY_BASE, MULTIPLY_TOTAL. See https://github.com/Shadows-of-Fire/Placebo/blob/1.18/src/main/java/shadows/placebo/util/AttributeHelper.java#L17-L28 (Addition is 0, multBase is 1, multTotal is 2)
"value": RandomValueRange // [Mandatory] || Attribute modifier value. Can be static or a random range, as noted in RandomValueRange.json
}
"string" // [Mandatory] || A string representing a BossGear ID, or, if it begins with #, it will be interpreted as a BossGear Tag.
// Spawner Stats represent a series of default values to be applied to spawners. Each value corresponds to a spawner stat.
// As these are used by the deadly module, they do not support the spawner-module specific stats, though that could be a feature for later.
{
"spawn_delay": integer, // [Mandatory] || The initial delay, in ticks, before this spawner spawns a mob.
"min_delay": integer, // [Mandatory] || The minimum delay, in ticks, of the range of possible spawn delays after spawning a mob.
"max_delay": integer, // [Mandatory] || The maximum delay, in ticks, of the range of possible spawn delays after spawning a mob.
"spawn_count": integer, // [Mandatory] || The number of entities spawned at once. Not all entities may successfully spawn.
"max_nearby_entities": integer, // [Mandatory] || The max number of entities that may be nearby before the spawner stops working. Only entities of the spawned type are counted.
"spawn_range": integer, // [Mandatory] || The range, in blocks, where entities may attempt to spawn.
"player_activation_range": integer // [Mandatory] || The range, in blocks, that a player must be within for this spawner to be activated.
}
{
"weight": integer, // [Mandatory] || The weight, relative to others of this type in the same context, of this entry. Selection chance is weight / <total weight>.
"entity": "string", // [Mandatory] || The registry name of this spawner entry.
"nbt": CompoundTag // [Optional] || NBT data for the spawned entity.
}
// Note that the weight of a weighted spawner entity, in the context of a spawner, is relative to all the possible entries for the spawner (the "potential spawns").
{
"stack": ItemStack, // [Mandatory] || See ItemStack.json
"type": "string" // [Mandatory] || Any of SWORD, RANGED, PICKAXE, SHOVEL, AXE, ARMOR, SHIELD. Must be all-caps.
}
// Empty jsons of this type will be ignored and can be used to remove existing entries through overriding.
// Does not support ICondition(s)
{
"weight": integer, // [Mandatory] || Weight (relative to other weighted entries in the same list) of this object.
"mainhands": [ // [Mandatory] || List of weighted stacks for this particular slot. Each item has a <weight>/<total slot weight> chance of being selected when this gear set is applied to an entity.
WeightedItemStack
],
"offhands": [ // [Mandatory] || List of weighted stacks for this particular slot. Each item has a <weight>/<total slot weight> chance of being selected when this gear set is applied to an entity.
WeightedItemStack
],
"helmets": [ // [Mandatory] || List of weighted stacks for this particular slot. Each item has a <weight>/<total slot weight> chance of being selected when this gear set is applied to an entity.
WeightedItemStack
],
"chestplates": [ // [Mandatory] || List of weighted stacks for this particular slot. Each item has a <weight>/<total slot weight> chance of being selected when this gear set is applied to an entity.
WeightedItemStack
],
"leggings": [ // [Mandatory] || List of weighted stacks for this particular slot. Each item has a <weight>/<total slot weight> chance of being selected when this gear set is applied to an entity.
WeightedItemStack
],
"boots": [ // [Mandatory] || List of weighted stacks for this particular slot. Each item has a <weight>/<total slot weight> chance of being selected when this gear set is applied to an entity.
WeightedItemStack
],
"tags": [ // [Mandatory] || List of tags this gear set belongs to.
"string"
]
}
// Any of the lists in this JSON may be empty, but they must all be included.
// Empty jsons of this type will be ignored and can be used to remove existing entries through overriding.
// Does not support ICondition(s)
{
"weight": integer, // [Mandatory] || Weight, relative to all other bosses, of this boss. Selection chance is weight / <total weight>
"entity": "string", // [Mandatory] || Registry Name of the entity to use.
"size": AABB, // [Mandatory] || Specifies the size of this entity. Used to see if there is enough free space for it to spawn when it attempst to.
"enchant_chance": float, // [Mandatory] || Specifies the chance that boss items (aside from the affix item) are enchanted.
"rarity_offset": integer, // [Optional, defaults to zero] || Specifies the rarity offset for the boss's affix item. Higher values guarantee at least a certain rarity, based on ths configured thresholds in deadly.cfg
"enchantment_levels": [ // [Mandatory] || Array of enchantment levels to use for the boss's items. Order is {<Generic with EnchModule>, <Generic without>, <Affix with>, <Affix without>}. Must have four entries.
integer, integer,
integer, integer
],
"effects": [ // [Mandatory] || List of effects that could be applied to this boss. May be empty, but may not be omitted.
ChancedEffectInstance
],
"valid_gear_sets": [ // [Optional] || List of gear sets this boss may use. Weight of a gear set is relative to the gear sets available to this particular boss. If omitted, the boss can pull from ALL gear sets.
SetPredicate
],
"attribute_modifiers": [ // [Mandatory] || List of attribute modifiers to apply to this boss when spawned. May be empty, but may not be omitted.
RandomAttributeModifier
],
"custom_nbt": CompoundTag // [Optional] || Additional NBT data to apply to the spawned entity.
}
{
"weight": integer, // [Mandatory] || Weight of this specific spawner, relative to ALL random spawners. Selection chance is weight / <total weight>
"stats": SpawnerStats, // [Mandatory] || Stats to be applied to this spawner.
"spawn_potentials": [ // [Mandatory] || Potential spawns for this spawner. Must contain at least one entry.
WeightedSpawnerEntity
],
"loot_table": "string" // [Mandatory] || Registry name for the loot table of the chest that spawns with this random spawner. Every random spawner has a chance (as defined in spawner.cfg) to not use this loot table, and instead use apotheosis:chest_valuable
}
{
// One of either "block" or "blocks", but not both. If both are present, "blocks" takes precedence.
"block": "string", // [Mandatory] || Registry name of the block these stats are applied to.
"blocks": [ // [Mandatory] || List of registry names of blocks these stats are applied to. See note above.
"string"
],
"maxEterna": float, // [Optional] || The max eterna value this block may contribute to.
"eterna": float, // [Optional] || The eterna value this block provides.
"quanta": float, // [Optional] || The quanta percentage this block provides. 100 = 100%
"arcana": float, // [Optional] || The arcana percentage thsi block provides. 100 = 100%
"rectification": float, // [Optional] || The rectification this block provides. 100 = 100%
"clues": integer // [Optional] || The number of bonus clues this block provides.
}
// All values, except maxEterna, may be negative, and default to zero if omitted.
{
"input_1": ItemStack, // [Mandatory] || Left input item.
"input_2": ItemStack, // [Optional] || Right input item.
"output": ItemStack, // [Mandatory] || Output item.
"max_trades": integer, // [Optional, defaults to 1] || Number of times this trade may be used.
"xp": integer, // [Optional, defaults to 0] || Amount of XP granted to the merchant villager when the trade is made. Not useful for the Wandering Trader
"price_mult": float // [Optional, defaults to 1] || Multiplier for how much player reputation impacts villager trade costs. Not useful for the Wandering Trader, unless you punch him, I guess.
}
{
"type": "apotheosis:enchanting", // [Mandatory] || Predefined type for enchanting recipes. Also supported is "apotheosis:keep_nbt_enchanting" if you want to retain input NBT.
"conditions": [ // [Optional] || Array of recipe conditions. ICondition is defined by vanilla.
ICondition
],
"input": Ingredient, // [Mandatory] || Recipe input. Ingredient is defined by vanilla.
"requirements": { // [Mandatory] || Stat requirements. Rectification and Clues are not supported. For the recipe to be valid, all table stats must be >= the values defined here.
"eterna": float,
"quanta": float,
"arcana": float
},
"max_requirements": { // [Optional] || Max Stat requirements. Rectification and Clues are not supported. Values set to -1 means "no max value".
"eterna": float,
"quanta": float,
"arcana": float
},
"result": VanillaItemStack // [Mandatory] || Recipe output. VanillaItemStack is defined by vanilla. Do not confuse it with ItemStack as defined in this document.
}
{
"id": "string", // [Mandatory] || ID of the stat being changed.
"value": <undefined>, // [Mandatory] || Value of the change this modifier makes. Stat-Dependent.
"min": number, // [Optional] || For numeric stats, the min value this specific modifier can cause the stat to become.
"max": number // [Optional] || For numeric stats, the max value this specific modifier can cause the stat to become.
}
/**
This one is a bit tricky, as the type of "value" is dependent on the underlying type of the Stat itself. So far, there are only Boolean stats and Integer stats, so "value" will be one of those, depending on the Stat.
For example, for a Boolean stat you want to enable, you would use "value": true; for an Integer stat you want to add 5 to, you would use "value": 5
The list of stats is then as follows:
Integer Stats:
min_delay, max_delay, spawn_count, max_nearby_entities, req_player_range, spawn_range
Boolean Stats:
ignore_players, ignore_conditions, redstone_control, ignore_light, no_ai, silent
**/
{
"type": "apotheosis:fletching", // [Mandatory] || Defined type for fletching recipes.
"conditions": [ // [Optional] || Array of recipe conditions.
ICondition
],
"ingredients": [ // [Mandatory] || Ingredient list with length 3 that represents the inputs. First ingredient is the top slot.
Ingredient,
Ingredient,
Ingredient
],
"result": VanillaItemStack // [Mandatory] || Recipe output.
}
{
"type": "apotheosis:spawner_modifier", // [Mandatory] || Defined type for spawner modifiers.
"conditions": [ // [Optional] || Array of recipe conditions.
ICondition
],
"mainhand": Ingredient, // [Mandatory] || Main input ingredient. May not be empty.
"offhand": Ingredient, // [Optional] || Secondary input ingredient.
"consumes_offhand": false, // [Mandatory] || If the secondary input is consumed on modifier application.
"stat_changes": [ // [Mandatory] || List of stat changes this modifier will apply. See StatModifier.js for valid stat names.
StatModifier
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment