Coding mit Java | Java-basierten APIs

  • Ersteller Ersteller ij9F_i0FaF-d9lrDSDDpDbfo
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
@KingNyuels: Und wo genau soll bei einem simplen Countdown ein Fehler auftreten? Wenn anderweitig ein Fehler auftritt (bspw. in einem anderen Plugin), dann hat das nichts mehr mit dem Countdown zu tun. Also ich sehe daran nun wirklich kein Problem. Außerdem ist ein guter Countdown von sich aus abbrechend, d.h. wenn sein interner Zähler 0 erreicht, beendet er sich automatisch. Wenn nun also tatsächlich das gesamte Plugin außer unserem Countdown hops gehen würde, würde sich auch unser Countdown von alleine beenden. Keine Gefahr, meines Erachtens nach.
 
Ich hab ein Problem mit meinem EntityDamageByEntityEvent. Es kommt andauernd eine vehlermeldung. Ich hab mal
alles aus dem Event genommen und die Fehlermeldung kommt schon wider. Hit ist die Fehlermeldung :


Code:
[16:03:30 ERROR]: Could not pass event EntityDamageByEntityEvent to GameOfPandad
a v0.8
org.bukkit.event.EventException
		at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:320) ~[craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
a:62) ~[craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredLi
stener.java:30) ~[craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
ava:487) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
ava:472) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.callEvent(Craf
tEventFactory.java:99) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.callEntityDama
geEvent(CraftEventFactory.java:403) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-g
b58e277]
		at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.handleEntityDa
mageEvent(CraftEventFactory.java:431) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122
-gb58e277]
		at net.minecraft.server.v1_7_R1.EntityLiving.damageEntity(EntityLiving.j
ava:663) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.EntityHuman.damageEntity(EntityHuman.jav
a:751) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.EntityPlayer.damageEntity(EntityPlayer.j
ava:461) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.EntityHuman.attack(EntityHuman.java:923)
[craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java
:1144) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.PacketPlayInUseEntity.a(SourceFile:55) [
craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.PacketPlayInUseEntity.handle(SourceFile:
10) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:147
) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.ServerConnection.c(ServerConnection.java
:77) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:7
00) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
73) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
62) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
:469) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
17) [craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_7_R1.entity.C
raftPlayer cannot be cast to org.bukkit.entity.Arrow
		at de.ChickenCode.Rush.Entitydamgaebyentity.onPlayerDamagebyingame(Entit
ydamgaebyentity.java:20) ~[?:?]
		at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0
_60]
		at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0
_60]
		at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1
