diff options
Diffstat (limited to 'Essentials/src/com/earth2me/essentials/user/UserBase.java')
-rw-r--r-- | Essentials/src/com/earth2me/essentials/user/UserBase.java | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/Essentials/src/com/earth2me/essentials/user/UserBase.java b/Essentials/src/com/earth2me/essentials/user/UserBase.java new file mode 100644 index 000000000..9dda2f950 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/user/UserBase.java @@ -0,0 +1,122 @@ +package com.earth2me.essentials.user; + +import com.earth2me.essentials.IEssentials; +import com.earth2me.essentials.craftbukkit.OfflineBedLocation; +import com.earth2me.essentials.storage.AsyncStorageObjectHolder; +import java.io.File; +import lombok.Delegate; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.entity.Entity; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permissible; +import org.bukkit.permissions.ServerOperator; +import org.bukkit.OfflinePlayer; + + +public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implements Player, IOfflineUser +{ + + @Delegate(types = + { + Player.class, Entity.class, CommandSender.class, ServerOperator.class, + HumanEntity.class, ConfigurationSerializable.class, LivingEntity.class, + Permissible.class + },excludes=IOfflinePlayer.class) + protected Player base; + protected transient OfflinePlayer offlinePlayer; + + public UserBase(final Player base, final IEssentials ess) + { + super(ess, UserData.class); + this.base = base; + reloadConfig(); + } + + public UserBase(final OfflinePlayer offlinePlayer, final IEssentials ess) + { + super(ess, UserData.class); + this.offlinePlayer = offlinePlayer; + reloadConfig(); + } + + public final Player getBase() + { + return base; + } + + public final Player setBase(final Player base) + { + return this.base = base; + } + + public void update(final Player base) + { + setBase(base); + } + + public void update(final OfflinePlayer offlinePlayer) + { + this.offlinePlayer = offlinePlayer; + } + + public void dispose() + { + this.offlinePlayer = Bukkit.getOfflinePlayer(base.getName()); + this.base = null; + } + + public boolean isOnlineUser() { + return base != null; + } + + @Override + public String getName() + { + if (isOnlineUser()) { + return base.getName(); + } else { + return offlinePlayer.getName(); + } + } + + @Override + public String getDisplayName() + { + if (isOnlineUser()) { + return base.getDisplayName(); + } else { + return offlinePlayer.getName(); + } + } + + @Override + public Location getBedSpawnLocation() + { + if (isOnlineUser()) { + return base.getBedSpawnLocation(); + } else { + return OfflineBedLocation.getBedLocation(base.getName(), ess); + } + } + + @Override + public void setBanned(boolean bln) + { + if (isOnlineUser()) { + base.setBanned(bln); + } else { + offlinePlayer.setBanned(bln); + } + } + + @Override + public File getStorageFile() + { + return ess.getUserMap().getUserFile(getName()); + } +} |