Jump to content

Recommended Posts

Posted

Hey,

 

I figured I'll let the old thread die as it's bugs were fixed, but my TileEntity still has a few different bugs.

 

1. Firstly, if I shift-click from my inventory to the chest, it clones the item, leaving a ghost in my inventory. The inventory-side item is unusable (and if it's a block, it disappears when I try and place it) so it's only a graphical bug, but I'd still like to fix it. Any ideas? There is no stacktrace.

 

2. How do I set the texture O.o I've tried various things that would usually work, but nothing does... (Nothing currently set)

 

3. How do I use multiple GUIs within my mod? Everyone I've asked makes it sound so simple, but I can't get it to work, so obviously I'm missing something. I can get one of the three chests I have to open at a time, but not all 3. FIXED

 

There's quite a few classes that are relevant here, so the easiest way is to just link my github. Note that a lot of the unrelated code isn't done so ignore that ;)

 

 

The main class is pretty big (as you see), so here's everything unimportant cut out:

@Mod(modid="Remula", name="Remula", version="0.0.1")
@NetworkMod(clientSideRequired=true, serverSideRequired=false)
public class Remula { 

public static CreativeTabs tabRemula = new CreativeTabs("tabRemula") {
	public ItemStack getIconItemStack() {
		return new ItemStack(Remula.advancedP5RobotSpawner, 1, 0);
	}

    @Instance("Remula")
    public static Remula instance;
    
    //GUIs
    public static SilvaniteGuiHandler silvaniteGuiHandler = new SilvaniteGuiHandler();
    public static MerciliteGuiHandler merciliteGuiHandler = new MerciliteGuiHandler();
    public static RemulaGuiHandler remulaGuiHandler = new RemulaGuiHandler();

    // Says where the client and server proxy code is loaded.
    @SidedProxy(clientSide="co.uk.silvania.Remula.client.ClientProxy", serverSide="co.uk.silvania.Remula.CommonProxy")
    public static CommonProxy proxy;
    
    //public static int blockRemulaID;
    @SideOnly(Side.CLIENT)

    @PreInit
    public void preInit(FMLPreInitializationEvent event) {
    NetworkRegistry.instance().registerGuiHandler(this, remulaGuiHandler);
    NetworkRegistry.instance().registerGuiHandler(this, merciliteGuiHandler);
    NetworkRegistry.instance().registerGuiHandler(this, silvaniteGuiHandler);
    }
    public static WorldGen worldGen = new WorldGen();

    public final static Block silvaniteChest = new SilvaniteChest(1850).setBlockName("silvaniteChest");
    public final static Block merciliteChest = new MerciliteChest(1851).setBlockName("merciliteChest");
    public final static Block remulaChest = new RemulaChest(1852).setBlockName("remulaChest");


    
    @Init
    public void load(FMLInitializationEvent event) {
            proxy.registerRenderThings();
            proxy.init();

            //Storage and Tile Entites
            LanguageRegistry.addName(silvaniteChest, "Silvanite Chest");
            LanguageRegistry.addName(merciliteChest, "Mercilite Chest");
            LanguageRegistry.addName(remulaChest, "Remula Chest");
           
            //Storage Blocks/Tile Entites
            GameRegistry.registerBlock(silvaniteChest, "silvaniteChest");
            GameRegistry.registerBlock(merciliteChest, "merciliteChest");
            GameRegistry.registerBlock(remulaChest, "remulaChest");
            
            //Tile Entities
            GameRegistry.registerTileEntity(TileEntitySilvaniteChest.class, "tileEntitySilvaniteChest");
            GameRegistry.registerTileEntity(TileEntityMerciliteChest.class, "tileEntityMerciliteChest");
            GameRegistry.registerTileEntity(TileEntityRemulaChest.class, "tileEntityRemulaChest");
            
            //Other Registry Stuff
            LanguageRegistry.instance().addStringLocalization("itemGroup.tabRemula", "en_US", "Remula");
            LanguageRegistry.instance().addStringLocalization("itemGroup.tabAkatoe", "en_US", "Akatoe");
            LanguageRegistry.instance().addStringLocalization("itemGroup.tabBaloinus", "en_US", "Baloinus");
            LanguageRegistry.instance().addStringLocalization("itemGroup.tabDeepSpace", "en_US", "Deep-Space");
            GameRegistry.registerWorldGenerator(new WorldGen());
            NetworkRegistry.instance().registerGuiHandler(this, new SilvaniteGuiHandler());
            NetworkRegistry.instance().registerGuiHandler(this, new MerciliteGuiHandler());
            NetworkRegistry.instance().registerGuiHandler(this, new RemulaGuiHandler());
            GameRegistry.addBiome(akatoePlainsBiome);
    }


@PostInit
    public void postInit(FMLPostInitializationEvent event) {
            // Stub Method
    		}
}

 

Finally on a more advanced note, if you look at my GUI images, you'll see the chests have built-in tanks. How would I make these functional? Each tank should hold 9 buckets-worth of a single liquid, and once a liquid is in it wont accept any other liquid (Like the buildcraft tank). Also if possible, I want the slots above/below to only accept buckets (filled or empty)

 

Any help is great, sorry for so much in one thread :P

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Posted

UPDATE in relation to #3

 

I was following another thread with a similar issue to one of mine. I'm now getting the "A mod tried to open a gui on the server without being a NetworkMod". However, I couldn't comment on there, because the thread author decided that as his problem was solved, noone else was ever going to get the issue and locked his thread.

 

So, I've updated the GitHub. Only thing changed in the base class was the following line:

 

 

@NetworkMod(clientSideRequired=true, serverSideRequired=false, clientPacketHandlerSpec = @SidedPacketHandler(channels = "RemulaCltPacket", packetHandler = ClientPacketHandler.class), serverPacketHandlerSpec = @SidedPacketHandler(channels = "RemulaSrvPacket", packetHandler = ServerPacketHandler.class))

 

 

The two packet handlers are here: https://github.com/Flenix/Remula/tree/master/co/uk/silvania/Remula/network

 

Anyone able to help?

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Posted

UPDATE in relation to #3

 

I was following another thread with a similar issue to one of mine. I'm now getting the "A mod tried to open a gui on the server without being a NetworkMod". However, I couldn't comment on there, because the thread author decided that as his problem was solved, noone else was ever going to get the issue and locked his thread.

 

So, I've updated the GitHub. Only thing changed in the base class was the following line:

 

 

@NetworkMod(clientSideRequired=true, serverSideRequired=false, clientPacketHandlerSpec = @SidedPacketHandler(channels = "RemulaCltPacket", packetHandler = ClientPacketHandler.class), serverPacketHandlerSpec = @SidedPacketHandler(channels = "RemulaSrvPacket", packetHandler = ServerPacketHandler.class))

 

 

The two packet handlers are here: https://github.com/Flenix/Remula/tree/master/co/uk/silvania/Remula/network

 

Anyone able to help?

 

What line of code do you use to open your GUI?

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Posted

It's in the block class (SilvaniteChest, RemulaChest or MerciliteChest)

 

