Skip to content

Instantly share code, notes, and snippets.

@aadnk
Created July 28, 2013 03:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aadnk/6097257 to your computer and use it in GitHub Desktop.
Save aadnk/6097257 to your computer and use it in GitHub Desktop.
How to intercept and modify Packet44UpdateAttributes in ProtocolLib 2.5.1. This example modifies the sprint speed to be 200% faster.
package com.comphenix.example;
import java.util.List;
import java.util.Set;
import java.util.UUID;
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.PacketAdapter;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.wrappers.WrappedAttribute;
import com.comphenix.protocol.wrappers.WrappedAttributeModifier;
import com.comphenix.protocol.wrappers.WrappedAttributeModifier.Operation;
import com.google.common.collect.Sets;
public class UpdateAttributes extends JavaPlugin {
private static final UUID SPRITING_SPEED = UUID.fromString("662a6b8d-da3e-4c1c-8813-96ea6097278d");
private static final UUID SUPER_SPRINTING = UUID.fromString("d64c79c2-a459-446c-9308-409e1b6b3340");
@Override
public void onEnable() {
ProtocolLibrary.getProtocolManager().addPacketListener(
new PacketAdapter(this, ConnectionSide.SERVER_SIDE, Packets.Server.UPDATE_ATTRIBUTES) {
public void onPacketSending(PacketEvent event) {
List<WrappedAttribute> list = event.getPacket().getAttributeCollectionModifier().read(0);
for (int i = 0; i < list.size(); i++) {
WrappedAttribute attribute = list.get(i);
// See if we should add the super sprinting attribute
if (attribute.hasModifier(SPRITING_SPEED) && !attribute.hasModifier(SUPER_SPRINTING)) {
Set<WrappedAttributeModifier> modifiers = Sets.newHashSet(attribute.getModifiers());
// Add the new super sprinting too
modifiers.add(WrappedAttributeModifier.newBuilder().
name("Super Sprinting").
uuid(SUPER_SPRINTING).
amount(2).
operation(Operation.ADD_PERCENTAGE).build());
list.set(i, attribute.withModifiers(modifiers));
}
}
event.getPacket().getAttributeCollectionModifier().write(0, list);
}
}
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment