Jump to content

make colored glass drop itself


tminor1

Recommended Posts

Hey I am working on a better glass drop mod and I need help with the colored glass. I can get it to work with the white glass block because it is the first stained_glass block so if in my code I have stained_glass it will go for the white one but I also need it to drop the other colors to but I don't know how to add the damage value of the glass block or the color of the glass block so that when you mine a a glass block that is not white it will drop itself.

package net.glassDrops.mod;

import net.minecraft.block.BlockGlass;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.event.world.BlockEvent.BreakEvent;

public class colorDrop0  {

@net.minecraftforge.fml.common.eventhandler.SubscribeEvent
public void blockBreak(BreakEvent evt){

	if (evt.state.getBlock() == Blocks.stained_glass){
		EntityItem item = new EntityItem(evt.world, evt.pos.getX(), evt.pos.getY(), evt.pos.getZ(), new ItemStack(Item.getItemFromBlock(Blocks.stained_glass)));
		EntityPlayer player = evt.getPlayer();

		if(!player.capabilities.isCreativeMode) evt.world.spawnEntityInWorld(item);
	}

}}

Link to comment
Share on other sites

You have to set the damage (metadata) of the colored glass in the ItemStack.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Link to comment
Share on other sites

Yes, because you have to pass it as a parameter. The first one is the Item/Block, the second the amount to be dropped (defaults to 1), and the third the damage/metadata.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Link to comment
Share on other sites

Don't add it as a parameter in the

getItemFromBlock()

method, but as an parameter of the

ItemStack

constructor.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Link to comment
Share on other sites

Alright now I can make it drop other colors then the white but that is only part of it I now I need to make to get what color of the glass you just mined so it knows what color to drop.

package net.glassDrops.mod;

import net.minecraft.block.BlockGlass;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.event.world.BlockEvent.BreakEvent;

public class colorDrop0  {

@net.minecraftforge.fml.common.eventhandler.SubscribeEvent
public void blockBreak(BreakEvent evt){

	if (evt.state.getBlock() == Blocks.stained_glass){
		EntityItem item = new EntityItem(evt.world, evt.pos.getX(), evt.pos.getY(), evt.pos.getZ(), new ItemStack(Item.getItemFromBlock(Blocks.stained_glass),1, 1));
		EntityPlayer player = evt.getPlayer();

		if(!player.capabilities.isCreativeMode) evt.world.spawnEntityInWorld(item);
	}

}}

Link to comment
Share on other sites

+ You dont need to spawn item you can just do event.drops.add(youritemstack)

 

EDIT : this code works fine for me :)

@SubscribeEvent
public void harvestDrops (HarvestDropsEvent event) {
	if(event.block.equals(Blocks.stained_glass)) {
		event.drops.add(new ItemStack(Blocks.stained_glass,1,event.blockMetadata));
	}
}

I'm beginner in java and in minecraft modding.

Please be specific.

Any code examples are appreciated.

Sorry for my english i'm from Czech republic.

Please hit that thank you button if i helped :)

Link to comment
Share on other sites

KakesRevenge I tried your code and it didn't work for me. diesieben07, how do I add what you gave me to my code? What I meant is my plan was just to create a new event for every color glass block but like say the event for the orange one would see that you mined an orange one then drop an orange glass block and it would  do that in all the events for all the glass blocks. Not saying I can't do it your way I just don't know how to add that in then drop the block with the Metadata of the one you mined.

Link to comment
Share on other sites

Am I doing this right?

package net.glassDrops.mod;

import net.minecraft.block.BlockGlass;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.event.world.BlockEvent.BreakEvent;

public class colorDrop0  {

@net.minecraftforge.fml.common.eventhandler.SubscribeEvent
public void blockBreak(BreakEvent evt){

	if (evt.state.getBlock() == Blocks.stained_glass){
		EntityItem item = new EntityItem(evt.world, evt.pos.getX(), evt.pos.getY(), evt.pos.getZ(), new ItemStack(Item.getItemFromBlock(Blocks.stained_glass((EnumDyeColor) evt.state.getProperty(BlockGlass.COLOR)).getMetadata)));
		EntityPlayer player = evt.getPlayer();

		if(!player.capabilities.isCreativeMode) evt.world.spawnEntityInWorld(item);
	}

}}

Link to comment
Share on other sites

Don't add it as a parameter in the

getItemFromBlock()

method, but as an parameter of the

ItemStack

constructor.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Link to comment
Share on other sites

Show what you have tried.

 

Also, without payment, nobody is gonna write code for you because you can't code it yourself. And from this topic alone I can tell you that you do not know enough Java to mod Minecraft. So learn Java, and then come back to modding.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Link to comment
Share on other sites

After some playing around I got this.

package net.glassDrops.mod;

import net.minecraft.block.BlockGlass;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.event.world.BlockEvent.BreakEvent;

public class colorDrop0  {

@net.minecraftforge.fml.common.eventhandler.SubscribeEvent
public void blockBreak(BreakEvent evt){

	if (evt.state.getBlock() == Blocks.stained_glass){
		EntityItem item = new EntityItem(evt.world, evt.pos.getX(), evt.pos.getY(), evt.pos.getZ(), new ItemStack(((EnumDyeColor) evt.state.getProperty(BlockGlass.COLOR)).getMetadata));
		EntityPlayer player = evt.getPlayer();

		if(!player.capabilities.isCreativeMode) evt.world.spawnEntityInWorld(item);
	}

But it keeps underlining COLOR and getMetadata every time. That is why I asked someone to show me how to add it to my code I am not a complete idiot. Also about learning java then come back to modding even someone who is a master in java can not be able to make a mod because one they need to know how the game they want to mod works and two if you need to use an API like forge to make your mod you need to know how everything with the API works as well and if you have no idea how forge handles everything even a master of java will have to have a lot of help with making a mod for minecraft.

 

P.S I am mostly making this(and other mods that I have made)for fun it is not like I am going to use it to make millions of dollars off it, and I do want to learn java but for now I am unable to do so but when I do get the ability to trust me I will.

Link to comment
Share on other sites

Hey, look at that. I got it to work by doing this.

EntityItem item = new EntityItem(evt.world, evt.pos.getX(), evt.pos.getY(), evt.pos.getZ(), new ItemStack(Item.getItemFromBlock(Blocks.stained_glass),1,((EnumDyeColor) evt.state.getValue(BlockStainedGlass.COLOR)).getMetadata()));

First I changed it back to

ItemStack(Item.getItemFromBlock(Blocks.stained_glass),1,1))

then added the other part where that last one was. Then, I added an () to the end of getMetadata changed BlockGlass to BlockStaindGlass then if finally took

COLOR

Then, the

.getProperty

needed to be changed to

.getValue

and guess what, it worked. So thanks for semi helping me.

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



×
×
  • Create New...

Important Information

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