From 1d32029d726b6e338a3512ef1ad134eb2237f19d Mon Sep 17 00:00:00 2001 From: KrisHD1337 <165958879+krishd1337@users.noreply.github.com> Date: Wed, 28 May 2025 11:51:42 +0200 Subject: [PATCH 1/4] Updated Mod version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2c96ea8..5b70ea8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -34,7 +34,7 @@ mod_name=Stalinium # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=MIT # The mod version. See https://semver.org/ -mod_version=0.0.11 +mod_version=0.0.15 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html From 89d4f6c8f5d4ce2f710f9a722b66b3edc7726447 Mon Sep 17 00:00:00 2001 From: IM23a-cernik Date: Wed, 28 May 2025 13:14:01 +0200 Subject: [PATCH 2/4] Moved custom item classes and added ModArmorItem Class --- .../krituximon/stalinium/item/ModItems.java | 1 + .../stalinium/item/custom/ModArmorItem.java | 83 +++++++++++++++++++ .../item/{ => custom}/StaliniumAxeItem.java | 2 +- .../item/{ => custom}/StaliniumHoeItem.java | 3 +- .../{ => custom}/StaliniumPickaxeItem.java | 2 +- .../{ => custom}/StaliniumShovelItem.java | 2 +- .../item/{ => custom}/StaliniumSwordItem.java | 2 +- 7 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 src/main/java/net/krituximon/stalinium/item/custom/ModArmorItem.java rename src/main/java/net/krituximon/stalinium/item/{ => custom}/StaliniumAxeItem.java (99%) rename src/main/java/net/krituximon/stalinium/item/{ => custom}/StaliniumHoeItem.java (97%) rename src/main/java/net/krituximon/stalinium/item/{ => custom}/StaliniumPickaxeItem.java (98%) rename src/main/java/net/krituximon/stalinium/item/{ => custom}/StaliniumShovelItem.java (98%) rename src/main/java/net/krituximon/stalinium/item/{ => custom}/StaliniumSwordItem.java (98%) diff --git a/src/main/java/net/krituximon/stalinium/item/ModItems.java b/src/main/java/net/krituximon/stalinium/item/ModItems.java index 55bc0cc..ff9eec6 100644 --- a/src/main/java/net/krituximon/stalinium/item/ModItems.java +++ b/src/main/java/net/krituximon/stalinium/item/ModItems.java @@ -1,6 +1,7 @@ package net.krituximon.stalinium.item; import net.krituximon.stalinium.Stalinium; +import net.krituximon.stalinium.item.custom.*; import net.krituximon.stalinium.sound.ModSounds; import net.minecraft.world.item.*; import net.neoforged.bus.api.IEventBus; diff --git a/src/main/java/net/krituximon/stalinium/item/custom/ModArmorItem.java b/src/main/java/net/krituximon/stalinium/item/custom/ModArmorItem.java new file mode 100644 index 0000000..1590682 --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/item/custom/ModArmorItem.java @@ -0,0 +1,83 @@ +package net.krituximon.stalinium.item.custom; + +import com.google.common.collect.ImmutableMap; +import net.krituximon.stalinium.item.ModArmorMaterials; +import net.minecraft.core.Holder; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +import java.util.List; +import java.util.Map; + +public class ModArmorItem extends ArmorItem { + private static final Map, List> MATERIAL_TO_EFFECT_MAP = + (new ImmutableMap.Builder, List>()) + .put(ModArmorMaterials.STALINIUM_ARMOR_MATERIAL, + List.of(new MobEffectInstance(MobEffects.JUMP, 200, 1, false, false), + new MobEffectInstance(MobEffects.GLOWING, 200, 1, false, false))) + .build(); + + public ModArmorItem(Holder material, Type type, Properties properties) { + super(material, type, properties); + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + if(entity instanceof Player player && !level.isClientSide() && hasFullSuitOfArmorOn(player)) { + evaluateArmorEffects(player); + } + } + + private void evaluateArmorEffects(Player player) { + for(Map.Entry, List> entry : MATERIAL_TO_EFFECT_MAP.entrySet()) { + Holder mapArmorMaterial = entry.getKey(); + List mapEffect = entry.getValue(); + + if(hasPlayerCorrectArmorOn(mapArmorMaterial, player)) { + addEffectToPlayer(player, mapEffect); + } + } + } + + private void addEffectToPlayer(Player player, List mapEffect) { + boolean hasPlayerEffect = mapEffect.stream().allMatch(effect -> player.hasEffect(effect.getEffect())); + + if(!hasPlayerEffect) { + for (MobEffectInstance effect : mapEffect) { + player.addEffect(new MobEffectInstance(effect.getEffect(), + effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.isVisible())); + } + } + } + + private boolean hasPlayerCorrectArmorOn(Holder mapArmorMaterial, Player player) { + for(ItemStack armorStack : player.getArmorSlots()) { + if(!(armorStack.getItem() instanceof ArmorItem)) { + return false; + } + } + + ArmorItem boots = ((ArmorItem) player.getInventory().getArmor(0).getItem()); + ArmorItem leggings = ((ArmorItem) player.getInventory().getArmor(1).getItem()); + ArmorItem chestplate = ((ArmorItem) player.getInventory().getArmor(2).getItem()); + ArmorItem helmet = ((ArmorItem) player.getInventory().getArmor(3).getItem()); + + return boots.getMaterial() == mapArmorMaterial && leggings.getMaterial() == mapArmorMaterial + && chestplate.getMaterial() == mapArmorMaterial && helmet.getMaterial() == mapArmorMaterial; + } + + private boolean hasFullSuitOfArmorOn(Player player) { + ItemStack boots = player.getInventory().getArmor(0); + ItemStack leggings = player.getInventory().getArmor(1); + ItemStack chestplate = player.getInventory().getArmor(2); + ItemStack helmet = player.getInventory().getArmor(3); + + return !boots.isEmpty() && !leggings.isEmpty() && !chestplate.isEmpty() && !helmet.isEmpty(); + } +} \ No newline at end of file diff --git a/src/main/java/net/krituximon/stalinium/item/StaliniumAxeItem.java b/src/main/java/net/krituximon/stalinium/item/custom/StaliniumAxeItem.java similarity index 99% rename from src/main/java/net/krituximon/stalinium/item/StaliniumAxeItem.java rename to src/main/java/net/krituximon/stalinium/item/custom/StaliniumAxeItem.java index ee7591e..6df8331 100644 --- a/src/main/java/net/krituximon/stalinium/item/StaliniumAxeItem.java +++ b/src/main/java/net/krituximon/stalinium/item/custom/StaliniumAxeItem.java @@ -1,4 +1,4 @@ -package net.krituximon.stalinium.item; +package net.krituximon.stalinium.item.custom; import net.krituximon.stalinium.util.PlacedLogStorage; import net.minecraft.core.BlockPos; diff --git a/src/main/java/net/krituximon/stalinium/item/StaliniumHoeItem.java b/src/main/java/net/krituximon/stalinium/item/custom/StaliniumHoeItem.java similarity index 97% rename from src/main/java/net/krituximon/stalinium/item/StaliniumHoeItem.java rename to src/main/java/net/krituximon/stalinium/item/custom/StaliniumHoeItem.java index c1d77e7..47aa5fe 100644 --- a/src/main/java/net/krituximon/stalinium/item/StaliniumHoeItem.java +++ b/src/main/java/net/krituximon/stalinium/item/custom/StaliniumHoeItem.java @@ -1,11 +1,10 @@ -package net.krituximon.stalinium.item; +package net.krituximon.stalinium.item.custom; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.HoeItem; import net.minecraft.world.item.Item; diff --git a/src/main/java/net/krituximon/stalinium/item/StaliniumPickaxeItem.java b/src/main/java/net/krituximon/stalinium/item/custom/StaliniumPickaxeItem.java similarity index 98% rename from src/main/java/net/krituximon/stalinium/item/StaliniumPickaxeItem.java rename to src/main/java/net/krituximon/stalinium/item/custom/StaliniumPickaxeItem.java index c58ef80..d65ac92 100644 --- a/src/main/java/net/krituximon/stalinium/item/StaliniumPickaxeItem.java +++ b/src/main/java/net/krituximon/stalinium/item/custom/StaliniumPickaxeItem.java @@ -1,4 +1,4 @@ -package net.krituximon.stalinium.item; +package net.krituximon.stalinium.item.custom; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; diff --git a/src/main/java/net/krituximon/stalinium/item/StaliniumShovelItem.java b/src/main/java/net/krituximon/stalinium/item/custom/StaliniumShovelItem.java similarity index 98% rename from src/main/java/net/krituximon/stalinium/item/StaliniumShovelItem.java rename to src/main/java/net/krituximon/stalinium/item/custom/StaliniumShovelItem.java index 450f9c7..77fc13a 100644 --- a/src/main/java/net/krituximon/stalinium/item/StaliniumShovelItem.java +++ b/src/main/java/net/krituximon/stalinium/item/custom/StaliniumShovelItem.java @@ -1,4 +1,4 @@ -package net.krituximon.stalinium.item; +package net.krituximon.stalinium.item.custom; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerPlayer; diff --git a/src/main/java/net/krituximon/stalinium/item/StaliniumSwordItem.java b/src/main/java/net/krituximon/stalinium/item/custom/StaliniumSwordItem.java similarity index 98% rename from src/main/java/net/krituximon/stalinium/item/StaliniumSwordItem.java rename to src/main/java/net/krituximon/stalinium/item/custom/StaliniumSwordItem.java index 99b8da6..45ab346 100644 --- a/src/main/java/net/krituximon/stalinium/item/StaliniumSwordItem.java +++ b/src/main/java/net/krituximon/stalinium/item/custom/StaliniumSwordItem.java @@ -1,4 +1,4 @@ -package net.krituximon.stalinium.item; +package net.krituximon.stalinium.item.custom; import net.krituximon.stalinium.Stalinium; import net.minecraft.core.Holder; From 1656539669b6609c57f7c429c9eb74655a680ae7 Mon Sep 17 00:00:00 2001 From: IM23a-cernik Date: Wed, 28 May 2025 13:46:05 +0200 Subject: [PATCH 3/4] Added Full Set Bonus Effect --- gradle.properties | 2 +- .../krituximon/stalinium/item/ModItems.java | 2 +- .../stalinium/item/custom/ModArmorItem.java | 36 ++++++++++++------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5b70ea8..20e2558 100644 --- a/gradle.properties +++ b/gradle.properties @@ -34,7 +34,7 @@ mod_name=Stalinium # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=MIT # The mod version. See https://semver.org/ -mod_version=0.0.15 +mod_version=0.0.17 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/net/krituximon/stalinium/item/ModItems.java b/src/main/java/net/krituximon/stalinium/item/ModItems.java index ff9eec6..01c9ce7 100644 --- a/src/main/java/net/krituximon/stalinium/item/ModItems.java +++ b/src/main/java/net/krituximon/stalinium/item/ModItems.java @@ -41,7 +41,7 @@ public class ModItems { .attributes(HoeItem.createAttributes(ModTiers.STALINIUM, 1.0f, -3.0f)))); public static final DeferredItem STALINIUM_HELMET = ITEMS.register("stalinium_helmet", - () -> new ArmorItem(ModArmorMaterials.STALINIUM_ARMOR_MATERIAL, ArmorItem.Type.HELMET, + () -> new ModArmorItem(ModArmorMaterials.STALINIUM_ARMOR_MATERIAL, ArmorItem.Type.HELMET, new Item.Properties().durability(ArmorItem.Type.HELMET.getDurability(19)))); public static final DeferredItem STALINIUM_CHESTPLATE = ITEMS.register("stalinium_chestplate", diff --git a/src/main/java/net/krituximon/stalinium/item/custom/ModArmorItem.java b/src/main/java/net/krituximon/stalinium/item/custom/ModArmorItem.java index 1590682..1f0aae4 100644 --- a/src/main/java/net/krituximon/stalinium/item/custom/ModArmorItem.java +++ b/src/main/java/net/krituximon/stalinium/item/custom/ModArmorItem.java @@ -3,6 +3,7 @@ package net.krituximon.stalinium.item.custom; import com.google.common.collect.ImmutableMap; import net.krituximon.stalinium.item.ModArmorMaterials; import net.minecraft.core.Holder; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; @@ -11,6 +12,7 @@ import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; import java.util.List; import java.util.Map; @@ -19,8 +21,7 @@ public class ModArmorItem extends ArmorItem { private static final Map, List> MATERIAL_TO_EFFECT_MAP = (new ImmutableMap.Builder, List>()) .put(ModArmorMaterials.STALINIUM_ARMOR_MATERIAL, - List.of(new MobEffectInstance(MobEffects.JUMP, 200, 1, false, false), - new MobEffectInstance(MobEffects.GLOWING, 200, 1, false, false))) + List.of(new MobEffectInstance(MobEffects.HEALTH_BOOST, 100, 0, false, false))) .build(); public ModArmorItem(Holder material, Type type, Properties properties) { @@ -29,36 +30,45 @@ public class ModArmorItem extends ArmorItem { @Override public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { - if(entity instanceof Player player && !level.isClientSide() && hasFullSuitOfArmorOn(player)) { + if (entity instanceof Player player && !level.isClientSide() && hasFullSuitOfArmorOn(player)) { evaluateArmorEffects(player); } } private void evaluateArmorEffects(Player player) { - for(Map.Entry, List> entry : MATERIAL_TO_EFFECT_MAP.entrySet()) { + for (Map.Entry, List> entry : MATERIAL_TO_EFFECT_MAP.entrySet()) { Holder mapArmorMaterial = entry.getKey(); List mapEffect = entry.getValue(); - if(hasPlayerCorrectArmorOn(mapArmorMaterial, player)) { + if (hasPlayerCorrectArmorOn(mapArmorMaterial, player)) { addEffectToPlayer(player, mapEffect); } } } private void addEffectToPlayer(Player player, List mapEffect) { - boolean hasPlayerEffect = mapEffect.stream().allMatch(effect -> player.hasEffect(effect.getEffect())); + AABB box = player.getBoundingBox().inflate(20.0); + int playersInBox = player.level().getEntitiesOfClass( + Player.class, + box, + p -> p instanceof ServerPlayer && player.isAlliedTo(p) + ).size(); - if(!hasPlayerEffect) { - for (MobEffectInstance effect : mapEffect) { - player.addEffect(new MobEffectInstance(effect.getEffect(), - effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.isVisible())); - } + for (MobEffectInstance effect : mapEffect) { + int newAmplifier = Math.min(4, effect.getAmplifier() + playersInBox); + player.addEffect(new MobEffectInstance( + effect.getEffect(), + effect.getDuration(), + newAmplifier, + effect.isAmbient(), + effect.isVisible() + )); } } private boolean hasPlayerCorrectArmorOn(Holder mapArmorMaterial, Player player) { - for(ItemStack armorStack : player.getArmorSlots()) { - if(!(armorStack.getItem() instanceof ArmorItem)) { + for (ItemStack armorStack : player.getArmorSlots()) { + if (!(armorStack.getItem() instanceof ArmorItem)) { return false; } } From 5b801b134ba80572481c3faea3fa1f453e3c62c4 Mon Sep 17 00:00:00 2001 From: KrisHD1337 <165958879+krishd1337@users.noreply.github.com> Date: Wed, 28 May 2025 14:16:27 +0200 Subject: [PATCH 4/4] Added effect for Stalinium chestplate and leggings --- gradle.properties | 2 +- .../krituximon/stalinium/item/ModItems.java | 4 +- .../StaliniumChestplateLeggingsItem.java | 107 ++++++++++++++++++ 3 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 src/main/java/net/krituximon/stalinium/item/custom/StaliniumChestplateLeggingsItem.java diff --git a/gradle.properties b/gradle.properties index 20e2558..6554403 100644 --- a/gradle.properties +++ b/gradle.properties @@ -34,7 +34,7 @@ mod_name=Stalinium # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=MIT # The mod version. See https://semver.org/ -mod_version=0.0.17 +mod_version=0.0.18 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/net/krituximon/stalinium/item/ModItems.java b/src/main/java/net/krituximon/stalinium/item/ModItems.java index 01c9ce7..57819f0 100644 --- a/src/main/java/net/krituximon/stalinium/item/ModItems.java +++ b/src/main/java/net/krituximon/stalinium/item/ModItems.java @@ -45,11 +45,11 @@ public class ModItems { new Item.Properties().durability(ArmorItem.Type.HELMET.getDurability(19)))); public static final DeferredItem STALINIUM_CHESTPLATE = ITEMS.register("stalinium_chestplate", - () -> new ArmorItem(ModArmorMaterials.STALINIUM_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE, + () -> new StaliniumChestplateLeggingsItem(ModArmorMaterials.STALINIUM_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE, new Item.Properties().durability(ArmorItem.Type.CHESTPLATE.getDurability(19)))); public static final DeferredItem STALINIUM_LEGGINGS = ITEMS.register("stalinium_leggings", - () -> new ArmorItem(ModArmorMaterials.STALINIUM_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, + () -> new StaliniumChestplateLeggingsItem(ModArmorMaterials.STALINIUM_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, new Item.Properties().durability(ArmorItem.Type.LEGGINGS.getDurability(19)))); public static final DeferredItem STALINIUM_BOOTS = ITEMS.register("stalinium_boots", diff --git a/src/main/java/net/krituximon/stalinium/item/custom/StaliniumChestplateLeggingsItem.java b/src/main/java/net/krituximon/stalinium/item/custom/StaliniumChestplateLeggingsItem.java new file mode 100644 index 0000000..c701f0d --- /dev/null +++ b/src/main/java/net/krituximon/stalinium/item/custom/StaliniumChestplateLeggingsItem.java @@ -0,0 +1,107 @@ +package net.krituximon.stalinium.item.custom; + +import com.google.common.collect.ImmutableMap; +import net.krituximon.stalinium.item.ModArmorMaterials; +import net.minecraft.core.Holder; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; + +import java.util.List; +import java.util.Map; + +public class StaliniumChestplateLeggingsItem extends ArmorItem { + private static final Map, List> MATERIAL_TO_EFFECT_MAP = + (new ImmutableMap.Builder, List>()) + .put(ModArmorMaterials.STALINIUM_ARMOR_MATERIAL, + List.of(new MobEffectInstance(MobEffects.DAMAGE_RESISTANCE, 100, 0, false, false))) + .build(); + + public StaliniumChestplateLeggingsItem(Holder material, Type type, Properties properties) { + super(material, type, properties); + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + if (entity instanceof Player player && !level.isClientSide() && hasChestAndLeggingsOn(player)) { + evaluateArmorEffects(player); + } + } + + private void evaluateArmorEffects(Player player) { + for (Map.Entry, List> entry : MATERIAL_TO_EFFECT_MAP.entrySet()) { + Holder mapArmorMaterial = entry.getKey(); + List mapEffect = entry.getValue(); + + if (hasPlayerCorrectArmorOn(mapArmorMaterial, player)) { + addEffectToPlayer(player, mapEffect); + } + } + } + + private void addEffectToPlayer(Player player, List mapEffect) { + AABB box = player.getBoundingBox().inflate(5.0); + List allies = player.level().getEntitiesOfClass( + Player.class, + box, + p -> p instanceof ServerPlayer && player.isAlliedTo(p) + ); + + for (MobEffectInstance effect : mapEffect) { + player.addEffect(new MobEffectInstance( + effect.getEffect(), + effect.getDuration(), + effect.getAmplifier(), + effect.isAmbient(), + effect.isVisible())); + for (Player ally : allies) { + ally.addEffect(new MobEffectInstance( + effect.getEffect(), + effect.getDuration(), + effect.getAmplifier(), + effect.isAmbient(), + effect.isVisible() + )); + } + } + } + + private boolean hasPlayerCorrectArmorOn(Holder mapArmorMaterial, Player player) { + ItemStack leggingsStack = player.getInventory().getArmor(1); + ItemStack chestplateStack = player.getInventory().getArmor(2); + + if (leggingsStack.isEmpty() || chestplateStack.isEmpty()) { + return false; + } + + ArmorItem leggingsItem = (ArmorItem) leggingsStack.getItem(); + ArmorItem chestplateItem = (ArmorItem) chestplateStack.getItem(); + + return leggingsItem.getMaterial() == mapArmorMaterial + && chestplateItem.getMaterial() == mapArmorMaterial; + } + + private boolean hasChestAndLeggingsOn(Player player) { + ItemStack leggings = player.getInventory().getArmor(1); + ItemStack chestplate = player.getInventory().getArmor(2); + + return !leggings.isEmpty() && !chestplate.isEmpty(); + } + + @Override + public boolean isDamageable(ItemStack stack) { + return false; + } + + @Override + public boolean isDamaged(ItemStack stack) { + return false; + } +} \ No newline at end of file