• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Plugin gesucht!

J-R-L

Vorarbeiter
Registriert
4 Januar 2013
Beiträge
210
Diamanten
300
Minecraft
JoniTaki
Hey Leute
Ich suche ein Plugin mit dem Man machen kann das wenn man stirbt nicht auf Wiederbeleben Klicken muss sondern direkt am Multiverse-Core Spawn spawnt.
 
C

Chrisliebaer

Guest
Klar kann man. Das Fenster beim Client bekommt man zwar nicht weg, jedenfalls nicht so weit ich weiß. Man kann aber einfach gar kein DeathEvent schicken. Die Frage ist natürlich, was du machen willst, aber grundsätzlich spricht nichts dagegen, dass man z.B. das Todesevent abfängt und den Spieler mit voller HP an den Spawn schickt. Das Inventar kann man natürlich trozdem leeren. 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.

Ob es dazu nun auch ein Plugin gibt, ist eine andere Frage...

Edit: Das Todesevent kann man nicht canceln. Dann müsste man halt das letzte Schadensevent abfangen.
 
Zuletzt bearbeitet von einem Moderator:

Festus

Minecrafter
Registriert
28 Juli 2012
Beiträge
6
Diamanten
0
Ich kenne zwar kein Plugin das das macht, aber es ist möglich den Todesscreen überspringen zu lassen, indem man Packets verwendet, wie auf einigen großen Servern auch zu sehen ist. 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
 
C

Chrisliebaer

Guest
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

Ansonsten: Ja, wenn man die Packete abfängt und dann entsprechend sich etwas darum baut, dann ginge das natürlich auch. Das mit den Packeten ist aber schonmal deutlich komplizierter, als das Abfangen der Schadensevents. Es ging mir eigentlich auch eher um das Widerlegen der aussagen, dass es nicht möglich sei.
 
Zuletzt bearbeitet von einem Moderator:

ScaryHutman

Vorarbeiter
Registriert
1 Januar 2013
Beiträge
205
Diamanten
0
Minecraft
Scary_Hutman
Um das letzte Schaden-Event abzubrechen kannst du folgenden Code verwenden:

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);
			
		}
	}
Du müsstest ihn nur ein wenig anpassen. ;)

Scary_Hutman
 

ThunderFlo

Kuhfänger
Registriert
22 September 2013
Beiträge
53
Diamanten
0
Das geht nicht. Das ''Du bist gestorben'' -Menü kann man nicht steuern, da müsstest du schon einen Clienten verändern.

Natürlic geht das :) Ich würde dir jetzt eine Server-Ip hierhinschreiben, aber da das nicht erlaubt ist mache ich es nicht. Vllt. kennst du ja, aber den Spielmodus FalldownPvP. Könntest du ja evtl. auch mal googeln dann findest du schon denn Server und dann kannste das Spiel mal spieeln udn du wirst sehen es geht ;-D
 

tobi20

Minecrafter
Registriert
7 Januar 2013
Beiträge
2
Diamanten
0
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);
			
		}
	}

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) {
			p.setHealth(20);
                        Location spawn = getServer().getWorld(Name der Welt).getSpawnLocation();
                        p.teleport(spawn);
	}

P.S: Könnte sein, dass sich ein paar Fehler eingeschlichen haben ^^
 

ScaryHutman

Vorarbeiter
Registriert
1 Januar 2013
Beiträge
205
Diamanten
0
Minecraft
Scary_Hutman
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 ^^

Moment! Wenn der Spieler Schaden erhält, wird er zurück an den Spawn teleportiert? Außerdem habe ich geschrieben, dass er den Code anpassen muss.

@Chrisliebaer
"Lustige" Dinge habe ich nicht erlebt.

Scary_Hutman
 
Zuletzt bearbeitet:

Festus

Minecrafter
Registriert
28 Juli 2012
Beiträge
6
Diamanten
0
Alle Ansätzte hier sind ja ganz schön, werden aber jedes Plugin das das PlayerDeathEvent benutzt inkompatibel zu dem erstelltem Plugin machen. Das ganze liegt einfach daran, dass , indem man dem Spieler kurz bevor dieser stirbt wieder volles live gibt, das PlayerDeathEvent nie ausgelöst wird. Das einfachst ist, man löst dies über packets, indem man diesen Code in das PlayerDeathEvent packt:
Code:
Packet205ClientCommand packet = new Packet205ClientCommand();
                     packet.a = 1;                      
((CraftPlayer) p).getHandle().playerConnection.a(packet);
Um das ganze noch etwa schöner zu machen könnte man das ganze etwas verzögern, mithilfe des Bukkitscheduler. Das sähe dann so aus:
Code:
 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.
Mit dem Code würde der Spieler das Todesfenster genau 1 sec lang sehen bevor der respawn ausgelöst wird.

Mfg
 
Oben