diff --git a/src/main/java/com/minelittlepony/unicopia/Race.java b/src/main/java/com/minelittlepony/unicopia/Race.java index 6e15ede9..aad4a870 100644 --- a/src/main/java/com/minelittlepony/unicopia/Race.java +++ b/src/main/java/com/minelittlepony/unicopia/Race.java @@ -23,7 +23,7 @@ import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; public final class Race implements Affine { - public static final String DEFAULT_ID = "unicopia:human"; + public static final String DEFAULT_ID = "unicopia:unset"; public static final Registry REGISTRY = RegistryUtils.createDefaulted(Unicopia.id("race"), DEFAULT_ID); public static final RegistryKey> REGISTRY_KEY = REGISTRY.getKey(); private static final DynamicCommandExceptionType UNKNOWN_RACE_EXCEPTION = new DynamicCommandExceptionType(id -> Text.translatable("race.unknown", id)); @@ -44,6 +44,7 @@ public final class Race implements Affine { * The default, unset race. * This is used if there are no other races. */ + public static final Race UNSET = register("unset", false, FlightType.NONE, false); public static final Race HUMAN = register("human", false, FlightType.NONE, false); public static final Race EARTH = register("earth", false, FlightType.NONE, true); public static final Race UNICORN = register("unicorn", true, FlightType.NONE, false); @@ -70,15 +71,19 @@ public final class Race implements Affine { } public boolean hasIronGut() { - return isUsable() && this != CHANGELING; + return !isHuman() && this != CHANGELING; } - public boolean isUsable() { - return !isDefault(); + public boolean isUnset() { + return this == UNSET; } - public boolean isDefault() { - return this == HUMAN; + public boolean isEquine() { + return !isHuman(); + } + + public boolean isHuman() { + return this == UNSET || this == HUMAN; } public boolean isOp() { @@ -135,7 +140,7 @@ public final class Race implements Affine { Set whitelist = Unicopia.getConfig().speciesWhiteList.get(); - return isDefault() + return isUnset() || whitelist.isEmpty() || whitelist.contains(getId().toString()); } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyKickAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyKickAbility.java index d080b61f..d967d940 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyKickAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyKickAbility.java @@ -58,7 +58,7 @@ public class EarthPonyKickAbility implements Ability { @Override public double getCostEstimate(Pony player) { - double distance = MineLPDelegate.getInstance().getPlayerPonyRace(player.asEntity()).isDefault() ? 6 : -6; + double distance = MineLPDelegate.getInstance().getPlayerPonyRace(player.asEntity()).isHuman() ? 6 : -6; return TraceHelper.findBlock(player.asEntity(), distance, 1) .filter(pos -> TreeType.at(pos, player.asWorld()) != TreeType.NONE) @@ -113,13 +113,13 @@ public class EarthPonyKickAbility implements Ability { } private int getKickDirection(Pony player) { - return MineLPDelegate.getInstance().getPlayerPonyRace(player.asEntity()).isDefault() ? 1 : -1; + return MineLPDelegate.getInstance().getPlayerPonyRace(player.asEntity()).isHuman() ? 1 : -1; } private Pos getDefaultKickLocation(Pony player) { Vec3d kickVector = player.asEntity().getRotationVector().multiply(1, 0, 1); - if (!MineLPDelegate.getInstance().getPlayerPonyRace(player.asEntity()).isDefault()) { + if (MineLPDelegate.getInstance().getPlayerPonyRace(player.asEntity()).isEquine()) { kickVector = kickVector.rotateY((float)Math.PI); } return new Pos(new BlockPos(player.getOriginVector().add(kickVector))); diff --git a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java index abd657d7..d2399a53 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java +++ b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java @@ -47,7 +47,7 @@ public class UnicopiaClient implements ClientModInitializer { && MinecraftClient.getInstance().player != null) { Race race = MineLPDelegate.getInstance().getPlayerPonyRace(); - if (!race.isDefault()) { + if (race.isEquine()) { return race; } } diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/LanSettingsScreen.java b/src/main/java/com/minelittlepony/unicopia/client/gui/LanSettingsScreen.java index 4e82b8db..b9a0fac4 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/LanSettingsScreen.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/LanSettingsScreen.java @@ -89,7 +89,7 @@ public class LanSettingsScreen extends GameGui { if (whitelist.isEmpty() && forceShowWhitelist) { for (Race r : Race.REGISTRY) { - if (!r.isDefault()) { + if (!r.isUnset()) { whitelist.add(r.getId().toString()); } } @@ -113,7 +113,7 @@ public class LanSettingsScreen extends GameGui { WHITELIST_GRID_PACKER.start(); for (Race race : Race.REGISTRY) { - if (!race.isDefault()) { + if (!race.isUnset()) { Bounds bound = WHITELIST_GRID_PACKER.next(); Button button = content.addButton(new Toggle(LEFT + bound.left + 10, row + bound.top, whitelist.contains(race.getId().toString()))) diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/TribeSelectionScreen.java b/src/main/java/com/minelittlepony/unicopia/client/gui/TribeSelectionScreen.java index 241a4c51..19a465df 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/TribeSelectionScreen.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/TribeSelectionScreen.java @@ -49,7 +49,7 @@ public class TribeSelectionScreen extends GameGui implements HidesHud { final int itemWidth = 70 + 10; - List options = Race.REGISTRY.stream().filter(race -> !race.isDefault() && !race.isOp()).toList(); + List options = Race.REGISTRY.stream().filter(race -> !race.isHuman() && !race.isOp()).toList(); int columns = Math.min(width / itemWidth, options.size()); diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/AccessoryFeatureRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/AccessoryFeatureRenderer.java index d85bc640..88c62afa 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/AccessoryFeatureRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/AccessoryFeatureRenderer.java @@ -8,7 +8,6 @@ import com.minelittlepony.unicopia.client.FirstPersonRendererOverrides.ArmRender import net.minecraft.client.MinecraftClient; import net.minecraft.client.model.ModelPart; -import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.feature.FeatureRenderer; import net.minecraft.client.render.entity.feature.FeatureRendererContext; diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/BraceletFeatureRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/BraceletFeatureRenderer.java index 3fc7da6f..da30ee09 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/BraceletFeatureRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/BraceletFeatureRenderer.java @@ -91,7 +91,7 @@ public class BraceletFeatureRenderer implements Accessor boolean glowing = ((GlowableItem)item.getItem()).isGlowing(item); - if (!MineLPDelegate.getInstance().getPlayerPonyRace((ClientPlayerEntity)entity).isDefault()) { + if (MineLPDelegate.getInstance().getPlayerPonyRace((ClientPlayerEntity)entity).isEquine()) { stack.translate(side == Arm.LEFT ? 0.06 : -0.06, 0.3, 0); } else { stack.translate(0, -0.1, 0); diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/HeldEntityFeatureRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/HeldEntityFeatureRenderer.java index 88d8ab7b..91e05127 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/HeldEntityFeatureRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/HeldEntityFeatureRenderer.java @@ -20,11 +20,7 @@ import net.minecraft.util.Arm; import net.minecraft.util.math.*; public class HeldEntityFeatureRenderer implements AccessoryFeatureRenderer.Feature { - - private final FeatureRendererContext> context; - public HeldEntityFeatureRenderer(FeatureRendererContext> context) { - this.context = context; } @Override @@ -106,7 +102,7 @@ public class HeldEntityFeatureRenderer implements Access float passengerHeight = passenger.asEntity().getHeight() / 2F; float carrierHeight = entity.asEntity().getHeight() / 5F; - if (entity instanceof Pony pony && !MineLPDelegate.getInstance().getPlayerPonyRace(pony.asEntity()).isDefault() && pony.getPhysics().isFlying()) { + if (entity instanceof Pony pony && MineLPDelegate.getInstance().getPlayerPonyRace(pony.asEntity()).isEquine() && pony.getPhysics().isFlying()) { return new Vec3d(0, -passenger.asEntity().getHeight() - passengerHeight, 0 diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/PlayerPoser.java b/src/main/java/com/minelittlepony/unicopia/client/render/PlayerPoser.java index 674c2b2e..d277a690 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/PlayerPoser.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/PlayerPoser.java @@ -29,7 +29,7 @@ public class PlayerPoser { Pony pony = Pony.of(player); float progress = pony.getAnimationProgress(MinecraftClient.getInstance().getTickDelta()); Animation animation = pony.getAnimation(); - boolean isPony = !MineLPDelegate.getInstance().getPlayerPonyRace(player).isDefault(); + boolean isPony = MineLPDelegate.getInstance().getPlayerPonyRace(player).isEquine(); ItemStack glasses = GlassesItem.getForEntity(player); diff --git a/src/main/java/com/minelittlepony/unicopia/command/SpeciesCommand.java b/src/main/java/com/minelittlepony/unicopia/command/SpeciesCommand.java index 906694ec..e8eb3b6f 100644 --- a/src/main/java/com/minelittlepony/unicopia/command/SpeciesCommand.java +++ b/src/main/java/com/minelittlepony/unicopia/command/SpeciesCommand.java @@ -89,7 +89,7 @@ class SpeciesCommand { boolean first = true; for (Race i : Race.REGISTRY) { - if (!i.isDefault() && i.isPermitted(player)) { + if (!i.isUnset() && i.isPermitted(player)) { message.append(Text.literal((!first ? "\n" : "") + " - ")); message.append(i.getDisplayName()); first = false; diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java index b9378253..18021553 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java @@ -303,7 +303,7 @@ public class PlayerPhysics extends EntityPhysics implements Tickab entity.setVelocity(velocity.toImmutable()); if (isFlying() && !entity.isFallFlying() && !pony.isHanging() && pony.isClient()) { - if (MineLPDelegate.getInstance().getPlayerPonyRace(entity).isDefault() && getHorizontalMotion() > 0.03) { + if (MineLPDelegate.getInstance().getPlayerPonyRace(entity).isEquine() && getHorizontalMotion() > 0.03) { float pitch = ((LivingEntityDuck)entity).getLeaningPitch(); if (pitch < 1) { if (pitch < 0.9F) { diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java index ad3c2232..972a7dbb 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java @@ -82,7 +82,6 @@ public class Pony extends Living implements Copyable, Update private final Interpolator interpolator = new LinearInterpolator(); private boolean dirty; - private boolean speciesPersisted; private int ticksHanging; @@ -213,10 +212,6 @@ public class Pony extends Living implements Copyable, Update return corruption; } - public boolean isSpeciesPersisted() { - return speciesPersisted; - } - public boolean isSunImmune() { return ticksSunImmunity > 0; } @@ -602,7 +597,6 @@ public class Pony extends Living implements Copyable, Update @Override public void fromSynchronizedNbt(NbtCompound compound) { super.fromSynchronizedNbt(compound); - speciesPersisted = true; setSpecies(Race.fromName(compound.getString("playerSpecies"), Race.HUMAN)); powers.fromNBT(compound.getCompound("powers")); gravity.fromNBT(compound.getCompound("gravity")); @@ -627,7 +621,6 @@ public class Pony extends Living implements Copyable, Update @Override public void copyFrom(Pony oldPlayer) { - speciesPersisted = true; if (!oldPlayer.asEntity().isRemoved()) { oldPlayer.getSpellSlot().stream(true).forEach(getSpellSlot()::put); } else { diff --git a/src/main/java/com/minelittlepony/unicopia/network/Channel.java b/src/main/java/com/minelittlepony/unicopia/network/Channel.java index bf0f0191..8998ff2e 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/Channel.java +++ b/src/main/java/com/minelittlepony/unicopia/network/Channel.java @@ -33,16 +33,16 @@ public interface Channel { static void bootstrap() { ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { Pony pony = Pony.of(handler.player); - if (!pony.isSpeciesPersisted()) { + if (pony.getActualSpecies() == Race.UNSET) { Race race = WorldTribeManager.forWorld(handler.player.getWorld()).getDefaultRace(); if (!race.isPermitted(handler.player)) { - race = Race.HUMAN; + race = Race.UNSET; } - if (race.isUsable()) { + if (race.isUnset()) { + sender.sendPacket(SERVER_SELECT_TRIBE.id(), new MsgTribeSelect(Race.allPermitted(handler.player)).toBuffer()); + } else { pony.setSpecies(race); Unicopia.LOGGER.info("Setting {}'s race to {} due to host setting", handler.player.getDisplayName().getString(), Race.REGISTRY.getId(race).toString()); - } else { - sender.sendPacket(SERVER_SELECT_TRIBE.id(), new MsgTribeSelect(Race.allPermitted(handler.player)).toBuffer()); } } sender.sendPacket(SERVER_RESOURCES_SEND.id(), new MsgServerResources().toBuffer()); diff --git a/src/main/java/com/minelittlepony/unicopia/network/MsgRequestSpeciesChange.java b/src/main/java/com/minelittlepony/unicopia/network/MsgRequestSpeciesChange.java index b54a1fd7..2a410830 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/MsgRequestSpeciesChange.java +++ b/src/main/java/com/minelittlepony/unicopia/network/MsgRequestSpeciesChange.java @@ -33,10 +33,8 @@ public record MsgRequestSpeciesChange ( public void handle(ServerPlayerEntity sender) { Pony player = Pony.of(sender); - Race worldDefaultRace = WorldTribeManager.forWorld((ServerWorld)player.asWorld()).getDefaultRace(); - - if (force || player.getActualSpecies().isDefault() || (player.getActualSpecies() == worldDefaultRace && !player.isSpeciesPersisted())) { - player.setSpecies(newRace.isPermitted(sender) ? newRace : worldDefaultRace); + if (force || player.getActualSpecies().isUnset()) { + player.setSpecies(newRace.isPermitted(sender) ? newRace : WorldTribeManager.forWorld((ServerWorld)player.asWorld()).getDefaultRace()); if (force) { player.onSpawn();