.7.0_60]
		at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_60]
		at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:318) ~[craftbukkit.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
		... 21 more



Bitte helft mir.
Danke schon mal.
MFG
elimenator1999
 
Code:
	@EventHandler
	public void onPlayerDamagebyingame(EntityDamageByEntityEvent e) {
	  
		Player p = (Player)e.getEntity();
		Player killer = (Player)e.getDamager();
		Arrow a = (Arrow) e.getDamager();
	  
	  
		if(Main.status == GameManager.GAME){
			e.setCancelled(true);
		}
	  
	}

Ich hab ja alles rausgenommen wie gesagt und die Fehldermeldung kommt immernoch
.
 
Ich habs gerrausgefunden.

Man kann nicht 2 Damager in einem Event haben so wie es aussieht.
Ich hab jetzt: Arrow a = (Arrow)e.getDamager();
rausgenommen. schon gehts.


Aber jetzt kann ich nicht mehr abfragen ob der Damager ein Pfeil ist. Wie mach ich das jetzt?
Kann mir da jemand helfen?
Mfg
elimenator1999
 
Zuletzt bearbeitet von einem Moderator:
getDamager() gibt dir den Schadensverursacher zurück. Ein Spieler kann ja nicht gleichzeitig ein Pfeil sein, denn das wäre, was dein Code implizieren würde. Außerdem solltest du vor dem jeweiligen Cast erst mittels instanceof überprüfen, ob der Damager überhaupt einem bestimmten Typ zuzuordnen ist. Anhand instanceof müsstest du auch herausfinden können, ob der Damager ein Pfeil ist oder nicht.
 
@elimenator1999 Du musst vorher checken ob der Damager und der Geschadete ( Öhm ja ) überhaupt ein Spieler oder ein Pfeil ist bevor du (Player) bzw. (Arrow) castest.
 
Ich habs gemacht aber es geht trotzdem nicht

hir der code:

Code:
	@EventHandler
	public void onPlayerDamagebyingame(EntityDamageByEntityEvent e) {
	   
		Player p = (Player)e.getEntity();
	   
	   
		if(e.getDamager() instanceof Player){
			Player killer = (Player)e.getDamager();
		if(Main.status == GameManager.GAME){
			if(Main.blue.contains(killer.getName())){
			if(Main.blue.contains(p.getName())){
				e.setCancelled(true);
				}else{		   
					if(Main.red.contains(killer.getName())){
					if(Main.red.contains(p.getName())){
						e.setCancelled(true);
					   
						}else if(Main.blue.contains(killer.getName())){
							if(Main.red.contains(p.getName())){
								e.setCancelled(false);
							}
						}else if(Main.red.contains(killer.getName())){
							if(Main.blue.contains(p.getName())){
								e.setCancelled(false);
							}
						}
					}
				}
			}
		}
			if(e.getDamager() instanceof Snowball){
				if(Main.KITOWNER.contains(p.getName())){
				e.setDamage(9000.0);
				}else{
					e.setDamage(0.0);
				}
			}
		}
	}
 
Ich habs gemacht aber es geht trotzdem nicht

hir der code:

Code:
	@EventHandler
	public void onPlayerDamagebyingame(EntityDamageByEntityEvent e) {
	 
		Player p = (Player)e.getEntity();
	 
	 
		if(e.getDamager() instanceof Player){
			Player killer = (Player)e.getDamager();
		if(Main.status == GameManager.GAME){
			if(Main.blue.contains(killer.getName())){
			if(Main.blue.contains(p.getName())){
				e.setCancelled(true);
				}else{		 
					if(Main.red.contains(killer.getName())){
					if(Main.red.contains(p.getName())){
						e.setCancelled(true);
					 
						}else if(Main.blue.contains(killer.getName())){
							if(Main.red.contains(p.getName())){
								e.setCancelled(false);
							}
						}else if(Main.red.contains(killer.getName())){
							if(Main.blue.contains(p.getName())){
								e.setCancelled(false);
							}
						}
					}
				}
			}
		}
			if(e.getDamager() instanceof Snowball){
				if(Main.KITOWNER.contains(p.getName())){
				e.setDamage(9000.0);
				}else{
					e.setDamage(0.0);
				}
			}
		}
	}


Ok hat sich erledigt :)


Ich hab ja eingestellt das der Schneeball schaden macht macht er aber nicht wisso.
helft mir.
Mfg
eli
 
Ich habs gemacht aber es geht trotzdem nicht

hir der code:

Code:
	@EventHandler
	public void onPlayerDamagebyingame(EntityDamageByEntityEvent e) {
	  
		Player p = (Player)e.getEntity();
	  
	  
		if(e.getDamager() instanceof Player){
			Player killer = (Player)e.getDamager();
		if(Main.status == GameManager.GAME){
			if(Main.blue.contains(killer.getName())){
			if(Main.blue.contains(p.getName())){
				e.setCancelled(true);
				}else{		  
					if(Main.red.contains(killer.getName())){
					if(Main.red.contains(p.getName())){
						e.setCancelled(true);
					  
						}else if(Main.blue.contains(killer.getName())){
							if(Main.red.contains(p.getName())){
								e.setCancelled(false);
							}
						}else if(Main.red.contains(killer.getName())){
							if(Main.blue.contains(p.getName())){
								e.setCancelled(false);
							}
						}
					}
				}
			}
		}
			if(e.getDamager() instanceof Snowball){
				if(Main.KITOWNER.contains(p.getName())){
				e.setDamage(9000.0);
				}else{
					e.setDamage(0.0);
				}
			}
		}
	}
