Und wenn man es richtig darauf anlegt, dann könnte man immerhoch ein eigenes Todesevent durch die Eventbus schicken und somit alle Plugins dazu bringen, ihren Code durch den Spieler auszuführen.
Das DeathEvent zu umgehen wäre extrems unschön, da es Probleme in anderen Plugins verursachen kann, z.B. wenn auf dem Server ein Plugin läuft das Kills zählt wird dies dann nicht mehr funktionieren, da der Spieler technisch gesehen ja nie stirbt.
Mfg
@EventHandler
public void PlayerDamgEvent(EntityDamageEvent event) {
if(!(event.getEntity() instanceof Player)) {
return;
}
Player p = (Player)event.getEntity();
if((p.getHealth() - event.getDamage()) < 1) {
p.setHealth(20);
event.setCancelled(true);
}
}
Packet205ClientCommand packet = new Packet205ClientCommand();
packet.a = 1;
((CraftPlayer) p).getHandle().playerConnection.a(packet);
Das geht nicht. Das ''Du bist gestorben'' -Menü kann man nicht steuern, da müsstest du schon einen Clienten verändern.
Code:@EventHandler public void PlayerDamgEvent(EntityDamageEvent event) { if(!(event.getEntity() instanceof Player)) { return; } Player p = (Player)event.getEntity(); if((p.getHealth() - event.getDamage()) < 1) { p.setHealth(20); event.setCancelled(true); } }
@EventHandler
public void PlayerDamgEvent(EntityDamageEvent event) {
p.setHealth(20);
}
@EventHandler
public void PlayerDamgEvent(EntityDamageEvent event) {
p.setHealth(20);
Location spawn = getServer().getWorld(Name der Welt).getSpawnLocation();
p.teleport(spawn);
}
Wenn ein Spieler noch 4 Leben hat, also 2 "Herzen", und er mit einem Diamantschwert, dass bekanntermaßen 7 Schaden, also 3,5 "Herzen", geschlagen wird, wäre er ja nach deinem Code Tod. Das Problem ist halt, wenn er eine Rüstung trägt, zum Beispiel eine Diamantrüstung, die 80% allen Schadens absorbiert, würde er nicht sterben, aber darauf nimmt dein Code keine Rücksicht. Zudem würde der getötete Spieler weiterhin an seiner alten Stelle sein und nicht am Multiverse-Core Spawn.
Meine Idee:
Code:@EventHandler public void PlayerDamgEvent(EntityDamageEvent event) { p.setHealth(20); }
Das alleine Funktioniert schon. Dabei ist nur das Problem, dass der Spieler dann an der alten Position steht.
Also sollte der Code wie folgt aussehen:
Code:@EventHandler public void PlayerDamgEvent(EntityDamageEvent event) { [COLOR="#FF0000"]p[/COLOR].setHealth(20); Location spawn = getServer().getWorld(Name der Welt).getSpawnLocation(); [COLOR="#FF0000"]p[/COLOR].teleport(spawn); }
P.S: Könnte sein, dass sich ein paar Fehler eingeschlichen haben ^^
@Chrisliebaer
"Lustige" Dinge habe ich nicht erlebt.
Scary_Hutman
Packet205ClientCommand packet = new Packet205ClientCommand();
packet.a = 1;
((CraftPlayer) p).getHandle().playerConnection.a(packet);
Bukkit.getScheduler().scheduleSyncDelayedTask(SuperCraftBros.getInstance(), new Runnable() {
@Override
public void run() {
Packet205ClientCommand packet = new Packet205ClientCommand();
packet.a = 1;
((CraftPlayer) p).getHandle().playerConnection.a(packet);
}
}, 20L); //Hier kann man die verzögerung in Ticks (20 Ticks = 1 sec) angeben.