55 lines
1.5 KiB
Java
55 lines
1.5 KiB
Java
package com.terraforged.mod.client.gui.element;
|
|
|
|
import com.terraforged.n2d.util.NoiseUtil;
|
|
import net.minecraft.nbt.CompoundNBT;
|
|
import net.minecraftforge.fml.client.gui.widget.Slider;
|
|
|
|
public class TerraBoundSlider extends TerraSlider.Float {
|
|
|
|
private final float pad;
|
|
private final String lower;
|
|
private final String upper;
|
|
|
|
public TerraBoundSlider(String name, CompoundNBT value) {
|
|
this(name, value, 0.005F);
|
|
}
|
|
|
|
public TerraBoundSlider(String name, CompoundNBT value, float pad) {
|
|
super(name, value);
|
|
CompoundNBT meta = value.getCompound("#" + name);
|
|
this.pad = pad;
|
|
this.lower = meta.getString("limit_lower");
|
|
this.upper = meta.getString("limit_upper");
|
|
}
|
|
|
|
@Override
|
|
protected void onChange(Slider slider, CompoundNBT value) {
|
|
int i = (int) (slider.getValue() * 1000);
|
|
|
|
float lower = getLower(value) + pad;
|
|
float upper = getUpper(value) - pad;
|
|
float val = NoiseUtil.clamp(i / 1000F, lower, upper);
|
|
|
|
// update setting value
|
|
value.putFloat(name, val);
|
|
|
|
// update actual slider value
|
|
setValue(val);
|
|
updateSlider();
|
|
}
|
|
|
|
private float getLower(CompoundNBT value) {
|
|
if (lower == null || lower.isEmpty()) {
|
|
return 0F;
|
|
}
|
|
return value.getFloat(lower);
|
|
}
|
|
|
|
private float getUpper(CompoundNBT value) {
|
|
if (upper == null || upper.isEmpty()) {
|
|
return 1F;
|
|
}
|
|
return value.getFloat(upper);
|
|
}
|
|
}
|