mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2025-02-16 12:21:25 +01:00
Add SleepTrait
This commit is contained in:
parent
353699fe80
commit
f8cdbc4515
@ -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);
|
||||
|
@ -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));
|
||||
|
59
main/src/main/java/net/citizensnpcs/trait/SleepTrait.java
Normal file
59
main/src/main/java/net/citizensnpcs/trait/SleepTrait.java
Normal file
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
@ -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";
|
||||
|
@ -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 {
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -65,6 +65,7 @@ citizens.commands.npc.command.command-added=Command [[{0}]] added with id [[{1}]
|
||||
citizens.commands.npc.command.help=<br>Use the [[-l]] flag to make the command run on left click, [[-r]] on right click (default).<br>Set the per-player cooldown before the command can be used again using [[--cooldown]] (in [[seconds]]).<br>Set the server-wide cooldown in seconds using [[--gcooldown]].<br>[[--delay]] will wait the specified amount in [[ticks]] before executing the command.<br>[[--permissions]] will set the command to require specific permissions (separate multiple with commas).<br>[[--n]] will only let the player run the command that number of times.<br>Use [[-o]] to temporarily execute the command as an op and [[-p]] to run the command as the clicking player instead of the server.<br>To give the player temporary permissions instead of op, use [[/npc command permissions]].<br>Set the cost of each click with [[/npc command cost/expcost/itemcost]].<br>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.
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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");
|
||||
|
@ -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,
|
||||
|
@ -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");
|
||||
|
@ -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<PlayerAnimation, Integer> 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);
|
||||
|
@ -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<Class<?>, 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,
|
||||
|
@ -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<PlayerAnimation, Integer> 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);
|
||||
|
@ -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(
|
||||
|
@ -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<PlayerAnimation, Integer> 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);
|
||||
|
@ -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);
|
||||
|
@ -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),
|
||||
|
@ -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);
|
||||
|
@ -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),
|
||||
|
@ -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);
|
||||
|
@ -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),
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user