From 1656539669b6609c57f7c429c9eb74655a680ae7 Mon Sep 17 00:00:00 2001 From: IM23a-cernik Date: Wed, 28 May 2025 13:46:05 +0200 Subject: [PATCH] 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; } }