- 3
- 0
Пожалуйста, оформляйте код в соответствии с правилами форума
package com.example.mymod;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.brigadier.arguments.StringArgumentType;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.Component;
import net.minecraftforge.client.event.RenderGuiOverlayEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import static net.minecraft.commands.Commands.argument;
import static net.minecraft.commands.Commands.literal;
@Mod("mymod")
public class MyMod {
public static final String MODID = "mymod";
private boolean showMessage = false;
private String customMessage = "";
private long messageStartTime = 0;
public MyMod() {
// Регистрация событий
MinecraftForge.EVENT_BUS.register(this); // Общие события
}
@SubscribeEvent
public void onRegisterCommands(RegisterCommandsEvent event) {
event.getDispatcher().register(
literal("showmessage")
.then(argument("message", StringArgumentType.string())
.executes(context -> {
customMessage = StringArgumentType.getString(context, "message");
showMessage = true;
messageStartTime = System.currentTimeMillis();
context.getSource().sendSuccess(
() -> Component.literal("Сообщение установлено: " + customMessage),
false
);
return 1;
})
)
);
}
@SubscribeEvent
public void onRenderGuiOverlay(RenderGuiOverlayEvent.Post event) {
if (showMessage) {
long currentTime = System.currentTimeMillis();
if (currentTime - messageStartTime > 10_000) {
showMessage = false;
return;
}
renderCustomMessage(event.getGuiGraphics(), customMessage);
}
}
private void renderCustomMessage(GuiGraphics guiGraphics, String message) {
Minecraft mc = Minecraft.getInstance();
if (mc.font != null && !message.isEmpty()) {
int screenWidth = mc.getWindow().getGuiScaledWidth();
int screenHeight = mc.getWindow().getGuiScaledHeight();
int messageWidth = mc.font.width(message);
int messageHeight = mc.font.lineHeight;
int x = (screenWidth - messageWidth) / 2;
int y = screenHeight - 40;
int padding = 5;
int boxWidth = messageWidth + padding * 2;
int boxHeight = messageHeight + padding * 2;
int boxX = x - padding;
int boxY = y - padding;
drawTransparentRectangle(guiGraphics, boxX, boxY, boxX + boxWidth, boxY + boxHeight, 0x80000000);
guiGraphics.drawString(mc.font, message, x, y, 0xFFFFFF, false);
}
}
private void drawTransparentRectangle(GuiGraphics guiGraphics, int x1, int y1, int x2, int y2, int color) {
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
guiGraphics.fill(x1, y1, x2, y2, color);
RenderSystem.disableBlend();
}
}

Ну не получаеться у меня
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.brigadier.arguments.StringArgumentType;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.Component;
import net.minecraftforge.client.event.RenderGuiOverlayEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import static net.minecraft.commands.Commands.argument;
import static net.minecraft.commands.Commands.literal;
@Mod("mymod")
public class MyMod {
public static final String MODID = "mymod";
private boolean showMessage = false;
private String customMessage = "";
private long messageStartTime = 0;
public MyMod() {
// Регистрация событий
MinecraftForge.EVENT_BUS.register(this); // Общие события
}
@SubscribeEvent
public void onRegisterCommands(RegisterCommandsEvent event) {
event.getDispatcher().register(
literal("showmessage")
.then(argument("message", StringArgumentType.string())
.executes(context -> {
customMessage = StringArgumentType.getString(context, "message");
showMessage = true;
messageStartTime = System.currentTimeMillis();
context.getSource().sendSuccess(
() -> Component.literal("Сообщение установлено: " + customMessage),
false
);
return 1;
})
)
);
}
@SubscribeEvent
public void onRenderGuiOverlay(RenderGuiOverlayEvent.Post event) {
if (showMessage) {
long currentTime = System.currentTimeMillis();
if (currentTime - messageStartTime > 10_000) {
showMessage = false;
return;
}
renderCustomMessage(event.getGuiGraphics(), customMessage);
}
}
private void renderCustomMessage(GuiGraphics guiGraphics, String message) {
Minecraft mc = Minecraft.getInstance();
if (mc.font != null && !message.isEmpty()) {
int screenWidth = mc.getWindow().getGuiScaledWidth();
int screenHeight = mc.getWindow().getGuiScaledHeight();
int messageWidth = mc.font.width(message);
int messageHeight = mc.font.lineHeight;
int x = (screenWidth - messageWidth) / 2;
int y = screenHeight - 40;
int padding = 5;
int boxWidth = messageWidth + padding * 2;
int boxHeight = messageHeight + padding * 2;
int boxX = x - padding;
int boxY = y - padding;
drawTransparentRectangle(guiGraphics, boxX, boxY, boxX + boxWidth, boxY + boxHeight, 0x80000000);
guiGraphics.drawString(mc.font, message, x, y, 0xFFFFFF, false);
}
}
private void drawTransparentRectangle(GuiGraphics guiGraphics, int x1, int y1, int x2, int y2, int color) {
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
guiGraphics.fill(x1, y1, x2, y2, color);
RenderSystem.disableBlend();
}
}

Ну не получаеться у меня