gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:36:29 24 4
gpt4 key购买 nike

我尝试编写类似“撤消”命令的程序。也许您从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com