Set Bonuses - chronosacaria/MCDungeonsArmors GitHub Wiki

Note that these effects only take place if the full armor set is equipped unless otherwise stated.

Summary

Armor Set Effect
Splendid Robe Splendid AOE
Beenest Armor Buzzy Hive
Beehive Armor Buzzy Hive
Hero's Armor Hero of the Village
Rugged Climbing Gear Rugged Climbing, Lightfooted
Titan's Shroud Titan's Shroud
Opulent Armor Luck
Gilded Glory Hero of the Village, Gilded Totem
Gilded Glory (cont.) Gilded Damage, False Idol
Troubadour Troubadour's Charisma
Ember Robe Ember Jump
Verdant Robe Sylvan Presence
Ghost Kindler Ghost Kindling , Ghost Kindler Trail
Goat Gear Lightfooted
Wither Armor Withered
Gourdian Armor Gourdian's Hatred
Curious Armor Curious Teleportation
Archer's Armor Archer's Prowess
Living Vines Armor Fire Resistance
Sprout Armor Fire Resistance
Renegade Armor Renegade's Rush
Hungry Horror Hunger , Hunger Pains
Mystery Armor Mystery Effects
Shadow Walker Sprinting , No Fall Damage
Phantom Armor Slow Falling
Frost Bite Slow Falling, Frost Bite
Golden Piglin Armor Piglin Fooling
Cauldron Armor Cauldron's Overflow
Stalwart Armor Stalwart Bulwark
Highland Armor Haste
Sturdy Shulker Armor Levitation Immunity , Shulker Bullets
Snow Armor Lightfooted
Frost Armor Fluid Freezing
Souldancer Robe Souldancer's Grace, Souldancer Experience
Cave Crawler Haste
Glow Squid Armor Water Breathing
Teleportation Robe Enderman-like (EL) Teleportation
Unstable Robe Controlled Teleportation or EL Telportation
Thief Armor Invisibility
Spider Armor Wall Climbing , Cobweb Walking
Nimble Turtle Armor Nimble Turtle Resilience
Black Wolf Armor Leader of the Pack
Fox Armor Sweet Berry Bush Walking, Fox's Pounce
Arctic Fox Armor Sweet Berry Bush Walking, Fox's Pounce
Arctic Fox Armor (cont.) Arctic High Ground, Sweet Berry Speed

Details

Splendid Robe

Splendid AOE

  • Whenever the user strikes a target with a non-projectile, vexes attack nearby monsters.
  • This happens on a 30% chance.
  • The damage to be done is based on the attribute damage of the mainhand of the user.
  • The user's hand must not be empty.
  • Illagers take 1.5x damage from this effect.
  • The entity struck that allowed for this ability to trigger is not affected by the ability.
  • The ability has an effective range of 6 blocks.
for (LivingEntity nearbyEntity : AOEHelper.getAoeTargets(target, livingEntity, 6.0f)){
    float damageToBeDone = (float) livingEntity.getAttributeValue(EntityAttributes.GENERIC_ATTACK_DAMAGE);
    if (nearbyEntity instanceof IllagerEntity){
        damageToBeDone = damageToBeDone * 1.5f;
    }
    if (nearbyEntity instanceof Monster && nearbyEntity != target){
        nearbyEntity.damage(DamageSource.GENERIC, damageToBeDone);
        CleanlinessHelper.playCenteredSound(nearbyEntity, SoundEvents.ENTITY_VEX_CHARGE, 1f, 1f);
        AOEHelper.addParticlesToBlock((ServerWorld) nearbyEntity.world, nearbyEntity.getBlockPos(), ParticleTypes.ENCHANTED_HIT);
    }
}

Beenest Armor

Buzzy Hive

  • When the user takes damage, summon a bee that will attack the user's attacker.
  • If the bee does not detect an attacker, it will search for what the wearer is attacking.
  • The bee is identical to bees in vanilla Minecraft for all intense and purposes.
  • The bee as consequence will lose its stinger but not despawn immediately. Rather it will just fly around without its stinger.
  • In order to spawn the bee, the wearer must be taking damage from a living entity and the damage must be greater than 0.
  • The bee has a 10% chance to spawn.
  • There is no limit on how many bees you may spawn and there is no time restriction.
if (percentToOccur(beeSummonChance)) {
    World world = targetedEntity.getEntityWorld();
    SummonedBeeEntity summonedBeeEntity = summonedBee.create(world);
    if (summonedBeeEntity != null) {
        summonedBeeEntity.setSummoner(targetedEntity);
        summonedBeeEntity.refreshPositionAndAngles(targetedEntity.getX(), targetedEntity.getY() + 1, targetedEntity.getZ(), 0, 0);
        world.spawnEntity(summonedBeeEntity);
    }
}

Beehive Armor

Buzzy Hive

  • When the user takes damage, summon a bee that will attack the user's attacker.
  • If the bee does not detect an attacker, it will search for what the wearer is attacking.
  • The bee is identical to bees in vanilla Minecraft for all intense and purposes.
  • The bee as consequence will lose its stinger but not despawn immediately. Rather it will just fly around without its stinger.
  • In order to spawn the bee, the wearer must be taking damage from a living entity and the damage must be greater than 0.
  • The bee has a 30% chance to spawn.
  • There is no limit on how many bees you may spawn and there is no time restriction.
