Data
TFC’s data types can be created through the TFCEvents.data event in the server_scripts folder
If FirmaLife
is installed, the following data types are supported
If Beneath
is installed, the following data types are supported
Most of these methods have an optional final argument which specifies the id of the virtual json file the data will be placed in. For instance, if an id of fish:get_pierced was used for an entity damage resistance, the resulting file would effectively be at data/fish/tfc/entity_damage_restances/get_pierced.json; the tfc/<data_type> folders do not need to be provided
If no id is provided, one will automatically be generated with the namespace kubejs and, unless other wise noted, a path matching the base 16 hash of the (usually) data type’s .toString() value
Additionally, for data types that use ingredients, if there are multiple definitions with the same valid item/block/fluid/entity, then there is no guarantee as to which will take precedence. This situation can be confirmed by using the search command and fixed by either overriding the existing definition or changing the entries in the tag it uses
Most of these methods have an optional final argument which specifies the id of the virtual json file the data will be placed in. For instance, if an id of fish:get_pierced was used for an entity damage resistance, the resulting file would effectively be at data/fish/tfc/entity_damage_restances/get_pierced.json; the tfc/<data_type> folders do not need to be provided
If no id is provided, one will automatically be generated with the namespace kubejs and, unless other wise noted, a path matching the base 16 hash of the (usually) data type’s .toString() value
Additionally, for data types that use ingredients, if there are multiple definitions with the same valid item/block/fluid/entity, then there is no guarantee as to which will take precedence. This situation can be confirmed by using the search command and fixed by either overriding the existing definition or changing the entries in the tag it uses
Climate Range
Defines the values of an existing, registered climate range, does not create new ones
Method Signature
event.climateRange(
range: {
minHydration?: int,
maxHydration?: int,
hydrationWiggleRange?: int,
minTemperature?: number,
maxTemperature?: number,
temperatureWiggleRange?: number
},
id: ResourceLocation
)
- 1st argument: The climate range, a map of parameters to values
minHydration?: int: The minimum hydration the plant can grow in- Defaults to
0
- Defaults to
maxHydration?: int: The maximum hydration the plant can grow in- Defaults to
100
- Defaults to
hydrationWiggleRange?: int: Additional hydration range in which the plant can survive, but not necessarily grow, in- Defaults to
0
- Defaults to
minTemperature?: number: The minimum temperature, in °C, the plant can grow in- Defaults to
-Infinity
- Defaults to
maxTemperature?: number: The maximum temperature, in °C, the plant can grow in- Defaults to
Infinity
- Defaults to
temperatureWiggleRange?: number: Additional temperature range in which the plant can survive, but not necessarily grow, in- Defaults to
0
- Defaults to
- 2nd argument: The registered id of the climate range whose values are being defined
Example
TFCEvents.data(event => {
event.climateRange(
{
minHydration: 15,
maxHydration: 75,
minTemperature: -2,
maxTemperature: 26
},
'kubejs:cicada_crop'
)
})
Deposit
Add a deposit definition, which allows an item to processed in a pan or sluice
Method Signature
event.deposit(
deposit: {
ingredient: Ingredient,
loot: ResourceKey<LootTable>,
models?: List<ResourceLocaiton>
},
id?: ResourceLocation
)
- 1st argument: The deposit data, a map of parameters to values
ingredient: Ingredient: An item ingredient, the items the deposit applies toloot: ResourceKey<LootTable>: The id of a loot table, the result of panning/sluicing the itemmodels?: List<ResourceLocation>: The models to display in sequence while panning- Defaults to
[]
- Defaults to
- Optional 2nd argument: A
ResourceLocation, the id of the deposit
Example
TFCEvents.data(event => {
event.deposit(
{
ingredient: '#minecraft:flowers',
loot: 'kubejs:flower_loot',
models: [
'minecraft:block/poppy',
'minecraft:block/daisy',
'minecraft:block/cornflower'
]
}
)
})
Drinkable
Add a drinkable definition, allows a fluid to be drunk for thirst, nutrients, and even effects
Method Signature
event.drinkable(
drinkable: {
ingredient: FluidIngredient,
consumeChance?: number,
mayDrinkWhenFull?: boolean,
food?: {
hunger?: int,
water?: number,
saturation?: number,
intoxication?: int,
grain?: number,
fruit?: number,
vegetables?: number,
protein?: number
dairy?: number,
decayModifier?: number
},
effects?: List<{
type: Holder<MobEffect>,
duration: int,
amplifier?: int,
chance?: number
}>
},
id?: ResourceLocation
)
- 1st argument: The drinkable data, a map of parameters to values
ingredient: FluidIngredient: The fluids the drink data applies toconsumeChance?: number: The chance a block of fluid will be consumed when drinking from in-world- Must be in the range
[0, 1] - Defaults to
1
- Must be in the range
mayDrinkWhenFull?: boolean: If the player can drink with a full thirst bar- Defaults to
false
- Defaults to
food?: FoodData: Additional food and nutrient data, the same as thefoodproperties of food definitionseffects?: List<Effect>: A list of effects to apply, a map of parameters to valuestype: Holder<MobEffect>: The effect to apply1duration: int: How many ticks the effect should be active foramplifier?: int: The level of the effect- Defaults to
0
- Defaults to
chance?: number: The chance the effect is added- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
- Optional 2nd argument: A
ResourceLocation, the id of the drinkable
Example
TFCEvents.data(event => {
event.drinkable(
{
ingredient: Fluid.of('lava', 500),
mayDrinkWhenFull: true,
food: {
protein: 500
},
effects: [{
type: 'minecraft:wither',
duration: 500,
amplifier: 3,
chance: 1
}]
}
)
})
Entity Damage Resistance
Add an entity damage resistance
Method Signature
event.entityDamageResistance(
resistance: {
entity: TagKey<EntityType<?>>,
piercing?: number,
slashing?: number,
crushing?: number
},
id?: ResourceLocation
)
- 1st argument: The entity resistance data, a map of parameters to values:
entity: TagKey<EntityType<?>>: The entities the resistance applies topiercing?: number: The piercing resistance- Negative values make the entity weak to piercing damage
- Defaults to
0
slashing?: number: The slashing resistance- Negative values make the entity weak to slashing damage
- Defaults to
0
crushing?: number: The crushing resistance- Negative values make the entity weak to crushing damage
- Defaults to
0
- Optional 2nd argument: A
ResourceLocation, the id of the resistance
Example
TFCEvents.data(event => {
event.entityDamageResistance(
{
entity: 'minecraft:fish',
piercing: -800
},
'fish:get_pierced'
)
})
Fauna
Defines the values of an existing, registered fauna, does not create new ones. See the relevant event for doing so
Method Signature
event.fauna(
builder: Consumer<FaunaBuidler>,
id: ResourceLocation
)
- 1st argument: A consumer with several methods
.minTemperature(min: number): Sets the minimum temperature (and the maximum temperature toInfinity).maxTemperature(max: number): Sets the maximum temperature (and the minimum temperature to-Infinity).temperature(min: number, max: number): Sets the maximum and minimum temperature.minGroundwater(min: number): Sets the minimum temperature (and the maximum groundwater toInfinity).maxGroundwater(max: number): Sets the maximum temperature (and the minimum groundwater to-Infinity).groundwater(min: number, max: number): Sets the maximum and minimum groundwater.minRainVariance(min: number): Sets the minimum rain variance (and maximum rain variance to1and absolute rain variance tofalse).maxRainVariance(max: number): Sets the maximum rain variance (and minimum rain variance to-1and absolute rain variance tofalse)rainVariance(min: number, max: number, absolute: boolean): Sets the permissible rain variance, in the range[-1, 1], and if the sign of the rain variance should be ignored.minForest(min: int): Sets the minimum forest density (and maximum forest density to4).maxForest(max: int): Sets the maximum forest density (and minimum forest density to0).forest(min: int, max: int): Sets the permissible forest density, in the range[0, 4].forestType(types...: ForestType[]): Restricts spawning to within the givenForestTypes.minElevation(min: int): Sets the minimum elevation (and maximum elevation to320).maxElevation(max: int): Sets the maximum elevation (and minimum elevation to-64).elevation(min: int, max: int): Sets the permissible elevation range.months(months: List<Month>): Set theMonths during which spawning is valid.chance(value: int): Sets the spawn chance.distanceBelowSeaLevel(value: int): Sets the distance below sea level required to spawn.maxBrightness(value: int): Sets the maximum light level spawning can occur under.fuzzy(): Makes the temperature, groundwater, and rain variance limits fuzzy when evaluating.solid(): Makes it so spawning can only occur on blocks taggedminecraft:valid_sapwn.ignoreRivers(): Ignores river contributions to groundwater values
- 2nd argument: A
ResourceLocation, the id of the fauna
Example
TFCEvents.data(event => {
event.fauna(
fauna => {
fauna.temperature(-20, 5)
fauna.forest(1, 3)
fauna.fuzzy()
fauna.solid()
},
'tfc:fox'
)
})
Fertilizer
Add a fertilizer definition
Method Signature
event.fertilizer(
fertilizer: {
ingredient: Ingredient,
nitrogen?: number,
phosphorus?: number,
potassium?: number
},
id?: ResourceLocation
)
- 1st argument: The fertilizer data, a map of parameters to values
ingredient: Ingredient: The ingredient the fertilizer values apply tonitrogen?: number: The nitrogen amount- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
phosphorus?: number: The phosphorus amount- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
potassium?: number: The potassium amount- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
- Optional 2nd argument: A
ResourceLocation, the id of the fertilizer
Example
TFCEvents.data(event => {
event.fertilizer(
{
ingredient: 'minecraft:bone_block',
potassium: 0.2,
phosphorous: 0.07
},
'kubejs:bone'
)
})
Fluid Heat
Add a fluid heat, required for heating recipes to work with a fluid
Method Signature
event.fluidHeat(
fluidHeat: {
fluid: Fluid,
meltTemperature: number,
specificHeatCapacity: number
},
id?: ResourceLocation
)
- 1st argument: The fluid heat data, a map of parameters to values
fluid: Fluid: The fluid the heat applies tomeltTemperature: number: The temperature, in °CspecificHeatCapacity: number: The specific heat capacity of the metal, inunits of Energy / (°C * mB)
- Optional 2nd argument: A
ResourceLocation, the id of the fluid heat
If no id is specified, the namespace will be kubejs and the path will be the of the fluid with a slash between its namespace and path
If no id is specified, the namespace will be kubejs and the path will be the of the fluid with a slash between its namespace and path
Example
TFCEvents.data(event => {
event.fluidHeat(
{
fluid: 'minecraft:lava', // Here, the id of the heat would be 'kubejs:minecraft/lava'
meltTemperature: 1550,
specificHeatCapacity: 0.023
}
)
})
Food
Add a food definition to an item
Method Signature
event.food(
food: {
ingredient: Ingredient,
food: {
hunger?: int,
water?: number,
saturation?: number,
intoxication?: int,
grain?: number,
fruit?: number,
vegetables?: number,
protein?: number
dairy?: number,
decayModifier?: number
},
edible?: boolean
},
id?: ResourceLocation
)
- 1st argument: The food definition data, a map of parameters to values
ingredient: Ingredient: The items the food applies tofood: FoodData: The food properties, a map of parameters to valueshunger?: int: The amount of hunger to add. A full hunger bar is 20- Defaults to
0
- Defaults to
water?: number: The amount of thirst to restore. A full thirst bar is 100- Defaults to
0
- Defaults to
saturation?: number: The amount of saturation to provide- Defaults to
0
- Defaults to
intoxication?: int: The number of ticks of intoxication to add to the player- Defaults to
0
- Defaults to
grain?: number: The amount of grain nutrient to add to the player- Defaults to
0
- Defaults to
fruit?: number: The amount of fruit nutrient to add to the player- Defaults to
0
- Defaults to
vegetables?: number: The amount of vegetables nutrient to add to the player- Defaults to
0
- Defaults to
protein?: number: The amount of protein nutrient to add to the player- Defaults to
0
- Defaults to
dairy?: number: The amount of dairy nutrient to add to the player- Defaults to
0
- Defaults to
decayModifier?: number: The decay modifier to apply, a higher value means a quicker decay- Defaults to
0
- Defaults to
edible?: boolean: If the food is edible- Defaults to
true
- Defaults to
- Optional 2nd argument: A
ResourceLocation, the id of the food definition
Example
TFCEvents.data(event => {
event.food(
{
ingredient: 'minecraft:cooked_beef',
food: {
hunger: 4,
saturation: 2,
nutrients: [ 0, 0, 0, 5, 0 ]
}
}
)
})
Fuel
Add a fuel for firepits, charcoal forges, etc.
Method Signature
event.fuel(
fuel: {
ingredient: Ingredient,
duration?: int,
temperature?: number,
purity?: number
},
id?: ResourceLocation
)
- 1st argument: The fuel definition, a map of parameters to values
ingredient: Ingredient: The items the fuel applies toduration?: int: The number of ticks the fuel burns for- Defaults to
0
- Defaults to
temperature?: number: The temperature, in °C, the fuel burns at- Defaults to
0
- Defaults to
purity?: number: The purity of the fuel, effects how much smoke the firepit makes when burning the fuel- Defaults to
1
- Defaults to
- Optional 2nd argument: A
ResourceLocation, the id of the fuel
Example
TFCEvents.data(event => {
event.fuel(
{
ingredient: 'minecraft:poppy',
duration: 500,
temperature: 50,
purity: 0.03
},
'kubejs:dirty_poppy'
)
})
Heat
Add a heat capability definition to items
Method Signature
event.heat(
heat: {
ingredient: Ingredient,
heatCapacity?: number,
forgingTemperature?: number,
weldingTemperature?: number
},
id?: ResourceLocation
)
- 1st argument: The heat definition, a map of parameters to values
ingredient: Ingredient: The items the heat applies toheatCapacity: number: The heat capacity of the item, a higher values makes the item take longer to heat up- Defaults to
0
- Defaults to
forgingTemperature?: number: The temperature at which the item can be forged2- Defaults to
0
- Defaults to
weldingTemperature?: number: The temperature at which the item can be welded2- Defaults to
0
- Defaults to
- Optional 2nd argument: A
ResourceLocation, the id of the heat definition
Example
TFCEvents.data(event => {
event.heat(
{
ingredient: 'minecraft:gold_ingot',
heatCapacity: 0.5
},
'kubejs:vanilla_gold'
)
})
Item Damage Resistance
Add an item damage resistance
Method Signature
event.itemDamageResistance(
resistance: {
ingredient: Ingredient,
piercing?: number,
slashing?: number,
crushing?: number
},
id?: ResourceLocation
)
- 1st argument: The resistance data, a map of parameters to values
ingredient: Ingredient: The items the resistance applies topiercing?: number: The piercing resistance- Negative values make the item extra vulnerable to piercing damage
- Defaults to
0
slashing?: number: The slashing resistance- Negative values make the item extra vulnerable to slashing damage
- Defaults to
0
crushing?: number: The crushing resistance- Negative values make the item extra vulnerable to crushing damage
- Defaults to
0
- Optional 2nd argument: A
ResourceLocation, the id of the resistance
Example
TFCEvents.data(event => {
event.itemDamageResistance(
{
ingredient: '#kubejs:weak_to_slashing',
slashing: -30,
piercing: -2,
crushing: 5
}
)
})
Item Size
Add a size and weight definition
Method Signature
event.itemSize(
itemSize: {
ingredient: Ingredient,
size?: Size,
weight?: Weight
},
id?: ResourceLocation
)
- 1st argument: A item size definition, a map of parameters to values
ingredient: Ingredient: The items the size applies tosize?: Size: The size of the item(s)-
Reveal/hide list of sizes
tinyvery_smallsmallnormallargevery_largehuge
- Defaults to
small
-
weight?: Weight: The weight of the item(s)-
Reveal/hide list of weights
very_lightlightmediumheavyvery_heavy
- Defaults to
light
-
- Optional 2nd argument: A
ResourceLocation, the id of the size
Example
TFCEvents.data(event => {
event.itemSize(
{
ingredient: 'minecraft:netherite_ingot',
weight: 'very_heavy'
},
'kubejs:heavy_netherite'
)
})
Knapping Type
Add a new knapping type for use in knapping recipes
Method Signature
event.knappingType(
knappingType: {
inputItem: SizedIngredient,
clickSound: Holder<SoundEvent>,
icon: ItemStack,
amountToConsume?: int,
consumeAfterComplete?: boolean,
hasOffTexture?: boolean,
spansParticles?: boolean
},
id: ResourceLocation
)
- 1st argument: The knapping type definition, a map of parameters to values
inputItem: SizedIngredient: The input for the knapping typeclickSound: Holder<SoundEvent>: The sound to play when knapping3icon: ItemStack: The item to use as the category icon in recipe viewersamountToConsume?: int: How many items of input to consume when performing a recipe- Defaults to the count of
inputItem
- Defaults to the count of
consumeAfterComplete?: boolean: If the input items should only be consumed after the recipe completes- Defaults to
false
- Defaults to
hasOffTexture?: boolean: If the knapping screen should display a second texture for tiles that are off- Defaults to
false
- Defaults to
spawnsParticles?: boolean: If knapping particles should spawn when clicking a knapping tile- Defaults to
false
- Defaults to
- 2nd argument: A
ResourceLocation, the id of the knapping type which knapping recipes reference
Example
TFCEvents.data(event => {
event.knappingType(
{
inputItem: Ingredient.of('minecraft:flint', 5),
amountToConsume: 2,
clickSound: 'minecraft:entity.warden.roar',
icon: 'minecraft:flint',
spawnsParticles: true
},
'kubejs:flint'
)
})
Lamp Fuel
Add a new lamp fuel
Method Signature
event.lampFuel(
lampFuel: {
fluid: FluidIngredient,
lamps: BlockIngredient,
burnRate: int
},
id?: ResourceLocation
)
- 1st argument: The lamp fuel data, a map of parameters to values
fluid: FluidIngredient: The fluids the fuel applies tolamps: BlockIngredient: The blocks the fuel is valid forburnRate: int: The burn rate, in ticks / mB, of the fuel
- Optional 2nd argument: A
ResourceLocation, the id of the fuel
Example
TFCEvents.data(event => {
event.lampFuel(
{
fluid: 'minecraft:milk',
lamps: [
'tfc:metal/lamp/blue_steel',
'tfc:metal/lamp/bronze'
],
burnRate: 6
}
)
})
Support
Add a support definition
Method Signature
event.support(
support: {
ingredient: BlockIngredient,
up?: int,
down?: int,
horizontal?: int
},
id?: ResourceLocation
)
- 1st argument: The support data, a map of parameters to values
ingredient: BlockIngredient: ABlockIngredient, the blocks the support applies toup?: int: The number of blocks above the support that are supported- Defaults to
0
- Defaults to
down?: int: The number of blocks below the support that are supported- Defaults to
0
- Defaults to
horizontal?: int: The number of blocks away that are supported- Defaults to
0
- Defaults to
- Optional 2nd argument: A
ResourceLocation, the id of the support
Example
TFCEvents.data(event => {
event.support(
{
ingredient: '#kubejs:wacky_supports',
up: 6,
horizontal: 2
},
'kubejs:wacky_support'
)
})
Lost Page
Add a lost page definition, used in rituals
Method Signature
event.lostPage(
page: {
cost: Ingredient,
costs: List<int>,
reward: Item,
rewards: List<int>,
punishments?: List<Punishment>,
translation?: Component
},
id?: ResourceLocation
)
- 1st argument: The lost page data, a map of parameters to values
cost: Ingredient: The ingredient of the ritualcosts: List<int>: The potential quantity of acostfor the ritualreward: Item: The reward for completing the ritualrewards: List<int>: The potential quantity of arewardfor the ritualpunishments?: List<Punishment>: The potential punishments for invoking the ritualReveal/hide list of punishments
nonelevitationdrunkennessblaze_infernoinfestationwitheringslimecorruptionwrathchampionblessinggreedunknown
translation?: Component: The display for thecost
- Optional 2nd argument: A
ResourceLocation, the id of the lost page
Example
BeneathEvents.data(event => {
event.lostPage(
{
cost: '#minecraft:flowers',
costs: [
1, 2, 3, 4, 5
],
reward: 'minecraft:egg',
rewards: [
2, 4, 6, 8, 10
],
punishments: [
'none',
'blaze_inferno',
'corruption'
]
}
)
})
Nether Fertilizer
Add a nether fertilizer definition
Method Signature
event.netherFertilizer(
fertilizer: {
ingredient: Ingredient,
death?: number,
destruction?: number,
decay?: number,
sorrow?: number
flame?: number
},
id?: ResourceLocation
)
- 1st argument: The nether fertilizer data, a map of parameters to values
ingredient: Ingredient: The ingredient the fertilizer applies todeath?: number: thedeathvalue of the fertilizer- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
destruction?: number: Thedestructionvalue of the fertilizer- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
decay?: number: Thedecayvalue of the fertilizer- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
sorrow?: number: Thesorrowvalue of the fertilizer- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
flame?: number: Theflamevalue of the fertilizer- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
- Optional 2nd argument: A
ResourceLocation, the id of the nether fertilizer
Example
BeneathEvents.data(event => {
event.netherFertilizer(
{
ingredient: '#minecraft:dirt',
death: 5,
flame: 1.2
}
)
})
Greenhouse Type
Add a greenhouse type
Method Signature
event.greenhouseType(
type: {
ingredient: BlockIngredient,
translationKey: Component,
tier?: int
},
id?: ResourceLocation
)
- 1st argument: The greenhouse data, a map of parameters to values
ingredient: BlockIngredient: The blocks the greenhouse type applies totranslationKey: Component: The text describing the greenhouse typetier?: int: The tier of the greenhouse type- Defaults to
0
- Defaults to
Example
FirmaLifeEvents.data(event => {
event.greenhouseType(
{
ingredient: [
'minecraft:green_wool',
'minecraft:glass'
],
translationKey: Text.darkPurple('"Green" House'),
tier: 25
}
)
})
Plantable
Add a plantable definition, for use in planters in greenhouses
Method Signature
event.plantable(
plantable: {
ingredient: Ingredient,
planter: PlanterType,
seed: ItemStack,
crop: ItemStack,
tier?: int,
stages?: int,
extraSeedChance?: number,
nutrient?: {
nitrogen?: number,
phosphorous?: number,
potassium?: number
},
textures?: List<ResourceLocation>,
specials?: List<ResourceLocation>
},
id?: ResourceLocation
)
- 1st argument: The plantable data, a map of parameters to values
ingredient: Ingredient: The items that can be put in a planter to growplanter: PlanterType: The planter the plantable grows inReveal/hide list of planter types
quadlargehangingtrellisbonsaihydroponic
seed: ItemStack: The seed drop when harvesting the plantablecrop: ItemStack: The crop drop when harvesting the plantabletier?: int: The minimum greenhouse tier required for the plantable to growstages?: int: The number of growth stages the plantable has- Defaults to
0
- Defaults to
extraSeedChance?: number: The chance an extra seed drops on harvest- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
nutrient: NutrientList: The nutrients required to grow, a map of parameters to valuesnitrogen?: number: The nitrogen amount- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
phosphorous?: number: The phosphorous amount- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
potassium?: number: The potassium amount- Must be in the range
[0, 1] - Defaults to
0
- Must be in the range
textures?: List<ResourceLocation>: The textures used for the growth stages- Defaults to
[]
- Defaults to
specials?: List<ResourceLocation>: Special textures used byhangingplanters- Defaults to
[]
- Defaults to
- Optional 2nd argument: A
ResourceLocation, the id of the plantable
Example
FirmaLifeEvents.data(event => {
event.plantable(
{
ingredient: 'minecraft:rose_bush',
planter: 'trellis',
seed: 'minecraft:rose_bush',
crop: 'minecraft:rose_bush',
tier: 22,
nutrient: {
nitrogen: 2
},
textures: [
'minecraft:block/stone',
'minecraft:block/dirt'
]
}
)
})
-
A full list of mob effects can be obtained by running the command
/kubejs dump_registry minecraft:mob_effectin-game ↩ -
In TFC, the forging and welding temperatures of an item are typically 60% and 80% of its melting temperature ↩ ↩2
-
A full list of all sound events can be obtained by running the command
/kubejs dump_registry minecraft:sound_eventin-game ↩