Начинающий
- Статус
- Оффлайн
- Регистрация
- 7 Сен 2025
- Сообщения
- 3
- Реакции
- 0
- Выберите загрузчик игры
- Прочие моды
первый раз что-то на юг закидываю надеюсь зайдет.
сс - прикрепил
код:
сс - прикрепил
код:
кодик снов:
package im.expensive.ui.mainmenu;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import im.expensive.Expensive;
import im.expensive.utils.client.ClientUtil;
import im.expensive.utils.client.IMinecraft;
import im.expensive.utils.client.Vec2i;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.KawaseBlur;
import im.expensive.utils.render.Stencil;
import im.expensive.utils.render.font.Fonts;
import lombok.Getter;
import net.minecraft.client.MainWindow;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.MultiplayerScreen;
import net.minecraft.client.gui.screen.OptionsScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.WorldSelectionScreen;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ThreadLocalRandom;
public class MainScreen extends Screen implements IMinecraft {
private final ResourceLocation backmenu = new ResourceLocation("expensive/images/backmenu.png");
private final ResourceLocation logo = new ResourceLocation("expensive/images/logo.png");
public static final ResourceLocation buttonTex = new ResourceLocation("expensive/images/button.png");
private final List<Button> buttons = new ArrayList<>();
private static final CopyOnWriteArrayList<Particle> particles = new CopyOnWriteArrayList<>();
private final StopWatch stopWatch = new StopWatch();
private SnowSettingsScreen snowSettings;
public MainScreen() {
super(ITextComponent.getTextComponentOrEmpty(""));
this.snowSettings = new SnowSettingsScreen(this);
}
@Override
public void init(Minecraft minecraft, int width, int height) {
super.init(minecraft, width, height);
float widthButton = 160;
float heightButton = 28;
float x = width / 2f - widthButton / 2f;
float y = height / 2f + 20;
buttons.clear();
buttons.add(new Button(x, y, widthButton, heightButton, "Singleplayer", () -> mc.displayGuiScreen(new WorldSelectionScreen(this))));
y += heightButton + 8;
buttons.add(new Button(x, y, widthButton, heightButton, "Multiplayer", () -> mc.displayGuiScreen(new MultiplayerScreen(this))));
y += heightButton + 8;
buttons.add(new Button(x, y, widthButton, heightButton, "Options", () -> mc.displayGuiScreen(new OptionsScreen(this, mc.gameSettings))));
y += heightButton + 8;
buttons.add(new Button(x, y, widthButton, heightButton, "Snow Settings", () -> mc.displayGuiScreen(snowSettings)));
y += heightButton + 8;
buttons.add(new Button(x, y, widthButton, heightButton, "Exit", mc::shutdownMinecraftApplet));
}
@Override
public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
DisplayUtils.drawImage(backmenu, 0, 0, width, height, -1);
if (snowSettings.isSnowEnabled() && stopWatch.isReached((long)(150 / (snowSettings.getParticleCountMultiplier() + 0.1)))) {
particles.add(new Particle());
stopWatch.reset();
}
for (Particle p : particles) {
if (snowSettings.isSnowEnabled()) {
p.render(matrixStack);
}
}
if (!snowSettings.isSnowEnabled() && !particles.isEmpty()) {
particles.clear();
}
MainWindow mainWindow = mc.getMainWindow();
float windowWidth = mainWindow.getScaledWidth();
float windowHeight = mainWindow.getScaledHeight();
float logoW = 1920 / 4.5f;
float logoH = 1080 / 4.5f;
float xLogo = windowWidth / 2f - logoW / 2f;
float yLogo = windowHeight / 2f - logoH - 10;
float floating = (float) Math.sin(System.currentTimeMillis() / 1200.0) * 4f;
mc.gameRenderer.setupOverlayRendering(2);
DisplayUtils.drawImage(logo, xLogo, yLogo + floating, logoW, logoH, -1);
buttons.forEach(b -> b.render(matrixStack, mouseX, mouseY, partialTicks));
Expensive.getInstance().getAltWidget().render(matrixStack, mouseX, mouseY);
mc.gameRenderer.setupOverlayRendering();
}
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
buttons.forEach(b -> b.click((int) mouseX, (int) mouseY, button));
Expensive.getInstance().getAltWidget().click((int) mouseX, (int) mouseY, button);
return super.mouseClicked(mouseX, mouseY, button);
}
private class Particle {
private final float x;
private float y;
private final float speed;
private final float size;
private final int color;
public Particle() {
this.x = ThreadLocalRandom.current().nextFloat() * mc.getMainWindow().getScaledWidth();
this.y = -10;
float baseSpeed = ThreadLocalRandom.current().nextFloat(0.5f, 2.0f);
float baseSize = ThreadLocalRandom.current().nextFloat(1.0f, 3.0f);
this.speed = baseSpeed * snowSettings.getParticleSpeedMultiplier();
this.size = baseSize * snowSettings.getParticleSizeMultiplier();
this.color = snowSettings.getSnowColor();
}
public void render(MatrixStack stack) {
y += speed;
if (size > 3.0f) {
DisplayUtils.drawCircle(x, y, size, color);
DisplayUtils.drawCircle(x - size/2, y, size/2, color);
DisplayUtils.drawCircle(x + size/2, y, size/2, color);
DisplayUtils.drawCircle(x, y - size/2, size/2, color);
DisplayUtils.drawCircle(x, y + size/2, size/2, color);
} else if (size > 1.5f) {
DisplayUtils.drawCircle(x, y, size, color);
DisplayUtils.drawCircle(x + 0.5f, y + 0.5f, size - 0.5f, ColorUtils.rgba(200, 200, 255, 100));
} else {
DisplayUtils.drawCircle(x, y, size, color);
}
if (y > mc.getMainWindow().getScaledHeight()) particles.remove(this);
}
}
private class Button {
@Getter private final float x, y, width, height;
private final String text;
private final Runnable action;
private float anim = 0;
public Button(float x, float y, float width, float height, String text, Runnable action) {
this.x = x; this.y = y; this.width = width; this.height = height;
this.text = text; this.action = action;
}
public void render(MatrixStack stack, int mouseX, int mouseY, float pt) {
boolean hovered = MathUtil.isHovered(mouseX, mouseY, x, y, width, height);
anim = MathHelper.lerp(pt * 0.1f, anim, hovered ? 1f : 0f);
Stencil.initStencilToWrite();
DisplayUtils.drawRoundedRect(x, y, width, height, 4, -1);
Stencil.readStencilBuffer(1);
KawaseBlur.blur.BLURRED.draw();
Stencil.uninitStencilBuffer();
int alpha = (int) (150 + (50 * anim));
int color = ColorUtils.rgba(25, 25, 35, alpha);
DisplayUtils.drawRoundedRect(x, y, width, height, 4, color);
int textColor = ColorUtils.interpolateColor(
ColorUtils.rgba(220, 220, 220, 255),
ColorUtils.rgba(255, 255, 255, 255),
anim
);
int shadowColor = ColorUtils.rgba(0, 0, 0, 150);
Fonts.montserrat.drawCenteredText(
stack,
text,
x + width / 2f + 0.5f,
y + height / 2f - 3.5f,
shadowColor,
8f
);
Fonts.montserrat.drawCenteredText(
stack,
text,
x + width / 2f,
y + height / 2f - 4f,
textColor,
8f
);
}
public void click(int mouseX, int mouseY, int button) {
if (button == 0 && MathUtil.isHovered(mouseX, mouseY, x, y, width, height)) {
action.run();
}
}
}
public class SnowSettingsScreen extends Screen implements IMinecraft {
private final Screen parent;
private float particleCountSlider = 0.5f;
private float particleSizeSlider = 0.5f;
private float particleSpeedSlider = 0.5f;
private boolean snowEnabled = true;
private int snowColor = 0xFFFFFFFF;
public SnowSettingsScreen(Screen parent) {
super(new StringTextComponent("Snow Settings"));
this.parent = parent;
}
@Override
protected void init() {
int centerX = this.width / 2;
int buttonWidth = 200;
int buttonHeight = 20;
int startY = this.height / 4;
this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY, buttonWidth, buttonHeight,
new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"),
button -> {
snowEnabled = !snowEnabled;
button.setMessage(new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"));
}));
this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 30, buttonWidth, buttonHeight,
new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)),
button -> {
particleCountSlider = (particleCountSlider + 0.25f) % 1.25f;
if (particleCountSlider > 1.0f) particleCountSlider = 0.0f;
button.setMessage(new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)));
}));
this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 60, buttonWidth, buttonHeight,
new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)),
button -> {
particleSizeSlider = (particleSizeSlider + 0.25f) % 1.25f;
if (particleSizeSlider > 1.0f) particleSizeSlider = 0.0f;
button.setMessage(new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)));
}));
this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 90, buttonWidth, buttonHeight,
new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)),
button -> {
particleSpeedSlider = (particleSpeedSlider + 0.25f) % 1.25f;
if (particleSpeedSlider > 1.0f) particleSpeedSlider = 0.0f;
button.setMessage(new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)));
}));
this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 120, buttonWidth, buttonHeight,
new StringTextComponent("Change Color"),
button -> {
float[] hsv = new float[3];
java.awt.Color.RGBtoHSB((snowColor >> 16) & 0xFF, (snowColor >> 8) & 0xFF, snowColor & 0xFF, hsv);
hsv[0] = (hsv[0] + 0.1f) % 1.0f;
int rgb = java.awt.Color.HSBtoRGB(hsv[0], 0.8f, 1.0f);
snowColor = (0xFF << 24) | (rgb & 0x00FFFFFF);
}));
this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 150, buttonWidth, buttonHeight,
new StringTextComponent("Reset to Default"),
button -> {
particleCountSlider = 0.5f;
particleSizeSlider = 0.5f;
particleSpeedSlider = 0.5f;
snowColor = 0xFFFFFFFF;
}));
this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - 100, this.height - 30, 200, 20,
new StringTextComponent("Back"),
button -> mc.displayGuiScreen(parent)));
}
@Override
public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
renderBackground(matrixStack);
drawCenteredString(matrixStack, this.font, "Snow Settings", this.width / 2, 20, 0xFFFFFF);
int colorBoxX = this.width / 2 + 120;
int colorBoxY = this.height / 4 + 123;
DisplayUtils.drawRect(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, snowColor);
DisplayUtils.drawRectOutline(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, 1, 0xFF000000);
super.render(matrixStack, mouseX, mouseY, partialTicks);
Fonts.montserrat.drawText(matrixStack, "Current Color:", colorBoxX - 80, colorBoxY + 5, 0xFFFFFF, 6f);
}
public boolean isSnowEnabled() {
return snowEnabled;
}
public float getParticleCountMultiplier() {
return particleCountSlider;
}
public float getParticleSizeMultiplier() {
return particleSizeSlider * 4 + 0.5f;
}
public float getParticleSpeedMultiplier() {
return particleSpeedSlider * 3 + 0.2f;
}
public int getSnowColor() {
return snowColor;
}
}
}
