Jump to content

Recommended Posts

Posted

The way that the furnace uses is changing the blockID

Block.furnaceIdle.blockID;

Block.furnaceActive.blockID;

 

Yeah this is the way the basic furnace it does.

 

I help the baconMod creator a little bit out. And there i did found a way how to fix the problem.

 

Here: BlockBaconMaker:

package minecraftwero.baconMod.common.blocks;

import java.util.Random;

import minecraftwero.baconMod.Bacon;
import minecraftwero.baconMod.common.lib.BaconGuiIDs;
import minecraftwero.baconMod.common.tile.BaconMaker;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Icon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BlockBaconMaker extends BlockContainer 
{
private String[] texture;
private Icon[] icons = new Icon[6];
public BlockBaconMaker(int par1, String name, String...textures) 
{
	super(par1, Material.rock);
	texture = textures;
	this.setCreativeTab(Bacon.baconMod);

}

@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister par1) 
{
	for(int i = 0; i<texture.length;i++)
	{
		icons[i] = par1.registerIcon(texture[i]);
	}
}

@Override
@SideOnly(Side.CLIENT)
public Icon getIcon(int par1, int par2) 
{
	if(par1 == ForgeDirection.NORTH.getOpposite().ordinal())return icons[2];
	else if(par1 == ForgeDirection.WEST.ordinal())return icons[3];
	else if(par1 == ForgeDirection.UP.ordinal())return icons[1];
	else return icons[4];
}

    @SideOnly(Side.CLIENT)
    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
    {
    	BaconMaker tile = (BaconMaker) par1World.getBlockTileEntity(par2, par3, par4);
    	if(tile != null && tile.fuel > 0)
    	{
            int l = tile.getFacing();
            float f = (float)par2 + 0.5F;
            float f1 = (float)par3 + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F;
            float f2 = (float)par4 + 0.5F;
            float f3 = 0.52F;
            float f4 = par5Random.nextFloat() * 0.6F - 0.3F;

            if (l == 4)
            {
                par1World.spawnParticle("smoke", (double)(f - f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D);
                par1World.spawnParticle("flame", (double)(f - f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D);
            }
            else if (l == 5)
            {
                par1World.spawnParticle("smoke", (double)(f + f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D);
                par1World.spawnParticle("flame", (double)(f + f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D);
            }
            else if (l == 2)
            {
                par1World.spawnParticle("smoke", (double)(f + f4), (double)f1, (double)(f2 - f3), 0.0D, 0.0D, 0.0D);
                par1World.spawnParticle("flame", (double)(f + f4), (double)f1, (double)(f2 - f3), 0.0D, 0.0D, 0.0D);
            }
            else if (l == 3)
            {
                par1World.spawnParticle("smoke", (double)(f + f4), (double)f1, (double)(f2 + f3), 0.0D, 0.0D, 0.0D);
                par1World.spawnParticle("flame", (double)(f + f4), (double)f1, (double)(f2 + f3), 0.0D, 0.0D, 0.0D);
            }
    	}
    }

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

@Override
@SideOnly(Side.CLIENT)
public Icon getBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)
{
	int meta = par1IBlockAccess.getBlockMetadata(par2, par3, par4);
	BaconMaker tile = (BaconMaker) par1IBlockAccess.getBlockTileEntity(par2, par3, par4);
	if(tile != null)
	{
	 	if(tile.facing == par5)
	 	{
	 		if(tile.fuel > 0)
	 		{
	 			return icons[5];
	 		}
	 		else 
	 		{
	 			return icons[2];
	 		}
	 	}
	 	else if(par5 == 0)return icons[0];
	 	else if(par5 == 1)return icons[1];
	 	else if(ForgeDirection.getOrientation(tile.facing).getOpposite().ordinal() == ForgeDirection.SOUTH.ordinal())return icons[3];
	 	else return icons[4];
	}
	else
	{
		return null;
	}
}

@Override
public void breakBlock(World par1, int par2, int par3, int par4, int par5, int par6)
{
	super.breakBlock(par1, par2, par3, par4, par5, par6);
}



//Start
@Override
public int quantityDropped(Random par1Random) 
{
	return 1;
}

@Override
public int idDropped(int par1, Random par2Random, int par3)
{
	return this.blockID;
}

@Override
public int damageDropped(int par1) 
{
	return 0;
}
//End

public boolean onBlockActivated(World par1, int par2, int par3, int par4, EntityPlayer par5, int par6, float par7, float par8, float par9)
{
	if(par5.isSneaking())
	{
		return false;
	}

	if(!par1.isRemote)
	{
		BaconMaker tile = (BaconMaker) par1.getBlockTileEntity(par2, par3, par4);
		if(tile != null)
		{
			par5.openGui(Bacon.instance, BaconGuiIDs.baconMaker, par1, par2, par3, par4);
			return true;
		}
	}
	return true;
}

@Override
public void onBlockPlacedBy(World par1, int par2, int par3, int par4, EntityLivingBase par5, ItemStack par6) 
{

	TileEntity tile = par1.getBlockTileEntity(par2, par3, par4);
	int facing = MathHelper.floor_double(par5.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
	int rotation = 0;
        if (facing == 0) {
            rotation = ForgeDirection.NORTH.ordinal();
        }
        else if (facing == 1) {
            rotation = ForgeDirection.EAST.ordinal();
        }
        else if (facing == 2) {
            rotation = ForgeDirection.SOUTH.ordinal();
        }
        else if (facing == 3) {
            rotation = ForgeDirection.WEST.ordinal();
        }
        else
        {
        	rotation = ForgeDirection.NORTH.ordinal();
        }
        
        if(tile != null && tile instanceof BaconMaker)
        {
        	BaconMaker bot = (BaconMaker) tile;
        	bot.setFacing(rotation);
        }
}

public void updateTick(World world, int i, int j, int k, Random random)
    {
	super.updateTick(world, i, j, k, random);
	notifyNeighbors(world, i, j, k);
	world.scheduleBlockUpdate(i, j, k, blockID, tickRate());
    }

public void onBlockDestroyedByPlayer(World world, int i, int j, int k, int l)
    {
	notifyNeighbors(world, i, j, k);
    }

public void notifyNeighbors(World world, int i, int j, int k)
{
	world.notifyBlocksOfNeighborChange(i, j, k, blockID);
	world.notifyBlocksOfNeighborChange(i, j - 1, k, blockID);
        world.notifyBlocksOfNeighborChange(i, j + 1, k, blockID);
        world.notifyBlocksOfNeighborChange(i - 1, j, k, blockID);
        world.notifyBlocksOfNeighborChange(i + 1, j, k, blockID);
        world.notifyBlocksOfNeighborChange(i, j, k - 1, blockID);
        world.notifyBlocksOfNeighborChange(i, j, k + 1, blockID);
}


public void onBlockAdded(World world, int i, int j, int k)
    {        
        world.scheduleBlockUpdate(i, j, k, blockID, tickRate());
    }

public int tickRate()
{
	return 1;
}

@Override
public int getLightValue(IBlockAccess world, int x, int y, int z) 
{
	BaconMaker tile = (BaconMaker) world.getBlockTileEntity(x, y, z);
	if(tile != null)
	{
		if(tile.fuel > 0)return 8;
		else return 0;
	}
	else
	{
		return 0;
	}
}

}

 

TileEntityBaconMaker:

package minecraftwero.baconMod.common.tile;

import minecraftwero.baconMod.common.core.handlers.BaconMakerRecipes;
import minecraftwero.baconMod.common.items.ItemBlade;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BaconMaker extends TileEntityBacon implements IInventory, ISidedInventory
{

ItemStack[] baconInventory = new ItemStack[4];
public int fuel = 0;
public int progress = 0;
public int workingTime = 0;
public boolean update = false;

@SideOnly(Side.CLIENT)
public int getProgressBar(int i)
{
	return progress * i / 300;
}


@SideOnly(Side.CLIENT)
public int getFuel(int i)
{
	return fuel * i / 1000;
}

    public void updateBlock()
    {
        int var1 = this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord);
        this.worldObj.markBlockForRenderUpdate(this.xCoord, this.yCoord, this.zCoord);
        markBlockDirty(this.worldObj, this.xCoord, this.yCoord, this.zCoord);
    }

    public void markBlockDirty(World var0, int var1, int var2, int var3)
    {
        if (var0.blockExists(var1, var2, var3))
        {
            var0.getChunkFromBlockCoords(var1, var3).setChunkModified();
        }
    }
    
    public int getSizeInventory()
    {
        return this.baconInventory.length;
    }
    

    public ItemStack getStackInSlot(int par1)
    {
        return this.baconInventory[par1];
    }


    public ItemStack decrStackSize(int par1, int par2)
    {
        if (this.baconInventory[par1] != null)
        {
            ItemStack itemstack;

            if (this.baconInventory[par1].stackSize <= par2)
            {
                itemstack = this.baconInventory[par1];
                this.baconInventory[par1] = null;
                return itemstack;
            }
            else
            {
                itemstack = this.baconInventory[par1].splitStack(par2);

                if (this.baconInventory[par1].stackSize == 0)
                {
                    this.baconInventory[par1] = null;
                }

                return itemstack;
            }
        }
        else
        {
            return null;
        }
    }


    public ItemStack getStackInSlotOnClosing(int par1)
    {
        if (this.baconInventory[par1] != null)
        {
            ItemStack itemstack = this.baconInventory[par1];
            this.baconInventory[par1] = null;
            return itemstack;
        }
        else
        {
            return null;
        }
    }


    public void setInventorySlotContents(int par1, ItemStack par2ItemStack)
    {
        this.baconInventory[par1] = par2ItemStack;

        if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit())
        {
            par2ItemStack.stackSize = this.getInventoryStackLimit();
        }
    }


    public String getInvName()
    {
        return null;
    }



    public void readFromNBT(NBTTagCompound par1NBTTagCompound)
    {
        super.readFromNBT(par1NBTTagCompound);
        NBTTagList nbttaglist = par1NBTTagCompound.getTagList("Items");
        fuel = par1NBTTagCompound.getInteger("fuels");
        progress = par1NBTTagCompound.getInteger("progresss");
        workingTime = par1NBTTagCompound.getInteger("workingTimes");
        this.baconInventory = new ItemStack[this.getSizeInventory()];

        for (int i = 0; i < nbttaglist.tagCount(); ++i)
        {
            NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttaglist.tagAt(i);
            byte b0 = nbttagcompound1.getByte("Slot");

            if (b0 >= 0 && b0 < this.baconInventory.length)
            {
                this.baconInventory[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
            }
        }
    }


    public void writeToNBT(NBTTagCompound par1NBTTagCompound)
    {
        super.writeToNBT(par1NBTTagCompound);
        par1NBTTagCompound.setInteger("fuels", fuel);
        par1NBTTagCompound.setInteger("progresss", progress);
        par1NBTTagCompound.setInteger("workingTimes", workingTime);
        NBTTagList nbttaglist = new NBTTagList();

        for (int i = 0; i < this.baconInventory.length; ++i)
        {
            if (this.baconInventory[i] != null)
            {
                NBTTagCompound nbttagcompound1 = new NBTTagCompound();
                nbttagcompound1.setByte("Slot", (byte)i);
                this.baconInventory[i].writeToNBT(nbttagcompound1);
                nbttaglist.appendTag(nbttagcompound1);
            }
        }

        par1NBTTagCompound.setTag("Items", nbttaglist);

    }

    public int getInventoryStackLimit()
    {
        return 64;
    }


@Override
public boolean isUseableByPlayer(EntityPlayer entityplayer) 
{
	return true;
}

@Override
public void openChest() {		
}

@Override
public void closeChest() 
{		
}


@Override
public boolean isInvNameLocalized() {
	return false;
}

@Override
public void updateEntity() 
{


	super.updateEntity();


	if(fuel < 10 && canCook() && baconInventory[2] != null && baconInventory[2].getItem() instanceof ItemBlade)
	{
		addFuel();
		update = true;
	}
	cook();
	damage();
	if(fuel > 0)
	{
		fuel--;
	}

	if(update)
	{
		update = false;
		this.onInventoryChanged();
		updateBlock();
		updateLight();
	}

}

    void updateLight()
    {
        this.worldObj.updateAllLightTypes(this.xCoord, this.yCoord, this.zCoord);
    }


public void damage()
{
	if(workingTime >= 600 && baconInventory[2] != null && baconInventory[2].getItem() instanceof ItemBlade)
	{
		workingTime = 0;
		ItemBlade ib = (ItemBlade) baconInventory[2].getItem();
		ib.damageBlade(baconInventory[2]);
		if(baconInventory[2].getItemDamage() >= baconInventory[2].getMaxDamage())
		{
			baconInventory[2] = null;
		}

	}
}

public void cook()
{
	if(fuel > 0)
	{
		if(canCook())
		{
			if(baconInventory[2] != null && baconInventory[2].getItem() instanceof ItemBlade)
			{
				ItemBlade ib = (ItemBlade) baconInventory[2].getItem();
				progress++;
				workingTime++;
				if(progress >= 300)
				{
					progress = 0;
					ItemStack output = BaconMakerRecipes.getRecipes().getRecipeOuput(baconInventory[1]);
		            if (this.baconInventory[3] == null)
		            {
		                this.baconInventory[3] = output.copy();
		                update = true;
		            }
		            else if (this.baconInventory[3].isItemEqual(output))
		            {
		                baconInventory[3].stackSize += output.stackSize;
		                update = true;
		            }

		            --this.baconInventory[1].stackSize;

		            if (this.baconInventory[1].stackSize <= 0)
		            {
		                this.baconInventory[1] = null;
		                update = true;
		            }
				}
			}
		}
		else
		{
			progress = 0;
		}
	}
}

public boolean canCook()
{
        if (this.baconInventory[1] == null)
        {
            return false;
        }
        else
        {
            ItemStack itemstack = BaconMakerRecipes.getRecipes().getRecipeOuput(baconInventory[1]);
            if (itemstack == null) return false;
            if (this.baconInventory[3] == null) return true;
            if (!this.baconInventory[3].isItemEqual(itemstack)) return false;
            int result = baconInventory[3].stackSize + itemstack.stackSize;
            return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
        }
}

public void addFuel()
{
	if(hasFuel(baconInventory[0]))
	{
		int fuelbetween = this.getFuel(baconInventory[0]);
		if(fuelbetween > 0)
		{
			fuel += fuelbetween;
			baconInventory[0].stackSize--;
			update = true;
			if(baconInventory[0].stackSize <= 0)
			{
				baconInventory[0] = baconInventory[0].getItem().getContainerItemStack(baconInventory[0]);
				update = true;
			}
		}


	}
}

public boolean hasFuel(ItemStack par1)
{
	return getFuel(par1) > 0;
}

public int getFuel(ItemStack par1)
{
	if(par1 != null)
	{
		int itemid = par1.getItem().itemID;
		if(itemid == Item.coal.itemID)
		{
			return 1600;
		}
	}

	return 0;
}



    /**
     * Returns an array containing the indices of the slots that can be accessed by automation on the given side of this
     * block.
     */
    public int[] getAccessibleSlotsFromSide(int par1)
    {
    	if(par1 == 0)
    	{
    		return new int[]{0};
    	}
    	else if(par1 == 1)
    	{
    		return new int[]{1};
    	}
    	else
    	{
    		return new int[]{3};
    	}
    }

    /**
     * Returns true if automation can insert the given item in the given slot from the given side. Args: Slot, item,
     * side
     */
    public boolean canInsertItem(int par1, ItemStack par2ItemStack, int par3)
    {
        return this.isItemValidForSlot(par1, par2ItemStack);
    }

    /**
     * Returns true if automation can extract the given item in the given slot from the given side. Args: Slot, item,
     * side
     */
    public boolean canExtractItem(int par1, ItemStack par2ItemStack, int par3)
    {
        return par3 != 1 || par1 != 2 || par2ItemStack.itemID == Item.bucketEmpty.itemID;
    }


@Override
public boolean isItemValidForSlot(int i, ItemStack itemstack) 
{
        if(i == 0)return this.hasFuel(itemstack);
        else if(i == 3)return false;
        else if(i == 1)return true;
        else return false;
}


}

 

The updateBlock function updates the function.

The updateLight function updates the light^^.

i hope it helps^^

Join the conversation

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

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

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

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

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • @Tsuk1 Also, new note, you can use blockbench to make the custom item model for when it is not on the head.   EDIT: Funny story, I am making a mod similar to yours! Mine is called NorseMC.
    • @Nood_dev Could you send a screenshot of your weapon code? Here is the one I made (for a dagger): The specific UUID does not matter, just that it is the same every time, which is why UUID#randomUUID does not work public class DaggerItem extends TieredItem implements Vanishable { protected static final double REACH_MODIFIER = -1.5D; protected final Multimap<Attribute, AttributeModifier> defaultModifiers; protected final UUID BASE_ATTACK_REACH_UUID = UUID.fromString("6fe75b5c-9d1b-4e83-9eea-a1d5a94e8dd5") public DaggerItem(Tier pTier, int pAttackDamageModifier, float pAttackSpeedModifier, Properties pProperties) { super(pTier, pAttackDamageModifier, pAttackSpeedModifier, pProperties); this.attackDamage = (float) pAttackDamageModifier + pTier.getAttackDamageBonus(); ImmutableMultimap.Builder<Attribute, AttributeModifier> builder = ImmutableMultimap.builder(); builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", this.attackDamage, AttributeModifier.Operation.ADDITION)); builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier", pAttackSpeedModifier, AttributeModifier.Operation.ADDITION)); // THE ONE YOU WANT: builder.put(ForgeMod.ENTITY_REACH.get(), new AttributeModifier(BASE_ATTACK_REACH_UUID, "Weapon modifier", REACH_MODIFIER, AttributeModifier.Operation.ADDITION)); this.defaultModifiers = builder.build(); } @Override public Multimap<Attribute, AttributeModifier> getDefaultAttributeModifiers(EquipmentSlot pEquipmentSlot) { return pEquipmentSlot == EquipmentSlot.MAINHAND ? this.defaultModifiers : super.getDefaultAttributeModifiers(pEquipmentSlot); } }
    • https://images.app.goo.gl/1PxFKdxByTgkxvSu6
    • That's what we'll try out. I could never figure out how to recreate the crash, so I'll just have to wait and see.
    • Ok, I updated to the latest version and now the models are visible, the problem now is that the glowing eyes are not rendered nor any texture I render there when using shaders, even using the default Minecraft eyes RenderType, I use entityTranslucent and entityCutout, but it still won't render. Something I noticed when using shaders is that a texture, instead of appearing at the world position, would appear somewhere on the screen, following a curved path, it was strange, I haven't been able to reproduce it again. I thought it could be that since I render the texture in the AFTER ENTITIES stage which is posted after the batches used for entity rendering are finished, maybe that was the reason why the render types were not being drawn correctly, so I tried injecting code before finishing the batches but it still didn't work, plus the model was invisible when using shaders, there was a bug where if I look at the model from above it is visible but if I look at it from below it is invisible. So in summary, models are now visible but glowing eyes and textures are not rendered, that hasn't changed.
  • Topics

×
×
  • Create New...

Important Information

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