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;