• Recently Browsing

    No registered users viewing this page.

  • Posts

    • It's not deactivating because you never do anything in your overridden tick method. Deactivate it there. Override onBlockClicked for activating when it's clicked.
    • And how can i make it activate, if i run into it (if i use onEntityCollision, nothing happens):   And how do i activate it on leftclick it with a sword or other tool?
    • Also having this problem it just loads over and over and i cant do anything.
    • Since playing arbitrary sounds isn't a normally supported feature, there's quite a lot of work to do to make things behave properly.   All those "func_######" methods are obfuscated, so the best way to learn what they are is to understand what is being put into them. For example, SoundSource#func_216422_a(float) doesn't have any clear purpose, but by looking at its usages in vanilla code I can find out that it sets the pitch of the sound source.   Here's a rough explanation of how sounds are played, based on what you're trying to do: Something creates an instance of an ISound. Most things use an instance of SimpleSound since it contains all sorts of useful properties. This ISound instance is then passed into SoundHandler#play(ISound), which is then passed SoundEngine#play(ISound). This is where the sounds get played. A whole bunch of stuff happens here. Forge runs some event hooks, a few values are validated, subtitles get activated, etc. You can ditch most of this for your system, but I recommend keeping all of it and working around it in order to keep things as close to vanilla as possible. Now, in the else part of the if(sound == SoundHandler.MISSING_SOUND) branch, this is where things get interesting, and confusing. From here, variables and methods are mostly obfuscated and arbitrary, which makes things hard to read. When reverse engineering this process, you may want to copy the code elsewhere and change the variable names as you go to make things easier to understand. Adding comments to obfuscated method calls can help remind you what those methods do when you figure them out. Now here's the biggest hurdle to get over: channelmanager$entry. As you can see, channelmanager$entry is a channel created by the ChannelManager in SoundEngine. In order to play your own arbitrary sounds, you're going to need this ChannelManager instance. Trouble is, the field is private. You have two major options here. Use reflection to make the ChannelManager field in SoundEngine accessible. This isn't too hard, but you should have a very good understanding of how reflection works in Java before doing this since reflection can be dangerous. Use an access transformer to make the field accessible through Forge. I think this is the best solution of the two. Like reflection, you should learn how these work yourself to make sure you fully understand what you're doing, since this tool can also be dangerous. After channelmanager$entry has been configured from data in the ISound and its Sound (confusing, I know) about pitch, location, etc, it's time to actually play the sound! It has to do slightly different things if the sound is being streamed or not. Because we're working with a FileInputStream, I'm going to assume the sound will be streamed. First, AudioStreamManager#func_217917_b(ResourceLocation) is run. This supplies an IAudioStream by turning a ResourceLocation into an OggAudioStream. You can create an OggAudioStream from any InputStream, so try doing that with your FileInputStream! Will it work? No idea! I haven't tested it myself. Then, it plays the IAudioStream through the configured channelmanager$entry by calling SoundSource#func_216433_a(IAudioStream) followed by SoundSource#func_216438_c(). Congratulations, if you did everything right, you will have just played a sound from a file! This is about as close as I can get without directly spoon-feeding code or teaching basic Java. If people who are more experienced than me would like to improve any part of my explanation (or get rid of it, if it's too much hand-holding), it would be much appreciated.
  • Topics

  • Who's Online (See full list)