Lua Posted August 28, 2013 Share Posted August 28, 2013 Ive made a gui w/ a textfield and when you enter the unlocalizedname of an item or a block, you receive it. However, it currently does not have metadata or amount support. Ive got an idea on how to do this but ive faced some problems. Id like to get the first 2 digit number then pass that into an int then I can just pass that into the sending of the item and then the next two digit number, id pass that as the metadata. But Im not sure how to get the get two numbers, then ensure theres a space before collecting the other two. So I guess the question is, how can I add some sort of syntax to the textbox, like it has to be in this order or it wont work(name:amount:metadata) and how can I pull the numbers from it? Im sorry if that sounds a bit confusing, dont know how to word it aha. Heres my code: package simplecamping; import java.util.ArrayList; import net.minecraft.block.Block; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; import net.minecraft.item.Item; import net.minecraft.network.packet.Packet250CustomPayload; import net.minecraft.util.ResourceLocation; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.network.PacketDispatcher; public class GuiScribblenauts extends GuiScreen { private GuiTextField textfield; public static Block getBlockToSend; public static Item getItemToSend; public static String thingToSend = "NAME:AMOUNT:DATAVALUE"; static String name = thingToSend.split("\\:")[0]; static String amount = thingToSend.split("\\:")[1]; static String datavalue = thingToSend.split("\\:")[2]; @Override public void initGui() { buttonList = new ArrayList(); buttonList.add(new GuiButton(1, width / 2 - 49, height / 2 + 40, 70, 20, "Enter")); textfield = new GuiTextField(fontRenderer, width / 2 - 87, height / 2 - 10, 200, 20); //textfield.setText("NAME:AMOUNT:METADATA/DAMAGEVALUE"); //so, we'd check the stuff up to the first : then apply that as the name and do the stuff w/ the others } @Override public void actionPerformed(GuiButton button) { if(button.id == 1) { for(final Block b : Block.blocksList) { if(b == null) { continue; } String s = b.getLocalizedName().replaceAll(" ", "").toLowerCase(); if(textfield.getText().toLowerCase().contains(s.toLowerCase())) { getBlockToSend = b; System.out.println("Spawning Block: " + s + " Block id: " + (b.blockID)); } } } for(final Item i : Item.itemsList) { if(i == null) { continue; } String s1 = i.getUnlocalizedName().replace("item.", "").replace("_", "").toLowerCase(); if(textfield.getText().toLowerCase().contains(s1.toLowerCase())) { getItemToSend = i; System.out.println("Spawning: " + s1 + "Item id: " + (i.itemID - 256)); } } PacketDispatcher.sendPacketToServer(new Packet250CustomPayload(Reference.SEND_ITEM_PACKET, new byte[] {1})); } protected void keyTyped(char c, int i) { super.keyTyped(c, i); textfield.textboxKeyTyped(c, i); } protected void mouseClicked(int i, int j, int k) { super.mouseClicked(i, j, k); textfield.mouseClicked(i, j, k); } public void drawScreen(int i, int j, float f) { // drawDefaultBackground(); int x = width / 2 - 125; int y = height / 2 - 100; FMLClientHandler.instance().getClient().renderEngine.func_110577_a(new ResourceLocation(Reference.MOD_ID, "/textures/gui/deftuasd.png")); drawTexturedModalRect(x, y, 0, 0, 256, 256); textfield.drawTextBox(); super.drawScreen(i, j, f); } } Quote Link to comment Share on other sites More sharing options...
GotoLink Posted August 28, 2013 Share Posted August 28, 2013 The easy solution would be to have three boxes for text, then you'll only have to Integer.parseInt(String) on the boxes. If you keep one box, Pattern pat = Pattern.compile("\\d+");//positive digit pattern Matcher mat = pat.matcher(string);//give your text while (mat.find()) { //mat.group() would give the current matching digit } Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.