-
Notifications
You must be signed in to change notification settings - Fork 9
Set Bonuses
chronosacaria edited this page May 24, 2023
·
22 revisions
Note that these effects only take place if the full armor set is equipped unless otherwise stated.
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 |
- 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);
}
}
- 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);
}
}
- 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);
}
}
- Gain the "Hero of the Village" status effect. The status effect functions identically to vanilla Minecraft.
- 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;
- 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);
-
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.
- 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));
- 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 :).
- 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.
- 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;
- The wearer deals an additional 50% of the user's weapon attribute value to Illagers.
- This only takes effect if the user has HOTV.
- 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.
- 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;
}
- 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);
}
- 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);
}
}
- 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.
- 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);
}
}
}
- 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);
- 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));
- 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);
- 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);
}
- 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.
- 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.
- 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.
- 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);
}
- 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.
- 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);
}
}
- 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.
- This is done through nbt.
- 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.
- 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);
- 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.
- 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.
- 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);
- Gain the "Slow Falling" status effect. The status effect functions identically to vanilla Minecraft.
- Gain the "Slow Falling" status effect. The status effect functions identically to vanilla Minecraft.
- 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));
- 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);
-
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.
- 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);
}
}
- 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.
- 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);
- 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);
- 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);
- 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);
- 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));
- 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.
- The wearer receives 1.5x experience from experience orbs.
- 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);
- Gain the "Water Breathing" status effect while under water. The status effect functions identically to vanilla Minecraft.
- 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();
}
}
Config file lets you choose between forms of teleportation for the Unstable Robe.
- 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);
}
- 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();
}
}
- 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);
}
- 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);
}
- 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();
- 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);
}
- 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);
}
}
- 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.
- 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?
}
- 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.
- 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?
}
- Deal 1.2x damage.
- The wearer must be falling, in the air, and not holding onto a ladder.
- Consuming sweet berries provides the user with "Speed I" status effect for 10 seconds.
- The status effect functions identically to vanilla Minecraft.