Den_d_y
Ньюби
- Баллы
- 1
- Имя в Minecraft
- Den_d_y
Здравствуйте, форумчане и плагиноделы! Появилась проблема, ну и естесвенно, в гугле ответы не нашёл. Вот суть проблемы: пытаюсь я реализовать исчезновение блока через определённый интервал времени при условии, что рядом маяка нет. Если его нет, то, через 10 секунд блок должен пропадать... Я пытался сделать примерно так:
Ошибка. Окей, пользовался таким образом:
Но,блин, в этом варианте сервер зависает. wait() там просто крашит сервер. Ничего придумать не могу. Может вы поможете?
Код:
@EventHandler
public void onPlayerSetBlock(BlockPlaceEvent e)
{
//Player p = e.getPlayer();
Block b = e.getBlockPlaced();
int x = b.getX();
int y = b.getY();
int z = b.getZ();
Location loc;
boolean Maik = false;
for(int ix = x-20; ix<=x; ix++)
{
for(int iy = y-20; iy<=y; iy++)
{
for(int iz = z-20; iz<=z+20; iz++)
{
loc = new Location(e.getPlayer().getWorld(),ix,iy,iz);
if((loc.getBlock().getType() == Material.BEACON))
{
Maik = true;
}
}
}
}
for(int ix = x; ix<=x+20; ix++)
{
for(int iy = y; iy<=y+20; iy++)
{
for(int iz = z-20; iz<=z+20; iz++)
{
loc = new Location(e.getPlayer().getWorld(),ix,iy,iz);
if((loc.getBlock().getType() == Material.BEACON))
{
Maik = true;
}
}
}
}
for(int ix = x; ix<=x; ix++)
{
for(int iy = y-20; iy<=y; iy++)
{
for(int iz = z-20; iz<=z+20; iz++)
{
loc = new Location(e.getPlayer().getWorld(),ix,iy,iz);
if((loc.getBlock().getType() == Material.BEACON))
{
Maik = true;
}
}
}
}
if(!Maik)
{
if(b.getType() == Material.COBBLESTONE)
{
Bukkit.getScheduler().runTaskLaterAsynchronously(this,()->{try {
wait(10000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} b.setType(Material.AIR);}, 20*10);
}
}
}
Код:
if(!Maik)
{
if(b.getType() == Material.COBBLESTONE)
{
Thread th = new Thread(new BlockDestroyTime(b));//b - блок, который нужно разрушить.
}
package ru.fxgame;
//import org.bukkit.Location;
import java.util.TimerTask;
import org.bukkit.Material;
import org.bukkit.block.*;
public class BlockDestroyTime implements Runnable
{
private Block db;
BlockDestroyTime(Block b)
{
this.db = b;
run();
}
public void BlockDestroy()
{
db.setType(Material.AIR);
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.currentThread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BlockDestroy();
}
}
//import org.bukkit.Location;
import java.util.TimerTask;
import org.bukkit.Material;
import org.bukkit.block.*;
public class BlockDestroyTime implements Runnable
{
private Block db;
BlockDestroyTime(Block b)
{
this.db = b;
run();
}
public void BlockDestroy()
{
db.setType(Material.AIR);
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.currentThread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BlockDestroy();
}
}