if (percentToOccur(beeSummonChance)) {
    World world = targetedEntity.getEntityWorld();
    SummonedBeeEntity summonedBeeEntity = summonedBee.create(world);
    if (summonedBeeEntity != null) {
        summonedBeeEntity.setSummoner(targetedEntity);
        summonedBeeEntity.refreshPositionAndAngles(targetedEntity.getX(), targetedEntity.getY() + 1, targetedEntity.getZ(), 0, 0);
        world.spawnEntity(summonedBeeEntity);
    }
}

Hero's Armor

Hero of the Village

  • Gain the "Hero of the Village" status effect. The status effect functions identically to vanilla Minecraft.

Rugged Climbing Gear

Rugged Climbing

  • Can climb walls and stick on them.
  • Vertical ascension is at half the rate of a ladder and horizontal movement speed is divided by 3.5.
  • Sneaking allows the player to cancel vertical movement on a wall.
// If Statement provided by Apace100; Thanks, Apace!
if (mcdaBoundingBox(playerEntity, 0.01f)
        || mcdaBoundingBox(playerEntity, -0.01f)) {
    playerEntity.setOnGround(true);
    playerEntity.onLanding();
    double f = 0.1D;
    double x = MathHelper.clamp(playerEntity.getVelocity().x, -f, f);
    double z = MathHelper.clamp(playerEntity.getVelocity().z, -f, f);
    double y = Math.max(playerEntity.getVelocity().y, -f);
    if (y < 0.0D && !playerEntity.getBlockStateAtPos().isOf(Blocks.SCAFFOLDING) && playerEntity.isSneaking()) {
        y = 0.0D;
    } else if (playerEntity.horizontalCollision
            && !playerEntity.getBlockStateAtPos().isOf(Blocks.SCAFFOLDING)
            && !playerEntity.getBlockStateAtPos().isOf(Blocks.VINE)) {
        x /= 3.5D;
        y = f/2;
        z /= 3.5D;
    }
    playerEntity.setVelocity(x, y, z);
    return true;

Lightfooted

  • Can walk on top of powdered snow without falling into it.
  • This effect does not prevent the wearer from walking into the powdered snow from the side.
  • Only the boots in the armor set are required for this effect to take place.
if (((LivingEntity)entity).getEquippedStack(EquipmentSlot.FEET).isOf(ArmorsRegistry.armorItems.get(ArmorSets.RUGGED_CLIMBING_GEAR).get(EquipmentSlot.FEET)) ||
((LivingEntity)entity).getEquippedStack(EquipmentSlot.FEET).isOf(ArmorsRegistry.armorItems.get(ArmorSets.GOAT).get(EquipmentSlot.FEET)))
  cir.setReturnValue(true);

Titan's Shroud

Titan's Shroud

  • Upon Striking a target, afflict target with one of the effects from the list below at random.

  • Some amount of damage must be done to trigger the effect. Damage cannot be 0.

  • There is a 100% chance of application of the status.

  • The status lasts for 3 seconds on the target before it expires.

    Titan's Shroud Effect List:

    • Hunger
    • Nausea
    • Blindness
    • Mining Fatigue
    • Slowness
    • Unluck
    • Weakness
StatusEffect titanStatusEffect =
  TITAN_SHROUD_STATUS_EFFECTS_LIST.get(playerEntity.getRandom().nextInt
  (TITAN_SHROUD_STATUS_EFFECTS_LIST.size()));

target.addStatusEffect(new StatusEffectInstance(titanStatusEffect, 60, 0));

Opulent Armor

Luck

  • Gain the "Luck" status effect. The status effect functions identically to vanilla Minecraft.
  • The Luck status effect gives the wearer +1 to their luck statistic.
  • Note that luck does not change loot tables but merely increases the likelihood of receiving a better average item whenever luck comes into play
  • Luck comes into play when generating chest loot, fishing, and somewhere else probably :).

Gilded Glory

Hero of the Village

  • Gain the "Hero of the Village" status effect. The status effect functions identically to vanilla Minecraft.
  • The wearer only gains the effect if they already had it.
  • This just means that with this armor, HOTV infinitely refreshes its cooldown.

Gilded Totem

  • If the wearer would die, instead reduce the durability of the highest durability piece of the set equipped by 50%.
  • If there is no piece above 50%, the highest durability piece breaks instead.
  • This takes place before totem of undying would happen.
  • This only takes effect if the wearer had HOTV at time of death.
  • This effect functions identically to Totems of Undying, including the clearing of all status effects.
int index = mcdaFindHighestDurabilityEquipment(livingEntity);
EquipmentSlot equipmentSlot = switch (index) {
    case 0 -> EquipmentSlot.FEET;
    case 1 -> EquipmentSlot.LEGS;
    case 2 -> EquipmentSlot.CHEST;
    case 3 -> EquipmentSlot.HEAD;
    // Never reached but make Java happy
    default -> throw new IllegalStateException("Unexpected value: " + index);
};
mcdaDamageEquipment(livingEntity,equipmentSlot, 0.5f);
return true;

Gilded Damage

  • The wearer deals an additional 50% of the user's weapon attribute value to Illagers.
  • This only takes effect if the user has HOTV.

False Idol

  • Gain the "Hero of the Village" status effect. The status effect functions identically to vanilla Minecraft.
  • This is achieved by right clicking to use emeralds when the user has at least 10 emeralds in their hand stack.
  • This will consume 10 emeralds and reward the user with HOTV.

Troubadour

