Начинающий
Начинающий
- Статус
- Онлайн
- Регистрация
- 13 Окт 2024
- Сообщения
- 398
- Реакции
- 0
- Выберите загрузчик игры
- Vanilla
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
за базу взял https://yougame.biz/threads/353792/
там же и гайд где свои куки найти
там же и гайд где свои куки найти
SEEELFCODE(gpt):
package client.display.hud.impl;
import client.display.hud.ElementRenderer;
import client.events.EventRenderer2D;
import client.main.module.impl.visuals.HUD;
import client.util.display.render.ColorUtil;
import client.util.display.render.font.Fonts;
import client.util.display.text.GradientUtil;
import client.util.drag.Dragging;
import client.util.player.projections.BetterText;
import com.google.common.eventbus.Subscribe;
import net.minecraft.util.text.ITextComponent;
import lombok.experimental.FieldDefaults;
import lombok.RequiredArgsConstructor;
import lombok.AccessLevel;
import com.mojang.blaze3d.matrix.MatrixStack;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class EventsRenderer implements ElementRenderer {
final Dragging dragging;
float width;
float height;
float headerHeight;
float eventsHeight;
float spacingGap = 1.0f;
private static final String API_URL = "https://cheathub.tech/api/telegram-data";
private static final String COOKIE = "ВАШИ КУКИ";
private static final int MAX_EVENTS = 10;
private final List<EventInfo> events = new ArrayList<>();
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
private boolean isInitialized = false;
private long lastUpdateTime = 0;
private long lastSuccessfulFetch = 0;
private boolean fetchInProgress = false;
private static class EventInfo {
private final String server;
private final String timeRemaining;
private int seconds;
public EventInfo(String server, String timeRemaining, int seconds) {
this.server = server;
this.timeRemaining = timeRemaining;
this.seconds = seconds;
}
public String getServer() {
return server;
}
public String getTimeRemaining() {
return timeRemaining;
}
public int getSeconds() {
return seconds;
}
public void setSeconds(int seconds) {
this.seconds = seconds;
}
public void decrementSeconds() {
if (seconds > 0) {
seconds--;
}
}
}
private void initialize() {
if (isInitialized) return;
isInitialized = true;
scheduler.scheduleAtFixedRate(this::fetchEvents, 0, 5, TimeUnit.SECONDS);
scheduler.scheduleAtFixedRate(this::updateCountdown, 1, 1, TimeUnit.SECONDS);
}
private void updateCountdown() {
synchronized (events) {
for (EventInfo event : events) {
event.decrementSeconds();
}
events.removeIf(event -> event.getSeconds() <= 0);
}
}
private void fetchEvents() {
if (fetchInProgress) {
return;
}
long currentTime = System.currentTimeMillis();
if (currentTime - lastUpdateTime < 3000) {
return;
}
fetchInProgress = true;
lastUpdateTime = currentTime;
CompletableFuture.runAsync(() -> {
HttpURLConnection connection = null;
try {
URL url = new URL(API_URL);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setRequestProperty("Cookie", COOKIE);
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
parseEvents(response.toString());
lastSuccessfulFetch = System.currentTimeMillis();
}
} catch (Exception e) {
System.err.println("Error fetching events: " + e.getMessage());
} finally {
if (connection != null) {
connection.disconnect();
}
fetchInProgress = false;
}
});
}
private void parseEvents(String jsonResponse) {
try {
List<EventInfo> newEvents = new ArrayList<>();
Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(jsonResponse, JsonObject.class);
if (jsonObject != null && jsonObject.has("upcomingEvents")) {
JsonArray upcomingEvents = jsonObject.getAsJsonArray("upcomingEvents");
for (JsonElement eventElement : upcomingEvents) {
JsonObject eventObj = eventElement.getAsJsonObject();
String type = eventObj.get("type").getAsString();
String server = eventObj.get("server").getAsString();
if (type.equals("🤔 Неизвестное событие") && server.contains("Анархия")) {
String timeRemaining = eventObj.get("timeRemaining").getAsString();
int seconds = parseTimeToSeconds(timeRemaining);
if (seconds > 0) {
String serverNumber = server.replaceAll(".*?#(\\d+)", "Anarchy #$1");
newEvents.add(new EventInfo(serverNumber, timeRemaining, seconds));
}
}
}
}
newEvents.sort(Comparator.comparingInt(EventInfo::getSeconds));
synchronized (events) {
events.clear();
int count = Math.min(MAX_EVENTS, newEvents.size());
events.addAll(newEvents.subList(0, count));
}
} catch (Exception e) {
System.err.println("Error parsing events: " + e.getMessage());
}
}
private int parseTimeToSeconds(String timeString) {
try {
if (timeString.contains("м") && timeString.contains("с")) {
String[] parts = timeString.split("м|с");
int minutes = Integer.parseInt(parts[0].trim());
int seconds = Integer.parseInt(parts[1].trim());
return minutes * 60 + seconds;
} else if (timeString.contains("м")) {
int minutes = Integer.parseInt(timeString.replaceAll("[^0-9]", "").trim());
return minutes * 60;
} else if (timeString.contains("с")) {
return Integer.parseInt(timeString.replaceAll("[^0-9]", "").trim());
}
return 0;
} catch (Exception e) {
return 0;
}
}
@Subscribe
public void render(EventRenderer2D eventDisplay) {
betterText.update();
if (!isInitialized) {
initialize();
}
MatrixStack ms = eventDisplay.getMatrixStack();
float posX = dragging.getX();
float posY = dragging.getY();
float fontSize = 6.5F;
float padding = 5;
boolean dataStale = System.currentTimeMillis() - lastSuccessfulFetch > 15000 && lastSuccessfulFetch > 0;
float maxWidth = Fonts.regular_medium.getWidth("Events", fontSize) + padding * 2;
eventsHeight = 0;
synchronized (events) {
for (EventInfo event : events) {
String eventText = event.getServer() + ": " + event.getTimeRemaining();
float textWidth = Fonts.regular_medium.getWidth(eventText, fontSize) + padding * 2;
maxWidth = Math.max(maxWidth, textWidth);
eventsHeight += (fontSize + padding);
}
}
width = Math.max(maxWidth, 80);
headerHeight = fontSize + padding * 2;
height = headerHeight + spacingGap + eventsHeight - 2;
dragging.setWidth(width);
dragging.setHeight(height);
HUD.drawClientRect(posX - 5, posY, width, height, ms, 5);
ITextComponent ico = GradientUtil.gradient("Events", ColorUtil.rgb(190, 190, 190), ColorUtil.rgb(70, 70, 70));
Fonts.regular_medium.drawCenteredText(ms, ico, posX + 10, posY + 4f, 6.5F, 255, 0.05F);
if (events.isEmpty()) {
String statusText = lastSuccessfulFetch == 0 ? "Loading" + betterText.getOutput() : "No unknown events";
if (dataStale) {
statusText = "Connection to host";
}
Fonts.regular_medium.drawText(ms, statusText,
(float) (posX - 1 + width / 3.5F),
posY - 8 + headerHeight + padding,
dataStale ? ColorUtil.rgba(255, 100, 100, 255) : ColorUtil.rgb(170, 170, 170),
6.5F, 0.05F);
return;
}
float currentY = posY + headerHeight - 2;
synchronized (events) {
for (EventInfo event : events) {
String eventText = event.getServer() + ": " + event.getTimeRemaining();
int color;
if (event.getSeconds() <= 30) {
long time = System.currentTimeMillis();
float frequency = 2.0f;
float alphaWave = (float) ((Math.sin(time / 1000.0 * frequency * Math.PI) + 1) / 2);
int alpha = (int) (100 + 155 * alphaWave);
color = ColorUtil.rgba(255, 135, 135, alpha);
} else if (event.getSeconds() <= 300) {
color = ColorUtil.rgba(255, 200, 100, 255);
} else {
color = ColorUtil.rgba(200, 200, 200, 255);
}
Fonts.regular_medium.drawText(ms, eventText, posX - 1, currentY, color, 6.5F, 0.05F);
currentY += fontSize + padding;
}
}
}
private final BetterText betterText = new BetterText(List.of(
"...", "...", "..."
), 100);
}