        @Override
        public boolean onBlockActivated(World world, int x, int y, int z,
                        EntityPlayer player, int i, float j, float k, float l) {
                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if (tileEntity == null || player.isSneaking()) {
                        return false;
                }
        player.openGui(Remula.remulaGuiHandler, 0, world, x, y, z);
                return true;
        }

 

To be fair, it's code I got from a tutorial which has since proved to be less than helpful, so I wouldn't be surprised if something is wrong in there.

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Posted

It's in the block class (SilvaniteChest, RemulaChest or MerciliteChest)

 

        @Override
        public boolean onBlockActivated(World world, int x, int y, int z,
                        EntityPlayer player, int i, float j, float k, float l) {
                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if (tileEntity == null || player.isSneaking()) {
                        return false;
                }
        player.openGui(Remula.remulaGuiHandler, 0, world, x, y, z);
                return true;
        }

 

To be fair, it's code I got from a tutorial which has since proved to be less than helpful, so I wouldn't be surprised if something is wrong in there.

 

        player.openGui(Remula.remulaGuiHandler, 0, world, x, y, z);

The first parameter is wrong. It must be your Mod's instance (the @Instance field inside your main mod class)

 

https://github.com/SanAndreasP/TurretModv3/blob/master/sanandreasp/mods/TurretMod3/block/BlockLaptop.java#L104

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Posted

ok; now the Remula chest will open but the other two still don't. I don't have any errors either, just nothing happens when I right-click.

 

the second parameter is the GuiID, which you can use in your GuiHandler to specify which GUI / Container will open.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Posted

ok; now the Remula chest will open but the other two still don't. I don't have any errors either, just nothing happens when I right-click.

 

the second parameter is the GuiID, which you can use in your GuiHandler to specify which GUI / Container will open.

 

I've experimented for the past 30 mins or so with this, even tried using your GuiHandler (edited for my things); Everything I try throws the same error for right-clicking the Remula chest and still no result for the other two:

2013-05-16 15:21:43 [iNFO] [sTDERR] java.lang.ClassCastException: co.uk.silvania.Remula.tileentity.ContainerRemulaChest cannot be cast to net.minecraft.client.gui.GuiScreen
2013-05-16 15:21:43 [iNFO] [sTDERR] 	at cpw.mods.fml.client.FMLClientHandler.showGuiScreen(FMLClientHandler.java:321)
2013-05-16 15:21:43 [iNFO] [sTDERR] 	at cpw.mods.fml.common.FMLCommonHandler.showGuiScreen(FMLCommonHandler.java:335)
2013-05-16 15:21:43 [iNFO] [sTDERR] 	at cpw.mods.fml.common.network.NetworkRegistry.openLocalGui(NetworkRegistry.java:316)
2013-05-16 15:21:43 [iNFO] [sTDERR] 	at cpw.mods.fml.common.network.FMLNetworkHandler.openGui(FMLNetworkHandler.java:339)
2013-05-16 15:21:43 [iNFO] [sTDERR] 	at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2304)
2013-05-16 15:21:43 [iNFO] [sTDERR] 	at co.uk.silvania.Remula.tileentity.RemulaChest.onBlockActivated(RemulaChest.java:41)
2013-05-16 15:21:43 [iNFO] [sTDERR] 	at net.minecraft.client.multiplayer.PlayerControllerMP.onPlayerRightClick(PlayerControllerMP.java:358)
2013-05-16 15:21:43 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.clickMouse(Minecraft.java:1329)
2013-05-16 15:21:43 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.runTick(Minecraft.java:1812)
2013-05-16 15:21:43 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:848)
2013-05-16 15:21:43 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.run(Minecraft.java:773)
2013-05-16 15:21:43 [iNFO] [sTDERR] 	at java.lang.Thread.run(Unknown Source)

 

