Jump to content

[solved]Music discs with 1.6.2


burnner

Recommended Posts

GOT IT =D

 

Here's how:

 

Extend ItemRecord like...

public class ItemModDisc extends ItemRecord {

	public ItemModDisc(int id, String recordName) {
	super(id, recordName);
	this.setCreativeTab(CreativeTabs.tabMisc);
	this.maxStackSize = 1;
}
// Rest of your ItemRecord code...
}

 

Then to your main class, add your constructor with one change:

modDisc = (new ItemModDisc(modDiscID, "your_modname_lowercased:moddisc")).setUnlocalizedName("moddisc");

 

Put your ogg to the assets/your_modname_lowercased/records and keep the name same as above (so my custom

record is moddisc.ogg and path is then assets/my_mods_name/records/moddisc.ogg

And load it the the soundPoolStreaming (in your sound load event handler) for example like this:

 

event.manager.soundPoolStreaming.addSound("your_modname_lowercased:moddisc.ogg");

 

Note that you don't use folder records in handler because soundPoolStreaming is looking always from /assets/your_modname_lowercased/records

like soundPoolSounds is looking from /assets/your_modname_lowercased/sounds

 

And there it is, your custom record which works just fine =)

 

edit: Little clean up for code because I copy pasted it without removing unneeded lines...

Link to comment
Share on other sites

GOT IT =D

 

Here's how:

 

Extend ItemRecord like...

public class ItemModDisc extends ItemRecord {

public final String recordName;

	public ItemModDisc(int id, String recordName) {
	super(id, recordName);
	this.setCreativeTab(CreativeTabs.tabMisc);
	this.maxStackSize = 1;
	this.recordName = "moddisc";
}

 

Then to your main class, add your constructor with one change:

modDisc = (new ItemModDisc(modDiscID, "your_modname_lowercased:moddisc")).setUnlocalizedName("moddisc");

 

Put your ogg to the assets/your_modname_lowercased/records and keep the name same as above (so my custom

record is moddisc.ogg and path is then assets/my_mods_name/records/moddisc.ogg

And load it the the soundPoolStreaming (in your sound load event handler) for example like this:

 

event.manager.soundPoolStreaming.addSound("your_modname_lowercased:moddisc.ogg");

 

Note that you don't use folder records in handler because soundPoolStreaming is looking always from /assets/your_modname_lowercased/records

like soundPoolSounds is looking from /assets/your_modname_lowercased/sounds

 

And there it is, your custom record which works just fine =)

The jukebox accepts the disc, but this text is showing up (Now Playing: C418 - blablabla) and the sound doesn't play. I put the soundfile into /assets/myModid/records/.

↑↑↑↑↑↑↑↑↑↑ Click it please? :3 ↑↑↑↑↑↑↑↑↑↑

Link to comment
Share on other sites

You may want to change this:

@SideOnly(Side.CLIENT)

    /**
     * Return the title for this record.
     */
    public String getRecordTitle()
    {
        return "C418 - " + this.recordName;
    }

To whatever it is you want.

 

In your constructor, this is useless:

this.recordName = "moddisc";

because it is already done by the call to super(id, recordName);

 

You can also remove:

public final String recordName;

this field already exists in the parent class.

Link to comment
Share on other sites

You may want to change this:

@SideOnly(Side.CLIENT)

