-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
код:
ss:
Код:
package hvh.cheat.ui.display.impl;
import com.mojang.blaze3d.matrix.MatrixStack;
import hvh.cheat.HvH;
import hvh.cheat.command.friends.FriendStorage;
import hvh.cheat.events.EventDisplay;
import hvh.cheat.events.EventUpdate;
import hvh.cheat.functions.impl.visual.HUD;
import hvh.cheat.ui.display.ElementRenderer;
import hvh.cheat.ui.display.ElementUpdater;
import hvh.cheat.utils.drag.Dragging;
import hvh.cheat.utils.math.Vector4i;
import hvh.cheat.utils.render.ColorUtils;
import hvh.cheat.utils.render.DisplayUtils;
import hvh.cheat.utils.render.font.Fonts;
import hvh.cheat.utils.text.GradientUtil;
import hvh.cheat.ui.styles.Style;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.network.play.NetworkPlayerInfo;
import net.minecraft.util.math.vector.Vector4f;
import net.minecraft.util.text.ITextComponent;
import ru.hogoshi.Animation;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class FriendListRenderer implements ElementRenderer, ElementUpdater {
final Dragging dragging;
private final List<Friend> friendPlayers = new ArrayList<>();
private final Pattern namePattern = Pattern.compile("^\\w{3,16}$");
@Override
public void update(EventUpdate e) {
friendPlayers.clear();
for (String name : FriendStorage.getFriends()) {
if (namePattern.matcher(name).matches() && !name.equals(mc.player.getName().getString())) {
boolean isOnline = mc.getConnection().getPlayerInfoMap().stream()
.anyMatch(info -> info.getGameProfile().getName().equals(name));
Friend friend = new Friend(name, isOnline ? Status.ONLINE : Status.OFFLINE);
friendPlayers.add(friend);
}
}
}
float width;
float height;
@Override
public void tick() {
}
@Override
public void render(EventDisplay eventDisplay) {
float posX = dragging.getX();
float posY = dragging.getY();
float padding = 5;
float fontSize = 6.5f;
MatrixStack ms = eventDisplay.getMatrixStack();
ITextComponent name = GradientUtil.gradient("Friend List");
Style style = HvH.getInstance().getStyleManager().getCurrentStyle();
DisplayUtils.drawShadow(posX - 2, posY, 3, height, 7, ColorUtils.getColor(0));
drawStyledRect(posX, posY, width, height, 4);
Fonts.sfui.drawCenteredText(ms, name, posX + width / 2, posY + padding + 1f, fontSize);
posY += fontSize + padding * 2;
float maxWidth = Fonts.sfMedium.getWidth(name, fontSize) + padding * 2;
float localHeight = fontSize + padding * 2;
posY += 3.5f;
for (FriendListRenderer.Friend f : friendPlayers) {
String friendName = f.getName();
float nameWidth = Fonts.sfMedium.getWidth(friendName, fontSize);
float localWidth = nameWidth + Fonts.sfMedium.getWidth(f.getStatus().string, fontSize) + padding * 2;
DisplayUtils.drawRoundedRect(posX, posY - 3, 2.5f, 13.5f, new Vector4f(0.0F, 0.0F, 0.0F, 0.0F), new Vector4i(HUD.getColor(0, 1.0F), HUD.getColor(0, 1.0F), HUD.getColor(90, 1.0F), HUD.getColor(90, 1.0F)));
Fonts.sfMedium.drawText(ms, friendName, posX + padding, posY, ColorUtils.rgb(255, 255, 255), fontSize);
Fonts.sfMedium.drawText(ms, f.getStatus().string, posX + width - padding - Fonts.sfMedium.getWidth(f.getStatus().string, fontSize), posY, f.getStatus().color, fontSize);
if (localWidth > maxWidth) {
maxWidth = localWidth;
}
posY += fontSize + padding;
localHeight += fontSize + padding;
}
width = Math.max(maxWidth, 80);
height = localHeight + 2.5f;
dragging.setWidth(width);
dragging.setHeight(height);
}
@AllArgsConstructor
@Data
public static class Friend {
String name;
Status status;
public void updateStatus() {
boolean isOnline = mc.getConnection().getPlayerInfoMap().stream()
.anyMatch(info -> info.getGameProfile().getName().equals(name));
status = isOnline ? Status.ONLINE : Status.OFFLINE;
}
}
public enum Status {
ONLINE("Online", ColorUtils.rgb(0, 255, 0)),
OFFLINE("Offline", ColorUtils.rgb(255, 0, 0));
public final String string;
public final int color;
Status(String string, int color) {
this.string = string;
this.color = color;
}
}
private void drawStyledRect(float x,
float y,
float width,
float height,
float radius) {
DisplayUtils.drawRoundedRect(x, y, width, height, 0, ColorUtils.rgba(0, 0, 0, 255));
DisplayUtils.drawRoundedRect(x, y, 2.5f, 18.8f, new Vector4f(0.0F, 0.0F, 0.0F, 0.0F), new Vector4i(HUD.getColor(0, 1.0F), HUD.getColor(0, 1.0F), HUD.getColor(90, 1.0F), HUD.getColor(90, 1.0F)));
}
}