Troubadour's Charisma

  • When potions are consumed, the duration is altered.
  • Positive effects are doubled in length, while negative effects are halved.
  • If a player has 12 minutes of a positive effect and the player drinks a potion of 8 minutes with the same effect, the effect will update to be 16 minutes still.
// Positive Effect
if (instance.getEffectType().getCategory().equals(StatusEffectCategory.BENEFICIAL)) {
  // Positive Effect
  interceptedDuration = instance.getDuration() * 2;
} else if (instance.getEffectType().getCategory().equals(StatusEffectCategory.HARMFUL)){
  // Negative Effect
  interceptedDuration = instance.getDuration() / 2;
}

Ember Robe

Ember Jump

  • Ignite all monsters within 6 blocks of the user.
  • Activate this effect by jumping while sneaking.
  • Although there is technically no cooldown, spamming the use of this ability will cause the armors' durability to degrade rapidly.
  • Permit a 2 second break between each use to prevent losing durability.
  • The ignited monsters are set on fire for 5 seconds.
for (LivingEntity nearbyEntity : AOEHelper.getAoeTargets(livingEntity, livingEntity, 6.0f)) {
  if (nearbyEntity instanceof Monster){
      nearbyEntity.setOnFireFor(5);
      playFireSound = true;
  }
}
if (playFireSound) {
    if (mcdaCooldownCheck(livingEntity, 40))
        mcdaRandomArmorDamage(livingEntity, 0.10f, 3, true);
    CleanlinessHelper.playCenteredSound(livingEntity, SoundEvents.ENTITY_BLAZE_SHOOT, 1f, 1f);
}

Verdant Robe

Sylvan Presence

  • When the user is sneaking, nearby crops are fertilized.
  • The user may move during this.
  • Every second if the wearer is sneaking the armor attempts to fertilize nearby crops.
  • Fertilization mimics the use of bone meal.
  • The effect only occurs up to 3 blocks away from the user.
if (fertilizable.isFertilizable(world, blockPos2, checkstate, world.isClient)) {
  if (world instanceof ServerWorld) {
      if (fertilizable.canGrow(world, world.random, blockPos2, checkstate)) {
          fertilizable.grow((ServerWorld) world, world.random, blockPos2, checkstate);
          AOEHelper.addParticlesToBlock((ServerWorld) world, blockPos2,
                  ParticleTypes.HAPPY_VILLAGER);
      }
  }

Ghost Kindler

Ghost Kindling

  • When the user hits a living entity, the target is set ablaze.
  • The user must not have an empty main hand. Anything in the mainhand will allow this ability to function.
  • The target is set on fire for 4 seconds.
  • This is functionally equivalent to fire aspect.

Ghost Kindler Trail

  • While moving, any Monster entities that are within 3 blocks behind you will be set ablaze.
  • The targets are set on fire for 5 seconds.
  • This is functionally the same as the fire trail enchantment but it only affects entities.
for (LivingEntity nearbyEntity : AOEHelper.getAoeTargets(playerEntity, playerEntity, 3.0f)){
    if (nearbyEntity instanceof Monster){
        if (blockPos.offset(playerEntity.getMovementDirection().
        getOpposite()).isWithinDistance(nearbyEntity.getPos(), 3)) {

            nearbyEntity.setOnFireFor(5);
            AOEHelper.addParticlesToBlock((ServerWorld) playerEntity.world, 
                playerEntity.getBlockPos(), ParticleTypes.FLAME);
        }
    }
}

Goat Gear

Lightfooted

  • Can walk on top of powdered snow without falling into it.
  • This effect does not prevent the wearer from walking into the powdered snow from the side.
  • Only the boots in the armor set are required for this effect to take place.
if (((LivingEntity)entity).getEquippedStack(EquipmentSlot.FEET).isOf(ArmorsRegistry.armorItems.get(ArmorSets.RUGGED_CLIMBING_GEAR).get(EquipmentSlot.FEET)) ||
((LivingEntity)entity).getEquippedStack(EquipmentSlot.FEET).isOf(ArmorsRegistry.armorItems.get(ArmorSets.GOAT).get(EquipmentSlot.FEET)))
  cir.setReturnValue(true);

Wither Armor

Withered

  • When struck, inflict the "Wither" status effect to attackers. The status effect functions identically to vanilla Minecraft.
  • The application of the effect is guaranteed.
  • The wither effect is applied for 6 seconds.
  • Applications do not stack but an application while the entity already is applied with the status effect will refresh the duration provided it is longer than the current status instance.
attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.WITHER, 120, 0));

Gourdian Armor

Gourdian's Hatred

  • Upon killing an entity, gain the "Strength II" (Strength 2) status effect. The status effect functions identically to vanilla Minecraft.
  • The effect has a 15% chance to occur.
  • The status effect lasts for 10 seconds.
float hatredRand = user.getRandom().nextFloat();
  if (hatredRand <= 0.15F)
    ArmorEffects.applyGourdiansHatredStatus(user);
StatusEffectInstance strength = new StatusEffectInstance(StatusEffects.STRENGTH, 200, 1);
  livingEntity.addStatusEffect(strength);

Curious Armor

Curious Teleportation

  • When the user takes damage, there is a chance to teleport either the user, or the attacker.
  • The chance for a curious teleportation to occur is 10%.
  • Then if is a 50% chance for the teleported entity to be the user. If the user is not teleported for the curious teleportation, the attacker is.
  • The teleportation method is the same as the teleportation robe's teleportation.
  • Finds a random safe location to teleport within 16 blocks of the wearer.
  • After a location is found, the wearer stops riding anything (horse, minecart, boat, etc.) they were riding if they were, then teleports to that location.
  • A location is considered safe if there is enough room for the wearer without suffocation or collision and is not a fluid. The wearer will always be teleported on top of a solid block.