    /**
     * Return the title for this record.
     */
    public String getRecordTitle()
    {
        return "C418 - " + this.recordName;
    }

To whatever it is you want.

 

In your constructor, this is useless:

this.recordName = "moddisc";

because it is already done by the call to super(id, recordName);

 

You can also remove:

public final String recordName;

this field already exists in the parent class.

Thank you! The name is fixed now. But what about the sound not playing? I put the file into the right directory :/

↑↑↑↑↑↑↑↑↑↑ Click it please? :3 ↑↑↑↑↑↑↑↑↑↑

Link to comment
Share on other sites

Ok then.. double check your directory structure because you won't get any error message to the console if Minecraft

doesn't find your music file. Oh and another thing, I haven't tested any other formats than .ogg so I'm not sure about

other formats..

 

Edit: Hey...can I see your soundloader because the problem could be there?

Link to comment
Share on other sites

Registering of the SoundLoader in PreInit:

MinecraftForge.EVENT_BUS.register(new SoundHandler());

 

SoundHandler.java:

package MoreDimensions.handler;

import net.minecraft.client.audio.SoundManager;
import net.minecraftforge.client.event.sound.SoundLoadEvent;
import net.minecraftforge.event.ForgeSubscribe;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import MoreDimensions.MoreDimensions;

public class SoundLoader 
{
@SideOnly(Side.CLIENT)
@ForgeSubscribe
public void onSoundsLoaded(SoundLoadEvent event)
{
	SoundManager manager = event.manager;

	manager.soundPoolSounds.addSound(MoreDimensions.modid + ":KsTBeats - Explosive.ogg");
	manager.soundPoolSounds.addSound(MoreDimensions.modid + ":KsTBeats - Frequenz.ogg");
	manager.soundPoolSounds.addSound(MoreDimensions.modid + ":KsTBeats - Recent.ogg");
	manager.soundPoolSounds.addSound(MoreDimensions.modid + ":KsTBeats - Rising Again.ogg");
	manager.soundPoolSounds.addSound(MoreDimensions.modid + ":KsTBeats - Watching.ogg");
}
}

My modid is moredimensions and my folder structure is \assets\moredimensions\records\KsTBeats - Explosive.ogg and the other ones.

 

EDIT: I tried mp3 and it didn't work either.

↑↑↑↑↑↑↑↑↑↑ Click it please? :3 ↑↑↑↑↑↑↑↑↑↑

Link to comment
Share on other sites

Couple things that could effect..

 

MinecraftForge.EVENT_BUS.register(new SoundHandler()); so Class name (compilation unit) should be also

SoundHandler (see your SoundHandler.java, line: public class SoundLoader )

 

Music discs should be loaded to soundPoolStreaming, not to the soundPoolSounds. You see, soundPoolSounds gets

sounds from the directory /assets/modid/sounds/file.ogg and soundPoolStreaming from /assets/modid/records/file.ogg

 

Also, I wouldn't recommend to use spaces in filenames..

Link to comment
Share on other sites

I renamed SoundHandler to SoundLoader while I made this post so a couple things are messed up, but everything is called SoundLoader. I changed everything to soundPoolStraming and to explosive instead of KsTBeats - Explosvie as well as the file name, and it still doesn't work. This is my init part btw:

explosiveDisc = new Explosive(explosiveDiscID, modid + ":explosive").setUnlocalizedName("explosiveDisc").setCreativeTab(moreDimensionsSound);

↑↑↑↑↑↑↑↑↑↑ Click it please? :3 ↑↑↑↑↑↑↑↑↑↑

Link to comment
Share on other sites

Did you also remember to change

 

manager.soundPoolSounds.addSound(MoreDimensions.modid + ":KsTBeats - Explosive.ogg");    to

 

manager.soundPoolStreaming.addSound(MoreDimensions.modid + ":KsTBeats - Explosive.ogg");

(or manager.soundPoolStreaming.addSound(MoreDimensions.modid + ":explosive.ogg"); if you changed everything to lowercased)

 

..?

Link to comment
Share on other sites

I'm running out of ideas...the only thing you haven't change is the way you use your sound loader.

So try remove line SoundManager manager = event.manager because you don't need it. Just use:

 

              @ForgeSubscribe

public void onSoundsLoaded(SoundLoadEvent event)

{

                      event.manager.soundPoolStreaming.addSound(MoreDimensions.modid + ":explosive.ogg");

                      //and so on...

              }

 

...to load your music disc.

 

edit: And by the way...I'm registering my items in load, and sounds in preinit...just to let you know..

Link to comment
Share on other sites

mm....can you show me your extended ItemRecord?

package MoreDimensions.music;

import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemRecord;
import net.minecraft.item.ItemStack;
import MoreDimensions.MoreDimensions;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class Explosive extends ItemRecord
{	
    public Explosive(int id, String recordName)
    {
        super(id, recordName);
        this.maxStackSize = 1;
    }

    @SideOnly(Side.CLIENT)
    public String getRecordTitle()
    {
        return "KsTBeats - Explosive";
    }

    @SideOnly(Side.CLIENT)
    public EnumRarity getRarity(ItemStack par1ItemStack)
    {
        return EnumRarity.rare;
    }
    
    @SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister reg)
    {
    	this.itemIcon = reg.registerIcon(MoreDimensions.modid + ":record_explosive");
    }
}

↑↑↑↑↑↑↑↑↑↑ Click it please? :3 ↑↑↑↑↑↑↑↑↑↑

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • They were already updated, and just to double check I even did a cleanup and fresh update from that same page. I'm quite sure drivers are not the problem here. 
    • i tried downloading the drivers but it says no AMD graphics hardware has been detected    
    • Update your AMD/ATI drivers - get the drivers from their website - do not update via system  
    • As the title says i keep on crashing on forge 1.20.1 even without any mods downloaded, i have the latest drivers (nvidia) and vanilla minecraft works perfectly fine for me logs: https://pastebin.com/5UR01yG9
    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.