Moved custom item classes and added ModArmorItem Class

This commit is contained in:
IM23a-cernik
2025-05-28 13:14:01 +02:00
parent 1d32029d72
commit 89d4f6c8f5
7 changed files with 89 additions and 6 deletions
@@ -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;
@@ -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<Holder<ArmorMaterial>, List<MobEffectInstance>> MATERIAL_TO_EFFECT_MAP =
(new ImmutableMap.Builder<Holder<ArmorMaterial>, List<MobEffectInstance>>())
.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<ArmorMaterial> 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<Holder<ArmorMaterial>, List<MobEffectInstance>> entry : MATERIAL_TO_EFFECT_MAP.entrySet()) {
Holder<ArmorMaterial> mapArmorMaterial = entry.getKey();
List<MobEffectInstance> mapEffect = entry.getValue();
if(hasPlayerCorrectArmorOn(mapArmorMaterial, player)) {
addEffectToPlayer(player, mapEffect);
}
}
}
private void addEffectToPlayer(Player player, List<MobEffectInstance> 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<ArmorMaterial> 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();
}
}
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;