From 80c2fc68aae23e11b190c681a9c77a526ec22c1c Mon Sep 17 00:00:00 2001 From: ToadDev <748280+Toad-Dev@users.noreply.github.com> Date: Thu, 3 Jun 2021 21:54:28 -0700 Subject: [PATCH] Fix crash playing a music disc from drive on server. #48 --- .../fabric/mixin/MusicDiscItemAccessor.java | 12 ++++++++++++ .../shared/media/items/RecordMedia.java | 7 ++++++- src/main/resources/computercraft.mixins.json | 3 ++- 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 src/main/java/dan200/computercraft/fabric/mixin/MusicDiscItemAccessor.java 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",