Как реализовать отображение региона в Scoreboard

Алмаз Гараев

Активный участник
Пользователь
Баллы
76
Долго маялся с этим, но никак не получается! Как же все таки это реализовать? Я видел на одном сервере такое отображение региона, на котором вы находитесь в текущий момент в строке Scoreboard.
Нужно создать дополнительную строку после имени заголовка Scoreboard и создать какую то строковую переменную, в которую будет выводится результат String типа вроде функции ShowRegion или иной связанной с этим. Но я не знаю как это реализовать. Подскажите ПЛЗ?
 
Берёшь эвент входа игрока в регион (если такой есть, там ReActions что-то использует) и пишешь регион в скорборд.
UPD. Есть плагин на добавление эвентов, там используют PlayerMoveEvent.
Put-It-Somewhere-Else-Patrick.jpg
 
Последнее редактирование:
Вот мой Scoreboard

package test.main;



import java.sql.Timestamp;
import java.util.UUID;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import net.md_5.bungee.api.ChatColor;

import org.bukkit.Bukkit;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
//import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Score;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
import org.bukkit.scoreboard.Team;
import org.bukkit.util.NumberConversions;

import com.avaje.ebean.annotation.UpdatedTimestamp;
import com.avaje.ebean.validation.Length;
import com.avaje.ebean.validation.NotNull;
import com.avaje.ebean.validation.Pattern;
import com.avaje.ebean.validation.Range;
import com.github.games647.scoreboardstats.config.Settings;



public class Main extends JavaPlugin implements Listener


static String notregion;
static String region;

Scoreboard board;




public void onEnable()
{
saveDefaultConfig();
notregion = getConfig().getString("notregion").replace('&', '§');
region = getConfig().getString("region").replace('&', '§');

Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable(),
20, 20);
Bukkit.getServer().getPluginManager().registerEvents(this, this);






PluginManager pm = getServer().getPluginManager();
pm.registerEvents(this, this);

scoreboard();

}

@SuppressWarnings("deprecation")
public void scoreboard(){

ScoreboardManager manager = Bukkit.getScoreboardManager();
board = manager.getNewScoreboard();
Objective objective = board.registerNewObjective("test", "test2");
objective.setDisplayName(ChatColor.AQUA+"Statistics");
objective.setDisplaySlot(DisplaySlot.SIDEBAR);

Team team = board.registerNewTeam("Team");
team.setDisplayName(ChatColor.RED+"");

int a = Bukkit.getPort();
int b = Bukkit.getMonsterSpawnLimit();
int c = Bukkit.getMaxPlayers();
int d = Bukkit.getViewDistance();
int i = Bukkit.getSpawnRadius();
int k = getMobkills();








Score score = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GOLD + "Port"));
score.setScore(a);


Score score2 = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GOLD + "MonsterSpawnLimit"));
score2.setScore(b);


Score score3 = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GOLD + "MaxPlayers"));
score3.setScore(c);


Score score4 = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GOLD + "ViewDistance"));
score4.setScore(d);


Score score5 = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GOLD + "SpawnRadius"));
score5.setScore(i);


Score score6 = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GOLD + "IdleTimeout"));
score6.setScore(k);

}

@EventHandler
public void onJoin(PlayerJoinEvent e){
e.getPlayer().setScoreboard(board);





А вот собственно функция региона в отдельном классе

package test.main;

import java.lang.reflect.InvocationTargetException;

import org.bukkit.Location;
import org.bukkit.entity.Player;

import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.WrappedChatComponent;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldedit.Vector;



@SuppressWarnings("unused")
public class Utils
{

public static String getRegion(Location l)
{
WorldGuardPlugin wgp = WorldGuardPlugin.inst();
RegionManager regionManager = wgp.getRegionManager(l.getWorld());
ApplicableRegionSet set = regionManager.getApplicableRegions(l);

for (ProtectedRegion pr : set.getRegions())
return pr.getId();

return Main.notregion;
}

public static void sendAction(Player p, String msg)
{
PacketContainer chat = new PacketContainer(PacketType.Play.Server.CHAT);
chat.getChatComponents().write(0,
WrappedChatComponent.fromJson("{\"text\": \"" + msg + "\"}"));
chat.getBytes().write(0, (byte) 2);
try
{
ProtocolLibrary.getProtocolManager().sendServerPacket(p, chat);
}
catch (InvocationTargetException e)
{
throw new IllegalStateException("Unable to send packet " + chat, e);
}
}
}




А вот её Эвент в отдельном классе


package test.main;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;


public class Runnable implements java.lang.Runnable
{

@Override
public void run()
{
for(Player p : Bukkit.getOnlinePlayers())
Utils.sendAction(p, Main.region.replace("{REGION}", Utils.getRegion(p.getLocation())));



}

}
 
Что б тебе руки по отбивало.Я даже пытаться читать это не буду
 
Назад
Верх