diff --git a/src/main/java/com/minelittlepony/client/MineLittlePony.java b/src/main/java/com/minelittlepony/client/MineLittlePony.java index b9d361d9..14e41dd9 100644 --- a/src/main/java/com/minelittlepony/client/MineLittlePony.java +++ b/src/main/java/com/minelittlepony/client/MineLittlePony.java @@ -5,6 +5,7 @@ import com.minelittlepony.client.hdskins.IndirectHDSkins; import com.minelittlepony.client.pony.PonyManager; import com.minelittlepony.client.render.tileentities.skull.PonySkullRenderer; import com.minelittlepony.client.settings.ClientPonyConfig; +import com.minelittlepony.common.client.gui.VisibilityMode; import com.minelittlepony.common.client.gui.element.Button; import com.minelittlepony.common.client.gui.sprite.TextureSprite; import com.minelittlepony.common.event.ClientReadyCallback; @@ -52,11 +53,14 @@ public class MineLittlePony implements ClientModInitializer { private final PonyRenderManager renderManager = PonyRenderManager.getInstance(); - private PonyConfig config; + private ClientPonyConfig config; private PonyManager ponyManager; private FabricKeyBinding keyBinding; + private boolean hasHdSkins; + private boolean hasModMenu; + public MineLittlePony() { instance = this; } @@ -70,6 +74,9 @@ public class MineLittlePony implements ClientModInitializer { @Override public void onInitializeClient() { + hasHdSkins = FabricLoader.getInstance().isModLoaded("hdskins"); + hasModMenu = FabricLoader.getInstance().isModLoaded("modmenu"); + config = JsonConfig.of(GamePaths.getConfigDirectory().resolve("minelp.json"), ClientPonyConfig::new); ponyManager = new PonyManager(config); keyBinding = FabricKeyBinding.Builder.create(new Identifier("minelittlepony", "settings"), InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_F9, "key.categories.misc").build(); @@ -134,17 +141,23 @@ public class MineLittlePony implements ClientModInitializer { private void onScreenInit(Screen screen, ScreenInitCallback.ButtonList buttons) { if (screen instanceof TitleScreen) { - int y = FabricLoader.getInstance().isModLoaded("hdskins") ? 80 : 50; - - buttons.add(new Button(screen.width - 50, screen.height - y, 20, 20).onClick(sender -> { - MinecraftClient.getInstance().openScreen(new GuiPonySettings()); - }).setStyle(new com.minelittlepony.common.client.gui.style.Style() - .setIcon(new TextureSprite() - .setPosition(2, 2) - .setTexture(new Identifier("minelittlepony", "textures/gui/pony.png")) - .setTextureSize(16, 16) - .setSize(16, 16)) + VisibilityMode mode = config.getHorseButtonMode(); + boolean show = mode == VisibilityMode.ON || (mode == VisibilityMode.AUTO + && !(hasHdSkins || hasModMenu )); + + if (show) { + int y = hasHdSkins ? 80 : 50; + buttons.add(new Button(screen.width - 50, screen.height - y, 20, 20).onClick(sender -> { + MinecraftClient.getInstance().openScreen(new GuiPonySettings()); + }).setStyle(new com.minelittlepony.common.client.gui.style.Style() + .setIcon(new TextureSprite() + .setPosition(2, 2) + .setTexture(new Identifier("minelittlepony", "textures/gui/pony.png")) + .setTextureSize(16, 16) + .setSize(16, 16)) + )); + } } } diff --git a/src/main/java/com/minelittlepony/client/gui/GuiPonySettings.java b/src/main/java/com/minelittlepony/client/gui/GuiPonySettings.java index 8dfdf2c7..453bb66b 100644 --- a/src/main/java/com/minelittlepony/client/gui/GuiPonySettings.java +++ b/src/main/java/com/minelittlepony/client/gui/GuiPonySettings.java @@ -6,14 +6,14 @@ import net.minecraft.text.LiteralText; import com.minelittlepony.client.MineLittlePony; import com.minelittlepony.client.render.entities.MobRenderers; +import com.minelittlepony.client.settings.ClientPonyConfig; import com.minelittlepony.common.client.gui.GameGui; import com.minelittlepony.common.client.gui.ScrollContainer; import com.minelittlepony.common.client.gui.element.Button; +import com.minelittlepony.common.client.gui.element.EnumSlider; import com.minelittlepony.common.client.gui.element.Label; import com.minelittlepony.common.client.gui.element.Slider; import com.minelittlepony.common.client.gui.element.Toggle; -import com.minelittlepony.pony.meta.Size; -import com.minelittlepony.settings.PonyConfig; import com.minelittlepony.settings.PonyLevel; import com.minelittlepony.settings.PonySettings; @@ -29,7 +29,7 @@ public class GuiPonySettings extends GameGui { private static final String MOB_PREFIX = "minelp.mobs."; - private PonyConfig config; + private ClientPonyConfig config; private final ScrollContainer content = new ScrollContainer(); @@ -38,7 +38,7 @@ public class GuiPonySettings extends GameGui { public GuiPonySettings() { super(new LiteralText(OPTIONS_PREFIX + "title")); - config = MineLittlePony.getInstance().getConfig(); + config = (ClientPonyConfig)MineLittlePony.getInstance().getConfig(); content.margin.top = 30; content.margin.bottom = 30; @@ -90,9 +90,8 @@ public class GuiPonySettings extends GameGui { .onChange(config::setGlobalScaleFactor) .setFormatter(value -> I18n.translate("minelp.debug.scale.value", I18n.translate(describeCurrentScale(value))))); content.addButton(new Label(LEFT, row += 30)).getStyle().setText("minelp.debug.size"); - content.addButton(new Slider(LEFT, row += 15, 0, Size.REGISTRY.length - 1, config.getOverrideSize().ordinal()) - .onChange(config::setSizeOverride) - .setFormatter(value -> value < Size.REGISTRY.length ? Size.REGISTRY[(int)(float)value].name() : "Unset")); + content.addButton(new EnumSlider<>(LEFT, row += 15, config.getOverrideSize()) + .onChange(config::setSizeOverride)); } row += 20; @@ -103,6 +102,11 @@ public class GuiPonySettings extends GameGui { .getStyle().setText(OPTIONS_PREFIX + i.name().toLowerCase()); } + content.addButton(new Label(LEFT, row += 20)).getStyle().setText(OPTIONS_PREFIX + "button"); + + content.addButton(new EnumSlider<>(LEFT, row += 20, config.getHorseButtonMode()) + .onChange(config::setHorseButtonMode)); + if (RIGHT != LEFT) { row = 0; } else { diff --git a/src/main/java/com/minelittlepony/client/settings/ClientPonyConfig.java b/src/main/java/com/minelittlepony/client/settings/ClientPonyConfig.java index 1fbf25e2..3256bde8 100644 --- a/src/main/java/com/minelittlepony/client/settings/ClientPonyConfig.java +++ b/src/main/java/com/minelittlepony/client/settings/ClientPonyConfig.java @@ -4,10 +4,13 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.entity.player.PlayerEntity; import com.minelittlepony.client.render.entities.MobRenderers; +import com.minelittlepony.common.client.gui.VisibilityMode; import com.minelittlepony.settings.PonyConfig; public class ClientPonyConfig extends PonyConfig { + private final Setting buttonMode = new Value<>("horseButton", VisibilityMode.AUTO); + public ClientPonyConfig() { initWith(MobRenderers.values()); } @@ -20,4 +23,13 @@ public class ClientPonyConfig extends PonyConfig { player.calculateDimensions(); } } + + public VisibilityMode getHorseButtonMode() { + return buttonMode.get(); + } + + public VisibilityMode setHorseButtonMode(VisibilityMode value) { + buttonMode.set(value); + return value; + } } diff --git a/src/main/java/com/minelittlepony/settings/PonyConfig.java b/src/main/java/com/minelittlepony/settings/PonyConfig.java index 91cb8de7..1564fb49 100644 --- a/src/main/java/com/minelittlepony/settings/PonyConfig.java +++ b/src/main/java/com/minelittlepony/settings/PonyConfig.java @@ -62,11 +62,8 @@ public class PonyConfig extends JsonConfig { return sizeOverride.get(); } - public float setSizeOverride(float value) { - value = Math.round(value); - Size size = Size.REGISTRY[(int) value % Size.REGISTRY.length]; - - sizeOverride.set(size); - return size.ordinal(); + public Size setSizeOverride(Size value) { + sizeOverride.set(value); + return value; } } diff --git a/src/main/resources/assets/minelittlepony/lang/en_us.json b/src/main/resources/assets/minelittlepony/lang/en_us.json index 1ebe4dab..9a77af97 100644 --- a/src/main/resources/assets/minelittlepony/lang/en_us.json +++ b/src/main/resources/assets/minelittlepony/lang/en_us.json @@ -14,6 +14,7 @@ "minelp.options.fpsmagic": "Ponies use magic in first-person", "minelp.options.ponyskulls": "Render mob heads as ponies", "minelp.options.frustrum": "Enable Frustum checks", + "minelp.options.button": "Display On Title Screen", "minelp.mobs.title": "Mob Settings", "minelp.mobs.villagers": "Ponify villagers", "minelp.mobs.zombies": "Ponify zombies",