Jump to content

[1.11 - ~Solved] Using GuiListExtended


Franckyi

Recommended Posts

Hi !

I'm still working on my "Item Editor" mod for mapmakers. I'm working on a simple way to add enchantments to an item, so I created a list of all enchantments in Vanilla Minecraft.

I created my enchant list by extending

GuiListExtended

and my list items by implementing

IGuiListEntry

.

Everything seems to be working well, except the scroll bar. I did nothing about it and I don't know how it works. I can't find any tutorials on Internet.

I can give you source codes if you need.

Can someone help me ?

Link to comment
Share on other sites

Ok then, there you have the source code :

 

 

My GuiScreen :

package com.franckyi.itemeditor.gui;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.franckyi.itemeditor.ItemEditorMod;
import com.franckyi.itemeditor.gui.components.GuiItemEditorEnchantList;
import com.franckyi.itemeditor.misc.ModEnchantmentHelper.ItemEnchantment;
import com.franckyi.itemeditor.packet.EditItemEnchantMessage;
import com.franckyi.itemeditor.packet.EditItemLoreMessage;
import com.franckyi.itemeditor.packet.ItemEditorPacketHandler;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;

public class GuiItemEditorEnchant extends GuiScreen {

private GuiItemEditorEnchantList enchList;
private GuiTextField[] enchLevels;
private GuiButton cancelButton;
private GuiButton doneButton;

@Override
protected void actionPerformed(GuiButton button) throws IOException {
	enchList.actionPerformed(button);
	if (button == doneButton){
		List<ItemEnchantment> msg = createMessage();
		updateServer(msg);
		updateClient(msg);
	}
	if (button == this.cancelButton || button == this.doneButton)
		switchGui(ItemEditorGuiHandler.ITEM_EDITOR_MENU);
}

@Override
public boolean doesGuiPauseGame() {
	return true;
}

@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
	drawDefaultBackground();
	enchList.drawScreen(mouseX, mouseY, partialTicks);
	drawString(fontRendererObj, "Edit Item Enchantments", this.width / 2 - 50, (int) (this.height / 2 - this.height / 2.5), 0xffffff);
	super.drawScreen(mouseX, mouseY, partialTicks);
}

@Override
public void initGui() {
	enchList = new GuiItemEditorEnchantList(mc, width, height, 50, height-50, 25);
	for(ItemEnchantment ench : enchList.getEnchantmentList())
		ench.getTextField().setText(EnchantmentHelper.getEnchantmentLevel(Enchantment.getEnchantmentByID(ench.getEnch().getId()), Minecraft.getMinecraft().thePlayer.getHeldItemMainhand()) + "");
	buttonList.add(doneButton = new GuiButton(0, this.width / 2 - 100, (int) (this.height / 2 + this.height / 2.6), 90, 20, "Done"));
	buttonList.add(cancelButton = new GuiButton(0, this.width / 2 + 10, (int) (this.height / 2 + this.height / 2.6), 90, 20, "Cancel"));
}

@Override
protected void keyTyped(char typedChar, int keyCode) throws IOException {
	for(ItemEnchantment ench : enchList.getEnchantmentList())
		if(Character.isDigit(typedChar) || keyCode == 14 || keyCode == 211)
			ench.getTextField().textboxKeyTyped(typedChar, keyCode);
	super.keyTyped(typedChar, keyCode);
}

@Override
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
	for(ItemEnchantment ench : enchList.getEnchantmentList())
		ench.getTextField().mouseClicked(mouseX, mouseY, mouseButton);
	super.mouseClicked(mouseX, mouseY, mouseButton);
}

@Override
public void updateScreen() {
	for(ItemEnchantment ench : enchList.getEnchantmentList())
		ench.getTextField().updateCursorCounter();
	super.updateScreen();
}

private List<ItemEnchantment> createMessage() {
	List<ItemEnchantment> msgList = new ArrayList<ItemEnchantment>();
	for(ItemEnchantment ench : enchList.getEnchantmentList()){
		if(ench.getTextField().getText().equals(""))
			ench.getTextField().setText("0");
		msgList.add(new ItemEnchantment(ench.getEnch().getId(), Integer.parseInt(ench.getTextField().getText())));
	}
	return msgList;
}

private void updateServer(List<ItemEnchantment> msg) {
	ItemEditorPacketHandler.INSTANCE.sendToServer(new EditItemEnchantMessage(createMessage()));
}

