summaryrefslogtreewikicommitdiff
path: root/src/main/java/dev/tylerm/khs/util/packet/EntityMetadataPacket.java
blob: cf5d2a1cc79c5783cec0cbb8bdf54462709ea049 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package dev.tylerm.khs.util.packet;

import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.wrappers.WrappedDataValue;
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import com.comphenix.protocol.wrappers.WrappedWatchableObject;

import dev.tylerm.khs.Main;

import org.bukkit.entity.Entity;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

public class EntityMetadataPacket extends AbstractPacket {

    private final WrappedDataWatcher watcher;
    private final WrappedDataWatcher.Serializer serializer;

    public EntityMetadataPacket(){
        super(PacketType.Play.Server.ENTITY_METADATA);
        watcher = new WrappedDataWatcher();
        serializer = WrappedDataWatcher.Registry.get(Byte.class);
    }

    public void setEntity(@NotNull Entity target){
        super.packet.getIntegers().write(0, target.getEntityId());
        watcher.setEntity(target);
    }

    public void setGlow(boolean glowing){
        if (glowing) {
            watcher.setObject(0, serializer, (byte) (0x40));
        } else {
            watcher.setObject(0, serializer, (byte) (0x0));
        }
    }

    public void writeMetadata() {

        if (Main.getInstance().supports(19, 3)) {

            final List<WrappedDataValue> wrappedDataValueList = new ArrayList<>();

            for(final WrappedWatchableObject entry : watcher.getWatchableObjects()) {
                if(entry == null) continue;

                final WrappedDataWatcher.WrappedDataWatcherObject watcherObject = entry.getWatcherObject();
                wrappedDataValueList.add(
                        new WrappedDataValue(
                                watcherObject.getIndex(),
                                watcherObject.getSerializer(),
                                entry.getRawValue()
                        )
                );
            }

            packet.getDataValueCollectionModifier().write(0, wrappedDataValueList);

        } else {

            packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects());
        
        }

    }

}