cn.nukkit.blockentity.BlockEntitySpawnable Maven / Gradle / Ivy
package cn.nukkit.blockentity;
import cn.nukkit.Player;
import cn.nukkit.api.PowerNukkitOnly;
import cn.nukkit.level.format.FullChunk;
import cn.nukkit.nbt.NBTIO;
import cn.nukkit.nbt.tag.CompoundTag;
import cn.nukkit.network.protocol.BlockEntityDataPacket;
import java.io.IOException;
import java.nio.ByteOrder;
/**
* @author MagicDroidX (Nukkit Project)
*/
public abstract class BlockEntitySpawnable extends BlockEntity {
public BlockEntitySpawnable(FullChunk chunk, CompoundTag nbt) {
super(chunk, nbt);
}
@Override
protected void initBlockEntity() {
super.initBlockEntity();
this.spawnToAll();
}
public CompoundTag getSpawnCompound() {
return this.namedTag;
}
public void spawnTo(Player player) {
if (this.closed) {
return;
}
player.dataPacket(getSpawnPacket());
}
@PowerNukkitOnly
public BlockEntityDataPacket getSpawnPacket() {
return getSpawnPacket(null);
}
@PowerNukkitOnly
public BlockEntityDataPacket getSpawnPacket(CompoundTag nbt) {
if (nbt == null) {
nbt = this.getSpawnCompound();
}
BlockEntityDataPacket pk = new BlockEntityDataPacket();
pk.x = (int) this.x;
pk.y = (int) this.y;
pk.z = (int) this.z;
try {
pk.namedTag = NBTIO.write(nbt, ByteOrder.LITTLE_ENDIAN, true);
} catch (IOException e) {
throw new RuntimeException(e);
}
return pk;
}
public void spawnToAll() {
if (this.closed) {
return;
}
for (Player player : this.getLevel().getChunkPlayers(this.chunk.getX(), this.chunk.getZ()).values()) {
if (player.spawned) {
this.spawnTo(player);
}
}
}
/**
* Called when a player updates a block entity's NBT data
* for example when writing on a sign.
*
* @param nbt tag
* @param player player
* @return bool indication of success, will respawn the tile to the player if false.
*/
public boolean updateCompoundTag(CompoundTag nbt, Player player) {
return false;
}
}