Jump to content

Give Item to player


deantonious

Recommended Posts

Hi, I made a block that on right click executes a random action. I want In all of them to give an Item to the player that clicked the block. This Items are from other mod so i think the best way would be giving it by ID.

 

Thanks

Twitter: @deantonious || TeamSpeak Server: ts3.deantonious.es

Link to comment
Share on other sites

I've got this

((EntityPlayer)MinecraftServer.getServer().getConfigurationManager().playerEntityList.get(0)).inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.explorerKit));

 

But I cant use the item ID... I've already look into the CommandGive without getting any idea of how to do it...

Twitter: @deantonious || TeamSpeak Server: ts3.deantonious.es

Link to comment
Share on other sites

I tried the mod in my server and I found an error:

It gives you the item, but only in Client Side... When I right click on the inventory, all the items that the mod gave me disapears... How I enable this to be in server side?

package deantonious.blocks;

import java.util.ArrayList;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.SideOnly;

import deantonious.ModPowderCraft;
import net.minecraft.block.material.Material;
import net.minecraft.block.Block;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.server.MinecraftServer;
import net.minecraft.src.ModLoader;
import net.minecraft.world.World;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.common.MinecraftForge;

public class BlockMenaSubsuelo extends Block 
{

        public BlockMenaSubsuelo(int id, Material material) 
        {
                super(id, material);
        }
        
        @Override
    	public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
    	{

            if(par5EntityPlayer.getHeldItem() == null)
    		{
            	if(par1World.isRemote){
            		ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Necesitas un Cincel");
        			
            	}
            	return super.onBlockActivated(par1World, par2, par3, par4, par5EntityPlayer, par6, par7, par8, par9);
    		}

    		if(par5EntityPlayer.getHeldItem().itemID == ModPowderCraft.cincel.itemID)
    		{

    			par5EntityPlayer.getHeldItem().stackSize -= 1; //only if you want to use the item when you do this.
    			if(par1World.isRemote)
    			{
    				par1World.playSound((double)par2 + 0.5D, (double)par3 + 0.1D, (double)par4 + 0.5D, "random.break", 0.3F, 0.5F, blockConstructorCalled);
    				par1World.playSound((double)par2 + 0.5D, (double)par3 + 0.1D, (double)par4 + 0.5D, "random.orb", 0.3F, 0.5F, blockConstructorCalled);
    				
    				int rand = par1World.rand.nextInt(60);

    	                if(rand<=8 && rand>=0){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado una Gema Azul");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.gemaazul));
        	                
    	                }
    	                else if(rand<=16 && rand>={
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado una Gema Roja");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.gemaroja));
        	                
    	                }
    	                else if(rand<=24 && rand>=16){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado una Gema Verde");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.gemaverde));
        	                
    	                }
    	                else if(rand<=32 && rand>=24){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado una Gema Blanca");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.gemablanca));
        	                
    	                }
    	                else if(rand<=40 && rand>=32){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado una Gema Prisma");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.gemaprisma));
        	                
    	                }
    	                else if(rand<=42 && rand>=40){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.ArmorFossilCovered));
    	                
    	                }
    	                else if(rand<=44 && rand>=42){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.ClawFossilCovered));
    	                }
    	                else if(rand<=46 && rand>=44){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.CoverFossilCovered));
    	                }
    	                else if(rand<=48 && rand>=46){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.DomeFossilCovered));
    	                }
    	                else if(rand<=50 && rand>=48){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.HelixFossilCovered));
    	                }
    	                else if(rand<=52 && rand>=50){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.OldAmberCovered));
    	                }
    	                else if(rand<=54 && rand>=52){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.PlumeFossilCovered));
    	                }
    	              
    	                else if(rand<=56 && rand>=54){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.RootFossilCovered));
    	                }
    	                else if(rand<=58 && rand>=56){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.SkullFossilCovered));
    	                }
    	                else if(rand<=60 && rand>=58){
    	                	ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Has encontrado un Hueso");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(Item.bone));
    	                }          
    	                return true;
    	                

    				
    			}
    			
        		par1World.setBlock(par2, par3, par4, Block.dirt.blockID);
    			return false;
    			    			
    		            
    		
    		}

    		return false;
    	}
          

}

Twitter: @deantonious || TeamSpeak Server: ts3.deantonious.es

Link to comment
Share on other sites

Everything works on single player, but when I play MP it gives the items, messages, etc. and then whe you try to take them, all the items disapear... But that only happens in survival mode, in creative mode it works...

Twitter: @deantonious || TeamSpeak Server: ts3.deantonious.es

Link to comment
Share on other sites

Hi

 

What they mean is... you should perform this action on the server side only, not the client side.

 

if(!par1World.isRemote) { 
  // give item code
}

The other bit I suspect might be important is to tell the server to send the updated inventory to the client

 

