package net.glowstone.block.state; import net.glowstone.block.GlowBlock; import net.glowstone.block.GlowBlockState; import net.glowstone.block.entity.TEJukebox; import net.glowstone.entity.GlowPlayer; import org.bukkit.Effect; import org.bukkit.Material; import org.bukkit.block.Jukebox; import org.bukkit.inventory.ItemStack; import java.util.Collection; public class GlowJukebox extends GlowBlockState implements Jukebox { private ItemStack playing; public GlowJukebox(GlowBlock block) { super(block); if (block.getType() != Material.JUKEBOX) { throw new IllegalArgumentException("GlowNoteBlock: expected JUKEBOX, got " + block.getType()); } this.playing = getTileEntity().getPlaying(); } private TEJukebox getTileEntity() { return (TEJukebox) getBlock().getTileEntity(); } @Override public boolean update(boolean force, boolean applyPhysics) { boolean result = super.update(force, applyPhysics); if (result) { getTileEntity().setPlaying(this.playing); } return result; } public ItemStack getPlayingItem() { return this.playing; } //////////////////////////////////////////////////////////////////////////// // Implementation @Override public Material getPlaying() { return this.playing.getType(); } @Override public void setPlaying(Material record) { int id = 0; if (record == null || record == Material.AIR) { this.playing = null; } else { this.playing = new ItemStack(record); id = record.getId(); } Collection<GlowPlayer> players = getWorld().getRawPlayers(); for (GlowPlayer player : players) { player.playEffect(getLocation(), Effect.RECORD_PLAY, id); } this.setRawData((byte) (id > 0 ? 1 : 0)); } @Override public boolean isPlaying() { return getRawData() == 1; } @Override public boolean eject() { if (isPlaying()) { getWorld().dropItemNaturally(getLocation(), this.playing); setPlaying(null); return true; } return false; } }