在 Bukkit 中设置原理图的块数据?

2023-12-29

我正在尝试加载并粘贴.schematicbukkit 中的文件(不挂钩 MCEdit API)。下面是我用来粘贴原理图的函数/方法。粘贴时,我不断收到NullPointerException在粘贴过程中。当我记录放置的物品时,我看到草块、石头,但看不到我的箱子、箱子里的任何东西或信标(也许甚至更多的方块)。

错误发生在这一行:block.setData(blockData[index], true);

我认为这与元数据有关,但是我如何从原理图文件中获取该信息并将其应用到每个块?

问题:How can i paste items with metaData like (Chest with contents, torches, beacons, etc.?

@SuppressWarnings("deprecation")
public void pasteSchematic(World world, Location loc, Schematic schematic)
{
    byte[] blocks = schematic.getBlocks();
    byte[] blockData = schematic.getData();

    short length = schematic.getLenght();
    short width = schematic.getWidth();
    short height = schematic.getHeight();

    for (int x = 0; x < width; ++x) {
        for (int y = 0; y < height; ++y) {
            for (int z = 0; z < length; ++z) {
                int index = y * width * length + z * width + x;
                Block block = new Location(world, x + loc.getX(), y + loc.getY(), z + loc.getZ()).getBlock();
                block.setTypeId(blocks[index], true);
                block.setData(blockData[index], true);
                if(block.getType() == Material.BEACON || block instanceof Beacon) {
                    // Add location up one block
                    getLogger().info("Block is a Beacon!");
                    spawnLocations.add(block.getLocation().add(new Location(block.getWorld(),0,1,0)));
                } else {
                    getLogger().info("Block is a " + block.getType().toString() + " block!");
                }
            }
        }
    }
}

并加载原理图文件:

public Schematic loadSchematic(File file) throws IOException
{
    FileInputStream stream = new FileInputStream(file);
    @SuppressWarnings("resource")
    NBTInputStream nbtStream = new NBTInputStream(stream);

    CompoundTag schematicTag = (CompoundTag) nbtStream.readTag();
    if (!schematicTag.getName().equals("Schematic")) {
        throw new IllegalArgumentException("Tag \"Schematic\" does not exist or is not first");
    }

    Map<String, Tag> schematic = schematicTag.getValue();
    if (!schematic.containsKey("Blocks")) {
        throw new IllegalArgumentException("Schematic file is missing a \"Blocks\" tag");
    }

    short width = getChildTag(schematic, "Width", ShortTag.class).getValue();
    short length = getChildTag(schematic, "Length", ShortTag.class).getValue();
    short height = getChildTag(schematic, "Height", ShortTag.class).getValue();

    String materials = getChildTag(schematic, "Materials", StringTag.class).getValue();
    if (!materials.equals("Alpha")) {
        throw new IllegalArgumentException("Schematic file is not an Alpha schematic");
    }

    byte[] blocks = getChildTag(schematic, "Blocks", ByteArrayTag.class).getValue();
    byte[] blockData = getChildTag(schematic, "Data", ByteArrayTag.class).getValue();
    return new Schematic(blocks, blockData, width, length, height);
}

/**
* Get child tag of a NBT structure.
*
* @param items The parent tag map
* @param key The name of the tag to get
* @param expected The expected type of the tag
* @return child tag casted to the expected type
* @throws DataException if the tag does not exist or the tag is not of the
* expected type
*/
private static <T extends Tag> T getChildTag(Map<String, Tag> items, String key, Class<T> expected) throws IllegalArgumentException
{
    if (!items.containsKey(key)) {
        throw new IllegalArgumentException("Schematic file is missing a \"" + key + "\" tag");
    }
    Tag tag = items.get(key);
    if (!expected.isInstance(tag)) {
        throw new IllegalArgumentException(key + " tag is not of tag type " + expected.getName());
    }
    return expected.cast(tag);
}

UPDATE经过进一步的测试,即使我移除了箱子和信标(只是草和石头),错误仍然发生。我正在调用这个事件onSignChange如果有帮助的话。

下面是控制台中的错误:

[21:34:22 ERROR]: Could not pass event SignChangeEvent to SkyWars v1.0.0
org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:294) ~[server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
a:62) ~[server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
ava:501) [server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
ava:486) [server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.PlayerConnection.a(PlayerConnection.java
:1586) [server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInUpdateSign.a(SourceFile:48)
[server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInUpdateSign.handle(SourceFile
:9) [server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:157
) [server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.ServerConnection.c(SourceFile:134) [serv
er.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:6
67) [server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:2
60) [server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:5
58) [server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java
:469) [server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:6
28) [server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
Caused by: java.lang.NullPointerException
        at org.bukkit.craftbukkit.v1_7_R3.util.CraftMagicNumbers.getBlock(CraftM
agicNumbers.java:80) ~[server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at org.bukkit.craftbukkit.v1_7_R3.util.CraftMagicNumbers.getBlock(CraftM
agicNumbers.java:36) ~[server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at org.bukkit.craftbukkit.v1_7_R3.block.CraftBlock.getNMSBlock(CraftBloc
k.java:55) ~[server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at org.bukkit.craftbukkit.v1_7_R3.block.CraftBlock.setTypeIdAndData(Craf
tBlock.java:129) ~[server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at org.bukkit.craftbukkit.v1_7_R3.block.CraftBlock.setTypeId(CraftBlock.
java:124) ~[server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        at com.FeaRCode.SkyWars.SkyWars.pasteSchematic(SkyWars.java:132) ~[?:?]
        at com.FeaRCode.SkyWars.GameEvents.OnSignChange(GameEvents.java:33) ~[?:
?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0
_05]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0
_05]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1
.8.0_05]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_05]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:292) ~[server.jar:git-Bukkit-1.7.9-R0.1-6-g4d832c3-b3090jnks]
        ... 13 more

skywars中的第132行是这样的:block.setData(blockData[index], true);GameEvents 中的行是当我调用此方法时。

Update 2这是一些 API 用法的代码

public void pasteSchematic(World world, Location loc)
{
    File schematic = new File(this.getDataFolder() + File.separator + fileName);
    Location topLeft;
    Location bottomRight;
    Vector v = new Vector(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
    BukkitWorld BWf = new BukkitWorld(currentWorld);
    EditSession es = new EditSession(BWf, -1);
    try {
        CuboidClipboard cc = SchematicFormat.getFormat(schematic).load(schematic);
        try {
            cc.paste(es, v, true);
            topLeft = new Location(currentWorld, loc.getBlockX() + cc.getWidth(), loc.getBlockY() + cc.getHeight(), loc.getBlockZ() + cc.getLength());
            bottomRight = new Location(currentWorld, loc.getBlockX() - cc.getWidth(), loc.getBlockY() - cc.getHeight(), loc.getBlockZ() - cc.getLength());
            calculateSpawnLocations(topLeft, bottomRight);
        } catch (MaxChangedBlocksException e) {
        e.printStackTrace();
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (DataException e) {
        e.printStackTrace();
    }

}

public void calculateSpawnLocations(Location loc1, Location loc2)
{
    int topBlockX = (loc1.getBlockX() < loc2.getBlockX() ? loc2.getBlockX() : loc1.getBlockX());
    int bottomBlockX = (loc1.getBlockX() > loc2.getBlockX() ? loc2.getBlockX() : loc1.getBlockX());

    int topBlockY = (loc1.getBlockY() < loc2.getBlockY() ? loc2.getBlockY() : loc1.getBlockY());
    int bottomBlockY = (loc1.getBlockY() > loc2.getBlockY() ? loc2.getBlockY() : loc1.getBlockY());

    int topBlockZ = (loc1.getBlockZ() < loc2.getBlockZ() ? loc2.getBlockZ() : loc1.getBlockZ());
    int bottomBlockZ = (loc1.getBlockZ() > loc2.getBlockZ() ? loc2.getBlockZ() : loc1.getBlockZ());

    for(int x = bottomBlockX; x <= topBlockX; x++)
    {
        for(int z = bottomBlockZ; z <= topBlockZ; z++)
        {
            for(int y = bottomBlockY; y <= topBlockY; y++)
            {
                Block block = loc1.getWorld().getBlockAt(x, y, z);
                if(block instanceof Beacon || block.getType() == Material.BEACON || block.getType().equals(Material.BEACON)) {
                    // Add location up one block
                    getLogger().info("Block is a Beacon!");
                    spawnLocations.add(block.getLocation().add(new Location(block.getWorld(),0,1,0)));
                } else {
                    getLogger().info("Block is a " + block.getType().toString() + " block!");
                }
            }
        }
    }
}

我这样做without使用任何其他外部导入,甚至不使用jnbt,现在默认包含在我的世界中,通过执行以下操作:

public class Schematic{

 public List<Location> pasteSchematic(File f){  
  try{
   FileInputStream fis = new FileInputStream(f);
   NBTTagCompound nbt = NBTCompressedStreamTools.a(fis);

   short width = nbt.getShort("Width");
   short height = nbt.getShort("Height");
   short length = nbt.getShort("Length");

   byte[] blocks = nbt.getByteArray("Blocks");
   byte[] data = nbt.getByteArray("Data");

   fis.close();


   List<Location> locations = new ArrayList<Location>();
   //paste
   for(int x = 0; x < this.width; ++x){
    for(int y = 0; y < this.height; ++y){
     for(int z = 0; z < this.length; ++z){
      int index = y * this.width * this.length + z * this.width + x;
      final Location l = new Location(loc.getWorld(), x + loc.getX(), y + loc.getY(), z + loc.getZ());
      int b = this.blocks[index] & 0xFF;//make the block unsigned, so that blocks with an id over 127, like quartz and emerald, can be pasted
      final Block block = l.getBlock();
      block.setType(Material.getMaterial(b));
      block.setData(this.data[index]);

      Material m = Material.getMaterial(b);
      //you can check what type the block is here, like if(m.equals(Material.BEACON)) to check if it's a beacon        

      locations.add(l);
     }
    }
   }
  }
  catch(Exception e){e.printStackTrace();}
 }
 return locations;
}

现在你可以迭代List由返回pasteSchematic放置完所有块后。您可以这样做:

List<Location> locationss = pasteSchematic(mySchematicFile);
for(Location loc : locations){
 if(loc.getBlock().getType().equals(Material.BEACON)){
  //a beacon was plasted at the loc
 }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Bukkit 中设置原理图的块数据? 的相关文章

  • 如何将 Java 赋值表达式转换为 Kotlin

    java中的一些东西就像 int a 1 b 2 c 1 if a b c System out print true 现在它应该转换为 kotlin 就像 var a Int 1 var b Int 2 var c Int 1 if a
  • 如何在 JFace 的 TableViewer 中创建复选框?

    我创建了一个包含两列的 tableViewer 我想将其中一列设为复选框 为此 我创建了一个 CheckBoxCellEditor 但我不知道为什么它不起作用 名为 tableName 的列显示其值正常 色谱柱规格如下 String COL
  • ElasticBeanstalk Java,Spring 活动配置文件

    我正在尝试通过 AWS ElasticBeanstalk 启动 spring boot jar 一切正常 配置文件为 默认 有谁知道如何为 java ElasticBeanstalk 应用程序 不是 tomcat 设置活动配置文件 spri
  • Java程序中的数组奇怪的行为[重复]

    这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • 一种使用 Java Robot API 和 Selenium WebDriver by Java 进行文件上传的解决方案

    我看到很多人在使用 Selenium WebDriver 的测试环境中上传文件时遇到问题 我使用 selenium WebDriver 和 java 也遇到了同样的问题 我终于找到了解决方案 所以我将其发布在这里希望对其他人有所帮助 当我需
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • 使用 SAX 进行 XML 解析 |如何处理特殊字符?

    我们有一个 JAVA 应用程序 可以从 SAP 系统中提取数据 解析数据并呈现给用户 使用 SAP JCo 连接器提取数据 最近我们抛出了一个异常 org xml sax SAXParseException 字符引用 是无效的 XML 字符
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • Windows 上的 Nifi 命令

    在我当前的项目中 我一直在Windows操作系统上使用apache nifi 我已经提取了nifi 0 7 0 bin zip文件输入C 现在 当我跑步时 bin run nifi bat as 管理员我在命令行上看到以下消息 但无法运行
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是

随机推荐

  • Emacs 初始化为 org 文件:如何获得正确版本的 org-mode?

    我一直在尝试org babel 教程 http orgmode org worg org contrib babel intro html literate programming描述了如何将大部分 emacs init el 文件放入 o
  • @karate如何将参数传递给加特林模拟类中的特征文件?

    让我们考虑一个场景 我们必须运行 创建帐户 api 的性能测试 该测试将输入作为标头 路径参数 Auth token 并输入诸如用户帐户名称之类的数据 因此 对于上述场景 我们有 2 个功能文件 运行 POST 性能测试http baseU
  • 使用变量与使用数字

    想象一下这些版本中的函数 int faculty const unsigned int n return n 1 n n faculty n 1 int faculty const unsigned int n return n 1 1 n
  • 网站完全用 Flash 编写(或显示)。什么时候这不是一个好主意?

    来自这条推文 http twitter com azaaza status 6508524118 http twitter com azaaza status 6508524118我抵达了一个网站 http www invisiblecre
  • C++ 中的通用访问者基类模板 - 重载问题

    我认为编写通用访问者基类模板将是一个简单的练习 目标是能够写 typedef visitor
  • 从 TGridPanel 中删除控件

    我正在使用 TGridPanel 来管理多个面板 我创建面板并使用如下代码将它们添加到 GridPanel var pnl TPanel begin pnl TPanel Create GridPanel2 pnl Caption Pane
  • jQuery 为某些元素添加类

    我有一个像这样的多级菜单 ul li item 1 ul li item 1 1 li li item 1 2 li ul li li item 2 li li item 3 ul li item 3 1 li li item 3 2 li
  • 需要 span.class 和 p 来扩展切换

    我有一个作品集网页 当单击项目时 我需要在其中显示描述和 图像 标签 为此 我使用切换 javascript 我目前有这段代码 我希望在单击项目时 span class 和段落都展开 否则我希望这两个元素在页面上保持隐藏 现在我无法使 sp
  • CSS 禁用滚动

    我在我们的一个网站上遇到了一个问题 在 IE9 中 页面有一个垂直滚动条 但不能使用鼠标滚轮 方向键 pgup pgdwn 进行滚动 滚动的唯一方法是实际单击 按住并移动滚动条 我从CSS中删除了以下内容 overflow x hidden
  • 如何创建类似于 Mail 或 Facebook 应用程序中的“收件人”字段?

    有谁知道如何创建像 Mail 或 Facebook 应用程序中那样的 收件人字段 从 A Z 列表添加地址时 表示该地址的蓝色组件将添加到文本字段 有没有提供这个功能的类 还是需要我们自己实现 没有内置框架 您需要自己实现它或使用开源组件之
  • 执行 git apply 时出现错误“删除 1 个前导路径名组件时 git diff header 缺少文件名信息”

    我通过命令创建了一个 diff 文件 git no pager diff no index stat pathA pathB gt diff log 接下来 我执行了一个命令 git apply index ignore space cha
  • 如何使用静态 C++ 库扩展 Lua?

    我有一个使用 Lua 5 2 1 的 Visual Studio 2008 C 03 应用程序 我想用一个名为 foo 的模块扩展Lua 但是当我调用require foo 在我的 Lua 脚本中 我收到错误 foo test lua 1
  • 我可以将 EJB Stateless Bean 与 CDI 一起使用来维护用户会话吗?

    基于这篇文章http www adam bien com roller abien entry ejb 3 1 killed the http www adam bien com roller abien entry ejb 3 1 kil
  • ngserve 命令首先显示错误,最后编译成功

    我使用最新的 Angular 版本在我的计算机上本地设置了 Angular 项目 每当我使用 CLI 命令作为 ng 服务运行该项目时 它都会首先以红色显示错误 这是一个用于测试或调试 Angular 应用程序的简单服务器 本地 尚未经过安
  • 将图像添加到导航项的标题

    我想在导航栏标题的左侧添加一个徽标 title 属性似乎只接受 NSString 将图像添加到导航栏的最佳方法是什么 您可以将标题视图替换为如下图像 navigationItem titleView UIImageView alloc in
  • conda-forge 存储库是否需要 Anaconda 商业版许可证?

    我认为在 Anaconda 最近的许可证变更之后我需要获得 Anaconda 的商业许可证 不过我很好奇 访问 conda forge 存储库是否需要商业许可证 因为它是社区存储库 或者这仅适用于主要的 anaconda 存储库 我一直无法
  • PHP Readfile 方法的安全问题

    嘿 使用时有什么安全问题需要担心吗readfilePHP 中的方法 我想使用 readfile 方法来获取存储在各种第三方服务器上的文件的 URL 然后我将文件提供给用户 直观上 似乎存在风险 因为 URL 可以指向任何文件 另一方面 我只
  • 从 List.map() 获取迭代索引

    我在字母列表上编写了一个迭代 并使用 地图 类将内部卡片放在屏幕上 在代码中 您可以看到我做了一行 并使用 map 将卡片上的所有用户板打印到屏幕上 我想在里面添加一些逻辑 所以我需要获取元素的 id 用于录制事件 有什么办法可以做到这一点
  • 为什么 android:buttonStyle 不设置按钮样式?

    所以 我有一个奇怪的问题 我的应用程序非常简单 主要活动只有一个按钮 并且清单中设置的活动的自定义主题 我可以确认主题有效并被选中 因为我可以更改活动背景或字体颜色 例如 但是当我尝试为我的活动中的所有按钮设置样式时 它不起作用 这是样式
  • 在 Bukkit 中设置原理图的块数据?

    我正在尝试加载并粘贴 schematicbukkit 中的文件 不挂钩 MCEdit API 下面是我用来粘贴原理图的函数 方法 粘贴时 我不断收到NullPointerException在粘贴过程中 当我记录放置的物品时 我看到草块 石头