project: music plugin

This commit is contained in:
Owain van Brakel
2019-10-30 05:46:45 +01:00
parent ad68bc0d1f
commit b3991f219d
17 changed files with 97 additions and 30 deletions

View File

@@ -37,7 +37,6 @@ import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.Setter; import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Actor; import net.runelite.api.Actor;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.GameState; import net.runelite.api.GameState;
@@ -73,7 +72,6 @@ import net.runelite.client.plugins.PluginDescriptor;
name = "Music", name = "Music",
description = "Adds search and filter for the music list, and additional volume control" description = "Adds search and filter for the music list, and additional volume control"
) )
@Slf4j
public class MusicPlugin extends Plugin public class MusicPlugin extends Plugin
{ {
@Inject @Inject
@@ -220,7 +218,6 @@ public class MusicPlugin extends Plugin
private void onVolumeChanged(VolumeChanged volumeChanged) private void onVolumeChanged(VolumeChanged volumeChanged)
{ {
log.info(volumeChanged.getType().toString());
applyMusicVolumeConfig(); applyMusicVolumeConfig();
} }

View File

@@ -1784,6 +1784,24 @@ public abstract class RSClientMixin implements RSClient
} }
} }
@Inject
@Override
public void setMusicVolume(int volume)
{
if (volume > 0 && client.getMusicVolume() <= 0 && client.getcurrentTrackGroupId() != -1)
{
client.playMusicTrack(client.getMusicTracks(), client.getcurrentTrackGroupId(), 0, volume, false);
}
client.setClientMusicVolume(volume);
client.setMusicTrackVolume(volume);
if (client.getMidiPcmStream() != null)
{
client.getMidiPcmStream().setPcmStreamVolume(volume);
}
}
@Copy("changeGameOptions") @Copy("changeGameOptions")
public static void rs$changeGameOptions(int var0) public static void rs$changeGameOptions(int var0)
{ {
@@ -1798,7 +1816,7 @@ public abstract class RSClientMixin implements RSClient
int type = client.getVarpDefinition(var0).getType(); int type = client.getVarpDefinition(var0).getType();
if (type == 3 || type == 4 || type == 10) if (type == 3 || type == 4 || type == 10)
{ {
VolumeChanged volumeChanged = new VolumeChanged(null); VolumeChanged volumeChanged = new VolumeChanged(type == 3 ? VolumeChanged.Type.MUSIC : type == 4 ? VolumeChanged.Type.EFFECTS : VolumeChanged.Type.AREA);
client.getCallbacks().post(VolumeChanged.class, volumeChanged); client.getCallbacks().post(VolumeChanged.class, volumeChanged);
} }
} }

View File

@@ -449,6 +449,9 @@ public interface RSClient extends RSGameShell, Client
@Import("SpriteBuffer_spritePalette") @Import("SpriteBuffer_spritePalette")
void setIndexedSpritePalette(int[] indexedSpritePalette); void setIndexedSpritePalette(int[] indexedSpritePalette);
@Import("archive6")
RSAbstractArchive getMusicTracks();
@Import("archive8") @Import("archive8")
@Override @Override
RSAbstractArchive getIndexSprites(); RSAbstractArchive getIndexSprites();
@@ -1047,8 +1050,7 @@ public interface RSClient extends RSGameShell, Client
int getMusicVolume(); int getMusicVolume();
@Import("musicVolume") @Import("musicVolume")
@Override void setClientMusicVolume(int volume);
void setMusicVolume(int volume);
@Import("areaSoundEffectVolume") @Import("areaSoundEffectVolume")
@Override @Override
@@ -1066,9 +1068,21 @@ public interface RSClient extends RSGameShell, Client
@Override @Override
void setSoundEffectVolume(int volume); void setSoundEffectVolume(int volume);
@Import("musicTrackVolume")
void setMusicTrackVolume(int volume);
@Import("viewportWalking") @Import("viewportWalking")
void setViewportWalking(boolean viewportWalking); void setViewportWalking(boolean viewportWalking);
@Import("playMusicTrack")
void playMusicTrack(RSAbstractArchive var0, int var1, int var2, int var3, boolean var4);
@Import("midiPcmStream")
RSMidiPcmStream getMidiPcmStream();
@Import("currentTrackGroupId")
int getcurrentTrackGroupId();
@Import("crossSprites") @Import("crossSprites")
@Override @Override
RSSprite[] getCrossSprites(); RSSprite[] getCrossSprites();