I can't seem to find any reference to GuiScreen in my code, so I don't know what's causing that.

 

On a plus note; thanks to that turorial I thought I needed a GuiHandler for each GUI- at least now I know I don't need those :P

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Posted

I can't seem to find any reference to GuiScreen in my code, so I don't know what's causing that.

 

On a plus note; thanks to that turorial I thought I needed a GuiHandler for each GUI- at least now I know I don't need those :P

 

It means you're passing a TileEntity to a function that is expecting a GuiScreen.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

I can't seem to find any reference to GuiScreen in my code, so I don't know what's causing that.

 

On a plus note; thanks to that turorial I thought I needed a GuiHandler for each GUI- at least now I know I don't need those :P

 

It means you're passing a TileEntity to a function that is expecting a GuiScreen.

 

not a TileEntity, but a container.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Posted

Found it; I'd accidentally put the containers in the client side instead of the GUIs.

 

No errors again now, but I can still only open one of the three chests. Here's the relevant code currently:

 

[spoiler=GuiHandler]

package co.uk.silvania.Remula.tileentity;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import cpw.mods.fml.common.network.IGuiHandler;

public class GuiHandler implements IGuiHandler {


	public GuiHandler() {
	}
        @Override
        public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) {
        	switch(id) {
        	case 0: {
                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if(tileEntity instanceof TileEntityRemulaChest) {
                	if(id == 0)
                        return new ContainerRemulaChest(player.inventory, (TileEntityRemulaChest) tileEntity);
                }	
                return null;
        	}
            case 1: {
                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if(tileEntity instanceof TileEntitySilvaniteChest) {
                	if(id == 2)
                        return new ContainerSilvaniteChest(player.inventory, (TileEntitySilvaniteChest) tileEntity);
                }
                return null;
        	}
            case 2: {
                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if(tileEntity instanceof TileEntityMerciliteChest) {
                	if(id == 1)
                        return new ContainerMerciliteChest(player.inventory, (TileEntityMerciliteChest) tileEntity);
                }
                return null;
        	}
        }	
        	return null;
        }

        @Override
        public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) {
        	switch(id) {
        	case 0: {
                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if(tileEntity instanceof TileEntityRemulaChest) {
                	if(id == 0)
                        return new RemulaGuiChest(player.inventory, (TileEntityRemulaChest) tileEntity);
                }	
        	}
            break;
            
        	case 1: {
                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if(tileEntity instanceof TileEntitySilvaniteChest) {
                	if(id == 2)
                        return new SilvaniteGuiChest(player.inventory, (TileEntitySilvaniteChest) tileEntity);
                }
        	}
            break;
            
        	case 2: {
                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if(tileEntity instanceof TileEntityMerciliteChest) {
                	if(id == 1)
                        return new MerciliteGuiChest(player.inventory, (TileEntityMerciliteChest) tileEntity);
                }
        	}
            break;
        	}	
        	return null;
        }
}

 

 

