Added a c:has_no_atmosphere dimension_type tag to disable pegasus flight when in spaaaaaaace #120

This commit is contained in:
Sollace 2023-06-06 21:44:49 +01:00
parent fff5d10f55
commit 58b1aad7a2
5 changed files with 26 additions and 3 deletions

View file

@ -8,6 +8,8 @@ import net.minecraft.entity.effect.StatusEffect;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.registry.*; import net.minecraft.registry.*;
import net.minecraft.registry.tag.TagKey; import net.minecraft.registry.tag.TagKey;
import net.minecraft.util.Identifier;
import net.minecraft.world.dimension.DimensionType;
public interface UTags { public interface UTags {
TagKey<Item> APPLES = item("apples"); TagKey<Item> APPLES = item("apples");
@ -39,6 +41,8 @@ public interface UTags {
TagKey<StatusEffect> PINEAPPLE_EFFECTS = effect("pineapple_effects"); TagKey<StatusEffect> PINEAPPLE_EFFECTS = effect("pineapple_effects");
TagKey<DimensionType> HAS_NO_ATMOSPHERE = dimension("has_no_atmosphere");
static TagKey<Item> item(String name) { static TagKey<Item> item(String name) {
return TagKey.of(RegistryKeys.ITEM, Unicopia.id(name)); return TagKey.of(RegistryKeys.ITEM, Unicopia.id(name));
} }
@ -55,6 +59,10 @@ public interface UTags {
return TagKey.of(RegistryKeys.STATUS_EFFECT, Unicopia.id(name)); return TagKey.of(RegistryKeys.STATUS_EFFECT, Unicopia.id(name));
} }
static TagKey<DimensionType> dimension(String name) {
return TagKey.of(RegistryKeys.DIMENSION_TYPE, new Identifier("c", name));
}
static void bootstrap() { static void bootstrap() {
Toxics.bootstrap(); Toxics.bootstrap();
} }

View file

@ -30,7 +30,7 @@ public class PegasusFlightToggleAbility implements Ability<Hit> {
@Nullable @Nullable
@Override @Override
public Hit tryActivate(Pony player) { public Hit tryActivate(Pony player) {
return player.asEntity().isCreative() ? null : Hit.INSTANCE; return player.asEntity().isCreative() || player.getPhysics().getFlightType().isGrounded() ? null : Hit.INSTANCE;
} }
@Override @Override
@ -54,7 +54,7 @@ public class PegasusFlightToggleAbility implements Ability<Hit> {
@Override @Override
public void apply(Pony player, Hit data) { public void apply(Pony player, Hit data) {
if (player.asEntity().isCreative()) { if (tryActivate(player) == null) {
return; return;
} }

View file

@ -34,10 +34,11 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtCompound;
import net.minecraft.particle.ParticleTypes; import net.minecraft.particle.ParticleTypes;
import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.predicate.entity.EntityPredicates;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents; import net.minecraft.sound.SoundEvents;
import net.minecraft.text.Text;
import net.minecraft.util.math.*; import net.minecraft.util.math.*;
import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.event.GameEvent; import net.minecraft.world.event.GameEvent;
public class PlayerPhysics extends EntityPhysics<PlayerEntity> implements Tickable, Motion, NbtSerialisable { public class PlayerPhysics extends EntityPhysics<PlayerEntity> implements Tickable, Motion, NbtSerialisable {
@ -153,6 +154,11 @@ public class PlayerPhysics extends EntityPhysics<PlayerEntity> implements Tickab
} }
public FlightType getFlightType() { public FlightType getFlightType() {
DimensionType dimension = entity.getWorld().getDimension();
if (RegistryUtils.isIn(entity.getWorld(), dimension, RegistryKeys.DIMENSION_TYPE, UTags.HAS_NO_ATMOSPHERE)) {
return FlightType.NONE;
}
if (UItems.PEGASUS_AMULET.isApplicable(entity)) { if (UItems.PEGASUS_AMULET.isApplicable(entity)) {
return FlightType.ARTIFICIAL; return FlightType.ARTIFICIAL;

View file

@ -49,4 +49,8 @@ public interface RegistryUtils {
.filter(filter) .filter(filter)
.toList(), world.random); .toList(), world.random);
} }
static <T> boolean isIn(World world, T obj, RegistryKey<? extends Registry<T>> registry, TagKey<T> tag) {
return world.getRegistryManager().get(registry).getEntry(obj).isIn(tag);
}
} }

View file

@ -0,0 +1,5 @@
{
"replace": false,
"values": [
]
}