package electroblob.wizardry.client.gui.config; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.client.config.*; import net.minecraftforge.fml.client.config.GuiEditArrayEntries.StringEntry; import net.minecraftforge.fml.common.registry.EntityEntry; import net.minecraftforge.fml.common.registry.ForgeRegistries; import java.util.Map; import java.util.Map.Entry; import java.util.stream.Collectors; /** * [NYI] Intended as a way of choosing entities by name from all those currently registered, within the config file, so * that users don't have to look up the entity IDs. I can't get this to work correctly at the moment. */ public class EntityNameEntry extends StringEntry { protected final GuiButtonExt btnValue; protected Object entityClass; public EntityNameEntry(GuiEditArray owningScreen, GuiEditArrayEntries owningEntryList, IConfigElement configElement, Object value){ super(owningScreen, owningEntryList, configElement, value); this.btnValue = new GuiButtonExt(0, 0, 0, owningEntryList.controlWidth, 18, I18n.format(this.textFieldValue.getText())); // this.btnValue.enabled = owningScreen.enabled; } @Override public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected, float partialTicks){ //super.drawEntry(slotIndex, x, y, listWidth, slotHeight, mouseX, mouseY, isSelected, partial); this.btnValue.x = listWidth / 4; this.btnValue.y = y; String trans = I18n.format(this.textFieldValue.getText()); if(!trans.equals(this.textFieldValue.getText())) this.btnValue.displayString = trans; else this.btnValue.displayString = this.textFieldValue.getText(); // btnValue.packedFGColour = value ? GuiUtils.getColorCode('2', true) : GuiUtils.getColorCode('4', true); this.btnValue.drawButton(owningEntryList.getMC(), mouseX, mouseY, partialTicks); } @Override public boolean mousePressed(int index, int x, int y, int mouseEvent, int relativeX, int relativeY){ if(this.btnValue.mousePressed(owningEntryList.getMC(), x, y)){ btnValue.playPressSound(owningEntryList.getMC().getSoundHandler()); // Goodness only knows if this works, but the class is unimplemented right now so it doesn't really matter. Map map = ForgeRegistries.ENTITIES.getEntries().stream().collect( Collectors., Object, String>toMap(e -> e.getValue().getClass(), e -> e.getValue().getName())); Minecraft.getMinecraft().displayGuiScreen( new GuiSelectString(this.owningScreen, configElement, index, map, this.getValue(), true)); owningEntryList.recalculateState(); return true; } return super.mousePressed(index, x, y, mouseEvent, relativeX, relativeY); } @Override public void mouseReleased(int index, int x, int y, int mouseEvent, int relativeX, int relativeY){ this.btnValue.mouseReleased(x, y); super.mouseReleased(index, x, y, mouseEvent, relativeX, relativeY); } @Override public Object getValue(){ return this.textFieldValue.getText(); } }