[spoiler=SilvaniteChest]

package co.uk.silvania.Remula.tileentity;

import java.util.Random;

import co.uk.silvania.Remula.CommonProxy;
import co.uk.silvania.Remula.Remula;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;

public class SilvaniteChest extends BlockContainer {

        public SilvaniteChest (int id) {
                super(id, Material.iron);
                setHardness(2.0F);
                setResistance(5.0F);
                setCreativeTab(Remula.tabRemula);
                this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F);
        }

        @Override
        public boolean onBlockActivated(World world, int x, int y, int z,
                        EntityPlayer player, int i, float j, float k, float l) {
                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if (tileEntity == null || player.isSneaking()) {
                        return false;
                }
        player.openGui(Remula.instance, 2, 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);
        }
        
        public boolean isOpaqueCube()
        {
            return false;
        }

        public boolean renderAsNormalBlock()
        {
            return false;
        }

        public int getRenderType()
        {
            return 22;
        }
        
        public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving)
        {
            int var6 = par1World.getBlockId(par2, par3, par4 - 1);
            int var7 = par1World.getBlockId(par2, par3, par4 + 1);
            int var8 = par1World.getBlockId(par2 - 1, par3, par4);
            int var9 = par1World.getBlockId(par2 + 1, par3, par4);
            byte var10 = 0;
            int var11 = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;

            if (var11 == 0)
            {
                var10 = 2;
            }

            if (var11 == 1)
            {
                var10 = 5;
            }

            if (var11 == 2)
            {
                var10 = 3;
            }

            if (var11 == 3)
            {
                var10 = 4;
            }

            if (var6 != this.blockID && var7 != this.blockID && var8 != this.blockID && var9 != this.blockID)
            {
                par1World.setBlockMetadataWithNotify(par2, par3, par4, var10);
            }
            else
            {
                if ((var6 == this.blockID || var7 == this.blockID) && (var10 == 4 || var10 == 5))
                {
                    if (var6 == this.blockID)
                    {
                        par1World.setBlockMetadataWithNotify(par2, par3, par4 - 1, var10);
                    }
                    else
                    {
                        par1World.setBlockMetadataWithNotify(par2, par3, par4 + 1, var10);
                    }

                    par1World.setBlockMetadataWithNotify(par2, par3, par4, var10);
                }

                if ((var8 == this.blockID || var9 == this.blockID) && (var10 == 2 || var10 == 3))
                {
                    if (var8 == this.blockID)
                    {
                        par1World.setBlockMetadataWithNotify(par2 - 1, par3, par4, var10);
                    }
                    else
                    {
                        par1World.setBlockMetadataWithNotify(par2 + 1, par3, par4, var10);
                    }

                    par1World.setBlockMetadataWithNotify(par2, par3, par4, var10);
                }
            }
        }

        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.getEntityItem().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 TileEntitySilvaniteChest();
        }
}

 

 

[spoiler=MerciliteChest]

package co.uk.silvania.Remula.tileentity;

import java.util.Random;

import co.uk.silvania.Remula.CommonProxy;
import co.uk.silvania.Remula.Remula;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;

public class MerciliteChest extends BlockContainer {

