diff --git a/gradle.properties b/gradle.properties index 470e510..f5cd9c1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G loader_version=0.11.1 # Mod Properties - mod_version = 3.0.1 + mod_version = 3.1.0 maven_group = eu.midnightdust archives_base_name = visualoverhaul diff --git a/src/main/java/eu/midnightdust/visualoverhaul/block/renderer/JukeboxBlockEntityRenderer.java b/src/main/java/eu/midnightdust/visualoverhaul/block/renderer/JukeboxBlockEntityRenderer.java index e030135..7c7c775 100644 --- a/src/main/java/eu/midnightdust/visualoverhaul/block/renderer/JukeboxBlockEntityRenderer.java +++ b/src/main/java/eu/midnightdust/visualoverhaul/block/renderer/JukeboxBlockEntityRenderer.java @@ -2,6 +2,7 @@ package eu.midnightdust.visualoverhaul.block.renderer; import eu.midnightdust.visualoverhaul.VisualOverhaulClient; import eu.midnightdust.visualoverhaul.config.VOConfig; +import eu.midnightdust.visualoverhaul.util.sound.SoundTest; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.block.Blocks; @@ -17,11 +18,15 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.Vector3f; import net.minecraft.item.ItemStack; import net.minecraft.state.property.Properties; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; import java.util.Random; @Environment(EnvType.CLIENT) public class JukeboxBlockEntityRenderer extends BlockEntityRenderer { + private ItemStack record; + private Identifier discItem; public JukeboxBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { super(blockEntityRenderDispatcher); @@ -32,7 +37,26 @@ public class JukeboxBlockEntityRenderer extends BlockEntityRenderer minecraft:music_disc_cat) // + discItem = new Identifier(String.valueOf(SoundTest.getSound(blockEntity.getPos())).replace(".", "_")); + } + // If the sound is stopped or no sound is playing, the stack is set to an empty stack // + if (SoundTest.getSound(blockEntity.getPos()) == null) { + discItem = null; + record = ItemStack.EMPTY; + } + // Tries to get the disc item from the registry // + else if (Registry.ITEM.getOrEmpty(discItem).isPresent()) { + record = new ItemStack(Registry.ITEM.get(discItem)); + } + // Fallback to serverside implementation if the id doesn't match an item // + else { + record = blockEntity.getRecord(); + } + record.setCount(2); matrices.push(); diff --git a/src/main/java/eu/midnightdust/visualoverhaul/mixin/MixinSoundSystem.java b/src/main/java/eu/midnightdust/visualoverhaul/mixin/MixinSoundSystem.java new file mode 100644 index 0000000..b8985d8 --- /dev/null +++ b/src/main/java/eu/midnightdust/visualoverhaul/mixin/MixinSoundSystem.java @@ -0,0 +1,36 @@ +package eu.midnightdust.visualoverhaul.mixin; + +import eu.midnightdust.visualoverhaul.util.sound.SoundTest; +import net.minecraft.client.sound.SoundInstance; +import net.minecraft.client.sound.SoundSystem; +import net.minecraft.sound.SoundCategory; +import net.minecraft.util.math.BlockPos; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(SoundSystem.class) +public abstract class MixinSoundSystem { + + @Shadow private boolean started; + + private BlockPos jukeboxPos; + + @Inject(at = @At("TAIL"),method = "play(Lnet/minecraft/client/sound/SoundInstance;)V") + public void onPlayRecordSound(SoundInstance soundInstance, CallbackInfo ci) { + if (soundInstance.getCategory().equals(SoundCategory.RECORDS) && this.started) { + jukeboxPos = new BlockPos(soundInstance.getX(),soundInstance.getY(),soundInstance.getZ()); + SoundTest.soundPos.put(jukeboxPos, soundInstance.getId()); + } + } + + @Inject(at = @At("TAIL"),method = "stop(Lnet/minecraft/client/sound/SoundInstance;)V") + public void onStopRecordSound(SoundInstance soundInstance, CallbackInfo ci) { + if (soundInstance.getCategory().equals(SoundCategory.RECORDS) && SoundTest.soundPos.containsKey(new BlockPos(soundInstance.getX(),soundInstance.getY(),soundInstance.getZ()))) { + jukeboxPos = new BlockPos(soundInstance.getX(),soundInstance.getY(),soundInstance.getZ()); + SoundTest.soundPos.remove(jukeboxPos,soundInstance.getId()); + } + } +} \ No newline at end of file diff --git a/src/main/java/eu/midnightdust/visualoverhaul/util/sound/SoundTest.java b/src/main/java/eu/midnightdust/visualoverhaul/util/sound/SoundTest.java new file mode 100644 index 0000000..1d3c126 --- /dev/null +++ b/src/main/java/eu/midnightdust/visualoverhaul/util/sound/SoundTest.java @@ -0,0 +1,23 @@ +package eu.midnightdust.visualoverhaul.util.sound; + +import com.google.common.collect.Maps; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; + +import java.util.Map; + +public class SoundTest { + + public static Map soundPos = Maps.newHashMap(); + + /** + * Returns the Sound provided in MixinSoundSystem + * {@link eu.midnightdust.visualoverhaul.mixin.MixinSoundSystem} + */ + public static Identifier getSound(BlockPos pos) { + if (soundPos.containsKey(pos)) { + return soundPos.get(pos); + } + return null; + } +} diff --git a/src/main/resources/visualoverhaul.mixins.json b/src/main/resources/visualoverhaul.mixins.json index aa0110b..716e32c 100644 --- a/src/main/resources/visualoverhaul.mixins.json +++ b/src/main/resources/visualoverhaul.mixins.json @@ -8,6 +8,9 @@ "MixinAbstractFurnaceBlockEntity", "MixinServerWorld" ], + "client": [ + "MixinSoundSystem" + ], "injectors": { "defaultRequire": 1 }