diff --git a/src/main/java/ru/betterend/mixin/client/AbstractSoundInstanceAccessor.java b/src/main/java/ru/betterend/mixin/client/AbstractSoundInstanceAccessor.java new file mode 100644 index 00000000..c925808e --- /dev/null +++ b/src/main/java/ru/betterend/mixin/client/AbstractSoundInstanceAccessor.java @@ -0,0 +1,12 @@ +package ru.betterend.mixin.client; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.client.sound.AbstractSoundInstance; + +@Mixin(AbstractSoundInstance.class) +public interface AbstractSoundInstanceAccessor { + @Accessor("volume") + void setVolume(float volume); +} diff --git a/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java b/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java new file mode 100644 index 00000000..8d6b6570 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java @@ -0,0 +1,92 @@ +package ru.betterend.mixin.client; + +import java.util.Random; + +import org.spongepowered.asm.mixin.Final; +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; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.sound.AbstractSoundInstance; +import net.minecraft.client.sound.MusicTracker; +import net.minecraft.client.sound.SoundInstance; +import net.minecraft.sound.MusicSound; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +@Mixin(MusicTracker.class) +public class MusicTrackerMixin { + @Shadow + @Final + private MinecraftClient client; + + @Shadow + @Final + private Random random; + + @Shadow + private SoundInstance current; + + @Shadow + private int timeUntilNextSong; + + private static float volume = 1; + private static float srcVolume = 0; + private static long time; + + @Inject(method = "tick", at = @At("HEAD"), cancellable = true) + public void beOnTick(CallbackInfo info) { + MusicSound musicSound = client.getMusicType(); + if (volume > 0 && beIsInEnd() && beShouldChangeSound(musicSound)) { + if (volume > 0) { + if (srcVolume < 0) { + srcVolume = current.getVolume(); + } + if (current instanceof AbstractSoundInstance) { + ((AbstractSoundInstanceAccessor) current).setVolume(volume); + } + client.getSoundManager().updateSoundVolume(current.getCategory(), current.getVolume() * volume); + long t = System.currentTimeMillis(); + if (volume == 1 && time == 0) { + time = t; + } + float delta = (t - time) * 0.0005F; + time = t; + volume -= delta; + if (volume < 0) { + volume = 0; + } + } + if (volume == 0) { + volume = 1; + time = 0; + srcVolume = -1; + this.client.getSoundManager().stop(this.current); + this.timeUntilNextSong = MathHelper.nextInt(this.random, 0, musicSound.getMinDelay() / 2); + this.current = null; + } + if (this.current == null && this.timeUntilNextSong-- <= 0) { + this.play(musicSound); + } + System.out.println(volume); + info.cancel(); + } + else { + volume = 1; + } + } + + private boolean beIsInEnd() { + return client.world != null && client.world.getRegistryKey().equals(World.END); + } + + private boolean beShouldChangeSound(MusicSound musicSound) { + return current != null && !musicSound.getSound().getId().equals(this.current.getId()) && musicSound.shouldReplaceCurrentMusic(); + } + + @Shadow + public void play(MusicSound type) {} +} diff --git a/src/main/java/ru/betterend/util/TranslationHelper.java b/src/main/java/ru/betterend/util/TranslationHelper.java index 5359c5cc..44cc424b 100644 --- a/src/main/java/ru/betterend/util/TranslationHelper.java +++ b/src/main/java/ru/betterend/util/TranslationHelper.java @@ -47,7 +47,6 @@ public class TranslationHelper { EndBiomes.getModBiomes().forEach((endBiome) -> { if (endBiome.getID().getNamespace().equals(BetterEnd.MOD_ID)) { String name = "biome." + BetterEnd.MOD_ID + "." + endBiome.getID().getPath(); - System.out.println(name); if (!translationEn.has(name)) { missingNamesEn.add(name); } diff --git a/src/main/java/ru/betterend/world/features/PythadendronTreeFeature.java b/src/main/java/ru/betterend/world/features/PythadendronTreeFeature.java index a41b5149..ebcb72e1 100644 --- a/src/main/java/ru/betterend/world/features/PythadendronTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/PythadendronTreeFeature.java @@ -16,7 +16,6 @@ import net.minecraft.world.gen.feature.DefaultFeatureConfig; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndTags; -import ru.betterend.util.BlocksHelper; import ru.betterend.util.MHelper; import ru.betterend.util.SplineHelper; import ru.betterend.util.sdf.PosInfo; @@ -125,13 +124,13 @@ public class PythadendronTreeFeature extends DefaultFeature { }); sphere.fillRecursiveIgnore(world, pos.up(), IGNORE); - if (radius > 5) { + /*if (radius > 5) { int count = (int) (radius * 2.5F); for (int i = 0; i < count; i++) { BlockPos p = pos.add(random.nextGaussian() * 1.5, random.nextGaussian() * 1.5, random.nextGaussian() * 1.5); BlocksHelper.setWithoutUpdate(world, p, EndBlocks.PYTHADENDRON.bark); } - } + }*/ } static { diff --git a/src/main/java/ru/betterend/world/processors/TerrainStructureProcessor.java b/src/main/java/ru/betterend/world/processors/TerrainStructureProcessor.java index 540d884c..a809249a 100644 --- a/src/main/java/ru/betterend/world/processors/TerrainStructureProcessor.java +++ b/src/main/java/ru/betterend/world/processors/TerrainStructureProcessor.java @@ -15,7 +15,6 @@ public class TerrainStructureProcessor extends StructureProcessor { BlockPos bpos = structureBlockInfo2.pos; if (structureBlockInfo2.state.isOf(Blocks.END_STONE) && worldView.isAir(bpos.up())) { BlockState top = worldView.getBiome(structureBlockInfo2.pos).getGenerationSettings().getSurfaceConfig().getTopMaterial(); - System.out.println(top); return new StructureBlockInfo(bpos, top, structureBlockInfo2.tag); } return structureBlockInfo2; diff --git a/src/main/resources/betterend.mixins.client.json b/src/main/resources/betterend.mixins.client.json index 8bc1c5b8..5be4b250 100644 --- a/src/main/resources/betterend.mixins.client.json +++ b/src/main/resources/betterend.mixins.client.json @@ -1,20 +1,22 @@ -{ - "required": true, - "minVersion": "0.8", - "package": "ru.betterend.mixin.client", - "compatibilityLevel": "JAVA_8", - "client": [ - "WorldRendererMixin", - "BackgroundRendererMixin", - "ClientRecipeBookMixin", - "ModelLoaderMixin", - "ModelVariantMapMixin", - "DeserializationContextMixin", - "ClientPlayNetworkHandlerMixin", - "NamespaceResourceManagerMixin", - "MinecraftClientMixin" - ], - "injectors": { - "defaultRequire": 1 - } -} +{ + "required": true, + "minVersion": "0.8", + "package": "ru.betterend.mixin.client", + "compatibilityLevel": "JAVA_8", + "client": [ + "AbstractSoundInstanceAccessor", + "ClientPlayNetworkHandlerMixin", + "NamespaceResourceManagerMixin", + "DeserializationContextMixin", + "BackgroundRendererMixin", + "ClientRecipeBookMixin", + "ModelVariantMapMixin", + "MinecraftClientMixin", + "WorldRendererMixin", + "MusicTrackerMixin", + "ModelLoaderMixin" + ], + "injectors": { + "defaultRequire": 1 + } +}