        public MerciliteChest (int id) {
                super(id, Material.iron);
                setHardness(2.0F);
                setResistance(5.0F);
                setCreativeTab(Remula.tabRemula);
                this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F);
        		this.currentTexture = "/co/uk/silvania/Remula/resources/SilvaniteChest1.png";
        }

        @Override
        public boolean onBlockActivated(World world, int x, int y, int z,
                        EntityPlayer player, int i, float j, float k, float l) {
                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if (tileEntity == null || player.isSneaking()) {
                        return false;
                }
        player.openGui(Remula.instance, 1, 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);
        }
        
        public boolean isOpaqueCube()
        {
            return false;
        }

        public boolean renderAsNormalBlock()
        {
            return false;
        }

        public int getRenderType()
        {
            return 22;
        }
        
        public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving)
        {
            int var6 = par1World.getBlockId(par2, par3, par4 - 1);
            int var7 = par1World.getBlockId(par2, par3, par4 + 1);
            int var8 = par1World.getBlockId(par2 - 1, par3, par4);
            int var9 = par1World.getBlockId(par2 + 1, par3, par4);
            byte var10 = 0;
            int var11 = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;

            if (var11 == 0)
            {
                var10 = 2;
            }

            if (var11 == 1)
            {
                var10 = 5;
            }

            if (var11 == 2)
            {
                var10 = 3;
            }

            if (var11 == 3)
            {
                var10 = 4;
            }

            if (var6 != this.blockID && var7 != this.blockID && var8 != this.blockID && var9 != this.blockID)
            {
                par1World.setBlockMetadataWithNotify(par2, par3, par4, var10);
            }
            else
            {
                if ((var6 == this.blockID || var7 == this.blockID) && (var10 == 4 || var10 == 5))
                {
                    if (var6 == this.blockID)
                    {
                        par1World.setBlockMetadataWithNotify(par2, par3, par4 - 1, var10);
                    }
                    else
                    {
                        par1World.setBlockMetadataWithNotify(par2, par3, par4 + 1, var10);
                    }

                    par1World.setBlockMetadataWithNotify(par2, par3, par4, var10);
                }

                if ((var8 == this.blockID || var9 == this.blockID) && (var10 == 2 || var10 == 3))
                {
                    if (var8 == this.blockID)
                    {
                        par1World.setBlockMetadataWithNotify(par2 - 1, par3, par4, var10);
                    }
                    else
                    {
                        par1World.setBlockMetadataWithNotify(par2 + 1, par3, par4, var10);
                    }

                    par1World.setBlockMetadataWithNotify(par2, par3, par4, var10);
                }
            }
        }

        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.getEntityItem().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 TileEntityMerciliteChest();
        }
}

 

 

[spoiler=RemulaChest]

package co.uk.silvania.Remula.tileentity;

import java.util.Random;

import co.uk.silvania.Remula.CommonProxy;
import co.uk.silvania.Remula.Remula;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;

public class RemulaChest extends BlockContainer {

        public RemulaChest (int id) {
                super(id, Material.iron);
                setHardness(2.0F);
                setResistance(5.0F);
                setCreativeTab(Remula.tabRemula);
                this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F);
        }

        @Override
        public boolean onBlockActivated(World world, int x, int y, int z,
                        EntityPlayer player, int i, float j, float k, float l) {
                TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
                if (tileEntity == null || player.isSneaking()) {
                        return false;
                }
        player.openGui(Remula.instance, 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);
        }
        
        public boolean isOpaqueCube()
        {
            return false;
        }

        public boolean renderAsNormalBlock()
        {
            return false;
        }

        public int getRenderType()
        {
            return 22;
        }
        
        public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving)
        {
            int var6 = par1World.getBlockId(par2, par3, par4 - 1);
            int var7 = par1World.getBlockId(par2, par3, par4 + 1);
            int var8 = par1World.getBlockId(par2 - 1, par3, par4);
            int var9 = par1World.getBlockId(par2 + 1, par3, par4);
            byte var10 = 0;
            int var11 = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;

            if (var11 == 0)
            {
                var10 = 2;
            }

            if (var11 == 1)
            {
                var10 = 5;
            }

            if (var11 == 2)
            {
                var10 = 3;
            }

            if (var11 == 3)
            {
                var10 = 4;
            }

            if (var6 != this.blockID && var7 != this.blockID && var8 != this.blockID && var9 != this.blockID)
            {
                par1World.setBlockMetadataWithNotify(par2, par3, par4, var10);
            }
            else
            {
                if ((var6 == this.blockID || var7 == this.blockID) && (var10 == 4 || var10 == 5))
                {
                    if (var6 == this.blockID)
                    {
                        par1World.setBlockMetadataWithNotify(par2, par3, par4 - 1, var10);
                    }
                    else
                    {
                        par1World.setBlockMetadataWithNotify(par2, par3, par4 + 1, var10);
                    }

                    par1World.setBlockMetadataWithNotify(par2, par3, par4, var10);
                }

                if ((var8 == this.blockID || var9 == this.blockID) && (var10 == 2 || var10 == 3))
                {
                    if (var8 == this.blockID)
                    {
                        par1World.setBlockMetadataWithNotify(par2 - 1, par3, par4, var10);
                    }
                    else
                    {
                        par1World.setBlockMetadataWithNotify(par2 + 1, par3, par4, var10);
                    }

                    par1World.setBlockMetadataWithNotify(par2, par3, par4, var10);
                }
            }
        }

        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.getEntityItem().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 TileEntityRemulaChest();
        }
}

 

 

 

