gpt4 book ai didi

java - 我如何阻止这种用石板替换特殊板的能力?

转载 作者:行者123 更新时间:2023-12-01 11:18:10 25 4
gpt4 key购买 nike

这个能力在这里完美发挥作用,除了每当受害者站在立石板或任何其他类型上时,它们就会被石板取代。这只发生在平板上,例如砂岩楼梯获得能力后将替换为砂岩楼梯。

@EventHandler
public void onPlayerInteractBlockEarthSpike(PlayerInteractEvent event) {
final Player player = event.getPlayer();
int selected = player.getInventory().getHeldItemSlot();
if (selected == 5){
if (player.getFoodLevel() > 9){
Block target = (Block) player.getTargetBlock((Set<Material>) null, 15).getLocation().getBlock();
List<Entity> victims = (List<Entity>) target.getWorld().getNearbyEntities(target.getLocation(), 2, 2, 2);
player.getWorld().playEffect(target.getLocation().clone().add(0,1,0), Effect.SMOKE, 10);
for (Entity victim : victims){
if (victim instanceof LivingEntity){
victim.setVelocity(new Vector(0,1,0));
((LivingEntity) victim).damage(2,player);
victim.setVelocity(new Vector(0,1,0));
final Block block1 = victim.getLocation().getBlock();
final Block block2 = victim.getLocation().clone().add(0,1,0).getBlock();
final Material type1 = block1.getType();
final Material type2 = block2.getType();
Bukkit.getScheduler().runTaskLater(MagictgCraft.that, new Runnable(){
@Override
public void run(){
block1.setType(Material.STONE);
player.getWorld().playSound(player.getLocation(), Sound.EXPLODE, 10, 5);
int count = 0;
while (count < 20){
player.getWorld().playEffect(block1.getLocation().clone().add(0.5,0.5,0.5), Effect.LAVA_POP, 10);
count = count + 1;
}
}
},3);
Bukkit.getScheduler().runTaskLater(MagictgCraft.that, new Runnable(){
@Override
public void run() {
block2.setType(Material.STONE);
player.getWorld().playSound(player.getLocation(), Sound.EXPLODE, 10, 5);
int count = 0;
while (count < 10){
count = count + 1;
player.getWorld().playEffect(block1.getLocation().clone().add(0.5,0.5,0.5), Effect.LAVA_POP, 10);
}
}
},5);
Bukkit.getScheduler().runTaskLater(MagictgCraft.that, new Runnable(){
@Override
public void run(){
block2.setType(type2);
}
},8);
Bukkit.getScheduler().runTaskLater(MagictgCraft.that, new Runnable(){
@Override
public void run(){
block1.setType(type1);
}
},10);
}
}
}
}

我认为这是因为类型 1 和 2 没有获得分配给它们的子类型(这很奇怪,因为正如我所说,楼梯不受此影响)我如何让它为类型 1 和 2 分配子类型?

最佳答案

您还需要保存并设置 block 数据。 Block 类包含 getData() 和 setData() 方法,其中包含指定要使用的 block 的确切类型的字节。如果您要查看 ID list在我的世界方 block 中,您会看到一些元素的 ID 后跟一个冒号和另一个数字:

1:1
1:2

代表两种不同类型的 block 。因此,当您从 block 中获取 Material 时,您还需要获取字节数据:

byte data = block.getData();

然后,当您将另一个 block 设置为这种类型时,您需要设置它的数据:

block2.setData(data);

关于java - 我如何阻止这种用石板替换特殊板的能力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31546169/

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