ProjectAres/PGM/src/main/java/tc/oc/pgm/match/MatchEntityState.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 +
'}';
}
}