Skip to content

Instantly share code, notes, and snippets.

@aadnk
Created January 20, 2013 18:34
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save aadnk/4580551 to your computer and use it in GitHub Desktop.
Save aadnk/4580551 to your computer and use it in GitHub Desktop.
Use ProtocolLib to make items glow without enchantments.
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import com.comphenix.protocol.Packets;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.ConnectionSide;
import com.comphenix.protocol.events.ListenerPriority;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.utility.MinecraftReflection;
import com.comphenix.protocol.wrappers.nbt.NbtCompound;
import com.comphenix.protocol.wrappers.nbt.NbtFactory;
public class ExampleMod extends JavaPlugin {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Player player = (Player) sender;
// Get a CraftItemStack
ItemStack stack = new ItemStack(Material.IRON_AXE, 1);
stack = MinecraftReflection.getBukkitItemStack(stack);
// We'll co-op Silk Touch 32 (as it doesn't make much sense) to mark this item as glowing
stack.addUnsafeEnchantment(Enchantment.SILK_TOUCH, 32);
player.getInventory().addItem(stack);
}
return true;
}
@Override
public void onEnable() {
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(
this, ConnectionSide.SERVER_SIDE, ListenerPriority.HIGH,
Packets.Server.SET_SLOT, Packets.Server.WINDOW_ITEMS) {
@Override
public void onPacketSending(PacketEvent event) {
if (event.getPacketID() == Packets.Server.SET_SLOT) {
addGlow(new ItemStack[] { event.getPacket().getItemModifier().read(0) });
} else {
addGlow(event.getPacket().getItemArrayModifier().read(0));
}
}
});
}
private void addGlow(ItemStack[] stacks) {
for (ItemStack stack : stacks) {
if (stack != null) {
// Only update those stacks that have our flag enchantment
if (stack.getEnchantmentLevel(Enchantment.SILK_TOUCH) == 32) {
NbtCompound compound = (NbtCompound) NbtFactory.fromItemTag(stack);
compound.put(NbtFactory.ofList("ench"));
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment