Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Damaging an Item in recipes


MostafaSabry55
 Share

Recommended Posts

Hello, I'm back with another recipe and data gen problem, so basically I have a hammer item, and 2 ingots, they turn into plates (of their type), I've done that all ready and it works fine, now my problem is that the hammer doesn't seem to get damaged (because I got no idea how), here's my code :

HammerItem: (just incase I've done something wrong here!)

public class HammerItem extends Item {

    private static final Random RAND = new Random();

	public HammerItem() {
		super(new Item.Properties()
				.group(MorePlates.ITEMGROUP)
                .maxStackSize(1)
                .setNoRepair());
	}

	@Override
    public boolean hasContainerItem(ItemStack stack) {
        return true;
    }

    @Override
    public int getMaxDamage(ItemStack stack) {
        return Config.GENERAL.DURABILITY_HAMMER.get();
    }

    @Override
    public int getDamage(ItemStack stack) {
        return !stack.hasTag() ? getMaxDamage(stack) : stack.getOrCreateTag().getInt("Damage");
    }

    @Nonnull
    @Override
    public ItemStack getContainerItem(@Nonnull ItemStack stack) {
    	ItemStack container = stack.copy();
		if(container.attemptDamageItem(1, RAND, null)) {
			return ItemStack.EMPTY;
		} else {
			return container;
		}
    }
    
    @Override
	public boolean isEnchantable(@Nonnull ItemStack stack) {
		return true;
	}

    @Override
    public int getItemEnchantability() {
        return 14;
    }

    @Override
    public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) {
        return enchantment == Enchantments.UNBREAKING || enchantment == Enchantments.MENDING;
    }
}

 

And here's my recipe bit

Item PLATE = ForgeRegistries.ITEMS.getValue(new ResourceLocation(MorePlates.MODID, material.toString() + "_plate"));
Ingredient INGOT = Ingredient.fromTag(ItemTags.createOptional(material.getTag()));

ConditionalRecipe.builder()                  
.addCondition(        	
and(
    new BooleanCondition(() -> Config.GENERAL.PLATE_RECIPES.get(), BooleanCondition.Type.ENABLE_PLATE.get()),
    itemExists(MorePlates.MODID, material.toString() + "_plate")
   )
)
.addRecipe(
     ShapedRecipeBuilder.shapedRecipe(PLATE)
                        .patternLine("H")
                        .patternLine("I")
                        .patternLine("I")
                        .key('H', ForgeRegistries.ITEMS.getValue(new ResourceLocation(MorePlates.MODID, "hammer")))
                        .key('I', INGOT)
                        .setGroup("")
        	            .addCriterion("has_item", hasItem(ForgeRegistries.ITEMS.getValue(new ResourceLocation(MorePlates.MODID, "hammer"))))
                        ::build
)
.build(consumer, new ResourceLocation(MorePlates.MODID, material.toString() + "_plate"));

Thanks in regards!

Link to comment
Share on other sites

So from my understanding is that attempDamageItem is deprecated, and it should be moreover like this?

ItemStack container = stack.copy();
container.damageItem() //didnt check the pars yet
return container;

Also thanks for the Consumer bit

 

By the way, I am pretty sure this is also a problem.. (from my original post in the ShapedRecipeBuilder text)

.key('H', ForgeRegistries.ITEMS.getValue(new ResourceLocation(MorePlates.MODID, "hammer")))

I should be damaging the Item here, but how do I exactly make it do that? It cannot accept ItemStacks

Edited by MostafaSabry55
Link to comment
Share on other sites

45 minutes ago, MostafaSabry55 said:

So from my understanding is that attempDamageItem is deprecated, and it should be moreover like this?

Not deprecated iirc, but it's used within damageItem which already handles everything

45 minutes ago, MostafaSabry55 said:

By the way, I am pretty sure this is also a problem.. (from my original post in the ShapedRecipeBuilder text)