private void updateClient(List<ItemEnchantment> msg) {
	if(Minecraft.getMinecraft().thePlayer.getHeldItemMainhand().getTagCompound() != null)
		Minecraft.getMinecraft().thePlayer.getHeldItemMainhand().getTagCompound().removeTag("ench");
	for (ItemEnchantment ench : msg)
		if (ench.getLevel() != 0)
			Minecraft.getMinecraft().thePlayer.getHeldItemMainhand().addEnchantment(
					Enchantment.getEnchantmentByID(ench.getEnch().getId()), ench.getLevel());
}

private void switchGui(int id){
	Minecraft.getMinecraft().thePlayer.openGui(ItemEditorMod.instance, id, Minecraft.getMinecraft().theWorld,
			(int) Minecraft.getMinecraft().thePlayer.posX, (int) Minecraft.getMinecraft().thePlayer.posY,
			(int) Minecraft.getMinecraft().thePlayer.posZ);
}

}

 

My GuiListExtended :

package com.franckyi.itemeditor.gui.components;

import java.util.ArrayList;
import java.util.List;

import com.franckyi.itemeditor.misc.ModEnchantmentHelper.EnumEnchantmentList;
import com.franckyi.itemeditor.misc.ModEnchantmentHelper.ItemEnchantment;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiListExtended;
import net.minecraft.client.gui.GuiScreen;

public class GuiItemEditorEnchantList extends GuiListExtended{

private List<ItemEnchantment> enchList;

public GuiItemEditorEnchantList(Minecraft mcIn, int widthIn, int heightIn, int topIn, int bottomIn,
		int slotHeightIn) {
	super(mcIn, widthIn, heightIn, topIn, bottomIn, slotHeightIn);
	enchList = new ArrayList<ItemEnchantment>();
	enchList.addAll(EnumEnchantmentList.getDefaults(widthIn, heightIn));
}

@Override
public IGuiListEntry getListEntry(int index) {
	return enchList.get(index);
}

@Override
protected int getSize() {
	return 30;
}

public List<ItemEnchantment> getEnchantmentList() {
	return enchList;
}

}

 

My IGuiListEntry (with other stuff I use) :

package com.franckyi.itemeditor.misc;

import java.util.ArrayList;
import java.util.List;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiListExtended.IGuiListEntry;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnumEnchantmentType;

public class ModEnchantmentHelper {

public static class ItemEnchantment implements IGuiListEntry {

	private int index;
	private EnumEnchantmentList ench;
	private int level;
	private GuiTextField tf;

	public ItemEnchantment(int index, EnumEnchantmentList ench, int level, int widthIn, int heightIn) {
		this.index = index;
		this.ench = ench;
		this.level = level;
		tf = new GuiTextField(index, Minecraft.getMinecraft().fontRendererObj, widthIn / 2 + 50, 0, 50, 15);
	}

	public ItemEnchantment(int id, int level) {
		this.ench = EnumEnchantmentList.getTypeFromID(id);
		this.level = level;
	}

	public int getIndex() {
		return index;
	}

	public EnumEnchantmentList getEnch() {
		return ench;
	}

	public int getLevel() {
		return level;
	}

	public GuiTextField getTextField() {
		return tf;
	}

	@Override
	public void setSelected(int p_178011_1_, int p_178011_2_, int p_178011_3_) {

	}

	@Override
	public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY,
			boolean isSelected) {
		tf.yPosition = y;
		tf.drawTextBox();
		Minecraft.getMinecraft().ingameGUI.drawString(Minecraft.getMinecraft().fontRendererObj, ench.getName(), x,
				y + 5,
				(ench.type.canEnchantItem(Minecraft.getMinecraft().thePlayer.getHeldItemMainhand().getItem()))
						? 0x00aa00 : 0xffffff);

	}

	@Override
	public boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX,
			int relativeY) {
		return false;
	}

	@Override
	public void mouseReleased(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY) {

	}

}

public static enum EnumEnchantmentList {

	PROTECTION_ALL("Protection", 0, EnumEnchantmentType.ARMOR), PROTECTION_FIRE("Fire Protection", 1,
			EnumEnchantmentType.ARMOR), PROTECTION_FALL("Feather Falling", 2,
					EnumEnchantmentType.ARMOR_FEET), PROTECTION_EXPLOSION("Blast Protection", 3,
							EnumEnchantmentType.ARMOR), PROTECTION_PROJECTILE("Projectile Protection", 4,
									EnumEnchantmentType.ARMOR), OXYGEN("Respiration", 5,
											EnumEnchantmentType.ARMOR_HEAD), WATER_WORKER("Aqua Affinity", 6,
													EnumEnchantmentType.ARMOR_HEAD), THORNS("Thorns", 7,
															EnumEnchantmentType.ARMOR), WATER_WALKER(
																	"Depth Strider", 8,
																	EnumEnchantmentType.ARMOR_FEET), FROST_WALKER(
																			"Frost Walker", 9,
																			EnumEnchantmentType.ARMOR_FEET), BINDING_CURSE(
																					"Curse of Binding", 10,
																					EnumEnchantmentType.WEARABLE),

