Начинающий
- Статус
- Оффлайн
- Регистрация
- 13 Май 2025
- Сообщения
- 47
- Реакции
- 1
- Выберите загрузчик игры
- Прочие моды
Сам на $$$elf'кодил модуль на крылья визуальные
SS:
Java:
package monoton.module.impl.render;
import com.mojang.blaze3d.systems.RenderSystem;
import monoton.control.events.client.Event;
import monoton.control.events.render.EventRender;
import monoton.module.TypeList;
import monoton.module.api.Annotation;
import monoton.module.api.Module;
import monoton.module.settings.Setting;
import monoton.module.settings.imp.ColorSetting;
import monoton.module.settings.imp.SliderSetting;
import monoton.module.settings.imp.BooleanOption;
import monoton.utils.render.ColorUtils;
import net.minecraft.client.settings.PointOfView;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import org.lwjgl.opengl.GL11;
@Annotation(name = "Wings", type = TypeList.Render, desc = "Ангельские крылья на спине")
public class Wings extends Module {
public ColorSetting color =
new ColorSetting("Цвет", ColorUtils.rgba(180, 220, 255, 180));
public SliderSetting size =
new SliderSetting("Размер", 1.0f, 0.5f, 2.0f, 0.1f);
public SliderSetting speed =
new SliderSetting("Скорость", 1.0f, 0.3f, 3.0f, 0.1f);
public BooleanOption onlySelf =
new BooleanOption("Только я", true);
private float tick;
public Wings() {
addSettings(new Setting[]{color, size, speed, onlySelf});
}
@Override
public boolean onEvent(Event event) {
if (event instanceof EventRender e && e.isRender3D()) {
render(e.getPartialTicks());
}
return false;
}
private void render(float pt) {
if (mc.world == null || mc.player == null) return;
tick += 0.05f * speed.getValue().floatValue();
for (PlayerEntity player : mc.world.getPlayers()) {
if (onlySelf.get() && player != mc.player) continue;
if (!player.isAlive()) continue;
if (player == mc.player &&
mc.gameSettings.getPointOfView() == PointOfView.FIRST_PERSON)
continue;
Vector3d pos = interpolate(player, pt);
Vector3d cam = mc.getRenderManager().info.getProjectedView();
double x = pos.x - cam.x;
double y = pos.y - cam.y;
double z = pos.z - cam.z;
float bodyYaw = interpolateRotation(
player.prevRenderYawOffset,
player.renderYawOffset,
pt);
GL11.glPushMatrix();
GL11.glTranslated(x, y, z);
GL11.glRotatef(-bodyYaw, 0, 1, 0);
GL11.glTranslatef(0f, 1.25f, 0.20f);
GL11.glScalef(size.getValue().floatValue(),
size.getValue().floatValue(),
size.getValue().floatValue());
setupRender();
drawWing(true);
drawWing(false);
endRender();
GL11.glPopMatrix();
}
}
private void drawWing(boolean left) {
float dir = left ? -1f : 1f;
float flap = MathHelper.sin(tick) * 25f;
GL11.glPushMatrix();
GL11.glRotatef(dir * (25f + flap), 0, 1, 0);
for (int i = 0; i < 6; i++) {
float progress = i / 6f;
float width = 0.25f + progress * 0.6f;
float height = 0.7f - progress * 0.3f;
GL11.glPushMatrix();
GL11.glTranslatef(dir * progress * 0.4f, 0, progress * 0.2f);
renderQuad(0, 0, dir * width, height, color.get());
GL11.glPopMatrix();
}
GL11.glPopMatrix();
}
private void renderQuad(float x1, float y1,
float x2, float y2,
int color) {
float a = ((color >> 24) & 255) / 255f;
float r = ((color >> 16) & 255) / 255f;
float g = ((color >> 8) & 255) / 255f;
float b = (color & 255) / 255f;
GL11.glBegin(GL11.GL_QUADS);
GL11.glColor4f(r, g, b, a);
GL11.glVertex3f(x1, y1, 0);
GL11.glVertex3f(x2, y1, 0);
GL11.glVertex3f(x2, y2, 0);
GL11.glVertex3f(x1, y2, 0);
GL11.glEnd();
}
private void setupRender() {
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableTexture();
RenderSystem.disableCull();
RenderSystem.enableDepthTest();
}
private void endRender() {
RenderSystem.enableTexture();
RenderSystem.enableCull();
RenderSystem.disableBlend();
}
private Vector3d interpolate(PlayerEntity e, float pt) {
return new Vector3d(
e.prevPosX + (e.getPosX() - e.prevPosX) * pt,
e.prevPosY + (e.getPosY() - e.prevPosY) * pt,
e.prevPosZ + (e.getPosZ() - e.prevPosZ) * pt
);
}
private float interpolateRotation(float prev, float now, float pt) {
float f = now - prev;
while (f < -180) f += 360;
while (f >= 180) f -= 360;
return prev + pt * f;
}
}
SS: