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) {
                        }
                    }
                }
            }
        }
    }

person Askingg    schedule 10.08.2018    source источник
comment
Итак ... какая именно часть этого дампа кода демонстрирует вашу проблему? Вам необходимо опубликовать самый короткий образец кода, который четко определяет проблему, которая вызывает у вас проблемы. Первый шаг к решению проблемы - это знать, что это такое, а если вы не знаете, зачем нам? Публикация любого старого кода или кода, который может содержать проблему, недостаточно. Сейчас хорошее время, чтобы прочитать файл справки Stack Overflow и узнать, какие вопросы здесь рассматриваются по теме и как задавать хорошие вопросы, которые получить хорошие ответы.   -  person MarsAtomic    schedule 10.08.2018
comment
Проблема заключается в SpawnerSpawnEvent: spawner.setSpawnedType (EntityType.SKELETON); Не меняет тип сущности порожденного моба.   -  person Askingg    schedule 10.08.2018
comment
Вы определили строку кода, но это не то же самое, что знать, в чем проблема. Что происходит, когда вы запускаете код? Ваш код находит нужный файл? Есть ошибки? Что-то нерестится, кроме скелета? Это все вопросы, на которые вы должны ответить, прежде чем размещать вопрос, потому что, если бы вы знали эти ответы, вы, по крайней мере, лучше понимали бы, в чем проблема.   -  person MarsAtomic    schedule 10.08.2018
comment
Нет никаких консольных ошибок, так что свиньи нерестятся (потому что свиньи являются мобом по умолчанию для спаунеров для спауна ..) Консоль действительно получает сообщение «Файл существует ...». В принципе, все работает отлично, за исключением фактического нерест скелета ...   -  person Askingg    schedule 10.08.2018


Ответы (1)


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

Пример:

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

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

person Spencer    schedule 10.08.2018
comment
Хорошо, я попробовал это с самого начала, думая, что это не сработает, и, к сожалению, я был прав. Спасибо за попытку. ‹3 Это очень похоже на то, что я пытался сделать в первую очередь, это просто проверка того, является ли спавнер спавнером (это SpawnerSpawnEvent, также известное как событие, когда спавнер мобов порождает сущность, поэтому проверяя, является ли это спавнером) spawner бессмыслен) Я понимаю, что вы не очень хорошо знакомы с BukkitAPI, еще раз спасибо за хотя бы попытку. - person Askingg; 10.08.2018
comment
Дело не в том, что я не знаком, я неверно истолковал ваш вопрос. Я постоянно писал плагины еще в 2015 году. Это будет очень хакерское и грубое решение, но оно может решить вашу проблему. Отмените событие появления на определенных блоках с определенными метаданными или именем, которые вы установили, а затем просто создайте скелет в местоположении этого объекта. - person Spencer; 10.08.2018
comment
Я нашел исправление, не волнуйтесь. Спасибо за помощь. Просто потому, что я глуп ... Я пытался создать скелет днем ​​.. - person Askingg; 10.08.2018
comment
Ха, это здорово. - person Spencer; 10.08.2018