Hello everyone, i'm new with programing Mods, and will need a lot of your help if possible,
Im trying to make a new GUI interface responsible to control the Droprate of game, it will control de loot drop and loot table for mobs and even blocks, but i try to make a simple Gui Screen, and wenever i try to use it, the game crash's with the error message in the subject, here is the code im using to:
IDE: IntelliJ Comunity - latest version
Forge: 47.3.0
Minecraft version: 1.20.1
mapping_channel: parchment
mapping_version=2023.09.03-1.20.1
Crash report link: https://pastebin.com/6dV8k1Fw
Code im using is:
package createchronical.droprateconfig;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import java.util.HashMap;
import java.util.Map;
public class ConfigScreen extends Screen {
private static final ResourceLocation BACKGROUND_TEXTURE =
new ResourceLocation("droprateconfig", "textures/gui/config_background.png");
// Mapa de mobs e itens com seus respectivos drop rates
private final Map<String, Integer> dropRates = new HashMap<>();
public ConfigScreen() {
super(Component.literal("Configurações de Drop Rate"));
// Inicializa com valores de drop rate padrão
dropRates.put("Zombie", 10); // Exemplo de mob
dropRates.put("Creeper", 5); // Exemplo de mob
dropRates.put("Iron Ore", 50); // Exemplo de item
dropRates.put("Diamond", 2); // Exemplo de item
}
@Override
protected void init() {
// Cria um botão para cada mob/item e adiciona na tela
int yOffset = this.height / 2 - 100; // Posicionamento inicial
for (Map.Entry<String, Integer> entry : dropRates.entrySet()) {
String itemName = entry.getKey();
int dropRate = entry.getValue();
// Cria um botão para cada mob/item
this.addRenderableWidget(Button.builder(
Component.literal(itemName + ": " + dropRate + "%"),
button -> onDropRateButtonPressed(itemName)
).bounds(this.width / 2 - 100, yOffset, 200, 20).build());
yOffset += 25; // Incrementa a posição Y para o próximo botão
}
// Adiciona o botão de "Salvar Configurações"
this.addRenderableWidget(Button.builder(Component.literal("Salvar Configurações"), button -> onSavePressed())
.bounds(this.width / 2 - 100, yOffset, 200, 20)
.build());
}
private void onDropRateButtonPressed(String itemName) {
// Lógica para alterar o drop rate do item/mob selecionado
// Aqui, vamos apenas incrementar o valor como exemplo
int currentRate = dropRates.get(itemName);
dropRates.put(itemName, currentRate + 5); // Aumenta o drop rate em 5%
}
private void onSavePressed() {
// Lógica para salvar as configurações (temporariamente apenas na memória)
// Vamos apenas imprimir para verificar
dropRates.forEach((item, rate) -> {
System.out.println("Item: " + item + " | Novo Drop Rate: " + rate + "%");
});
// Fecha a tela após salvar
Screen pGuiScreen = null;
assert this.minecraft != null;
this.minecraft.setScreen(pGuiScreen);
}
@Override
public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
this.renderBackground(guiGraphics);
guiGraphics.blit(BACKGROUND_TEXTURE, this.width / 2 - 128, this.height / 2 - 128, 0, 0, 256, 256, 256, 256);
super.render(guiGraphics, mouseX, mouseY, partialTicks);
}
}