mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-01 19:46:42 +01:00
The metamorphosis potions no longer kill you in peaceful, easy, and hardcore mode, and spectral arrows are no longer deadly
This commit is contained in:
parent
884ced25f1
commit
6a09b04b8e
2 changed files with 61 additions and 10 deletions
|
@ -3,19 +3,24 @@ package com.minelittlepony.unicopia.entity.effect;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.Race;
|
import com.minelittlepony.unicopia.Race;
|
||||||
|
import com.minelittlepony.unicopia.USounds;
|
||||||
import com.minelittlepony.unicopia.ability.magic.Caster;
|
import com.minelittlepony.unicopia.ability.magic.Caster;
|
||||||
import com.minelittlepony.unicopia.entity.Equine;
|
import com.minelittlepony.unicopia.entity.Equine;
|
||||||
import com.minelittlepony.unicopia.entity.Living;
|
import com.minelittlepony.unicopia.entity.Living;
|
||||||
import com.minelittlepony.unicopia.entity.damage.UDamageTypes;
|
import com.minelittlepony.unicopia.entity.damage.UDamageTypes;
|
||||||
import com.minelittlepony.unicopia.entity.player.MagicReserves;
|
import com.minelittlepony.unicopia.entity.player.MagicReserves;
|
||||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
import com.minelittlepony.unicopia.entity.player.Pony;
|
||||||
|
import com.minelittlepony.unicopia.util.ExplosionUtil;
|
||||||
|
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.entity.effect.*;
|
import net.minecraft.entity.effect.*;
|
||||||
|
import net.minecraft.entity.player.HungerManager;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.particle.ParticleTypes;
|
import net.minecraft.particle.ParticleTypes;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
import net.minecraft.world.World.ExplosionSourceType;
|
||||||
import net.minecraft.registry.Registry;
|
import net.minecraft.registry.Registry;
|
||||||
import net.minecraft.registry.Registries;
|
import net.minecraft.registry.Registries;
|
||||||
|
|
||||||
|
@ -49,11 +54,21 @@ public class RaceChangeStatusEffect extends StatusEffect {
|
||||||
return race;
|
return race;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void removeEffect(LivingEntity entity) {
|
||||||
|
entity.removeStatusEffect(this);
|
||||||
|
resetTicks(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resetTicks(LivingEntity entity) {
|
||||||
|
Pony.of(entity).ifPresent(pony -> pony.setTicksmetamorphising(0));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void applyUpdateEffect(LivingEntity entity, int amplifier) {
|
public void applyUpdateEffect(LivingEntity entity, int amplifier) {
|
||||||
StatusEffectInstance state = entity.getStatusEffect(this);
|
StatusEffectInstance state = entity.getStatusEffect(this);
|
||||||
|
|
||||||
if (state == null) {
|
if (state == null || entity.isDead()) {
|
||||||
|
resetTicks(entity);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,6 +78,13 @@ public class RaceChangeStatusEffect extends StatusEffect {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int metaTicks = 0;
|
||||||
|
|
||||||
|
if (eq instanceof Pony pony) {
|
||||||
|
metaTicks = pony.getTicksMetamorphising() + 1;
|
||||||
|
pony.setTicksmetamorphising(metaTicks);
|
||||||
|
}
|
||||||
|
|
||||||
int ticks = Math.max(0, MAX_DURATION - state.getDuration());
|
int ticks = Math.max(0, MAX_DURATION - state.getDuration());
|
||||||
|
|
||||||
Stage stage = Stage.forDuration(ticks / STAGE_DURATION);
|
Stage stage = Stage.forDuration(ticks / STAGE_DURATION);
|
||||||
|
@ -77,7 +99,7 @@ public class RaceChangeStatusEffect extends StatusEffect {
|
||||||
if (progression == 0 && entity instanceof PlayerEntity player && stage == Stage.CRAWLING) {
|
if (progression == 0 && entity instanceof PlayerEntity player && stage == Stage.CRAWLING) {
|
||||||
player.sendMessage(Stage.INITIAL.getMessage(race), true);
|
player.sendMessage(Stage.INITIAL.getMessage(race), true);
|
||||||
}
|
}
|
||||||
entity.removeStatusEffect(this);
|
removeEffect(entity);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,42 +107,60 @@ public class RaceChangeStatusEffect extends StatusEffect {
|
||||||
player.sendMessage(stage.getMessage(race), true);
|
player.sendMessage(stage.getMessage(race), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
entity.setHealth(1);
|
|
||||||
|
|
||||||
if (eq instanceof Pony pony) {
|
if (eq instanceof Pony pony) {
|
||||||
MagicReserves magic = pony.getMagicalReserves();
|
MagicReserves magic = pony.getMagicalReserves();
|
||||||
pony.setRespawnRace(race);
|
pony.setRespawnRace(race);
|
||||||
magic.getExertion().addPercent(5);
|
magic.getExertion().add(5);
|
||||||
magic.getEnergy().add(3);
|
if (magic.getEnergy().get() < 1) {
|
||||||
|
magic.getEnergy().add(1.1F);
|
||||||
|
entity.playSound(USounds.BLOCK_CHITIN_AMBIENCE, 0.1F, 2F);
|
||||||
|
}
|
||||||
magic.getExhaustion().add(3);
|
magic.getExhaustion().add(3);
|
||||||
|
|
||||||
if (state.shouldShowParticles()) {
|
if (state.shouldShowParticles()) {
|
||||||
pony.spawnParticles(ParticleTypes.TOTEM_OF_UNDYING, 5);
|
pony.spawnParticles(ParticleTypes.TOTEM_OF_UNDYING, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stage == Stage.DEATH) {
|
if (stage == Stage.DEATH) {
|
||||||
entity.removeStatusEffect(this);
|
removeEffect(entity);
|
||||||
|
|
||||||
if (eq instanceof Caster) {
|
if (eq instanceof Caster) {
|
||||||
((Caster<?>)eq).getSpellSlot().clear();
|
((Caster<?>)eq).getSpellSlot().clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eq instanceof Pony pony) {
|
if (eq instanceof Pony pony && metaTicks > 200) {
|
||||||
MagicReserves magic = pony.getMagicalReserves();
|
MagicReserves magic = pony.getMagicalReserves();
|
||||||
magic.getEnergy().set(0.6F);
|
magic.getEnergy().set(0.6F);
|
||||||
magic.getExhaustion().set(0);
|
magic.getExhaustion().set(0);
|
||||||
magic.getExertion().set(0);
|
magic.getExertion().set(0);
|
||||||
|
|
||||||
if (!pony.asEntity().isCreative()) {
|
if (pony.asEntity().isCreative() || entity.getWorld().getDifficulty().getId() < 2 || entity.getWorld().getLevelProperties().isHardcore()) {
|
||||||
|
|
||||||
|
if (!pony.asEntity().isCreative()) {
|
||||||
|
float cost = entity.getWorld().getLevelProperties().isHardcore() ? 0.75F : switch (entity.getWorld().getDifficulty()) {
|
||||||
|
case PEACEFUL -> 0.125F;
|
||||||
|
case EASY -> 0.25F;
|
||||||
|
default -> 0.5F;
|
||||||
|
};
|
||||||
|
|
||||||
|
entity.setHealth(Math.max(1, entity.getHealth() * cost));
|
||||||
|
HungerManager hunger = pony.asEntity().getHungerManager();
|
||||||
|
int food = hunger.getFoodLevel();
|
||||||
|
pony.asEntity().getHungerManager().setFoodLevel(Math.max(Math.min(1, food), (int)(food * cost)));
|
||||||
|
}
|
||||||
|
pony.setSpecies(race);
|
||||||
|
} else if (!pony.asEntity().isCreative()) {
|
||||||
if (!entity.damage(Living.living(entity).damageOf(UDamageTypes.TRIBE_SWAP), Float.MAX_VALUE)) {
|
if (!entity.damage(Living.living(entity).damageOf(UDamageTypes.TRIBE_SWAP), Float.MAX_VALUE)) {
|
||||||
entity.setHealth(0);
|
entity.setHealth(0);
|
||||||
pony.setRespawnRace(Race.UNSET);
|
pony.setRespawnRace(Race.UNSET);
|
||||||
pony.setSpecies(race);
|
pony.setSpecies(race);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
entity.getWorld().createExplosion(entity, null, ExplosionUtil.NON_DESTRUCTIVE, entity.getPos(), 5, true, ExplosionSourceType.MOB);
|
||||||
} else {
|
} else {
|
||||||
eq.setSpecies(race);
|
eq.setSpecies(race);
|
||||||
|
entity.getWorld().createExplosion(entity, null, ExplosionUtil.NON_DESTRUCTIVE, entity.getPos(), 5, true, ExplosionSourceType.MOB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,6 +100,7 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
||||||
private float magicExhaustion = 0;
|
private float magicExhaustion = 0;
|
||||||
|
|
||||||
private int ticksInvulnerable;
|
private int ticksInvulnerable;
|
||||||
|
private int ticksMetamorphising;
|
||||||
|
|
||||||
private int ticksInSun;
|
private int ticksInSun;
|
||||||
private boolean hasShades;
|
private boolean hasShades;
|
||||||
|
@ -275,6 +276,14 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
||||||
this.ticksInvulnerable = Math.max(0, ticks);
|
this.ticksInvulnerable = Math.max(0, ticks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getTicksMetamorphising() {
|
||||||
|
return ticksMetamorphising;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTicksmetamorphising(int ticks) {
|
||||||
|
ticksMetamorphising = ticks;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Affinity getAffinity() {
|
public Affinity getAffinity() {
|
||||||
return getSpecies().getAffinity();
|
return getSpecies().getAffinity();
|
||||||
|
@ -754,6 +763,7 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
||||||
compound.putInt("levels", levels.get());
|
compound.putInt("levels", levels.get());
|
||||||
compound.putInt("corruption", corruption.get());
|
compound.putInt("corruption", corruption.get());
|
||||||
compound.putInt("ticksInvulnerable", ticksInvulnerable);
|
compound.putInt("ticksInvulnerable", ticksInvulnerable);
|
||||||
|
compound.putInt("ticksMetamorphising", ticksMetamorphising);
|
||||||
|
|
||||||
NbtCompound progress = new NbtCompound();
|
NbtCompound progress = new NbtCompound();
|
||||||
advancementProgress.forEach((key, count) -> {
|
advancementProgress.forEach((key, count) -> {
|
||||||
|
@ -778,6 +788,7 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
||||||
ticksInvulnerable = compound.getInt("ticksInvulnerable");
|
ticksInvulnerable = compound.getInt("ticksInvulnerable");
|
||||||
ticksInSun = compound.getInt("ticksInSun");
|
ticksInSun = compound.getInt("ticksInSun");
|
||||||
hasShades = compound.getBoolean("hasShades");
|
hasShades = compound.getBoolean("hasShades");
|
||||||
|
ticksMetamorphising = compound.getInt("ticksMetamorphising");
|
||||||
|
|
||||||
NbtCompound progress = compound.getCompound("advancementProgress");
|
NbtCompound progress = compound.getCompound("advancementProgress");
|
||||||
advancementProgress.clear();
|
advancementProgress.clear();
|
||||||
|
|
Loading…
Reference in a new issue