Icefox Posted July 26, 2021 Posted July 26, 2021 (edited) I made a note block cover of Loki Green Theme from the Loki show by Marvel Studios. I was wanting to implement it into a mod. I went through the steps of making an item and registering a sound, but when I put the item in a jukebox, the sound does not play. public class ModSounds { static void register() { } public static final Lazy<SoundEvent> LOKI_THEME_DISC_LAZY = Lazy.of(() -> new SoundEvent(new ResourceLocation(MoreMusicDiscs.MOD_ID, "loki_green_theme"))); public static final RegistryObject<SoundEvent> LOKI_THEME_DISC = Registration.SOUNDS.register("loki_green_theme.disc", LOKI_THEME_DISC_LAZY); } ^^ the register method is called in my main method { "loki_green_theme": { "subtitle": "moremusicdiscs.subtitle.loki_green_theme", "sounds": [ { "name": "moremusicdiscs:disc/loki_green_theme", "stream": true } ] } } ^^ sounds.json file ^^ package presentation SOLVED- I made the directory that the sound file was in sounds.disc when I referenced the sound as sounds/disc. I simply had to change the directory to sounds/disc and it worked Edited July 27, 2021 by Icefox Solved Quote
Icefox Posted July 26, 2021 Author Posted July 26, 2021 15 hours ago, diesieben07 said: Why do you have a separate Lazy object for your SoundEvent? The RegistryObject you get from the DeferredRegister already provides this functionality. Do not put a DeferredRegister and its objects in separate classes. The "empty register method to ensure the class is loaded" is absolutely disgusting. Show the registration of your Item. public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MoreMusicDiscs.MOD_ID); public static final RegistryObject<Item> LOKI_THEME_DISC = ITEMS.register("loki_theme_disc", () -> new MusicDiscItem(1, () -> ModSounds.LOKI_THEME_DISC_LAZY.get(), new Item.Properties().group(MoreMusicDiscs.DISC_ITEM_GROUP).maxStackSize(1).group(MoreMusicDiscs.DISC_ITEM_GROUP))); I'm pretty sure I fixed what you mentioned. To be clear, I don't need the static void register event? I did think it was kinda weird in the tutorial I was watching, as static variables are supposed to load when the program starts (I think) Quote
poopoodice Posted July 27, 2021 Posted July 27, 2021 4 hours ago, Icefox said: as static variables are supposed to load when the program starts (I think) They are loaded upon the class is being used. So you need the "static void register event" there if you are doing this way, but it is not recommended 20 hours ago, diesieben07 said: The "empty register method to ensure the class is loaded" is absolutely disgusting Quote
Icefox Posted July 27, 2021 Author Posted July 27, 2021 7 hours ago, diesieben07 said: Looks ok (except for that lazy thing you are still using). Please post a Git repo. Got rid of Lazy object and used the RegistryObject in the item registration instead https://github.com/Ice922/More-Music-Discs Quote
Icefox Posted July 27, 2021 Author Posted July 27, 2021 13 minutes ago, diesieben07 said: Your sound is called "disc/loki_green_theme", but your sounds.json contains a sound called "loki_green_theme". oops, I assumed that it meant the location of the sound in the assets/sounds folder. Anyway, I changed the sounds event but I'm still getting nothing. Do I maybe have to assign a texture to the item before it can play a sound? public static final RegistryObject<SoundEvent> LOKI_THEME_DISC = SOUNDS.register("loki_green_theme", () -> new SoundEvent(new ResourceLocation(MoreMusicDiscs.MOD_ID, "loki_green_theme"))); Quote
Icefox Posted July 27, 2021 Author Posted July 27, 2021 17 minutes ago, diesieben07 said: Your sound file is located in assets/moremusicdiscs/sounds.disc/loki_green_theme.ogg. It should be in assets/moremusicdiscs/sounds/disc/loki_green_theme.ogg This fixed it! Thanks for all the help Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.