Wenn du den Spieler töten willst, dann Stell die Variable Player auf Damageable, und gib dann aus

e.setDamage(p.getHealth());
 
Ich hätte da noch eine frage wie kann mann abfragen wie viel damage eine spieler einem anderen Spieler macht.
Also das dan im chat des verletzten steht: "Der Spieler elimenator1999 hat dir 2.0 Damage zugefügt." ?

Ich gleube das geht mit dem entitydamagebyentity event.

Könnt ihr mir helfen?
MFG
elimenator1999
 
Ich hätte da noch eine frage wie kann mann abfragen wie viel damage eine spieler einem anderen Spieler macht.
Also das dan im chat des verletzten steht: "Der Spieler elimenator1999 hat dir 2.0 Damage zugefügt." ?

Ich gleube das geht mit dem entitydamagebyentity event.

Könnt ihr mir helfen?
MFG
elimenator1999
PHP:
// Nicht vergessen das Event bei onEnable() zu registrieren
@EventHandler
public void onDamage(EntityDamageByEvent ev) {

	// Wenn 2 spieler sich schaden zufügen
	if(ev.getEntity() instanceof Player && ev.getDamager() instanceof Player) {

	Player player = (Player) ev.getEntity();
	Player damager = (Player) ev.getDamager();
  
	player.sendMessage("Der Player " + damager.getName() + " hat dir " + ev.getDamage() + " zugefügt!"
}
}
Habs nicht getestet, sollte aber funktionieren :)
 
  • Like
Reaktionen: elimenator1999
PHP:
// Nicht vergessen das Event bei onEnable() zu registrieren
@EventHandler
public void onDamage(EntityDamageByEvent ev) {

	// Wenn 2 spieler sich schaden zufügen
	if(ev.getEntity() instanceof Player && ev.getDamager() instanceof Player) {

	Player player = (Player) ev.getEntity();
	Player damager = (Player) ev.getDamager();
  
	player.sendMessage("Der Player " + damager.getName() + " hat dir " + ev.getDamage() + " zugefügt!"
}
}
Habs nicht getestet, sollte aber funktionieren :)
Dem stimme ich zu.
 
  • Like
Reaktionen: riggahCraft
PHP:
// Nicht vergessen das Event bei onEnable() zu registrieren
@EventHandler
public void onDamage(EntityDamageByEvent ev) {

	// Wenn 2 spieler sich schaden zufügen
	if(ev.getEntity() instanceof Player && ev.getDamager() instanceof Player) {

	Player player = (Player) ev.getEntity();
	Player damager = (Player) ev.getDamager();
 
	player.sendMessage("Der Player " + damager.getName() + " hat dir " + ev.getDamage() + " zugefügt!"
}
}
Habs nicht getestet, sollte aber funktionieren :)

Danke
 
Es gibt ja in minecraft item IDs die einen : beinhalten z.b. 4:1! Aber wie kann ich im InventoryClickEvent abfragen ob dies geklickt wurde? ....getTypeId.equals(4:1) geht ja net da ein int keine : behalten kann. Danke im votraus
 
Den genauen Code weiß ich nicht, aber du musst in die If Abfrage ein && einbauen und die DataValue (1) separat abfragen ;)
 
Hi :)
Ich arbeite an einem großen Plugin , bin auch schon fast fertig , aber wie kann ich es machen , dass wenn man /dia eingibt einen diamand bekommt (mit permissions wäre es gut). Des mit equalsIgnoreCase("") und so weiß ich , aber was muss ich machen , dass man Items bekommt xD
~Trouble :)
 
Status
Für weitere Antworten geschlossen.

Soziale Medien

  • X
  • TikTok

Über uns

  • GommeHD.net ist einer der größten Minecraft-Server der Welt. Dir gefällt unser Server? Dann unterstütze uns durch einen Kauf im Shop!
  • Shop