API

Sons et particules

Les sons et les particules personnalisés sont livrés dans le mod, comme les textures, et tu les utilises par leur id comme ceux du jeu. Tu les déclares comme le reste du contenu.

Sons

content/sounds.craftCraftScript
sound "ruby_chime" { file: "ruby/chime", subtitle: "A ruby chimes", pitch: 1.2 }

sound "ruby_crumble" { files: ["ruby/crumble_1", "ruby/crumble_2"], subtitle: "Ruby ore crumbles", volume: 0.8 }
Propriété Valeurs Par défaut
file chemin du fichier sans extension : ruby/chime est le fichier sounds/ruby/chime.ogg du mod sounds/<id>.ogg
files plusieurs chemins ; l’un d’eux est joué au hasard à chaque fois —
subtitle ce qui s’affiche quand les sous-titres sont activés —
volume 0–1 1
pitch hauteur ; 1 est l’original 1

Il se joue comme n’importe quel son du jeu : player.play_sound("rubies:ruby_chime") pour un joueur, world().play_sound(location, "rubies:ruby_chime") à un endroit. Les fichiers sont au format .ogg.

Particules

content/particles.craftCraftScript
particle "ruby_spark" { textures: ["ruby_spark_0", "ruby_spark_1"], motion: "sparkle" }
Propriété Valeurs Par défaut
textures images de textures/particle/, sans extension. Plusieurs forment une animation, dans cet ordre textures/particle/<id>.png
motion float_up : monte et s’estompe. flame : presque immobile, rétrécit. sparkle : dérive et scintille. drift : flotte sur place. float_up

Tu la fais apparaître par son id : world().spawn_particle("rubies:ruby_spark", location, 30, 1.5, 0.02), avec le nombre, la dispersion et la vitesse, comme pour les particules du jeu. Pour envoyer une particule dans une direction donnée, passe plutôt une vitesse : world().spawn_particle("minecraft:end_rod", location, vector(0, 0.1, 0)), en blocs par tick. Les particules attirées vers un endroit, comme minecraft:enchant, partent de location + vitesse et volent vers location.

Un vrai exemple

Dans le mod d’exemple, quand un minerai lâche un rubis en plus, le carillon retentit et des étincelles jaillissent là où était le bloc :

events/mining.craftCraftScript
import { give_rubies } from "/lib/rewards"
import { SETTINGS } from "/settings"

on break(e) {
    let p = e.player
    if p == null { return }
    if e.block.type == "minecraft:diamond_ore" and chance(SETTINGS["bonus_chance"]) {
        give_rubies(p, 1)
        p.play_sound("rubies:ruby_chime")
        p.world.spawn_particle("rubies:ruby_spark", e.block.location, 12, 0.4, 0.02)
    }
}

En Kotlin

content/Sounds.ktKotlin
package com.example.rubies.content

object Sounds {
    const val CHIME = "rubies:ruby_chime"

    fun register(content: ContentBuilder) {
        content.sound("ruby_chime") { file("ruby/chime"); subtitle = "A ruby chimes"; pitch = 1.2f }
        content.sound("ruby_crumble") { file("ruby/crumble_1"); file("ruby/crumble_2"); subtitle = "Ruby ore crumbles"; volume = 0.8f }
    }
}
content/Particles.ktKotlin
package com.example.rubies.content

object Particles {
    const val SPARK = "rubies:ruby_spark"

    fun register(content: ContentBuilder) {
        content.particle("ruby_spark") { texture("ruby_spark_0"); texture("ruby_spark_1"); motion = ParticleMotion.SPARKLE }
    }
}

sound(id) { file(...); subtitle; volume; pitch } et particle(id) { texture(...); motion = ParticleMotion.SPARKLE } dans le ContentBuilder. Pour jouer et faire apparaître : player.playSound(id), world.playSound(at, id), world.spawnParticle(id, at, count, spread, speed) et world.spawnParticle(id, at, Vector(0.0, 0.1, 0.0)).

Fichiers

Mod Où
CraftScript (dossier) mods/rubies/sounds/ruby/chime.ogg, mods/rubies/textures/particle/ruby_spark_0.png
Kotlin ou Java src/main/resources/assets/rubies/sounds/ruby/chime.ogg, …/assets/rubies/textures/particle/ruby_spark_0.png