Sit/src/main/java/one/oth3r/sit/ModMenu.java

223 lines
18 KiB
Java
Raw Normal View History

2023-07-20 20:17:52 -05:00
package one.oth3r.sit;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
import dev.isxander.yacl3.api.*;
import dev.isxander.yacl3.api.controller.BooleanControllerBuilder;
import dev.isxander.yacl3.api.controller.EnumControllerBuilder;
import dev.isxander.yacl3.api.controller.StringControllerBuilder;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import net.minecraft.text.TextColor;
import net.minecraft.util.Formatting;
2024-04-04 21:45:28 -05:00
import one.oth3r.sit.file.Config;
2023-07-20 20:17:52 -05:00
public class ModMenu implements ModMenuApi {
2024-03-10 23:02:30 -05:00
private static MutableText lang(String key) {
return Text.translatable("config.sit."+key);
}
2023-07-20 20:17:52 -05:00
private static MutableText lang(String key, Object... args) {
2024-03-10 23:02:30 -05:00
return Text.translatable("config.sit."+key,args);
2023-07-20 20:17:52 -05:00
}
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
// return null if YACL isn't installed to not throw an error
if (!yaclCheck()) return screen -> null;
2024-04-04 21:45:28 -05:00
return parent -> YetAnotherConfigLib.createBuilder().save(Config::save)
2023-07-20 20:17:52 -05:00
.title(Text.of("Sit!"))
.category(ConfigCategory.createBuilder()
.name(lang("category.general"))
2024-03-10 23:02:30 -05:00
.tooltip(lang("category.general.tooltip"))
2023-07-20 20:17:52 -05:00
.option(Option.<Boolean>createBuilder()
.name(lang("general.keep_active"))
.description(OptionDescription.of(lang("general.keep_active.description")))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.keepActive, () -> Config.keepActive, n -> Config.keepActive = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter())
.build())
.option(Option.<Boolean>createBuilder()
.name(lang("general.sit_while_seated"))
.description(OptionDescription.of(lang("general.sit_while_seated.description")))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.sitWhileSeated, () -> Config.sitWhileSeated, n -> Config.sitWhileSeated = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter())
.build())
.option(Option.<Boolean>createBuilder()
.name(Text.of("Sitting with Hand"))
.description(OptionDescription.of(Text.of("Toggles the player's ability to sit with their hand.")))
.binding(Config.defaults.handSitting,()-> Config.handSitting, n -> Config.handSitting = n)
.controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter())
2023-07-20 20:17:52 -05:00
.build())
.group(OptionGroup.createBuilder()
.name(lang("general.sittable"))
.description(OptionDescription.of(lang("general.sittable.description")))
.option(Option.<Boolean>createBuilder()
.name(lang("general.sittable.stairs"))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.stairsOn, () -> Config.stairsOn, n -> Config.stairsOn = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).onOffFormatter())
.build())
.option(Option.<Boolean>createBuilder()
.name(lang("general.sittable.slabs"))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.slabsOn, () -> Config.slabsOn, n -> Config.slabsOn = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).onOffFormatter())
.build())
.option(Option.<Boolean>createBuilder()
.name(lang("general.sittable.carpets"))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.carpetsOn, () -> Config.carpetsOn, n -> Config.carpetsOn = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).onOffFormatter())
.build())
.option(Option.<Boolean>createBuilder()
.name(lang("general.sittable.full_blocks"))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.fullBlocksOn, () -> Config.fullBlocksOn, n -> Config.fullBlocksOn = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).onOffFormatter())
.build())
.option(Option.<Boolean>createBuilder()
.name(lang("general.sittable.custom"))
.description(OptionDescription.of(lang("general.sittable.custom.description")))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.customOn, () -> Config.customOn, n -> Config.customOn = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).onOffFormatter())
.build())
.build())
.group(ListOption.<String>createBuilder()
.name(lang("general.sittable_blocks"))
.description(OptionDescription.of(
lang("general.sittable_blocks.description")
2024-03-10 23:02:30 -05:00
.append("\n\n").append(lang("general.sittable_blocks.description_2",
2024-01-08 11:42:33 -06:00
Text.literal("\"")
.append(Text.literal("minecraft:campfire").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA))))
.append("|")
.append(Text.literal("0.255").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED))))
.append("|")
.append(Text.literal("1").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN))))
.append("|")
.append(Text.literal("lit=false").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GOLD))))
2024-03-10 23:02:30 -05:00
.append("\"").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY)))))
.append("\n\n").append(lang("general.sittable_blocks.description_4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA))))
.append("\n").append(lang("general.sittable_blocks.description_5").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED))))
.append("\n").append(lang("general.sittable_blocks.description_6").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN))))
.append("\n").append(lang("general.sittable_blocks.description_7").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GOLD))))
.append("\n\n").append(lang("general.sittable_blocks.description_8").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.YELLOW))))))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.customBlocks, () -> Config.customBlocks, n -> Config.customBlocks = n)
2023-07-20 20:17:52 -05:00
.controller(StringControllerBuilder::create)
.initial("")
.build())
.build())
.category(ConfigCategory.createBuilder()
.name(lang("category.main_hand"))
2024-03-10 23:02:30 -05:00
.tooltip(lang("category.main_hand.tooltip"))
2024-04-04 21:45:28 -05:00
.option(Option.<Config.HandRequirement>createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.requirements"))
.description(OptionDescription.of(lang("hand.requirements.description")
.append("\n\n").append(lang("hand.requirements.description_2").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA))))
.append("\n").append(lang("hand.requirements.description_3").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN))))
.append("\n").append(lang("hand.requirements.description_4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED))))))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.mainReq, () -> Config.mainReq, n -> Config.mainReq = n)
.controller(opt -> EnumControllerBuilder.create(opt).enumClass(Config.HandRequirement.class)
2024-03-10 23:02:30 -05:00
.formatValue(v -> Text.translatable("config.sit."+v.name().toLowerCase())))
2023-07-20 20:17:52 -05:00
.build())
.group(OptionGroup.createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.restrictions"))
.description(OptionDescription.of(lang("hand.restrictions.description")))
2023-07-20 20:17:52 -05:00
.option(Option.<Boolean>createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.restrictions.blocks"))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.mainBlock,()-> Config.mainBlock, n -> Config.mainBlock = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter())
.build())
.option(Option.<Boolean>createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.restrictions.food"))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.mainFood,()-> Config.mainFood, n -> Config.mainFood = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter())
.build())
.option(Option.<Boolean>createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.restrictions.usable"))
.description(OptionDescription.of(lang("hand.restrictions.usable.description")))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.mainUsable,()-> Config.mainUsable, n -> Config.mainUsable = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter())
.build())
.build())
.group(ListOption.<String>createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.whitelist"))
.description(OptionDescription.of(lang("hand.whitelist.description")
.append("\n\n").append(lang("hand.list.description"))
.append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.mainWhitelist, () -> Config.mainWhitelist, n -> Config.mainWhitelist = n)
2023-07-20 20:17:52 -05:00
.controller(StringControllerBuilder::create)
.initial("")
.build())
.group(ListOption.<String>createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.blacklist"))
.description(OptionDescription.of(lang("hand.blacklist.description")
.append("\n\n").append(lang("hand.list.description"))
.append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.mainBlacklist, () -> Config.mainBlacklist, n -> Config.mainBlacklist = n)
2023-07-20 20:17:52 -05:00
.controller(StringControllerBuilder::create)
.initial("")
.build())
.build())
.category(ConfigCategory.createBuilder()
.name(lang("category.off_hand"))
2024-03-10 23:02:30 -05:00
.tooltip(lang("category.off_hand.tooltip"))
2024-04-04 21:45:28 -05:00
.option(Option.<Config.HandRequirement>createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.requirements"))
.description(OptionDescription.of(lang("hand.requirements.description")
.append("\n\n").append(lang("hand.requirements.description_2").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.AQUA))))
.append("\n").append(lang("hand.requirements.description_3").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.GREEN))))
.append("\n").append(lang("hand.requirements.description_4").styled(style -> style.withColor(TextColor.fromFormatting(Formatting.RED))))))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.offReq, () -> Config.offReq, n -> Config.offReq = n)
.controller(opt -> EnumControllerBuilder.create(opt).enumClass(Config.HandRequirement.class)
2024-03-10 23:02:30 -05:00
.formatValue(v -> Text.translatable("config.sit."+v.name().toLowerCase())))
2023-07-20 20:17:52 -05:00
.build())
.group(OptionGroup.createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.restrictions"))
.description(OptionDescription.of(lang("hand.restrictions.description")))
2023-07-20 20:17:52 -05:00
.option(Option.<Boolean>createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.restrictions.blocks"))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.offBlock,()-> Config.offBlock, n -> Config.offBlock = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter())
.build())
.option(Option.<Boolean>createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.restrictions.food"))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.offFood,()-> Config.offFood, n -> Config.offFood = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter())
.build())
.option(Option.<Boolean>createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.restrictions.usable"))
.description(OptionDescription.of(lang("hand.restrictions.usable.description")))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.offUsable,()-> Config.offUsable, n -> Config.offUsable = n)
2023-07-20 20:17:52 -05:00
.controller(opt -> BooleanControllerBuilder.create(opt).trueFalseFormatter())
.build())
.build())
.group(ListOption.<String>createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.whitelist"))
.description(OptionDescription.of(lang("hand.whitelist.description")
.append("\n\n").append(lang("hand.list.description"))
.append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.offWhitelist, () -> Config.offWhitelist, n -> Config.offWhitelist = n)
2023-07-20 20:17:52 -05:00
.controller(StringControllerBuilder::create)
.initial("")
.build())
.group(ListOption.<String>createBuilder()
2024-03-10 23:02:30 -05:00
.name(lang("hand.blacklist"))
.description(OptionDescription.of(lang("hand.blacklist.description")
.append("\n\n").append(lang("hand.list.description"))
.append(lang("hand.list.description_2").styled(style -> style.withItalic(true).withColor(TextColor.fromFormatting(Formatting.GRAY))))))
2024-04-04 21:45:28 -05:00
.binding(Config.defaults.offBlacklist, () -> Config.offBlacklist, n -> Config.offBlacklist = n)
2023-07-20 20:17:52 -05:00
.controller(StringControllerBuilder::create)
.initial("")
.build())
.build())
.build().generateScreen(parent);
}
/**
* check if YACL is installed by getting a class and seeing if it throws
* @return if YACL is installed
*/
public static boolean yaclCheck() {
try {
2024-04-29 11:45:34 -05:00
Class.forName("dev.isxander.yacl3.platform.Env");
return true;
} catch (ClassNotFoundException e) {
return false;
}
}
2023-07-20 20:17:52 -05:00
}