- Баллы
- 103
Накитаёзил такой код (Minecraft 1.7.10):
Java:
public static ItemStack randomRocket(int amount, String name, int altitude, int maxmain, int maxfade, int maxstar) {
if (altitude > 3) altitude = 3; // высота больше трех - слишком далеко (можно максимум 128)
if (maxfade < 0) maxfade = 0; // количество вторичного красителя не может быть отрицательным числом
if (maxmain == 0) maxmain = 1; // не может быть и одного первичного красителя
if (maxstar == 0) maxstar = 1; // не может быть ни одной звездочки в фейерверке
ItemStack rocket = new ItemStack(Material.FIREWORK, amount); // создаем стак фейерверков
FireworkMeta meta = (FireworkMeta) rocket.getItemMeta(); // берем мету
// добавляем нужное количество звездочек
for (int i = 0; i < maxstar; i++){
Builder firework = fireworkMeta(maxmain, maxfade);
meta.addEffect(firework.build());
}
meta.setPower(altitude); // высота полета
if(!name.equalsIgnoreCase("none"))meta.setDisplayName(name); // название фейерверка
rocket.setItemMeta(meta); // все полученное суём обратно в ракету
return rocket;
}
private static Builder fireworkMeta(int maxmain, int maxfade){
Builder meta = FireworkEffect.builder();
// main color
for (int i = 0; i < maxmain; i++){
int main = rnd.nextInt(170);
if(main < 10) {meta.withColor(Color.AQUA);}
if(main >= 10 && main < 20) {meta.withColor(Color.BLACK);}
if(main >= 20 && main < 30) {meta.withColor(Color.BLUE);}
if(main >= 30 && main < 40) {meta.withColor(Color.FUCHSIA);}
if(main >= 40 && main < 50) {meta.withColor(Color.GRAY);}
if(main >= 50 && main < 60) {meta.withColor(Color.GREEN);}
if(main >= 60 && main < 70) {meta.withColor(Color.LIME);}
if(main >= 70 && main < 80) {meta.withColor(Color.MAROON);}
if(main >= 80 && main < 90) {meta.withColor(Color.NAVY);}
if(main >= 90 && main < 100) {meta.withColor(Color.OLIVE); }
if(main >= 100 && main < 110) {meta.withColor(Color.ORANGE);}
if(main >= 110 && main < 120) {meta.withColor(Color.PURPLE);}
if(main >= 120 && main < 130) {meta.withColor(Color.RED);}
if(main >= 130 && main < 140) {meta.withColor(Color.SILVER);}
if(main >= 140 && main < 150) {meta.withColor(Color.TEAL);}
if(main >= 150 && main < 160) {meta.withColor(Color.WHITE);}
if(main >= 160) {meta.withColor(Color.YELLOW);}
}
// fade to
for (int i = 0; i < maxfade; i++){
int fade = rnd.nextInt(170);
if(fade < 10) {meta.withFade(Color.AQUA);}
if(fade >= 10 && fade < 20) {meta.withFade(Color.BLACK);}
if(fade >= 20 && fade < 30) {meta.withFade(Color.BLUE);}
if(fade >= 30 && fade < 40) {meta.withFade(Color.FUCHSIA);}
if(fade >= 40 && fade < 50) {meta.withFade(Color.GRAY);}
if(fade >= 50 && fade < 60) {meta.withFade(Color.GREEN);}
if(fade >= 60 && fade < 70) {meta.withFade(Color.LIME);}
if(fade >= 70 && fade < 80) {meta.withFade(Color.MAROON);}
if(fade >= 80 && fade < 90) {meta.withFade(Color.NAVY);}
if(fade >= 90 && fade < 100) {meta.withFade(Color.OLIVE); }
if(fade >= 100 && fade < 110) {meta.withFade(Color.ORANGE);}
if(fade >= 110 && fade < 120) {meta.withFade(Color.PURPLE);}
if(fade >= 120 && fade < 130) {meta.withFade(Color.RED);}
if(fade >= 130 && fade < 140) {meta.withFade(Color.SILVER);}
if(fade >= 140 && fade < 150) {meta.withFade(Color.TEAL);}
if(fade >= 150 && fade < 160) {meta.withFade(Color.WHITE);}
if(fade >= 160) {meta.withFade(Color.YELLOW);}
}
if(rnd.nextBoolean()){meta.flicker(true);} else {meta.flicker(false);}
if(rnd.nextBoolean()){meta.trail(true);} else {meta.trail(false);}
int type = rnd.nextInt(50);
if(type < 10)meta.with(Type.BALL);
if(type > 10 && type < 20)meta.with(Type.BALL_LARGE);
if(type > 20 && type < 30)meta.with(Type.BURST);
if(type > 30 && type < 40)meta.with(Type.CREEPER);
if(type > 40 && type <= 50)meta.with(Type.STAR);
return meta;
}
В итоге получаю некоторое количество фейерверков с рандомными свойствами, всё работает, всё круто, но есть один нюанс.
Так выглядит "ванильная" ракета (созданная в верстаке):
А так выглядит моя (сгенерированная приведённым выше кодом):
То есть, все цвета описываются словом "Пользовательский". И если цветов много, то получается вообще гадость, не влезающая в экран. Если включить английский язык - будет много слов "Custom".
Это "ванильный" фейерверк:
А это мой:
Я не вижу между ними разницы (цвет шрифта названия ракеты не считайте, он не влияет). Но она есть. Есть идеи, в чём именно?
Так выглядит "ванильная" ракета (созданная в верстаке):
А так выглядит моя (сгенерированная приведённым выше кодом):
То есть, все цвета описываются словом "Пользовательский". И если цветов много, то получается вообще гадость, не влезающая в экран. Если включить английский язык - будет много слов "Custom".
Это "ванильный" фейерверк:
А это мой:
Я не вижу между ними разницы (цвет шрифта названия ракеты не считайте, он не влияет). Но она есть. Есть идеи, в чём именно?