diff --git a/src/main/java/ru/betterend/effects/EndPotions.java b/src/main/java/ru/betterend/effects/EndPotions.java index 64608d37..0b2e2394 100644 --- a/src/main/java/ru/betterend/effects/EndPotions.java +++ b/src/main/java/ru/betterend/effects/EndPotions.java @@ -16,7 +16,7 @@ public class EndPotions { public final static Potion LONG_END_VEIL = registerPotion("long_end_veil", EndStatusEffects.END_VEIL, 9600); public static Potion registerPotion(String name, MobEffect effect, int duration) { - return registerPotion(name, new Potion(name, new MobEffectInstance[]{ new MobEffectInstance(effect, duration) })); + return registerPotion(name, new Potion(name, new MobEffectInstance(effect, duration))); } public static Potion registerPotion(String name, Potion potion) { diff --git a/src/main/java/ru/betterend/effects/EndStatusEffects.java b/src/main/java/ru/betterend/effects/EndStatusEffects.java index b5176126..1a7edb84 100644 --- a/src/main/java/ru/betterend/effects/EndStatusEffects.java +++ b/src/main/java/ru/betterend/effects/EndStatusEffects.java @@ -2,13 +2,18 @@ package ru.betterend.effects; import net.minecraft.core.Registry; import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; import ru.betterend.BetterEnd; import ru.betterend.effects.status.EndVeilEffect; public class EndStatusEffects { - + public final static MobEffectInstance CRYSTALITE_HEALTH_REGEN = new MobEffectInstance(MobEffects.REGENERATION, 40, 0, true, false, true); + public final static MobEffectInstance CRYSTALITE_DIG_SPEED = new MobEffectInstance(MobEffects.DIG_SPEED, 40, 0, true, false, true); + public final static MobEffectInstance CRYSTALITE_MOVE_SPEED = new MobEffectInstance(MobEffects.MOVEMENT_SPEED, 40, 0, true, false, true); + public final static MobEffect END_VEIL = registerEffect("end_veil", new EndVeilEffect()); - + public static MobEffect registerEffect(String name, E effect) { return Registry.register(Registry.MOB_EFFECT, BetterEnd.makeID(name), effect); } diff --git a/src/main/java/ru/betterend/interfaces/MobEffectApplier.java b/src/main/java/ru/betterend/interfaces/MobEffectApplier.java new file mode 100644 index 00000000..7aee65f6 --- /dev/null +++ b/src/main/java/ru/betterend/interfaces/MobEffectApplier.java @@ -0,0 +1,7 @@ +package ru.betterend.interfaces; + +import net.minecraft.world.entity.LivingEntity; + +public interface MobEffectApplier { + void applyEffect(LivingEntity owner); +} diff --git a/src/main/java/ru/betterend/item/ArmoredElytra.java b/src/main/java/ru/betterend/item/ArmoredElytra.java index 0754ef4d..6c2189e5 100644 --- a/src/main/java/ru/betterend/item/ArmoredElytra.java +++ b/src/main/java/ru/betterend/item/ArmoredElytra.java @@ -1,13 +1,10 @@ package ru.betterend.item; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.*; @@ -17,11 +14,10 @@ import ru.betterend.registry.EndItems; import java.util.UUID; -public class ArmoredElytra extends ArmorItem implements MultiModelItem { +public class ArmoredElytra extends EndArmorItem implements MultiModelItem { - private static final UUID ARMOR_MODIFIER_UUID_CHEST = UUID.fromString("9F3D476D-C118-4544-8365-64846904B48E"); + private static final UUID ARMOR_MODIFIER_UUID_CHEST = ARMOR_MODIFIER_UUID_PER_SLOT[2]; - private final Multimap defaultModifiers; private final ResourceLocation wingTexture; private final Item repairItem; private final double movementFactor; @@ -37,16 +33,10 @@ public class ArmoredElytra extends ArmorItem implements MultiModelItem { this.movementFactor = movementFactor; this.defense = (int) ((double) material.getDefenseForSlot(EquipmentSlot.CHEST) / 1.75); this.toughness = material.getToughness() / 1.75F; - ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.put(Attributes.ARMOR, new AttributeModifier(ARMOR_MODIFIER_UUID_CHEST, + addAttributeModifier(Attributes.ARMOR, new AttributeModifier(ARMOR_MODIFIER_UUID_CHEST, "Armor modifier", defense, AttributeModifier.Operation.ADDITION)); - builder.put(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(ARMOR_MODIFIER_UUID_CHEST, + addAttributeModifier(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(ARMOR_MODIFIER_UUID_CHEST, "Armor toughness", toughness, AttributeModifier.Operation.ADDITION)); - if (material == ArmorMaterials.NETHERITE) { - builder.put(Attributes.KNOCKBACK_RESISTANCE, new AttributeModifier(ARMOR_MODIFIER_UUID_CHEST, - "Armor knockback resistance", knockbackResistance, AttributeModifier.Operation.ADDITION)); - } - this.defaultModifiers = builder.build(); } public double getMovementFactor() { @@ -63,11 +53,6 @@ public class ArmoredElytra extends ArmorItem implements MultiModelItem { return super.isValidRepairItem(itemStack, itemStack2) || itemStack2.getItem() == repairItem; } - @Override - public Multimap getDefaultAttributeModifiers(EquipmentSlot equipmentSlot) { - return equipmentSlot == slot ? defaultModifiers : super.getDefaultAttributeModifiers(equipmentSlot); - } - @Override public int getDefense() { return defense; diff --git a/src/main/java/ru/betterend/item/CrystaliteArmor.java b/src/main/java/ru/betterend/item/CrystaliteArmor.java new file mode 100644 index 00000000..1208d070 --- /dev/null +++ b/src/main/java/ru/betterend/item/CrystaliteArmor.java @@ -0,0 +1,28 @@ +package ru.betterend.item; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import ru.betterend.effects.EndStatusEffects; +import ru.betterend.item.material.EndArmorMaterial; + +public class CrystaliteArmor extends EndArmorItem { + + public CrystaliteArmor(EquipmentSlot equipmentSlot, Properties settings) { + super(EndArmorMaterial.CRYSTALITE, equipmentSlot, settings); + } + + public static boolean hasFullSet(LivingEntity owner) { + for (ItemStack armorStack : owner.getArmorSlots()) { + if (!(armorStack.getItem() instanceof CrystaliteArmor)) { + return false; + } + } + return true; + } + + public static void applySetEffect(LivingEntity owner) { + owner.addEffect(new MobEffectInstance(EndStatusEffects.CRYSTALITE_HEALTH_REGEN)); + } +} diff --git a/src/main/java/ru/betterend/item/CrystaliteBoots.java b/src/main/java/ru/betterend/item/CrystaliteBoots.java new file mode 100644 index 00000000..03e0e797 --- /dev/null +++ b/src/main/java/ru/betterend/item/CrystaliteBoots.java @@ -0,0 +1,21 @@ +package ru.betterend.item; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.Rarity; +import ru.betterend.effects.EndStatusEffects; +import ru.betterend.interfaces.MobEffectApplier; +import ru.betterend.registry.EndItems; + +public class CrystaliteBoots extends CrystaliteArmor implements MobEffectApplier { + + public CrystaliteBoots() { + super(EquipmentSlot.FEET, EndItems.makeItemSettings().rarity(Rarity.RARE)); + } + + @Override + public void applyEffect(LivingEntity owner) { + owner.addEffect(new MobEffectInstance(EndStatusEffects.CRYSTALITE_MOVE_SPEED)); + } +} diff --git a/src/main/java/ru/betterend/item/CrystaliteChestplate.java b/src/main/java/ru/betterend/item/CrystaliteChestplate.java new file mode 100644 index 00000000..3c55deb0 --- /dev/null +++ b/src/main/java/ru/betterend/item/CrystaliteChestplate.java @@ -0,0 +1,21 @@ +package ru.betterend.item; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.Rarity; +import ru.betterend.effects.EndStatusEffects; +import ru.betterend.interfaces.MobEffectApplier; +import ru.betterend.registry.EndItems; + +public class CrystaliteChestplate extends CrystaliteArmor implements MobEffectApplier { + + public CrystaliteChestplate() { + super(EquipmentSlot.CHEST, EndItems.makeItemSettings().rarity(Rarity.RARE)); + } + + @Override + public void applyEffect(LivingEntity owner) { + owner.addEffect(new MobEffectInstance(EndStatusEffects.CRYSTALITE_DIG_SPEED)); + } +} diff --git a/src/main/java/ru/betterend/item/CrystaliteHelmet.java b/src/main/java/ru/betterend/item/CrystaliteHelmet.java new file mode 100644 index 00000000..1231afeb --- /dev/null +++ b/src/main/java/ru/betterend/item/CrystaliteHelmet.java @@ -0,0 +1,18 @@ +package ru.betterend.item; + +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.item.Rarity; +import ru.betterend.registry.EndAttributes; +import ru.betterend.registry.EndItems; + +import java.util.UUID; + +public class CrystaliteHelmet extends CrystaliteArmor { + + public CrystaliteHelmet() { + super(EquipmentSlot.HEAD, EndItems.makeItemSettings().rarity(Rarity.RARE)); + UUID uuid = ARMOR_MODIFIER_UUID_PER_SLOT[EquipmentSlot.HEAD.getIndex()]; + addAttributeModifier(EndAttributes.BLINDNESS_RESISTANCE, new AttributeModifier(uuid, "Helmet blindness resistance", 1.0, AttributeModifier.Operation.ADDITION)); + } +} diff --git a/src/main/java/ru/betterend/item/CrystaliteLeggings.java b/src/main/java/ru/betterend/item/CrystaliteLeggings.java new file mode 100644 index 00000000..fafccec3 --- /dev/null +++ b/src/main/java/ru/betterend/item/CrystaliteLeggings.java @@ -0,0 +1,18 @@ +package ru.betterend.item; + +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.item.Rarity; +import ru.betterend.registry.EndItems; + +import java.util.UUID; + +public class CrystaliteLeggings extends CrystaliteArmor { + + public CrystaliteLeggings() { + super(EquipmentSlot.LEGS, EndItems.makeItemSettings().rarity(Rarity.RARE)); + UUID uuid = ARMOR_MODIFIER_UUID_PER_SLOT[EquipmentSlot.LEGS.getIndex()]; + addAttributeModifier(Attributes.MAX_HEALTH, new AttributeModifier(uuid, "Armor health boost", 4.0, AttributeModifier.Operation.ADDITION)); + } +} diff --git a/src/main/java/ru/betterend/item/EndArmorItem.java b/src/main/java/ru/betterend/item/EndArmorItem.java index 61ed97d1..b842c112 100644 --- a/src/main/java/ru/betterend/item/EndArmorItem.java +++ b/src/main/java/ru/betterend/item/EndArmorItem.java @@ -1,52 +1,54 @@ package ru.betterend.item; -import java.util.UUID; - -import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; - import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; -import net.minecraft.world.item.Item; -import ru.betterend.mixin.common.ArmorItemAccessor; import ru.betterend.patterns.Patterned; import ru.betterend.patterns.Patterns; -public class EndArmorItem extends ArmorItem implements Patterned { - public EndArmorItem(ArmorMaterial material, EquipmentSlot slot, Item.Properties settings) { - super(material, slot, settings); +import java.util.UUID; - addKnockbackResistance((ArmorItemAccessor) this, slot, this.knockbackResistance); +public class EndArmorItem extends ArmorItem implements Patterned { + + protected static final UUID[] ARMOR_MODIFIER_UUID_PER_SLOT = new UUID[] { + UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"), + UUID.fromString("D8499B04-0E66-4726-AB29-64469D734E0D"), + UUID.fromString("9F3D476D-C118-4544-8365-64846904B48E"), + UUID.fromString("2AD3F246-FEE1-4E67-B886-69FD380BB150") + }; + + protected final Multimap defaultModifiers; + + public EndArmorItem(ArmorMaterial material, EquipmentSlot equipmentSlot, Properties settings) { + super(material, equipmentSlot, settings); + this.defaultModifiers = HashMultimap.create(); + UUID uuid = ARMOR_MODIFIER_UUID_PER_SLOT[equipmentSlot.getIndex()]; + addAttributeModifier(Attributes.ARMOR, new AttributeModifier(uuid, "Armor modifier", getDefense(), AttributeModifier.Operation.ADDITION)); + addAttributeModifier(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(uuid, "Armor toughness", getToughness(), AttributeModifier.Operation.ADDITION)); + if (knockbackResistance > 0.0F) { + addAttributeModifier(Attributes.KNOCKBACK_RESISTANCE, new AttributeModifier(uuid, "Armor knockback resistance", knockbackResistance, AttributeModifier.Operation.ADDITION)); + } } - /** Ensures knockback resistance is actually applied */ - private static void addKnockbackResistance(ArmorItemAccessor accessor, EquipmentSlot slot, double knockbackResistance) { - if (knockbackResistance == 0) { - return; + @Override + public Multimap getDefaultAttributeModifiers(EquipmentSlot equipmentSlot) { + return equipmentSlot == slot ? defaultModifiers : super.getDefaultAttributeModifiers(equipmentSlot); + } + + protected void addAttributeModifier(Attribute attribute, AttributeModifier modifier) { + if (defaultModifiers.containsKey(attribute)) { + defaultModifiers.removeAll(attribute); } - - Multimap attributeModifiers = accessor.be_getDefaultModifiers(); - - // In case Mojang or anyone else decided to fix this - if (attributeModifiers.keys().contains(Attributes.KNOCKBACK_RESISTANCE)) { - return; - } - - UUID uuid = accessor.be_getModifiers()[slot.getIndex()]; - - // Rebuild attributeModifiers to include knockback resistance - ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.putAll(attributeModifiers); - builder.put(Attributes.KNOCKBACK_RESISTANCE, new AttributeModifier(uuid, "Armor knockback resistance", knockbackResistance, AttributeModifier.Operation.ADDITION)); - accessor.be_setDefaultModifiers(builder.build()); + defaultModifiers.put(attribute, modifier); } @Override public String getModelPattern(String name) { - return Patterns.createJson(Patterns.ITEM_GENERATED, name); + return Patterns.createItemGenerated(name); } } diff --git a/src/main/java/ru/betterend/item/EndAttribute.java b/src/main/java/ru/betterend/item/EndAttribute.java new file mode 100644 index 00000000..7ddc0bb8 --- /dev/null +++ b/src/main/java/ru/betterend/item/EndAttribute.java @@ -0,0 +1,10 @@ +package ru.betterend.item; + +import net.minecraft.world.entity.ai.attributes.Attribute; + +public class EndAttribute extends Attribute { + + public EndAttribute(String description, double value) { + super(description, value); + } +} diff --git a/src/main/java/ru/betterend/mixin/common/ArmorItemAccessor.java b/src/main/java/ru/betterend/mixin/common/ArmorItemAccessor.java deleted file mode 100644 index efd97bf5..00000000 --- a/src/main/java/ru/betterend/mixin/common/ArmorItemAccessor.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.betterend.mixin.common; - -import java.util.UUID; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import com.google.common.collect.Multimap; - -import net.minecraft.world.entity.ai.attributes.Attribute; -import net.minecraft.world.entity.ai.attributes.AttributeModifier; -import net.minecraft.world.item.ArmorItem; - -@Mixin(ArmorItem.class) -public interface ArmorItemAccessor { - @Accessor("ARMOR_MODIFIER_UUID_PER_SLOT") - UUID[] be_getModifiers(); - - @Accessor("defaultModifiers") - Multimap be_getDefaultModifiers(); - - @Accessor("defaultModifiers") - void be_setDefaultModifiers(Multimap attributeModifiers); -} diff --git a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java index 35cc80c6..18be24d1 100644 --- a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java @@ -1,7 +1,22 @@ package ru.betterend.mixin.common; -import java.util.Collection; - +import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.Mth; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.ai.attributes.AttributeMap; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.animal.FlyingAnimal; +import net.minecraft.world.item.ElytraItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -10,26 +25,12 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import net.minecraft.sounds.SoundEvent; -import net.minecraft.util.Mth; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffects; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.ai.attributes.AttributeModifier; -import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.entity.animal.FlyingAnimal; -import net.minecraft.world.item.ElytraItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.phys.Vec3; +import ru.betterend.interfaces.MobEffectApplier; import ru.betterend.item.ArmoredElytra; +import ru.betterend.item.CrystaliteArmor; +import ru.betterend.registry.EndAttributes; + +import java.util.Collection; @Mixin(LivingEntity.class) public abstract class LivingEntityMixin extends Entity { @@ -56,8 +57,38 @@ public abstract class LivingEntityMixin extends Entity { @Shadow public abstract boolean isFallFlying(); + @Shadow + public abstract AttributeMap getAttributes(); + private Entity lastAttacker; + @Inject(method = "createLivingAttributes", at = @At("RETURN"), cancellable = true) + private static void be_createLivingAttributes(CallbackInfoReturnable info) { + info.setReturnValue(EndAttributes.addLivingEntityAttributes(info.getReturnValue())); + } + + @Inject(method = "tickEffects", at = @At("HEAD")) + protected void be_applyEffects(CallbackInfo info) { + if (!level.isClientSide()) { + LivingEntity owner = LivingEntity.class.cast(this); + if (CrystaliteArmor.hasFullSet(owner)) { + CrystaliteArmor.applySetEffect(owner); + } + getArmorSlots().forEach(itemStack -> { + if (itemStack.getItem() instanceof MobEffectApplier) { + ((MobEffectApplier) itemStack.getItem()).applyEffect(owner); + } + }); + } + } + + @Inject(method = "canBeAffected", at = @At("HEAD"), cancellable = true) + public void be_canBeAffected(MobEffectInstance mobEffectInstance, CallbackInfoReturnable info) { + if (mobEffectInstance.getEffect() == MobEffects.BLINDNESS && getAttributes().getValue(EndAttributes.BLINDNESS_RESISTANCE) > 0.0) { + info.setReturnValue(false); + } + } + @Inject(method = "hurt", at = @At("HEAD")) public void be_hurt(DamageSource source, float amount, CallbackInfoReturnable info) { this.lastAttacker = source.getEntity(); @@ -80,9 +111,8 @@ public abstract class LivingEntityMixin extends Entity { if (isFlying && !onGround && !isPassenger() && !hasEffect(MobEffects.LEVITATION)) { if (ElytraItem.isFlyEnabled(itemStack)) { if ((fallFlyTicks + 1) % 20 == 0) { - itemStack.hurtAndBreak(1, LivingEntity.class.cast(this), (livingEntity) -> { - livingEntity.broadcastBreakEvent(EquipmentSlot.CHEST); - }); + itemStack.hurtAndBreak(1, LivingEntity.class.cast(this), + livingEntity -> livingEntity.broadcastBreakEvent(EquipmentSlot.CHEST)); } isFlying = true; } else { diff --git a/src/main/java/ru/betterend/registry/EndAttributes.java b/src/main/java/ru/betterend/registry/EndAttributes.java new file mode 100644 index 00000000..b52db44b --- /dev/null +++ b/src/main/java/ru/betterend/registry/EndAttributes.java @@ -0,0 +1,20 @@ +package ru.betterend.registry; + +import net.minecraft.core.Registry; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import ru.betterend.item.EndAttribute; + +public class EndAttributes { + public final static Attribute BLINDNESS_RESISTANCE = registerAttribute("generic.blindness_resistance", 0.0, true); + + public static Attribute registerAttribute(String name, double value, boolean syncable) { + return Registry.register(Registry.ATTRIBUTE, name, new EndAttribute("attribute.name." + name, value).setSyncable(syncable)); + } + + public static AttributeSupplier.Builder addLivingEntityAttributes(AttributeSupplier.Builder builder) { + return builder.add(EndAttributes.BLINDNESS_RESISTANCE); + } +} + + diff --git a/src/main/java/ru/betterend/registry/EndItems.java b/src/main/java/ru/betterend/registry/EndItems.java index 74e8827f..388ceddf 100644 --- a/src/main/java/ru/betterend/registry/EndItems.java +++ b/src/main/java/ru/betterend/registry/EndItems.java @@ -33,15 +33,7 @@ import net.minecraft.world.item.Tiers; import net.minecraft.world.level.block.DispenserBlock; import ru.betterend.BetterEnd; import ru.betterend.config.Configs; -import ru.betterend.item.ArmoredElytra; -import ru.betterend.item.DrinkItem; -import ru.betterend.item.EnchantedPetalItem; -import ru.betterend.item.EndArmorItem; -import ru.betterend.item.EndBucketItem; -import ru.betterend.item.EndSpawnEggItem; -import ru.betterend.item.EternalCrystalItem; -import ru.betterend.item.PatternedDiscItem; -import ru.betterend.item.PatternedItem; +import ru.betterend.item.*; import ru.betterend.item.material.EndArmorMaterial; import ru.betterend.item.material.EndToolMaterial; import ru.betterend.item.tool.EndAxeItem; @@ -90,10 +82,10 @@ public class EndItems { public static final Item AETERNIUM_CHESTPLATE = registerItem("aeternium_chestplate", new EndArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.CHEST, makeItemSettings().fireResistant())); public static final Item AETERNIUM_LEGGINGS = registerItem("aeternium_leggings", new EndArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.LEGS, makeItemSettings().fireResistant())); public static final Item AETERNIUM_BOOTS = registerItem("aeternium_boots", new EndArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.FEET, makeItemSettings().fireResistant())); - public static final Item CRYSTALITE_HELMET = registerItem("crystalite_helmet", new EndArmorItem(EndArmorMaterial.CRYSTALITE, EquipmentSlot.HEAD, makeItemSettings().rarity(Rarity.UNCOMMON))); - public static final Item CRYSTALITE_CHESTPLATE = registerItem("crystalite_chestplate", new EndArmorItem(EndArmorMaterial.CRYSTALITE, EquipmentSlot.CHEST, makeItemSettings().rarity(Rarity.UNCOMMON))); - public static final Item CRYSTALITE_LEGGINGS = registerItem("crystalite_leggings", new EndArmorItem(EndArmorMaterial.CRYSTALITE, EquipmentSlot.LEGS, makeItemSettings().rarity(Rarity.UNCOMMON))); - public static final Item CRYSTALITE_BOOTS = registerItem("crystalite_boots", new EndArmorItem(EndArmorMaterial.CRYSTALITE, EquipmentSlot.FEET, makeItemSettings().rarity(Rarity.UNCOMMON))); + public static final Item CRYSTALITE_HELMET = registerItem("crystalite_helmet", new CrystaliteHelmet()); + public static final Item CRYSTALITE_CHESTPLATE = registerItem("crystalite_chestplate", new CrystaliteChestplate()); + public static final Item CRYSTALITE_LEGGINGS = registerItem("crystalite_leggings", new CrystaliteLeggings()); + public static final Item CRYSTALITE_BOOTS = registerItem("crystalite_boots", new CrystaliteBoots()); public static final Item ARMORED_ELYTRA = registerItem("elytra_armored", new ArmoredElytra("elytra_armored", EndArmorMaterial.AETERNIUM, Items.PHANTOM_MEMBRANE, 900, 0.96D, true)); // Tools // diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index 89c9cea9..bb3bdb69 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -865,5 +865,7 @@ "item.betterend.blossom_berry_jelly": "Blossom Berry Jelly", "item.betterend.aeternium_forged_plate": "Aeternium Forged Plate", "item.betterend.terminite_forged_plate": "Terminite Forged Plate", - "item.betterend.thallasium_forged_plate": "Thallasium Forged Plate" + "item.betterend.thallasium_forged_plate": "Thallasium Forged Plate", + + "attribute.name.generic.blindness_resistance": "Blindness Resistance" } diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index 84f80be2..7a436e23 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -881,5 +881,7 @@ "item.betterend.blossom_berry_jelly": "Желе из цветущей ягоды", "item.betterend.aeternium_forged_plate": "Этериевая кованная пластина", "item.betterend.terminite_forged_plate": "Терминитовая кованная пластина", - "item.betterend.thallasium_forged_plate": "Талласиевая кованная пластина" + "item.betterend.thallasium_forged_plate": "Талласиевая кованная пластина", + + "attribute.name.generic.blindness_resistance": "Сопротивление ослеплению" } \ No newline at end of file diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index f2385740..5ce12bbf 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -22,7 +22,6 @@ "BlockBehaviourMixin", "DimensionTypeMixin", "RecipeManagerMixin", - "ArmorItemAccessor", "BoneMealItemMixin", "CraftingMenuMixin", "LivingEntityMixin",