Posted March 18, 201312 yr Hey i cannot find anywhere help how to make own gui, where to put all sources to what files. Now i dont see before some time ago there was some packet handler at tutorial but now it is not, and or some implement in proxy. What is all about. For 5 day's i was searching some tutorials but all are with container and entities SHIT. I don wana have an entity, i wana make item that will set metadata for blocks in gui menu. All tutorials about gui were in mod loader or outdated or shit entities none of them has reach my problem. I wana make own gui. ALso gui must work on serwer. BTW how to make such a tab gui like in creative mode player has? Also tutorial section in wiki should have a own tutorial about gui only, not containers. Plz help.
March 18, 201312 yr you have to make a tile-entity to call your proxy's which call your container and your gui as the container is what the server uses to detect all the changes in the gui well the gui renders on the player's client then you will need recipes class and buttons to detect the item in the slot then when the button to change the item is pressed you detect the item in the slot and change it to what you want. So you know gui's work on both servers and clients by using the container and gui system. and here is a list of tutorials: http://lmgtfy.com/?q=minecraft+forge+gui+tutorial also you could look at how the furnace does it duh. Creator of Jobo's ModLoader If I helped you could you please click the thank you button and applaud my karma.
March 19, 201312 yr Author I already told it's not going to be entity i dont need such tingh even to deal with entitity. Only item that onuse popsgui and change metadatawithnotify. For second i was trying to make a gui by thoe tutorials but even eclise show me only error when trying to: @Mod(modid="Testmod", name="Test_mod", version="0.0.0") @NetworkMod(clientSideRequired=true, serverSideRequired=false, clientPacketHandlerSpec = @SidedPacketHandler(channels = {"TestMod" }, packetHandler = ClientPacketHandler.class), serverPacketHandlerSpec = @SidedPacketHandler(channels = {"TestMod" }, packetHandler = ServerPacketHandler.class)) error And i had to set even to null becouse mcpc refouse to work or register a handler even NetworkRegistry.instance().registerGuiHandler(this, null); I DON'T NEED and DON'T wana a entity or CONTAINER. Just listen what i had wrote in post 1.
March 19, 201312 yr I was looking for a tut for this also, in the end I implemented my GUI based on few sentences from some forum by trial and error. Most of the code related to GUI is in these files (you can browse the repo, all necessary should be located in the food module): https://github.com/mnn/jaffas/blob/0ff7080783cdded74c8d6f4d735160fa9c52395e/src/minecraft/monnef/jaffas/food/common/SpawnStonePacketUtils.java https://github.com/mnn/jaffas/blob/0ff7080783cdded74c8d6f4d735160fa9c52395e/src/minecraft/monnef/jaffas/food/item/ItemSpawnStone.java https://github.com/mnn/jaffas/blob/0ff7080783cdded74c8d6f4d735160fa9c52395e/src/minecraft/monnef/jaffas/food/client/GuiSpawnStone.java mnn.getNativeLang() != English If I helped you please click on the "thank you" button.
March 20, 201312 yr Maybe i didn't make myself clear but if you want a slot to be in the gui for a block to be held you HAVE to make a container and the tile entity IS NEEDED so you can open the gui and don't think you can just avoid doing this unless you change base code so stop being lazy and just make the stupid tile entity and container. now lock this thread and learn basic java. Creator of Jobo's ModLoader If I helped you could you please click the thank you button and applaud my karma.
March 21, 201312 yr the tile entity IS NEEDED so you can open the gui TE is not needed to open a gui, proof is the code I posted earlier. I seriously doubt that Red Power or Forestry uses TEs for their bags. mnn.getNativeLang() != English If I helped you please click on the "thank you" button.
March 21, 201312 yr No that's stackTagCompound, same thing is done in container entities. And changing metadata is extremely simple. Look at writable book for opening a GUI and then run a raytrace to grab the block and increment/decrement the metadata as needed. I think its my java of the variables.
March 21, 201312 yr or opn up a simple gui with buttons that on click will either detect items in slot x from the hotbar or your inventory, if its that block, change its metadata AKA, consume the block.item and place a new one. easier then te and container, but requiers a lot of hassle with client and common proxies to consume/ add items to the players inventory, as both sides need the player'si nventory information. https://minecraft.curseforge.com/members/Subaraki/projects
March 22, 201312 yr Author Error 2013-03-22 23:34:54 [iNFO] [sTDERR] net.minecraft.util.ReportedException: Ticking memory connection 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.network.NetworkListenThread.networkTick(NetworkListenThread.java:64) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.server.integrated.IntegratedServerListenThread.networkTick(IntegratedServerListenThread.java:108) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:703) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:599) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:123) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:497) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16) 2013-03-22 23:34:54 [iNFO] [sTDERR] Caused by: java.lang.ClassCastException: Testmod.GuiHammer cannot be cast to net.minecraft.inventory.Container 2013-03-22 23:34:54 [iNFO] [sTDERR] at cpw.mods.fml.common.network.NetworkRegistry.openRemoteGui(NetworkRegistry.java:296) 2013-03-22 23:34:54 [iNFO] [sTDERR] at cpw.mods.fml.common.network.FMLNetworkHandler.openGui(FMLNetworkHandler.java:335) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2304) 2013-03-22 23:34:54 [iNFO] [sTDERR] at Testmod.hammer.onItemUse(hammer.java:28) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.item.ItemStack.tryPlaceItemIntoWorld(ItemStack.java:135) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.item.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:424) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.network.NetServerHandler.handlePlace(NetServerHandler.java:579) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.network.packet.Packet15Place.processPacket(Packet15Place.java:79) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.network.MemoryConnection.processReadPackets(MemoryConnection.java:80) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.network.NetServerHandler.networkTick(NetServerHandler.java:136) 2013-03-22 23:34:54 [iNFO] [sTDERR] at net.minecraft.network.NetworkListenThread.networkTick(NetworkListenThread.java:57) 2013-03-22 23:34:54 [iNFO] [sTDERR] ... 6 more 2013-03-22 23:34:55 [iNFO] [ForgeModLoader] Unloading dimension 0 2013-03-22 23:34:55 [iNFO] [ForgeModLoader] Unloading dimension -1 2013-03-22 23:34:55 [iNFO] [ForgeModLoader] Unloading dimension 1 2013-03-22 23:34:55 [sEVERE] [ForgeModLoader] Fatal errors were detected during the transition from SERVER_STARTED to SERVER_STOPPED. Loading cannot continue 2013-03-22 23:34:55 [sEVERE] [ForgeModLoader] mcp [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available->Available FML [Forge Mod Loader] (coremods) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available->Available Forge [Minecraft Forge] (coremods) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available->Available Testmod [Test_mod] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available->Available 2013-03-22 23:34:55 [sEVERE] [ForgeModLoader] The ForgeModLoader state engine has become corrupted. Probably, a state was missed by and invalid modification to a base classForgeModLoader depends on. This is a critical error and not recoverable. Investigate any modifications to base classes outside ofForgeModLoader, especially Optifine, to see if there are fixes available. 2013-03-22 23:34:55 [iNFO] [sTDERR] Exception in thread "Server thread" java.lang.RuntimeException: The ForgeModLoader state engine is invalid 2013-03-22 23:34:55 [iNFO] [sTDERR] at cpw.mods.fml.common.LoadController.transition(LoadController.java:122) 2013-03-22 23:34:55 [iNFO] [sTDERR] at cpw.mods.fml.common.Loader.serverStopped(Loader.java:780) 2013-03-22 23:34:55 [iNFO] [sTDERR] at cpw.mods.fml.common.FMLCommonHandler.handleServerStopped(FMLCommonHandler.java:469) 2013-03-22 23:34:55 [iNFO] [sTDERR] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:559) 2013-03-22 23:34:55 [iNFO] [sTDERR] at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16) 2013-03-22 23:35:05 [iNFO] [sTDOUT] Stopping! My files http://www.sendspace.pl/file/27ae3893e7896dd4498dbfc It is probably in guihandler or smting, btw how would look dispatcher for other gui, in gui screen make case clause and dispatch difrent guis??
March 23, 201312 yr don't use a website to download your code use forges paste.minecraftforge.net Creator of Jobo's ModLoader If I helped you could you please click the thank you button and applaud my karma.
March 23, 201312 yr Author package Testmod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; public class GuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { // TODO Auto-generated method stub return new GuiHammer(); } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { // TODO Auto-generated method stub return new GuiHammer(); } } GuiHandler GuiHammer import org.lwjgl.opengl.GL11; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; public class GuiHammer extends GuiScreen{ public final int xSizeOfTexture = 176; public final int ySizeOfTexture = 88; @Override public void drawScreen(int x, int y, float f) { drawDefaultBackground(); int var4 = this.mc.renderEngine.getTexture("/Block/changeColorGUI.png"); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.bindTexture(var4); int posX = (this.width - xSizeOfTexture) / 2; int posY = (this.height - ySizeOfTexture) / 2; drawTexturedModalRect(posX, posY, 0, 0, xSizeOfTexture, ySizeOfTexture); super.drawScreen(x, y, f); } public void initGui() { this.controlList.clear(); int posX = (this.width - xSizeOfTexture) / 2; int posY = (this.height - ySizeOfTexture) / 2; this.controlList.add(new GuiButton(0, posX+ 40, posY + 40, 100, 20, "no use")); } } Hammer Java package Testmod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumToolMaterial; import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class hammer extends ItemPickaxe{ public hammer(int par1, EnumToolMaterial par2EnumToolMaterial) { super(par1, par2EnumToolMaterial); // TODO Auto-generated constructor stub } @Override public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World parworld, int x, int y, int z, int side, float hx, float hy, float hz) { if (parworld.isRemote) { return true; } else { int meta = parworld.getBlockMetadata(x, y, z); par2EntityPlayer.addChatMessage("Side is: "+ side +"\nFacing is "+ meta); meta+=1; parworld.setBlockAndMetadataWithNotify(x, y, z, parworld.getBlockId(x, y, z), meta); par2EntityPlayer.openGui(Testmod.instance, 0, parworld, 0, 0, 0); return true; } } @Override public String getTextureFile(){ return "/Testmod/pngs/items.png"; } } Mod main File package Testmod; import net.minecraft.block.Block; import net.minecraft.item.EnumToolMaterial; import net.minecraft.item.Item; import net.minecraftforge.common.EnumHelper; import net.minecraftforge.common.MinecraftForge; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.Mod.PostInit; import cpw.mods.fml.common.Mod.PreInit; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; @Mod(modid="Testmod", name="Test_mod", version="0.0.0") @NetworkMod(clientSideRequired=true, serverSideRequired=false, channels = {"TestMod" }, packetHandler = PacketHandler.class) public class Testmod { // The instance of your mod that Forge uses. @Instance("Testmod") public static Testmod instance; // Says where the client and server 'proxy' code is loaded. @SidedProxy(clientSide="Testmod.ClientProxy", serverSide="Testmod.CommonProxy") public static CommonProxy proxy; //blocks public static Block TitaniumBlock; //items //tools public static Item hammer; EnumToolMaterial Mymaterial = EnumHelper.addToolMaterial("My material", 3, 3000, 8.0F, 10, 14); //GUI private static IGuiHandler guiHandler; @PreInit public void preInit(FMLPreInitializationEvent event) { // Stub Method } @Init public void load(FMLInitializationEvent event) { TitaniumBlock = (new TitaniumOre(538, 0)).setBlockName("TitaniumOre"); MinecraftForge.setBlockHarvestLevel(TitaniumBlock, "pickaxe", 3); GameRegistry.registerBlock(TitaniumBlock); hammer = new hammer(600, Mymaterial).setIconIndex(0).setItemName("Hammer"); LanguageRegistry.addName(TitaniumBlock, "Titanium Block Ore"); LanguageRegistry.addName(hammer, "Mlotek"); proxy.registerRenderThings(); //gui guiHandler = new GuiHandler(); NetworkRegistry.instance().registerGuiHandler(this, guiHandler); } @PostInit public void postInit(FMLPostInitializationEvent event) { // Stub Method } }
March 23, 201312 yr opening a gui FMLNetworkHandler.openGui(player, mod_RpgInventory.instance, 2, world, x, y, z); //2 can be anything you like if you want a container with your gui public class MyGui extends GuiContainer { int var4 = this.mc.renderEngine.getTexture("/Block/changeColorGUI.png"); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.bindTexture(var4); dafuq, you still in 1.4.7 ? GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.bindTexture("/Block/changeColorGUI.png")); https://minecraft.curseforge.com/members/Subaraki/projects
March 24, 201312 yr Author I redone GuiSCreen but now it dosent shows me still dosent work no error nothing: Testmod package Testmod; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumToolMaterial; import net.minecraft.item.Item; import net.minecraftforge.common.EnumHelper; import net.minecraftforge.common.MinecraftForge; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.Mod.PostInit; import cpw.mods.fml.common.Mod.PreInit; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; @Mod(modid="Testmod", name="Test_mod", version="0.0.0") @NetworkMod(clientSideRequired=true, serverSideRequired=false, channels = {"TestMod" }, packetHandler = PacketHandler.class) public class Testmod { // The instance of your mod that Forge uses. @Instance("Testmod") public static Testmod instance; // Says where the client and server 'proxy' code is loaded. @SidedProxy(clientSide="Testmod.ClientProxy", serverSide="Testmod.CommonProxy") public static CommonProxy proxy; //blocks public static Block TitaniumBlock; //items //tools public static Item hammer; EnumToolMaterial Mymaterial = EnumHelper.addToolMaterial("My material", 3, 3000, 8.0F, 10, 14); //GUI private static IGuiHandler guiHandler; @PreInit public void preInit(FMLPreInitializationEvent event) { // Stub Method } @Init public void load(FMLInitializationEvent event) { TitaniumBlock = (new TitaniumOre(538, 0)).setBlockName("TitaniumOre"); MinecraftForge.setBlockHarvestLevel(TitaniumBlock, "pickaxe", 3); GameRegistry.registerBlock(TitaniumBlock); hammer = new hammer(600, Mymaterial).setIconIndex(0).setItemName("Hammer"); LanguageRegistry.addName(TitaniumBlock, "Titanium Block Ore"); LanguageRegistry.addName(hammer, "Mlotek"); proxy.registerRenderThings(); //gui guiHandler = new GuiHandler(); NetworkRegistry.instance().registerGuiHandler(this, guiHandler); } @PostInit public void postInit(FMLPostInitializationEvent event) { // Stub Method } } Packet handler package Testmod; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet250CustomPayload; import cpw.mods.fml.common.network.IPacketHandler; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkModHandler; import cpw.mods.fml.common.network.Player; // Create a class and implement IPacketHandler // This just handles the data packets in the server public class PacketHandler implements IPacketHandler{ @Override public void onPacketData(INetworkManager manager, Packet250CustomPayload payload, Player player){ DataInputStream data = new DataInputStream(new ByteArrayInputStream(payload.data)); } } Common Proxy package Testmod; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.client.MinecraftForgeClient; public class CommonProxy { public static String BLOCK_PNG = "/Testmod/pngs/block.png"; public static String ITEMS_PNG = "/Testmod/pngs/items.png"; // Client stuff public void registerRenderThings() { MinecraftForgeClient.preloadTexture(BLOCK_PNG); MinecraftForgeClient.preloadTexture(ITEMS_PNG); } public Object openClientGui(EntityPlayer player, int ID) //getServerGuiElement { return null; } } Client Proxy package Testmod; import cpw.mods.fml.common.network.IGuiHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; import net.minecraftforge.client.MinecraftForgeClient; import Testmod.CommonProxy; public class ClientProxy extends CommonProxy { @Override public void registerRenderThings() { } public Object openClientGui(int ID, EntityPlayer player) { switch (ID) { case 0: return new GuiHammer(player,ID); case 1: return new GuiHammer(player,ID); case 2: return new GuiHammer(player,ID); } return null; } hammer package Testmod; import cpw.mods.fml.common.network.FMLNetworkHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumToolMaterial; import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class hammer extends ItemPickaxe{ public hammer(int par1, EnumToolMaterial par2EnumToolMaterial) { super(par1, par2EnumToolMaterial); // TODO Auto-generated constructor stub } @Override public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2Player, World parworld, int x, int y, int z, int side, float hx, float hy, float hz) { if (parworld.isRemote) { return true; } else { int meta = parworld.getBlockMetadata(x, y, z); par2Player.addChatMessage("Side is: "+ side +"\nFacing is "+ meta); par2Player.openGui(Testmod.instance, 0, parworld, x, y, z); //par2EntityPlayer.openGui(); //FMLNetworkHandler.openGui(par2Player, Testmod.instance, 0, parworld, x, y, z); meta+=1; parworld.setBlockAndMetadataWithNotify(x, y, z, parworld.getBlockId(x, y, z), meta); return true; } } @Override public String getTextureFile(){ return "/Testmod/pngs/items.png"; } } GuiHandler package Testmod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.network.IGuiHandler; public class GuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { // TODO Auto-generated method stub return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { // TODO Auto-generated method stub return new ClientProxy().openClientGui(player,ID); } } GuiHammer package Testmod; import org.lwjgl.opengl.GL11; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; public class GuiHammer extends GuiScreen{ public GuiHammer(EntityPlayer player,int ID) { } public final int xSizeOfTexture = 176; public final int ySizeOfTexture = 88; @Override public void drawScreen(int x, int y, float f) { drawDefaultBackground(); int var4 = this.mc.renderEngine.getTexture("/Block/changeColorGUI.png"); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.bindTexture(var4); int posX = (this.width - xSizeOfTexture) / 2; int posY = (this.height - ySizeOfTexture) / 2; drawTexturedModalRect(posX, posY, 0, 0, xSizeOfTexture, ySizeOfTexture); super.drawScreen(x, y, f); } public void initGui() { this.controlList.clear(); int posX = (this.width - xSizeOfTexture) / 2; int posY = (this.height - ySizeOfTexture) / 2; this.controlList.add(new GuiButton(0, posX+ 40, posY + 40, 100, 20, "no use")); } public boolean doesGuiPauseGame() { return true; } } Titaniumore package Testmod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; public class TitaniumOre extends Block{ public TitaniumOre(int par1, int par2){ super(par1, par2, Material.rock); this.setCreativeTab(CreativeTabs.tabBlock); this.setHardness(89.3F); this.setResistance(89.5F); this.setStepSound(soundMetalFootstep); } @Override public String getTextureFile(){ return "/Testmod/pngs/block.png"; } } Was looking at this topic http://www.minecraftforge.net/forum/index.php?topic=5889.0 well this guy almost know everyting, but why mu GUI DOSENT SHOW PLZ HELP ME.
March 24, 201312 yr http://thenewboston.org/list.php?cat=31 nuff said here, sorry. If you guys dont get it.. then well ya.. try harder...
March 25, 201312 yr Author So how should i popup any interface, options or what so ever?? like timer or else in redpower BUT NOT a container.Just a screen that will modify metadata
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.