From 6f5fd25a240e1cbb6beeff612076ca276baf091a Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 20 Feb 2024 20:30:18 -0500 Subject: [PATCH] Prevent Music Overlapping Memory Leak --- .../client/controllers/MusicController.java | 17 ++++------ src/main/java/noppes/npcs/roles/JobBard.java | 33 ++++++++++--------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/main/java/noppes/npcs/client/controllers/MusicController.java b/src/main/java/noppes/npcs/client/controllers/MusicController.java index 51e80971c..c3b7f146c 100644 --- a/src/main/java/noppes/npcs/client/controllers/MusicController.java +++ b/src/main/java/noppes/npcs/client/controllers/MusicController.java @@ -1,28 +1,25 @@ package noppes.npcs.client.controllers; import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.ISound; import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.audio.SoundCategory; import net.minecraft.client.audio.SoundHandler; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; public class MusicController { - //public TreeSet sounds = new TreeSet(); - //public TreeSet music = new TreeSet(); - + public static MusicController Instance; public PositionedSoundRecord playing; public ResourceLocation playingResource; public Entity playingEntity; - //private SoundPoolEntry musicPool; - public MusicController(){ Instance = this; } - public void stopMusic(){ SoundHandler handler = Minecraft.getMinecraft().getSoundHandler(); if(playing != null) @@ -32,9 +29,9 @@ public class MusicController { playingEntity = null; playing = null; } - + public void playStreaming(String music, Entity entity){ - if(isPlaying(music)){ + if(isPlaying(music)){ return; } stopMusic(); @@ -57,7 +54,7 @@ public class MusicController { playing = PositionedSoundRecord.func_147673_a(playingResource); handler.playSound(playing); } - + public boolean isPlaying(String music) { ResourceLocation resource = new ResourceLocation(music); @@ -66,7 +63,7 @@ public class MusicController { } return Minecraft.getMinecraft().getSoundHandler().isSoundPlaying(playing); } - + public void playSound(String music, float x, float y, float z) { Minecraft.getMinecraft().theWorld.playSound(x, y, z, music, 1, 1, false); } diff --git a/src/main/java/noppes/npcs/roles/JobBard.java b/src/main/java/noppes/npcs/roles/JobBard.java index 7d2c6054c..d18aa0bf1 100644 --- a/src/main/java/noppes/npcs/roles/JobBard.java +++ b/src/main/java/noppes/npcs/roles/JobBard.java @@ -1,5 +1,6 @@ package noppes.npcs.roles; +import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -14,12 +15,12 @@ import java.util.List; public class JobBard extends JobInterface{ public int minRange = 2; public int maxRange = 64; - + public boolean isStreamer = true; public boolean hasOffRange = true; public String song = ""; - + private EnumBardInstrument instrument = EnumBardInstrument.Banjo; public JobBard(EntityNPCInterface npc) { @@ -38,7 +39,7 @@ public class JobBard extends JobInterface{ nbttagcompound.setInteger("BardInstrument", instrument.ordinal()); nbttagcompound.setBoolean("BardStreamer", isStreamer); nbttagcompound.setBoolean("BardHasOff", hasOffRange); - + return nbttagcompound; } @@ -51,7 +52,7 @@ public class JobBard extends JobInterface{ isStreamer = nbttagcompound.getBoolean("BardStreamer"); hasOffRange = nbttagcompound.getBoolean("BardHasOff"); } - + public void setInstrument(int i) { if(CustomItems.banjo == null) return; @@ -87,16 +88,11 @@ public class JobBard extends JobInterface{ public EnumBardInstrument getInstrument(){ return instrument; } - private long ticks = 0; public void onLivingUpdate() { - if(!npc.isRemote()) + if(!npc.isRemote() || song.isEmpty()) return; - ticks++; - if(ticks % 10 != 0 ) - return; - if(song.isEmpty()) - return; - if(!MusicController.Instance.isPlaying(song)){ + + if(!MusicController.Instance.isPlaying(song)){ List list = npc.worldObj.getEntitiesWithinAABB(EntityPlayer.class, npc.boundingBox.expand(minRange, minRange/2, minRange)); if(!list.contains(CustomNpcs.proxy.getPlayer())) return; @@ -104,18 +100,23 @@ public class JobBard extends JobInterface{ MusicController.Instance.playStreaming(song, npc); else MusicController.Instance.playMusic(song, npc); - }else if(MusicController.Instance.playingEntity != npc){ + } + else if(MusicController.Instance.playingEntity != npc){ EntityPlayer player = CustomNpcs.proxy.getPlayer(); if(npc.getDistanceSqToEntity(player) < MusicController.Instance.playingEntity.getDistanceSqToEntity(player)){ MusicController.Instance.playingEntity = npc; } - - }else if(hasOffRange){ + + } + else if(hasOffRange){ List list = npc.worldObj.getEntitiesWithinAABB(EntityPlayer.class, npc.boundingBox.expand(maxRange, maxRange/2, maxRange)); if(!list.contains(CustomNpcs.proxy.getPlayer())) MusicController.Instance.stopMusic(); } - + + if(MusicController.Instance.isPlaying(song)) { + Minecraft.getMinecraft().mcMusicTicker.field_147676_d = 12000; + } } @Override