Wouldn't matter, item damage should be handled on the container item itself just like you have done. So, where you are doing it is where it should be done if I'm not mistaken.

  • Thanks 1
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
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.

 Share



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • update Forge to the latest version and do not put your server on OneDrive
    • It occurred to me. Can I get the data I want by getting the parameters of the event instantiation.
    • I just checked the description of "LivingHurtEvent" and he tells me that the event does not return results and if I instantiate the event/class and then call his method, I can't get the return value (amount,source). Do I have to get the return value I want in some other way. Here is the code for the "LivingHurtEvent" event /* * Copyright (c) Forge Development LLC and contributors * SPDX-License-Identifier: LGPL-2.1-only */ package net.minecraftforge.event.entity.living; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.LivingEntity; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.Cancelable; /** * LivingHurtEvent is fired when an Entity is set to be hurt. <br> * This event is fired whenever an Entity is hurt in * {@code LivingEntity#actuallyHurt(DamageSource, float)} and * {@code Player#actuallyHurt(DamageSource, float)}.<br> * <br> * This event is fired via the {@link ForgeHooks#onLivingHurt(LivingEntity, DamageSource, float)}.<br> * <br> * {@link #source} contains the DamageSource that caused this Entity to be hurt. <br> * {@link #amount} contains the amount of damage dealt to the Entity that was hurt. <br> * <br> * This event is {@link Cancelable}.<br> * If this event is canceled, the Entity is not hurt.<br> * <br> * This event does not have a result. {@link HasResult}<br> * <br> * This event is fired on the {@link MinecraftForge#EVENT_BUS}. * @see LivingDamageEvent **/ @net.minecraftforge.eventbus.api.Cancelable public class LivingHurtEvent extends LivingEvent { private final DamageSource source; private float amount; public LivingHurtEvent(LivingEntity entity, DamageSource source, float amount) { super(entity); this.source = source; this.amount = amount; } public DamageSource getSource() { return source; } public float getAmount() { return amount; } public void setAmount(float amount) { this.amount = amount; } } I'm wondering if the 'forge' event is only used as a 'forge' listener and not for other purposes. That is, after these events are instantiated, the method is called and cannot provide any return value, or after instantiation, the method is called and cannot change the data, because the events/classes are only used to listen to minecraft/forge.
    • Posted 21 hours ago C:\Users\trodd\OneDrive\Desktop\server for 35>java -Xmx5G -Xms5G -jar forge-1.16.5-36.2.2.jar nogui 2022-05-27 09:49:55,394 main WARN Advanced terminal features are not available in this environment [09:49:55] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher running: args [--gameDir, ., --launchTarget, fmlserver, --fml.forgeVersion, 36.2.2, --fml.mcpVersion, 20210115.111550, --fml.mcVersion, 1.16.5, --fml.forgeGroup, net.minecraftforge, nogui] [09:49:55] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher 8.0.9+86+master.3cf110c starting: java version 1.8.0_333 by Oracle Corporation [09:49:56] [main/INFO] [ne.mi.fm.lo.FixSSL/CORE]: Added Lets Encrypt root certificates as additional trust [09:49:56] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.2 Source=file:/C:/Users/trodd/OneDrive/Desktop/server%20for%2035/libraries/org/spongepowered/mixin/0.8.2/mixin-0.8.2.jar Service=ModLauncher Env=SERVER [09:49:57] [main/INFO] [STDERR/]: [org.antlr.v4.runtime.ConsoleErrorListener:syntaxError:38]: line 1:0 token recognition error at: '~' Exception in thread "main" [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: java.lang.NoSuchMethodError: sun.security.util.ManifestEntryVerifier.<init>(Ljava/util/jar/Manifest;)V [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.SecureJarHandler.createCodeSource(SecureJarHandler.java:66) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.TransformingClassLoader$DelegatedClassLoader.findClass(TransformingClassLoader.java:275) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:136) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:98) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at java.lang.ClassLoader.loadClass(Unknown Source) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at java.lang.Class.forName0(Native Method) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at java.lang.Class.forName(Unknown Source) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at org.spongepowered.asm.service.modlauncher.ModLauncherClassProvider.findClass(ModLauncherClassProvider.java:57) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at org.spongepowered.asm.launch.platform.MixinConnectorManager.loadConnectors(MixinConnectorManager.java:71) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at org.spongepowered.asm.launch.platform.MixinConnectorManager.inject(MixinConnectorManager.java:60) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at org.spongepowered.asm.launch.platform.MixinPlatformManager.inject(MixinPlatformManager.java:197) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at org.spongepowered.asm.launch.MixinBootstrap.inject(MixinBootstrap.java:190) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at org.spongepowered.asm.launch.MixinLaunchPlugin.initializeLaunch(MixinLaunchPlugin.java:196) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.LaunchPluginHandler.lambda$announceLaunch$9(LaunchPluginHandler.java:97) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at java.util.HashMap.forEach(Unknown Source) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.LaunchPluginHandler.announceLaunch(LaunchPluginHandler.java:97) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:52) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.Launcher.run(Launcher.java:82) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at cpw.mods.modlauncher.Launcher.main(Launcher.java:66) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at net.minecraftforge.server.ServerMain$Runner.runLauncher(ServerMain.java:63) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at net.minecraftforge.server.ServerMain$Runner.access$100(ServerMain.java:60) [09:49:57] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:         at net.minecraftforge.server.ServerMain.main(ServerMain.java:57) C:\Users\trodd\OneDrive\Desktop\server for 35>PAUSE Press any key to continue . . .
    • You can, but it won't do anything useful. The event instance is already given to you as a parameter.
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.