From 311253aed3cc3eb0a3a950f8197b02d400d48337 Mon Sep 17 00:00:00 2001 From: HeroBrineGoat <76707404+MasterOfTheFish@users.noreply.github.com> Date: Fri, 28 Jan 2022 22:21:13 -0500 Subject: [PATCH] Fixed backpack being removed and not respawned on teleport --- .../hmccosmetics/database/Database.java | 19 +++++++++++++------ .../hmccosmetics/listener/JoinListener.java | 7 +++---- .../hmccosmetics/packet/PacketManager.java | 9 +-------- .../fisher2911/hmccosmetics/user/User.java | 6 ++++-- .../hmccosmetics/user/UserManager.java | 4 ++-- 5 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/database/Database.java b/src/main/java/io/github/fisher2911/hmccosmetics/database/Database.java index cf7bca21..d55e4f3c 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/database/Database.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/database/Database.java @@ -4,6 +4,7 @@ import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.DaoManager; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; +import com.sun.tools.jconsole.JConsoleContext; import io.github.fisher2911.hmccosmetics.HMCCosmetics; import io.github.fisher2911.hmccosmetics.concurrent.Threads; import io.github.fisher2911.hmccosmetics.database.dao.ArmorItemDAO; @@ -18,6 +19,7 @@ import java.sql.SQLException; import java.util.List; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; public class Database { @@ -71,7 +73,7 @@ public class Database { } } - public void loadUser(final UUID uuid) { + public void loadUser(final UUID uuid, final Consumer onComplete) { final int armorStandId = ARMOR_STAND_ID.getAndDecrement(); Threads.getInstance().execute( () -> { @@ -84,11 +86,14 @@ public class Database { final List armorItems = this.armorItemDao.queryForEq("uuid", uuid.toString()); - final UserDAO finalUser = user; + final User actualUser = user.toUser(this.plugin.getCosmeticManager(), armorItems, armorStandId); Bukkit.getScheduler().runTask(this.plugin, - () -> this.plugin.getUserManager().add( - finalUser.toUser(this.plugin.getCosmeticManager(), armorItems, armorStandId) - ) + () -> { + this.plugin.getUserManager().add( + actualUser + ); + onComplete.accept(actualUser); + } ); } catch (final SQLException exception) { @@ -96,7 +101,9 @@ public class Database { } }); - this.plugin.getUserManager().add(new User(uuid, PlayerArmor.empty(), armorStandId)); + final User user = new User(uuid, PlayerArmor.empty(), armorStandId); + this.plugin.getUserManager().add(user); + onComplete.accept(user); } diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/listener/JoinListener.java b/src/main/java/io/github/fisher2911/hmccosmetics/listener/JoinListener.java index 402a3e0e..93f0105c 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/listener/JoinListener.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/listener/JoinListener.java @@ -25,10 +25,9 @@ public class JoinListener implements Listener { @EventHandler public void onJoin(final PlayerJoinEvent event) { final Player player = event.getPlayer(); - this.database.loadUser(player.getUniqueId()); - - Bukkit.getScheduler().runTaskAsynchronously(this.plugin, - () -> this.userManager.resendCosmetics(player)); + this.database.loadUser(player.getUniqueId(), + user -> Bukkit.getScheduler().runTaskAsynchronously(this.plugin, + () -> this.userManager.resendCosmetics(player))); } @EventHandler diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/packet/PacketManager.java b/src/main/java/io/github/fisher2911/hmccosmetics/packet/PacketManager.java index cb96f3e1..66dc4ba3 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/packet/PacketManager.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/packet/PacketManager.java @@ -20,15 +20,7 @@ import java.util.UUID; public class PacketManager { - private static final ProtocolManager protocolManager; - - static { - protocolManager = ProtocolLibrary.getProtocolManager(); - } - public static PacketContainer getEntitySpawnPacket(final Location location, final int entityId, final EntityType entityType) { - final ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager(); - final PacketContainer packet = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY); // Entity ID @@ -89,6 +81,7 @@ public class PacketManager { } public static void sendPacket(final Player to, final PacketContainer... packets) { + final ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager(); try { for (final PacketContainer packet : packets) { protocolManager.sendServerPacket(to, packet); diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java b/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java index ea63ef82..ec1f8f4a 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java @@ -6,6 +6,7 @@ import com.comphenix.protocol.wrappers.EnumWrappers; import com.comphenix.protocol.wrappers.Pair; import com.comphenix.protocol.wrappers.WrappedDataWatcher; import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer; +import io.github.fisher2911.hmccosmetics.HMCCosmetics; import io.github.fisher2911.hmccosmetics.gui.ArmorItem; import io.github.fisher2911.hmccosmetics.inventory.PlayerArmor; import io.github.fisher2911.hmccosmetics.packet.PacketManager; @@ -82,7 +83,7 @@ public class User { final PacketContainer packet = PacketManager.getEntitySpawnPacket(location, this.armorStandId, EntityType.ARMOR_STAND); - PacketManager.sendPacket(player, packet); + PacketManager.sendPacket(other, packet); } public void spawnArmorStand() { @@ -101,7 +102,7 @@ public class User { public void updateArmorStand() { if (!this.hasArmorStand) { this.spawnArmorStand(); - return; +// return; } final Player player = this.getPlayer(); @@ -136,6 +137,7 @@ public class User { public void despawnAttached() { PacketManager.sendPacketToOnline(PacketManager.getEntityDestroyPacket(this.armorStandId)); + this.hasArmorStand = false; } public boolean hasArmorStand() { diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java b/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java index d5cc5b22..dc3c4cbb 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java @@ -31,7 +31,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; public class UserManager { @@ -39,7 +38,7 @@ public class UserManager { private final Settings settings; private final MessageHandler messageHandler; - private final Map userMap = new ConcurrentHashMap<>(); + private final Map userMap = new HashMap<>(); private final Map armorStandIdMap = new HashMap<>(); private BukkitTask teleportTask; @@ -129,6 +128,7 @@ public class UserManager { if (player == null) { return; } + final PlayerArmor playerArmor = user.getPlayerArmor(); final List> equipmentList = new ArrayList<>();