	DAMAGE_ALL("Sharpness", 16, EnumEnchantmentType.WEAPON), DAMAGE_UNDEAD("Smite", 17,
			EnumEnchantmentType.WEAPON), DAMAGE_ARTHROPODS("Bane of Arthropods", 18,
					EnumEnchantmentType.WEAPON), KNOCKBACK("Knockback", 19,
							EnumEnchantmentType.WEAPON), FIRE_ASPECT("Fire Aspect", 20,
									EnumEnchantmentType.WEAPON), LOOT_BONUS("Looting", 21,
											EnumEnchantmentType.WEAPON), SWEEPING_EDGE("Sweeping Edge", 22,
													EnumEnchantmentType.WEAPON),

	DIGGING("Efficiency", 32, EnumEnchantmentType.DIGGER), UNTOUCHING("Silk Touch", 33,
			EnumEnchantmentType.DIGGER), DURABILITY("Unbreaking", 34,
					EnumEnchantmentType.BREAKABLE), LOOT_BONUS_DIGGER("Fortune", 35, EnumEnchantmentType.DIGGER),

	ARROW_DAMAGE("Power", 48, EnumEnchantmentType.BOW), ARROW_KNOCKBACK("Punch", 49,
			EnumEnchantmentType.BOW), ARROW_FIRE("Flame", 50,
					EnumEnchantmentType.BOW), ARROW_INFINITE("Infinity", 51, EnumEnchantmentType.BOW),

	LOOT_BONUS_FISHING("Luck of the Sea", 61, EnumEnchantmentType.FISHING_ROD), FISHING_SPEED("Lure", 62,
			EnumEnchantmentType.FISHING_ROD),

	MENDING("Mending", 70, EnumEnchantmentType.BREAKABLE), VANISHING_CURSE("Curse of Vanishing", 71,
			EnumEnchantmentType.BREAKABLE);

	private String name;
	private int id;
	private EnumEnchantmentType type;

	private EnumEnchantmentList(String name, int id, EnumEnchantmentType type) {
		this.name = name;
		this.id = id;
		this.type = type;
	}

	public String getName() {
		return name;
	}

	public int getId() {
		return id;
	}

	public EnumEnchantmentType getType() {
		return type;
	}

	public static List<ItemEnchantment> getDefaults(int widthIn, int heightIn) {
		List<ItemEnchantment> enchList = new ArrayList<ItemEnchantment>();
		for (EnumEnchantmentList ench : values()) {
			enchList.add(new ItemEnchantment(ench.ordinal(), ench, 0, widthIn, heightIn));
		}
		return enchList;
	}

	public static EnumEnchantmentList getTypeFromID(int id){
		for(EnumEnchantmentList type : values())
			if(id == type.getId())
				return type;
		return null;
	}

}

}

 

 

 

