Makes both the Cloth and the ModMenu APIs optional.

We want users to be able to use this with as few dependencies as possible.
This commit is contained in:
Markil3
2021-03-02 11:18:20 -07:00
parent ddd266a0ab
commit 7be634fc47
5 changed files with 227 additions and 171 deletions

View File

@@ -3,9 +3,6 @@ package markil3.immersive_hud;
import net.minecraft.util.math.MathHelper;
import me.shedaniel.autoconfig.AutoConfig;
import me.shedaniel.autoconfig.ConfigData;
import me.shedaniel.autoconfig.annotation.Config;
import me.shedaniel.autoconfig.annotation.ConfigEntry;
import static markil3.immersive_hud.Main.TICKS_PER_SECOND;
@@ -15,13 +12,11 @@ import static markil3.immersive_hud.Main.TICKS_PER_SECOND;
* <p>
* The methods that change this mod's configuration do not automatically write
* those changes to the configuration file on disk. Instead, they only update
* the configuration in memory. To write any changes, use the {@link #save()}
* method.
* the configuration in memory.
*
* @author Markil 3
*/
@Config(name = "immersive_hud")
public class ConfigManager implements ConfigData
public class ConfigManager
{
public static class TimeValues
{
@@ -90,7 +85,6 @@ public class ConfigManager implements ConfigData
private int handTime = 30 * TICKS_PER_SECOND;
private boolean showArmor = true;
private double minHealth = 0.5;
@ConfigEntry.BoundedDiscrete(max = 20)
private int minHunger = 17;
/**
@@ -100,7 +94,22 @@ public class ConfigManager implements ConfigData
*/
public static ConfigManager getInstance()
{
return AutoConfig.getConfigHolder(ConfigManager.class).getConfig();
try
{
if (Class.forName("me.shedaniel.autoconfig.AutoConfig") != null)
{
return AutoConfig.getConfigHolder(ConfigManagerCloth.class)
.getConfig();
}
else
{
throw new ClassNotFoundException();
}
}
catch (ClassNotFoundException e)
{
return new ConfigManager();
}
}
// Validations
@@ -268,12 +277,6 @@ public class ConfigManager implements ConfigData
{
this.minHunger = MathHelper.clamp(boundary, 0, 20);
}
@Override
public void validatePostLoad() throws ValidationException
{
this.setMinHealth(this.minHealth);
}
/**
* Saves changes to this mod's configuration.
*/

View File

@@ -0,0 +1,14 @@
package markil3.immersive_hud;
import me.shedaniel.autoconfig.ConfigData;
import me.shedaniel.autoconfig.annotation.Config;
@Config(name = "immersive_hud")
public class ConfigManagerCloth extends ConfigManager implements ConfigData
{
@Override
public void validatePostLoad() throws ValidationException
{
this.setMinHealth(this.getMinHealth());
}
}

View File

@@ -17,18 +17,10 @@
*/
package markil3.immersive_hud;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
import net.fabricmc.api.ModInitializer;
import net.minecraft.text.TranslatableText;
import me.shedaniel.autoconfig.AutoConfig;
import me.shedaniel.autoconfig.serializer.Toml4jConfigSerializer;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import me.shedaniel.clothconfig2.gui.entries.DoubleListEntry;
/**
* The main entry point for the Immersive HUD mod.
@@ -36,158 +28,25 @@ import me.shedaniel.clothconfig2.gui.entries.DoubleListEntry;
* @author Markil 3
* @version 0.1-1.16.4-fabric
*/
public class Main implements ModInitializer, ModMenuApi
public class Main implements ModInitializer
{
public static final int TICKS_PER_SECOND = 20;
@Override
public void onInitialize()
{
AutoConfig.register(ConfigManager.class, Toml4jConfigSerializer::new);
}
private void startTimeField(String name, ConfigEntryBuilder entryBuilder,
ConfigCategory cat,
ConfigManager.TimeValues value)
{
final float SHOW_TIME = 6;
final float FADE_IN = 0.25F;
final float FADE_OUT = 0.5F;
DoubleListEntry maxTime =
entryBuilder.startDoubleField(new TranslatableText(
"option.immersive_hud." + name +
"MaxTime"),
(float) value.getMaxTime() / TICKS_PER_SECOND)
.setDefaultValue(SHOW_TIME)
.setMin(0)
.setMax(10 * 60 * TICKS_PER_SECOND) // 10 Minutes
.setTooltip(new TranslatableText(
"tooltip.immersive_hud." + name +
"MaxTime"))
.setSaveConsumer(val -> value.setMaxTime((int) (val * TICKS_PER_SECOND)))
.build();
DoubleListEntry fadeIn =
entryBuilder.startDoubleField(new TranslatableText(
"option.immersive_hud." + name +
"FadeIn"),
(float) value.getFadeInTime() / TICKS_PER_SECOND)
.setDefaultValue(FADE_IN)
.setMin(0)
.setMax(10 * 60 * TICKS_PER_SECOND)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud." + name +
"FadeIn"))
.setSaveConsumer(val -> value.setFadeInTime((int) (val * TICKS_PER_SECOND)))
.build();
DoubleListEntry fadeOut =
entryBuilder.startDoubleField(new TranslatableText(
"option.immersive_hud." + name +
"FadeOut"),
(float) value.getFadeOutTime() / TICKS_PER_SECOND)
.setDefaultValue(FADE_OUT)
.setMin(0)
.setMax(10 * 60 * TICKS_PER_SECOND)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud." + name +
"FadeOut"))
.setSaveConsumer(val -> value.setFadeOutTime((int) (val * TICKS_PER_SECOND)))
.build();
cat.addEntry(maxTime);
cat.addEntry(fadeIn);
cat.addEntry(fadeOut);
}
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory()
{
return screen -> {
ConfigCategory general;
ConfigEntryBuilder entryBuilder;
ConfigManager instance = ConfigManager.getInstance();
final ConfigBuilder builder = ConfigBuilder.create()
.setParentScreen(screen)
.setTitle(new TranslatableText(
"immersive_hud.configGui.title"))
.setSavingRunnable(() -> {
AutoConfig.getConfigHolder(ConfigManager.class).save();
});
general =
builder.getOrCreateCategory(new TranslatableText(
"category.immersive_hud.general"));
entryBuilder = builder.entryBuilder();
startTimeField("hotbar", entryBuilder,
general,
instance.getHotbarTime());
startTimeField("experience", entryBuilder,
general,
instance.getExperienceTime());
startTimeField("jump", entryBuilder,
general,
instance.getJumpTime());
startTimeField("jump", entryBuilder,
general,
instance.getHealthTime());
startTimeField("hunger", entryBuilder,
general,
instance.getHungerTime());
startTimeField("effect", entryBuilder,
general,
instance.getPotionTime());
general.addEntry(entryBuilder.startDoubleField(new TranslatableText(
"option.immersive_hud" +
".crosshairTime"),
(float) instance.getCrosshairTime() / TICKS_PER_SECOND)
.setDefaultValue(6)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud" +
".crosshairTime"))
.setSaveConsumer(val -> instance.setCrosshairTime((int) (val * TICKS_PER_SECOND)))
.build());
general.addEntry(entryBuilder.startDoubleField(new TranslatableText(
"option.immersive_hud.handTime"),
(float) instance.getHandTime() / TICKS_PER_SECOND)
.setDefaultValue(30)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud.handTime"))
.setSaveConsumer(val -> instance.setHandTime((int) (val * TICKS_PER_SECOND)))
.build());
general.addEntry(entryBuilder.startDoubleField(new TranslatableText(
"option.immersive_hud.minHealth"),
instance.getMinHealth())
.setDefaultValue(0.5)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud.minHealth"))
.setSaveConsumer(val -> instance.setMinHealth(val))
.build());
general.addEntry(entryBuilder.startIntField(new TranslatableText(
"option.immersive_hud.minHunger"),
instance.getMinHunger())
.setDefaultValue(17)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud.minHunger"))
.setSaveConsumer(val -> instance.setMinHunger(val))
.build());
general.addEntry(entryBuilder.startBooleanToggle(new TranslatableText(
"option.immersive_hud.showArmor"),
instance.shouldShowArmor())
.setDefaultValue(true)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud.showArmor"))
.setSaveConsumer(val -> instance.shouldShowArmor(val))
.build());
return builder.build();
};
try
{
if (Class.forName("me.shedaniel.autoconfig.AutoConfig") != null)
{
AutoConfig.register(ConfigManagerCloth.class,
Toml4jConfigSerializer::new);
}
}
catch (ClassNotFoundException e)
{
// Do nothing
}
}
/**
@@ -201,7 +60,10 @@ public class Main implements ModInitializer, ModMenuApi
*
* @since 0.1-1.16.4-fabric
*/
static float getAlpha(double renderTime, double maxTime, double fadeInTime, double fadeOutTime)
static float getAlpha(double renderTime,
double maxTime,
double fadeInTime,
double fadeOutTime)
{
if (renderTime <= fadeOutTime)
{

View File

@@ -0,0 +1,173 @@
package markil3.immersive_hud;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
import net.minecraft.text.TranslatableText;
import me.shedaniel.autoconfig.AutoConfig;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import me.shedaniel.clothconfig2.gui.entries.DoubleListEntry;
import static markil3.immersive_hud.Main.TICKS_PER_SECOND;
public class ModMenu implements ModMenuApi
{
private void startTimeField(String name, ConfigEntryBuilder entryBuilder,
ConfigCategory cat,
ConfigManager.TimeValues value)
{
final float SHOW_TIME = 6;
final float FADE_IN = 0.25F;
final float FADE_OUT = 0.5F;
DoubleListEntry maxTime =
entryBuilder.startDoubleField(new TranslatableText(
"option.immersive_hud." + name +
"MaxTime"),
(float) value.getMaxTime() / TICKS_PER_SECOND)
.setDefaultValue(SHOW_TIME)
.setMin(0)
.setMax(10 * 60 * TICKS_PER_SECOND) // 10 Minutes
.setTooltip(new TranslatableText(
"tooltip.immersive_hud." + name +
"MaxTime"))
.setSaveConsumer(val -> value.setMaxTime((int) (val * TICKS_PER_SECOND)))
.build();
DoubleListEntry fadeIn =
entryBuilder.startDoubleField(new TranslatableText(
"option.immersive_hud." + name +
"FadeIn"),
(float) value.getFadeInTime() / TICKS_PER_SECOND)
.setDefaultValue(FADE_IN)
.setMin(0)
.setMax(10 * 60 * TICKS_PER_SECOND)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud." + name +
"FadeIn"))
.setSaveConsumer(val -> value.setFadeInTime((int) (val * TICKS_PER_SECOND)))
.build();
DoubleListEntry fadeOut =
entryBuilder.startDoubleField(new TranslatableText(
"option.immersive_hud." + name +
"FadeOut"),
(float) value.getFadeOutTime() / TICKS_PER_SECOND)
.setDefaultValue(FADE_OUT)
.setMin(0)
.setMax(10 * 60 * TICKS_PER_SECOND)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud." + name +
"FadeOut"))
.setSaveConsumer(val -> value.setFadeOutTime((int) (val * TICKS_PER_SECOND)))
.build();
cat.addEntry(maxTime);
cat.addEntry(fadeIn);
cat.addEntry(fadeOut);
}
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory()
{
return screen -> {
ConfigCategory general;
ConfigEntryBuilder entryBuilder;
ConfigManager instance = ConfigManager.getInstance();
final ConfigBuilder builder = ConfigBuilder.create()
.setParentScreen(screen)
.setTitle(new TranslatableText(
"immersive_hud.configGui.title"))
.setSavingRunnable(() -> {
try
{
if (Class.forName("me.shedaniel.autoconfig.AutoConfig") != null)
{
AutoConfig.getConfigHolder(ConfigManagerCloth.class)
.save();
}
}
catch (ClassNotFoundException e)
{
// Do nothing
}
});
general =
builder.getOrCreateCategory(new TranslatableText(
"category.immersive_hud.general"));
entryBuilder = builder.entryBuilder();
startTimeField("hotbar", entryBuilder,
general,
instance.getHotbarTime());
startTimeField("experience", entryBuilder,
general,
instance.getExperienceTime());
startTimeField("jump", entryBuilder,
general,
instance.getJumpTime());
startTimeField("jump", entryBuilder,
general,
instance.getHealthTime());
startTimeField("hunger", entryBuilder,
general,
instance.getHungerTime());
startTimeField("effect", entryBuilder,
general,
instance.getPotionTime());
general.addEntry(entryBuilder.startDoubleField(new TranslatableText(
"option.immersive_hud" +
".crosshairTime"),
(float) instance.getCrosshairTime() / TICKS_PER_SECOND)
.setDefaultValue(6)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud" +
".crosshairTime"))
.setSaveConsumer(val -> instance.setCrosshairTime((int) (val * TICKS_PER_SECOND)))
.build());
general.addEntry(entryBuilder.startDoubleField(new TranslatableText(
"option.immersive_hud.handTime"),
(float) instance.getHandTime() / TICKS_PER_SECOND)
.setDefaultValue(30)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud.handTime"))
.setSaveConsumer(val -> instance.setHandTime((int) (val * TICKS_PER_SECOND)))
.build());
general.addEntry(entryBuilder.startDoubleField(new TranslatableText(
"option.immersive_hud.minHealth"),
instance.getMinHealth())
.setDefaultValue(0.5)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud.minHealth"))
.setSaveConsumer(val -> instance.setMinHealth(val))
.build());
general.addEntry(entryBuilder.startIntField(new TranslatableText(
"option.immersive_hud.minHunger"),
instance.getMinHunger())
.setDefaultValue(17)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud.minHunger"))
.setSaveConsumer(val -> instance.setMinHunger(val))
.build());
general.addEntry(entryBuilder.startBooleanToggle(new TranslatableText(
"option.immersive_hud.showArmor"),
instance.shouldShowArmor())
.setDefaultValue(true)
.setTooltip(new TranslatableText(
"tooltip.immersive_hud.showArmor"))
.setSaveConsumer(val -> instance.shouldShowArmor(val))
.build());
return builder.build();
};
}
}