[spoiler=parts of my mod file]

    @Instance("Remula")
    public static Remula instance;
    public static GuiHandler remulaGuiHandler = new GuiHandler();

    @PreInit
    public void preInit(FMLPreInitializationEvent event) {
    	NetworkRegistry.instance().registerGuiHandler(this, remulaGuiHandler);
    }

    @Init
    public void load(FMLInitializationEvent event) {
            proxy.registerRenderThings();
            proxy.init();
            NetworkRegistry.instance().registerGuiHandler(this, new GuiHandler());

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Posted

case 2: {
    ...
   if(id == 1)
   ...

 

The if statements are never true, just saying. Also they're useless, Why do you check the ID 2 times (one time in the switch statement and one in the if statements)?

Here's my GuiHandler as a reference: https://github.com/SanAndreasP/TurretModv3/blob/master/sanandreasp/mods/TurretMod3/registry/GuiHandler.java

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Posted

Actually, I got the idea for the if statements from there to begin with. When you posted the other link earlier, I went to look at your GuiHandler then to see if I could see anything useful. I noticed the if statements in the client stuff, so I thought I'd give it a try...

 

Removed the if statements made no difference, so I agree they were useless but removing them didn't help either...

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Posted

Actually, I got the idea for the if statements from there to begin with. When you posted the other link earlier, I went to look at your GuiHandler then to see if I could see anything useful. I noticed the if statements in the client stuff, so I thought I'd give it a try...

 

Removed the if statements made no difference, so I agree they were useless but removing them didn't help either...

 

The if statements I have in my GuiHandler are there because I use Fall-Throughts.

 

Can I see the modified GuiHandler, and could you use pastebin (with java highlighting on)?

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Posted

http://pastebin.com/zBASdNX1

 

I only removed the if's and also changed return null; to return id;

 

Strangely, the latter thing made two out of 3 chests work. I've not changed anything in the chest files, but the three are all identical bar the names etc and their opengui ID's... It's the Silvanite Chest which isn't working now, with a crash:

 

2013-05-17 13:24:33 [iNFO] [sTDERR] java.lang.ClassCastException: java.lang.Integer cannot be cast to net.minecraft.client.gui.GuiScreen
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at cpw.mods.fml.client.FMLClientHandler.showGuiScreen(FMLClientHandler.java:321)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at cpw.mods.fml.common.FMLCommonHandler.showGuiScreen(FMLCommonHandler.java:335)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at cpw.mods.fml.common.network.NetworkRegistry.openLocalGui(NetworkRegistry.java:316)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at cpw.mods.fml.common.network.FMLNetworkHandler.openGui(FMLNetworkHandler.java:339)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2304)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at co.uk.silvania.Remula.tileentity.SilvaniteChest.onBlockActivated(SilvaniteChest.java:41)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at net.minecraft.client.multiplayer.PlayerControllerMP.onPlayerRightClick(PlayerControllerMP.java:358)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.clickMouse(Minecraft.java:1329)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.runTick(Minecraft.java:1812)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:848)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.run(Minecraft.java:773)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at java.lang.Thread.run(Unknown Source)

 

 

