diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java index 2f76dc86..dcad24a7 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java @@ -11,6 +11,7 @@ import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin; import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic; import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot; import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticArmorType; +import com.hibiscusmc.hmccosmetics.nms.NMSHandlers; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import com.hibiscusmc.hmccosmetics.user.CosmeticUsers; import com.hibiscusmc.hmccosmetics.util.InventoryUtils; @@ -156,16 +157,14 @@ public class PlayerGameListener implements Listener { @EventHandler public void onMainHandSwitch(PlayerItemHeldEvent event) { - HMCCosmeticsPlugin.getInstance().getLogger().info("PlayerItemHeldEvent"); CosmeticUser user = CosmeticUsers.getUser(event.getPlayer()); if (user == null) return; - HMCCosmeticsPlugin.getInstance().getLogger().info("PlayerItemHeldEvent 2"); - - - event.getPreviousSlot(); - - user.updateCosmetic(CosmeticSlot.MAINHAND); + event.getPlayer().getInventory().setItem(event.getPreviousSlot(), event.getPlayer().getInventory().getItem(event.getPreviousSlot())); + //NMSHandlers.getHandler().slotUpdate(event.getPlayer(), event.getPreviousSlot()); + Bukkit.getScheduler().runTaskLater(HMCCosmeticsPlugin.getInstance(), () -> { + user.updateCosmetic(CosmeticSlot.MAINHAND); + }, 2); } private void registerInventoryClickListener() { diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/nms/NMSHandler.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/nms/NMSHandler.java index 6618ede4..fcfbb7e8 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/nms/NMSHandler.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/nms/NMSHandler.java @@ -32,6 +32,10 @@ public interface NMSHandler { List sendTo ); + void slotUpdate( + Player player, + int slot + ); default boolean getSupported () { return false; diff --git a/v1_19_R1/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R1/NMSHandler.java b/v1_19_R1/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R1/NMSHandler.java index 58092d69..0d36bd73 100644 --- a/v1_19_R1/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R1/NMSHandler.java +++ b/v1_19_R1/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R1/NMSHandler.java @@ -14,12 +14,14 @@ import com.hibiscusmc.hmccosmetics.util.PlayerUtils; import com.hibiscusmc.hmccosmetics.util.packets.PacketManager; import com.mojang.datafixers.util.Pair; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.ServerPlayerConnection; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.player.Inventory; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -121,8 +123,8 @@ public class NMSHandler implements com.hibiscusmc.hmccosmetics.nms.NMSHandler { if (!(user.getCosmetic(cosmeticSlot) instanceof CosmeticArmorType)) { if (user.getCosmetic(cosmeticSlot) instanceof CosmeticMainhandType) { - CosmeticMainhandType cosmeticMainhandType = (CosmeticMainhandType) user.getCosmetic(cosmeticSlot); - nmsItem = CraftItemStack.asNMSCopy(cosmeticMainhandType.getItemStack()); + CosmeticMainhandType cosmeticMainhandType = (CosmeticMainhandType) user.getCosmetic(CosmeticSlot.MAINHAND); + nmsItem = CraftItemStack.asNMSCopy(user.getUserCosmeticItem(cosmeticMainhandType)); } else { nmsItem = CraftItemStack.asNMSCopy(user.getPlayer().getInventory().getItem(InventoryUtils.getEquipmentSlot(cosmeticSlot))); } @@ -155,6 +157,28 @@ public class NMSHandler implements com.hibiscusmc.hmccosmetics.nms.NMSHandler { for (Player p : sendTo) sendPacket(p, packet); } + @Override + public void slotUpdate( + Player player, + int slot + ) { + int index = 0; + + ServerPlayer player1 = ((CraftPlayer) player).getHandle(); + + if (index < Inventory.getSelectionSize()) { + index += 36; + } else if (index > 39) { + index += 5; // Off hand + } else if (index > 35) { + index = 8 - (index - 36); + } + ItemStack item = player.getInventory().getItem(slot); + + Packet packet = new ClientboundContainerSetSlotPacket(player1.inventoryMenu.containerId, player1.inventoryMenu.incrementStateId(), index, CraftItemStack.asNMSCopy(item)); + sendPacket(player, packet); + } + public void sendPacket(Player player, Packet packet) { ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); ServerPlayerConnection connection = serverPlayer.connection;