Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Как конвентировать блок в табличку?

DemoNIKman

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
DemoNIKman
Как конвентировать блок в табличку? Я смотрю, когда сработает событие Interact на какой-либо блок, и если это - табличка (координаты всех табличек записаны в HashMap) я хочу конвентировать этот блок в нее, чтобы можно было изменять строки этой таблички ( типа: ((Sign)...) или ((SignChangEvent)...) p.s. не знаю, какая из них правильная и есть ли вообще правильная). Как это сделать помогите пожалуйста!
 
Не меняется сама надпись. Почему? p.s. Смотреть onPlayerInteract(PlayerInteractEvent e)
p.s. При первом нажатии на нужную мне табличку, в чат выводит:
1
1
0/20

package Main;

import java.util.ArrayList;
import java.util.HashMap;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.block.Sign;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class PvpArena_main extends JavaPlugin implements Listener {

public static String PlayerName;
public static String ArenaName;
public static boolean isDone = true;
public static String isntDoneSing;
public static ArrayList<String> ArenaNames = new ArrayList<String>();
public static HashMap<Location, String> Signs = new HashMap<Location, String>();
public static HashMap<String, Location> Sign2 = new HashMap<String, Location>();
public static HashMap<String, Integer> PlayersOnArena = new HashMap<String, Integer>();
public static HashMap<String, Location> WaitingRooms = new HashMap<String, Location>();
public static HashMap<String, Location> Team1 = new HashMap<String, Location>();
public static HashMap<String, Location> Team2 = new HashMap<String, Location>();
public static int count;
public static int x;
public static int y;
public static int z;

public void onEnable()
{
Bukkit.getPluginManager().registerEvents(this, this);
}

public void onDisable()
{

}

@EventHandler
public void onSignChenge(SignChangeEvent e)
{
if(e.getLine(0).equalsIgnoreCase("PvpArena"))
{
if(e.getPlayer().isOp())
{
if(isDone == false)
{
e.setCancelled(true);
e.getBlock().breakNaturally(); //true
e.getPlayer().sendMessage(ChatColor.RED + "Прошлая табличка еще не закончина");
}else
{
if(!ArenaNames.contains(e.getLine(1)))
{
isDone = false; //Сделать isDone = true;
isntDoneSing = e.getLine(1);
ArenaName = e.getLine(1);
ArenaNames.add(e.getLine(1));
PlayersOnArena.put(e.getLine(1), 0);
PlayerName = e.getPlayer().getName();
Signs.put(e.getBlock().getLocation(), e.getLine(1));
Sign2.put(e.getLine(1), e.getBlock().getLocation());

e.setLine(0, ChatColor.GREEN + "[JOIN]");
e.setLine(2, PlayersOnArena.get(e.getLine(1)).intValue() + "/20"); //Это число надо обноылять при каждом interact'e на табл из HashMap
e.setLine(1, ChatColor.BOLD + e.getLine(1) + "");
e.setLine(3, ChatColor.RED + "Still edit"); //Тут возможно что-то еще будет

e.getPlayer().sendMessage(ChatColor.GREEN + "Теперь введите: PvpArena " + ChatColor.BLUE + "LocWaitRoom LocGameRoomTeam1 LocGameRoomTeam2");
}else
{
e.setCancelled(true);
e.getBlock().breakNaturally(); //true
e.getPlayer().sendMessage(ChatColor.RED + "Арена с таким названием уже существует");
}
}
}
}
}

@EventHandler
public void onPlayerChat(PlayerChatEvent e)
{
if(e.getPlayer().getName() == PlayerName)
{
if(e.getMessage().startsWith("PvpArena"))
{
String locs[] = e.getMessage().split(" ");
if(locs.length == 10)
{
x = Integer.parseInt(locs[1]);
y = Integer.parseInt(locs[2]);
z = Integer.parseInt(locs[3]);
WaitingRooms.put(ArenaName, Bukkit.getWorld(e.getPlayer().getWorld().getName()).getBlockAt(x, y, z).getLocation());
x = Integer.parseInt(locs[4]);
y = Integer.parseInt(locs[5]);
z = Integer.parseInt(locs[6]);
Team1.put(ArenaName, Bukkit.getWorld(e.getPlayer().getWorld().getName()).getBlockAt(x, y, z).getLocation());
x = Integer.parseInt(locs[7]);
y = Integer.parseInt(locs[8]);
z = Integer.parseInt(locs[9]);
Team2.put(ArenaName, Bukkit.getWorld(e.getPlayer().getWorld().getName()).getBlockAt(x, y, z).getLocation());

e.getPlayer().sendMessage(ChatColor.GREEN + "Сделано...");
isDone = true;
isntDoneSing = "";
}else
{
e.getPlayer().sendMessage(ChatColor.RED + "Некорректно");
}
e.setCancelled(true);
}
}
}

@EventHandler
public void onBlockBreak(BlockBreakEvent e)
{
if(e.getPlayer().isOp())
{
if(Signs.containsKey(e.getBlock().getLocation()))
{
ArenaNames.remove(Signs.get(e.getBlock().getLocation()).intern());
if(PlayersOnArena.containsKey(Signs.get(e.getBlock().getLocation()).intern()))
{
PlayersOnArena.remove(Signs.get(e.getBlock().getLocation()).intern());
}
if(WaitingRooms.containsKey(Signs.get(e.getBlock().getLocation()).intern()))
{
WaitingRooms.remove(Signs.get(e.getBlock().getLocation()).intern());
}
if(Team1.containsKey(Signs.get(e.getBlock().getLocation()).intern()))
{
Team1.remove(Signs.get(e.getBlock().getLocation()).intern());
}
if(Team2.containsKey(Signs.get(e.getBlock().getLocation()).intern()))
{
Team2.remove(Signs.get(e.getBlock().getLocation()).intern());
}
if(Signs.get(e.getBlock().getLocation()).intern() == isntDoneSing)
{
isDone = true;
}
isntDoneSing = "";
Signs.remove(e.getBlock().getLocation());
e.getPlayer().sendMessage(isDone + "");
}
}
}

@EventHandler
public void onPlayerInteract(PlayerInteractEvent e)
{
if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK))
{
if(Signs.containsKey(e.getClickedBlock().getLocation()))
{
e.getPlayer().teleport(WaitingRooms.get(Signs.get(e.getClickedBlock().getLocation()).intern()).clone());
count = PlayersOnArena.get(Signs.get(e.getClickedBlock().getLocation()).intern()).intValue();
PlayersOnArena.remove(Signs.get(e.getClickedBlock().getLocation()).intern());
count++;
PlayersOnArena.put(Signs.get(e.getClickedBlock().getLocation()).intern(), count);
((Sign)e.getClickedBlock().getState()).setLine(2, count + "/20");
e.getPlayer().sendMessage(PlayersOnArena.get(Signs.get(e.getClickedBlock().getLocation()).intern()).intValue() + "");
e.getPlayer().sendMessage(PlayersOnArena.get(Signs.get(e.getClickedBlock().getLocation()).intern()).intValue() + "");
e.getPlayer().sendMessage("" + ((Sign)e.getClickedBlock().getState()).getLine(2));
}
}
}
}
 