float teleportationRand = playerEntity.getRandom().nextFloat();
if (teleportationRand <= 0.1F) {
    if (playerEntity.getRandom().nextBoolean())
        endermanLikeTeleportEffect(playerEntity);
    else
        endermanLikeTeleportEffect(target);
}

Archer's Armor

Archer's Prowess

  • Arrow Type Persistent Projectile Entities owned by the user receive a 1.5x damage multiplier. (Note: This does not affect TridentEntites)
  • The most common PPE is an arrow (but includes tipped arrows and spectral arrows), and that will be the primary use of this armor.
  • If for some reason, the entire set is not equipped when the arrow strikes its target, the arrow will deal normal damage.

Living Vines Armor

Fire Resistance

  • Gain the "Fire Resistance" status effect. The status effect functions identically to vanilla Minecraft.
  • Disable the fire particle overlay that is displayed when on fire or when in lava.
  • Functionally identical to Sprout Armor.

Sprout Armor

Fire Resistance

  • Gain the "Fire Resistance" status effect. The status effect functions identically to vanilla Minecraft.
  • Disable the fire particle overlay that is displayed when on fire or when in lava.
  • Functionally identical to Living Vines Armor.

Renegade Armor

Renegade's Rush

  • Gain the "Strength III" status effect while sprinting. The status effect functions identically to vanilla Minecraft.
  • This does not take any effect if the user somehow gains a strength effect of greater or equal magnitude.
if (playerEntity.isSprinting()) {
    StatusEffectInstance strength = 
        new StatusEffectInstance(StatusEffects.STRENGTH, 42, 2, false, false);
    playerEntity.addStatusEffect(strength);
}

Hungry Horror

Hunger

  • Gain the "Hunger II" status effect. The status effect functions identically to vanilla Minecraft.
  • This is a negative status effect.
  • The hunger bar will appear green while the status is active.

Hunger Pains

  • Recieves Strength depending on level of hunger.
    • When between 6 and 9 full food bars, gain the "Strength I" status effect.
    • When between 3 and 6 full food bars, gain the "Strength II" status effect.
    • When between 0 and 3 full food bars, gain the "Strength III" status effect.
    • All of these strength effects function identically to vanilla Minecraft and do not stack with other sources that give the strength effect.
  • When the wearer is under 3 full food bars (including at 3), the wearer will take .5 starvation damage every 1.5 seconds.
  • When at 0 hunger, the damage from the aforementioned effect will stack with normal starvation.
if(foodLevel <= 18){
  if (foodLevel > 12){
    //apply Strength 1
    StatusEffectInstance snacky = new StatusEffectInstance(StatusEffects.STRENGTH, 42, 0, false, true);
    playerEntity.addStatusEffect(snacky);
  } else if (foodLevel > 6){
    //apply Strength 2
    StatusEffectInstance tummyGrumbles = new StatusEffectInstance(StatusEffects.STRENGTH, 42, 1, false, true);
    playerEntity.removeStatusEffect(StatusEffects.STRENGTH);
    playerEntity.addStatusEffect(tummyGrumbles);
  } else if (foodLevel <= 6){
    //Sooner Starvation
    playerEntity.damage(DamageSource.STARVE, 0.5f);
    //apply Strength 3
    StatusEffectInstance hungerPain = new StatusEffectInstance(StatusEffects.STRENGTH, 42, 2, false, true);
    playerEntity.removeStatusEffect(StatusEffects.STRENGTH);
    playerEntity.addStatusEffect(hungerPain);
  }
}

Mystery Armor

Mystery Effect

  • Gain a random effect from the list of the corresponding color.
    • This is done through nbt.
      • By default, both nbt's are created when the armor piece is crafted or generated as loot in a loot table.
      • Each armor is assigned a "dominance" nbt integer. The highest dominance equipped dictates the effect that takes place.
      • Each armor is assigned a random effect from their list. The number is the index of the effect that is used.
  • White Mystery Armor's pool is all other colors' pools combined.
  • In order to gain the effects for the respective color, a single color's full set must be equipped.

Effect Lists

  • Note: MYSTERY_EFFECTS is tied to the config that disables the abilities and is not an actual effect.
  • The "mystery_effect" nbt on Red Mystery Armor is not going to match up with the White Mystery Armor.
    • For example: Red Mystery Armor with "mystery_effect = 4" is LEADER_OF_THE_PACK but White Mystery Armor with the same nbt is GHOST_KINDLING.
public static final List<ArmorEffectID> ARMOR_EFFECT_ID_LIST =
  List.of(MYSTERY_EFFECTS, CURIOUS_TELEPORTATION, FIRE_RESISTANCE, FLUID_FREEZING, FROST_BITE_EFFECT,
      GHOST_KINDLING, GOURDIANS_HATRED, HASTE, HERO_OF_THE_VILLAGE, INVISIBILITY, LEADER_OF_THE_PACK,
      LUCK, NIMBLE_TURTLE_EFFECTS, NO_FALL_DAMAGE, RENEGADES_RUSH, SHULKER_LIKE, SLOW_FALLING,
      SPIDER_CLIMBING, SPRINTING, STALWART_BULWARK, SYLVAN_PRESENCE, WATER_BREATHING, WEB_WALKING,
      WITHERED, GHOST_KINDLER_TRAIL);

