Bukkit - Как я могу сделать так, чтобы спавнер порождал существо, отличное от свиньи?

Итак, я пытаюсь создать собственный плагин для создателей, но я уже столкнулся с небольшой проблемой... Я не могу понять, как изменить существо, которое вызывает создатель. Код, который у меня есть в настоящее время, можно найти ниже (Это SpawnerSpawnEvent, также все работает, кроме порождения скелета, Консоль получает сообщение "Файл существует", Файл действительно существует (Это делается в блок-месте). событие, я также включу это ниже, не уверен, если это необходимо.) поэтому я очень смущен тем, как я мог бы достичь этого..) Заранее спасибо за ваше время.

SpawnerSpawnEvent "

package me.askingg.events;

import java.io.File;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.SpawnerSpawnEvent;

import me.askingg.golems.Main;

    public class CreatureSpawn implements Listener {

        Main plugin;

        @EventHandler
        public void coalSpawn(SpawnerSpawnEvent event) {

            CreatureSpawner spawner = (CreatureSpawner) event.getSpawner().getBlock().getState();
            Location location = spawner.getLocation();
            String world = spawner.getWorld().getName().toString();

            File locationFile = new File("plugins/Golems/Locations", world + " - " + location.getBlockX() + "-"
                    + location.getBlockY() + "-" + location.getBlockZ() + ".yml");

            if (locationFile.exists()) {

                Bukkit.getConsoleSender().sendMessage(Main.colorCodes(Main.prefix + "&fThe file exists..."));
                spawner.setSpawnedType(EntityType.SKELETON);
                spawner.update();

            }
        }
    }

BlockPlaceEvent "

package me.askingg.events;

import java.io.File;
import java.io.IOException;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;

import me.askingg.golems.Main;

    public class BlockPlace implements Listener {

        @EventHandler
        public void spawnerPlace(BlockPlaceEvent event) {

            Player player = (Player) event.getPlayer();
            Block block = event.getBlock();
            Location location = block.getLocation();
            String world = block.getWorld().getName().toString();

            if (block.getType().equals(Material.SPAWNER)) {
                if (player.getInventory().getItemInMainHand().getItemMeta().getDisplayName()
                        .equals(Main.colorCodes("&fSkeleton Spawner"))) {

                    File locationFile = new File("plugins/Golems/Locations", world + " - " + location.getBlockX() + "-"
                            + location.getBlockY() + "-" + location.getBlockZ() + ".yml");
                    if (!(locationFile.exists())) {
                        try {

                            locationFile.createNewFile();
                            Bukkit.getConsoleSender()
                                    .sendMessage(Main.colorCodes(Main.prefix
                                            + "&aSuccessfully&f created a new &fSkeleton Spawner&f location &8(&a"
                                            + world + " &8-&a " + location.getBlockX() + "&8-&a" + location.getBlockY() + "&8-&a"
                                            + location.getBlockZ() + "&8)"));

                        } catch (IOException e) {
                        }
                    }
                }
            }
        }
    }

1 ответ

Хорошо, так. Исходя из моего быстрого прочтения документации, похоже, что в этом случае вы можете привести "block" к CreatureSpawner, а затем установить spawnType.

Пример:

if (block.getType().equals(Material.SPAWNER)) {
  CreatureSpawner spawner = (CreatureSpawner) block;
  spawner.setSpawnType(EntityType.SKELETON);
}

Знайте, что это может быть псевдокод, потому что я не особо углублялся в документацию Bukkit API, но вы сможете понять это оттуда.

Другие вопросы по тегам