Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,26 @@
import cn.superiormc.enchantmentslots.managers.ConfigManager;
import cn.superiormc.enchantmentslots.managers.LanguageManager;
import cn.superiormc.enchantmentslots.methods.AddLore;
import cn.superiormc.enchantmentslots.utils.CommonUtil;
import cn.superiormc.enchantmentslots.methods.SlotUtil;
import cn.superiormc.enchantmentslots.utils.CommonUtil;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.reflect.StructureModifier;
import org.bukkit.Bukkit;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class SetSlots extends GeneralPackets {
public SetSlots() {
super();
}

@Override
protected void initPacketAdapter(){
protected void initPacketAdapter() {
packetAdapter = new PacketAdapter(EnchantmentSlots.instance, ConfigManager.configManager.getPriority(), PacketType.Play.Server.SET_SLOT) {
@Override
public void onPacketSending(PacketEvent event) {
Expand Down Expand Up @@ -66,26 +68,10 @@ public void onPacketSending(PacketEvent event) {
}
}
if (!ConfigManager.configManager.isIgnore(targetItem) && ConfigManager.configManager.getBoolean("settings.set-slot-trigger.SetSlotPacket.remove-illegal-excess-enchant", true)) {
if (targetItem != null && !targetItem.getType().isAir()) {
int maxEnchantments = SlotUtil.getSlot(serverItemStack);
if (maxEnchantments > 0 && targetItem.getEnchantments().size() > maxEnchantments) {
int removeAmount = targetItem.getEnchantments().size() - maxEnchantments;
for (Enchantment enchant : targetItem.getEnchantments().keySet()) {
if (removeAmount <= 0) {
break;
}
ItemMeta meta = targetItem.getItemMeta();
if (meta == null) {
break;
}
meta.removeEnchant(enchant);
targetItem.setItemMeta(meta);
removeAmount--;
}
if (!ConfigManager.configManager.getBoolean("settings.set-slot-trigger.SetSlotPacket.hide-remove-message", false)) {
LanguageManager.languageManager.sendStringText(event.getPlayer(), "remove-excess-enchants");
}
}
// plib的事件获取到的Player可能不是Bukkit的Player
Player player = Bukkit.getPlayer(event.getPlayer().getUniqueId());
if (player != null) {
checkEnchantment(player, spigotSlot);
}
}
}
Expand All @@ -95,4 +81,37 @@ public void onPacketSending(PacketEvent event) {
}
};
}

private void checkEnchantment(Player player, int slot) {
Bukkit.getScheduler().runTask(EnchantmentSlots.instance, () -> {
if (!player.isOnline()) {
return;
}
ItemStack targetItem = player.getInventory().getItem(slot);
if (targetItem != null && !targetItem.getType().isAir()) {
// 他这里读取到的是发包的时候的物品,假如发包时invsync未同步完成,这里就会是上次这个服务器的物品,他获取这个物品的最大附魔数可能是0
int maxEnchantments = SlotUtil.getSlot(targetItem);
// 如果invsync把物品同步过来了 他给invsync新同步的物品,按照限制0的数量给附魔全移除了
if (maxEnchantments > 0 && targetItem.getEnchantments().size() > maxEnchantments) {
int removeAmount = targetItem.getEnchantments().size() - maxEnchantments;
for (Enchantment enchant : targetItem.getEnchantments().keySet()) {
if (removeAmount <= 0) {
break;
}
ItemMeta meta = targetItem.getItemMeta();
if (meta == null) {
break;
}
meta.removeEnchant(enchant);
targetItem.setItemMeta(meta);
removeAmount--;
}
if (!ConfigManager.configManager.getBoolean("settings.set-slot-trigger.SetSlotPacket.hide-remove-message", false)) {
LanguageManager.languageManager.sendStringText(player, "remove-excess-enchants");
}
}
}
});
}

}