mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-17 10:24:23 +01:00
Fixed null exceptions when ticking players
This commit is contained in:
parent
cc63736466
commit
c36402b4d9
6 changed files with 30 additions and 28 deletions
|
@ -16,7 +16,6 @@ import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
|
import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent;
|
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
|
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
@ -89,7 +88,7 @@ public class Unicopia {
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onPlyerTick(TickEvent.PlayerTickEvent event) {
|
public static void onPlyerTick(TickEvent.PlayerTickEvent event) {
|
||||||
if (event.phase == Phase.END) {
|
if (event.phase == Phase.END) {
|
||||||
PlayerSpeciesList.instance().getPlayer(event.player).onEntityUpdate();
|
PlayerSpeciesList.instance().getPlayer(event.player).onUpdate(event.player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ final class DefaultPlayerSpecies implements IPlayer, IAbilityReceiver {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEntityUpdate() {
|
public void onUpdate(EntityPlayer entity) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,10 +6,11 @@ import com.minelittlepony.unicopia.InbtSerialisable;
|
||||||
import com.minelittlepony.unicopia.Race;
|
import com.minelittlepony.unicopia.Race;
|
||||||
import com.minelittlepony.unicopia.spell.ICaster;
|
import com.minelittlepony.unicopia.spell.ICaster;
|
||||||
|
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||||
|
|
||||||
public interface IPlayer extends ICaster<EntityPlayer>, InbtSerialisable {
|
public interface IPlayer extends ICaster<EntityPlayer>, InbtSerialisable, IUpdatable {
|
||||||
Race getPlayerSpecies();
|
Race getPlayerSpecies();
|
||||||
|
|
||||||
void setPlayerSpecies(Race race);
|
void setPlayerSpecies(Race race);
|
||||||
|
@ -20,13 +21,20 @@ public interface IPlayer extends ICaster<EntityPlayer>, InbtSerialisable {
|
||||||
|
|
||||||
boolean isClientPlayer();
|
boolean isClientPlayer();
|
||||||
|
|
||||||
void onEntityUpdate();
|
|
||||||
|
|
||||||
default void onEntityEat() {
|
default void onEntityEat() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static EntityPlayer getPlayerEntity(UUID playerId) {
|
static EntityPlayer getPlayerEntity(UUID playerId) {
|
||||||
return FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getPlayerByUUID(playerId);
|
EntityPlayer player = FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getPlayerByUUID(playerId);
|
||||||
|
|
||||||
|
if (player == null) {
|
||||||
|
Entity e = FMLCommonHandler.instance().getMinecraftServerInstance().getEntityFromUuid(playerId);
|
||||||
|
if (e instanceof EntityPlayer) {
|
||||||
|
return (EntityPlayer)e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return player;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,16 +18,16 @@ class PlayerCapabilities implements IPlayer, ICaster<EntityPlayer> {
|
||||||
|
|
||||||
private Race playerSpecies = Race.HUMAN;
|
private Race playerSpecies = Race.HUMAN;
|
||||||
|
|
||||||
private UUID playerId;
|
|
||||||
|
|
||||||
private final PlayerAbilityDelegate powers = new PlayerAbilityDelegate(this);
|
private final PlayerAbilityDelegate powers = new PlayerAbilityDelegate(this);
|
||||||
|
|
||||||
private final PlayerGravityDelegate gravity = new PlayerGravityDelegate(this);
|
private final PlayerGravityDelegate gravity = new PlayerGravityDelegate(this);
|
||||||
|
|
||||||
private IMagicEffect effect;
|
private IMagicEffect effect;
|
||||||
|
|
||||||
|
private EntityPlayer entity;
|
||||||
|
|
||||||
PlayerCapabilities(UUID playerId) {
|
PlayerCapabilities(UUID playerId) {
|
||||||
this.playerId = playerId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -37,10 +37,6 @@ class PlayerCapabilities implements IPlayer, ICaster<EntityPlayer> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setPlayerSpecies(Race race) {
|
public void setPlayerSpecies(Race race) {
|
||||||
if (race == playerSpecies) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
playerSpecies = race;
|
playerSpecies = race;
|
||||||
|
|
||||||
EntityPlayer self = getOwner();
|
EntityPlayer self = getOwner();
|
||||||
|
@ -53,7 +49,7 @@ class PlayerCapabilities implements IPlayer, ICaster<EntityPlayer> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendCapabilities() {
|
public void sendCapabilities() {
|
||||||
PlayerSpeciesList.instance().sendCapabilities(playerId);
|
PlayerSpeciesList.instance().sendCapabilities(getOwner().getGameProfile().getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -64,26 +60,26 @@ class PlayerCapabilities implements IPlayer, ICaster<EntityPlayer> {
|
||||||
@Override
|
@Override
|
||||||
public boolean isClientPlayer() {
|
public boolean isClientPlayer() {
|
||||||
return UClient.isClientSide() &&
|
return UClient.isClientSide() &&
|
||||||
Minecraft.getMinecraft().player.getGameProfile().getId().equals(playerId);
|
Minecraft.getMinecraft().player.getGameProfile().getId().equals(getOwner().getGameProfile().getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEntityUpdate() {
|
public void onUpdate(EntityPlayer entity) {
|
||||||
EntityPlayer player = getOwner();
|
this.entity = entity;
|
||||||
|
|
||||||
powers.onUpdate(player);
|
powers.onUpdate(entity);
|
||||||
gravity.onUpdate(player);
|
gravity.onUpdate(entity);
|
||||||
|
|
||||||
if (!getPlayerSpecies().canCast()) {
|
if (!getPlayerSpecies().canCast()) {
|
||||||
effect = null;
|
effect = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (effect != null) {
|
if (effect != null) {
|
||||||
if (player.getEntityWorld().isRemote && player.getEntityWorld().getWorldTime() % 10 == 0) {
|
if (entity.getEntityWorld().isRemote && entity.getEntityWorld().getWorldTime() % 10 == 0) {
|
||||||
effect.render(player);
|
effect.render(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!effect.update(player)) {
|
if (!effect.update(entity)) {
|
||||||
effect = null;
|
effect = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,7 +96,6 @@ class PlayerCapabilities implements IPlayer, ICaster<EntityPlayer> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToNBT(NBTTagCompound compound) {
|
public void writeToNBT(NBTTagCompound compound) {
|
||||||
compound.setUniqueId("playerId", playerId);
|
|
||||||
compound.setString("playerSpecies", playerSpecies.name());
|
compound.setString("playerSpecies", playerSpecies.name());
|
||||||
compound.setTag("powers", powers.toNBT());
|
compound.setTag("powers", powers.toNBT());
|
||||||
compound.setTag("gravity", gravity.toNBT());
|
compound.setTag("gravity", gravity.toNBT());
|
||||||
|
@ -113,7 +108,6 @@ class PlayerCapabilities implements IPlayer, ICaster<EntityPlayer> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readFromNBT(NBTTagCompound compound) {
|
public void readFromNBT(NBTTagCompound compound) {
|
||||||
playerId = compound.getUniqueId("playerId");
|
|
||||||
playerSpecies = Race.fromName(compound.getString("playerSpecies"));
|
playerSpecies = Race.fromName(compound.getString("playerSpecies"));
|
||||||
powers.readFromNBT(compound.getCompoundTag("powers"));
|
powers.readFromNBT(compound.getCompoundTag("powers"));
|
||||||
gravity.readFromNBT(compound.getCompoundTag("gravity"));
|
gravity.readFromNBT(compound.getCompoundTag("gravity"));
|
||||||
|
@ -139,6 +133,6 @@ class PlayerCapabilities implements IPlayer, ICaster<EntityPlayer> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EntityPlayer getOwner() {
|
public EntityPlayer getOwner() {
|
||||||
return IPlayer.getPlayerEntity(playerId);
|
return entity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,8 @@ class PlayerGravityDelegate implements IUpdatable, InbtSerialisable {
|
||||||
ticksSinceLanding++;
|
ticksSinceLanding++;
|
||||||
}
|
}
|
||||||
|
|
||||||
entity.capabilities.allowFlying = entity.capabilities.isFlying = false;
|
entity.capabilities.allowFlying = player.getPlayerSpecies().canFly();
|
||||||
|
entity.capabilities.isFlying = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ public class PlayerSpeciesList {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendCapabilities(UUID playerId) {
|
public void sendCapabilities(UUID playerId) {
|
||||||
Unicopia.channel.send(new MsgPlayerCapabilities(getPlayer(playerId).getPlayerSpecies(), playerId), Target.SERVER_AND_CLIENTS);
|
Unicopia.channel.send(new MsgPlayerCapabilities(getPlayer(playerId).getPlayerSpecies(), playerId), playerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleSpeciesChange(UUID playerId, Race race) {
|
public void handleSpeciesChange(UUID playerId, Race race) {
|
||||||
|
|
Loading…
Reference in a new issue