|
1 | 1 | package net.jitse.npclib.nms.v1_14_R1.packets; |
2 | 2 |
|
| 3 | +import java.util.Collection; |
| 4 | + |
3 | 5 | import net.jitse.npclib.api.state.NPCState; |
4 | 6 | import net.minecraft.server.v1_14_R1.DataWatcher; |
5 | 7 | import net.minecraft.server.v1_14_R1.DataWatcherObject; |
6 | 8 | import net.minecraft.server.v1_14_R1.DataWatcherRegistry; |
| 9 | +import net.minecraft.server.v1_14_R1.EntityPose; |
7 | 10 | import net.minecraft.server.v1_14_R1.PacketPlayOutEntityMetadata; |
8 | 11 |
|
9 | | -import java.util.Collection; |
10 | | - |
11 | 12 | public class PacketPlayOutEntityMetadataWrapper { |
12 | 13 |
|
13 | 14 | public PacketPlayOutEntityMetadata create(Collection<NPCState> activateStates, int entityId) { |
14 | 15 | DataWatcher dataWatcher = new DataWatcher(null); |
15 | 16 | byte masked = NPCState.getMasked(activateStates); |
16 | | - // TODO: Find out why NPCState#CROUCHED doesn't work. |
| 17 | + |
| 18 | + dataWatcher.register(new DataWatcherObject<EntityPose>(6, DataWatcherRegistry.s), getMaskedPose(activateStates)); |
17 | 19 | dataWatcher.register(new DataWatcherObject<>(0, DataWatcherRegistry.a), masked); |
18 | | - |
19 | | -// for (Player online : Bukkit.getOnlinePlayers()) { |
20 | | -// DataWatcher watcher = ((CraftPlayer) online).getHandle().getDataWatcher(); |
21 | | -// try { |
22 | | -// Field entriesField = watcher.getClass().getDeclaredField("entries"); |
23 | | -// entriesField.setAccessible(true); |
24 | | -// |
25 | | -// Int2ObjectOpenHashMap<DataWatcher.Item<?>> entries = (Int2ObjectOpenHashMap<DataWatcher.Item<?>>) entriesField.get(watcher); |
26 | | -// entries.forEach((integer, item) -> { |
27 | | -// if (item.b() instanceof Boolean || item.b() instanceof Byte) |
28 | | -// online.sendMessage(integer + ": " + item.b() + " type = " + item.b().getClass().toString()); |
29 | | -// }); |
30 | | -// } catch (NoSuchFieldException | IllegalAccessException e) { |
31 | | -// e.printStackTrace(); |
32 | | -// } |
33 | | -// } |
34 | | - |
| 20 | + |
35 | 21 | return new PacketPlayOutEntityMetadata(entityId, dataWatcher, true); |
36 | 22 | } |
| 23 | + |
| 24 | + private EntityPose getMaskedPose(Collection<NPCState> states) { |
| 25 | + if (states.contains(NPCState.CROUCHED)) |
| 26 | + return EntityPose.SNEAKING; |
| 27 | + return EntityPose.STANDING; |
| 28 | + } |
37 | 29 | } |
0 commit comments