diff --git a/src/main/java/dan200/computercraft/fabric/mixin/MusicDiscItemAccessor.java b/src/main/java/dan200/computercraft/fabric/mixin/MusicDiscItemAccessor.java new file mode 100644 index 000000000..77757a1ce --- /dev/null +++ b/src/main/java/dan200/computercraft/fabric/mixin/MusicDiscItemAccessor.java @@ -0,0 +1,12 @@ +package dan200.computercraft.fabric.mixin; + +import net.minecraft.item.MusicDiscItem; +import net.minecraft.sound.SoundEvent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(MusicDiscItem.class) +public interface MusicDiscItemAccessor { + @Accessor + SoundEvent getSound(); +} diff --git a/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java b/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java index 8fefda4c6..17c76ee1b 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java +++ b/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java @@ -10,6 +10,7 @@ import javax.annotation.Nonnull; import dan200.computercraft.api.media.IMedia; +import dan200.computercraft.fabric.mixin.MusicDiscItemAccessor; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.MusicDiscItem; @@ -42,6 +43,10 @@ public final class RecordMedia implements IMedia { @Override public SoundEvent getAudio(@Nonnull ItemStack stack) { - return ((MusicDiscItem) stack.getItem()).getSound(); + Item item = stack.getItem(); + if (!(item instanceof MusicDiscItem)) { + return null; + } + return ((MusicDiscItemAccessor) item).getSound(); } } diff --git a/src/main/resources/computercraft.mixins.json b/src/main/resources/computercraft.mixins.json index c9ae3995a..09a5bc326 100644 --- a/src/main/resources/computercraft.mixins.json +++ b/src/main/resources/computercraft.mixins.json @@ -11,7 +11,8 @@ "SignBlockEntityAccess", "SoundEventAccess", "WorldSavePathAccess", - "MixinServerPlayerInteractionManager" + "MixinServerPlayerInteractionManager", + "MusicDiscItemAccessor" ], "client": [ "AffineTransformationAccess",