summaryrefslogtreecommitdiffstats
path: root/Essentials/src/com/earth2me/essentials/user/UserBase.java
diff options
context:
space:
mode:
Diffstat (limited to 'Essentials/src/com/earth2me/essentials/user/UserBase.java')
-rw-r--r--Essentials/src/com/earth2me/essentials/user/UserBase.java122
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());
+ }
+}