Jump to content

Working with Gui's


fred4106

Recommended Posts

I am attempting to follow the tutorial http://www.minecraftforge.net/wiki/Containers_and_GUIs here for tileentitys and GUI's without any luck. The two problems i have are that when i run my mod and save then reload the world, my tileentity (tinyBlock) blocks wont save. The other problem is that i cant get GUis to open. When i right click my block (tinyBlock), the java console tells me that "A mod tried to open a gui on the server without being a NetworkMod"

Thanks for the help in advance:)

 

Here is my code:

 

MageCraft_Main.java


package mageCraft.common;


import mageCraft.client.Client_MageCraftProxy;
import net.minecraft.src.Block;
import net.minecraft.src.Item;
import net.minecraft.src.ItemStack;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.event.FMLInitializationEvent;
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 = "Fred4106_MageCraft", name = "MageCraft", version = "0.1 alpha")
@NetworkMod(clientSideRequired = true, serverSideRequired = true)
public class MageCraft_Main {

@SidedProxy(clientSide = "mageCraft.client.Client_MageCraftProxy", serverSide = "mageCraft.common.Common_MageCraftProxy")
public static Common_MageCraftProxy proxy;

MageCraftGuiHandler guiHandler = new MageCraftGuiHandler();


//Blocks
	public static Block veriniteOreBlock;
	public static Block veriniteIngotBlock;
	public static Block blockTinyBlock;
//rarity
	public static int veriniteOreRarity = 4;

//Items
	public static Item veriniteChunkItem;
	public static Item veriniteIngotItem;
	public static Item veriniteEssenceItem;

@Init
 public void load(FMLInitializationEvent event)
 {
	//Textures and other network things
		//"this" is an instance of the mod class
        NetworkRegistry.instance().registerGuiHandler(this, guiHandler);
		proxy.registerRenderThings();
	//Blocks
		veriniteOreBlock = new BlockVeriniteOre(230, 0).setStepSound(Block.soundStoneFootstep).setHardness(3F).setResistance(1.0F).setBlockName("VeriniteOreBlock");
		veriniteIngotBlock = new BlockVeriniteIngot(231,1).setStepSound(Block.soundMetalFootstep).setHardness(5F).setResistance(1.0F).setBlockName("VeriniteIngotBlock");
		blockTinyBlock = new BlockTiny(232, 1);
	//Register Blocks
		GameRegistry.registerBlock(veriniteOreBlock);
		GameRegistry.registerBlock(veriniteIngotBlock);
		GameRegistry.registerBlock(blockTinyBlock);
		LanguageRegistry.addName(veriniteOreBlock, "Verinite Ore");
		LanguageRegistry.addName(veriniteIngotBlock, "Verinite Block");
		LanguageRegistry.addName(blockTinyBlock, "Test Container");
	//Items
		veriniteChunkItem = new ItemVeriniteChunk(550).setIconIndex(0).setItemName("VeriniteChunkItem"); 
		veriniteIngotItem = new ItemVeriniteIngot(551).setIconIndex(1).setItemName("VeriniteIngotItem");
		veriniteEssenceItem = new ItemVeriniteEssence(552).setIconIndex(2).setItemName("VeriniteEssenceItem");
	//Register Items
		LanguageRegistry.addName(veriniteChunkItem, "Verinite Chunk");
		LanguageRegistry.addName(veriniteIngotItem, "Verinite Ingot");
		LanguageRegistry.addName(veriniteEssenceItem, "Verinite Essence");
	//World Generation
		GameRegistry.registerWorldGenerator(new WorldGen());
	//Recipes
		GameRegistry.addRecipe(new ItemStack(veriniteIngotBlock), new Object[]
			    {
		     "XXX", "X X", "XXX", 'X', veriniteIngotItem
		    });

		GameRegistry.addRecipe(new ItemStack(blockTinyBlock), new Object[]
			    {
		     "X  ", "   ", "   ", 'X', veriniteIngotBlock
		    });
	//Smelting
		GameRegistry.addSmelting(veriniteChunkItem.shiftedIndex, new ItemStack(veriniteIngotItem), 0.1F); 
 }
}

 

 

 

MageCraftGuiHandler.java


package mageCraft.common;


import net.minecraft.src.*;
import cpw.mods.fml.common.network.IGuiHandler;


public class MageCraftGuiHandler implements IGuiHandler{


//returns an instance of the Container you made earlier
    
@Override
    public Object getServerGuiElement(int id, EntityPlayer player, World world,
                    int x, int y, int z) {
            TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
            if(tileEntity instanceof TileEntityImbuener){
                    return new ContainerTiny(player.inventory, (TileEntityImbuener) tileEntity);
            }
            return null;
    }