public static final List<ArmorEffectID> RED_ARMOR_EFFECT_ID_LIST =
  List.of(MYSTERY_EFFECTS, FIRE_RESISTANCE, GHOST_KINDLING, GOURDIANS_HATRED, LEADER_OF_THE_PACK,
      RENEGADES_RUSH,STALWART_BULWARK, WITHERED, GHOST_KINDLER_TRAIL);

public static final List<ArmorEffectID> GREEN_ARMOR_EFFECT_ID_LIST =
  List.of(MYSTERY_EFFECTS, HASTE, HERO_OF_THE_VILLAGE, LUCK, NO_FALL_DAMAGE, SYLVAN_PRESENCE);

public static final List<ArmorEffectID> BLUE_ARMOR_EFFECT_ID_LIST =
  List.of(MYSTERY_EFFECTS, FLUID_FREEZING, FROST_BITE_EFFECT, NIMBLE_TURTLE_EFFECTS, SLOW_FALLING, WATER_BREATHING);

public static final List<ArmorEffectID> PURPLE_ARMOR_EFFECT_ID_LIST =
  List.of(MYSTERY_EFFECTS, CURIOUS_TELEPORTATION, INVISIBILITY, SHULKER_LIKE, SPIDER_CLIMBING,
      SOULDANCER_GRACE, SPRINTING, WEB_WALKING);

Configs

  • MYSTERY_EFFECTS_ON_CRAFTING
    • Controls if the armors are given the nbt when crafted.
    • Note that even with this disabled, as long as the player is wearing one piece that does have the nbt, they will receive the effect.
  • Mystery Effects
    • Controls if the armors do anything.
    • By disabling this config, nbt will still be assigned but will not result in any effect with the armor.

Shadow Walker

Sprinting

  • While sprinting, gain the "Speed" status effect. The status effect functions identically to vanilla Minecraft.
  • The status effect is only checked to be applied every 1.5 seconds, so there may be a delay between when sprinting begins and when the status effect is applied.
  • The status effect stacks with the speed modifier inherent in the armor.
  • If the player were to gain the speed effect through some alternative source such as a beacon, the effect would not stack as both are the same status and the application with higher duration would simply take priority and overwrite the other.

No Fall Damage

  • Negate all fall damage.
  • This does not protect against collision damage nor entity cramming.
int i = this.computeFallDamage(fallDistance, damageMultiplier);
  if (i > 0)
    cir.setReturnValue(true);

Phantom Armor

Slow Falling

  • Gain the "Slow Falling" status effect. The status effect functions identically to vanilla Minecraft.

Frost Bite

Slow Falling

  • Gain the "Slow Falling" status effect. The status effect functions identically to vanilla Minecraft.

Frost Bite

  • Upon striking a target, afflict target with the "Freezing" status effect. The status effect functions identically to vanilla Minecraft.
  • Some amount of damage must be done to trigger the effect. Damage cannot be 0.
  • There is a 100% chance of application of the status.
  • The status lasts for 3 seconds on the target before it expires.
target.addStatusEffect(new StatusEffectInstance
  (StatusEffectsRegistry.FREEZING, 60, 0, true, true, false));

Golden Piglin Armor

Piglin Fooling

  • Piglins will not attack the wearer on sight.
  • Piglins still attack the wearer in retaliation.
  • This effect does not extend to Piglin Brutes.
  • The effect is identical to treating the wearer as though they are wearing a piece of gold armor.
  • Piglins will jitter slightly when looking at the wearer due to implementation. Do not worry, you are still safe.
@Inject(method = "wearsGoldArmor", at = @At(value = "RETURN"), cancellable = true)
  private static void onPiglinSelectPlayerToAttack
    (LivingEntity entityCallbackInfoReturnable<Boolean> cir)
  //...Checks for full set equipped
  cir.setReturnValue(true);

Cauldron Armor

Cauldron's Overflow

  • Upon taking damage, a potion "drops out of the cauldron".

  • The damage must be greater than 0.

  • The effect has a 15% chance to occur.

  • The potion that drops will be an unenhanced version, that is 4 minute and base amplitude, of one of the potions from the list, chosen at random.

    Cauldron's Overflow Potion List:

    • Strength
    • Swiftness
    • Invisibility
//Damage can be 0 if target's armor is high enough
if (amount != 0.0F) {
  //...Check that user is wearing the full armor set
  float overflowRand = targetedEntity.getRandom().nextFloat();
    if (overflowRand <= 0.15F) {
      ArmorEffects.applyCauldronsOverflow(targetedEntity);
    }
}

Stalwart Armor

Stalwart Bulwark

  • If the wearer would take knockback while sneaking, negate it.
  • While sneaking, gain the "Resistance" status effect. The status effect functions identically to vanilla Minecraft.
  • This is "Resistance I" (Resistance 1) which is the lowest level of resistance.

Highland Armor

Haste

  • Gain the "Haste" status effect. The status effect functions identically to vanilla Minecraft.
  • This is "Haste I" (Haste 1) which is the lowest level of haste.
  • The effect is only applied when the wearer is above a Y-level of 100.
  • The Y-level can be checked by pressing F3. It is displayed in the second block on the left on the top line where it says ~ / Y-level / ~ .
