From e466deeeda37b41c1084adf8175e06685325bc5a Mon Sep 17 00:00:00 2001 From: IM23a-cernik Date: Tue, 20 May 2025 10:49:35 +0200 Subject: [PATCH] Add Stalinium Axe and Shovel with custom functionalities Signed-off-by: IM23a-cernik --- .../datagen/ModItemModelProvider.java | 9 +-- .../stalinium/datagen/ModItemTagProvider.java | 7 ++ .../stalinium/item/ModCreativeModeTabs.java | 1 + .../krituximon/stalinium/item/ModItems.java | 12 +++- .../krituximon/stalinium/item/ModTiers.java | 2 +- .../stalinium/item/StaliniumAxeItem.java | 65 ++++++++++++++++++ .../stalinium/item/StaliniumShovelItem.java | 51 ++++++++++++++ .../stalinium/item/StaliniumSwordItem.java | 17 ++++- .../assets/stalinium/lang/en_us.json | 4 +- .../textures/item/stalinium_shovel.png | Bin 0 -> 277 bytes 10 files changed, 157 insertions(+), 11 deletions(-) create mode 100644 src/main/java/net/krituximon/stalinium/item/StaliniumAxeItem.java create mode 100644 src/main/java/net/krituximon/stalinium/item/StaliniumShovelItem.java create mode 100644 src/main/resources/assets/stalinium/textures/item/stalinium_shovel.png diff --git a/src/main/java/net/krituximon/stalinium/datagen/ModItemModelProvider.java b/src/main/java/net/krituximon/stalinium/datagen/ModItemModelProvider.java index 0bc0782..c9b7f84 100644 --- a/src/main/java/net/krituximon/stalinium/datagen/ModItemModelProvider.java +++ b/src/main/java/net/krituximon/stalinium/datagen/ModItemModelProvider.java @@ -16,11 +16,8 @@ public class ModItemModelProvider extends ItemModelProvider { basicItem(ModItems.STALINIUM_INGOT.get()); basicItem(ModItems.SOVIET_ANTHEM_MUSIC_DISC.get()); basicItem(ModItems.STALINIUM_NUGGET.get()); - singleTexture( - "stalinium_sword", - mcLoc("item/handheld"), - "layer0", - modLoc("item/stalinium_sword") - ); + handheldItem(ModItems.STALINIUM_SWORD.get()); + handheldItem(ModItems.STALINIUM_AXE.get()); + handheldItem(ModItems.STALINIUM_SHOVEL.get()); } } diff --git a/src/main/java/net/krituximon/stalinium/datagen/ModItemTagProvider.java b/src/main/java/net/krituximon/stalinium/datagen/ModItemTagProvider.java index 55a0e70..d91f276 100644 --- a/src/main/java/net/krituximon/stalinium/datagen/ModItemTagProvider.java +++ b/src/main/java/net/krituximon/stalinium/datagen/ModItemTagProvider.java @@ -5,6 +5,7 @@ import net.krituximon.stalinium.Stalinium; import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; import net.minecraft.data.tags.ItemTagsProvider; +import net.minecraft.tags.ItemTags; import net.minecraft.world.level.block.Block; import net.neoforged.neoforge.common.Tags; import net.neoforged.neoforge.common.data.ExistingFileHelper; @@ -25,5 +26,11 @@ public class ModItemTagProvider extends ItemTagsProvider { .add(ModItems.STALINIUM_INGOT.get()); this.tag(Tags.Items.NUGGETS) .add(ModItems.STALINIUM_NUGGET.get()); + this.tag(ItemTags.SWORDS) + .add(ModItems.STALINIUM_SWORD.get()); + this.tag(ItemTags.AXES) + .add(ModItems.STALINIUM_AXE.get()); + this.tag(ItemTags.SHOVELS) + .add(ModItems.STALINIUM_SHOVEL.get()); } } diff --git a/src/main/java/net/krituximon/stalinium/item/ModCreativeModeTabs.java b/src/main/java/net/krituximon/stalinium/item/ModCreativeModeTabs.java index cd7caa1..5816c07 100644 --- a/src/main/java/net/krituximon/stalinium/item/ModCreativeModeTabs.java +++ b/src/main/java/net/krituximon/stalinium/item/ModCreativeModeTabs.java @@ -27,6 +27,7 @@ public class ModCreativeModeTabs { output.accept(ModBlocks.COMPRESSED_BEDROCK.get()); output.accept(ModBlocks.STALINIUM_PRESS.get()); output.accept(ModItems.STALINIUM_SWORD.get()); + output.accept(ModItems.STALINIUM_AXE.get()); }).build()); public static void register(IEventBus eventBus) { diff --git a/src/main/java/net/krituximon/stalinium/item/ModItems.java b/src/main/java/net/krituximon/stalinium/item/ModItems.java index 15e7d2e..9b1e651 100644 --- a/src/main/java/net/krituximon/stalinium/item/ModItems.java +++ b/src/main/java/net/krituximon/stalinium/item/ModItems.java @@ -2,7 +2,9 @@ package net.krituximon.stalinium.item; import net.krituximon.stalinium.Stalinium; import net.krituximon.stalinium.sound.ModSounds; +import net.minecraft.world.item.AxeItem; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ShovelItem; import net.minecraft.world.item.SwordItem; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredHolder; @@ -23,7 +25,15 @@ public class ModItems { public static final DeferredItem STALINIUM_SWORD = ITEMS.register("stalinium_sword", () -> new StaliniumSwordItem(ModTiers.STALINIUM, new Item.Properties() - .attributes(SwordItem.createAttributes(ModTiers.STALINIUM, 8, -2.75f)))); + .attributes(SwordItem.createAttributes(ModTiers.STALINIUM, 3, -2.4f)))); + + public static final DeferredItem STALINIUM_AXE = ITEMS.register("stalinium_axe", + () -> new StaliniumAxeItem(ModTiers.STALINIUM, new Item.Properties() + .attributes(AxeItem.createAttributes(ModTiers.STALINIUM, 5, -3.0f)))); + + public static final DeferredItem STALINIUM_SHOVEL = ITEMS.register("stalinium_shovel", + () -> new StaliniumShovelItem(ModTiers.STALINIUM, new Item.Properties() + .attributes(AxeItem.createAttributes(ModTiers.STALINIUM, 1.5f, -3.0f)))); public static void register(IEventBus eventBus) { ITEMS.register(eventBus); diff --git a/src/main/java/net/krituximon/stalinium/item/ModTiers.java b/src/main/java/net/krituximon/stalinium/item/ModTiers.java index 92c6d9f..00991e5 100644 --- a/src/main/java/net/krituximon/stalinium/item/ModTiers.java +++ b/src/main/java/net/krituximon/stalinium/item/ModTiers.java @@ -6,5 +6,5 @@ import net.minecraft.world.item.crafting.Ingredient; import net.neoforged.neoforge.common.SimpleTier; public class ModTiers { - public static final Tier STALINIUM = new SimpleTier(BlockTags.INCORRECT_FOR_NETHERITE_TOOL, 4096, 1f, 1f, 25, () -> Ingredient.of(ModItems.STALINIUM_INGOT.get(), ModItems.STALINIUM_NUGGET.get())); + public static final Tier STALINIUM = new SimpleTier(BlockTags.INCORRECT_FOR_NETHERITE_TOOL, 4096, 11f, 6f, 25, () -> Ingredient.of(ModItems.STALINIUM_INGOT.get(), ModItems.STALINIUM_NUGGET.get())); } diff --git a/src/main/java/net/krituximon/stalinium/item/StaliniumAxeItem.java b/src/main/java/net/krituximon/stalinium/item/StaliniumAxeItem.java new file mode 100644 index 0000000..f4ee13e --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/item/StaliniumAxeItem.java @@ -0,0 +1,65 @@ +package net.krituximon.stalinium.item; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.AxeItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Tier; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.List; + +public class StaliniumAxeItem extends AxeItem { + public StaliniumAxeItem(Tier tier, Properties properties) { + super(tier, properties); + } + + @Override + public boolean mineBlock(ItemStack stack, Level level, BlockState state, BlockPos pos, LivingEntity miningEntity) { + if (!level.isClientSide) { + MobEffectInstance haste = new MobEffectInstance(MobEffects.DIG_SPEED, 100, 0, false, true); + miningEntity.addEffect(haste); + Level world = miningEntity.getCommandSenderWorld(); + var box = miningEntity.getBoundingBox().inflate(10.0); + world.getEntitiesOfClass(LivingEntity.class, box, p -> p instanceof LivingEntity).forEach( + p -> p.addEffect(haste) + ); + } + return true; + } + + @Override + public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { + if (!attacker.getCommandSenderWorld().isClientSide) { + MobEffectInstance strength = new MobEffectInstance(MobEffects.DAMAGE_BOOST, 100, 0, false, true); + attacker.addEffect(strength); + Level world = attacker.getCommandSenderWorld(); + var box = attacker.getBoundingBox().inflate(5.0); + List nearby = world.getEntitiesOfClass(Player.class, box, p -> p instanceof ServerPlayer); + for (Player p : nearby) { + p.addEffect(strength); + } + } + return true; + } + + @Override + public int getMaxDamage(ItemStack stack) { + return 0; + } + + @Override + public boolean isDamageable(ItemStack stack) { + return false; + } + + @Override + public boolean isDamaged(ItemStack stack) { + return false; + } +} diff --git a/src/main/java/net/krituximon/stalinium/item/StaliniumShovelItem.java b/src/main/java/net/krituximon/stalinium/item/StaliniumShovelItem.java new file mode 100644 index 0000000..da3000f --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/item/StaliniumShovelItem.java @@ -0,0 +1,51 @@ +package net.krituximon.stalinium.item; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.AxeItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ShovelItem; +import net.minecraft.world.item.Tier; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.List; + +public class StaliniumShovelItem extends ShovelItem { + public StaliniumShovelItem(Tier tier, Properties properties) { + super(tier, properties); + } + + @Override + public boolean mineBlock(ItemStack stack, Level level, BlockState state, BlockPos pos, LivingEntity miningEntity) { + if (!level.isClientSide) { + MobEffectInstance haste = new MobEffectInstance(MobEffects.DIG_SPEED, 100, 0, false, true); + miningEntity.addEffect(haste); + Level world = miningEntity.getCommandSenderWorld(); + var box = miningEntity.getBoundingBox().inflate(10.0); + world.getEntitiesOfClass(LivingEntity.class, box, p -> p instanceof LivingEntity).forEach( + p -> p.addEffect(haste) + ); + } + return true; + } + + @Override + public boolean isDamageable(ItemStack stack) { + return false; + } + + @Override + public boolean isDamaged(ItemStack stack) { + return false; + } + + @Override + public int getMaxDamage(ItemStack stack) { + return 0; + } +} diff --git a/src/main/java/net/krituximon/stalinium/item/StaliniumSwordItem.java b/src/main/java/net/krituximon/stalinium/item/StaliniumSwordItem.java index ab137c5..0cd0699 100644 --- a/src/main/java/net/krituximon/stalinium/item/StaliniumSwordItem.java +++ b/src/main/java/net/krituximon/stalinium/item/StaliniumSwordItem.java @@ -19,7 +19,6 @@ public class StaliniumSwordItem extends SwordItem { @Override public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { - boolean result = super.hurtEnemy(stack, target, attacker); if (!attacker.getCommandSenderWorld().isClientSide) { MobEffectInstance strength = new MobEffectInstance(MobEffects.DAMAGE_BOOST, 100, 0, false, true); attacker.addEffect(strength); @@ -30,6 +29,20 @@ public class StaliniumSwordItem extends SwordItem { p.addEffect(strength); } } - return result; + return true; + } + @Override + public boolean isDamageable(ItemStack stack) { + return false; + } + + @Override + public boolean isDamaged(ItemStack stack) { + return false; + } + + @Override + public int getMaxDamage(ItemStack stack) { + return 0; } } diff --git a/src/main/resources/assets/stalinium/lang/en_us.json b/src/main/resources/assets/stalinium/lang/en_us.json index f6f0b7a..e786a1f 100644 --- a/src/main/resources/assets/stalinium/lang/en_us.json +++ b/src/main/resources/assets/stalinium/lang/en_us.json @@ -2,9 +2,11 @@ "item.stalinium.stalinium_ingot": "Stalinium Ingot", "item.stalinium.stalinium_nugget": "Stalinium Nugget", "item.stalinium.stalinium_sword": "Stalinium Sword", + "item.stalinium.stalinium_axe": "Stalinium Axe", + "item.stalinium.stalinium_shovel": "Stalinium Shovel", "item.stalinium.soviet_anthem_music_disc": "Soviet Anthem Music Disc", - "item.stalinium.soviet_anthem_music_disc.desc": "Orchestra of the Ministry of Defense of the USSR - Soviet Union national anthem", + "item.stalinium.soviet_anthem_music_disc.desc": "Ministry of Defense of the USSR - Soviet Union national anthem", "block.stalinium.stalinium_block": "Block of Stalinium", "block.stalinium.stalinium_ore": "Stalinium Ore", diff --git a/src/main/resources/assets/stalinium/textures/item/stalinium_shovel.png b/src/main/resources/assets/stalinium/textures/item/stalinium_shovel.png new file mode 100644 index 0000000000000000000000000000000000000000..89b9b90be7f8f26a74e68bfaab0e85c1e55cc90d GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|&U?BzhFJ6_ zCoEvkNKE)~|ImRC^0Q^Q4QIvvkyV`2`}_ZO0|Nu0Tn3-dFYmS&u1Y+#{N|MqVb{&G z7FitrU%n#lVCDfylYKjO7#u!5JztWkHQ=bEb zuv7HL%$fhg0|Wl-FBAOsL)~lh+?hWEF6}83JpBLvdkK$gJwm;&w;347Sd|Lp-&$bB Z!0?4Vpw_}%EduB@22WQ%mvv4FO#pH8ahd=C literal 0 HcmV?d00001