Спавнерские частицы, порождаемые мобом, вокруг скелетной лошади в Букките

1

Эй, поэтому я просто хотел, чтобы скелетная лошадь в Minecraft постоянно обретала частицы всплеска. Я не могу понять, как его зацикливать, чтобы он не размножал частицы огня. То, что я сделал до сих пор, ниже.

package survivalcraft.FireHorse;
import java.util.logging.Logger;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.command.CommandSender;
import org.bukkit.command.Command;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Horse.Variant;
import org.bukkit.entity.Player;
import org.bukkit.entity.Horse;
import org.bukkit.Effect;

public class Main extends JavaPlugin{
    public static Main plugin;
    public final Logger logger = Logger.getLogger("Minecraft");

    @Override
    public void onDisable(){
        PluginDescriptionFile pdf = this.getDescription();
        this.logger.info(pdf.getName() + " version " + pdf.getVersion() + " has been disabled! Neigh! ;D");
    }

    @Override
    public void onEnable(){
        PluginDescriptionFile pdf = this.getDescription();
        this.logger.info(pdf.getName() + " version " + pdf.getVersion() + " has been enabled!");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
        Player player = (Player) sender;
        if(commandLabel.equalsIgnoreCase("firehorse") || commandLabel.equalsIgnoreCase("fh")){
            Horse horse = (Horse) player.getWorld().spawnEntity(player.getLocation(), EntityType.HORSE);
            horse.setBreed(true);
            horse.setAdult();
            horse.setVariant(Variant.SKELETON_HORSE);
            horse.setCustomName(player.getDisplayName() + " Fire Horse");
            horse.getWorld().playEffect(horse.getLocation(), Effect.MOBSPAWNER_FLAMES, 0);
        }
        return false;
    }   
}
Теги:
minecraft
bukkit

2 ответа

3

Посмотрите на использование Планировщика. Вы можете создать повторяющуюся задачу, которая порождает частицы каждой пары:

getServer().getScheduler().runTaskTimer(this, new Runnable() {
    public void run() {
        horse.getWorld().playEffect(horse.getLocation(), Effect.MOBSPAWNER_FLAMES, 0);
    }
}, 0L, 10L);

Просто замените вашу текущую линию playEffect на это и сделайте конечную horse.

1

Если вы хотите создать цикл, вы должны использовать Bukkit встроенный SchedulerAPI - здесь объясняется.

Вот пример использования вашего кода:

Создайте новый класс под названием HorseTimer (или что хотите). Внесите его в класс Runnable.

public class HorseTimer implements Runnable {
    @Override
    public void run() {

    }
}

Затем добавьте конструктор, чтобы класс знал, какой объект должен всплывать вокруг частиц.

public class HorseTimer implements Runnable {
    private Horse horse;

    public HorseTimer(Horse horse) { 
        this.horse = horse; 
    }

    @Override
    public void run() {

    }
}

Теперь вы можете порождать частицы вокруг лошади (например, вы делаете это только один раз).

public class HorseTimer implements Runnable {
    private Horse horse;

    public HorseTimer(Horse horse) { 
        this.horse = horse; 
    }

    @Override
    public void run() {
        // Do stuff with the horse, will be in the loop.
    }
}

Наконец, нам нужно запустить цикл в классе Main. Поместите этот код в конец вашего оператора if в свой метод onCommand (...).

Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new HorseTimer(horse), 0l, <DELAY BETWEEN REPEATS IN TICKS HERE>l);
  • 0
    Спасибо, вы действительно помогли мне!
  • 0
    Я думаю, что стоит указать на возможность утечек памяти из-за хранения сущности Horse

Ещё вопросы

Сообщество Overcoder
Наверх
Меню