Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем DemoNIKman, 1 июл 2015.

  1. Автор темы
    DemoNIKman

    DemoNIKman Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    DemoNIKman
    Как конвентировать блок в табличку? Я смотрю, когда сработает событие Interact на какой-либо блок, и если это - табличка (координаты всех табличек записаны в HashMap) я хочу конвентировать этот блок в нее, чтобы можно было изменять строки этой таблички ( типа: ((Sign)...) или ((SignChangEvent)...) p.s. не знаю, какая из них правильная и есть ли вообще правильная). Как это сделать помогите пожалуйста!
     
  2. Хостинг MineCraft
    <
  3. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    (Sign) block.getState()
     
  4. Автор темы
    DemoNIKman

    DemoNIKman Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    DemoNIKman
    Не меняется сама надпись. Почему? 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));
    }
    }
    }
    }
     
  5. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    sign.update();
     
  6. Автор темы
    DemoNIKman

    DemoNIKman Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    DemoNIKman
    Неа.
    Не робит((((

    @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));
    }
    }
    }
     
  7. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Ну значит я не могу вам помочь.
     
  8. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    update(true)
     
  9. Автор темы
    DemoNIKman

    DemoNIKman Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    DemoNIKman
    nope...
     
  10. leonmark061

    leonmark061 Активный участник Пользователь

    Баллы:
    76
    Код:
            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();
                    }
                }
            }
     
    Последнее редактирование: 2 июл 2015

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