Вверх ↑
Ответов: 466
#1: 2025-01-27 18:29:12 ЛС | профиль | цитата
Codding 1.5.2


Приветствую, данный пост создан с целью популяризации программирования и профессии программиста
среди творческих личностей.


Перейду сразу к сути, без установки рабочей среды

Урок первый. Работа с GUI + инициализация
В этом уроке рассмотрим примитивный вывод никнейма, даты, времени и пинга в GUI

1. Создаем пакет и в нем первый класс вашего будущего проекта

package net.minecraft.fth;



public class Future {



}


2. Чтобы ваш класс "работал", инициализируем его в основном классе Minecraft


package net.minecraft.fth;



public class Future {



public static Minecraft mc; //объявляем статический класс переменной mc, который хранит в себе класс Minecraft. "Позволяет взаимодействовать с ним"



public Future() {

	    mc = Minecraft.getMinecraft(); // Инициализация mc

	}

}


3. Открываем основной класс игры Minecraft и добавляем следующее


public abstract class Minecraft implements Runnable, IPlayerUsage

{

	/** FTH */

	public Future fth;



//Остальная часть кода



public Minecraft(Canvas par1Canvas, MinecraftApplet par2MinecraftApplet, int par3, int par4, boolean par5)

//код

this.fth = new Future();

//код


Таким образом, наш новый класс Future теперь может взаимодействовать с нашей игрой.

4. Добавление переменных.

package net.minecraft.fth;



public class Future {



    public static Minecraft mc; // Объявляем статическую переменную mc, которая хранит в себе класс Minecraft. "Позволяет взаимодействовать с ним"



    public int ping = 0; // Переменная для хранения значения пинга



    private String pingTimeStr = "ping: 0 ms"; // Строка для отображения пинга



    private static String dateTime = ""; // Строка для хранения текущей даты и времени



    public static String timingInfo = ""; // Статическая строка для хранения информации о времени



    public Future() {

        mc = Minecraft.getMinecraft(); // Инициализация mc

    }

}


5. Методы для обновления переменных

Теперь давайте добавим методы для обновления значений пинга и даты/времени. Эти методы будут вызываться в нужные моменты, например, при обновлении состояния игры.


public void updatePing(int newPing) {

    this.ping = newPing; // Обновляем значение пинга

    this.pingTimeStr = "ping: " + newPing + " ms"; // Обновляем строку для отображения пинга

}



public void updateDateTime() {

    SimpleDateFormat sd = new SimpleDateFormat("dd.MM.yyyy HH:mm");

    dateTime = sd.format(new Date()); // Обновляем строку с текущей датой и временем

}


6. Создание метода отрисовки информации в GUI

public void renderGUI(GuiIngame gui, int width, int height) { 

GL11.glPushMatrix(); // Начало трансформации для масштабирования 

GL11.glScalef(0.5F, 0.5F, 1.0F); // Масштабирование



// Начальные координаты для отрисовки

int startX = 44;

int startY = 13;



// Получение имени игрока

String playerName = mc.thePlayer.username;

mc.fontRenderer.drawStringWithShadow(playerName, startX + 20, startY - 10, 16777215); // Вывод никнейма



// Отображение времени пинга

mc.fontRenderer.drawStringWithShadow(this.pingTimeStr, 2 * width - 120, 2, 16777215); // Вывод пинга



// Обновление и отображение текущей даты и времени

SimpleDateFormat sd = new SimpleDateFormat("dd.MM.yyyy HH:mm");

String currentDateTime = sd.format(new Date()); // Получение текущей даты и времени

mc.fontRenderer.drawStringWithShadow(currentDateTime, 2 * width - 220, 2, 16777215); // Вывод даты и времени



GL11.glPopMatrix(); // Завершение трансформации


7. Полноценный код

package net.minecraft.fth;



import java.text.SimpleDateFormat;

import java.util.Date;

import org.lwjgl.opengl.GL11;

import net.minecraft.client.Minecraft;

import net.minecraft.src.GuiIngame;



public class Future {



    public static Minecraft mc; // Экземпляр Minecraft



    private String pingTimeStr = "Ping: 0 ms"; // Строка для отображения пинга

    private static String currentDateTime = ""; // Строка для хранения текущей даты и времени

    private static int dateTimeCounter = 0; // Счетчик для обновления времени



    public Future() {

        mc = Minecraft.getMinecraft(); // Инициализация mc

    }



    // Метод для обновления пинга

    public void updatePing(int newPing) {

        this.pingTimeStr = "Ping: " + newPing + " ms"; // Обновление строки с пингом

    }



    // Метод для отрисовки информации в GUI

    public void renderGUI(GuiIngame gui, int width, int height) {

        GL11.glPushMatrix(); // Начало трансформации для масштабирования

        GL11.glScalef(0.5F, 0.5F, 1.0F); // Масштабирование



        // Начальные координаты для отрисовки

        int startX = 44;

        int startY = 13;



        // Получение имени игрока

        String playerName = mc.thePlayer.username;

        mc.fontRenderer.drawStringWithShadow(playerName, startX + 20, startY - 10, 16777215); // Вывод никнейма



        // Отображение времени пинга

        mc.fontRenderer.drawStringWithShadow(this.pingTimeStr, 2 * width - 120, 2, 16777215); // Вывод пинга



        // Обновление и отображение текущей даты и времени

        if (dateTimeCounter == 0) {

            SimpleDateFormat sd = new SimpleDateFormat("dd.MM.yyyy HH:mm");

            currentDateTime = sd.format(new Date()); // Обновление строки с текущей датой и временем

            dateTimeCounter = 1000; // Сброс счетчика

        } else {

            dateTimeCounter--;

        }

        mc.fontRenderer.drawStringWithShadow(currentDateTime, 2 * width - 220, 2, 16777215); // Вывод даты и времени



        GL11.glPopMatrix(); // Завершение трансформации

    }

}


Что Вы узнали в этом уроке:

1. Создание класса: Вы создали класс, который отвечает за отображение информации в GUI.
2. Инициализация Minecraft: Вы узнали, как получить доступ к экземпляру Minecraft для взаимодействия с игровым миром.
3. Обновление данных: Вы научились обновлять значения пинга и текущей даты/времени.
4. Отрисовка информации: Вы реализовали метод для отрисовки информации на экране с использованием OpenGL.
5. Интеграция с игрой: Вы узнали, как интегрировать ваш класс в основной цикл игры, чтобы информация обновлялась в реальном времени.


Урок второй. Создание логики разрушения и строительства блоков + вывод
Технические шоколадки

Если Вам понравилось, накидайте лайков. Данная тема будет обновляться.
карма: 49
4
Голосовали:Strife, Shmel, NePalevo, Alamartlt