diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java
index 3bdeb86fa..f73397eae 100644
--- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java
+++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java
@@ -457,6 +457,7 @@ public class NPCCommands {
}
}
commands.clearHistory(which, player);
+ Messaging.send(sender, Messages.NPC_COMMAND_ERRORS_CLEARED, Util.prettyEnum(which));
} else if (action.equalsIgnoreCase("sequential")) {
commands.setExecutionMode(commands.getExecutionMode() == ExecutionMode.SEQUENTIAL ? ExecutionMode.LINEAR
: ExecutionMode.SEQUENTIAL);
diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java b/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java
index 0afed3f34..8a114ba46 100644
--- a/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java
+++ b/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java
@@ -50,6 +50,7 @@ import net.citizensnpcs.trait.ShopTrait;
import net.citizensnpcs.trait.SitTrait;
import net.citizensnpcs.trait.SkinLayers;
import net.citizensnpcs.trait.SkinTrait;
+import net.citizensnpcs.trait.SleepTrait;
import net.citizensnpcs.trait.SlimeSize;
import net.citizensnpcs.trait.SmoothRotationTrait;
import net.citizensnpcs.trait.SneakTrait;
@@ -77,7 +78,6 @@ public class CitizensTraitFactory implements TraitFactory {
registerTrait(TraitInfo.create(EndermanTrait.class));
registerTrait(TraitInfo.create(Equipment.class));
registerTrait(TraitInfo.create(FollowTrait.class));
- registerTrait(TraitInfo.create(SitTrait.class));
registerTrait(TraitInfo.create(GameModeTrait.class));
registerTrait(TraitInfo.create(Gravity.class));
registerTrait(TraitInfo.create(HorseModifiers.class));
@@ -95,6 +95,8 @@ public class CitizensTraitFactory implements TraitFactory {
registerTrait(TraitInfo.create(Saddle.class));
registerTrait(TraitInfo.create(ScoreboardTrait.class));
registerTrait(TraitInfo.create(ScriptTrait.class));
+ registerTrait(TraitInfo.create(SitTrait.class));
+ registerTrait(TraitInfo.create(SleepTrait.class));
registerTrait(TraitInfo.create(SheepTrait.class));
registerTrait(TraitInfo.create(SkinLayers.class));
registerTrait(TraitInfo.create(SkinTrait.class));
diff --git a/main/src/main/java/net/citizensnpcs/trait/SleepTrait.java b/main/src/main/java/net/citizensnpcs/trait/SleepTrait.java
new file mode 100644
index 000000000..1cd15b949
--- /dev/null
+++ b/main/src/main/java/net/citizensnpcs/trait/SleepTrait.java
@@ -0,0 +1,59 @@
+package net.citizensnpcs.trait;
+
+import org.bukkit.Location;
+import org.bukkit.block.Bed;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.Villager;
+import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
+
+import net.citizensnpcs.api.persistence.Persist;
+import net.citizensnpcs.api.trait.Trait;
+import net.citizensnpcs.api.trait.TraitName;
+import net.citizensnpcs.util.NMS;
+
+@TraitName("sleeptrait")
+public class SleepTrait extends Trait {
+ @Persist
+ private Location at;
+ private boolean sleeping;
+
+ public SleepTrait() {
+ super("sleeptrait");
+ }
+
+ @Override
+ public void run() {
+ if (!npc.isSpawned())
+ return;
+ if (sleeping && at != null) {
+ return;
+ } else if (sleeping && at == null) {
+ stopSleeping();
+ }
+ if (npc.getEntity() instanceof Player) {
+ Player player = (Player) npc.getEntity();
+ if (at.getBlock().getBlockData() instanceof Bed || at.getBlock().getState() instanceof Bed) {
+ player.sleep(at, true);
+ } else {
+ NMS.sleep(player, true);
+ }
+ sleeping = true;
+ } else if (npc.getEntity() instanceof Villager) {
+ sleeping = ((Villager) npc.getEntity()).sleep(at);
+ }
+ }
+
+ public void setSleeping(Location at) {
+ this.at = at != null ? at.clone() : null;
+ stopSleeping();
+ npc.teleport(at, TeleportCause.PLUGIN);
+ }
+
+ private void stopSleeping() {
+ if (npc.getEntity() instanceof Player) {
+ NMS.sleep((Player) npc.getEntity(), false);
+ } else if (npc.getEntity() instanceof Villager) {
+ ((Villager) npc.getEntity()).wakeup();
+ }
+ }
+}
diff --git a/main/src/main/java/net/citizensnpcs/util/Messages.java b/main/src/main/java/net/citizensnpcs/util/Messages.java
index 63010623c..4820c27f8 100644
--- a/main/src/main/java/net/citizensnpcs/util/Messages.java
+++ b/main/src/main/java/net/citizensnpcs/util/Messages.java
@@ -239,6 +239,7 @@ public class Messages {
public static final String NOT_USING_MINECRAFT_AI = "citizens.commands.npc.ai.stopped";
public static final String NPC_ALREADY_SELECTED = "citizens.commands.npc.select.already-selected";
public static final String NPC_ALREADY_SPAWNED = "citizens.commands.npc.spawn.already-spawned";
+ public static final String NPC_COMMAND_ERRORS_CLEARED = "citizens.commands.npc.command.errors-cleared";
public static final String NPC_COMMAND_HELP = "citizens.commands.npc.command.help";
public static final String NPC_COMMAND_INVALID_ERROR_MESSAGE = "citizens.commands.npc.command.invalid-error-message";
public static final String NPC_COPIED = "citizens.commands.npc.copy.copied";
diff --git a/main/src/main/java/net/citizensnpcs/util/NMS.java b/main/src/main/java/net/citizensnpcs/util/NMS.java
index fcbda9e52..3cba5a313 100644
--- a/main/src/main/java/net/citizensnpcs/util/NMS.java
+++ b/main/src/main/java/net/citizensnpcs/util/NMS.java
@@ -622,6 +622,10 @@ public class NMS {
}
}
+ public static void sleep(Player entity, boolean sleep) {
+ BRIDGE.sleep(entity, sleep);
+ }
+
public static boolean tick(Entity next) {
return BRIDGE.tick(next);
}
@@ -654,6 +658,7 @@ public class NMS {
private static Object UNSAFE;
private static MethodHandle UNSAFE_FIELD_OFFSET;
private static MethodHandle UNSAFE_PUT_OBJECT;
+
private static MethodHandle UNSAFE_STATIC_FIELD_OFFSET;
static {
diff --git a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java
index 2533daee0..ca5adf9ae 100644
--- a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java
+++ b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java
@@ -189,6 +189,8 @@ public interface NMSBridge {
public void shutdown();
+ public void sleep(Player entity, boolean sleep);
+
public boolean tick(Entity next);
public void trySwim(Entity entity);
diff --git a/main/src/main/java/net/citizensnpcs/util/PlayerAnimation.java b/main/src/main/java/net/citizensnpcs/util/PlayerAnimation.java
index 6a92134df..1de601acb 100644
--- a/main/src/main/java/net/citizensnpcs/util/PlayerAnimation.java
+++ b/main/src/main/java/net/citizensnpcs/util/PlayerAnimation.java
@@ -12,6 +12,7 @@ import net.citizensnpcs.api.npc.NPCRegistry;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.trait.ArmorStandTrait;
import net.citizensnpcs.trait.SitTrait;
+import net.citizensnpcs.trait.SleepTrait;
public enum PlayerAnimation {
ARM_SWING,
@@ -79,6 +80,18 @@ public enum PlayerAnimation {
player.setMetadata("citizens.sitting", new FixedMetadataValue(CitizensAPI.getPlugin(), false));
NMS.mount(player, null);
return;
+ } else if (this == SLEEP) {
+ if (player instanceof NPCHolder) {
+ ((NPCHolder) player).getNPC().getOrAddTrait(SleepTrait.class).setSleeping(player.getLocation());
+ return;
+ }
+ NMS.sleep(player, true);
+ } else if (this == STOP_SLEEPING) {
+ if (player instanceof NPCHolder) {
+ ((NPCHolder) player).getNPC().getOrAddTrait(SleepTrait.class).setSleeping(null);
+ return;
+ }
+ NMS.sleep(player, false);
}
NMS.playAnimation(this, player, radius);
}
diff --git a/main/src/main/resources/messages_en.properties b/main/src/main/resources/messages_en.properties
index e0a9be1dd..63f709be6 100644
--- a/main/src/main/resources/messages_en.properties
+++ b/main/src/main/resources/messages_en.properties
@@ -65,6 +65,7 @@ citizens.commands.npc.command.command-added=Command [[{0}]] added with id [[{1}]
citizens.commands.npc.command.help=
Use the [[-l]] flag to make the command run on left click, [[-r]] on right click (default).
Set the per-player cooldown before the command can be used again using [[--cooldown]] (in [[seconds]]).
Set the server-wide cooldown in seconds using [[--gcooldown]].
[[--delay]] will wait the specified amount in [[ticks]] before executing the command.
[[--permissions]] will set the command to require specific permissions (separate multiple with commas).
[[--n]] will only let the player run the command that number of times.
Use [[-o]] to temporarily execute the command as an op and [[-p]] to run the command as the clicking player instead of the server.
To give the player temporary permissions instead of op, use [[/npc command permissions]].
Set the cost of each click with [[/npc command cost/expcost/itemcost]].
Commands can be executed one by one instead of all at once by using [[/npc command sequential]].
citizens.commands.npc.command.unknown-id=Unknown command id [[{0}]] for this NPC.
citizens.commands.npc.command.temporary-permissions-set=Temporary permissions set to [[{0}]].
+citizens.commands.npc.command.errors-cleared=Errors cleared for [[{0}]].
citizens.commands.npc.commands.sequential-set=Commands will now execute sequentially.
citizens.commands.npc.commands.sequential-unset=Commands will no longer execute sequentially.
citizens.commands.npc.commands.random-set=Commands will now execute at random.
diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java
index 0f77cc908..59c8995ea 100644
--- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java
+++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java
@@ -204,6 +204,8 @@ import net.minecraft.server.v1_10_R1.MobEffects;
import net.minecraft.server.v1_10_R1.NavigationAbstract;
import net.minecraft.server.v1_10_R1.NetworkManager;
import net.minecraft.server.v1_10_R1.Packet;
+import net.minecraft.server.v1_10_R1.PacketPlayOutAnimation;
+import net.minecraft.server.v1_10_R1.PacketPlayOutBed;
import net.minecraft.server.v1_10_R1.PacketPlayOutEntityTeleport;
import net.minecraft.server.v1_10_R1.PacketPlayOutOpenWindow;
import net.minecraft.server.v1_10_R1.PacketPlayOutPlayerInfo;
@@ -1172,6 +1174,19 @@ public class NMSImpl implements NMSBridge {
public void shutdown() {
}
+ @Override
+ public void sleep(Player entity, boolean sleep) {
+ EntityPlayer player = (EntityPlayer) getHandle(entity);
+ if (sleep) {
+ PacketPlayOutBed packet = new PacketPlayOutBed(player,
+ new BlockPosition((int) player.locX, (int) player.locY, (int) player.locZ));
+ sendPacketNearby(entity, entity.getLocation(), packet, 64);
+ } else {
+ PacketPlayOutAnimation packet = new PacketPlayOutAnimation(player, 2);
+ sendPacketNearby(entity, entity.getLocation(), packet, 64);
+ }
+ }
+
@Override
public boolean tick(org.bukkit.entity.Entity next) {
Entity entity = NMSImpl.getHandle(next);
diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerAnimationImpl.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerAnimationImpl.java
index e8ba9f0fa..d3ebd4d70 100644
--- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerAnimationImpl.java
+++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/PlayerAnimationImpl.java
@@ -7,12 +7,10 @@ import org.bukkit.entity.Player;
import com.google.common.collect.Maps;
import net.citizensnpcs.util.PlayerAnimation;
-import net.minecraft.server.v1_10_R1.BlockPosition;
import net.minecraft.server.v1_10_R1.EntityPlayer;
import net.minecraft.server.v1_10_R1.EnumHand;
import net.minecraft.server.v1_10_R1.Packet;
import net.minecraft.server.v1_10_R1.PacketPlayOutAnimation;
-import net.minecraft.server.v1_10_R1.PacketPlayOutBed;
import net.minecraft.server.v1_10_R1.PacketPlayOutEntityMetadata;
public class PlayerAnimationImpl {
@@ -24,11 +22,6 @@ public class PlayerAnimationImpl {
return;
}
switch (animation) {
- case SLEEP:
- PacketPlayOutBed packet = new PacketPlayOutBed(player,
- new BlockPosition((int) player.locX, (int) player.locY, (int) player.locZ));
- sendPacketNearby(packet, player, radius);
- break;
case SNEAK:
player.getBukkitEntity().setSneaking(true);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
@@ -50,9 +43,6 @@ public class PlayerAnimationImpl {
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
radius);
break;
- case STOP_SLEEPING:
- playDefaultAnimation(player, radius, 2);
- break;
case STOP_SNEAKING:
player.getBukkitEntity().setSneaking(false);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java
index 8c877f1c6..c095d550b 100644
--- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java
+++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java
@@ -222,6 +222,8 @@ import net.minecraft.server.v1_11_R1.MobEffects;
import net.minecraft.server.v1_11_R1.NavigationAbstract;
import net.minecraft.server.v1_11_R1.NetworkManager;
import net.minecraft.server.v1_11_R1.Packet;
+import net.minecraft.server.v1_11_R1.PacketPlayOutAnimation;
+import net.minecraft.server.v1_11_R1.PacketPlayOutBed;
import net.minecraft.server.v1_11_R1.PacketPlayOutEntityTeleport;
import net.minecraft.server.v1_11_R1.PacketPlayOutOpenWindow;
import net.minecraft.server.v1_11_R1.PacketPlayOutPlayerInfo;
@@ -1236,6 +1238,19 @@ public class NMSImpl implements NMSBridge {
}
}
+ @Override
+ public void sleep(Player entity, boolean sleep) {
+ EntityPlayer player = (EntityPlayer) getHandle(entity);
+ if (sleep) {
+ PacketPlayOutBed packet = new PacketPlayOutBed(player,
+ new BlockPosition((int) player.locX, (int) player.locY, (int) player.locZ));
+ sendPacketNearby(entity, entity.getLocation(), packet, 64);
+ } else {
+ PacketPlayOutAnimation packet = new PacketPlayOutAnimation(player, 2);
+ sendPacketNearby(entity, entity.getLocation(), packet, 64);
+ }
+ }
+
@Override
public boolean tick(org.bukkit.entity.Entity next) {
Entity entity = NMSImpl.getHandle(next);
diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/PlayerAnimationImpl.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/PlayerAnimationImpl.java
index 42009736b..dfe1a6b75 100644
--- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/PlayerAnimationImpl.java
+++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/PlayerAnimationImpl.java
@@ -7,12 +7,10 @@ import org.bukkit.entity.Player;
import com.google.common.collect.Maps;
import net.citizensnpcs.util.PlayerAnimation;
-import net.minecraft.server.v1_11_R1.BlockPosition;
import net.minecraft.server.v1_11_R1.EntityPlayer;
import net.minecraft.server.v1_11_R1.EnumHand;
import net.minecraft.server.v1_11_R1.Packet;
import net.minecraft.server.v1_11_R1.PacketPlayOutAnimation;
-import net.minecraft.server.v1_11_R1.PacketPlayOutBed;
import net.minecraft.server.v1_11_R1.PacketPlayOutEntityMetadata;
public class PlayerAnimationImpl {
@@ -30,11 +28,6 @@ public class PlayerAnimationImpl {
case STOP_ELYTRA:
player.N();
break;
- case SLEEP:
- PacketPlayOutBed packet = new PacketPlayOutBed(player,
- new BlockPosition((int) player.locX, (int) player.locY, (int) player.locZ));
- sendPacketNearby(packet, player, radius);
- break;
case SNEAK:
player.getBukkitEntity().setSneaking(true);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
@@ -50,9 +43,6 @@ public class PlayerAnimationImpl {
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
radius);
break;
- case STOP_SLEEPING:
- playDefaultAnimation(player, radius, 2);
- break;
case STOP_SNEAKING:
player.getBukkitEntity().setSneaking(false);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java
index 6837cfbf6..b3d485844 100644
--- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java
+++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java
@@ -226,6 +226,8 @@ import net.minecraft.server.v1_12_R1.MobEffects;
import net.minecraft.server.v1_12_R1.NavigationAbstract;
import net.minecraft.server.v1_12_R1.NetworkManager;
import net.minecraft.server.v1_12_R1.Packet;
+import net.minecraft.server.v1_12_R1.PacketPlayOutAnimation;
+import net.minecraft.server.v1_12_R1.PacketPlayOutBed;
import net.minecraft.server.v1_12_R1.PacketPlayOutEntityTeleport;
import net.minecraft.server.v1_12_R1.PacketPlayOutOpenWindow;
import net.minecraft.server.v1_12_R1.PacketPlayOutPlayerInfo;
@@ -1246,6 +1248,19 @@ public class NMSImpl implements NMSBridge {
}
}
+ @Override
+ public void sleep(Player entity, boolean sleep) {
+ EntityPlayer player = (EntityPlayer) getHandle(entity);
+ if (sleep) {
+ PacketPlayOutBed packet = new PacketPlayOutBed(player,
+ new BlockPosition((int) player.locX, (int) player.locY, (int) player.locZ));
+ sendPacketNearby(entity, entity.getLocation(), packet, 64);
+ } else {
+ PacketPlayOutAnimation packet = new PacketPlayOutAnimation(player, 2);
+ sendPacketNearby(entity, entity.getLocation(), packet, 64);
+ }
+ }
+
@Override
public boolean tick(org.bukkit.entity.Entity next) {
Entity entity = NMSImpl.getHandle(next);
diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/PlayerAnimationImpl.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/PlayerAnimationImpl.java
index a40fed451..fea7be535 100644
--- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/PlayerAnimationImpl.java
+++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/PlayerAnimationImpl.java
@@ -7,12 +7,10 @@ import org.bukkit.entity.Player;
import com.google.common.collect.Maps;
import net.citizensnpcs.util.PlayerAnimation;
-import net.minecraft.server.v1_12_R1.BlockPosition;
import net.minecraft.server.v1_12_R1.EntityPlayer;
import net.minecraft.server.v1_12_R1.EnumHand;
import net.minecraft.server.v1_12_R1.Packet;
import net.minecraft.server.v1_12_R1.PacketPlayOutAnimation;
-import net.minecraft.server.v1_12_R1.PacketPlayOutBed;
import net.minecraft.server.v1_12_R1.PacketPlayOutEntityMetadata;
public class PlayerAnimationImpl {
@@ -24,11 +22,6 @@ public class PlayerAnimationImpl {
return;
}
switch (animation) {
- case SLEEP:
- PacketPlayOutBed packet = new PacketPlayOutBed(player,
- new BlockPosition((int) player.locX, (int) player.locY, (int) player.locZ));
- sendPacketNearby(packet, player, radius);
- break;
case SNEAK:
player.getBukkitEntity().setSneaking(true);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
@@ -50,9 +43,6 @@ public class PlayerAnimationImpl {
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
radius);
break;
- case STOP_SLEEPING:
- playDefaultAnimation(player, radius, 2);
- break;
case STOP_SNEAKING:
player.getBukkitEntity().setSneaking(false);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java
index 389ddc913..6ed16bb02 100644
--- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java
+++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java
@@ -244,6 +244,8 @@ import net.minecraft.server.v1_13_R2.MobEffects;
import net.minecraft.server.v1_13_R2.NavigationAbstract;
import net.minecraft.server.v1_13_R2.NetworkManager;
import net.minecraft.server.v1_13_R2.Packet;
+import net.minecraft.server.v1_13_R2.PacketPlayOutAnimation;
+import net.minecraft.server.v1_13_R2.PacketPlayOutBed;
import net.minecraft.server.v1_13_R2.PacketPlayOutEntityTeleport;
import net.minecraft.server.v1_13_R2.PacketPlayOutOpenWindow;
import net.minecraft.server.v1_13_R2.PacketPlayOutPlayerInfo;
@@ -1285,6 +1287,19 @@ public class NMSImpl implements NMSBridge {
}
}
+ @Override
+ public void sleep(Player entity, boolean sleep) {
+ EntityPlayer player = (EntityPlayer) getHandle(entity);
+ if (sleep) {
+ PacketPlayOutBed packet = new PacketPlayOutBed(player,
+ new BlockPosition((int) player.locX, (int) player.locY, (int) player.locZ));
+ sendPacketNearby(entity, entity.getLocation(), packet, 64);
+ } else {
+ PacketPlayOutAnimation packet = new PacketPlayOutAnimation(player, 2);
+ sendPacketNearby(entity, entity.getLocation(), packet, 64);
+ }
+ }
+
@Override
public boolean tick(org.bukkit.entity.Entity next) {
Entity entity = NMSImpl.getHandle(next);
@@ -1903,7 +1918,6 @@ public class NMSImpl implements NMSBridge {
private static final Method BLOCK_POSITION_B_D = NMS.getMethod(BlockPosition.PooledBlockPosition.class, "e", false,
double.class, double.class, double.class);
-
private static final Field CRAFT_BOSSBAR_HANDLE_FIELD = NMS.getField(CraftBossBar.class, "handle");
private static final float DEFAULT_SPEED = 1F;
private static final Field ENDERDRAGON_BATTLE_BAR_FIELD = NMS.getField(EnderDragonBattle.class, "c", false);
@@ -1926,6 +1940,7 @@ public class NMSImpl implements NMSBridge {
private static final MethodHandle REPAIR_INVENTORY = NMS.getGetter(ContainerAnvil.class, "repairInventory");
private static final MethodHandle RESULT_INVENTORY = NMS.getGetter(ContainerAnvil.class, "resultInventory");
private static Field SKULL_PROFILE_FIELD;
+
private static MethodHandle TEAM_FIELD;
private static Field TRACKED_ENTITY_SET = NMS.getField(EntityTracker.class, "c");
diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/PlayerAnimationImpl.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/PlayerAnimationImpl.java
index d24f7b7ef..95d8e9247 100644
--- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/PlayerAnimationImpl.java
+++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/PlayerAnimationImpl.java
@@ -7,12 +7,10 @@ import org.bukkit.entity.Player;
import com.google.common.collect.Maps;
import net.citizensnpcs.util.PlayerAnimation;
-import net.minecraft.server.v1_13_R2.BlockPosition;
import net.minecraft.server.v1_13_R2.EntityPlayer;
import net.minecraft.server.v1_13_R2.EnumHand;
import net.minecraft.server.v1_13_R2.Packet;
import net.minecraft.server.v1_13_R2.PacketPlayOutAnimation;
-import net.minecraft.server.v1_13_R2.PacketPlayOutBed;
import net.minecraft.server.v1_13_R2.PacketPlayOutEntityMetadata;
public class PlayerAnimationImpl {
@@ -24,11 +22,6 @@ public class PlayerAnimationImpl {
return;
}
switch (animation) {
- case SLEEP:
- PacketPlayOutBed packet = new PacketPlayOutBed(player,
- new BlockPosition((int) player.locX, (int) player.locY, (int) player.locZ));
- sendPacketNearby(packet, player, radius);
- break;
case SNEAK:
player.getBukkitEntity().setSneaking(true);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
@@ -50,9 +43,6 @@ public class PlayerAnimationImpl {
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
radius);
break;
- case STOP_SLEEPING:
- playDefaultAnimation(player, radius, 2);
- break;
case STOP_SNEAKING:
player.getBukkitEntity().setSneaking(false);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java
index a8937af7c..f749976db 100644
--- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java
+++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java
@@ -1344,6 +1344,15 @@ public class NMSImpl implements NMSBridge {
}
}
+ @Override
+ public void sleep(Player player, boolean sleep) {
+ try {
+ ENTITY_SETPOSE_METHOD.invoke(player, sleep ? EntityPose.SLEEPING : EntityPose.STANDING);
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+ }
+
@Override
public boolean tick(org.bukkit.entity.Entity next) {
Entity entity = NMSImpl.getHandle(next);
@@ -2075,6 +2084,7 @@ public class NMSImpl implements NMSBridge {
EntityType.PHANTOM);
private static final MethodHandle BEHAVIOR_MAP = NMS.getGetter(BehaviorController.class, "c");
+
private static final MethodHandle BLOCK_POSITION_B_D = NMS.getMethodHandle(BlockPosition.PooledBlockPosition.class,
"c", false, double.class, double.class, double.class);
private static final MethodHandle BUKKITENTITY_FIELD_SETTER = NMS.getSetter(Entity.class, "bukkitEntity");
@@ -2092,6 +2102,8 @@ public class NMSImpl implements NMSBridge {
private static CustomEntityRegistry ENTITY_REGISTRY;
private static final MethodHandle ENTITY_SETPOSE = NMS.getMethodHandle(Entity.class, "setPose", false,
EntityPose.class);
+ private static final MethodHandle ENTITY_SETPOSE_METHOD = NMS.getMethodHandle(Entity.class, "setPose", true,
+ EntityPose.class);
private static final Location FROM_LOCATION = new Location(null, 0, 0, 0);
private static final MethodHandle GOAL_FIELD = NMS.getGetter(PathfinderGoalSelector.class, "d");
private static final MethodHandle HEAD_HEIGHT = NMS.getSetter(Entity.class, "headHeight");
diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/PlayerAnimationImpl.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/PlayerAnimationImpl.java
index 087a90cfd..7070964b0 100644
--- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/PlayerAnimationImpl.java
+++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/PlayerAnimationImpl.java
@@ -1,17 +1,13 @@
package net.citizensnpcs.nms.v1_14_R1.util;
-import java.lang.invoke.MethodHandle;
import java.util.EnumMap;
import org.bukkit.entity.Player;
import com.google.common.collect.Maps;
-import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.PlayerAnimation;
-import net.minecraft.server.v1_14_R1.Entity;
import net.minecraft.server.v1_14_R1.EntityPlayer;
-import net.minecraft.server.v1_14_R1.EntityPose;
import net.minecraft.server.v1_14_R1.EnumHand;
import net.minecraft.server.v1_14_R1.Packet;
import net.minecraft.server.v1_14_R1.PacketPlayOutAnimation;
@@ -25,13 +21,6 @@ public class PlayerAnimationImpl {
return;
}
switch (animation) {
- case SLEEP:
- try {
- ENTITY_SETPOSE_METHOD.invoke(player, EntityPose.SLEEPING);
- } catch (Throwable e) {
- e.printStackTrace();
- }
- break;
case SNEAK:
player.getBukkitEntity().setSneaking(true);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
@@ -53,13 +42,6 @@ public class PlayerAnimationImpl {
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
radius);
break;
- case STOP_SLEEPING:
- try {
- ENTITY_SETPOSE_METHOD.invoke(player, EntityPose.STANDING);
- } catch (Throwable e) {
- e.printStackTrace();
- }
- break;
case STOP_SNEAKING:
player.getBukkitEntity().setSneaking(false);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
@@ -85,8 +67,6 @@ public class PlayerAnimationImpl {
}
private static EnumMap DEFAULTS = Maps.newEnumMap(PlayerAnimation.class);
- private static final MethodHandle ENTITY_SETPOSE_METHOD = NMS.getMethodHandle(Entity.class, "setPose", true,
- EntityPose.class);
static {
DEFAULTS.put(PlayerAnimation.ARM_SWING, 0);
DEFAULTS.put(PlayerAnimation.HURT, 1);
diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java
index 56dd81675..bc1c749e5 100644
--- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java
+++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java
@@ -1383,6 +1383,15 @@ public class NMSImpl implements NMSBridge {
}
}
+ @Override
+ public void sleep(Player player, boolean sleep) {
+ try {
+ ENTITY_SETPOSE_METHOD.invoke(player, sleep ? EntityPose.SLEEPING : EntityPose.STANDING);
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+ }
+
@Override
public boolean tick(org.bukkit.entity.Entity next) {
Entity entity = NMSImpl.getHandle(next);
@@ -2155,6 +2164,7 @@ public class NMSImpl implements NMSBridge {
private static final MethodHandle CHUNKMAP_UPDATE_PLAYER_STATUS = NMS.getMethodHandle(PlayerChunkMap.class, "a",
true, EntityPlayer.class, boolean.class);
+
private static final Map, EntityTypes>> CITIZENS_ENTITY_TYPES = Maps.newHashMap();
private static final MethodHandle CRAFT_BOSSBAR_HANDLE_FIELD = NMS.getSetter(CraftBossBar.class, "handle");
private static final float DEFAULT_SPEED = 1F;
@@ -2167,6 +2177,8 @@ public class NMSImpl implements NMSBridge {
private static CustomEntityRegistry ENTITY_REGISTRY;
private static final MethodHandle ENTITY_SETPOSE = NMS.getMethodHandle(Entity.class, "setPose", false,
EntityPose.class);
+ private static final MethodHandle ENTITY_SETPOSE_METHOD = NMS.getMethodHandle(Entity.class, "setPose", true,
+ EntityPose.class);
private static final MethodHandle FLYING_MOVECONTROL_FLOAT_GETTER = NMS.getFirstGetter(ControllerMoveFlying.class,
boolean.class);
private static final MethodHandle FLYING_MOVECONTROL_FLOAT_SETTER = NMS.getFirstSetter(ControllerMoveFlying.class,
diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/PlayerAnimationImpl.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/PlayerAnimationImpl.java
index 76b17ca73..a537aa29d 100644
--- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/PlayerAnimationImpl.java
+++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/PlayerAnimationImpl.java
@@ -1,17 +1,13 @@
package net.citizensnpcs.nms.v1_15_R1.util;
-import java.lang.invoke.MethodHandle;
import java.util.EnumMap;
import org.bukkit.entity.Player;
import com.google.common.collect.Maps;
-import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.PlayerAnimation;
-import net.minecraft.server.v1_15_R1.Entity;
import net.minecraft.server.v1_15_R1.EntityPlayer;
-import net.minecraft.server.v1_15_R1.EntityPose;
import net.minecraft.server.v1_15_R1.EnumHand;
import net.minecraft.server.v1_15_R1.Packet;
import net.minecraft.server.v1_15_R1.PacketPlayOutAnimation;
@@ -25,13 +21,6 @@ public class PlayerAnimationImpl {
return;
}
switch (animation) {
- case SLEEP:
- try {
- ENTITY_SETPOSE_METHOD.invoke(player, EntityPose.SLEEPING);
- } catch (Throwable e) {
- e.printStackTrace();
- }
- break;
case SNEAK:
player.getBukkitEntity().setSneaking(true);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
@@ -53,13 +42,6 @@ public class PlayerAnimationImpl {
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
radius);
break;
- case STOP_SLEEPING:
- try {
- ENTITY_SETPOSE_METHOD.invoke(player, EntityPose.STANDING);
- } catch (Throwable e) {
- e.printStackTrace();
- }
- break;
case STOP_SNEAKING:
player.getBukkitEntity().setSneaking(false);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
@@ -85,8 +67,7 @@ public class PlayerAnimationImpl {
}
private static EnumMap DEFAULTS = Maps.newEnumMap(PlayerAnimation.class);
- private static final MethodHandle ENTITY_SETPOSE_METHOD = NMS.getMethodHandle(Entity.class, "setPose", true,
- EntityPose.class);
+
static {
DEFAULTS.put(PlayerAnimation.ARM_SWING, 0);
DEFAULTS.put(PlayerAnimation.HURT, 1);
diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java
index 8486b11b4..cf4ba7a4e 100644
--- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java
+++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java
@@ -1406,6 +1406,15 @@ public class NMSImpl implements NMSBridge {
}
}
+ @Override
+ public void sleep(Player player, boolean sleep) {
+ try {
+ ENTITY_SETPOSE_METHOD.invoke(player, sleep ? EntityPose.SLEEPING : EntityPose.STANDING);
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+ }
+
@Override
public boolean tick(org.bukkit.entity.Entity next) {
Entity entity = NMSImpl.getHandle(next);
@@ -2130,7 +2139,6 @@ public class NMSImpl implements NMSBridge {
EntityType.SHULKER, EntityType.PHANTOM);
private static final MethodHandle BEHAVIOR_MAP = NMS.getGetter(BehaviorController.class, "e");
-
private static final MethodHandle BUKKITENTITY_FIELD_SETTER = NMS.getSetter(Entity.class, "bukkitEntity");
private static final MethodHandle CHUNKMAP_UPDATE_PLAYER_STATUS = NMS.getMethodHandle(PlayerChunkMap.class, "a",
true, EntityPlayer.class, boolean.class);
@@ -2145,6 +2153,8 @@ public class NMSImpl implements NMSBridge {
private static final MethodHandle ENTITY_GET_SOUND_FALL = NMS.getMethodHandle(EntityLiving.class, "getSoundFall",
true, int.class);
private static CustomEntityRegistry ENTITY_REGISTRY;
+ private static final MethodHandle ENTITY_SETPOSE_METHOD = NMS.getMethodHandle(Entity.class, "setPose", true,
+ EntityPose.class);
private static final MethodHandle FISHING_HOOK_HOOKED = NMS.getGetter(EntityFishingHook.class, "hooked");
private static final MethodHandle FISHING_HOOK_HOOKED_SETTER = NMS.getSetter(EntityFishingHook.class, "hooked");
private static final MethodHandle FLYING_MOVECONTROL_FLOAT_GETTER = NMS.getFirstGetter(ControllerMoveFlying.class,
@@ -2175,13 +2185,9 @@ public class NMSImpl implements NMSBridge {
private static final Random RANDOM = Util.getFastRandom();
private static final MethodHandle SIZE_FIELD_GETTER = NMS.getGetter(Entity.class, "size");
private static final MethodHandle SIZE_FIELD_SETTER = NMS.getSetter(Entity.class, "size");
-
private static Field SKULL_PROFILE_FIELD;
-
private static MethodHandle SOUNDEFFECT_KEY = NMS.getGetter(SoundEffect.class, "b");
-
private static MethodHandle TEAM_FIELD;
-
static {
try {
ENTITY_REGISTRY = new CustomEntityRegistry(
diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/PlayerAnimationImpl.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/PlayerAnimationImpl.java
index a84f0710a..b8dceb855 100644
--- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/PlayerAnimationImpl.java
+++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/PlayerAnimationImpl.java
@@ -1,17 +1,13 @@
package net.citizensnpcs.nms.v1_16_R3.util;
-import java.lang.invoke.MethodHandle;
import java.util.EnumMap;
import org.bukkit.entity.Player;
import com.google.common.collect.Maps;
-import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.PlayerAnimation;
-import net.minecraft.server.v1_16_R3.Entity;
import net.minecraft.server.v1_16_R3.EntityPlayer;
-import net.minecraft.server.v1_16_R3.EntityPose;
import net.minecraft.server.v1_16_R3.EnumHand;
import net.minecraft.server.v1_16_R3.Packet;
import net.minecraft.server.v1_16_R3.PacketPlayOutAnimation;
@@ -25,13 +21,6 @@ public class PlayerAnimationImpl {
return;
}
switch (animation) {
- case SLEEP:
- try {
- ENTITY_SETPOSE_METHOD.invoke(player, EntityPose.SLEEPING);
- } catch (Throwable e) {
- e.printStackTrace();
- }
- break;
case SNEAK:
player.getBukkitEntity().setSneaking(true);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
@@ -53,13 +42,6 @@ public class PlayerAnimationImpl {
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
radius);
break;
- case STOP_SLEEPING:
- try {
- ENTITY_SETPOSE_METHOD.invoke(player, EntityPose.STANDING);
- } catch (Throwable e) {
- e.printStackTrace();
- }
- break;
case STOP_SNEAKING:
player.getBukkitEntity().setSneaking(false);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
@@ -85,8 +67,6 @@ public class PlayerAnimationImpl {
}
private static EnumMap DEFAULTS = Maps.newEnumMap(PlayerAnimation.class);
- private static final MethodHandle ENTITY_SETPOSE_METHOD = NMS.getMethodHandle(Entity.class, "setPose", true,
- EntityPose.class);
static {
DEFAULTS.put(PlayerAnimation.ARM_SWING, 0);
DEFAULTS.put(PlayerAnimation.HURT, 1);
diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java
index fd67814a7..a49d0856e 100644
--- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java
+++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java
@@ -1400,6 +1400,11 @@ public class NMSImpl implements NMSBridge {
}
}
+ @Override
+ public void sleep(org.bukkit.entity.Player player, boolean sleeping) {
+ getHandle(player).setPose(sleeping ? Pose.SLEEPING : Pose.STANDING);
+ }
+
@Override
public boolean tick(org.bukkit.entity.Entity next) {
Entity entity = NMSImpl.getHandle(next);
diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/PlayerAnimationImpl.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/PlayerAnimationImpl.java
index c6550fc2d..0316f1f55 100644
--- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/PlayerAnimationImpl.java
+++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/PlayerAnimationImpl.java
@@ -12,7 +12,6 @@ import net.minecraft.network.protocol.game.ClientboundAnimatePacket;
import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
-import net.minecraft.world.entity.Pose;
public class PlayerAnimationImpl {
public static void play(PlayerAnimation animation, Player bplayer, int radius) {
@@ -22,9 +21,6 @@ public class PlayerAnimationImpl {
return;
}
switch (animation) {
- case SLEEP:
- player.setPose(Pose.SLEEPING);
- break;
case SNEAK:
player.getBukkitEntity().setSneaking(true);
sendPacketNearby(new ClientboundSetEntityDataPacket(player.getId(), player.getEntityData(), true),
@@ -46,9 +42,6 @@ public class PlayerAnimationImpl {
sendPacketNearby(new ClientboundSetEntityDataPacket(player.getId(), player.getEntityData(), true),
player, radius);
break;
- case STOP_SLEEPING:
- player.setPose(Pose.STANDING);
- break;
case STOP_SNEAKING:
player.getBukkitEntity().setSneaking(false);
sendPacketNearby(new ClientboundSetEntityDataPacket(player.getId(), player.getEntityData(), true),
diff --git a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java
index 6ad5c596e..c375bf406 100644
--- a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java
+++ b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java
@@ -1407,6 +1407,11 @@ public class NMSImpl implements NMSBridge {
}
}
+ @Override
+ public void sleep(org.bukkit.entity.Player player, boolean sleeping) {
+ getHandle(player).setPose(sleeping ? Pose.SLEEPING : Pose.STANDING);
+ }
+
@Override
public boolean tick(org.bukkit.entity.Entity next) {
Entity entity = NMSImpl.getHandle(next);
diff --git a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/PlayerAnimationImpl.java b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/PlayerAnimationImpl.java
index 280257495..f1354172f 100644
--- a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/PlayerAnimationImpl.java
+++ b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/PlayerAnimationImpl.java
@@ -12,7 +12,6 @@ import net.minecraft.network.protocol.game.ClientboundAnimatePacket;
import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
-import net.minecraft.world.entity.Pose;
public class PlayerAnimationImpl {
public static void play(PlayerAnimation animation, Player bplayer, int radius) {
@@ -22,9 +21,6 @@ public class PlayerAnimationImpl {
return;
}
switch (animation) {
- case SLEEP:
- player.setPose(Pose.SLEEPING);
- break;
case SNEAK:
player.getBukkitEntity().setSneaking(true);
sendPacketNearby(new ClientboundSetEntityDataPacket(player.getId(), player.getEntityData(), true),
@@ -46,9 +42,6 @@ public class PlayerAnimationImpl {
sendPacketNearby(new ClientboundSetEntityDataPacket(player.getId(), player.getEntityData(), true),
player, radius);
break;
- case STOP_SLEEPING:
- player.setPose(Pose.STANDING);
- break;
case STOP_SNEAKING:
player.getBukkitEntity().setSneaking(false);
sendPacketNearby(new ClientboundSetEntityDataPacket(player.getId(), player.getEntityData(), true),
diff --git a/v1_19_R1/src/main/java/net/citizensnpcs/nms/v1_19_R1/util/NMSImpl.java b/v1_19_R1/src/main/java/net/citizensnpcs/nms/v1_19_R1/util/NMSImpl.java
index db66ddd92..257559564 100644
--- a/v1_19_R1/src/main/java/net/citizensnpcs/nms/v1_19_R1/util/NMSImpl.java
+++ b/v1_19_R1/src/main/java/net/citizensnpcs/nms/v1_19_R1/util/NMSImpl.java
@@ -1427,6 +1427,11 @@ public class NMSImpl implements NMSBridge {
}
}
+ @Override
+ public void sleep(org.bukkit.entity.Player player, boolean sleeping) {
+ getHandle(player).setPose(sleeping ? Pose.SLEEPING : Pose.STANDING);
+ }
+
@Override
public boolean tick(org.bukkit.entity.Entity next) {
Entity entity = NMSImpl.getHandle(next);
diff --git a/v1_19_R1/src/main/java/net/citizensnpcs/nms/v1_19_R1/util/PlayerAnimationImpl.java b/v1_19_R1/src/main/java/net/citizensnpcs/nms/v1_19_R1/util/PlayerAnimationImpl.java
index e4b302ca5..1b18d922f 100644
--- a/v1_19_R1/src/main/java/net/citizensnpcs/nms/v1_19_R1/util/PlayerAnimationImpl.java
+++ b/v1_19_R1/src/main/java/net/citizensnpcs/nms/v1_19_R1/util/PlayerAnimationImpl.java
@@ -12,7 +12,6 @@ import net.minecraft.network.protocol.game.ClientboundAnimatePacket;
import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
-import net.minecraft.world.entity.Pose;
public class PlayerAnimationImpl {
public static void play(PlayerAnimation animation, Player bplayer, int radius) {
@@ -22,9 +21,6 @@ public class PlayerAnimationImpl {
return;
}
switch (animation) {
- case SLEEP:
- player.setPose(Pose.SLEEPING);
- break;
case SNEAK:
player.getBukkitEntity().setSneaking(true);
sendPacketNearby(new ClientboundSetEntityDataPacket(player.getId(), player.getEntityData(), true),
@@ -46,9 +42,6 @@ public class PlayerAnimationImpl {
sendPacketNearby(new ClientboundSetEntityDataPacket(player.getId(), player.getEntityData(), true),
player, radius);
break;
- case STOP_SLEEPING:
- player.setPose(Pose.STANDING);
- break;
case STOP_SNEAKING:
player.getBukkitEntity().setSneaking(false);
sendPacketNearby(new ClientboundSetEntityDataPacket(player.getId(), player.getEntityData(), true),
diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java
index 42d9a0624..d086d1c9a 100644
--- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java
+++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java
@@ -181,6 +181,8 @@ import net.minecraft.server.v1_8_R3.Navigation;
import net.minecraft.server.v1_8_R3.NavigationAbstract;
import net.minecraft.server.v1_8_R3.NetworkManager;
import net.minecraft.server.v1_8_R3.Packet;
+import net.minecraft.server.v1_8_R3.PacketPlayOutAnimation;
+import net.minecraft.server.v1_8_R3.PacketPlayOutBed;
import net.minecraft.server.v1_8_R3.PacketPlayOutEntityTeleport;
import net.minecraft.server.v1_8_R3.PacketPlayOutOpenWindow;
import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo;
@@ -1126,6 +1128,19 @@ public class NMSImpl implements NMSBridge {
public void shutdown() {
}
+ @Override
+ public void sleep(Player entity, boolean sleep) {
+ EntityPlayer player = (EntityPlayer) getHandle(entity);
+ if (sleep) {
+ PacketPlayOutBed packet = new PacketPlayOutBed(player,
+ new BlockPosition((int) player.locX, (int) player.locY, (int) player.locZ));
+ sendPacketNearby(entity, entity.getLocation(), packet, 64);
+ } else {
+ PacketPlayOutAnimation packet = new PacketPlayOutAnimation(player, 2);
+ sendPacketNearby(entity, entity.getLocation(), packet, 64);
+ }
+ }
+
@Override
public boolean tick(org.bukkit.entity.Entity next) {
Entity entity = NMSImpl.getHandle(next);
diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/PlayerAnimationImpl.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/PlayerAnimationImpl.java
index 78a8118ea..57a678178 100644
--- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/PlayerAnimationImpl.java
+++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/PlayerAnimationImpl.java
@@ -7,11 +7,9 @@ import org.bukkit.entity.Player;
import com.google.common.collect.Maps;
import net.citizensnpcs.util.PlayerAnimation;
-import net.minecraft.server.v1_8_R3.BlockPosition;
import net.minecraft.server.v1_8_R3.EntityPlayer;
import net.minecraft.server.v1_8_R3.Packet;
import net.minecraft.server.v1_8_R3.PacketPlayOutAnimation;
-import net.minecraft.server.v1_8_R3.PacketPlayOutBed;
import net.minecraft.server.v1_8_R3.PacketPlayOutEntityMetadata;
public class PlayerAnimationImpl {
@@ -23,19 +21,11 @@ public class PlayerAnimationImpl {
return;
}
switch (animation) {
- case SLEEP:
- PacketPlayOutBed packet = new PacketPlayOutBed(player,
- new BlockPosition((int) player.locX, (int) player.locY, (int) player.locZ));
- sendPacketNearby(packet, player, radius);
- break;
case SNEAK:
player.getBukkitEntity().setSneaking(true);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
radius);
break;
- case STOP_SLEEPING:
- playDefaultAnimation(player, radius, 2);
- break;
case STOP_SNEAKING:
player.getBukkitEntity().setSneaking(false);
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,