kubejs注冊粒子
in startup_scripts
StartupEvents.registry('particle_type', e => {
global.rocketPlumeSupplier = e.create('flame').overrideLimiter(true);
})
if (Platform.isClientEnvironment()) {
let sapConstructor = Java.loadClass("net.minecraft.client.particle.SimpleAnimatedParticle").__javaObject__.declaredConstructors[0];
sapConstructor.setAccessible(true);
let zero = Java.loadClass("java.lang.Float").valueOf(0);
global.registerParticleProvider = (event) => {
event.registerSpriteSet(global.rocketPlumeSupplier.get(), set => {
return (particleOptions, clientLevel, x, y, z, xSpeed, ySpeed, zSpeed) => {
let plume = sapConstructor.newInstance(clientLevel, x, y, z, set, zero);
// Initialize particle's values
plume.setParticleSpeed(xSpeed, ySpeed, zSpeed);
plume.scale(5);
plume.setLifetime(65);
plume.setSpriteFromAge(set);
return plume
}
})
}
ForgeModEvents.onEvent('net.minecraftforge.client.event.RegisterParticleProvidersEvent', e => global.registerParticleProvider(e));
}
in client_scripts
ClientEvents.highPriorityAssets(e => {
e.add('kubejs:particles/flame', {
textures: [
"kubejs:flame"
]
})
})
in kubejs/assets/kubejs/textures/particle/flame.png

in kubejs/assets/kubejs/textures/particle/flame.png.mcmeta
{
"animation": {
"frametime": 2,
"interpolate": false
}
}
in kubejs/assets/kubejs/particles/flame.json
{
"textures": [
"kubejs:flame"
]
}