Неа.
Не робит((((

@EventHandler
public void onPlayerInteract(PlayerInteractEvent e)
{
if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK))
{
if(Signs.containsKey(e.getClickedBlock().getLocation()))
{
e.getPlayer().teleport(WaitingRooms.get(Signs.get(e.getClickedBlock().getLocation()).intern()).clone());
count = PlayersOnArena.get(Signs.get(e.getClickedBlock().getLocation()).intern()).intValue();
PlayersOnArena.remove(Signs.get(e.getClickedBlock().getLocation()).intern());
count++;
PlayersOnArena.put(Signs.get(e.getClickedBlock().getLocation()).intern(), count);
((Sign)e.getClickedBlock().getState()).setLine(2, count + "/20");
((Sign)e.getClickedBlock().getState()).update();
e.getPlayer().sendMessage(PlayersOnArena.get(Signs.get(e.getClickedBlock().getLocation()).intern()).intValue() + "");
e.getPlayer().sendMessage(PlayersOnArena.get(Signs.get(e.getClickedBlock().getLocation()).intern()).intValue() + "");
e.getPlayer().sendMessage("" + ((Sign)e.getClickedBlock().getState()).getLine(2));
}
}
}
 
Неа.
Не робит((((

@EventHandler
public void onPlayerInteract(PlayerInteractEvent e)
{
if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK))
{
if(Signs.containsKey(e.getClickedBlock().getLocation()))
{
e.getPlayer().teleport(WaitingRooms.get(Signs.get(e.getClickedBlock().getLocation()).intern()).clone());
count = PlayersOnArena.get(Signs.get(e.getClickedBlock().getLocation()).intern()).intValue();
PlayersOnArena.remove(Signs.get(e.getClickedBlock().getLocation()).intern());
count++;
PlayersOnArena.put(Signs.get(e.getClickedBlock().getLocation()).intern(), count);
((Sign)e.getClickedBlock().getState()).setLine(2, count + "/20");
((Sign)e.getClickedBlock().getState()).update();
e.getPlayer().sendMessage(PlayersOnArena.get(Signs.get(e.getClickedBlock().getLocation()).intern()).intValue() + "");
e.getPlayer().sendMessage(PlayersOnArena.get(Signs.get(e.getClickedBlock().getLocation()).intern()).intValue() + "");
e.getPlayer().sendMessage("" + ((Sign)e.getClickedBlock().getState()).getLine(2));
}
}
}
update(true)
 
Код:
        if(e.getAction() == Action.RIGHT_CLICK_BLOCK)
        {
            Block block = e.getClickedBlock();

            if(block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN_POST || block.getType() == Material.SIGN || block instanceof Sign)
            {
                if(Signs.containsKey(block.getLocation()))
                {
                    Sign sign = (Sign)block.getState();
                    ...

                    sign.update();
                }
            }
        }
 
Последнее редактирование:

Поделиться этой страницей

Назад
Верх