java - Spigot - 保存未完全由 BlockState 表示的 block - Java

标签 java arraylist minecraft bukkit

我尝试编写类似“撤消”命令的程序。也许您从 WorldEdit 中了解到这一点。对于保存的 block ,我有一个 ArrayList<BlockState> ,但如果尝试保存宝箱、标志等,则不起作用。当然,我可以添加额外的宝箱列表 ArrayList<Chest>和标志 ArrayList<Sign>以及滴管 ArrayList<Furnace> ....

有没有更好、更简单的方法来做到这一点?

感谢您的帮助,并对我的英语不好表示歉意;)

最佳答案

我不确定我是否正确理解你的问题,但你可以定义 inteface ,假设您将其称为 CommonInterface ,并让您的所有类 ( BlockState, Chest, Sign ... ) 实现此 interface 。然后你就可以拥有一个 List<CommonInterface> 类型的对象(例如: List<CommonInterface> list = new ArrayList<>() )并将所有对象保存在此 list 中。

注意:当您从 list 获取对象时,您需要检查该对象的运行时类型,以便知道如何操作它。

示例:

CommonInterface ci = list.get(0);
if(ci instanceof BlockState){
   // do something ...
}
else if(ci instanceof Sign){
   // do something else ... 
}
...

这是另一个例子:

import java.util.ArrayList;
import java.util.List;

public class TestGenerics
{
   class A implements CommonInterface
   {
       public String say()
       {
           return "I'm A";
       }
   }

   class B implements CommonInterface
   {
       public String hi()
       {
           return "I'm B";
       }
   }

   class C implements CommonInterface
   {
       public String getName()
       {
           return "I'm C";
       }
   }

   interface CommonInterface
   {

   }

   public List<CommonInterface> get()
   {
       A a = new A();
       B b = new B();
       C c = new C();
       List<CommonInterface> ci = new ArrayList<>();
       ci.add(a);
       ci.add(b);
       ci.add(c);
       return ci;
   }

   public static void main(String[] args)
   {
       TestGenerics tg = new TestGenerics();
       List<CommonInterface> list = tg.get();
       for(CommonInterface ci : list){
           if(ci instanceof A){
               System.out.println(((A)ci).say());
           }
           else if(ci instanceof B){
               System.out.println(((B)ci).hi());
           }
           else if(ci instanceof C){
               System.out.println(((C)ci).getName());
           }
        } 
      }
  }

关于java - Spigot - 保存未完全由 BlockState 表示的 block - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35323774/

相关文章:

java - 将递增 int 分配给数组列表中的元素,Java

java - ArrayList 到字符串数组

java - (龙头1.8) "stained_hardened_clay:14"!= "stained_hardened_clay:14"

java - Spigot 使用命令取消注册事件

java - 在Java中过滤列表并将结果放入新的数组列表中

Java : Get only 1 line of integers from the console?

java - Postgres 和 JOOQ 不区分大小写的正则表达式?

java - 我们如何将 Android 下载管理器与 RecyclerView 一起使用?

使用 SHA256 的 PHP 登录脚本

Java AWT drawImage 竞争条件 - 如何使用同步来避免它