Topic category: Troubleshooting, bugs, and solutions
I am trying to damage items upon right click but it's not working... Here is the code and the gradle log:
Code:
package mod.mcreator;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.common.util.EnumHelper;
import net.minecraft.world.World;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.EnumHand;
import net.minecraft.util.ActionResult;
import net.minecraft.server.MinecraftServer;
import net.minecraft.item.ItemSword;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Item;
import net.minecraft.init.Blocks;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.effect.EntityLightningBolt;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.Minecraft;
import java.util.Set;
import java.util.Random;
import java.util.HashMap;
public class mcreator_voidSword {
public mcreator_voidSword() {
}
public static Item block;
public static Object instance;
public void load(FMLInitializationEvent event) {
ItemStack stack = new ItemStack(block, 1);
if (event.getSide() == Side.CLIENT)
Minecraft.getMinecraft().getRenderItem().getItemModelMesher()
.register(block, 0, new ModelResourceLocation("testenvironmentmod:voidsword", "inventory"));
GameRegistry.addRecipe(stack,
new Object[]{"012", "345", "678", Character.valueOf('0'), mcreator_netherStarBlock.block, Character.valueOf('1'),
mcreator_voidBlock.block, Character.valueOf('2'), mcreator_netherStarBlock.block, Character.valueOf('3'),
mcreator_netherStarBlock.block, Character.valueOf('4'), mcreator_voidBlock.block, Character.valueOf('5'),
mcreator_netherStarBlock.block, Character.valueOf('6'), mcreator_netherStarBlock.block, Character.valueOf('7'),
Blocks.OBSIDIAN, Character.valueOf('8'), mcreator_netherStarBlock.block,});
}
public void generateNether(World world, Random random, int chunkX, int chunkZ) {
}
public void generateSurface(World world, Random random, int chunkX, int chunkZ) {
}
public int addFuel(ItemStack fuel) {
return 0;
}
public void serverLoad(FMLServerStartingEvent event) {
}
public void preInit(FMLPreInitializationEvent event) {
}
public void registerRenderers() {
}
static {
Item.ToolMaterial enumt = EnumHelper.addToolMaterial("VOIDSWORD", 1, 1000, 4F, 20, 2);
block = (Item) (new ItemSword(enumt) {
public Set<String> getToolClasses(ItemStack stack) {
HashMap<String, Integer> ret = new HashMap<String, Integer>();
ret.put("sword", 1);
return ret.keySet();
}
@Override
public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer entity, EnumHand hand) {
float var4 = 1.0F;
ActionResult<ItemStack> ar = super.onItemRightClick(world, entity, hand);
int i = (int) (entity.prevPosX + (entity.posX - entity.prevPosX) * (double) var4);
int j = (int) (entity.prevPosY + (entity.posY - entity.prevPosY) * (double) var4 + 1.62D);
int k = (int) (entity.prevPosZ + (entity.posZ - entity.prevPosZ) * (double) var4);
if (true) {
if (entity instanceof EntityPlayerMP) {
MinecraftServer minecraftserver = FMLCommonHandler.instance().getMinecraftServerInstance();
if (minecraftserver != null)
minecraftserver.getCommandManager().executeCommand((EntityPlayerMP) entity, "gamerule sendCommandFeedback false");
}
}
if (true) {
if (entity instanceof EntityPlayerMP) {
MinecraftServer minecraftserver = FMLCommonHandler.instance().getMinecraftServerInstance();
if (minecraftserver != null)
minecraftserver.getCommandManager().executeCommand((EntityPlayerMP) entity, "scoreboard players tag @a add Safe");
}
}
if (true) {
if (entity instanceof EntityPlayerMP) {
MinecraftServer minecraftserver = FMLCommonHandler.instance().getMinecraftServerInstance();
if (minecraftserver != null)
minecraftserver.getCommandManager().executeCommand((EntityPlayerMP) entity,
"scoreboard players tag @e[type=item] add Safe");
}
}
if (true) {
if (entity instanceof EntityPlayerMP) {
MinecraftServer minecraftserver = FMLCommonHandler.instance().getMinecraftServerInstance();
if (minecraftserver != null)
minecraftserver.getCommandManager().executeCommand((EntityPlayerMP) entity, "kill @e[tag=!Safe,r=10]");
}
}
if (true) {
world.spawnParticle(EnumParticleTypes.PORTAL, (double) i, (double) 1, (double) k, 2.0D, 2.0D, 2.0D);
}
if (true) {
itemstack.damageItem(1, entity);
}
return ar;
}
@Override
public void onCreated(ItemStack itemstack, World world, EntityPlayer entity) {
super.onCreated(itemstack, world, entity);
float var4 = 1.0F;
int i = (int) (entity.prevPosX + (entity.posX - entity.prevPosX) * (double) var4);
int j = (int) (entity.prevPosY + (entity.posY - entity.prevPosY) * (double) var4 + 1.62D);
int k = (int) (entity.prevPosZ + (entity.posZ - entity.prevPosZ) * (double) var4);
if (true) {
world.spawnEntity(new EntityLightningBolt(world, i, j, k, false));
}
}
}).setUnlocalizedName("VoidSword");
block.setRegistryName("VoidSword");
GameRegistry.register(block);
block.setCreativeTab(mcreator_voidTab.tab);
}
}
Gradle log:
warning: [options] bootstrap class path not set in conjunction with -source 1.6
C:\Pylo\MCreator175\forge\build\sources\main\java\mod\mcreator\mcreator_voidSword.java:126: error: cannot find symbol
itemstack.damageItem(1, entity);
^
symbol: variable itemstack
C:\Pylo\MCreator175\forge\build\sources\main\java\mod\mcreator\mcreator_voidPickaxe.java:107: error: cannot find symbol
itemstack.damageItem(1, entity);
^
symbol: variable itemstack
C:\Pylo\MCreator175\forge\build\sources\main\java\mod\mcreator\mcreator_voidBreaker.java:89: error: cannot find symbol
itemstack.damageItem(1, entity);
^
symbol: variable itemstack
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
3 errors
1 warning
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
There are other tools I am trying to damage too as you can see but they all have the same problem...
Let's say you had a sword that you wanted to have lose durabilty when every you hit,
You would do this:
Add a tool type, name it, add a texture, name it change the tool type to "Sword" Change the other stuff to your perfernce. we're gonna wanna change the number of uses to a high number for me i put 900 (Higher then diamond) then click next.
then do the rest as you would/want.
When ever you hit a mob or break a block you lose durabilty a.k.a the tool is taking damge.
This works with ANY tool.
@#1 That's not what I am trying to do. I want the tool to DAMAGE on RIGHT click. I found out how to make tools like that already I just want it to damage upon RIGHT click.
@#1.1 I am having the same problem also and I thought I would find the answer to it here but I guess no one has answered it yet. It's kind of weird that they put things into mcreator that don't even function properly. Please someone help us!
What type of damage are we talking, from what you said I think what you mean is when you right click you want it to damage the durability of the item, or are we talking damaging whatever you are targeted at?
@#2 We want to have the tool lose durability on right click. I know when I do right click in air->damage item, finish it and let the gradle run I get an error; here is my code for the sword i was working on:
@#2.1 The solution is to add "ItemStack itemstack," just before "World, world...." in the itemOnRightClick event but doing so, it give you "@Override" error.
Removing @Override won't let you get any error, but right click event won't work...
Need help please...
@#2.1 The solution is to use getHeldItemMainHand() instead of itemstack and the item will lose durability (thanks to Nuparu00)
getHeldItemMainHand() is a method, you have to keep the brackets. Also, it is method in EntityPlayer so you need to call it from the player instance (EntityPlayer.getHeldItemMainHand(), instead of EntityPlayer use your EntityPlayer instance, in your case - entity)
@#4
Is this correct? If so, it still doesn't work as it game up with another error message. Here's the code: import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.common.event.FMLServerStartingEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.common.util.EnumHelper; import net.minecraft.world.World; import net.minecraft.util.EnumHand; import net.minecraft.util.ActionResult; import net.minecraft.item.ItemSword; import net.minecraft.item.ItemStack; import net.minecraft.item.Item; import net.minecraft.init.Items; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.Minecraft; import java.util.Set; import java.util.Random; import java.util.HashMap; public class mcreator_sugarObsidianSword { public mcreator_sugarObsidianSword() { } public static Item block; public static Object instance; public void load(FMLInitializationEvent event) { ItemStack stack = new ItemStack(block, 1); if (event.getSide() == Side.CLIENT) Minecraft.getMinecraft().getRenderItem().getItemModelMesher() .register(block, 0, new ModelResourceLocation("testenvironmentmod:sugarobsidiansword", "inventory")); GameRegistry.addRecipe(stack, new Object[]{"X1X", "X4X", "X7X", Character.valueOf('1'), mcreator_sugarObsidianAlloy.block, Character.valueOf('4'), mcreator_sugarObsidianAlloy.block, Character.valueOf('7'), Items.STICK,}); } public void generateNether(World world, Random random, int chunkX, int chunkZ) { } public void generateSurface(World world, Random random, int chunkX, int chunkZ) { } public int addFuel(ItemStack fuel) { return 0; } public void serverLoad(FMLServerStartingEvent event) { } public void preInit(FMLPreInitializationEvent event) { } public void registerRenderers() { } static { Item.ToolMaterial enumt = EnumHelper.addToolMaterial("SUGAROBSIDIANSWORD", 1, 100, 4F, 5, 2); block = (Item) (new ItemSword(enumt) { public Set<String> getToolClasses(ItemStack stack) { HashMap<String, Integer> ret = new HashMap<String, Integer>(); ret.put("sword", 1); return ret.keySet(); } @Override public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer entity, EnumHand hand) { float var4 = 1.0F; ActionResult<ItemStack> ar = super.onItemRightClick(world, entity, hand); int i = (int) (entity.prevPosX + (entity.posX - entity.prevPosX) * (double) var4); int j = (int) (entity.prevPosY + (entity.posY - entity.prevPosY) * (double) var4 + 1.62D); int k = (int) (entity.prevPosZ + (entity.posZ - entity.prevPosZ) * (double) var4); if (true) { entity.getHeldItemMainHand().damageItem(10, entity); } return ar; } }).setUnlocalizedName("SugarObsidianSword"); block.setRegistryName("SugarObsidianSword"); GameRegistry.register(block); block.setCreativeTab(CreativeTabs.COMBAT); } }@#4.1 Why you're not posting the error too, it would be faster for us D:
Btw, you have to set entity as instance of EntityPlayer
First of all, sorry for not posting the error log; didn't think about it. So here that is:
warning: [options] bootstrap class path not set in conjunction with -source 1.6 C:\Pylo\MCreator175\forge\build\sources\main\java\mod\mcreator\mcreator_sugarObsidi3anSword.java:82: error: cannot find symbol itemstack.damageItem(10, entity); ^ symbol: variable itemstack Note: C:\Pylo\MCreator175\forge\build\sources\main\java\mod\mcreator\mcreator_compactedLeaves.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. 1 error 1 warning FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileJava'. > Compilation failed; see the compiler error output for details. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. I am not very familiar with code so I don't quite know what you mean by setting the instance as EntityPlayer but I am pretty sure the log will help you out.Hmm, the website cuts off the part of text at the right-most side but here is the most important part of code after su at the top: sugarObsidianSword.java:82: the other part is just the item name so it is not as important: compactedLeaves.java.
Hope this helps!