2015-05-31 3 views
-1

Как бы скопировать то, что введено в строке 1 знака? он должен быть открытым или закрытым. Я хочу переместить его в строку 3. линии начинаются с 0 и переходят к 3. поэтому, если кто-то вошел в открытую во второй строке, тогда он будет отображаться как открытый на последней строкеКопирование одной строки из одного места в другое на знаке

package me.mcmatt.shops; 

import java.util.Arrays; 

import org.bukkit.ChatColor; 
import org.bukkit.Material; 
import org.bukkit.Sound; 
import org.bukkit.block.Block; 
import org.bukkit.block.Sign; 
import org.bukkit.entity.Player; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.Listener; 
import org.bukkit.event.block.Action; 
import org.bukkit.event.block.SignChangeEvent; 
import org.bukkit.event.player.PlayerInteractEvent; 

public class Signs implements Listener { 


    @ 
    EventHandler 
    public void onSignChange(SignChangeEvent e) { 
    if (e.getLine(0).equalsIgnoreCase("[shop]")) { 
     Block attached = e.getBlock().getRelative(0, -1, 0); 
     String name = e.getPlayer().getDisplayName(); 
     if (!(attached.getType() == Material.CHEST)) 
     e.getPlayer().sendMessage(ChatColor.RED + "Please place the shop on a chest!"); 
     else { 
     if (!e.getPlayer().hasPermission("shops.create")) 
      e.getPlayer().sendMessage(ChatColor.RED + "You don't have permission to create a shop! (shops.create)"); 
     else { 
      if (!Arrays.asList("open", "closed").contains(e.getLine(1).toLowerCase())) { 
      e.getPlayer().sendMessage(ChatColor.RED + "You must specify if the shop is open or closed on the second line!"); 
      } else { 
      Sign o = (Sign) e.getBlock().getState(); 
      e.setLine(0, "§9[Shop]"); 
      e.setLine(1, "§4" + name + "'s"); 
      e.setLine(2, "§4Shop"); 
      e.setLine(3, o.getLine(1)); 
      e.getPlayer().sendMessage(ChatColor.GREEN + "Shop Created!"); 
      e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.LEVEL_UP, 10, 10); 
      } 
     } 
     } 
    } 
    } 

    @ 
    EventHandler 
    public void onPlayerInteract(PlayerInteractEvent e) { 
    if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { 
     Player p = e.getPlayer(); 
     Block b = e.getClickedBlock(); 
     Material m = b.getType(); 
     if (!(m == Material.SIGN_POST)) { 
     return; 
     } else { 
     Sign sign = (Sign) e.getClickedBlock().getState(); 
     if ((sign.getLine(0).equalsIgnoreCase("§9[Shop]"))) { 
      p.sendMessage("I right clicked the sign!"); 
     } 
     } 
    } 
    } 
} 

ответ

1

Просто проверьте линии быть установлены, и установить линию 3 с соответствующим значением:

//on SignChangeEvent 'event' 
event.setLine(3, event.getLine(1)); 

Как вы сделали в вашем вопросе, так что проверить логику остальной части коды, чтобы убедиться, что будет выполняться правильно.

Лично я не стал бы пытаться установить чью-то вход, как выход непосредственно, а я бы то, что они дали мне, а затем использовать его соответствующим образом:

boolean closed = true; 
if ("open".equalsIgnoreCase(event.getLine(1)) { 
    closed = false; 
} 
String lineThree = closed ? "Closed" : "Open"; 
Смежные вопросы