if (playerEntity.getY() > 100.0F && world.getTime() % 30 == 0) {
  //...Check that user is wearing the full armor set
  StatusEffectInstance haste =
    new StatusEffectInstance(StatusEffects.HASTE, 42, 0, false, false);
      playerEntity.addStatusEffect(haste);

Sturdy Shulker Armor

Levitation Immunity

  • When the wearer of the set has the "Levitation" status effect, it is removed.
  • The server will check every tick for the effect so there should be nearly no delay in removal of the effect.
if (playerEntity.hasStatusEffect(StatusEffects.LEVITATION))
  playerEntity.removeStatusEffect(StatusEffects.LEVITATION);

Shulker Bullets

  • When the wearer takes damage, a shulker bullet spawns from that position to seek out nearby enemies.
  • The shulker bullet functions identically to those fired by shulkers in the End with the exception that the armor's bullet travels a much more limited distance.
  • The shulker bullet will, indeed, still inflict the "Levitation" status effect to what it strikes.
  • Note that the damage taken need not be greater than 0 in order for the effect to trigger.
  • The number of nearby enemies must be greater than or equal to 2. Otherwise the effect, will not trigger.
  • Enemies are considered to be nearby if they are within the shulker bullet's distance, which is 10 blocks.
@Inject(method = "damage", at = @At("HEAD"))
  public void fireShulkerBulletOnDamage
  (DamageSource source, float amount, CallbackInfoReturnable<Boolean> cir)
  //...Check that user is wearing the full armor set
  ProjectileEffectHelper.fireShulkerBulletAtNearbyEnemy(playerEntity, 10);
ShulkerBulletEntity shulkerBulletEntity = 
  new ShulkerBulletEntity(world, user, target,
    Direction.Axis.pickRandomAxis(random));
// borrowed from AbstractSkeletonEntity
  double d = target.getX() - shulkerBulletEntity.getX();
  double e = target.getBodyY(0.3333333333333333D) - shulkerBulletEntity.getY();
  double f = target.getZ() - shulkerBulletEntity.getZ();
  double g = Math.sqrt(d * d + f * f);

  shulkerBulletEntity.setVelocity(user, user.getPitch(), user.getYaw(), 0.0F, 1.5F, 1.0F);
    setProjectileTowards(shulkerBulletEntity, d, e, g, 0);

    user.world.spawnEntity(shulkerBulletEntity);

Snow Armor

Lightfooted

  • Can walk on top of powdered snow without falling into it.
  • This effect does not prevent the wearer from walking into the powdered snow from the side.
  • Only the boots in the armor set are required for this effect to take place.
if (((LivingEntity)entity).getEquippedStack(EquipmentSlot.FEET).isOf(ArmorsRegistry.armorItems.get(ArmorSets.RUGGED_CLIMBING_GEAR).get(EquipmentSlot.FEET)) ||
((LivingEntity)entity).getEquippedStack(EquipmentSlot.FEET).isOf(ArmorsRegistry.armorItems.get(ArmorSets.GOAT).get(EquipmentSlot.FEET)))
  cir.setReturnValue(true);

Frost Armor

Fluid Freezer

  • Convert water source blocks into "Frosted Ice" and lava source blocks into "Crying Obsidian".
  • The effect occurs when walking on level ground with the source block of the fluid.
  • The effect takes place when the center of the source block's top face is within 3 blocks of the wearer's feet.
  • Frosted Ice reverts after being outside the wearer's 3 block radius for a short period of time.
  • Crying Obsidian formed this way will not revert, even after leaving the range of the effect.
  • The block above the source block must be air in order for the effect to take place.
  • The effect does nothing to flowing water or lava.
  • The effect occasionally will convert water and lava at a lower Y-level than where the wearer is standing. This might be a Minecraft issue. If anyone has any ideas, please open an issue report.
//THIS IS BY NO MEANS THE COMPLETE CODE
if (playerEntity.isOnGround()) {
  //Initialization stuff happened here

  while (var7.hasNext()) {
    if (blockPos2.isWithinDistance(playerEntity.getPos(), f)) {
      mutable.set(blockPos2.getX(), blockPos2.getY() + 1, blockPos2.getZ());
        if (blockState2.isAir()) {
          if (blockState3.getMaterial() == 
          Material.LAVA && blockState3.get(FluidBlock.LEVEL) == 0 
          && blockState.canPlaceAt(world, blockPos2) 
          && world.canPlace(blockState, blockPos2, ShapeContext.absent())) {
            world.setBlockState(blockPos2, blockState);
            world.createAndScheduleBlockTick
              (blockPos2, Blocks.CRYING_OBSIDIAN,
              MathHelper.nextInt(playerEntity.getRandom(), 60, 120));

Souldancer Robe

Souldancer's Grace

  • Dodge an attack, then gain the "Speed I" status effect while under water. The status effect functions identically to vanilla Minecraft.
  • Attacks that can be dodged are any attack from a living entity or a projectile.
  • Dodging an attack means that damage and knockback is canceled.
  • There is a 30% chance to dodge any given attack.
  • The speed lasts for 2.1 seconds.

Souldancer Experience

  • The wearer receives 1.5x experience from experience orbs.

Cave Crawler

Haste

  • Gain the "Haste" status effect. The status effect functions identically to vanilla Minecraft.
  • This is "Haste I" (Haste 1) which is the lowest level of haste.
  • The effect is only applied when the wearer is below a Y-level of 32.
  • The Y-level can be checked by pressing F3. It is displayed in the second block on the left on the top line where it says ~ / Y-level / ~ .
if (playerEntity.getY() < 32.0F && world.getTime() % 30 == 0) {
  //...Check that user is wearing the full armor set
  StatusEffectInstance haste =
    new StatusEffectInstance(StatusEffects.HASTE, 42, 0, false, false);
      playerEntity.addStatusEffect(haste);

Glow Squid Armor

Water Breathing

  • Gain the "Water Breathing" status effect while under water. The status effect functions identically to vanilla Minecraft.

Teleportation Robe

Enderman-like Teleportation

  • Finds a random safe location to teleport within 16 blocks of the wearer.
  • After a location is found, the wearer stops riding anything (horse, minecart, boat, etc.) they were riding if they were, then teleports to that location.
  • A location is considered safe if there is enough room for the wearer without suffocation or collision and is not a fluid. The wearer will always be teleported on top of a solid block.
  • Teleportation is achieved by sneaking, then jumping while still crouched.
for (int i = 0; i < 16; i++) {
  double teleportX = 
    livingEntity.getX() + (livingEntity.getRandom().nextDouble() - 0.5D) * 16.0D;
  double teleportY =
    MathHelper.clamp(livingEntity.getY() + 
    (double) (livingEntity.getRandom().nextInt(16) - 8),
    0.0D, world.getHeight() - 1);
  double teleportZ = 
    livingEntity.getZ() + 
    (livingEntity.getRandom().nextDouble() - 0.5D) * 16.0D;
  if (livingEntity.hasVehicle()) {
    livingEntity.stopRiding();
  }
}

Unstable Robe

Config file lets you choose between forms of teleportation for the Unstable Robe.

Controlled Teleportation

  • Teleport the wearer where they are looking if it is safe.
  • A location is considered safe if there is enough room for the wearer without suffocation or collision and is not a fluid. The wearer will always be teleported on top of a solid block.
  • If a location is not safe the teleportation fails and nothing happens.
  • There may be a slight jolt upon failing.
  • Teleportation is achieved by sneaking, then jumping while still crouched.
if (!world.isClient && !result.isInsideBlock()) {
  while(!positionIsFree) {
    teleportPos = livingEntity.getBlockPos();
    positionIsFree = positionIsClear(world, teleportPos) && world.raycast(new RaycastContext(eyeVec,
      Vec3d.ofCenter(teleportPos.up()),
      RaycastContext.ShapeType.COLLIDER, 
      RaycastContext.FluidHandling.NONE, livingEntity)).getType() == HitResult.Type.MISS;
            }
} else if (positionIsFree) {
  Vec3d.ofCenter(teleportPos);
}

Enderman-like Teleportation

  • If "Controlled_Teleportation" is set to false in the config, this form of teleportation will happen instead.
  • Finds a random safe location to teleport within 16 blocks of the wearer.
  • After a location is found, the wearer stops riding anything (horse, minecart, boat, etc.) they were riding if they were, then teleports to that location.
  • A location is considered safe if there is enough room for the wearer without suffocation or collision and is not a fluid. The wearer will always be teleported on top of a solid block.
  • Teleportation is achieved by sneaking, then jumping while still crouched.
for (int i = 0; i < 16; i++) {
  double teleportX = 
    livingEntity.getX() + (livingEntity.getRandom().nextDouble() - 0.5D) * 16.0D;
  double teleportY =
    MathHelper.clamp(livingEntity.getY() + 
    (double) (livingEntity.getRandom().nextInt(16) - 8),
    0.0D, world.getHeight() - 1);
  double teleportZ = 
    livingEntity.getZ() + 
    (livingEntity.getRandom().nextDouble() - 0.5D) * 16.0D;
  if (livingEntity.hasVehicle()) {
    livingEntity.stopRiding();
  }
}

Thief Armor

Invisibility

  • Gain the "Invisibility" status effect upon sneaking. The status effect functions identically to vanilla Minecraft.
  • The invisibility will cease if the wearer stops sneaking.
  • Note that invisibility is not true invisibility. Mobs can still detect you if they saw you when you became invisible or if you are produce enough noise (brandishing a weapon or come in close enough proximity). This is the same as vanilla's function.
  • The Thief Armor itself will become invisible while sneaking as well, but this is only true from players' perspectives and not as far as the game itself is concerned. This was done to enhance the PvP experience.
if (playerEntity.isSneaking()) {
  StatusEffectInstance invisibility = 
  new StatusEffectInstance(StatusEffects.INVISIBILITY, 42, 0, false, false);
    playerEntity.addStatusEffect(invisibility);
}

Spider Armor

Wall Climbing

  • When the wearer collides horizontally with a block, the wearer will start climbing.
  • The climbing itself functions nearly identically to climbing a ladder.
  • The climbing can be difficult to control and takes practice.
  • Also note that unlike ladders, you cannot stop yourself so you are always moving.
@Inject(method = "isClimbing", at = @At("HEAD"), cancellable = true)
  private void spiderArmourClimbing(CallbackInfoReturnable<Boolean> cir)
  //...Check if full armor is equipped
  if (this.horizontalCollision){
    cir.setReturnValue(true);
  }

Cobweb Walking

  • Cobwebs no longer slow you down.
  • This holds true on generated cobwebs such as the cobweb generated by Cobweb Shot from MCDW.
@Inject(method = "onEntityCollision", at = @At("HEAD"), cancellable = true)
  public void canWalkThroughCobwebs
  (BlockState state, World world, BlockPos pos, Entity entity, CallbackInfo ci)
  //...Check if full armor is equipped.
  ci.cancel();

Nimble Turtle Armor

Nimble Turtle Resilience

  • Upon taking damage, gain the "Resistance II" (Resistance 2) and "Regeneration II" (Regeneration 2) status effects. The status effects function identically to vanilla Minecraft.
  • The effect lasts for 3 seconds.
  • The damage taken must be greater than 0 in order for the effect to trigger.
  • The effect can trigger from non-combat damage such as drowning.
@Inject(method = "damage", at = @At("HEAD"))
  public void applyNimbleTurtleDamageEffects
  (DamageSource source, float amount, CallbackInfoReturnable<Boolean> cir)
  //...Check if full armor is equipped
  if (this.lastDamageTaken >= 0){
    ArmorEffects.applyNimbleTurtleEffects(playerEntity);
  }

Black Wolf Armor

Leader of the Pack

  • All tameable entities you own do 50% more damage.
  • TameableEntities in this instance usually refers to pets such as wolves but includes non-traditional fighters such as llamas.
if (petOwnerUUID != null) {
  Entity petOwner = serverWorld.getEntity(petOwnerUUID);
  if (petOwner instanceof LivingEntity) {
    float blackWolfArmourFactor = 1.5f;
    float newDamage = amount * blackWolfArmourFactor;
    target.damage(DamageSource.GENERIC, newDamage);
  }
}

Fox Armor

Sweet Berry Bush Walking

  • The wearer is uninterrupted by sweet berry bushes.
  • No damage is taken and movement speed is not reduced.
  • Armor does not lose durability as a result of this.

Fox's Pounce

  • The wearer will pounce at a nearby enemy.
  • The "pounce" is just a forced jump.
  • There is no direct benefit from this ability, it is mostly for flavor.
  • The enemy must be within 6 blocks for this to work.
  • The pounce is initiated by swinging at the intended pounce target while sneaking.
  • The wearer must be on the ground in order to pounce.
  • The current algorithm for this is not great and will be improved in the future with better raycasting or OBB's.
LivingEntity target = playerEntity.getEntityWorld().getClosestEntity(
        AbilityHelper.getPotentialPounceTargets(playerEntity, 6.0f),
        TargetPredicate.DEFAULT,
        playerEntity,
        playerEntity.getX(),
        playerEntity.getY(),
        playerEntity.getZ());
if (target == null) return;
// TODO Look into changing out brute force box to EntityDimensions#getBoxAt?
if (mcdaCanTargetEntity(playerEntity, target)){
    Vec3d vecHorTargetDist = new Vec3d((target.getX() - playerEntity.getX()),
            (target.getY() - playerEntity.getY()),(target.getZ() - playerEntity.getZ()));
    Vec3d vecVelHorTargetDist = vecHorTargetDist.normalize().multiply(vecHorTargetDist.horizontalLength()/6);
    playerEntity.setVelocity(vecVelHorTargetDist.x + target.getVelocity().x, 0.8,
            vecVelHorTargetDist.z + target.getVelocity().z);
    // Thanks Apace!
    playerEntity.velocityModified = true;
    // Somehow make the player model move like the fox does?
}

Arctic Fox Armor

Sweet Berry Bush Walking

  • The wearer is uninterrupted by sweet berry bushes.
  • No damage is taken and movement speed is not reduced.
  • Armor does not lose durability as a result of this.

Fox's Pounce

  • The wearer will pounce at a nearby enemy.
  • The "pounce" is just a forced jump.
  • There is no direct benefit from this ability, it is mostly for flavor.
  • The enemy must be within 6 blocks for this to work.
  • The pounce is initiated by swinging at the intended pounce target while sneaking.
  • The wearer must be on the ground in order to pounce.
  • The current algorithm for this is not great and will be improved in the future with better raycasting or OBB's.
LivingEntity target = playerEntity.getEntityWorld().getClosestEntity(
        AbilityHelper.getPotentialPounceTargets(playerEntity, 6.0f),
        TargetPredicate.DEFAULT,
        playerEntity,
        playerEntity.getX(),
        playerEntity.getY(),
        playerEntity.getZ());
if (target == null) return;
// TODO Look into changing out brute force box to EntityDimensions#getBoxAt?
if (mcdaCanTargetEntity(playerEntity, target)){
    Vec3d vecHorTargetDist = new Vec3d((target.getX() - playerEntity.getX()),
            (target.getY() - playerEntity.getY()),(target.getZ() - playerEntity.getZ()));
    Vec3d vecVelHorTargetDist = vecHorTargetDist.normalize().multiply(vecHorTargetDist.horizontalLength()/6);
    playerEntity.setVelocity(vecVelHorTargetDist.x + target.getVelocity().x, 0.8,
            vecVelHorTargetDist.z + target.getVelocity().z);
    // Thanks Apace!
    playerEntity.velocityModified = true;
    // Somehow make the player model move like the fox does?
}

Arctic High Ground

  • Deal 1.2x damage.
  • The wearer must be falling, in the air, and not holding onto a ladder.

Sweet Berry Speed

  • Consuming sweet berries provides the user with "Speed I" status effect for 10 seconds.
  • The status effect functions identically to vanilla Minecraft.
⚠️ **GitHub.com Fallback** ⚠️