108 lines
3.3 KiB
Java
108 lines
3.3 KiB
Java
package tc.oc.pgm.match;
|
|
|
|
import java.util.Objects;
|
|
import java.util.UUID;
|
|
import javax.annotation.Nullable;
|
|
|
|
import net.md_5.bungee.api.chat.BaseComponent;
|
|
import net.md_5.bungee.api.chat.TextComponent;
|
|
import net.md_5.bungee.api.chat.TranslatableComponent;
|
|
import org.bukkit.EntityLocation;
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.entity.EntityType;
|
|
import org.bukkit.entity.Player;
|
|
import tc.oc.commons.bukkit.chat.NameStyle;
|
|
import tc.oc.commons.bukkit.chat.Named;
|
|
import tc.oc.pgm.filters.query.IEntityQuery;
|
|
|
|
import static com.google.common.base.Preconditions.checkArgument;
|
|
import static com.google.common.base.Preconditions.checkNotNull;
|
|
|
|
public class MatchEntityState implements Named, IEntityQuery {
|
|
protected final Match match;
|
|
protected final Class<? extends Entity> entityClass;
|
|
protected final EntityType entityType;
|
|
protected final UUID uuid;
|
|
protected final EntityLocation location;
|
|
protected final @Nullable String customName;
|
|
|
|
protected MatchEntityState(Match match, Class<? extends Entity> entityClass, UUID uuid, EntityLocation location, @Nullable String customName) {
|
|
this.uuid = checkNotNull(uuid);
|
|
this.match = checkNotNull(match);
|
|
this.entityClass = checkNotNull(entityClass);
|
|
this.location = checkNotNull(location);
|
|
this.customName = customName;
|
|
|
|
EntityType type = null;
|
|
for(EntityType t : EntityType.values()) {
|
|
if(t.getEntityClass().isAssignableFrom(entityClass)) {
|
|
type = t;
|
|
break;
|
|
}
|
|
}
|
|
checkArgument(type != null, "Unknown entity class " + entityClass);
|
|
this.entityType = type;
|
|
}
|
|
|
|
public static @Nullable MatchEntityState get(Entity entity) {
|
|
Match match = Matches.get(entity.getWorld());
|
|
String customName = entity instanceof Player ? null : entity.getCustomName();
|
|
return match == null ? null : new MatchEntityState(match, entity.getClass(), entity.getUniqueId(), entity.getEntityLocation(), customName);
|
|
}
|
|
|
|
@Override
|
|
public Match getMatch() {
|
|
return match;
|
|
}
|
|
|
|
@Override
|
|
public Class<? extends Entity> getEntityType() {
|
|
return entityClass;
|
|
}
|
|
|
|
@Override
|
|
public EntityLocation getEntityLocation() {
|
|
return location;
|
|
}
|
|
|
|
public UUID getUniqueId() {
|
|
return uuid;
|
|
}
|
|
|
|
@Override
|
|
public BaseComponent getStyledName(NameStyle style) {
|
|
if(customName != null) {
|
|
return new TextComponent(customName);
|
|
} else {
|
|
return new TranslatableComponent("entity." + entityType.getName() + ".name");
|
|
}
|
|
}
|
|
|
|
public boolean isEntity(Entity entity) {
|
|
return uuid.equals(entity.getUniqueId());
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object obj) {
|
|
if(this == obj) return true;
|
|
if(!MatchEntityState.class.equals(obj.getClass())) return false;
|
|
final MatchEntityState that = (MatchEntityState) obj;
|
|
return Objects.equals(uuid, that.uuid) &&
|
|
Objects.equals(match, that.match);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return Objects.hash(uuid, match);
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return getClass().getSimpleName() +
|
|
"{match=" + match +
|
|
", type=" + entityClass +
|
|
", uuid=" + uuid +
|
|
'}';
|
|
}
|
|
}
|