View File

@@ -0,0 +1,33 @@
/*
* Copyright (c) 2018, trimbe <github.com/trimbe>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.rs.api;
import net.runelite.mapping.Import;
public interface RSMidiPcmStream
{
@Import("setPcmStreamVolume")
void setPcmStreamVolume(int volume);
}

View File

@@ -202,7 +202,8 @@ public final class Client extends GameShell implements Usernamed {
@ObfuscatedGetter( @ObfuscatedGetter(
intValue = -910754411 intValue = -910754411
) )
static int field666; @Export("currentTrackGroupId")
static int currentTrackGroupId;
@ObfuscatedName("mo") @ObfuscatedName("mo")
@ObfuscatedGetter( @ObfuscatedGetter(
intValue = -1946560921 intValue = -1946560921
@@ -1511,7 +1512,7 @@ public final class Client extends GameShell implements Usernamed {
destinationY = 0; destinationY = 0;
minimapState = 0; minimapState = 0;
musicVolume = 255; musicVolume = 255;
field666 = -1; currentTrackGroupId = -1;
field759 = false; field759 = false;
soundEffectVolume = 127; soundEffectVolume = 127;
areaSoundEffectVolume = 127; areaSoundEffectVolume = 127;
@@ -1653,7 +1654,7 @@ public final class Client extends GameShell implements Usernamed {
var5 = 0; var5 = 0;
} }
class49.midiPcmStream.method3760(var5); class49.midiPcmStream.setPcmStreamVolume(var5);
} else { } else {
class49.midiPcmStream.clear(); class49.midiPcmStream.clear();
class49.midiPcmStream.removeAll(); class49.midiPcmStream.removeAll();
@@ -1765,7 +1766,7 @@ public final class Client extends GameShell implements Usernamed {
if (class49.midiPcmStream.loadMusicTrack(class197.musicTrack, class197.musicPatchesArchive, FriendLoginUpdate.soundCache, 22050)) { if (class49.midiPcmStream.loadMusicTrack(class197.musicTrack, class197.musicPatchesArchive, FriendLoginUpdate.soundCache, 22050)) {
class49.midiPcmStream.clearAll(); class49.midiPcmStream.clearAll();
class49.midiPcmStream.method3760(TileItem.field1223); class49.midiPcmStream.setPcmStreamVolume(TileItem.musicTrackVolume);
class49.midiPcmStream.setMusicTrack(class197.musicTrack, WorldMapSectionType.musicTrackBoolean); class49.midiPcmStream.setMusicTrack(class197.musicTrack, WorldMapSectionType.musicTrackBoolean);
class197.field2386 = 0; class197.field2386 = 0;
class197.musicTrack = null; class197.musicTrack = null;

View File

@@ -705,7 +705,7 @@ public class ClientPacket implements class181 {
@Export("playSoundJingle") @Export("playSoundJingle")
static void playSoundJingle(int var0, int var1) { static void playSoundJingle(int var0, int var1) {
if (Client.musicVolume != 0 && var0 != -1) { if (Client.musicVolume != 0 && var0 != -1) {
class83.method2068(ClanMate.archive11, var0, 0, Client.musicVolume, false); class83.playMusicTrack(ClanMate.archive11, var0, 0, Client.musicVolume, false);
Client.field759 = true; Client.field759 = true;
} }

View File

@@ -213,10 +213,10 @@ public class DynamicObject extends Entity {
class197.musicTrackArchive = null; class197.musicTrackArchive = null;
class188.musicTrackGroupId = -1; class188.musicTrackGroupId = -1;
class49.musicTrackFileId = -1; class49.musicTrackFileId = -1;
TileItem.field1223 = 0; TileItem.musicTrackVolume = 0;
WorldMapSectionType.musicTrackBoolean = false; WorldMapSectionType.musicTrackBoolean = false;
MusicPatchNode2.field2382 = 2; MusicPatchNode2.field2382 = 2;
Client.field666 = -1; Client.currentTrackGroupId = -1;
Client.field759 = false; Client.field759 = false;
ClientPacket.method3581(); ClientPacket.method3581();
MouseRecorder.updateGameState(10); MouseRecorder.updateGameState(10);

View File

@@ -151,8 +151,8 @@ public class HealthBarUpdate extends Node {
} }
if (!var12) { if (!var12) {
if (Client.musicVolume != 0 && Client.field666 != -1) { if (Client.musicVolume != 0 && Client.currentTrackGroupId != -1) {
class83.method2068(class225.archive6, Client.field666, 0, Client.musicVolume, false); class83.playMusicTrack(class225.archive6, Client.currentTrackGroupId, 0, Client.musicVolume, false);
} }
Client.field759 = false; Client.field759 = false;

View File

@@ -131,7 +131,8 @@ public class MidiPcmStream extends PcmStream {
signature = "(II)V", signature = "(II)V",
garbageValue = "-1812413582" garbageValue = "-1812413582"
) )
public synchronized void method3760(int var1) { @Export("setPcmStreamVolume")
public synchronized void setPcmStreamVolume(int var1) {
this.field2393 = var1; this.field2393 = var1;
} }

View File

@@ -205,7 +205,7 @@ public class MouseRecorder implements Runnable {
class197.musicTrackArchive = null; class197.musicTrackArchive = null;
class188.musicTrackGroupId = -1; class188.musicTrackGroupId = -1;
class49.musicTrackFileId = -1; class49.musicTrackFileId = -1;
TileItem.field1223 = 0; TileItem.musicTrackVolume = 0;
WorldMapSectionType.musicTrackBoolean = false; WorldMapSectionType.musicTrackBoolean = false;
MusicPatchNode2.field2382 = 2; MusicPatchNode2.field2382 = 2;
DirectByteArrayCopier.method3924(true); DirectByteArrayCopier.method3924(true);

View File

@@ -64,19 +64,19 @@ public class MusicPatchNode2 {
static void playSong(int var0) { static void playSong(int var0) {
if (var0 == -1 && !Client.field759) { if (var0 == -1 && !Client.field759) {
VertexNormal.method2960(); VertexNormal.method2960();
} else if (var0 != -1 && var0 != Client.field666 && Client.musicVolume != 0 && !Client.field759) { } else if (var0 != -1 && var0 != Client.currentTrackGroupId && Client.musicVolume != 0 && !Client.field759) {
Archive var1 = class225.archive6; Archive var1 = class225.archive6;
int var2 = Client.musicVolume; int var2 = Client.musicVolume;
class197.field2386 = 1; class197.field2386 = 1;
class197.musicTrackArchive = var1; class197.musicTrackArchive = var1;
class188.musicTrackGroupId = var0; class188.musicTrackGroupId = var0;
class49.musicTrackFileId = 0; class49.musicTrackFileId = 0;
TileItem.field1223 = var2; TileItem.musicTrackVolume = var2;
WorldMapSectionType.musicTrackBoolean = false; WorldMapSectionType.musicTrackBoolean = false;
field2382 = 2; field2382 = 2;
} }
Client.field666 = var0; Client.currentTrackGroupId = var0;
} }
@ObfuscatedName("ic") @ObfuscatedName("ic")

View File

@@ -438,16 +438,16 @@ public final class NetSocket extends AbstractSocket implements Runnable {
} }
if (var3 != Client.musicVolume) { if (var3 != Client.musicVolume) {
if (Client.musicVolume == 0 && Client.field666 != -1) { if (Client.musicVolume == 0 && Client.currentTrackGroupId != -1) {
class83.method2068(class225.archive6, Client.field666, 0, var3, false); class83.playMusicTrack(class225.archive6, Client.currentTrackGroupId, 0, var3, false);
Client.field759 = false; Client.field759 = false;
} else if (var3 == 0) { } else if (var3 == 0) {
VertexNormal.method2960(); VertexNormal.method2960();
Client.field759 = false; Client.field759 = false;
} else if (class197.field2386 != 0) { } else if (class197.field2386 != 0) {
TileItem.field1223 = var3; TileItem.musicTrackVolume = var3;
} else { } else {
class49.midiPcmStream.method3760(var3); class49.midiPcmStream.setPcmStreamVolume(var3);
} }
Client.musicVolume = var3; Client.musicVolume = var3;

View File

@@ -17,7 +17,8 @@ public final class TileItem extends Entity {
@ObfuscatedGetter( @ObfuscatedGetter(
intValue = 1727946021 intValue = 1727946021
) )
public static int field1223; @Export("musicTrackVolume")
public static int musicTrackVolume;
@ObfuscatedName("z") @ObfuscatedName("z")
@ObfuscatedGetter( @ObfuscatedGetter(
intValue = -1488876063 intValue = -1488876063

View File

@@ -43,7 +43,7 @@ public class UserComparator4 implements Comparator {
public static void method3349(AbstractArchive var0, String var1, String var2, int var3, boolean var4) { public static void method3349(AbstractArchive var0, String var1, String var2, int var3, boolean var4) {
int var5 = var0.getGroupId(var1); int var5 = var0.getGroupId(var1);
int var6 = var0.getFileId(var5, var2); int var6 = var0.getFileId(var5, var2);
class83.method2068(var0, var5, var6, var3, var4); class83.playMusicTrack(var0, var5, var6, var3, var4);
} }
@ObfuscatedName("ka") @ObfuscatedName("ka")

View File

@@ -263,7 +263,7 @@ public class WorldMapData_0 extends AbstractWorldMapData {
class197.musicTrackArchive = var1; class197.musicTrackArchive = var1;
class188.musicTrackGroupId = var6; class188.musicTrackGroupId = var6;
class49.musicTrackFileId = var7; class49.musicTrackFileId = var7;
TileItem.field1223 = var4; TileItem.musicTrackVolume = var4;
WorldMapSectionType.musicTrackBoolean = var5; WorldMapSectionType.musicTrackBoolean = var5;
MusicPatchNode2.field2382 = var0; MusicPatchNode2.field2382 = var0;
} }

View File

@@ -107,7 +107,7 @@ public final class WorldMapSprite {
class197.musicTrackArchive = null; class197.musicTrackArchive = null;
class188.musicTrackGroupId = -1; class188.musicTrackGroupId = -1;
class49.musicTrackFileId = -1; class49.musicTrackFileId = -1;
TileItem.field1223 = 0; TileItem.musicTrackVolume = 0;
WorldMapSectionType.musicTrackBoolean = false; WorldMapSectionType.musicTrackBoolean = false;
MusicPatchNode2.field2382 = 2; MusicPatchNode2.field2382 = 2;
} }

View File

@@ -1,5 +1,6 @@
import java.awt.Component; import java.awt.Component;
import java.math.BigInteger; import java.math.BigInteger;
import net.runelite.mapping.Export;
import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedGetter;
import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedName;
import net.runelite.mapping.ObfuscatedSignature; import net.runelite.mapping.ObfuscatedSignature;
@@ -37,12 +38,13 @@ public class class83 {
signature = "(Lhp;IIIZI)V", signature = "(Lhp;IIIZI)V",
garbageValue = "-476776598" garbageValue = "-476776598"
) )
public static void method2068(AbstractArchive var0, int var1, int var2, int var3, boolean var4) { @Export("playMusicTrack")
public static void playMusicTrack(AbstractArchive var0, int var1, int var2, int var3, boolean var4) {
class197.field2386 = 1; class197.field2386 = 1;
class197.musicTrackArchive = var0; class197.musicTrackArchive = var0;
class188.musicTrackGroupId = var1; class188.musicTrackGroupId = var1;
class49.musicTrackFileId = var2; class49.musicTrackFileId = var2;
TileItem.field1223 = var3; TileItem.musicTrackVolume = var3;
WorldMapSectionType.musicTrackBoolean = var4; WorldMapSectionType.musicTrackBoolean = var4;
MusicPatchNode2.field2382 = 10000; MusicPatchNode2.field2382 = 10000;
} }