Files
ReplayModCinematic/src/main/java/eu/crushedpixel/replaymod/settings/ReplaySettings.java
2015-07-03 11:59:27 +02:00

300 lines
9.2 KiB
Java
Executable File

package eu.crushedpixel.replaymod.settings;
import eu.crushedpixel.replaymod.ReplayMod;
import eu.crushedpixel.replaymod.registry.LightingHandler;
import net.minecraft.client.resources.I18n;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.common.config.Property;
public class ReplaySettings {
private static final String[] CATEGORIES = new String[]{"recording", "replay", "render", "advanced"};
public void readValues() {
Configuration config = ReplayMod.config;
config.load();
for(RecordingOptions o : RecordingOptions.values()) {
Property p = getConfigSetting(config, o.name(), o.getValue(), "recording", false);
o.setValue(getValueObject(p));
}
for(ReplayOptions o : ReplayOptions.values()) {
Property p = getConfigSetting(config, o.name(), o.getValue(), "replay", false);
o.setValue(getValueObject(p));
}
for(RenderOptions o : RenderOptions.values()) {
Property p = getConfigSetting(config, o.name(), o.getValue(), "render", false);
o.setValue(getValueObject(p));
}
for(AdvancedOptions o : AdvancedOptions.values()) {
Property p = getConfigSetting(config, o.name(), o.getValue(), "advanced", true);
o.setValue(getValueObject(p));
}
config.save();
}
public String getRecordingPath() {
return (String) AdvancedOptions.recordingPath.getValue();
}
public String getRenderPath() {
return (String) AdvancedOptions.renderPath.getValue();
}
public String getDownloadPath() { return (String) AdvancedOptions.downloadPath.getValue(); }
public int getVideoFramerate() {
return (Integer) RenderOptions.videoFramerate.getValue();
}
public void setVideoFramerate(int framerate) {
RenderOptions.videoFramerate.setValue(Math.min(120, Math.max(10, framerate)));
rewriteSettings();
}
public boolean showRecordingIndicator() {
return (Boolean) RecordingOptions.indicator.getValue();
}
public boolean isEnableRecordingServer() {
return (Boolean) RecordingOptions.recordServer.getValue();
}
public boolean isEnableRecordingSingleplayer() {
return (Boolean) RecordingOptions.recordSingleplayer.getValue();
}
public boolean isShowNotifications() {
return (Boolean) RecordingOptions.notifications.getValue();
}
public boolean isLinearMovement() {
return (Boolean) ReplayOptions.linear.getValue();
}
public void setLinearMovement(boolean linear) {
ReplayOptions.linear.setValue(linear);
rewriteSettings();
}
public boolean isLightingEnabled() {
return (Boolean) ReplayOptions.lighting.getValue();
}
public void setLightingEnabled(boolean enabled) {
ReplayOptions.lighting.setValue(enabled);
LightingHandler.setLighting(enabled);
rewriteSettings();
}
public boolean getWaitForChunks() {
return (Boolean) RenderOptions.waitForChunks.getValue();
}
public void setWaitForChunks(boolean wait) {
RenderOptions.waitForChunks.setValue(wait);
rewriteSettings();
}
public boolean showPathPreview() { return (Boolean) ReplayOptions.previewPath.getValue(); }
public void setShowPathPreview(boolean show) {
ReplayOptions.previewPath.setValue(show);
rewriteSettings();
}
public boolean showClearKeyframesCallback() {
return (Boolean) ReplayOptions.keyframeCleanCallback.getValue();
}
public void rewriteSettings() {
ReplayMod.config.load();
for(String cat : CATEGORIES) {
ReplayMod.config.removeCategory(ReplayMod.config.getCategory(cat));
}
for(RecordingOptions o : RecordingOptions.values()) {
getConfigSetting(ReplayMod.config, o.name(), o.getValue(), "recording", false);
}
for(ReplayOptions o : ReplayOptions.values()) {
getConfigSetting(ReplayMod.config, o.name(), o.getValue(), "replay", false);
}
for(RenderOptions o : RenderOptions.values()) {
getConfigSetting(ReplayMod.config, o.name(), o.getValue(), "render", false);
}
for(AdvancedOptions o : AdvancedOptions.values()) {
getConfigSetting(ReplayMod.config, o.name(), o.getValue(), "advanced", false);
}
ReplayMod.config.save();
}
private Property getConfigSetting(Configuration config, String name, Object value, String category, boolean warning) {
if(warning) {
String warningMsg = "Please be careful when modifying this setting, as setting it to an invalid value might harm your computer.";
if(value instanceof Integer) {
return config.get(category, name, (Integer) value, warningMsg);
} else if(value instanceof Boolean) {
return config.get(category, name, (Boolean) value, warningMsg);
} else if(value instanceof Double) {
return config.get(category, name, (Double) value, warningMsg);
} else if(value instanceof Float) {
return config.get(category, name, (double) (Float) value, warningMsg);
} else if(value instanceof String) {
return config.get(category, name, (String) value, warningMsg);
}
} else {
if(value instanceof Integer) {
return config.get(category, name, (Integer) value);
} else if(value instanceof Boolean) {
return config.get(category, name, (Boolean) value);
} else if(value instanceof Double) {
return config.get(category, name, (Double) value);
} else if(value instanceof Float) {
return config.get(category, name, (double) (Float) value);
} else if(value instanceof String) {
return config.get(category, name, (String) value);
}
}
return null;
}
private Object getValueObject(Property p) {
if(p.isIntValue()) {
return p.getInt();
} else if(p.isDoubleValue()) {
return p.getDouble();
} else if(p.isBooleanValue()) {
return p.getBoolean();
} else {
return p.getString();
}
}
public enum RecordingOptions implements ValueEnum {
recordServer(true, "replaymod.gui.settings.recordserver"),
recordSingleplayer(true, "replaymod.gui.settings.recordsingleplayer"),
notifications(true, "replaymod.gui.settings.notifications"),
indicator(true, "replaymod.gui.settings.indicator");
private Object value;
private String name;
RecordingOptions(Object value, String name) {
this.value = value;
this.name = name;
}
@Override
public Object getValue() {
return value;
}
@Override
public void setValue(Object value) {
this.value = value;
}
@Override
public String getName() { return I18n.format(name); }
}
public enum ReplayOptions implements ValueEnum {
linear(false, "replaymod.gui.settings.interpolation"),
lighting(false, "replaymod.gui.settings.lighting"),
previewPath(false, "replaymod.gui.settings.pathpreview"),
keyframeCleanCallback(true, "replaymod.gui.settings.keyframecleancallback");
private Object value;
private String name;
ReplayOptions(Object value, String name) {
this.value = value;
this.name = name;
}
@Override
public Object getValue() {
return value;
}
@Override
public void setValue(Object value) {
this.value = value;
}
@Override
public String getName() { return I18n.format(name); }
}
public enum RenderOptions implements ValueEnum {
videoFramerate(30, "replaymod.gui.settings.framerate"),
waitForChunks(true, "replaymod.gui.settings.forcechunks");
private Object value;
private String name;
RenderOptions(Object value, String name) {
this.value = value;
this.name = name;
}
@Override
public Object getValue() {
return value;
}
@Override
public void setValue(Object value) {
this.value = value;
}
@Override
public String getName() { return I18n.format(name); }
}
public enum AdvancedOptions implements ValueEnum {
recordingPath("./replay_recordings/", ""),
renderPath("./replay_videos/", ""),
downloadPath("./replay_downloads", "");
private Object value;
private String name;
AdvancedOptions(Object value, String name) {
this.value = value;
this.name = name;
}
@Override
public Object getValue() {
return value;
}
@Override
public void setValue(Object value) {
this.value = value;
}
@Override
public String getName() { return I18n.format(name); }
}
public interface ValueEnum {
Object getValue();
void setValue(Object value);
String getName();
}
}