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,