((EntityPlayerMP)par5EntityPlayer).sendContainerToPlayer(par5EntityPlayer.inventoryContainer);

 

- see BlockCauldron.onBlockActivated

 

-TGG

 

 

 

 

 

Link to comment
Share on other sites

This is the actual code, please tell me what I need to change:

package deantonious.blocks;

import java.util.ArrayList;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import deantonious.ModPowderCraft;
import net.minecraft.block.material.Material;
import net.minecraft.block.Block;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.server.MinecraftServer;
import net.minecraft.src.ModLoader;
import net.minecraft.world.World;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.common.MinecraftForge;

public class BlockMenaSubsuelo extends Block 
{

        public BlockMenaSubsuelo(int id, Material material) 
        {
                super(id, material);
        }
        
        @Override
    	public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
    	{

            if(par5EntityPlayer.getHeldItem() == null)
    		{
            	if(par1World.isRemote){
            		par5EntityPlayer.addChatMessage("Necesitas un Cincel");
        			
            	}
            	return super.onBlockActivated(par1World, par2, par3, par4, par5EntityPlayer, par6, par7, par8, par9);
    		}

    		if(par5EntityPlayer.getHeldItem().itemID == ModPowderCraft.cincel.itemID)
    		{

    			par5EntityPlayer.getHeldItem().stackSize -= 1; //only if you want to use the item when you do this.
    			if(par1World.isRemote)
    			{
    				par1World.playSound((double)par2 + 0.5D, (double)par3 + 0.1D, (double)par4 + 0.5D, "random.break", 0.3F, 0.5F, blockConstructorCalled);
    				par1World.playSound((double)par2 + 0.5D, (double)par3 + 0.1D, (double)par4 + 0.5D, "random.orb", 0.3F, 0.5F, blockConstructorCalled);
    				
    				int rand = par1World.rand.nextInt(60);

    	                if(rand<=8 && rand>=0){
    	                	par5EntityPlayer.addChatMessage("Has encontrado una Gema Azul");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.gemaazul));
        	                
    	                }
    	                else if(rand<=16 && rand>={
    	                	par5EntityPlayer.addChatMessage("Has encontrado una Gema Roja");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.gemaroja));
        	                
    	                }
    	                else if(rand<=24 && rand>=16){
    	                	par5EntityPlayer.addChatMessage("Has encontrado una Gema Verde");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.gemaverde));
        	                
    	                }
    	                else if(rand<=32 && rand>=24){
    	                	par5EntityPlayer.addChatMessage("Has encontrado una Gema Blanca");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.gemablanca));
        	                
    	                }
    	                else if(rand<=40 && rand>=32){
    	                	par5EntityPlayer.addChatMessage("Has encontrado una Gema Prisma");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.gemaprisma));
        	                
    	                }
    	                else if(rand<=42 && rand>=40){
    	                	par5EntityPlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.ArmorFossilCovered));
    	                
    	                }
    	                else if(rand<=44 && rand>=42){
    	                	par5EntityPlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.ClawFossilCovered));
    	                }
    	                else if(rand<=46 && rand>=44){
    	                	par5EntityPlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.CoverFossilCovered));
    	                }
    	                else if(rand<=48 && rand>=46){
    	                	par5EntityPlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.DomeFossilCovered));
    	                }
    	                else if(rand<=50 && rand>=48){
    	                	par5EntityPlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.HelixFossilCovered));
    	                }
    	                else if(rand<=52 && rand>=50){
    	                	par5EntityPlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.OldAmberCovered));
    	                }
    	                else if(rand<=54 && rand>=52){
    	                	par5EntityPlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.PlumeFossilCovered));
    	                }
    	              
    	                else if(rand<=56 && rand>=54){
    	                	par5EntityPlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.RootFossilCovered));
    	                }
    	                else if(rand<=58 && rand>=56){
    	                	par5EntityPlayer.addChatMessage("Has encontrado un Fosil Cubierto");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ModPowderCraft.SkullFossilCovered));
    	                }
    	                else if(rand<=60 && rand>=58){
    	                	par5EntityPlayer.addChatMessage("Has encontrado un Hueso");
    	                	par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(Item.bone));
    	                }          
    	                return true;
    				
    			}
    			
        		par1World.setBlock(par2, par3, par4, Block.dirt.blockID);
    			return false;	            
    		
    		}

    		return false;
    	}
          

}

Twitter: @deantonious || TeamSpeak Server: ts3.deantonious.es

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.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
    • It is an issue with quark - update it to this build: https://www.curseforge.com/minecraft/mc-mods/quark/files/3642325
    • Remove Instant Massive Structures Mod from your server     Add new crash-reports with sites like https://paste.ee/  
    • Update your drivers: https://www.amd.com/en/support/graphics/amd-radeon-r9-series/amd-radeon-r9-200-series/amd-radeon-r9-280x
  • Topics

×
×
  • Create New...

Important Information

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