    //returns an instance of the Gui you made earlier
    @Override
    public Object getClientGuiElement(int id, EntityPlayer player, World world,
                    int x, int y, int z) {
            TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
            if(tileEntity instanceof TileEntityImbuener){
                    return new GuiTiny(player.inventory, (TileEntityImbuener) tileEntity);
            }
            return null;
    }


}


 

 

 

TileEntityImbuener.java


package mageCraft.common;


import net.minecraft.src.*;


public class TileEntityImbuener extends TileEntity implements IInventory
{
private ItemStack[] toInbue;


public TileEntityImbuener()
{
	toInbue = new ItemStack[1];
}

@Override
public int getSizeInventory() 
{
	return toInbue.length;
}


@Override
public ItemStack getStackInSlot(int slot) 
{
	return toInbue[slot];
}


@Override
public ItemStack decrStackSize(int slot, int amt) 
{
        ItemStack stack = getStackInSlot(slot);
        if (stack != null) {
                if (stack.stackSize <= amt) {
                        setInventorySlotContents(slot, null);
                } else {
                        stack = stack.splitStack(amt);
                        if (stack.stackSize == 0) {
                                setInventorySlotContents(slot, null);
                        }
                }
        }
        return stack;
}
@Override
public ItemStack getStackInSlotOnClosing(int slot) 
{
        ItemStack stack = getStackInSlot(slot);
        if (stack != null) {
                setInventorySlotContents(slot, null);
        }
        return stack;
}


@Override
public void setInventorySlotContents(int slot, ItemStack stack) 
{
        toInbue[slot] = stack;
        if (stack != null && stack.stackSize > getInventoryStackLimit()) {
                stack.stackSize = getInventoryStackLimit();
        }               
}


@Override
public String getInvName() {
	// TODO Auto-generated method stub
	return null;
}


@Override
public int getInventoryStackLimit() 
{
        return 64;
}


@Override
public void onInventoryChanged() {
	// TODO Auto-generated method stub

}


@Override
public boolean isUseableByPlayer(EntityPlayer player) 
{
        return worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) == this &&
        player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64;
}


@Override
public void openChest() {
	// TODO Auto-generated method stub

}


@Override
public void closeChest() {
	// TODO Auto-generated method stub

}

@Override
    public void readFromNBT(NBTTagCompound tagCompound) 
{
        super.readFromNBT(tagCompound);
        NBTTagList tagList = tagCompound.getTagList("Inventory");
        for (int i = 0; i < tagList.tagCount(); i++) {
            NBTTagCompound tag = (NBTTagCompound) tagList.tagAt(i);
            byte slot = tag.getByte("Slot");
            if (slot >= 0 && slot < toInbue.length) {
                    toInbue[slot] = ItemStack.loadItemStackFromNBT(tag);
            }
        }
    }

@Override
    public void writeToNBT(NBTTagCompound tagCompound) {
            super.writeToNBT(tagCompound);          
            NBTTagList itemList = new NBTTagList();
            for (int i = 0; i < toInbue.length; i++) {
                    ItemStack stack = toInbue[i];
                    if (stack != null) {
                            NBTTagCompound tag = new NBTTagCompound();
                            tag.setByte("Slot", (byte) i);
                            stack.writeToNBT(tag);
                            itemList.appendTag(tag);
                    }
            }
            tagCompound.setTag("Inventory", itemList);
    }


}

 

 

 

WorldGen.java


package mageCraft.common;


import java.util.Random;


import net.minecraft.src.IChunkProvider;
import net.minecraft.src.World;
import net.minecraft.src.WorldGenMinable;
import cpw.mods.fml.common.IWorldGenerator;


public class WorldGen implements IWorldGenerator {

public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
{
	switch (world.provider.worldType)
 	{
 		case -1: generateNether(world, random, chunkX*16, chunkZ*16);
 		case 0: generateSurface(world, random, chunkX*16, chunkZ*16);
 	}
}


private void generateSurface(World world, Random random, int blockX, int blockZ) {
	int Xcoord;
	int Ycoord;
	int Zcoord;
	for(int i = 0; i < MageCraft_Main.veriniteOreRarity; i++)
	{
		Xcoord = blockX + random.nextInt(16);
		Ycoord = random.nextInt(20)+40;
		Zcoord = blockZ + random.nextInt(16);
		System.out.println("X: "+Xcoord+" Z: "+Zcoord);
		(new WorldGenMinable(MageCraft_Main.veriniteOreBlock.blockID, 9)).generate(world, random, Xcoord, Ycoord, Zcoord);
	}
}


private void generateNether(World world, Random random, int i, int j) {
	// TODO Auto-generated method stub

}


}

 

 

BlockTiny.java


package mageCraft.common;


