Uploaded image for project: 'Spigot'
  1. Spigot
  2. SPIGOT-7490

EntityEquipment::SetItemInMainHand requires relog to update and even then, the damage is incorrect

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Minor Minor
    • None
    • None
    • None
    • 1.20.2 plugin on 1.20.2 server

    • 1.20.2
    • Yes

      I'm trying to set an item into the main hand of a skeleton after he's been attacked, but it seems that as of 1.20.2 this is no longer possible.

      See here my sample code:

      package test;
      
      
      
      import org.bukkit.Material;
      
      import org.bukkit.entity.Monster;
      
      import org.bukkit.event.EventHandler;
      
      import org.bukkit.event.Listener;
      
      import org.bukkit.event.entity.EntityDamageByEntityEvent;
      
      import org.bukkit.inventory.EntityEquipment;
      
      import org.bukkit.inventory.ItemStack;
      
      import org.bukkit.plugin.java.JavaPlugin;
      
      
      
      import java.util.ArrayList;
      
      
      
      public class Test implements Listener {
      
          private final JavaPlugin plugin;
      
          private final ArrayList<ItemStack> swords;
      
          private int counter;
      
      
      
          public Test(JavaPlugin plugin) {
      
              this.plugin = plugin;
      
              plugin.getServer().getPluginManager().registerEvents(this, plugin);
      
              this.swords = new ArrayList<>();
      
              this.swords.add(new ItemStack(Material.IRON_SWORD));
      
              this.swords.add(new ItemStack(Material.GOLDEN_SWORD));
      
              this.swords.add(new ItemStack(Material.DIAMOND_SWORD));
      
              this.counter = 0;
      
          }
      
      
      
          private void incrementCounter() {
      
              if (this.counter < this.swords.size() - 1) {
      
                  this.counter++;
      
              } else {
      
                  this.counter = 0;
      
              }
      
          }
      
      
      
          @EventHandler
      
          public void test(EntityDamageByEntityEvent event) {
      
              if (!(event.getEntity() instanceof Monster)) {
      
                  return;
      
              }
      
              Monster monster = (Monster) event.getEntity();
      
              EntityEquipment ee = monster.getEquipment();
      
              ee.setItemInMainHand(this.swords.get(this.counter));
      
              this.incrementCounter();
      
              System.out.println(ee.getItemInMainHand());
      
              System.out.println("Changed sword!");
      
          }
      
      } 

       

      And see here my example video illustrating the problem:

      Spigot Mc bug

            Unassigned Unassigned
            Joey1231 Joey
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: