Ich mache ein Spigot-Plugin (Version 1.8.8) mit einer Funktion, von der ich weiß, dass sie funktioniert, weil sie fehlerfrei über meinen Befehl ausgelöst wird. Wenn ich es jedoch am Ende eines PlayerExpChangeEvents anrufe, scheint es so, als ob vanilla levelling den Balken außer Kraft setzt und es so viel höher geht, wie es sollte. Wenn der Befehl/die Funktion ausgeführt wird, nachdem dies passiert ist, wird der Balken wieder so angezeigt, wie er sein soll. Ich habe versucht, die Priorität meines Ereignisses auf höchste (und wenn das nicht funktioniert, auf niedrigste) zu setzen, aber egal, was meine Funktion scheint vollständig ignoriert zu werden, wenn innerhalb des Ereignisses aufgerufen. HierSpigot - Ein Teil meines PlayerExpChangeEvent wird von Vanille überschrieben
ist ein Code:
@EventHandler(priority=EventPriority.HIGHEST)
public void onXpGain(PlayerExpChangeEvent event)
{
// Load custom levels from config
ArrayList<String> levelList = new ArrayList<String>(plugin.getConfig().getStringList("levels"));
if (!((String)levelList.get(0)).equals("none"))
{
Player player = event.getPlayer();
Iterator<String> var4 = levelList.iterator();
while (var4.hasNext())
{
String s = (String)var4.next();
String[] splits = s.split(" ");
int levelCompare = Integer.parseInt(splits[0]);
int playerLvl = player.getLevel();
// Detect if on correct tier, else continue iteration
if (playerLvl == levelCompare - 1)
{
// Calculate the player's new XP amount
int totalXp = player.getTotalExperience() + event.getAmount();
player.setTotalExperience(totalXp);
updateBar(event.getPlayer()); // <-- THIS IS THE FUNCTION
return;
}
}
// At max level
player.setTotalExperience(player.getTotalExperience() + event.getAmount());
player.setLevel(getHighestLevel(levelList));
player.setExp(1.0f);
}
}
Und hier ist die Funktion selbst. Beachten Sie, dass es funktioniert, wenn es durch einen Befehl und nicht durch ein Ereignis aufgerufen wird. Es dient dazu, die Gesamt-EP des Spielers zu verwenden, um die Stufe und den Balken einzustellen. Weder im Ereignis richtig eingestellt noch es umfasst stattdessen Vanille-Nivellierung.
Der Befehl, bei dem die Funktion ordnungsgemäß funktioniert, ist ein einfacher Aufruf der Funktion und muss hier nicht erwähnt werden. Weiß jemand, wie ich mein Ereignis dazu bringen kann, den Gewinn von Vanille XP aufzuheben? Das Update funktioniert über den Befehl, nur nicht natürliche XP-Verstärkung. Es ist bereits bestätigt, dass das Event ausgelöst wird, da der Rest des Events den internen XP-Wert ändert, aber die visuellen Effekte werden von Vanille überschrieben. Kann jemand helfen? Vielen Dank.
gewonnen setzen Sie das Ereignis so stornieren dass eine Veränderung nicht passiert, bevor Sie den Rest erledigen, vielleicht ist das genug – Kerooker
@Kerooker Die Veranstaltung abbrechen? Das klingt, als ob ich das brauche, aber was ist das? (Vielleicht geben Sie es in einer Antwort, damit ich Ihre Antwort akzeptieren kann) – hjk321
@Kerooker Das PlayerExpChangeEvent hat keine .setcancelled() -Methode. – hjk321