下面列出了org.bukkit.block.Sign#getLines ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@EventHandler
public void signInteract(@Nonnull PlayerInteractEvent event) {
if (event.getAction() != Action.RIGHT_CLICK_BLOCK || event.getClickedBlock() == null) {
return;
}
// is block a sign?
if (event.getClickedBlock().getState() instanceof Sign) {
User user = userHandler.getUser(event.getPlayer().getUniqueId()).orElseThrow(() -> new UserException(
"Unknown user " + event.getPlayer().getDisplayName() + "(" + event.getPlayer().getUniqueId() + ")"));
Sign sign = (Sign) event.getClickedBlock().getState();
for (int i = 0; i < sign.getLines().length; i++) {
String line = sign.getLines()[i];
for (String key : getButtons().keySet()) {
if (line.contains("[" + key + "]")) {
//TODO implement perm check
getButtons().get(key).execute(user, event.getClickedBlock());
}
}
}
}
}
public void updateSigns(String fname) {
if (!RedProtect.get().config.configRoot().region_settings.enable_flag_sign) {
return;
}
List<Location> locs = RedProtect.get().config.getSigns(this.getID());
if (locs.size() > 0) {
for (Location loc : locs) {
if (loc.getBlock().getState() instanceof Sign) {
Sign s = (Sign) loc.getBlock().getState();
String[] lines = s.getLines();
if (lines[0].equalsIgnoreCase("[flag]")) {
if (lines[1].equalsIgnoreCase(fname) && this.name.equalsIgnoreCase(ChatColor.stripColor(lines[2]))) {
s.setLine(3, RedProtect.get().lang.get("region.value") + " " + ChatColor.translateAlternateColorCodes('&', RedProtect.get().lang.translBool(getFlagString(fname))));
s.update();
RedProtect.get().config.putSign(this.getID(), loc);
}
} else {
RedProtect.get().config.removeSign(this.getID(), loc);
}
} else {
RedProtect.get().config.removeSign(this.getID(), loc);
}
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void clickHandler(PlayerInteractEvent e){
if(!(e.getAction()==Action.RIGHT_CLICK_BLOCK || e.getAction()==Action.LEFT_CLICK_BLOCK)) return;
Block clickedBlock = e.getClickedBlock();
if(!(clickedBlock.getState() instanceof Sign)) return;
Sign thisSign = (Sign) clickedBlock.getState();
//System.out.println("Clicked sign");
String[] lines = thisSign.getLines();
if(lines.length<3) return;
if(lines[0].equalsIgnoreCase("[SurvivalGames]")) {
e.setCancelled(true);
try{
if(lines[2].equalsIgnoreCase("Auto Assign")){
if(SettingsManager.getInstance().getConfig().getInt("randomjoin-mode", 1) == 0) {
GameManager.getInstance().addPlayerRandomly(e.getPlayer());
}else {
GameManager.getInstance().autoAddPlayer(e.getPlayer());
}
}
else{
String game = lines[2].replace("Arena ", "");
int gameno = Integer.parseInt(game);
GameManager.getInstance().addPlayer(e.getPlayer(), gameno);
}
}catch(Exception ek){}
}
}
/**
* Loads all signs from the file to the instance.
*
* @param instance the instance where the signs are
*/
public void deserializeSigns(InstanceWorld instance) {
try {
ObjectInputStream os = new ObjectInputStream(new FileInputStream(file));
int length = os.readInt();
for (int i = 0; i < length; i++) {
int x = os.readInt();
int y = os.readInt();
int z = os.readInt();
Block block = instance.getWorld().getBlockAt(x, y, z);
BlockState state = block.getState();
if (state instanceof Sign) {
Sign sign = (Sign) state;
String[] lines = sign.getLines();
instance.createDungeonSign(sign, lines);
if (lines[0].equalsIgnoreCase("[lobby]")) {
instance.setLobbyLocation(block.getLocation());
}
}
}
os.close();
} catch (IOException exception) {
exception.printStackTrace();
}
}
@Override
public void registerSign(Block block) {
if (block.getState() instanceof Sign) {
Sign sign = (Sign) block.getState();
String[] lines = sign.getLines();
if (lines[0].equalsIgnoreCase("[lobby]")) {
setLobbyLocation(block.getLocation());
}
}
}
public void poke(Block block) {
if (block.getState() instanceof Sign) {
Sign sign = (Sign) block.getState();
String[] lines = sign.getLines();
if (lines[0].isEmpty() && lines[1].isEmpty() && lines[2].isEmpty() && lines[3].isEmpty()) {
if (linesCopy != null) {
SignChangeEvent event = new SignChangeEvent(block, getPlayer(), linesCopy);
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
sign.setLine(0, event.getLine(0));
sign.setLine(1, event.getLine(1));
sign.setLine(2, event.getLine(2));
sign.setLine(3, event.getLine(3));
sign.update();
}
}
} else {
linesCopy = lines;
MessageUtil.sendMessage(getPlayer(), DMessage.PLAYER_SIGN_COPIED.getMessage());
}
} else {
String info = "" + block.getType();
if (block.getData() != 0) {
info = info + "," + block.getData();
}
MessageUtil.sendMessage(getPlayer(), DMessage.PLAYER_BLOCK_INFO.getMessage(info));
}
}
public static String blockSignString(Sign sign) {
String out = ":";
for (String str : sign.getLines()) {
out += str+",";
}
return out;
}
@Override
public void run() {
for (World world : Bukkit.getServer().getWorlds()) {
final GDClaimManager claimManager = GriefDefenderPlugin.getInstance().dataStore.getClaimWorldManager(world.getUID());
Set<Claim> claimList = claimManager.getWorldClaims();
if (claimList.size() == 0) {
continue;
}
final Iterator<Claim> iterator = new HashSet<>(claimList).iterator();
while (iterator.hasNext()) {
final GDClaim claim = (GDClaim) iterator.next();
final Vector3i pos = claim.getEconomyData() == null ? null : claim.getEconomyData().getRentSignPosition();
if (pos == null || claim.getEconomyData() == null || claim.getEconomyData().getRentEndDate() == null) {
continue;
}
final Sign sign = SignUtil.getSign(world, pos);
if (SignUtil.isRentSign(claim, sign)) {
final String[] lines = sign.getLines();
final String header = lines[0];
if (header == null) {
// Should not happen but just in case
continue;
}
final String timeRemaining = sign.getLine(3);
final Duration duration = Duration.between(Instant.now(), claim.getEconomyData().getRentEndDate());
final long seconds = duration.getSeconds();
if (seconds <= 0) {
if (claim.getEconomyData().isRented()) {
final UUID renterUniqueId = claim.getEconomyData().getRenters().get(0);
final GDPermissionUser renter = PermissionHolderCache.getInstance().getOrCreateUser(renterUniqueId);
if (renter != null && renter.getOnlinePlayer() != null) {
GriefDefenderPlugin.sendMessage(renter.getOnlinePlayer(), MessageCache.getInstance().ECONOMY_CLAIM_RENT_CANCELLED);
}
}
sign.getBlock().setType(Material.AIR);
SignUtil.resetRentData(claim);
claim.getData().save();
continue;
}
final String remainingTime = String.format("%02d:%02d:%02d", duration.toDays(), (seconds % 86400 ) / 3600, (seconds % 3600) / 60);
sign.setLine(3, ChatColor.translateAlternateColorCodes('&', "&6" + remainingTime));
sign.update();
}
}
}
}
/**
* Returns a list of signs that are attached to this shop (QuickShop and blank signs only)
*
* @return a list of signs that are attached to this shop (QuickShop and blank signs only)
*/
@Override
public @NotNull List<Sign> getSigns() {
List<Sign> signs = new ArrayList<>(4);
if (this.getLocation().getWorld() == null) {
return signs;
}
Block[] blocks = new Block[4];
blocks[0] = location.getBlock().getRelative(BlockFace.EAST);
blocks[1] = location.getBlock().getRelative(BlockFace.NORTH);
blocks[2] = location.getBlock().getRelative(BlockFace.SOUTH);
blocks[3] = location.getBlock().getRelative(BlockFace.WEST);
String adminShopHeader =
MsgUtil.getMessageOfflinePlayer("signs.header", null,MsgUtil.getMessageOfflinePlayer(
"admin-shop", Bukkit.getOfflinePlayer(this.getOwner())));
String signHeaderUsername =
MsgUtil.getMessageOfflinePlayer("signs.header", null, this.ownerName(true));
for (Block b : blocks) {
if (b == null) {
Util.debugLog("Null signs in the queue, skipping");
continue;
}
if (!(b.getState() instanceof Sign)) {
continue;
}
if (!isAttached(b)) {
continue;
}
Sign sign = (Sign) b.getState();
String[] lines = sign.getLines();
String header = lines[0];
if (lines[0].isEmpty() && lines[1].isEmpty() && lines[2].isEmpty() && lines[3].isEmpty() ){
signs.add(sign); //NEW SIGN
continue;
}
if (header.contains(adminShopHeader) || header.contains(signHeaderUsername)) {
signs.add(sign);
continue; //TEXT SIGN
}
//Empty or matching the header
}
// if (currentLine.contains(signHeader) || currentLine.isEmpty()) {
// signs.add(sign);
// } else {
// boolean text = false;
// for (String s : sign.getLines()) {
// if (!s.isEmpty()) {
// text = true;
// break;
// }
// }
// if (!text) {
// signs.add(sign);
// }
// }
// }
return signs;
}