Again it's referencing the GuiScreen thing, but I fixed it earlier and I can't see anything else...

        player.openGui(Remula.instance, 2, world, x, y, z);
                return true;
        }

is the line from the stacktrace.

 

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Posted

http://pastebin.com/zBASdNX1

 

I only removed the if's and also changed return null; to return id;

 

Strangely, the latter thing made two out of 3 chests work. I've not changed anything in the chest files, but the three are all identical bar the names etc and their opengui ID's... It's the Silvanite Chest which isn't working now, with a crash:

 

2013-05-17 13:24:33 [iNFO] [sTDERR] java.lang.ClassCastException: java.lang.Integer cannot be cast to net.minecraft.client.gui.GuiScreen
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at cpw.mods.fml.client.FMLClientHandler.showGuiScreen(FMLClientHandler.java:321)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at cpw.mods.fml.common.FMLCommonHandler.showGuiScreen(FMLCommonHandler.java:335)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at cpw.mods.fml.common.network.NetworkRegistry.openLocalGui(NetworkRegistry.java:316)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at cpw.mods.fml.common.network.FMLNetworkHandler.openGui(FMLNetworkHandler.java:339)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2304)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at co.uk.silvania.Remula.tileentity.SilvaniteChest.onBlockActivated(SilvaniteChest.java:41)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at net.minecraft.client.multiplayer.PlayerControllerMP.onPlayerRightClick(PlayerControllerMP.java:358)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.clickMouse(Minecraft.java:1329)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.runTick(Minecraft.java:1812)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:848)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.run(Minecraft.java:773)
2013-05-17 13:24:33 [iNFO] [sTDERR] 	at java.lang.Thread.run(Unknown Source)

 

 

Again it's referencing the GuiScreen thing, but I fixed it earlier and I can't see anything else...

        player.openGui(Remula.instance, 2, world, x, y, z);
                return true;
        }

is the line from the stacktrace.

 

Most likely the return value is expected to be a GuiScreen and NOT an Integer. If it shouldn't return anything, then just return null. And I highly doubt that returning the ID made the second GUI work.

