Fixed the king sombra boss fight

This commit is contained in:
Sollace 2024-02-06 16:39:10 +00:00
parent 1fdf88dce7
commit 8d736befa5
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
3 changed files with 23 additions and 5 deletions

View file

@ -8,6 +8,7 @@ import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableMultimap;
import com.minelittlepony.unicopia.InteractionManager; import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.USounds; import com.minelittlepony.unicopia.USounds;
import com.minelittlepony.unicopia.block.UBlocks;
import com.minelittlepony.unicopia.compat.trinkets.TrinketsDelegate; import com.minelittlepony.unicopia.compat.trinkets.TrinketsDelegate;
import com.minelittlepony.unicopia.entity.*; import com.minelittlepony.unicopia.entity.*;
import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.damage.UDamageTypes;
@ -25,7 +26,6 @@ import it.unimi.dsi.fastutil.floats.Float2ObjectFunction;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.minecraft.block.Blocks;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.item.TooltipContext; import net.minecraft.client.item.TooltipContext;
import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.EnchantmentHelper;
@ -198,9 +198,8 @@ public class AlicornAmuletItem extends AmuletItem implements ItemTracker.Trackab
} }
if (entity instanceof PlayerEntity) { if (entity instanceof PlayerEntity) {
if (entity.isOnFire() && world.getBlockState(entity.getBlockPos().up()).isOf(Blocks.SOUL_FIRE)) { if (entity.isOnFire() && world.getBlockState(entity.getBlockPos().up()).isOf(UBlocks.SPECTRAL_FIRE)) {
if (UnicopiaWorldProperties.forWorld((ServerWorld)world).isActiveAltar(entity.getBlockPos()) if (UnicopiaWorldProperties.forWorld((ServerWorld)world).isActiveAltar(entity)) {
|| UnicopiaWorldProperties.forWorld((ServerWorld)world).isActiveAltar(entity.getBlockPos().up())) {
if (living.asEntity().getHealth() < 2) { if (living.asEntity().getHealth() < 2) {
entity.setFireTicks(0); entity.setFireTicks(0);
world.removeBlock(entity.getBlockPos().up(), false); world.removeBlock(entity.getBlockPos().up(), false);

View file

@ -31,7 +31,16 @@ import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3i; import net.minecraft.util.math.Vec3i;
import net.minecraft.world.World; import net.minecraft.world.World;
public record Altar(BlockPos origin, Set<BlockPos> pillars) { public record Altar(
/**
* The position of the central spectral fire of this altar
*/
BlockPos origin,
/**
* Pillar top positions
*/
Set<BlockPos> pillars
) {
private static final Direction[] HORIZONTALS = { Direction.SOUTH, Direction.WEST, Direction.NORTH, Direction.EAST }; private static final Direction[] HORIZONTALS = { Direction.SOUTH, Direction.WEST, Direction.NORTH, Direction.EAST };
private static final Predicate<Entity> IS_PARTICIPANT = EntityPredicates.VALID_ENTITY.and(e -> e instanceof FloatingArtefactEntity || e instanceof SpellbookEntity); private static final Predicate<Entity> IS_PARTICIPANT = EntityPredicates.VALID_ENTITY.and(e -> e instanceof FloatingArtefactEntity || e instanceof SpellbookEntity);
public static final NbtSerialisable.Serializer<Altar> SERIALIZER = NbtSerialisable.Serializer.of(nbt -> { public static final NbtSerialisable.Serializer<Altar> SERIALIZER = NbtSerialisable.Serializer.of(nbt -> {

View file

@ -8,6 +8,7 @@ import com.minelittlepony.unicopia.network.Channel;
import com.minelittlepony.unicopia.network.MsgSkyAngle; import com.minelittlepony.unicopia.network.MsgSkyAngle;
import com.minelittlepony.unicopia.util.NbtSerialisable; import com.minelittlepony.unicopia.util.NbtSerialisable;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtElement; import net.minecraft.nbt.NbtElement;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
@ -69,6 +70,15 @@ public class UnicopiaWorldProperties extends PersistentState {
return activeAltarPositions.contains(center); return activeAltarPositions.contains(center);
} }
public boolean isActiveAltar(Entity entity) {
for (int i = 0; i < entity.getHeight(); i++) {
if (isActiveAltar(entity.getBlockPos().up(i))) {
return true;
}
}
return false;
}
@Override @Override
public NbtCompound writeNbt(NbtCompound tag) { public NbtCompound writeNbt(NbtCompound tag) {
tag.putString("defaultRace", Race.REGISTRY.getId(defaultRace).toString()); tag.putString("defaultRace", Race.REGISTRY.getId(defaultRace).toString());