Edit : Lol, when I posted the code I saw I always used 'Minecraft.getMinecraft()' instead of 'mc' in my GUIs ^^ Let's fix that :P

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I have no idea how a UI mod crashed a whole world but HUGE props to you man, just saved me +2 months of progress!  
    • So i know for a fact this has been asked before but Render stuff troubles me a little and i didnt find any answer for recent version. I have a custom nausea effect. Currently i add both my nausea effect and the vanilla one for the effect. But the problem is that when I open the inventory, both are listed, while I'd only want mine to show up (both in the inv and on the GUI)   I've arrived to the GameRender (on joined/net/minecraft/client) and also found shaders on client-extra/assets/minecraft/shaders/post and client-extra/assets/minecraft/shaders/program but I'm lost. I understand that its like a regular screen, where I'd render stuff "over" the game depending on data on the server, but If someone could point to the right client and server classes that i can read to see how i can manage this or any tip would be apreciated
    • Let me try and help you with love spells, traditional healing, native healing, fortune telling, witchcraft, psychic readings, black magic, voodoo, herbalist healing, or any other service your may desire within the realm of african native healing, the spirits and the ancestors. I am a sangoma and healer. I could help you to connect with the ancestors , interpret dreams, diagnose illness through divination with bones, and help you heal both physical and spiritual illness. We facilitate the deepening of your relationship to the spirit world and the ancestors. Working in partnership with one\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’s ancestors is a gift representing a close link with the spirit realm as a mediator between the worlds.*   Witchdoctors, or sorcerers, are often purveyors of mutis and charms that cause harm to people. we believe that we are here for only one purpose, to heal through love and compassion.*   African people share a common understanding of the importance of ancestors in daily life. When they have lost touch with their ancestors, illness may result or bad luck. Then a traditional healer, or sangoma, is sought out who may prescribe herbs, changes in lifestyle, a career change, or changes in relationships. The client may also be told to perform a ceremony or purification ritual to appease the ancestors.*   Let us solve your problems using powerful African traditional methods. We believe that our ancestors and spirits give us enlightenment, wisdom, divine guidance, enabling us to overcome obstacles holding your life back. Our knowledge has been passed down through centuries, being refined along the way from generation to generation. We believe in the occult, the paranormal, the spirit world, the mystic world.*   The services here are based on the African Tradition Value system/religion,where we believe the ancestors and spirits play a very important role in society. The ancestors and spirits give guidance and counsel in society. They could enable us to see into the future and give solutions to the problems affecting us. We use rituals, divination, spells, chants and prayers to enable us tackle the task before us.*   I have experience in helping and guiding many people from all over the world. My psychic abilities may help you answer and resolve many unanswered questions
    • Let me try and help you with love spells, traditional healing, native healing, fortune telling, witchcraft, psychic readings, black magic, voodoo, herbalist healing, or any other service your may desire within the realm of african native healing, the spirits and the ancestors. I am a sangoma and healer. I could help you to connect with the ancestors , interpret dreams, diagnose illness through divination with bones, and help you heal both physical and spiritual illness. We facilitate the deepening of your relationship to the spirit world and the ancestors. Working in partnership with one\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’s ancestors is a gift representing a close link with the spirit realm as a mediator between the worlds.*   Witchdoctors, or sorcerers, are often purveyors of mutis and charms that cause harm to people. we believe that we are here for only one purpose, to heal through love and compassion.*   African people share a common understanding of the importance of ancestors in daily life. When they have lost touch with their ancestors, illness may result or bad luck. Then a traditional healer, or sangoma, is sought out who may prescribe herbs, changes in lifestyle, a career change, or changes in relationships. The client may also be told to perform a ceremony or purification ritual to appease the ancestors.*   Let us solve your problems using powerful African traditional methods. We believe that our ancestors and spirits give us enlightenment, wisdom, divine guidance, enabling us to overcome obstacles holding your life back. Our knowledge has been passed down through centuries, being refined along the way from generation to generation. We believe in the occult, the paranormal, the spirit world, the mystic world.*   The services here are based on the African Tradition Value system/religion,where we believe the ancestors and spirits play a very important role in society. The ancestors and spirits give guidance and counsel in society. They could enable us to see into the future and give solutions to the problems affecting us. We use rituals, divination, spells, chants and prayers to enable us tackle the task before us.*   I have experience in helping and guiding many people from all over the world. My psychic abilities may help you answer and resolve many unanswered questions
    • Let me try and help you with love spells, traditional healing, native healing, fortune telling, witchcraft, psychic readings, black magic, voodoo, herbalist healing, or any other service your may desire within the realm of african native healing, the spirits and the ancestors. I am a sangoma and healer. I could help you to connect with the ancestors , interpret dreams, diagnose illness through divination with bones, and help you heal both physical and spiritual illness. We facilitate the deepening of your relationship to the spirit world and the ancestors. Working in partnership with one\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\’s ancestors is a gift representing a close link with the spirit realm as a mediator between the worlds.*   Witchdoctors, or sorcerers, are often purveyors of mutis and charms that cause harm to people. we believe that we are here for only one purpose, to heal through love and compassion.*   African people share a common understanding of the importance of ancestors in daily life. When they have lost touch with their ancestors, illness may result or bad luck. Then a traditional healer, or sangoma, is sought out who may prescribe herbs, changes in lifestyle, a career change, or changes in relationships. The client may also be told to perform a ceremony or purification ritual to appease the ancestors.*   Let us solve your problems using powerful African traditional methods. We believe that our ancestors and spirits give us enlightenment, wisdom, divine guidance, enabling us to overcome obstacles holding your life back. Our knowledge has been passed down through centuries, being refined along the way from generation to generation. We believe in the occult, the paranormal, the spirit world, the mystic world.*   The services here are based on the African Tradition Value system/religion,where we believe the ancestors and spirits play a very important role in society. The ancestors and spirits give guidance and counsel in society. They could enable us to see into the future and give solutions to the problems affecting us. We use rituals, divination, spells, chants and prayers to enable us tackle the task before us.*   I have experience in helping and guiding many people from all over the world. My psychic abilities may help you answer and resolve many unanswered questions
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.