From 6a499c8589abd6f44e49d02339aa2fa503a377b1 Mon Sep 17 00:00:00 2001 From: feildmaster Date: Sat, 19 Jan 2013 00:39:56 -0600 Subject: [PATCH] Fix broken null contract with Jukebox.setPlaying, Fixes BUKKIT-3429 The javadocs state that a null may be used to remove the currently playing sound, however this causes a NullPointerException. It also doesn't process registering the record correctly, along with processing non-valid items. --- .../org/bukkit/craftbukkit/block/CraftJukebox.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java b/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java index e37734c355..c6ac158906 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java @@ -23,14 +23,20 @@ public class CraftJukebox extends CraftBlockState implements Jukebox { } public Material getPlaying() { - return Material.getMaterial(jukebox.record.id); + ItemStack record = jukebox.record; + if (record == null) { + return Material.AIR; + } + return Material.getMaterial(record.id); } public void setPlaying(Material record) { - if (record == null) { + if (record == null || Item.byId[record.getId()] == null) { record = Material.AIR; + jukebox.record = null; + } else { + jukebox.record = new ItemStack(Item.byId[record.getId()], 1); } - jukebox.record = new ItemStack(Item.byId[record.getId()], 1); jukebox.update(); if (record == Material.AIR) { world.getHandle().setData(getX(), getY(), getZ(), 0);