Начинающий
- Статус
- Оффлайн
- Регистрация
- 24 Июн 2022
- Сообщения
- 23
- Реакции
- 0
- Выберите загрузчик игры
- OptiFine
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
моя первая тема (модеры одобрите пж)
ss-
motiongraph:
package im.expensive.ui.display.impl;
import com.mojang.blaze3d.matrix.MatrixStack;
import im.expensive.Expensive;
import im.expensive.events.EventDisplay;
import im.expensive.events.EventUpdate;
import im.expensive.ui.display.ElementRenderer;
import im.expensive.ui.styles.StyleManager;
import im.expensive.utils.drag.Dragging;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.Scissor;
import im.expensive.utils.render.font.Fonts;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.Minecraft;
import org.lwjgl.opengl.GL11;
import java.util.ArrayList;
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class MotionGraphRenderer implements ElementRenderer {
final Dragging dragging;
final Minecraft mc = Minecraft.getInstance();
final ArrayList<Double> height = new ArrayList<>();
double bps;
double displayBps;
public void tick() {
this.height.add(this.bps);
if (this.height.size() > 80) {
this.height.remove(0);
}
if (displayBps == 0) displayBps = bps;
displayBps += (bps - displayBps) * 0.15;
}
public void render(EventDisplay eventDisplay) {
MatrixStack ms = eventDisplay.getMatrixStack();
float posX = this.dragging.getX();
float posY = this.dragging.getY();
this.bps = Math.hypot(mc.player.prevPosX - mc.player.getPosX(), mc.player.prevPosZ - mc.player.getPosZ()) * 20.0D;
renderMotionGraph(ms, posX, posY);
Scissor.unset();
}
private void renderMotionGraph(MatrixStack ms, float posX, float posY) {
int width = 100;
int height = 40;
int bgTop = ColorUtils.rgba(30, 30, 40, 180);
int bgBottom = ColorUtils.rgba(15, 15, 25, 180);
DisplayUtils.drawShadow(posX, posY, width, height, 10, ColorUtils.rgba(0, 0, 0, 80));
DisplayUtils.drawGradientRound(posX, posY, width, height, 4, bgTop, bgTop, bgBottom, bgBottom);
DisplayUtils.drawRoundedOutline(posX, posY, width, height, 4, 1f, ColorUtils.rgba(255, 255, 255, 30));
if (this.height.size() < 2) return;
double maxBps = Math.max(0.5, this.height.stream().mapToDouble(Double::doubleValue).max().orElse(1.0));
double minBps = this.height.stream().mapToDouble(Double::doubleValue).min().orElse(0.0);
double range = maxBps - minBps;
if (range < 0.1) range = 0.1;
drawGrid(posX, posY, width, height);
drawGraphFill(posX, posY, width, height, minBps, range);
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_LINE_SMOOTH);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glLineWidth(2.0F);
GL11.glBegin(GL11.GL_LINE_STRIP);
int lineColor = ColorUtils.rgb(255, 255, 255);
float red = ((lineColor >> 16) & 0xFF) / 255.0f;
float green = ((lineColor >> 8) & 0xFF) / 255.0f;
float blue = (lineColor & 0xFF) / 255.0f;
GL11.glColor4f(red, green, blue, 0.9f);
for (int i = 0; i < this.height.size(); i++) {
double x = posX + 4 + (i * (width - 8.0) / (this.height.size() - 1));
double value = this.height.get(i);
double normalized = (value - minBps) / range;
double y = posY + height - 4 - (normalized * (height - 8));
GL11.glVertex2d(x, y);
}
GL11.glEnd();
GL11.glDisable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_LINE_SMOOTH);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glPopMatrix();
drawText(ms, posX, posY, width, height);
dragging.setWidth(width);
dragging.setHeight(height);
}
private void drawGrid(float posX, float posY, int width, int height) {
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glLineWidth(0.5F);
GL11.glBegin(GL11.GL_LINES);
GL11.glColor4f(1.0f, 1.0f, 1.0f, 0.05f);
for (int i = 1; i < 4; i++) {
float x = posX + (width * i / 4.0f);
GL11.glVertex2f(x, posY + 3);
GL11.glVertex2f(x, posY + height - 3);
}
for (int i = 1; i < 3; i++) {
float y = posY + (height * i / 3.0f);
GL11.glVertex2f(posX + 3, y);
GL11.glVertex2f(posX + width - 3, y);
}
GL11.glEnd();
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glPopMatrix();
}
private void drawGraphFill(float posX, float posY, int width, int height, double minBps, double range) {
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
int fillColor = ColorUtils.rgb(255, 255, 255);
float red = ((fillColor >> 16) & 0xFF) / 255.0f;
float green = ((fillColor >> 8) & 0xFF) / 255.0f;
float blue = (fillColor & 0xFF) / 255.0f;
GL11.glBegin(GL11.GL_TRIANGLE_STRIP);
for (int i = 0; i < this.height.size(); i++) {
double x = posX + 4 + (i * (width - 8.0) / (this.height.size() - 1));
double value = this.height.get(i);
double normalized = (value - minBps) / range;
double y = posY + height - 4 - (normalized * (height - 8));
GL11.glColor4f(red, green, blue, 0.0f);
GL11.glVertex2d(x, posY + height - 4);
GL11.glColor4f(red, green, blue, 0.05f);
GL11.glVertex2d(x, y);
}
GL11.glEnd();
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glPopMatrix();
}
private void drawText(MatrixStack ms, float posX, float posY, int width, int height) {
String bpsText = String.format("%.1f", displayBps);
String unitText = "BPS";
float fontSize = 7.0f;
float unitFontSize = 5.5f;
float textX = posX + width - 30;
float textY = posY + 6;
float unitX = posX + width - 12;
float unitY = posY + 8;
int textColor = ColorUtils.rgb(255, 255, 255);
int unitColor = ColorUtils.rgb(200, 200, 200);
Fonts.sfMedium.drawText(ms, bpsText, textX, textY, textColor, fontSize);
Fonts.sfMedium.drawText(ms, unitText, unitX, unitY, unitColor, unitFontSize);
if (this.height.size() > 10) {
double avgSpeed = this.height.stream()
.skip(Math.max(0, this.height.size() - 20))
.mapToDouble(Double::doubleValue)
.average().orElse(0.0);
String avgText = String.format("Avg: %.1f", avgSpeed);
float avgX = posX + 4;
float avgY = posY + height - 8;
int avgColor = ColorUtils.rgb(160, 160, 160);
Fonts.sfMedium.drawText(ms, avgText, avgX, avgY, avgColor, 5.0f);
}
}
public void update(EventUpdate e) {
tick();
}
}
ss-