Начинающий
- Статус
- Оффлайн
- Регистрация
- 22 Фев 2023
- Сообщения
- 21
- Реакции
- 0
- Выберите загрузчик игры
- ForgeOptiFine
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!

RTXSound:
package fun.anfyence.features.impl.util;
import fun.anfyence.events.Event;
import fun.anfyence.features.api.Category;
import fun.anfyence.features.api.Feature;
import fun.anfyence.features.api.FeatureInfo;
import fun.anfyence.features.settings.impl.BooleanSetting;
import fun.anfyence.features.settings.impl.ModeSetting;
import net.minecraft.client.audio.ISound;
import net.minecraft.util.ResourceLocation;
import net.minecraft.client.audio.Sound;
import net.minecraft.client.audio.SoundEventAccessor;
import net.minecraft.client.audio.SoundHandler;
import net.minecraft.util.SoundCategory;
import javax.annotation.Nullable;
@FeatureInfo(
name = "RTXSound",
desc = "Меняет обработку звука, добавляя 3D-эффекты и улучшение качества.",
category = Category.Util
)
public class RTXSound extends Feature {
private final ModeSetting performancePriority =
new ModeSetting("Приоритет качества", "Производительность", "Качество звука");
private final BooleanSetting betterStereo = new BooleanSetting("Эмуляция 3D стерео", true);
private final BooleanSetting toneCompense = new BooleanSetting("Тон-компенсация", true);
protected boolean enabled;
public RTXSound() {
addSettings(performancePriority, betterStereo, toneCompense);
performancePriority.set("Качество звука");
}
@Override
public boolean onEvent(Event event) {
return false;
}
public ISound processSound(ISound original) {
float volume = original.getVolume();
float pitch = original.getPitch();
if (performancePriority.is("Качество звука")) {
volume *= 1.2f;
} else {
volume *= 0.9f;
}
float pan = 0;
if (betterStereo.get() && mc.player != null) {
// простая имитация стерео: чередуем смещение влево/вправо
pan = mc.player.ticksExisted % 2 == 0 ? -0.15f : 0.15f;
}
if (toneCompense.get()) {
pitch *= 1.05f;
}
return new ProcessedSound(original, volume, pitch, pan);
}
public boolean isEnabled() {
return this.enabled;
}
private static class ProcessedSound implements ISound {
private final ISound original;
private final float volume, pitch, pan;
public ProcessedSound(ISound original, float volume, float pitch, float pan) {
this.original = original;
this.volume = volume;
this.pitch = pitch;
this.pan = pan;
}
@Override
public ResourceLocation getSoundLocation() {
return original.getSoundLocation();
}
@Nullable
@Override
public SoundEventAccessor createAccessor(SoundHandler handler) {
return original.createAccessor(handler);
}
@Override
public Sound getSound() {
return original.getSound();
}
@Override
public SoundCategory getCategory() {
return original.getCategory();
}
@Override
public boolean canRepeat() {
return original.canRepeat();
}
@Override
public boolean isGlobal() {
return original.isGlobal();
}
@Override
public int getRepeatDelay() {
return original.getRepeatDelay();
}
@Override
public float getVolume() {
return volume;
}
@Override
public float getPitch() {
return pitch;
}
@Override
public double getX() {
return original.getX() + pan;
}
@Override
public double getY() {
return original.getY();
}
@Override
public double getZ() {
return original.getZ();
}
@Override
public AttenuationType getAttenuationType() {
return original.getAttenuationType();
}
}
}
MixinSoundEngine:
package fun.anfyence.features.Mixin;
import fun.anfyence.features.api.FeatureManager;
import fun.anfyence.features.impl.util.RTXSound;
import net.minecraft.client.audio.ISound;
import net.minecraft.client.audio.SoundEngine;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(SoundEngine.class)
public class MixinSoundEngine {
@Inject(method = "play", at = @At("HEAD"), cancellable = true)
private void injectPlay(ISound sound, CallbackInfo ci) {
RTXSound rtx = FeatureManager.get(RTXSound.class);
if (rtx != null && rtx.isEnabled()) {
ISound processed = rtx.processSound(sound);
((SoundEngine)(Object) this).play(processed);
ci.cancel();
}
}
}