【问题标题】:Bukkit - How can I make a spawner spawn a different entity than a pig..?Bukkit - 如何让刷怪笼生成与猪不同的实体..?
【发布时间】:2019-01-18 10:22:18
【问题描述】:

好的,所以我正在尝试制作一个自定义生成器插件,但我已经遇到了一些问题。我不知道如何更改生成器召唤的生物。我目前拥有的代码可以在下面找到(这是一个 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) {
                        }
                    }
                }
            }
        }
    }

【问题讨论】:

  • 那么...此代码转储的哪一部分显示了您的问题?您需要发布最短的代码示例,以清楚地识别给您带来麻烦的问题。解决问题的第一步是知道它是什么,如果你不知道,我们为什么要知道?发布任何旧代码或可能包含问题的代码都不够好。现在是阅读 Stack Overflow help file 并了解此处考虑的主题问题以及如何提出能够获得好的答案的好问题的好时机。
  • 问题出在 SpawnerSpawnEvent: spawner.setSpawnedType(EntityType.SKELETON);它不会改变生成的生物的实体类型
  • 您已经确定了一行代码,但这与知道问题所在不同。运行代码时会发生什么?您的代码是否找到了它需要找到的文件?有错误吗?除了骷髅之外还有什么东西在产卵吗?这些都是您在发布问题之前应该回答的问题,因为如果您知道这些答案,您至少会更好地了解问题所在。
  • 从来没有控制台错误,猪正在产卵(因为猪是生成器的默认生物。)控制台确实收到“文件存在......”消息基本上,除了骨架的实际生成之外,一切都很好......

标签: java minecraft bukkit spawning


【解决方案1】:

好的,所以。根据我对文档的快速阅读,您可以在此实例中将“块”转换为 CreatureSpawner,然后设置 spawnType。

例子:

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

请注意其中一些可能是伪代码,因为我没有深入研究 Bukkit API 文档,但您应该能够从那里弄清楚。

【讨论】:

  • 好的,所以我从一开始就尝试了这种想法,认为它不起作用,不幸的是我是对的。谢谢你的尝试。
  • 不是我不熟悉,我误解了你的问题。早在 2015 年,我就一直在编写插件。这将是一个非常老套和粗略的解决方案,但可能会解决您的问题。使用您设置的特定元数据或名称取消特定块上的生成事件,然后在该实体的位置生成骨架。
  • 我找到了解决办法,别担心。感谢您的帮助。这只是因为我很愚蠢......我试图在白天产生一个骷髅......
  • 哈,太好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多