Java Ender胸部打开和关闭动画
我想一个恩德胸部打开事件被取消,并显示打开和关闭时,右键单击动画。我目前的代码是:Java Ender胸部打开和关闭动画,java,plugins,minecraft,bukkit,Java,Plugins,Minecraft,Bukkit,我想一个恩德胸部打开事件被取消,并显示打开和关闭时,右键单击动画。我目前的代码是: public void changeChestState(Location loc, boolean open) { if (open) { for (Player p : Bukkit.getOnlinePlayers()) { p.playNote(loc, (byte) 1, (byte) 1); } } else {
public void changeChestState(Location loc, boolean open) {
if (open) {
for (Player p : Bukkit.getOnlinePlayers()) {
p.playNote(loc, (byte) 1, (byte) 1);
}
} else {
for (Player p : Bukkit.getOnlinePlayers()) {
p.playNote(loc, (byte) 1, (byte) 0);
}
}
}
当我右击胸部时,我听到声音,但没有动画发生。谢谢你的帮助 您可以向玩家发送一个
PacketPlayOutBlockAction
数据包,让玩家看到胸部的打开或关闭。此数据包用于显示音符粒子、活塞运动和胸部状态变化
您需要创建一个块位置
,并获取NMS块
(地雷船块的类型,在本例中为一个箱子)以及提供两个字节的数据。第一个字节不用于胸部动画,第二个字节表示胸部状态的变化,0表示关闭,1表示打开。下面是重写的方法,以同时显示相应的动画
@SuppressWarnings("deprecation")
public static void changeChestState(Location loc, boolean open) {
byte dataByte = (open) ? (byte) 1 : 0; // The byte of data used for the note and animation packet (1 if true, 0 if false)
for (Player player : Bukkit.getOnlinePlayers()) {
player.playNote(loc, (byte) 1, dataByte); // Play the sound
BlockPosition position = new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); // Create the block position using loc
// Instantiate animation packet, get NMS Block using getById() and loc.getBlock() (deprecated), the server version may vary
PacketPlayOutBlockAction blockActionPacket = new PacketPlayOutBlockAction(position, net.minecraft.server.v1_8_R3.Block.getById(loc.getBlock().getTypeId()), (byte) 1, dataByte);
((CraftPlayer) player).getHandle().playerConnection.sendPacket(blockActionPacket); // Send animation packet to CraftPlayer
}
}
您可以向播放器发送一个
PacketPlayOutBlockAction
数据包,让玩家看到胸部的打开或关闭。此数据包用于显示音符粒子、活塞运动和胸部状态变化
您需要创建一个块位置
,并获取NMS块
(地雷船块的类型,在本例中为一个箱子)以及提供两个字节的数据。第一个字节不用于胸部动画,第二个字节表示胸部状态的变化,0表示关闭,1表示打开。下面是重写的方法,以同时显示相应的动画
@SuppressWarnings("deprecation")
public static void changeChestState(Location loc, boolean open) {
byte dataByte = (open) ? (byte) 1 : 0; // The byte of data used for the note and animation packet (1 if true, 0 if false)
for (Player player : Bukkit.getOnlinePlayers()) {
player.playNote(loc, (byte) 1, dataByte); // Play the sound
BlockPosition position = new BlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); // Create the block position using loc
// Instantiate animation packet, get NMS Block using getById() and loc.getBlock() (deprecated), the server version may vary
PacketPlayOutBlockAction blockActionPacket = new PacketPlayOutBlockAction(position, net.minecraft.server.v1_8_R3.Block.getById(loc.getBlock().getTypeId()), (byte) 1, dataByte);
((CraftPlayer) player).getHandle().playerConnection.sendPacket(blockActionPacket); // Send animation packet to CraftPlayer
}
}
非常感谢你!这帮了大忙。太完美了!非常感谢你!这帮了大忙。太完美了!