import java.util.Random;


import net.minecraft.src.*;


public class BlockTiny extends BlockContainer {


        protected BlockTiny (int id, int spriteIndex) {
                super(id, spriteIndex,  Material.wood);
                setHardness(2.0F);
                setResistance(5.0F);
                setBlockName("BlockTinyBlock");
        }


        @Override
        public boolean onBlockActivated(World world, int x, int y, int z,
                        EntityPlayer player, int idk, float what, float these, float are) {
                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if (tileEntity == null || player.isSneaking()) {
                        return false;
                }
                //opens gui, to be implemented later
                player.openGui(MageCraft_Main.class, 0, world, x, y, z);
                return true;
        }


        @Override
        public void breakBlock(World world, int x, int y, int z, int par5, int par6) {
                dropItems(world, x, y, z);
                super.breakBlock(world, x, y, z, par5, par6);
        }
        
        private void dropItems(World world, int x, int y, int z){
                Random rand = new Random();


                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if (!(tileEntity instanceof IInventory)) {
                        return;
                }
                IInventory inventory = (IInventory) tileEntity;


                for (int i = 0; i < inventory.getSizeInventory(); i++) {
                        ItemStack item = inventory.getStackInSlot(i);


                        if (item != null && item.stackSize > 0) {
                                float rx = rand.nextFloat() * 0.8F + 0.1F;
                                float ry = rand.nextFloat() * 0.8F + 0.1F;
                                float rz = rand.nextFloat() * 0.8F + 0.1F;


                                EntityItem entityItem = new EntityItem(world,
                                                x + rx, y + ry, z + rz,
                                                new ItemStack(item.itemID, item.stackSize, item.getItemDamage()));


                                if (item.hasTagCompound()) {
                                        entityItem.item.setTagCompound((NBTTagCompound) item.getTagCompound().copy());
                                }


                                float factor = 0.05F;
                                entityItem.motionX = rand.nextGaussian() * factor;
                                entityItem.motionY = rand.nextGaussian() * factor + 0.2F;
                                entityItem.motionZ = rand.nextGaussian() * factor;
                                world.spawnEntityInWorld(entityItem);
                                item.stackSize = 0;
                        }
                }
        }


        @Override
        public TileEntity createNewTileEntity(World world) {
                return new TileEntityImbuener();
        }


}

 

 

 

BlockVeriniteIngot.java


package mageCraft.common;


import net.minecraft.src.Block;
import net.minecraft.src.CreativeTabs;
import net.minecraft.src.Material;


public class BlockVeriniteIngot extends Block {


public BlockVeriniteIngot(int par1, int par2) 
{
	super(par1, par2, Material.iron);
	this.setCreativeTab(CreativeTabs.tabBlock);
}

public String getTextureFile()
    {
	 return "/MageCraft_Resources/BlockTextureSheet.png";
    }


}

 

 

 

BlockVeriniteOre.java


package mageCraft.common;


import java.util.Random;


import net.minecraft.src.CreativeTabs;
import net.minecraft.src.Material;
import net.minecraft.src.Block;


public class BlockVeriniteOre extends Block {

private int whatToDrop;

public BlockVeriniteOre(int par1, int par2)
    {
        super(par1, par2, Material.rock);
        this.setCreativeTab(CreativeTabs.tabBlock);
    }

public String getTextureFile()
    {
	 return "/MageCraft_Resources/BlockTextureSheet.png";
    }

 public int idDropped(int par1, Random par2Random, int par3)
 {
	 return whatToDrop;
 }

 public int quantityDropped(Random par1Random)
     {
	 if((par1Random.nextInt(10)+1) > 3)
	 {
		 whatToDrop = MageCraft_Main.veriniteEssenceItem.shiftedIndex;
		 return par1Random.nextInt(+1;
	 }
	 else
	 {
		 whatToDrop = MageCraft_Main.veriniteChunkItem.shiftedIndex;
		 return 1;
	 }
     }


}

 

 

 

Common_MageCraftProxy.java


package mageCraft.common;


public class Common_MageCraftProxy {


public void registerRenderThings()
    {
        
    }
}

 

 

 

ContainerTiny.java


package mageCraft.common;


import net.minecraft.src.*;


public class ContainerTiny extends Container {


    protected TileEntityImbuener tileEntity;
    
    public ContainerTiny (InventoryPlayer inventoryPlayer,TileEntityImbuener te){
            tileEntity = te;
            
            System.out.println("Created container");
            
            //the Slot constructor takes the IInventory and the slot number in that it binds to
            //and the x-y coordinates it resides on-screen
            addSlotToContainer(new Slot(tileEntity, 0, 76, 37));


            //commonly used vanilla code that adds the player's inventory
            bindPlayerInventory(inventoryPlayer);
            
    }


