Minecraft 1.8.9 Java Plugin/Attack Damage senken

06/30/2020 08:17 ProDielerNR(1)#1
Hey alle zusammen, ich arbeite momentan wie ihr villt schon von meinem davoriegen Beiträgen merkt wieder mit java plugins an etwas und komme auch gut zurecht, bis auf an einer stelle und mir erschließt einfach nicht wie ich es umsetzen kann um an meinem ziel ran zu kommen, hab schon echt viel versucht und da ich nur scheitere habe ich gehofft das ihr mir villt dabei helfen könntet.

Worum es geht;
Ich möchte gerne den Standard Attackdamge von einem Holtzschwert von +4 auf +1 senken weiß leider jedoch nicht wie das geht.
arbeiten tue ich das alles in dem PlayerItemDamgeEvent (ich weiß das ergibt keinen sinn für außenstehende aber es ist wichtig das es dort passiert)
Ich hab bereits so programmiert das die Durability von einem bestimmten holtzschwert was einen bestimmten namen hat kein schaden mehr erleidet und auf eine bestimmte durability wert stehen bleibt.
nun will ich aber auch das es den attack damage von +4 nur noch auf +1 beträgt, wie kann ich das umsetzen?
event.setDamage((int)1);
funktioniert da leider nicht, ich gehe davon aus das er das item pfard braucht sprich
event.getItem() (Hier code für dmg)
oder so ähnlich :?

MFG
ProDielerNR(1)

hab es nochmal mit einem int und einem Amount probiert hat aber leider auch nicht funktioniert.

Code:
int dmg = 1;
        	  event.getItem().setAmount(dmg);
            event.setDamage(event.getItem().getAmount())
06/30/2020 17:31 ComputerBaer#2
Für den Schaden am Spieler/Gegner bist du im falschen Event, da veränderst du nur wie viel Schaden das Item nehmen soll.

Für das was du vor hast, musst du das EntityDamageByEntityEvent verwenden. Da kannst du dir dann ansehen welches Item der "Damager" in der Hand hat und wenn es ein Holzschwert ist den Schaden ändern.
06/30/2020 20:08 ProDielerNR(1)#3
das ist ja mal umstendlich :?
nagut ich werde es mal versuchen :)

in der event methode habe ich leider probleme mit dem code
Code:
 [MENTION=555807]event[/MENTION]Handler
	public void Schwerterdmg (EntityDamageByEntityEvent event) {
		if (event.getItem().getType() != Material.WOOD_SWORD) {

			   return;
			    }
	        if(event.getPlayer() instanceof Entity) {
			

	          if(event.getItem().hasItemMeta()){
	        	   if(event.getItem().getItemMeta().hasDisplayName()){
	          if(event.getItem().getItemMeta().getDisplayName().equalsIgnoreCase("Schwert1")){
	        	  
	          }
	        	   }
	          }
	        }
	}
wie muss ich das den dann umschreiben?
06/30/2020 20:23 ComputerBaer#4
Das ist jetzt hier geschrieben, könnten also noch kleine Fehler drin sein
Code:
    public void Schwerterdmg (EntityDamageByEntityEvent event) {
        if(!(event.getDamager​() instanceof Player)) {
            return;
        }

        Player player = (Player) event.getDamager​();
        ItemStack item = player.getItemInHand​();

        if (item == null || item.getType() != Material.WOOD_SWORD || !item.hasItemMeta()) {
            return;
        }

        ItemMeta meta = item.getItemMeta();
        if (!meta.hasDisplayName()) {
            return;
        }

        if (meta.getDisplayName().equalsIgnoreCase("Schwert1")) {
            event.setDamage(1);
        }
    }
Quote:
Originally Posted by ProDielerNR(1) View Post
das ist ja mal umstendlich :?
Mit umständlich hat das nicht viel zu tun, sondern mit gutem API Design. Die Haltbarkeit eines Items (PlayerItemDamgeEvent) geht ja nicht nur kaputt wenn damit ein anderes Entity geschlagen wird (EntityDamageByEntityEvent). Die Haltbarkeit von Werkzeugen reduziert sich beim Abbau von Blöcken, dabei kommt kein Entity zu schaden. Wenn du hingegen ein Entity mit der Handy schlägst oder mit einem Pfeil triffst, nimmt kein Item dabei Schaden. Du kannst also nicht automatisch sagen "wenn ein Item beschädigt wird, dann bekommt auch ein Entity Schaden".
06/30/2020 22:19 ProDielerNR(1)#5
Code:
    [MENTION=555807]event[/MENTION]Handler
    public void Schwerterdmg ( EntityDamageByEntityEvent event) {
		Player p = ((OfflinePlayer) event).getPlayer();
		  p.sendMessage("1");
        if(!(event.getDamager() instanceof Player)) {
        	  p.sendMessage("2");
            return;
        }
        p.sendMessage("3");
      
        Player player = (Player) event.getDamager();
      ItemStack item = player.getItemInHand();

        if (item == null || item.getType() != Material.WOOD_SWORD || !item.hasItemMeta()) {
        	  p.sendMessage("4");
            return;
        }
        p.sendMessage("5");
        ItemMeta meta = item.getItemMeta();
        if (!meta.hasDisplayName()) {
        	  p.sendMessage("6");
            return;
        }
        p.sendMessage("7");
        if (meta.getDisplayName().equalsIgnoreCase("Schwert1")) {
        	  p.sendMessage("8");
            event.setDamage(1);
        }
    }
wie du schon sagtest musste ich den code ausbessern jedoch funktioniert der leider dennoch nicht.

Edit: das event an sich reagiert überhaupt nicht darauf wen man ein entity schlägt

Code:
      [MENTION=555807]event[/MENTION]Handler
    public void Schwerterdmg (final EntityDamageByEntityEvent event) {
        Player player = (Player) event.getDamager();
      ItemStack item = player.getItemInHand();
      ItemMeta meta = item.getItemMeta();
      player.sendMessage("1");
        if (item == null || item.getType() != Material.WOOD_SWORD || !item.hasItemMeta()) {
        	player.sendMessage("2");
            return;
        }       
        if(!(event.getDamager() instanceof Player)) {
        	player.sendMessage("3");
            return;
        }
        if (!meta.hasDisplayName()) {
        	player.sendMessage("4");
            return;
        }
        if (meta.getDisplayName().equalsIgnoreCase("Bō")) {
        	player.sendMessage("5");
        	  ((EntityDamageEvent) player).setDamage((short)1.0);
        }
    }
Mir ist gestern ein paar fehler unterlaufen nun habe ich diese ausgebessert das event wird nun erkannt auch das item mit seinem namen nur der Damage wird leider dennoch nicht gesengt :?

Ah okay ich hab was raus gefunden der dmg wird tartsächlich geändert aber es wird nicht im item feld "attack Damage" anzeige die auf +4 steht, sie wurde aber dennoch geändert.
wen man so sagen will ist es nun ein Anzeige fehler :D

Closed Quest
07/01/2020 15:05 Legendary#6
#closed