Refactored packet adaptors
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
package com.willfp.ecoenchants.display;
|
||||
|
||||
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.willfp.ecoenchants.EcoEnchantsPlugin;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public abstract class AbstractPacketAdapter extends PacketAdapter {
|
||||
private final PacketType type;
|
||||
|
||||
protected AbstractPacketAdapter(PacketType type) {
|
||||
super(EcoEnchantsPlugin.getInstance(), Collections.singletonList(type));
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public void onReceive(PacketContainer packet) {}
|
||||
|
||||
public void onSend(PacketContainer packet) {}
|
||||
|
||||
@Override
|
||||
public final void onPacketReceiving(PacketEvent event) {
|
||||
if(event.getPacket() == null)
|
||||
return;
|
||||
|
||||
if(!event.getPacket().getType().equals(type))
|
||||
return;
|
||||
|
||||
onReceive(event.getPacket());
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onPacketSending(PacketEvent event) {
|
||||
if(event.getPacket() == null)
|
||||
return;
|
||||
|
||||
if(!event.getPacket().getType().equals(type))
|
||||
return;
|
||||
|
||||
onSend(event.getPacket());
|
||||
}
|
||||
|
||||
public final void register() {
|
||||
if(!EcoEnchantsPlugin.getInstance().protocolManager.getPacketListeners().contains(this)) {
|
||||
EcoEnchantsPlugin.getInstance().protocolManager.addPacketListener(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,75 +0,0 @@
|
||||
package com.willfp.ecoenchants.display;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.events.PacketAdapter;
|
||||
import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.willfp.ecoenchants.EcoEnchantsPlugin;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.MerchantRecipe;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class DisplayPacketAdapter extends PacketAdapter {
|
||||
private static final List<PacketType> packets = Arrays.asList(
|
||||
PacketType.Play.Server.WINDOW_ITEMS,
|
||||
PacketType.Play.Server.SET_SLOT,
|
||||
PacketType.Play.Client.SET_CREATIVE_SLOT,
|
||||
PacketType.Play.Server.OPEN_WINDOW_MERCHANT
|
||||
);
|
||||
|
||||
public DisplayPacketAdapter() {
|
||||
super(EcoEnchantsPlugin.getInstance(), packets);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPacketSending(PacketEvent event) {
|
||||
if(event.getPacket() == null) return;
|
||||
|
||||
PacketType packetType = event.getPacketType();
|
||||
if (packetType.equals(PacketType.Play.Server.WINDOW_ITEMS)) {
|
||||
event.getPacket().getItemListModifier().modify(0, (itemStacks) -> {
|
||||
itemStacks.forEach(EnchantDisplay::displayEnchantments);
|
||||
return itemStacks;
|
||||
});
|
||||
} else if (packetType.equals(PacketType.Play.Server.SET_SLOT)) {
|
||||
event.getPacket().getItemModifier().modify(0, (item) -> {
|
||||
item = EnchantDisplay.displayEnchantments(item);
|
||||
return item;
|
||||
});
|
||||
} else if (packetType.equals(PacketType.Play.Server.OPEN_WINDOW_MERCHANT)) {
|
||||
List<MerchantRecipe> merchantRecipes = event.getPacket().getMerchantRecipeLists().readSafely(0);
|
||||
if (merchantRecipes != null) {
|
||||
List<MerchantRecipe> newList =
|
||||
merchantRecipes.stream().map(oldRecipe -> {
|
||||
MerchantRecipe recipe =
|
||||
new MerchantRecipe(EnchantDisplay.displayEnchantments(oldRecipe.getResult()),
|
||||
oldRecipe.getUses(),
|
||||
oldRecipe.getMaxUses(),
|
||||
oldRecipe.hasExperienceReward(),
|
||||
oldRecipe.getVillagerExperience(),
|
||||
oldRecipe.getPriceMultiplier());
|
||||
List<ItemStack> ingredients = oldRecipe.getIngredients();
|
||||
ingredients.forEach(EnchantDisplay::displayEnchantments);
|
||||
recipe.setIngredients(ingredients);
|
||||
return recipe;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
event.getPacket().getMerchantRecipeLists().writeSafely(0, newList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPacketReceiving(PacketEvent event) {
|
||||
if(event.getPacket() == null) return;
|
||||
|
||||
if(!event.getPacketType().equals(PacketType.Play.Client.SET_CREATIVE_SLOT)) return;
|
||||
|
||||
event.getPacket().getItemModifier().modify(0, (item) -> {
|
||||
item = EnchantDisplay.revertDisplay(item);
|
||||
return item;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -80,9 +80,17 @@ public class EnchantDisplay {
|
||||
Arrays.asList(Enchantment.values()).parallelStream().forEach(enchantment -> {
|
||||
List<String> description;
|
||||
NamespacedKey key = enchantment.getKey();
|
||||
if(EcoEnchants.getByKey(key) != null) description = ((EcoEnchant) enchantment).getDescription();
|
||||
else
|
||||
description = Arrays.asList(WordUtils.wrap(ConfigManager.getLang().getString("vanilla." + enchantment.getKey().getKey().toLowerCase() + ".description"), ConfigManager.getConfig().getInt("lore.describe.wrap"), "\n", false).split("\\r?\\n"));
|
||||
if(EcoEnchants.getByKey(key) != null) {
|
||||
description = ((EcoEnchant) enchantment).getDescription();
|
||||
} else {
|
||||
description =
|
||||
Arrays.asList(
|
||||
WordUtils.wrap(
|
||||
ConfigManager.getLang().getString("vanilla." + enchantment.getKey().getKey().toLowerCase() + ".description"),
|
||||
ConfigManager.getConfig().getInt("lore.describe.wrap"),
|
||||
"\n", false
|
||||
).split("\\r?\\n"));
|
||||
}
|
||||
description.replaceAll(line -> prefix + descriptionColor + line);
|
||||
DESCRIPTION_CACHE.put(key, description);
|
||||
});
|
||||
@@ -232,8 +240,12 @@ public class EnchantDisplay {
|
||||
});
|
||||
}
|
||||
|
||||
if(meta instanceof EnchantmentStorageMeta) meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); // Thanks ShaneBee!
|
||||
forRemoval.forEach((meta::removeEnchant));
|
||||
if (meta instanceof EnchantmentStorageMeta) {
|
||||
meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
|
||||
forRemoval.forEach(((EnchantmentStorageMeta) meta)::removeStoredEnchant);
|
||||
} else {
|
||||
forRemoval.forEach(meta::removeEnchant);
|
||||
}
|
||||
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
lore.addAll(itemLore);
|
||||
meta.setLore(lore);
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.willfp.ecoenchants.display.packets;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.willfp.ecoenchants.display.AbstractPacketAdapter;
|
||||
import com.willfp.ecoenchants.display.EnchantDisplay;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.MerchantRecipe;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PacketOpenWindowMerchant extends AbstractPacketAdapter {
|
||||
public PacketOpenWindowMerchant() {
|
||||
super(PacketType.Play.Server.OPEN_WINDOW_MERCHANT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSend(PacketContainer packet) {
|
||||
List<MerchantRecipe> merchantRecipes = packet.getMerchantRecipeLists().readSafely(0);
|
||||
if(merchantRecipes == null)
|
||||
return;
|
||||
|
||||
List<MerchantRecipe> newList =
|
||||
merchantRecipes.stream().map(oldRecipe -> {
|
||||
MerchantRecipe recipe =
|
||||
new MerchantRecipe(EnchantDisplay.displayEnchantments(oldRecipe.getResult()),
|
||||
oldRecipe.getUses(),
|
||||
oldRecipe.getMaxUses(),
|
||||
oldRecipe.hasExperienceReward(),
|
||||
oldRecipe.getVillagerExperience(),
|
||||
oldRecipe.getPriceMultiplier());
|
||||
List<ItemStack> ingredients = oldRecipe.getIngredients();
|
||||
ingredients.forEach(EnchantDisplay::displayEnchantments);
|
||||
recipe.setIngredients(ingredients);
|
||||
return recipe;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
packet.getMerchantRecipeLists().writeSafely(0, newList);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.willfp.ecoenchants.display.packets;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.willfp.ecoenchants.display.AbstractPacketAdapter;
|
||||
import com.willfp.ecoenchants.display.EnchantDisplay;
|
||||
|
||||
public class PacketSetCreativeSlot extends AbstractPacketAdapter {
|
||||
public PacketSetCreativeSlot() {
|
||||
super(PacketType.Play.Client.SET_CREATIVE_SLOT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceive(PacketContainer packet) {
|
||||
packet.getItemModifier().modify(0, (item) -> {
|
||||
item = EnchantDisplay.revertDisplay(item);
|
||||
return item;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.willfp.ecoenchants.display.packets;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.willfp.ecoenchants.display.AbstractPacketAdapter;
|
||||
import com.willfp.ecoenchants.display.EnchantDisplay;
|
||||
|
||||
public class PacketSetSlot extends AbstractPacketAdapter {
|
||||
public PacketSetSlot() {
|
||||
super(PacketType.Play.Server.SET_SLOT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSend(PacketContainer packet) {
|
||||
packet.getItemModifier().modify(0, (item) -> {
|
||||
item = EnchantDisplay.displayEnchantments(item);
|
||||
return item;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.willfp.ecoenchants.display.packets;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.willfp.ecoenchants.display.AbstractPacketAdapter;
|
||||
import com.willfp.ecoenchants.display.EnchantDisplay;
|
||||
|
||||
public class PacketWindowItems extends AbstractPacketAdapter {
|
||||
public PacketWindowItems() {
|
||||
super(PacketType.Play.Server.WINDOW_ITEMS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSend(PacketContainer packet) {
|
||||
packet.getItemListModifier().modify(0, (itemStacks) -> {
|
||||
itemStacks.forEach(EnchantDisplay::displayEnchantments);
|
||||
return itemStacks;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -9,8 +9,11 @@ import com.willfp.ecoenchants.commands.CommandEcoreload;
|
||||
import com.willfp.ecoenchants.commands.CommandEcoskip;
|
||||
import com.willfp.ecoenchants.commands.CommandEnchantinfo;
|
||||
import com.willfp.ecoenchants.config.ConfigManager;
|
||||
import com.willfp.ecoenchants.display.DisplayPacketAdapter;
|
||||
import com.willfp.ecoenchants.display.EnchantDisplay;
|
||||
import com.willfp.ecoenchants.display.packets.PacketOpenWindowMerchant;
|
||||
import com.willfp.ecoenchants.display.packets.PacketSetCreativeSlot;
|
||||
import com.willfp.ecoenchants.display.packets.PacketSetSlot;
|
||||
import com.willfp.ecoenchants.display.packets.PacketWindowItems;
|
||||
import com.willfp.ecoenchants.enchantments.*;
|
||||
import com.willfp.ecoenchants.events.armorequip.ArmorListener;
|
||||
import com.willfp.ecoenchants.events.armorequip.DispenserArmorListener;
|
||||
@@ -96,7 +99,10 @@ public class Loader {
|
||||
|
||||
Bukkit.getLogger().info("Loading ProtocolLib...");
|
||||
EcoEnchantsPlugin.getInstance().protocolManager = ProtocolLibrary.getProtocolManager();
|
||||
EcoEnchantsPlugin.getInstance().protocolManager.addPacketListener(new DisplayPacketAdapter());
|
||||
new PacketOpenWindowMerchant().register();
|
||||
new PacketSetCreativeSlot().register();
|
||||
new PacketSetSlot().register();
|
||||
new PacketWindowItems().register();
|
||||
|
||||
/*
|
||||
Load land management support
|
||||
|
||||
Reference in New Issue
Block a user