    @Override
    public boolean canInteractWith(EntityPlayer player) {
            return tileEntity.isUseableByPlayer(player);
    }




    protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) {
            for (int i = 0; i < 3; i++) {
                    for (int j = 0; j < 9; j++) {
                            addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9,
                                            8 + j * 18, 84 + i * 18));
                    }
            }


            for (int i = 0; i < 9; i++) {
                    addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142));
            }
    }
    
    @Override
    public ItemStack transferStackInSlot(int slot) {
            ItemStack stack = null;
            Slot slotObject = (Slot) inventorySlots.get(slot);


            //null checks and checks if the item can be stacked (maxStackSize > 1)
            if (slotObject != null && slotObject.getHasStack()) {
                    ItemStack stackInSlot = slotObject.getStack();
                    stack = stackInSlot.copy();


                    //merges the item into player inventory since its in the tileEntity
                    if (slot == 0) {
                            if (!mergeItemStack(stackInSlot, 1,
                                            inventorySlots.size(), true)) {
                                    return null;
                            }
                    //places it into the tileEntity is possible since its in the player inventory
                    } else if (!mergeItemStack(stackInSlot, 0, 1, false)) {
                            return null;
                    }


                    if (stackInSlot.stackSize == 0) {
                            slotObject.putStack(null);
                    } else {
                            slotObject.onSlotChanged();
                    }
            }


            return stack;
    }
}


 

 

 

GuiTiny.java


package mageCraft.common;


import net.minecraft.src.*;


import org.lwjgl.opengl.GL11;


public class GuiTiny extends GuiContainer {


        public GuiTiny (InventoryPlayer inventoryPlayer,
                        TileEntityImbuener tileEntity) {
                //the container is instantiated and passed to the superclass for handling
                super(new ContainerTiny(inventoryPlayer, tileEntity));
        }


        @Override
        protected void drawGuiContainerForegroundLayer() {
                //draw text and stuff here
                //the parameters for drawString are: string, x, y, color
                fontRenderer.drawString("Tiny", 8, 6, 4210752);
                //draws "Inventory" or your regional equivalent
                fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752);
        }


        @Override
        protected void drawGuiContainerBackgroundLayer(float par1, int par2,
                        int par3) {
                //draw your Gui here, only thing you need to change is the path
                int texture = mc.renderEngine.getTexture("/your/texture/path/here.png");
                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                this.mc.renderEngine.bindTexture(texture);
                int x = (width - xSize) / 2;
                int y = (height - ySize) / 2;
                this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
        }


}

 

 

 

ItemVeriniteChunk.java


package mageCraft.common;


import net.minecraft.src.CreativeTabs;
import net.minecraft.src.Item;


public class ItemVeriniteChunk extends Item {


public ItemVeriniteChunk(int par1) 
{
	super(par1);
	maxStackSize = 64;
        this.setTabToDisplayOn(CreativeTabs.tabMaterials);
}


public String getTextureFile()
    {
            return "/MageCraft_Resources/ItemTextureSheet.png";
    }

}

 

 

 

ItemVeriniteEssence.java


package mageCraft.common;


import net.minecraft.src.CreativeTabs;
import net.minecraft.src.Item;


public class ItemVeriniteEssence extends Item{


public ItemVeriniteEssence(int par1) 
{
	super(par1);
	maxStackSize = 64;
        this.setTabToDisplayOn(CreativeTabs.tabMaterials);
}


public String getTextureFile()
    {
            return "/MageCraft_Resources/ItemTextureSheet.png";
    }
}

 

 

 

ItemVeriniteIngot.java


package mageCraft.common;


import net.minecraft.src.CreativeTabs;
import net.minecraft.src.Item;


public class ItemVeriniteIngot extends Item{

public ItemVeriniteIngot(int par1) 
{
	super(par1);
	maxStackSize = 64;
        this.setTabToDisplayOn(CreativeTabs.tabMaterials);
}


public String getTextureFile()
    {
            return "/MageCraft_Resources/ItemTextureSheet.png";
    }
}

 

 

 

Client_MageCraftProxy.java


package mageCraft.client;


import mageCraft.common.Common_MageCraftProxy;
import net.minecraftforge.client.MinecraftForgeClient;


public class Client_MageCraftProxy extends Common_MageCraftProxy
{
    @Override
    public void registerRenderThings()
    {
    	MinecraftForgeClient.preloadTexture("/MageCraft_Resources/BlockTextureSheet.png");
    	MinecraftForgeClient.preloadTexture("/MageCraft_Resources/ItemTextureSheet.png");
    }
}

 

 

Thanks for the help.

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.



×
×
  • Create New...

Important Information

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