104 lines
4.2 KiB
Java
104 lines
4.2 KiB
Java
package net.minecraft.advancements.critereon;
|
|
|
|
import com.google.gson.JsonNull;
|
|
import com.google.gson.JsonObject;
|
|
import net.minecraft.util.GsonHelper;
|
|
import com.google.gson.JsonElement;
|
|
import net.minecraft.world.damagesource.DamageSource;
|
|
import net.minecraft.server.level.ServerPlayer;
|
|
import javax.annotation.Nullable;
|
|
|
|
public class DamagePredicate {
|
|
public static final DamagePredicate ANY;
|
|
private final MinMaxBounds.Floats dealtDamage;
|
|
private final MinMaxBounds.Floats takenDamage;
|
|
private final EntityPredicate sourceEntity;
|
|
private final Boolean blocked;
|
|
private final DamageSourcePredicate type;
|
|
|
|
public DamagePredicate() {
|
|
this.dealtDamage = MinMaxBounds.Floats.ANY;
|
|
this.takenDamage = MinMaxBounds.Floats.ANY;
|
|
this.sourceEntity = EntityPredicate.ANY;
|
|
this.blocked = null;
|
|
this.type = DamageSourcePredicate.ANY;
|
|
}
|
|
|
|
public DamagePredicate(final MinMaxBounds.Floats c1, final MinMaxBounds.Floats c2, final EntityPredicate bb, @Nullable final Boolean boolean4, final DamageSourcePredicate as) {
|
|
this.dealtDamage = c1;
|
|
this.takenDamage = c2;
|
|
this.sourceEntity = bb;
|
|
this.blocked = boolean4;
|
|
this.type = as;
|
|
}
|
|
|
|
public boolean matches(final ServerPlayer xe, final DamageSource ajz, final float float3, final float float4, final boolean boolean5) {
|
|
return this == DamagePredicate.ANY || (this.dealtDamage.matches(float3) && this.takenDamage.matches(float4) && this.sourceEntity.matches(xe, ajz.getEntity()) && (this.blocked == null || this.blocked == boolean5) && this.type.matches(xe, ajz));
|
|
}
|
|
|
|
public static DamagePredicate fromJson(@Nullable final JsonElement jsonElement) {
|
|
if (jsonElement == null || jsonElement.isJsonNull()) {
|
|
return DamagePredicate.ANY;
|
|
}
|
|
final JsonObject jsonObject2 = GsonHelper.convertToJsonObject(jsonElement, "damage");
|
|
final MinMaxBounds.Floats c3 = MinMaxBounds.Floats.fromJson(jsonObject2.get("dealt"));
|
|
final MinMaxBounds.Floats c4 = MinMaxBounds.Floats.fromJson(jsonObject2.get("taken"));
|
|
final Boolean boolean5 = jsonObject2.has("blocked") ? Boolean.valueOf(GsonHelper.getAsBoolean(jsonObject2, "blocked")) : null;
|
|
final EntityPredicate bb6 = EntityPredicate.fromJson(jsonObject2.get("source_entity"));
|
|
final DamageSourcePredicate as7 = DamageSourcePredicate.fromJson(jsonObject2.get("type"));
|
|
return new DamagePredicate(c3, c4, bb6, boolean5, as7);
|
|
}
|
|
|
|
public JsonElement serializeToJson() {
|
|
if (this == DamagePredicate.ANY) {
|
|
return JsonNull.INSTANCE;
|
|
}
|
|
final JsonObject jsonObject2 = new JsonObject();
|
|
jsonObject2.add("dealt", this.dealtDamage.serializeToJson());
|
|
jsonObject2.add("taken", this.takenDamage.serializeToJson());
|
|
jsonObject2.add("source_entity", this.sourceEntity.serializeToJson());
|
|
jsonObject2.add("type", this.type.serializeToJson());
|
|
if (this.blocked != null) {
|
|
jsonObject2.addProperty("blocked", this.blocked);
|
|
}
|
|
return jsonObject2;
|
|
}
|
|
|
|
static {
|
|
ANY = Builder.damageInstance().build();
|
|
}
|
|
|
|
public static class Builder {
|
|
private MinMaxBounds.Floats dealtDamage;
|
|
private MinMaxBounds.Floats takenDamage;
|
|
private EntityPredicate sourceEntity;
|
|
private Boolean blocked;
|
|
private DamageSourcePredicate type;
|
|
|
|
public Builder() {
|
|
this.dealtDamage = MinMaxBounds.Floats.ANY;
|
|
this.takenDamage = MinMaxBounds.Floats.ANY;
|
|
this.sourceEntity = EntityPredicate.ANY;
|
|
this.type = DamageSourcePredicate.ANY;
|
|
}
|
|
|
|
public static Builder damageInstance() {
|
|
return new Builder();
|
|
}
|
|
|
|
public Builder blocked(final Boolean boolean1) {
|
|
this.blocked = boolean1;
|
|
return this;
|
|
}
|
|
|
|
public Builder type(final DamageSourcePredicate.Builder a) {
|
|
this.type = a.build();
|
|
return this;
|
|
}
|
|
|
|
public DamagePredicate build() {
|
|
return new DamagePredicate(this.dealtDamage, this.takenDamage, this.sourceEntity, this.blocked, this.type);
|
|
}
|
|
}
|
|
}
|