What I see is that the IDs in the openGUI call inside your blocks Silvanite- and MerciliteChest are the wrong way around (The silvanite chest tries to open the Mercilite GUI and the other way around.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Posted

Yup that fixed it!

 

1 down, 2 to go. Thanks! I've added you to my credits list for when it's finally released as a help :P

 

For the second: Does it have a TileEntitySpecialRenderer?

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Posted

Yup that fixed it!

 

1 down, 2 to go. Thanks! I've added you to my credits list for when it's finally released as a help :P

 

For the second: Does it have a TileEntitySpecialRenderer?

 

Sorry, been away for a couple of days.

 

It has got one, here's one of them:

 

package co.uk.silvania.Remula.tileentity;

import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.Calendar;
import net.minecraft.block.Block;
import net.minecraft.block.BlockChest;
import net.minecraft.client.model.ModelChest;
import net.minecraft.client.model.ModelLargeChest;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityChest;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;

@SideOnly(Side.CLIENT)
public class TileEntityMerciliteChestRenderer extends TileEntitySpecialRenderer
{
    /** The normal small chest model. */
    private ModelChest chestModel = new ModelChest();

    /** The large double chest model. */
    private ModelChest largeChestModel = new ModelLargeChest();
    private boolean field_92061_d;

    public TileEntityMerciliteChestRenderer()
    {
        Calendar var1 = Calendar.getInstance();

        if (var1.get(2) + 1 == 12 && var1.get(5) >= 24 && var1.get(5) <= 26)
        {
            this.field_92061_d = true;
        }
    }

    /**
     * Renders the TileEntity for the chest at a position.
     */
    public void renderTileEntityChestAt(TileEntityChest par1TileEntityChest, double par2, double par4, double par6, float par8)
    {
        int var9;

        if (!par1TileEntityChest.func_70309_m())
        {
            var9 = 0;
        }
        else
        {
            Block var10 = par1TileEntityChest.getBlockType();
            var9 = par1TileEntityChest.getBlockMetadata();

            if (var10 != null && var9 == 0)
            {
                try
                {
                    ((BlockChest)var10).unifyAdjacentChests(par1TileEntityChest.getWorldObj(), par1TileEntityChest.xCoord, par1TileEntityChest.yCoord, par1TileEntityChest.zCoord);
                }
                catch (ClassCastException e)
                {
                    FMLLog.severe("Attempted to render a chest at %d,  %d, %d that was not a chest",
                            par1TileEntityChest.xCoord, par1TileEntityChest.yCoord, par1TileEntityChest.zCoord);
                }
                var9 = par1TileEntityChest.getBlockMetadata();
            }

            par1TileEntityChest.checkForAdjacentChests();
        }

        if (par1TileEntityChest.adjacentChestZNeg == null && par1TileEntityChest.adjacentChestXNeg == null)
        {
            ModelChest var14;

            if (par1TileEntityChest.adjacentChestXPos == null && par1TileEntityChest.adjacentChestZPosition == null)
            {
                var14 = this.chestModel;

                if (this.field_92061_d)
                {
                    this.bindTextureByName("/item/xmaschest.png");
                }
                else
                {
                    this.bindTextureByName("/item/chest.png");
                }
            }
            else
            {
                var14 = this.largeChestModel;

                if (this.field_92061_d)
                {
                    this.bindTextureByName("/item/largexmaschest.png");
                }
                else
                {
                    this.bindTextureByName("/item/largechest.png");
                }
            }

            GL11.glPushMatrix();
            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
            GL11.glTranslatef((float)par2, (float)par4 + 1.0F, (float)par6 + 1.0F);
            GL11.glScalef(1.0F, -1.0F, -1.0F);
            GL11.glTranslatef(0.5F, 0.5F, 0.5F);
            short var11 = 0;

            if (var9 == 2)
            {
                var11 = 180;
            }

            if (var9 == 3)
            {
                var11 = 0;
            }

            if (var9 == 4)
            {
                var11 = 90;
            }

            if (var9 == 5)
            {
                var11 = -90;
            }

            if (var9 == 2 && par1TileEntityChest.adjacentChestXPos != null)
            {
                GL11.glTranslatef(1.0F, 0.0F, 0.0F);
            }

            if (var9 == 5 && par1TileEntityChest.adjacentChestZPosition != null)
            {
                GL11.glTranslatef(0.0F, 0.0F, -1.0F);
            }

            GL11.glRotatef((float)var11, 0.0F, 1.0F, 0.0F);
            GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
            float var12 = par1TileEntityChest.prevLidAngle + (par1TileEntityChest.lidAngle - par1TileEntityChest.prevLidAngle) * par8;
            float var13;

            if (par1TileEntityChest.adjacentChestZNeg != null)
            {
                var13 = par1TileEntityChest.adjacentChestZNeg.prevLidAngle + (par1TileEntityChest.adjacentChestZNeg.lidAngle - par1TileEntityChest.adjacentChestZNeg.prevLidAngle) * par8;

                if (var13 > var12)
                {
                    var12 = var13;
                }
            }

            if (par1TileEntityChest.adjacentChestXNeg != null)
            {
                var13 = par1TileEntityChest.adjacentChestXNeg.prevLidAngle + (par1TileEntityChest.adjacentChestXNeg.lidAngle - par1TileEntityChest.adjacentChestXNeg.prevLidAngle) * par8;

                if (var13 > var12)
                {
                    var12 = var13;
                }
            }

            var12 = 1.0F - var12;
            var12 = 1.0F - var12 * var12 * var12;
            var14.chestLid.rotateAngleX = -(var12 * (float)Math.PI / 2.0F);
            var14.renderAll();
            GL11.glDisable(GL12.GL_RESCALE_NORMAL);
            GL11.glPopMatrix();
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        }
    }

    public void renderTileEntityAt(TileEntity par1TileEntity, double par2, double par4, double par6, float par8)
    {
        this.renderTileEntityChestAt((TileEntityChest)par1TileEntity, par2, par4, par6, par8);
    }
}

 

Again, right now it's just the same as the vanilla chest. I want to get that working before I try and edit it to be my custom model/texture.

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Posted

Do your TileEntities extend TileEntityChest? If not you need to change the references / casts there first.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

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



×
×
  • Create New...

Important Information

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