Siemka pomógłby mi ktoś przerobić działający plugin
package pl.kangur88.dzikiepvp;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.FileConfigurationOptions;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
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.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
public class Main
extends JavaPlugin
implements Listener
{
private Scoreboard board;
FileConfiguration config = getConfig();
public void onEnable()
{
this.board = Bukkit.getScoreboardManager().getMainScoreboard();
startHealthScore();
Bukkit.getPluginManager().registerEvents(this, this);
loadConfig();
}
public void onDisable()
{
stopHealthScore();
}
private void loadConfig()
{
FileConfiguration cfg = getConfig();
cfg.options().copyDefaults(true);
saveConfig();
}
private void startHealthScore()
{
if (this.board.getObjective("health") != null) {
this.board.getObjective("health").unregister();
}
Objective o = this.board.registerNewObjective("health", "health", "health");
o.setDisplaySlot(DisplaySlot.BELOW_NAME);
o.setDisplayName("hp");
}
private void stopHealthScore()
{
Set<Objective> sidebar = this.board.getObjectives();
for (Objective o : sidebar) {
if (o.getName().contains("health")) {
o.unregister();
}
}
}
@EventHandler
public void PlayerJoin(PlayerJoinEvent e)
{
Player p = e.getPlayer();
p.sendMessage("Witaj na serwerze u kangura");
}
@EventHandler
public void damage(EntityDamageByEntityEvent e)
{
for (Player player : )
{
player.sendMessage("It works! on damage");
player.setScoreboard(this.board);
}
}
}
Chciałbym aby po zmianie w linii 45 "health" na "dummy" można było ustawić własne, ostylowane score w jakimś evencie np. on damage, np:
wartość jakiejś zmiennej
Score belowName = objectiveBelowName.getScore(player);
belowName.setScore(8);
Znalazłem w internecie 2 wytłumaczenia jak to zrobić ale mimo męczenia się 1.5h nie udało się nic zdziałać i wróciłem do startowego kodu który działał
Nie wiem jak stworzyć własną tablicę dla każdego gracza z osobna bo w moim kodzie chyba każdy korzysta ze wspólnej
Spoiler
Create a fake scoreboard per-player:
Scoreboard sb = Bukkit.getScoreboardManager().getNewScoreboard();
Then register a dummy objective, and set it to the sidebar display slot:
Objective objective = sb.registerNewObjective("My Sidebar", "dummy");
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
Add your data to the scoreboard:
objective.getScore("something").setScore(42);
objective.getScore("other_stuff").setScore(5);
Then send it to the player(s) that you want to see the scoreboard:
player.setScoreboard(sb);
I would recommend not creating the scoreboard each time you want to change the information, just create one per player, and then update the scoreboard for that player.
Pytanie
pringles18 2
Siemka pomógłby mi ktoś przerobić działający plugin
package pl.kangur88.dzikiepvp; import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfigurationOptions; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; 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.Scoreboard; import org.bukkit.scoreboard.ScoreboardManager; public class Main extends JavaPlugin implements Listener { private Scoreboard board; FileConfiguration config = getConfig(); public void onEnable() { this.board = Bukkit.getScoreboardManager().getMainScoreboard(); startHealthScore(); Bukkit.getPluginManager().registerEvents(this, this); loadConfig(); } public void onDisable() { stopHealthScore(); } private void loadConfig() { FileConfiguration cfg = getConfig(); cfg.options().copyDefaults(true); saveConfig(); } private void startHealthScore() { if (this.board.getObjective("health") != null) { this.board.getObjective("health").unregister(); } Objective o = this.board.registerNewObjective("health", "health", "health"); o.setDisplaySlot(DisplaySlot.BELOW_NAME); o.setDisplayName("hp"); } private void stopHealthScore() { Set<Objective> sidebar = this.board.getObjectives(); for (Objective o : sidebar) { if (o.getName().contains("health")) { o.unregister(); } } } @EventHandler public void PlayerJoin(PlayerJoinEvent e) { Player p = e.getPlayer(); p.sendMessage("Witaj na serwerze u kangura"); } @EventHandler public void damage(EntityDamageByEntityEvent e) { for (Player player : ) { player.sendMessage("It works! on damage"); player.setScoreboard(this.board); } } } Chciałbym aby po zmianie w linii 45 "health" na "dummy" można było ustawić własne, ostylowane score w jakimś evencie np. on damage, np: wartość jakiejś zmiennej Score belowName = objectiveBelowName.getScore(player); belowName.setScore(8);Znalazłem w internecie 2 wytłumaczenia jak to zrobić ale mimo męczenia się 1.5h nie udało się nic zdziałać i wróciłem do startowego kodu który działał
Nie wiem jak stworzyć własną tablicę dla każdego gracza z osobna bo w moim kodzie chyba każdy korzysta ze wspólnej
oraz drugi: https://www.spigotmc.org/threads/change-below-name-scoreboard-score-number.92715/
z góry dzięki jakby ktoś pomógł bo męczę się już 3 dzień najpierw 2 dni w skripcie teraz 1 dzień w pluginie
Edytowane przez xNightPower_mozna usunac
Przywracam usuniętą treść.
Odnośnik do komentarza
https://skript.pl/temat/44258-przerobienie-pluginu/Udostępnij na innych stronach
1 odpowiedź na to pytanie
Rekomendowane odpowiedzi