[1.8] Wither bossbar, wither's don't get removed when more than one player is on

Discussion in 'Plugin Development' started by ShotsMC, Jan 30, 2021.

Thread Status:
Not open for further replies.
  1. Offline

    ShotsMC

    The plugin works amazing with one player, wither gets despawned & replaced but once 2 players or more join the old withers dont despawn & just stay in the same spot

    Main Class
    Code:
    package net.Plutoids.main;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
    import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.util.Vector;
    
    import net.Plutoids.api.ChatColour;
    import net.minecraft.server.v1_8_R3.EntityWither;
    import net.minecraft.server.v1_8_R3.Packet;
    import net.minecraft.server.v1_8_R3.PacketPlayOutEntityDestroy;
    import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving;
    import net.minecraft.server.v1_8_R3.WorldServer;
    
    public class Bossbar extends JavaPlugin implements Listener {
      
        private EntityWither wither;
      
        private int count = 0;
      
        @Override
        public void onEnable() {
          
            BarMessages.setBarMessages();
            registerListeners();
          
            new MessageUpdater(count).runTaskTimer(this, 0, 20);
            new Updater(this).runTaskTimer(this, 0, 5);
          
        }
      
        @Override
        public void onDisable() {
            for (Player player : Bukkit.getOnlinePlayers())
                removeWither(player);
        }
      
        private void registerListeners() {
            PluginManager pluginManager = Bukkit.getPluginManager();
          
            pluginManager.registerEvents(this, this);
        }
      
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent e){
            count = 0;
            update(e.getPlayer(), BarMessages.getMessagesList().get(0));
        }
      
        @EventHandler
        public void onPlayerQuit(PlayerQuitEvent e){
               removeWither(e.getPlayer());
        }
      
        public void update(Player player, String title) {
          
            removeWither(player);
          
            WorldServer world = ((CraftWorld) player.getLocation().getWorld()).getHandle();
          
            Vector direction = player.getLocation().getDirection();
            Location location = player.getLocation().add(direction.multiply(35));
          
            wither = new EntityWither(world);
            wither.setLocation(location.getX(), location.getY(), location.getZ(), location.getPitch(), location.getYaw());
            wither.setCustomName(ChatColour.convert(title));
            wither.setInvisible(true);
          
            Packet<?> packet = new PacketPlayOutSpawnEntityLiving(wither);
            ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
          
        }
      
        private void removeWither(Player player) {
            if (wither != null) {
                PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(wither.getId());
                ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
            }
        }
      
    }
    Updater Class
    Code:
    package net.Plutoids.main;
    
    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.scheduler.BukkitRunnable;
    
    public class Updater extends BukkitRunnable {
      
        private Bossbar bossbar;
    
        public Updater(Bossbar bossbar) {
            this.bossbar = bossbar;
        }
      
        @Override
        public void run() {
            for (Player player : Bukkit.getOnlinePlayers())
                bossbar.update(player, BarMessages.getCurrentMessage());
        }
    
    }
     
  2. Offline

    Kars

    Because when a new player joins, the variable 'wither' gets set to the second EntityWither and the first one gets forgotten.
     
  3. Offline

    ShotsMC

    Any idea on how to fix this? Quite stumped atm
     
  4. Offline

    Kars

    Have a HashMap<Player id, EntityWither> instead of the single reference.
     
Thread Status:
Not open for further replies.

Share This Page