Spigot - 保存未完全由 BlockState 表示的块 - Java
Spigot - Save Blocks that are not full represented by a BlockState - Java
我尝试编写类似 "undo" 命令的程序。也许您是从 WorldEdit 了解到的。对于已保存的块,我有一个 ArrayList<BlockState>
,但如果尝试保存一个箱子、标志等,它就不起作用。当然,我可以为 Chests ArrayList<Chest>
和 Signs ArrayList<Sign>
以及 Droppers 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());
}
}
}
}
我尝试编写类似 "undo" 命令的程序。也许您是从 WorldEdit 了解到的。对于已保存的块,我有一个 ArrayList<BlockState>
,但如果尝试保存一个箱子、标志等,它就不起作用。当然,我可以为 Chests ArrayList<Chest>
和 Signs ArrayList<Sign>
以及 Droppers 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());
}
}
}
}