74 lines
2.0 KiB
Java
74 lines
2.0 KiB
Java
package com.hypixel.hytale.builtin.hytalegenerator.material;
|
|
|
|
import java.util.Objects;
|
|
import javax.annotation.Nonnull;
|
|
|
|
public final class Material {
|
|
@Nonnull
|
|
private final SolidMaterial solid;
|
|
@Nonnull
|
|
private final FluidMaterial fluid;
|
|
private Material.Hash hashCode;
|
|
private Material.Hash materialIdsHash;
|
|
|
|
public Material(@Nonnull SolidMaterial solid, @Nonnull FluidMaterial fluid) {
|
|
this.solid = solid;
|
|
this.fluid = fluid;
|
|
this.hashCode = new Material.Hash();
|
|
this.materialIdsHash = new Material.Hash();
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
return !(o instanceof Material material) ? false : Objects.equals(this.solid, material.solid) && Objects.equals(this.fluid, material.fluid);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
if (this.hashCode.isCalculated) {
|
|
return this.hashCode.value;
|
|
} else {
|
|
this.hashCode.value = hashCode(this.solid, this.fluid);
|
|
this.hashCode.isCalculated = true;
|
|
return this.hashCode.value;
|
|
}
|
|
}
|
|
|
|
public int hashMaterialIds() {
|
|
if (this.materialIdsHash.isCalculated) {
|
|
return this.materialIdsHash.value;
|
|
} else {
|
|
this.materialIdsHash.value = hashMaterialIds(this.solid, this.fluid);
|
|
this.materialIdsHash.isCalculated = true;
|
|
return this.materialIdsHash.value;
|
|
}
|
|
}
|
|
|
|
public static int hashCode(@Nonnull SolidMaterial solid, @Nonnull FluidMaterial fluid) {
|
|
int result = solid.hashCode();
|
|
return 31 * result + fluid.hashCode();
|
|
}
|
|
|
|
public static int hashMaterialIds(@Nonnull SolidMaterial solid, @Nonnull FluidMaterial fluid) {
|
|
return Objects.hash(solid.blockId, fluid.fluidId);
|
|
}
|
|
|
|
public SolidMaterial solid() {
|
|
return this.solid;
|
|
}
|
|
|
|
public FluidMaterial fluid() {
|
|
return this.fluid;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "Material[solid=" + this.solid + ", fluid=" + this.fluid + "]";
|
|
}
|
|
|
|
private class Hash {
|
|
int value = 0;
|
|
boolean isCalculated = false;
|
|
}
|
|
}
|