diff options
author | hannibal2 <24389977+hannibal002@users.noreply.github.com> | 2023-03-29 21:59:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-29 21:59:35 +0200 |
commit | f9850125f8bf12abd37f8246c5250d0edc4edd49 (patch) | |
tree | 9607abb880d04125226befcf946cbfebbac7e2ae /src/main/java | |
parent | 073bb8d1f139b98508cd21dae6fc377fcc7c9230 (diff) | |
parent | ed2dfa0bfd7a6d69a2eb7349009625991e363fee (diff) | |
download | skyhanni-f9850125f8bf12abd37f8246c5250d0edc4edd49.tar.gz skyhanni-f9850125f8bf12abd37f8246c5250d0edc4edd49.tar.bz2 skyhanni-f9850125f8bf12abd37f8246c5250d0edc4edd49.zip |
Merge pull request #22
The non controversial config changes
Diffstat (limited to 'src/main/java')
80 files changed, 221 insertions, 6742 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java index a242ccbc8..073c4e514 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java @@ -84,6 +84,9 @@ public class SkyHanniMod { public static RepoManager repo; public static ConfigManager configManager; private static Logger logger; + public static org.slf4j.Logger getLogger(String name) { + return org.slf4j.LoggerFactory.getLogger("SkyHanni." + name); + } public static List<Object> modules = new ArrayList<>(); public static Job globalJob = JobKt.Job(null); @@ -244,7 +247,6 @@ public class SkyHanniMod { configManager = new ConfigManager(); configManager.firstLoad(); - new FirstConfigLoadedEvent().postAndCatch(); MinecraftConsoleFilter.Companion.initLogging(); diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigEditor.java b/src/main/java/at/hannibal2/skyhanni/config/ConfigEditor.java deleted file mode 100644 index f0e4398d5..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigEditor.java +++ /dev/null @@ -1,884 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config; - -import at.hannibal2.skyhanni.SkyHanniMod; -import at.hannibal2.skyhanni.config.core.GlScissorStack; -import at.hannibal2.skyhanni.config.core.GuiElement; -import at.hannibal2.skyhanni.config.core.GuiElementTextField; -import at.hannibal2.skyhanni.config.core.config.gui.GuiOptionEditor; -import at.hannibal2.skyhanni.config.core.config.gui.GuiOptionEditorAccordion; -import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; -import at.hannibal2.skyhanni.config.core.util.lerp.LerpUtils; -import at.hannibal2.skyhanni.config.core.util.lerp.LerpingInteger; -import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils; -import at.hannibal2.skyhanni.utils.StringUtils; -import com.google.common.collect.Lists; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import org.lwjgl.input.Keyboard; -import org.lwjgl.input.Mouse; -import org.lwjgl.opengl.GL11; - -import java.awt.*; -import java.net.URI; -import java.util.List; -import java.util.*; - -import static at.hannibal2.skyhanni.config.GuiTextures.DISCORD; -import static at.hannibal2.skyhanni.config.GuiTextures.GITHUB; - -public class ConfigEditor extends GuiElement { - private static final ResourceLocation[] socialsIco = new ResourceLocation[]{ - DISCORD, GITHUB - }; - private static final String[] socialsLink = new String[]{ - "https://discord.gg/8DXVN4BJz3", - "https://github.com/hannibal002/SkyHanni" - }; - private static final ResourceLocation SEARCH_ICON = new ResourceLocation("notenoughupdates:core/search.png"); - public static ConfigEditor editor = new ConfigEditor(SkyHanniMod.feature); - private final long openedMillis; - private final LerpingInteger optionsScroll = new LerpingInteger(0, 150); - private final LerpingInteger categoryScroll = new LerpingInteger(0, 150); - private final LinkedHashMap<String, ConfigProcessor.ProcessedCategory> processedConfig; - private final TreeMap<String, Set<ConfigProcessor.ProcessedOption>> searchOptionMap = new TreeMap<>(); - private final HashMap<ConfigProcessor.ProcessedOption, ConfigProcessor.ProcessedCategory> categoryForOption = - new HashMap<>(); - private final LerpingInteger minimumSearchSize = new LerpingInteger(0, 150); - private final GuiElementTextField searchField = new GuiElementTextField("", 0, 20, 0); - private String selectedCategory = null; - private Set<ConfigProcessor.ProcessedCategory> searchedCategories = null; - private Map<ConfigProcessor.ProcessedCategory, Set<Integer>> searchedAccordions = null; - private Set<ConfigProcessor.ProcessedOption> searchedOptions = null; - private float optionsBarStart; - private float optionsBarend; - private int lastMouseX = 0; - private int keyboardScrollXCutoff = 0; - - public ConfigEditor(Features config) { - this(config, null); - } - - public ConfigEditor(Features config, String categoryOpen) { - this.openedMillis = System.currentTimeMillis(); - this.processedConfig = ConfigProcessor.create(config); - - for (ConfigProcessor.ProcessedCategory category : processedConfig.values()) { - for (ConfigProcessor.ProcessedOption option : category.options.values()) { - categoryForOption.put(option, category); - - String combined = category.name + " " + category.desc + " " + option.name + " " + option.desc; - combined = combined.replaceAll("[^a-zA-Z_ ]", "").toLowerCase(); - for (String word : combined.split("[ _]")) { - searchOptionMap.computeIfAbsent(word, k -> new HashSet<>()).add(option); - } - } - } - - if (categoryOpen != null) { - for (Map.Entry<String, ConfigProcessor.ProcessedCategory> category : processedConfig.entrySet()) { - if (category.getValue().name.equalsIgnoreCase(categoryOpen)) { - selectedCategory = category.getKey(); - break; - } - } - if (selectedCategory == null) { - for (Map.Entry<String, ConfigProcessor.ProcessedCategory> category : processedConfig.entrySet()) { - if (category.getValue().name.toLowerCase().startsWith(categoryOpen.toLowerCase())) { - selectedCategory = category.getKey(); - break; - } - } - } - if (selectedCategory == null) { - for (Map.Entry<String, ConfigProcessor.ProcessedCategory> category : processedConfig.entrySet()) { - if (category.getValue().name.toLowerCase().contains(categoryOpen.toLowerCase())) { - selectedCategory = category.getKey(); - break; - } - } - } - } - - editor = this; - } - - private LinkedHashMap<String, ConfigProcessor.ProcessedCategory> getCurrentConfigEditing() { - LinkedHashMap<String, ConfigProcessor.ProcessedCategory> newMap = new LinkedHashMap<>(processedConfig); - if (searchedCategories != null) newMap.values().retainAll(searchedCategories); - return newMap; - } - - private LinkedHashMap<String, ConfigProcessor.ProcessedOption> getOptionsInCategory(ConfigProcessor.ProcessedCategory cat) { - LinkedHashMap<String, ConfigProcessor.ProcessedOption> newMap = new LinkedHashMap<>(cat.options); - - if (searchedOptions != null) { - Set<ConfigProcessor.ProcessedOption> retain = new HashSet<>(); - retain.addAll(searchedOptions); - - if (searchedAccordions != null) { - Set<Integer> visibleAccordions = searchedAccordions.get(cat); - - if (visibleAccordions != null && !visibleAccordions.isEmpty()) { - for (ConfigProcessor.ProcessedOption option : newMap.values()) { - if (option.editor instanceof GuiOptionEditorAccordion) { - int accordionId = ((GuiOptionEditorAccordion) option.editor).getAccordionId(); - - if (visibleAccordions.contains(accordionId)) { - retain.add(option); - } - } - } - } - - } - - newMap.values().retainAll(retain); - } - return newMap; - } - - public String getSelectedCategory() { - return selectedCategory; - } - - private void setSelectedCategory(String category) { - selectedCategory = category; - optionsScroll.setValue(0); - } - - public String getSelectedCategoryName() { - return processedConfig.get(selectedCategory).name; - } - - public void search() { - String search = searchField.getText().trim().replaceAll("[^a-zA-Z_ ]", "").toLowerCase(); - searchedCategories = null; - searchedOptions = null; - searchedAccordions = null; - - if (!search.isEmpty()) { - searchedCategories = new HashSet<>(); - searchedAccordions = new HashMap<>(); - - for (String word : search.split(" ")) { - if (word.trim().isEmpty()) continue; - - Set<ConfigProcessor.ProcessedOption> options = new HashSet<>(); - - Map<String, Set<ConfigProcessor.ProcessedOption>> map = StringUtils.INSTANCE.subMapWithKeysThatAreSuffixes(word, searchOptionMap); - - map.values().forEach(options::addAll); - - if (!options.isEmpty()) { - if (searchedOptions == null) { - searchedOptions = new HashSet<>(options); - } else { - searchedOptions.retainAll(options); - } - } - } - - if (searchedOptions == null) { - searchedOptions = new HashSet<>(); - } else { - for (ConfigProcessor.ProcessedOption option : searchedOptions) { - ConfigProcessor.ProcessedCategory cat = categoryForOption.get(option); - if (cat == null) continue; - - searchedCategories.add(cat); - searchedAccordions.computeIfAbsent(cat, k -> new HashSet<>()).add(option.accordionId); - } - } - } - } - - public void render() { - optionsScroll.tick(); - categoryScroll.tick(); - handleKeyboardPresses(); - - List<String> tooltipToDisplay = null; - - long currentTime = System.currentTimeMillis(); - long delta = currentTime - openedMillis; - - ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - int width = scaledResolution.getScaledWidth(); - int height = scaledResolution.getScaledHeight(); - int mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; - int mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1; - - float opacityFactor = LerpUtils.sigmoidZeroOne(delta / 500f); - GuiRenderUtils.drawGradientRect(0, 0, 0, width, height, - (int) (0x80 * opacityFactor) << 24 | 0x101010, - (int) (0x90 * opacityFactor) << 24 | 0x101010 - ); - - int xSize = Math.min(scaledResolution.getScaledWidth() - 100 / scaledResolution.getScaleFactor(), 500); - int ySize = Math.min(scaledResolution.getScaledHeight() - 100 / scaledResolution.getScaleFactor(), 400); - - int x = (scaledResolution.getScaledWidth() - xSize) / 2; - int y = (scaledResolution.getScaledHeight() - ySize) / 2; - - int adjScaleFactor = Math.max(2, scaledResolution.getScaleFactor()); - - int openingXSize = xSize; - int openingYSize = ySize; - if (delta < 150) { - openingXSize = (int) (delta * xSize / 150); - openingYSize = 5; - } else if (delta < 300) { - openingYSize = 5 + (int) (delta - 150) * (ySize - 5) / 150; - } - GuiRenderUtils.drawFloatingRectDark( - (scaledResolution.getScaledWidth() - openingXSize) / 2, - (scaledResolution.getScaledHeight() - openingYSize) / 2, - openingXSize, openingYSize - ); - GlScissorStack.clear(); - GlScissorStack.push((scaledResolution.getScaledWidth() - openingXSize) / 2, - (scaledResolution.getScaledHeight() - openingYSize) / 2, - (scaledResolution.getScaledWidth() + openingXSize) / 2, - (scaledResolution.getScaledHeight() + openingYSize) / 2, scaledResolution - ); - - GuiRenderUtils.drawFloatingRectDark(x + 5, y + 5, xSize - 10, 20, false); - - FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; - String text = "SkyHanni " + SkyHanniMod.VERSION + " by §channibal2§r, config by §5Moulberry"; - TextRenderUtils.drawStringCenteredScaledMaxWidth(text, fr, x + xSize / 2f, y + 15, false, 400, 0xa0a0a0); - GuiRenderUtils.drawFloatingRectDark(x + 4, y + 49 - 20, - 140, ySize - 54 + 20, false - ); - - int innerPadding = 20 / adjScaleFactor; - int innerLeft = x + 4 + innerPadding; - int innerRight = x + 144 - innerPadding; - int innerTop = y + 49 + innerPadding; - int innerBottom = y + ySize - 5 - innerPadding; - Gui.drawRect(innerLeft, innerTop, innerLeft + 1, innerBottom, 0xff08080E); //Left - Gui.drawRect(innerLeft + 1, innerTop, innerRight, innerTop + 1, 0xff08080E); //Top - Gui.drawRect(innerRight - 1, innerTop + 1, innerRight, innerBottom, 0xff28282E); //Right - Gui.drawRect(innerLeft + 1, innerBottom - 1, innerRight - 1, innerBottom, 0xff28282E); //Bottom - Gui.drawRect(innerLeft + 1, innerTop + 1, innerRight - 1, innerBottom - 1, 0x6008080E); //Middle - - GlScissorStack.push(0, innerTop + 1, scaledResolution.getScaledWidth(), - innerBottom - 1, scaledResolution - ); - - float catBarSize = 1; - int catY = -categoryScroll.getValue(); - - LinkedHashMap<String, ConfigProcessor.ProcessedCategory> currentConfigEditing = getCurrentConfigEditing(); - for (Map.Entry<String, ConfigProcessor.ProcessedCategory> entry : currentConfigEditing.entrySet()) { - String selectedCategory = getSelectedCategory(); - if (selectedCategory == null || !currentConfigEditing.containsKey(selectedCategory)) { - setSelectedCategory(entry.getKey()); - } - String catName = entry.getValue().name; - if (entry.getKey().equals(getSelectedCategory())) { - catName = EnumChatFormatting.DARK_AQUA.toString() + EnumChatFormatting.UNDERLINE + catName; - } else { - catName = EnumChatFormatting.GRAY + catName; - } - TextRenderUtils.drawStringCenteredScaledMaxWidth(catName, - fr, x + 75, y + 70 + catY, false, 100, -1 - ); - catY += 15; - if (catY > 0) { - catBarSize = - LerpUtils.clampZeroOne((float) (innerBottom - innerTop - 2) / (catY + 5 + categoryScroll.getValue())); - } - } - - float catBarStart = categoryScroll.getValue() / (float) (catY + categoryScroll.getValue()); - float catBarEnd = catBarStart + catBarSize; - if (catBarEnd > 1) { - catBarEnd = 1; - if (categoryScroll.getTarget() / (float) (catY + categoryScroll.getValue()) + catBarSize < 1) { - int target = optionsScroll.getTarget(); - categoryScroll.setValue((int) Math.ceil( - (catY + 5 + categoryScroll.getValue()) - catBarSize * (catY + 5 + categoryScroll.getValue()))); - categoryScroll.setTarget(target); - } else { - categoryScroll.setValue((int) Math.ceil( - (catY + 5 + categoryScroll.getValue()) - catBarSize * (catY + 5 + categoryScroll.getValue()))); - } - } - int catDist = innerBottom - innerTop - 12; - Gui.drawRect(innerLeft + 2, innerTop + 5, innerLeft + 7, innerBottom - 5, 0xff101010); - Gui.drawRect(innerLeft + 3, innerTop + 6 + (int) (catDist * catBarStart), innerLeft + 6, - innerTop + 6 + (int) (catDist * catBarEnd), 0xff303030 - ); - - GlScissorStack.pop(scaledResolution); - - TextRenderUtils.drawStringCenteredScaledMaxWidth("Categories", - fr, x + 75, y + 44, false, 120, 0xa368ef - ); - - GuiRenderUtils.drawFloatingRectDark(x + 149, y + 29, xSize - 154, ySize - 34, false); - - innerLeft = x + 149 + innerPadding; - innerRight = x + xSize - 5 - innerPadding; - innerBottom = y + ySize - 5 - innerPadding; - - Minecraft.getMinecraft().getTextureManager().bindTexture(SEARCH_ICON); - GlStateManager.color(1, 1, 1, 1); - GuiRenderUtils.drawTexturedRect(innerRight - 20, innerTop - (20 + innerPadding) / 2 - 9, 18, 18, GL11.GL_NEAREST); - - minimumSearchSize.tick(); - boolean shouldShow = !searchField.getText().trim().isEmpty() || searchField.getFocus(); - if (shouldShow && minimumSearchSize.getTarget() < 30) { - minimumSearchSize.setTarget(30); - minimumSearchSize.resetTimer(); - } else if (!shouldShow && minimumSearchSize.getTarget() > 0) { - minimumSearchSize.setTarget(0); - minimumSearchSize.resetTimer(); - } - - int rightStuffLen = 20; - if (minimumSearchSize.getValue() > 1) { - int strLen = Minecraft.getMinecraft().fontRendererObj.getStringWidth(searchField.getText()) + 10; - if (!shouldShow) strLen = 0; - - int len = Math.max(strLen, minimumSearchSize.getValue()); - searchField.setSize(len, 18); - searchField.render(innerRight - 25 - len, innerTop - (20 + innerPadding) / 2 - 9); - - rightStuffLen += 5 + len; - } - - if (getSelectedCategory() != null && currentConfigEditing.containsKey(getSelectedCategory())) { - ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get(getSelectedCategory()); - - TextRenderUtils.drawStringScaledMaxWidth(cat.desc, - fr, innerLeft + 5, y + 40, true, innerRight - innerLeft - rightStuffLen - 10, 0xb0b0b0 - ); - } - - Gui.drawRect(innerLeft, innerTop, innerLeft + 1, innerBottom, 0xff08080E); //Left - Gui.drawRect(innerLeft + 1, innerTop, innerRight, innerTop + 1, 0xff08080E); //Top - Gui.drawRect(innerRight - 1, innerTop + 1, innerRight, innerBottom, 0xff303036); //Right - Gui.drawRect(innerLeft + 1, innerBottom - 1, innerRight - 1, innerBottom, 0xff303036); //Bottom - Gui.drawRect(innerLeft + 1, innerTop + 1, innerRight - 1, innerBottom - 1, 0x6008080E); //Middle - - GlScissorStack.push(innerLeft + 1, innerTop + 1, innerRight - 1, innerBottom - 1, scaledResolution); - float barSize = 1; - int optionY = -optionsScroll.getValue(); - if (getSelectedCategory() != null && currentConfigEditing.containsKey(getSelectedCategory())) { - ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get(getSelectedCategory()); - int optionWidthDefault = innerRight - innerLeft - 20; - GlStateManager.enableDepth(); - HashMap<Integer, Integer> activeAccordions = new HashMap<>(); - for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat).values()) { - int optionWidth = optionWidthDefault; - if (option.accordionId >= 0) { - if (!activeAccordions.containsKey(option.accordionId)) { - continue; - } - int accordionDepth = activeAccordions.get(option.accordionId); - optionWidth = optionWidthDefault - (2 * innerPadding) * (accordionDepth + 1); - } - - GuiOptionEditor editor = option.editor; - if (editor == null) { - continue; - } - if (editor instanceof GuiOptionEditorAccordion) { - GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; - if (accordion.getToggled()) { - int accordionDepth = 0; - if (option.accordionId >= 0) { - accordionDepth = activeAccordions.get(option.accordionId) + 1; - } - activeAccordions.put(accordion.getAccordionId(), accordionDepth); - } - } - int optionHeight = editor.getHeight(); - if (innerTop + 5 + optionY + optionHeight > innerTop + 1 && innerTop + 5 + optionY < innerBottom - 1) { - editor.render((innerLeft + innerRight - optionWidth) / 2 - 5, innerTop + 5 + optionY, optionWidth); - } - optionY += optionHeight + 5; - } - GlStateManager.disableDepth(); - if (optionY > 0) { - barSize = - LerpUtils.clampZeroOne((float) (innerBottom - innerTop - 2) / (optionY + 5 + optionsScroll.getValue())); - } - } - - GlScissorStack.pop(scaledResolution); - - GL11.glDisable(GL11.GL_SCISSOR_TEST); - if (getSelectedCategory() != null && currentConfigEditing.containsKey(getSelectedCategory())) { - int optionYOverlay = -optionsScroll.getValue(); - ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get(getSelectedCategory()); - int optionWidthDefault = innerRight - innerLeft - 20; - - GlStateManager.translate(0, 0, 10); - GlStateManager.enableDepth(); - HashMap<Integer, Integer> activeAccordions = new HashMap<>(); - for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat).values()) { - int optionWidth = optionWidthDefault; - if (option.accordionId >= 0) { - if (!activeAccordions.containsKey(option.accordionId)) { - continue; - } - int accordionDepth = activeAccordions.get(option.accordionId); - optionWidth = optionWidthDefault - (2 * innerPadding) * (accordionDepth + 1); - } - - GuiOptionEditor editor = option.editor; - if (editor == null) { - continue; - } - if (editor instanceof GuiOptionEditorAccordion) { - GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; - if (accordion.getToggled()) { - int accordionDepth = 0; - if (option.accordionId >= 0) { - accordionDepth = activeAccordions.get(option.accordionId) + 1; - } - activeAccordions.put(accordion.getAccordionId(), accordionDepth); - } - } - int optionHeight = editor.getHeight(); - if (innerTop + 5 + optionYOverlay + optionHeight > innerTop + 1 && - innerTop + 5 + optionYOverlay < innerBottom - 1) { - editor.renderOverlay( - (innerLeft + innerRight - optionWidth) / 2 - 5, - innerTop + 5 + optionYOverlay, - optionWidth - ); - } - optionYOverlay += optionHeight + 5; - } - GlStateManager.disableDepth(); - GlStateManager.translate(0, 0, -10); - } - GL11.glEnable(GL11.GL_SCISSOR_TEST); - - optionsBarStart = optionsScroll.getValue() / (float) (optionY + optionsScroll.getValue()); - optionsBarend = optionsBarStart + barSize; - if (optionsBarend > 1) { - optionsBarend = 1; - if (optionsScroll.getTarget() / (float) (optionY + optionsScroll.getValue()) + barSize < 1) { - int target = optionsScroll.getTarget(); - optionsScroll.setValue((int) Math.ceil( - (optionY + 5 + optionsScroll.getValue()) - barSize * (optionY + 5 + optionsScroll.getValue()))); - optionsScroll.setTarget(target); - } else { - optionsScroll.setValue((int) Math.ceil( - (optionY + 5 + optionsScroll.getValue()) - barSize * (optionY + 5 + optionsScroll.getValue()))); - } - } - int dist = innerBottom - innerTop - 12; - Gui.drawRect(innerRight - 10, innerTop + 5, innerRight - 5, innerBottom - 5, 0xff101010); - Gui.drawRect( - innerRight - 9, - innerTop + 6 + (int) (dist * optionsBarStart), - innerRight - 6, - innerTop + 6 + (int) (dist * optionsBarend), - 0xff303030 - ); - - for (int socialIndex = 0; socialIndex < socialsIco.length; socialIndex++) { - Minecraft.getMinecraft().getTextureManager().bindTexture(socialsIco[socialIndex]); - GlStateManager.color(1, 1, 1, 1); - int socialLeft = x + xSize - 23 - 18 * socialIndex; - GuiRenderUtils.drawTexturedRect(socialLeft, y + 7, 16, 16, GL11.GL_LINEAR); - - if (mouseX >= socialLeft && mouseX <= socialLeft + 16 && - mouseY >= y + 6 && mouseY <= y + 23) { - tooltipToDisplay = Lists.newArrayList( - EnumChatFormatting.YELLOW + "Go to: " + EnumChatFormatting.RESET + socialsLink[socialIndex]); - } - } - - GlScissorStack.clear(); - - if (tooltipToDisplay != null) { - TextRenderUtils.drawHoveringText(tooltipToDisplay, mouseX, mouseY, width, height, -1, fr); - } - - GlStateManager.translate(0, 0, -2); - } - - public boolean mouseInput(int mouseX, int mouseY) { - lastMouseX = mouseX; - ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - int width = scaledResolution.getScaledWidth(); - int height = scaledResolution.getScaledHeight(); - - int xSize = Math.min(width - 100 / scaledResolution.getScaleFactor(), 500); - int ySize = Math.min(height - 100 / scaledResolution.getScaleFactor(), 400); - - int x = (scaledResolution.getScaledWidth() - xSize) / 2; - int y = (scaledResolution.getScaledHeight() - ySize) / 2; - - int adjScaleFactor = Math.max(2, scaledResolution.getScaleFactor()); - - int innerPadding = 20 / adjScaleFactor; - int innerTop = y + 49 + innerPadding; - int innerBottom = y + ySize - 5 - innerPadding; - int innerLeft = x + 149 + innerPadding; - int innerRight = x + xSize - 5 - innerPadding; - - int dist = innerBottom - innerTop - 12; - int optionsBarStartY = innerTop + 6 + (int) (dist * optionsBarStart); - int optionsBarEndY = innerTop + 6 + (int) (dist * optionsBarend); - int optionsBarStartX = innerRight - 12; - int optionsBarEndX = innerRight - 3; - - int categoryY = -categoryScroll.getValue(); - categoryY += 15 * getCurrentConfigEditing().size(); - int catDist = innerBottom - innerTop - 12; - float catBarStart = categoryScroll.getValue() / (float) (categoryY + categoryScroll.getValue()); - float categoryBarSize = LerpUtils.clampZeroOne( - (float) (innerBottom - innerTop - 2) / (categoryY + 5 + categoryScroll.getValue())); - float catBarEnd = catBarStart + categoryBarSize; - int categoryBarStartY = innerTop + 6 + (int) (catDist * catBarStart); - int categoryBarEndY = innerTop + 6 + (int) (catDist * catBarEnd); - int categoryBarStartX = x + innerPadding + 7; - int categoryBarEndX = x + innerPadding + 12; - keyboardScrollXCutoff = innerLeft - 10; - if (Mouse.getEventButtonState()) { - if ((mouseY < optionsBarStartY || mouseY > optionsBarEndY) && - (mouseX >= optionsBarStartX && mouseX <= optionsBarEndX) && mouseY > innerTop + 6 && mouseY < innerBottom - 6) { - optionsScroll.setTimeToReachTarget(200); - optionsScroll.resetTimer(); - optionsScroll.setTarget(mouseY - innerTop); - return true; - } else if ((mouseY < categoryBarStartY || mouseY > categoryBarEndY) && - (mouseX >= categoryBarStartX && mouseX <= categoryBarEndX) && mouseY > innerTop + 6 && - mouseY < innerBottom - 6) { - categoryScroll.setTimeToReachTarget(200); - categoryScroll.resetTimer(); - categoryScroll.setTarget(mouseY - innerTop); - return true; - } - - searchField.setFocus(mouseX >= innerRight - 20 && mouseX <= innerRight - 2 && - mouseY >= innerTop - (20 + innerPadding) / 2 - 9 && mouseY <= innerTop - (20 + innerPadding) / 2 + 9); - - if (minimumSearchSize.getValue() > 1) { - int strLen = Minecraft.getMinecraft().fontRendererObj.getStringWidth(searchField.getText()) + 10; - int len = Math.max(strLen, minimumSearchSize.getValue()); - - if (mouseX >= innerRight - 25 - len && mouseX <= innerRight - 25 && - mouseY >= innerTop - (20 + innerPadding) / 2 - 9 && mouseY <= innerTop - (20 + innerPadding) / 2 + 9) { - String old = searchField.getText(); - searchField.mouseClicked(mouseX, mouseY, Mouse.getEventButton()); - - if (!searchField.getText().equals(old)) search(); - } - } - } - - int dWheel = Mouse.getEventDWheel(); - if (mouseY > innerTop && mouseY < innerBottom && dWheel != 0) { - if (dWheel < 0) { - dWheel = -1; - } - if (dWheel > 0) { - dWheel = 1; - } - if (mouseX < innerLeft) { - int newTarget = categoryScroll.getTarget() - dWheel * 30; - if (newTarget < 0) { - newTarget = 0; - } - - float catBarSize = 1; - int catY = -newTarget; - for (Map.Entry<String, ConfigProcessor.ProcessedCategory> entry : getCurrentConfigEditing().entrySet()) { - if (getSelectedCategory() == null) { - setSelectedCategory(entry.getKey()); - } - - catY += 15; - if (catY > 0) { - catBarSize = LerpUtils.clampZeroOne((float) (innerBottom - innerTop - 2) / (catY + 5 + newTarget)); - } - } - - int barMax = (int) Math.floor((catY + 5 + newTarget) - catBarSize * (catY + 5 + newTarget)); - if (newTarget > barMax) { - newTarget = barMax; - } - categoryScroll.resetTimer(); - categoryScroll.setTarget(newTarget); - } else { - int newTarget = optionsScroll.getTarget() - dWheel * 30; - if (newTarget < 0) { - newTarget = 0; - } - - float barSize = 1; - int optionY = -newTarget; - if (getSelectedCategory() != null && getCurrentConfigEditing() != null && - getCurrentConfigEditing().containsKey(getSelectedCategory())) { - ConfigProcessor.ProcessedCategory cat = getCurrentConfigEditing().get(getSelectedCategory()); - HashMap<Integer, Integer> activeAccordions = new HashMap<>(); - for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat).values()) { - if (option.accordionId >= 0) { - if (!activeAccordions.containsKey(option.accordionId)) { - continue; - } - } - - GuiOptionEditor editor = option.editor; - if (editor == null) { - continue; - } - if (editor instanceof GuiOptionEditorAccordion) { - GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; - if (accordion.getToggled()) { - int accordionDepth = 0; - if (option.accordionId >= 0) { - accordionDepth = activeAccordions.get(option.accordionId) + 1; - } - activeAccordions.put(accordion.getAccordionId(), accordionDepth); - } - } - optionY += editor.getHeight() + 5; - - if (optionY > 0) { - barSize = LerpUtils.clampZeroOne((float) (innerBottom - innerTop - 2) / (optionY + 5 + newTarget)); - } - } - } - - int barMax = (int) Math.floor((optionY + 5 + newTarget) - barSize * (optionY + 5 + newTarget)); - if (newTarget > barMax) { - newTarget = barMax; - } - optionsScroll.setTimeToReachTarget(Math.min( - 150, - Math.max(10, 5 * Math.abs(newTarget - optionsScroll.getValue())) - )); - optionsScroll.resetTimer(); - optionsScroll.setTarget(newTarget); - } - } else if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { - if (getCurrentConfigEditing() != null) { - int catY = -categoryScroll.getValue(); - for (Map.Entry<String, ConfigProcessor.ProcessedCategory> entry : getCurrentConfigEditing().entrySet()) { - if (getSelectedCategory() == null) { - setSelectedCategory(entry.getKey()); - } - if (mouseX >= x + 5 && mouseX <= x + 145 && - mouseY >= y + 70 + catY - 7 && mouseY <= y + 70 + catY + 7) { - setSelectedCategory(entry.getKey()); - return true; - } - catY += 15; - } - } - - for (int socialIndex = 0; socialIndex < socialsLink.length; socialIndex++) { - int socialLeft = x + xSize - 23 - 18 * socialIndex; - - if (mouseX >= socialLeft && mouseX <= socialLeft + 16 && - mouseY >= y + 6 && mouseY <= y + 23) { - try { - Desktop.getDesktop().browse(new URI(socialsLink[socialIndex])); - } catch (Exception ignored) { - } - return true; - } - } - } - - int optionY = -optionsScroll.getValue(); - if (getSelectedCategory() != null && getCurrentConfigEditing() != null && - getCurrentConfigEditing().containsKey(getSelectedCategory())) { - int optionWidthDefault = innerRight - innerLeft - 20; - ConfigProcessor.ProcessedCategory cat = getCurrentConfigEditing().get(getSelectedCategory()); - HashMap<Integer, Integer> activeAccordions = new HashMap<>(); - for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat).values()) { - int optionWidth = optionWidthDefault; - if (option.accordionId >= 0) { - if (!activeAccordions.containsKey(option.accordionId)) { - continue; - } - int accordionDepth = activeAccordions.get(option.accordionId); - optionWidth = optionWidthDefault - (2 * innerPadding) * (accordionDepth + 1); - } - - GuiOptionEditor editor = option.editor; - if (editor == null) { - continue; - } - if (editor instanceof GuiOptionEditorAccordion) { - GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; - if (accordion.getToggled()) { - int accordionDepth = 0; - if (option.accordionId >= 0) { - accordionDepth = activeAccordions.get(option.accordionId) + 1; - } - activeAccordions.put(accordion.getAccordionId(), accordionDepth); - } - } - if (editor.mouseInputOverlay( - (innerLeft + innerRight - optionWidth) / 2 - 5, - innerTop + 5 + optionY, - optionWidth, - mouseX, - mouseY - )) { - return true; - } - optionY += editor.getHeight() + 5; - } - } - - if (mouseX > innerLeft && mouseX < innerRight && - mouseY > innerTop && mouseY < innerBottom) { - optionY = -optionsScroll.getValue(); - if (getSelectedCategory() != null && getCurrentConfigEditing() != null && - getCurrentConfigEditing().containsKey(getSelectedCategory())) { - int optionWidthDefault = innerRight - innerLeft - 20; - ConfigProcessor.ProcessedCategory cat = getCurrentConfigEditing().get(getSelectedCategory()); - HashMap<Integer, Integer> activeAccordions = new HashMap<>(); - for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat).values()) { - int optionWidth = optionWidthDefault; - if (option.accordionId >= 0) { - if (!activeAccordions.containsKey(option.accordionId)) { - continue; - } - int accordionDepth = activeAccordions.get(option.accordionId); - optionWidth = optionWidthDefault - (2 * innerPadding) * (accordionDepth + 1); - } - - GuiOptionEditor editor = option.editor; - if (editor == null) { - continue; - } - if (editor instanceof GuiOptionEditorAccordion) { - GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; - if (accordion.getToggled()) { - int accordionDepth = 0; - if (option.accordionId >= 0) { - accordionDepth = activeAccordions.get(option.accordionId) + 1; - } - activeAccordions.put(accordion.getAccordionId(), accordionDepth); - } - } - if (editor.mouseInput( - (innerLeft + innerRight - optionWidth) / 2 - 5, - innerTop + 5 + optionY, - optionWidth, - mouseX, - mouseY - )) { - return true; - } - optionY += editor.getHeight() + 5; - } - } - } - - return true; - } - - public boolean keyboardInput() { - ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - int width = scaledResolution.getScaledWidth(); - - int xSize = Math.min(width - 100 / scaledResolution.getScaleFactor(), 500); - - int adjScaleFactor = Math.max(2, scaledResolution.getScaleFactor()); - - int innerPadding = 20 / adjScaleFactor; - int innerWidth = xSize - 154 - innerPadding * 2; - - if (Keyboard.getEventKeyState()) { - String old = searchField.getText(); - searchField.keyTyped(Keyboard.getEventCharacter(), Keyboard.getEventKey()); - searchField.setText(Minecraft.getMinecraft().fontRendererObj.trimStringToWidth( - searchField.getText(), - innerWidth / 2 - 20 - )); - - if (!searchField.getText().equals(old)) search(); - } - - if (getSelectedCategory() != null && getCurrentConfigEditing() != null && - getCurrentConfigEditing().containsKey(getSelectedCategory())) { - ConfigProcessor.ProcessedCategory cat = getCurrentConfigEditing().get(getSelectedCategory()); - HashMap<Integer, Integer> activeAccordions = new HashMap<>(); - for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat).values()) { - if (option.accordionId >= 0) { - if (!activeAccordions.containsKey(option.accordionId)) { - continue; - } - } - - GuiOptionEditor editor = option.editor; - if (editor == null) { - continue; - } - if (editor instanceof GuiOptionEditorAccordion) { - GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; - if (accordion.getToggled()) { - int accordionDepth = 0; - if (option.accordionId >= 0) { - accordionDepth = activeAccordions.get(option.accordionId) + 1; - } - activeAccordions.put(accordion.getAccordionId(), accordionDepth); - } - } - if (editor.keyboardInput()) { - return true; - } - } - } - - return true; - } - - private void handleKeyboardPresses() { - LerpingInteger target = lastMouseX < keyboardScrollXCutoff ? categoryScroll : optionsScroll; - if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) { - target.setTimeToReachTarget(50); - target.resetTimer(); - target.setTarget(target.getTarget() + 5); - } else if (Keyboard.isKeyDown(Keyboard.KEY_UP)) { - target.setTimeToReachTarget(50); - target.resetTimer(); - if (target.getTarget() >= 0) { - target.setTarget(target.getTarget() - 5); - } - } - if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) { - SkyHanniMod.configManager.saveConfig(); - } - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigGuiForgeInterop.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigGuiForgeInterop.kt index db63c0168..f0da4febb 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigGuiForgeInterop.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigGuiForgeInterop.kt @@ -1,6 +1,8 @@ package at.hannibal2.skyhanni.config -import at.hannibal2.skyhanni.config.core.GuiScreenElementWrapper +import at.hannibal2.skyhanni.SkyHanniMod +import io.github.moulberry.moulconfig.gui.GuiScreenElementWrapper +import io.github.moulberry.moulconfig.gui.MoulConfigEditor import net.minecraft.client.Minecraft import net.minecraft.client.gui.GuiScreen import net.minecraftforge.fml.client.IModGuiFactory @@ -20,7 +22,7 @@ class ConfigGuiForgeInterop : IModGuiFactory { override fun getHandlerFor(runtimeOptionCategoryElement: RuntimeOptionCategoryElement): RuntimeOptionGuiHandler? = null - class WrappedSkyHanniConfig(private val parent: GuiScreen) : GuiScreenElementWrapper(ConfigEditor.editor) { + class WrappedSkyHanniConfig(private val parent: GuiScreen) : GuiScreenElementWrapper(ConfigGuiManager.configEditor) { @Throws(IOException::class) override fun handleKeyboardInput() { if (Keyboard.getEventKeyState() && Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) { diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigGuiManager.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigGuiManager.kt new file mode 100644 index 000000000..d1b84f09c --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigGuiManager.kt @@ -0,0 +1,18 @@ +package at.hannibal2.skyhanni.config + +import at.hannibal2.skyhanni.SkyHanniMod +import io.github.moulberry.moulconfig.gui.GuiScreenElementWrapper +import io.github.moulberry.moulconfig.gui.MoulConfigEditor + +object ConfigGuiManager { + val configEditor by lazy { MoulConfigEditor(SkyHanniMod.configManager.processor) } + + fun openConfigGui(search: String? = null) { + if (search != null) { + configEditor.search(search) + } + SkyHanniMod.screenToOpen = GuiScreenElementWrapper(configEditor) + } + + +}
\ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt index 90573542f..75e31ab2a 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt @@ -3,17 +3,26 @@ package at.hannibal2.skyhanni.config import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.ConfigLoadEvent import com.google.gson.GsonBuilder +import io.github.moulberry.moulconfig.observer.PropertyTypeAdapterFactory +import io.github.moulberry.moulconfig.processor.BuiltinMoulConfigGuis +import io.github.moulberry.moulconfig.processor.ConfigProcessorDriver +import io.github.moulberry.moulconfig.processor.MoulConfigProcessor import java.io.* import java.nio.charset.StandardCharsets class ConfigManager { companion object { - val gson = GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().create() + val gson = GsonBuilder().setPrettyPrinting() + .excludeFieldsWithoutExposeAnnotation() + .registerTypeAdapterFactory(PropertyTypeAdapterFactory()) + .create() } + val logger = SkyHanniMod.getLogger("ConfigManager") + var configDirectory = File("config/skyhanni") private var configFile: File? = null - + lateinit var processor: MoulConfigProcessor<Features> fun firstLoad() { try { @@ -23,32 +32,59 @@ class ConfigManager { configFile = File(configDirectory, "config.json") + logger.info("Trying to load config from $configFile") + if (configFile!!.exists()) { try { BufferedReader(InputStreamReader(FileInputStream(configFile!!), StandardCharsets.UTF_8)).use { reader -> - SkyHanniMod.feature = gson.fromJson(reader, - Features::class.java) + SkyHanniMod.feature = gson.fromJson( + reader, + Features::class.java + ) } - ConfigLoadEvent().postAndCatch() + logger.info("Loaded config from file") } catch (e: Exception) { - e.printStackTrace() + val backupFile = configFile!!.resolveSibling("config-${System.currentTimeMillis()}-backup.json") + logger.error( + "Exception while reading $configFile. Will load blank config and save backup to $backupFile", + e + ) + try { + configFile!!.copyTo(backupFile) + } catch (e: Exception) { + logger.error("Could not create backup for config file", e) + } } } if (SkyHanniMod.feature == null) { + logger.info("Creating blank config and saving to file") SkyHanniMod.feature = Features() saveConfig() } + + ConfigLoadEvent().postAndCatch() + + val features = SkyHanniMod.feature + processor = MoulConfigProcessor(SkyHanniMod.feature) + BuiltinMoulConfigGuis.addProcessors(processor) + ConfigProcessorDriver.processConfig( + features.javaClass, + features, + processor + ) } fun saveConfig() { try { + logger.info("Saving config file") + configFile!!.parentFile.mkdirs() configFile!!.createNewFile() BufferedWriter(OutputStreamWriter(FileOutputStream(configFile!!), StandardCharsets.UTF_8)).use { writer -> writer.write(gson.toJson(SkyHanniMod.feature)) } } catch (e: IOException) { - e.printStackTrace() + logger.error("Could not save config file to $configFile", e) } } }
\ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/config/Features.java b/src/main/java/at/hannibal2/skyhanni/config/Features.java index 998d83718..bc7913f37 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Features.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Features.java @@ -1,242 +1,38 @@ package at.hannibal2.skyhanni.config; -import at.hannibal2.skyhanni.config.core.GuiElement; -import at.hannibal2.skyhanni.config.core.GuiScreenElementWrapper; -import at.hannibal2.skyhanni.config.core.config.Config; -import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.config.core.config.annotations.Category; +import at.hannibal2.skyhanni.SkyHanniMod; import at.hannibal2.skyhanni.config.features.*; -import at.hannibal2.skyhanni.data.GuiEditManager; -import at.hannibal2.skyhanni.features.misc.HideArmor; -import at.hannibal2.skyhanni.features.misc.MarkedPlayerManager; import com.google.gson.annotations.Expose; -import net.minecraft.client.Minecraft; -import org.lwjgl.input.Keyboard; +import io.github.moulberry.moulconfig.Config; +import io.github.moulberry.moulconfig.Social; +import io.github.moulberry.moulconfig.annotations.Category; +import net.minecraft.util.ResourceLocation; +import java.util.Arrays; +import java.util.List; -public class Features extends Config { - private void editOverlay(String activeConfig, int width, int height, Position position) { -// Minecraft.getMinecraft().displayGuiScreen(new GuiPositionEditor(position, width, height, () -> { -// }, () -> { -// }, () -> SkyHanniMod.screenToOpen = new GuiScreenElementWrapper(new ConfigEditor(SkyHanniMod.feature, activeConfig)))); - } - - @Override - public void executeRunnable(String runnableId) { - String activeConfigCategory = null; - if (Minecraft.getMinecraft().currentScreen instanceof GuiScreenElementWrapper) { - GuiScreenElementWrapper wrapper = (GuiScreenElementWrapper) Minecraft.getMinecraft().currentScreen; - GuiElement element = wrapper.element; - if (element instanceof ConfigEditor) { - activeConfigCategory = ((ConfigEditor) element).getSelectedCategoryName(); - } - } - - if (runnableId.equals("editGuiLocations")) { - GuiEditManager.openGuiEditor(); - return; - } - - if (runnableId.equals("petDisplay")) { - editOverlay(activeConfigCategory, 200, 16, misc.petDisplayPos); - return; - } - - if (runnableId.equals("collectionCounter")) { - editOverlay(activeConfigCategory, 200, 16, misc.collectionCounterPos); - return; - } - - if (runnableId.equals("debugPos")) { - editOverlay(activeConfigCategory, 200, 16, dev.debugPos); - return; - } - - if (runnableId.equals("dungeonMilestonesDisplay")) { - editOverlay(activeConfigCategory, 200, 16, dungeon.showMileStonesDisplayPos); - return; - } - - if (runnableId.equals("dungeonDeathCounter")) { - editOverlay(activeConfigCategory, 200, 16, dungeon.deathCounterPos); - return; - } - - if (runnableId.equals("bestSellMethod")) { - editOverlay(activeConfigCategory, 200, 16, bazaar.bestSellMethodPos); - return; - } - - if (runnableId.equals("ashfangFreezeCooldown")) { - editOverlay(activeConfigCategory, 200, 16, ashfang.freezeCooldownPos); - return; - } - - if (runnableId.equals("ashfangResetCooldown")) { - editOverlay(activeConfigCategory, 200, 16, ashfang.nextResetCooldownPos); - return; - } - - if (runnableId.equals("realTime")) { - editOverlay(activeConfigCategory, 200, 16, misc.realTimePos); - return; - } - - if (runnableId.equals("hopperProfitDisplay")) { - editOverlay(activeConfigCategory, 200, 16, minions.hopperProfitPos); - return; - } - - if (runnableId.equals("summoningMobDisplay")) { - editOverlay(activeConfigCategory, 200, 16, summonings.summoningMobDisplayPos); - return; - } - - if (runnableId.equals("dungeonCopilot")) { - editOverlay(activeConfigCategory, 200, 16, dungeon.copilotPos); - return; - } - - if (runnableId.equals("markOwnPlayer")) { - MarkedPlayerManager.Companion.toggleOwn(); - return; - } - - if (runnableId.equals("hideArmor")) { - HideArmor.Companion.updateArmor(); - return; - } - - if (runnableId.equals("nonGodPotEffect")) { - editOverlay(activeConfigCategory, 200, 16, misc.nonGodPotEffectPos); - return; - } - - if (runnableId.equals("bazzarUpdateTimer")) { - editOverlay(activeConfigCategory, 200, 16, bazaar.updateTimerPos); - return; - } - - if (runnableId.equals("crimsonIsleReputationHelper")) { - editOverlay(activeConfigCategory, 200, 16, misc.crimsonIsleReputationHelperPos); - return; - } - - if (runnableId.equals("barnTimer")) { - editOverlay(activeConfigCategory, 200, 16, fishing.barnTimerPos); - return; - } - if (runnableId.equals("sharkFishCounter")) { - editOverlay(activeConfigCategory, 200, 16, fishing.sharkFishCounterPos); - return; - } - - if (runnableId.equals("minionCraftHelper")) { - editOverlay(activeConfigCategory, 200, 16, bingo.minionCraftHelperPos); - return; - } - - if (runnableId.equals("tpsDisplay")) { - editOverlay(activeConfigCategory, 200, 16, misc.tpsDisplayPosition); - return; - } - - if (runnableId.equals("skyMartCopperPrice")) { - editOverlay(activeConfigCategory, 200, 16, garden.skyMartCopperPricePos); - return; - } - - if (runnableId.equals("visitorNeeds")) { - editOverlay(activeConfigCategory, 200, 16, garden.visitorNeedsPos); - return; - } - - if (runnableId.equals("visitorTimer")) { - editOverlay(activeConfigCategory, 200, 16, garden.visitorTimerPos); - return; - } - - if (runnableId.equals("cropMilestoneProgress")) { - editOverlay(activeConfigCategory, 200, 16, garden.cropMilestoneProgressDisplayPos); - return; - } - - if (runnableId.equals("cropMilestoneNext")) { - editOverlay(activeConfigCategory, 200, 16, garden.cropMilestoneNextDisplayPos); - return; - } - - if (runnableId.equals("bingoCard")) { - editOverlay(activeConfigCategory, 200, 16, bingo.bingoCardPos); - return; - } - - if (runnableId.equals("gardenKeyBindPresetDisabled")) { - garden.keyBindAttack = Keyboard.KEY_NONE; - garden.keyBindLeft = Keyboard.KEY_NONE; - garden.keyBindRight = Keyboard.KEY_NONE; - garden.keyBindForward = Keyboard.KEY_NONE; - garden.keyBindBack = Keyboard.KEY_NONE; - garden.keyBindJump = Keyboard.KEY_NONE; - garden.keyBindSneak = Keyboard.KEY_NONE; - - Minecraft.getMinecraft().thePlayer.closeScreen(); - return; - } - - if (runnableId.equals("gardenKeyBindPresetDefault")) { - garden.keyBindAttack = -100; - garden.keyBindLeft = Keyboard.KEY_A; - garden.keyBindRight = Keyboard.KEY_D; - garden.keyBindForward = Keyboard.KEY_W; - garden.keyBindBack = Keyboard.KEY_S; - garden.keyBindJump = Keyboard.KEY_SPACE; - garden.keyBindSneak = Keyboard.KEY_LSHIFT; - - Minecraft.getMinecraft().thePlayer.closeScreen(); - return; - } - - if (runnableId.equals("chickenHeadTimer")) { - editOverlay(activeConfigCategory, 200, 16, misc.chickenHeadTimerPosition); - return; - } - - if (runnableId.equals("optimalSpeed")) { - editOverlay(activeConfigCategory, 200, 16, garden.optimalSpeedPos); - return; - } - - if (runnableId.equals("gardenLevel")) { - editOverlay(activeConfigCategory, 200, 16, garden.gardenLevelPos); - return; - } - - if (runnableId.equals("eliteFarmingWeight")) { - editOverlay(activeConfigCategory, 200, 16, garden.eliteFarmingWeightPos); - return; - } +public class Features extends Config { + public static final ResourceLocation DISCORD = new ResourceLocation("notenoughupdates:social/discord.png"); + public static final ResourceLocation GITHUB = new ResourceLocation("notenoughupdates:social/github.png"); - if (runnableId.equals("dicerCounter")) { - editOverlay(activeConfigCategory, 200, 16, garden.dicerCounterPos); - return; - } - if (runnableId.equals("moneyPerHour")) { - editOverlay(activeConfigCategory, 200, 16, garden.moneyPerHourPos); - return; - } + @Override + public boolean shouldAutoFocusSearchbar() { + return true; + } - if (runnableId.equals("nextJacobContest")) { - editOverlay(activeConfigCategory, 200, 16, garden.nextJacobContestPos); - return; - } + @Override + public List<Social> getSocials() { + return Arrays.asList( + Social.forLink("Join our Discord", DISCORD, "https://discord.gg/8DXVN4BJz3"), + Social.forLink("Look at the code", GITHUB, "https://github.com/hannibal002/SkyHanni") + ); + } - if (runnableId.equals("cropMilestoneMushroomPetPerk")) { - editOverlay(activeConfigCategory, 200, 16, garden.cropMilestoneMushroomPetPerkPos); - return; - } + @Override + public String getTitle() { + return "SkyHanni " + SkyHanniMod.VERSION + " by §channibal2§r, config by §5Moulberry §rand §5nea89"; } @Expose diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 179104aaf..638ec334f 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -1,9 +1,8 @@ package at.hannibal2.skyhanni.config.commands import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.ConfigEditor +import at.hannibal2.skyhanni.config.ConfigGuiManager import at.hannibal2.skyhanni.config.commands.SimpleCommand.ProcessCommandRunnable -import at.hannibal2.skyhanni.config.core.GuiScreenElementWrapper import at.hannibal2.skyhanni.data.ApiDataLoader import at.hannibal2.skyhanni.data.GuiEditManager import at.hannibal2.skyhanni.features.bazaar.BazaarDataGrabber @@ -18,7 +17,6 @@ import at.hannibal2.skyhanni.test.command.CopyItemCommand import at.hannibal2.skyhanni.test.command.CopyNearbyEntitiesCommand import net.minecraft.command.ICommandSender import net.minecraftforge.client.ClientCommandHandler -import org.apache.commons.lang3.StringUtils object Commands { @@ -27,11 +25,10 @@ object Commands { if (it[0].lowercase() == "gui") { GuiEditManager.openGuiEditor() } else { - SkyHanniMod.screenToOpen = - GuiScreenElementWrapper(ConfigEditor(SkyHanniMod.feature, StringUtils.join(it, " "))) + ConfigGuiManager.openConfigGui(it.joinToString(" ")) } } else { - SkyHanniMod.screenToOpen = GuiScreenElementWrapper(ConfigEditor(SkyHanniMod.feature)) + ConfigGuiManager.openConfigGui() } } diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/ChromaColour.java b/src/main/java/at/hannibal2/skyhanni/config/core/ChromaColour.java deleted file mode 100644 index e67c5ff10..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/ChromaColour.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core; - -import java.awt.*; - -public class ChromaColour { - public static String special(int chromaSpeed, int alpha, int rgb) { - return special(chromaSpeed, alpha, (rgb & 0xFF0000) >> 16, (rgb & 0x00FF00) >> 8, (rgb & 0x0000FF)); - } - - private static final int RADIX = 10; - - public static String special(int chromaSpeed, int alpha, int r, int g, int b) { - StringBuilder sb = new StringBuilder(); - sb.append(Integer.toString(chromaSpeed, RADIX)).append(":"); - sb.append(Integer.toString(alpha, RADIX)).append(":"); - sb.append(Integer.toString(r, RADIX)).append(":"); - sb.append(Integer.toString(g, RADIX)).append(":"); - sb.append(Integer.toString(b, RADIX)); - return sb.toString(); - } - - private static int[] decompose(String csv) { - String[] split = csv.split(":"); - - int[] arr = new int[split.length]; - - for (int i = 0; i < split.length; i++) { - arr[i] = Integer.parseInt(split[split.length - 1 - i], RADIX); - } - return arr; - } - - public static int specialToSimpleRGB(String special) { - int[] d = decompose(special); - int r = d[2]; - int g = d[1]; - int b = d[0]; - int a = d[3]; - int chr = d[4]; - - return (a & 0xFF) << 24 | (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF); - } - - public static int getSpeed(String special) { - return decompose(special)[4]; - } - - public static float getSecondsForSpeed(int speed) { - return (255 - speed) / 254f * (MAX_CHROMA_SECS - MIN_CHROMA_SECS) + MIN_CHROMA_SECS; - } - - private static final int MIN_CHROMA_SECS = 1; - private static final int MAX_CHROMA_SECS = 60; - - public static long startTime = -1; - - public static int specialToChromaRGB(String special) { - if (startTime < 0) startTime = System.currentTimeMillis(); - - int[] d = decompose(special); - int chr = d[4]; - int a = d[3]; - int r = d[2]; - int g = d[1]; - int b = d[0]; - - float[] hsv = Color.RGBtoHSB(r, g, b, null); - - if (chr > 0) { - float seconds = getSecondsForSpeed(chr); - hsv[0] += (System.currentTimeMillis() - startTime) / 1000f / seconds; - hsv[0] %= 1; - if (hsv[0] < 0) hsv[0] += 1; - } - - return (a & 0xFF) << 24 | (Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]) & 0x00FFFFFF); - } - - public static int rotateHue(int argb, int degrees) { - int a = (argb >> 24) & 0xFF; - int r = (argb >> 16) & 0xFF; - int g = (argb >> 8) & 0xFF; - int b = (argb) & 0xFF; - - float[] hsv = Color.RGBtoHSB(r, g, b, null); - - hsv[0] += degrees / 360f; - hsv[0] %= 1; - - return (a & 0xFF) << 24 | (Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]) & 0x00FFFFFF); - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/GlScissorStack.java b/src/main/java/at/hannibal2/skyhanni/config/core/GlScissorStack.java deleted file mode 100644 index 5aae4cf28..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/GlScissorStack.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; -import org.lwjgl.opengl.GL11; - -import java.util.LinkedList; - -public class GlScissorStack { - private static class Bounds { - int left; - int top; - int right; - int bottom; - - public Bounds(int left, int top, int right, int bottom) { - this.left = left; - this.top = top; - this.right = right; - this.bottom = bottom; - } - - public Bounds createSubBound(int left, int top, int right, int bottom) { - left = Math.max(left, this.left); - top = Math.max(top, this.top); - right = Math.min(right, this.right); - bottom = Math.min(bottom, this.bottom); - - if (top > bottom) { - top = bottom; - } - if (left > right) { - left = right; - } - - return new Bounds(left, top, right, bottom); - } - - public void set(ScaledResolution scaledResolution) { - int height = Minecraft.getMinecraft().displayHeight; - int scale = scaledResolution.getScaleFactor(); - GL11.glScissor(left * scale, height - bottom * scale, (right - left) * scale, (bottom - top) * scale); - } - } - - private static final LinkedList<Bounds> boundsStack = new LinkedList<>(); - - public static void push(int left, int top, int right, int bottom, ScaledResolution scaledResolution) { - if (right < left) { - int temp = right; - right = left; - left = temp; - } - if (bottom < top) { - int temp = bottom; - bottom = top; - top = temp; - } - if (boundsStack.isEmpty()) { - boundsStack.push(new Bounds(left, top, right, bottom)); - } else { - boundsStack.push(boundsStack.peek().createSubBound(left, top, right, bottom)); - } - if (!boundsStack.isEmpty()) { - boundsStack.peek().set(scaledResolution); - } - GL11.glEnable(GL11.GL_SCISSOR_TEST); - } - - public static void pop(ScaledResolution scaledResolution) { - if (!boundsStack.isEmpty()) { - boundsStack.pop(); - } - if (boundsStack.isEmpty()) { - GL11.glDisable(GL11.GL_SCISSOR_TEST); - } else { - boundsStack.peek().set(scaledResolution); - } - } - - public static void clear() { - boundsStack.clear(); - GL11.glDisable(GL11.GL_SCISSOR_TEST); - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/GuiElement.java b/src/main/java/at/hannibal2/skyhanni/config/core/GuiElement.java deleted file mode 100644 index 8a36e203f..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/GuiElement.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core; - -import net.minecraft.client.gui.Gui; - -public abstract class GuiElement extends Gui { - public abstract void render(); - - public abstract boolean mouseInput(int mouseX, int mouseY); - - public abstract boolean keyboardInput(); -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/GuiElementBoolean.java b/src/main/java/at/hannibal2/skyhanni/config/core/GuiElementBoolean.java deleted file mode 100644 index 146a3a480..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/GuiElementBoolean.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core; - -import at.hannibal2.skyhanni.config.GuiTextures; -import at.hannibal2.skyhanni.config.core.util.lerp.LerpUtils; -import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.ResourceLocation; -import org.lwjgl.input.Mouse; -import org.lwjgl.opengl.GL11; - -import java.util.function.Consumer; - -public class GuiElementBoolean extends GuiElement { - public int x; - public int y; - private boolean value; - private final int clickRadius; - private final Consumer<Boolean> toggleCallback; - - private boolean previewValue; - private int animation = 0; - private long lastMillis = 0; - - private static final int xSize = 48; - private static final int ySize = 14; - - public GuiElementBoolean(int x, int y, boolean value, Consumer<Boolean> toggleCallback) { - this(x, y, value, 0, toggleCallback); - } - - public GuiElementBoolean(int x, int y, boolean value, int clickRadius, Consumer<Boolean> toggleCallback) { - this.x = x; - this.y = y; - this.value = value; - this.previewValue = value; - this.clickRadius = clickRadius; - this.toggleCallback = toggleCallback; - this.lastMillis = System.currentTimeMillis(); - - if (value) animation = 36; - } - - @Override - public void render() { - GlStateManager.color(1, 1, 1, 1); - ResourceLocation buttonLoc = GuiTextures.ON; - ResourceLocation barLoc = GuiTextures.BAR_ON; - long currentMillis = System.currentTimeMillis(); - long deltaMillis = currentMillis - lastMillis; - lastMillis = currentMillis; - boolean passedLimit = false; - if (previewValue != value) { - if ((previewValue && animation > 12) || - (!previewValue && animation < 24)) { - passedLimit = true; - } - } - if (previewValue != passedLimit) { - animation += deltaMillis / 10; - } else { - animation -= deltaMillis / 10; - } - lastMillis -= deltaMillis % 10; - - if (previewValue == value) { - animation = Math.max(0, Math.min(36, animation)); - } else if (!passedLimit) { - if (previewValue) { - animation = Math.max(0, Math.min(12, animation)); - } else { - animation = Math.max(24, Math.min(36, animation)); - } - } else { - if (previewValue) { - animation = Math.max(12, animation); - } else { - animation = Math.min(24, animation); - } - } - - int animation = (int) (LerpUtils.sigmoidZeroOne(this.animation / 36f) * 36); - if (animation < 3) { - buttonLoc = GuiTextures.OFF; - barLoc = GuiTextures.BAR; - } else if (animation < 13) { - buttonLoc = GuiTextures.ONE; - barLoc = GuiTextures.BAR_ONE; - } else if (animation < 23) { - buttonLoc = GuiTextures.TWO; - barLoc = GuiTextures.BAR_TWO; - } else if (animation < 33) { - buttonLoc = GuiTextures.THREE; - barLoc = GuiTextures.BAR_THREE; - } - - GL11.glTranslatef(0, 0, 100); - Minecraft.getMinecraft().getTextureManager().bindTexture(buttonLoc); - GuiRenderUtils.drawTexturedRect(x + animation, y, 12, 14); - GL11.glTranslatef(0, 0, -100); - - Minecraft.getMinecraft().getTextureManager().bindTexture(barLoc); - GuiRenderUtils.drawTexturedRect(x, y, xSize, ySize); - } - - @Override - public boolean mouseInput(int mouseX, int mouseY) { - if (mouseX > x - clickRadius && mouseX < x + xSize + clickRadius && - mouseY > y - clickRadius && mouseY < y + ySize + clickRadius) { - if (Mouse.getEventButton() == 0) { - if (Mouse.getEventButtonState()) { - previewValue = !value; - } else if (previewValue == !value) { - value = !value; - toggleCallback.accept(value); - } - } - } else { - previewValue = value; - } - return false; - } - - @Override - public boolean keyboardInput() { - return false; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/GuiElementColour.java b/src/main/java/at/hannibal2/skyhanni/config/core/GuiElementColour.java deleted file mode 100644 index f43ea4a0e..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/GuiElementColour.java +++ /dev/null @@ -1,449 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core; - -import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.texture.DynamicTexture; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import org.lwjgl.input.Keyboard; -import org.lwjgl.input.Mouse; -import org.lwjgl.opengl.GL11; - -import java.awt.*; -import java.awt.image.BufferedImage; -import java.util.function.Consumer; - -public class GuiElementColour extends GuiElement { - public static final ResourceLocation colour_selector_dot = new ResourceLocation( - "notenoughupdates:core/colour_selector_dot.png"); - public static final ResourceLocation colour_selector_bar = new ResourceLocation( - "notenoughupdates:core/colour_selector_bar.png"); - public static final ResourceLocation colour_selector_bar_alpha = new ResourceLocation( - "notenoughupdates:core/colour_selector_bar_alpha.png"); - public static final ResourceLocation colour_selector_chroma = new ResourceLocation( - "notenoughupdates:core/colour_selector_chroma.png"); - - private static final ResourceLocation colourPickerLocation = new ResourceLocation("mbcore:dynamic/colourpicker"); - private static final ResourceLocation colourPickerBarValueLocation = new ResourceLocation( - "mbcore:dynamic/colourpickervalue"); - private static final ResourceLocation colourPickerBarOpacityLocation = new ResourceLocation( - "mbcore:dynamic/colourpickeropacity"); - private final GuiElementTextField hexField = new GuiElementTextField( - "", - GuiElementTextField.SCALE_TEXT | GuiElementTextField.FORCE_CAPS | GuiElementTextField.NO_SPACE - ); - - private final int x; - private final int y; - private int xSize = 119; - private final int ySize = 89; - - private float wheelAngle = 0; - private float wheelRadius = 0; - - private int clickedComponent = -1; - - private final Consumer<String> colourChangedCallback; - private final Runnable closeCallback; - private String colour; - - private final boolean opacitySlider; - private final boolean valueSlider; - - public GuiElementColour( - int x, int y, String initialColour, Consumer<String> colourChangedCallback, - Runnable closeCallback - ) { - this(x, y, initialColour, colourChangedCallback, closeCallback, true, true); - } - - public GuiElementColour( - int x, int y, String initialColour, Consumer<String> colourChangedCallback, - Runnable closeCallback, boolean opacitySlider, boolean valueSlider - ) { - final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - - this.y = Math.max(10, Math.min(scaledResolution.getScaledHeight() - ySize - 10, y)); - this.x = Math.max(10, Math.min(scaledResolution.getScaledWidth() - xSize - 10, x)); - - this.colour = initialColour; - this.colourChangedCallback = colourChangedCallback; - this.closeCallback = closeCallback; - - int colour = ChromaColour.specialToSimpleRGB(initialColour); - Color c = new Color(colour); - float[] hsv = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), null); - updateAngleAndRadius(hsv); - - this.opacitySlider = opacitySlider; - this.valueSlider = valueSlider; - - if (!valueSlider) xSize -= 15; - if (!opacitySlider) xSize -= 15; - } - - public void updateAngleAndRadius(float[] hsv) { - this.wheelRadius = hsv[1]; - this.wheelAngle = hsv[0] * 360; - } - - public void render() { - GuiRenderUtils.drawFloatingRectDark(x, y, xSize, ySize); - - int currentColour = ChromaColour.specialToSimpleRGB(colour); - Color c = new Color(currentColour, true); - float[] hsv = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), null); - - BufferedImage bufferedImage = new BufferedImage(288, 288, BufferedImage.TYPE_INT_ARGB); - float borderRadius = 0.05f; - if (Keyboard.isKeyDown(Keyboard.KEY_N)) borderRadius = 0; - for (int x = -16; x < 272; x++) { - for (int y = -16; y < 272; y++) { - float radius = (float) Math.sqrt(((x - 128) * (x - 128) + (y - 128) * (y - 128)) / 16384f); - float angle = (float) Math.toDegrees(Math.atan((128 - x) / (y - 128 + 1E-5)) + Math.PI / 2); - if (y < 128) angle += 180; - if (radius <= 1) { - int rgb = Color.getHSBColor(angle / 360f, (float) Math.pow(radius, 1.5f), hsv[2]).getRGB(); - bufferedImage.setRGB(x + 16, y + 16, rgb); - } else if (radius <= 1 + borderRadius) { - float invBlackAlpha = Math.abs(radius - 1 - borderRadius / 2) / borderRadius * 2; - float blackAlpha = 1 - invBlackAlpha; - - if (radius > 1 + borderRadius / 2) { - bufferedImage.setRGB(x + 16, y + 16, (int) (blackAlpha * 255) << 24); - } else { - Color col = Color.getHSBColor(angle / 360f, 1, hsv[2]); - int rgb = (int) (col.getRed() * invBlackAlpha) << 16 | - (int) (col.getGreen() * invBlackAlpha) << 8 | - (int) (col.getBlue() * invBlackAlpha); - bufferedImage.setRGB(x + 16, y + 16, 0xff000000 | rgb); - } - - } - } - } - - BufferedImage bufferedImageValue = new BufferedImage(10, 64, BufferedImage.TYPE_INT_ARGB); - for (int x = 0; x < 10; x++) { - for (int y = 0; y < 64; y++) { - if ((x == 0 || x == 9) && (y == 0 || y == 63)) continue; - - int rgb = Color.getHSBColor(wheelAngle / 360, wheelRadius, (64 - y) / 64f).getRGB(); - bufferedImageValue.setRGB(x, y, rgb); - } - } - - BufferedImage bufferedImageOpacity = new BufferedImage(10, 64, BufferedImage.TYPE_INT_ARGB); - for (int x = 0; x < 10; x++) { - for (int y = 0; y < 64; y++) { - if ((x == 0 || x == 9) && (y == 0 || y == 63)) continue; - - int rgb = (currentColour & 0x00FFFFFF) | (Math.min(255, (64 - y) * 4) << 24); - bufferedImageOpacity.setRGB(x, y, rgb); - } - } - - float selradius = (float) Math.pow(wheelRadius, 1 / 1.5f) * 32; - int selx = (int) (Math.cos(Math.toRadians(wheelAngle)) * selradius); - int sely = (int) (Math.sin(Math.toRadians(wheelAngle)) * selradius); - - int valueOffset = 0; - if (valueSlider) { - valueOffset = 15; - - Minecraft.getMinecraft().getTextureManager().loadTexture( - colourPickerBarValueLocation, - new DynamicTexture(bufferedImageValue) - ); - Minecraft.getMinecraft().getTextureManager().bindTexture(colourPickerBarValueLocation); - GlStateManager.color(1, 1, 1, 1); - GuiRenderUtils.drawTexturedRect(x + 5 + 64 + 5, y + 5, 10, 64, GL11.GL_NEAREST); - } - - int opacityOffset = 0; - if (opacitySlider) { - opacityOffset = 15; - - Minecraft.getMinecraft().getTextureManager().bindTexture(colour_selector_bar_alpha); - GlStateManager.color(1, 1, 1, 1); - GuiRenderUtils.drawTexturedRect(x + 5 + 64 + 5 + valueOffset, y + 5, 10, 64, GL11.GL_NEAREST); - - Minecraft.getMinecraft().getTextureManager().loadTexture( - colourPickerBarOpacityLocation, - new DynamicTexture(bufferedImageOpacity) - ); - Minecraft.getMinecraft().getTextureManager().bindTexture(colourPickerBarOpacityLocation); - GlStateManager.color(1, 1, 1, 1); - GuiRenderUtils.drawTexturedRect(x + 5 + 64 + 5 + valueOffset, y + 5, 10, 64, GL11.GL_NEAREST); - } - - int chromaSpeed = ChromaColour.getSpeed(colour); - int currentColourChroma = ChromaColour.specialToChromaRGB(colour); - Color cChroma = new Color(currentColourChroma, true); - float[] hsvChroma = Color.RGBtoHSB(cChroma.getRed(), cChroma.getGreen(), cChroma.getBlue(), null); - - if (chromaSpeed > 0) { - Gui.drawRect(x + 5 + 64 + valueOffset + opacityOffset + 5 + 1, y + 5 + 1, - x + 5 + 64 + valueOffset + opacityOffset + 5 + 10 - 1, y + 5 + 64 - 1, - Color.HSBtoRGB(hsvChroma[0], 0.8f, 0.8f) - ); - } else { - Gui.drawRect(x + 5 + 64 + valueOffset + opacityOffset + 5 + 1, y + 5 + 27 + 1, - x + 5 + 64 + valueOffset + opacityOffset + 5 + 10 - 1, y + 5 + 37 - 1, - Color.HSBtoRGB((hsvChroma[0] + (System.currentTimeMillis() - ChromaColour.startTime) / 1000f) % 1, 0.8f, 0.8f) - ); - } - - Minecraft.getMinecraft().getTextureManager().bindTexture(colour_selector_bar); - GlStateManager.color(1, 1, 1, 1); - if (valueSlider) GuiRenderUtils.drawTexturedRect(x + 5 + 64 + 5, y + 5, 10, 64, GL11.GL_NEAREST); - if (opacitySlider) GuiRenderUtils.drawTexturedRect(x + 5 + 64 + 5 + valueOffset, y + 5, 10, 64, GL11.GL_NEAREST); - - if (chromaSpeed > 0) { - GuiRenderUtils.drawTexturedRect(x + 5 + 64 + valueOffset + opacityOffset + 5, y + 5, 10, 64, GL11.GL_NEAREST); - } else { - Minecraft.getMinecraft().getTextureManager().bindTexture(colour_selector_chroma); - GuiRenderUtils.drawTexturedRect(x + 5 + 64 + valueOffset + opacityOffset + 5, y + 5 + 27, 10, 10, GL11.GL_NEAREST); - } - - if (valueSlider) Gui.drawRect(x + 5 + 64 + 5, y + 5 + 64 - (int) (64 * hsv[2]), - x + 5 + 64 + valueOffset, y + 5 + 64 - (int) (64 * hsv[2]) + 1, 0xFF000000 - ); - if (opacitySlider) Gui.drawRect(x + 5 + 64 + 5 + valueOffset, y + 5 + 64 - c.getAlpha() / 4, - x + 5 + 64 + valueOffset + opacityOffset, y + 5 + 64 - c.getAlpha() / 4 - 1, 0xFF000000 - ); - if (chromaSpeed > 0) { - Gui.drawRect(x + 5 + 64 + valueOffset + opacityOffset + 5, - y + 5 + 64 - (int) (chromaSpeed / 255f * 64), - x + 5 + 64 + valueOffset + opacityOffset + 5 + 10, - y + 5 + 64 - (int) (chromaSpeed / 255f * 64) + 1, 0xFF000000 - ); - } - - Minecraft.getMinecraft().getTextureManager().loadTexture(colourPickerLocation, new DynamicTexture(bufferedImage)); - Minecraft.getMinecraft().getTextureManager().bindTexture(colourPickerLocation); - GlStateManager.color(1, 1, 1, 1); - GuiRenderUtils.drawTexturedRect(x + 1, y + 1, 72, 72, GL11.GL_LINEAR); - - Minecraft.getMinecraft().getTextureManager().bindTexture(colour_selector_dot); - GlStateManager.color(1, 1, 1, 1); - GuiRenderUtils.drawTexturedRect(x + 5 + 32 + selx - 4, y + 5 + 32 + sely - 4, 8, 8, GL11.GL_NEAREST); - - TextRenderUtils.drawStringCenteredScaledMaxWidth(EnumChatFormatting.GRAY.toString() + Math.round(hsv[2] * 100) + "", - Minecraft.getMinecraft().fontRendererObj, - x + 5 + 64 + 5 + 5 - (Math.round(hsv[2] * 100) == 100 ? 1 : 0), y + 5 + 64 + 5 + 5, true, 13, -1 - ); - if (opacitySlider) { - TextRenderUtils.drawStringCenteredScaledMaxWidth( - EnumChatFormatting.GRAY.toString() + Math.round(c.getAlpha() / 255f * 100) + "", - Minecraft.getMinecraft().fontRendererObj, - x + 5 + 64 + 5 + valueOffset + 5, - y + 5 + 64 + 5 + 5, - true, - 13, - -1 - ); - } - if (chromaSpeed > 0) { - TextRenderUtils.drawStringCenteredScaledMaxWidth(EnumChatFormatting.GRAY.toString() + - (int) ChromaColour.getSecondsForSpeed(chromaSpeed) + "s", - Minecraft.getMinecraft().fontRendererObj, - x + 5 + 64 + 5 + valueOffset + opacityOffset + 6, y + 5 + 64 + 5 + 5, true, 13, -1 - ); - } - - hexField.setSize(48, 10); - if (!hexField.getFocus()) hexField.setText(Integer.toHexString(c.getRGB() & 0xFFFFFF).toUpperCase()); - - StringBuilder sb = new StringBuilder(EnumChatFormatting.GRAY + "#"); - for (int i = 0; i < 6 - hexField.getText().length(); i++) { - sb.append("0"); - } - sb.append(EnumChatFormatting.WHITE); - - hexField.setPrependText(sb.toString()); - hexField.render(x + 5 + 8, y + 5 + 64 + 5); - } - - public boolean mouseInput(int mouseX, int mouseY) { - ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - float mouseXF = (float) (Mouse.getX() * scaledResolution.getScaledWidth_double() / - Minecraft.getMinecraft().displayWidth); - float mouseYF = (float) (scaledResolution.getScaledHeight_double() - Mouse.getY() * - scaledResolution.getScaledHeight_double() / Minecraft.getMinecraft().displayHeight - 1); - - if ((Mouse.getEventButton() == 0 || Mouse.getEventButton() == 1) && Mouse.getEventButtonState()) { - if (mouseX > x + 5 + 8 && mouseX < x + 5 + 8 + 48) { - if (mouseY > y + 5 + 64 + 5 && mouseY < y + 5 + 64 + 5 + 10) { - hexField.mouseClicked(mouseX, mouseY, Mouse.getEventButton()); - clickedComponent = -1; - return true; - } - } - } - if (!Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { - clickedComponent = -1; - } - if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { - if (mouseX >= x && mouseX <= x + 119 && - mouseY >= y && mouseY <= y + 89) { - hexField.unfocus(); - - int xWheel = mouseX - x - 5; - int yWheel = mouseY - y - 5; - - if (xWheel > 0 && xWheel < 64) { - if (yWheel > 0 && yWheel < 64) { - clickedComponent = 0; - } - } - - int xValue = mouseX - (x + 5 + 64 + 5); - int y = mouseY - this.y - 5; - - int opacityOffset = opacitySlider ? 15 : 0; - int valueOffset = valueSlider ? 15 : 0; - - if (y > -5 && y <= 69) { - if (valueSlider) { - if (xValue > 0 && xValue < 10) { - clickedComponent = 1; - } - } - - if (opacitySlider) { - int xOpacity = mouseX - (x + 5 + 64 + 5 + valueOffset); - - if (xOpacity > 0 && xOpacity < 10) { - clickedComponent = 2; - } - } - } - - int chromaSpeed = ChromaColour.getSpeed(colour); - int xChroma = mouseX - (x + 5 + 64 + valueOffset + opacityOffset + 5); - if (xChroma > 0 && xChroma < 10) { - if (chromaSpeed > 0) { - if (y > -5 && y <= 69) { - clickedComponent = 3; - } - } else if (mouseY > this.y + 5 + 27 && mouseY < this.y + 5 + 37) { - int currentColour = ChromaColour.specialToSimpleRGB(colour); - Color c = new Color(currentColour, true); - colour = ChromaColour.special(200, c.getAlpha(), currentColour); - colourChangedCallback.accept(colour); - } - } - } else { - hexField.unfocus(); - closeCallback.run(); - return false; - } - } - if (Mouse.isButtonDown(0) && clickedComponent >= 0) { - int currentColour = ChromaColour.specialToSimpleRGB(colour); - Color c = new Color(currentColour, true); - float[] hsv = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), null); - - float xWheel = mouseXF - x - 5; - float yWheel = mouseYF - y - 5; - - if (clickedComponent == 0) { - float angle = (float) Math.toDegrees(Math.atan((32 - xWheel) / (yWheel - 32 + 1E-5)) + Math.PI / 2); - xWheel = Math.max(0, Math.min(64, xWheel)); - yWheel = Math.max(0, Math.min(64, yWheel)); - float radius = (float) Math.sqrt(((xWheel - 32) * (xWheel - 32) + (yWheel - 32) * (yWheel - 32)) / 1024f); - if (yWheel < 32) angle += 180; - - this.wheelAngle = angle; - this.wheelRadius = (float) Math.pow(Math.min(1, radius), 1.5f); - int rgb = Color.getHSBColor(angle / 360f, wheelRadius, hsv[2]).getRGB(); - colour = ChromaColour.special(ChromaColour.getSpeed(colour), c.getAlpha(), rgb); - colourChangedCallback.accept(colour); - return true; - } - - float y = mouseYF - this.y - 5; - y = Math.max(0, Math.min(64, y)); - System.out.println(y); - - if (clickedComponent == 1) { - int rgb = Color.getHSBColor(wheelAngle / 360, wheelRadius, 1 - y / 64f).getRGB(); - colour = ChromaColour.special(ChromaColour.getSpeed(colour), c.getAlpha(), rgb); - colourChangedCallback.accept(colour); - return true; - } - - if (clickedComponent == 2) { - colour = ChromaColour.special(ChromaColour.getSpeed(colour), - 255 - Math.round(y / 64f * 255), currentColour - ); - colourChangedCallback.accept(colour); - return true; - } - - if (clickedComponent == 3) { - colour = ChromaColour.special(255 - Math.round(y / 64f * 255), c.getAlpha(), currentColour); - colourChangedCallback.accept(colour); - } - return true; - } - return false; - } - - public boolean keyboardInput() { - if (Keyboard.getEventKeyState() && hexField.getFocus()) { - if (Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) { - hexField.unfocus(); - return true; - } - String old = hexField.getText(); - - hexField.keyTyped(Keyboard.getEventCharacter(), Keyboard.getEventKey()); - - if (hexField.getText().length() > 6) { - hexField.setText(old); - } else { - try { - String text = hexField.getText().toLowerCase(); - - int rgb = Integer.parseInt(text, 16); - int alpha = (ChromaColour.specialToSimpleRGB(colour) >> 24) & 0xFF; - colour = ChromaColour.special(ChromaColour.getSpeed(colour), alpha, rgb); - colourChangedCallback.accept(colour); - - Color c = new Color(rgb); - float[] hsv = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), null); - updateAngleAndRadius(hsv); - } catch (Exception ignored) { - } - } - - return true; - } - return false; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/GuiElementTextField.java b/src/main/java/at/hannibal2/skyhanni/config/core/GuiElementTextField.java deleted file mode 100644 index 56114c161..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/GuiElementTextField.java +++ /dev/null @@ -1,685 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core; - -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils; -import at.hannibal2.skyhanni.utils.StringUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.gui.GuiTextField; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.renderer.GlStateManager; - -import java.awt.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class GuiElementTextField { - public static final int SCISSOR_TEXT = 0b10000000; - public static final int DISABLE_BG = 0b1000000; - public static final int SCALE_TEXT = 0b100000; - public static final int NUM_ONLY = 0b10000; - public static final int NO_SPACE = 0b01000; - public static final int FORCE_CAPS = 0b00100; - public static final int COLOUR = 0b00010; - public static final int MULTILINE = 0b00001; - - private int searchBarYSize; - private int searchBarXSize; - private static final int searchBarPadding = 2; - - private int options; - - private boolean focus = false; - - private int x; - private int y; - - private String prependText = ""; - private String masterStarUnicode = ""; - private int customTextColour = 0xffffffff; - - private final GuiTextField textField = new GuiTextField(0, Minecraft.getMinecraft().fontRendererObj, - 0, 0, 0, 0 - ); - - private int customBorderColour = -1; - - public GuiElementTextField(String initialText, int options) { - this(initialText, 100, 20, options); - } - - public GuiElementTextField(String initialText, int sizeX, int sizeY, int options) { - textField.setFocused(true); - textField.setCanLoseFocus(false); - textField.setMaxStringLength(999); - textField.setText(initialText); - this.searchBarXSize = sizeX; - this.searchBarYSize = sizeY; - this.options = options; - } - - public void setMaxStringLength(int len) { - textField.setMaxStringLength(len); - } - - public void setCustomBorderColour(int colour) { - this.customBorderColour = colour; - } - - public void setCustomTextColour(int colour) { - this.customTextColour = colour; - } - - public String getText() { - return textField.getText(); - } - - public String getTextDisplay() { - String textNoColour = getText(); - while (true) { - Matcher matcher = PATTERN_CONTROL_CODE.matcher(textNoColour); - if (!matcher.find()) break; - String code = matcher.group(1); - textNoColour = matcher.replaceFirst("\u00B6" + code); - } - - return textNoColour; - } - - public void setPrependText(String text) { - this.prependText = text; - } - - public void setText(String text) { - if (textField.getText() == null || !textField.getText().equals(text)) { - textField.setText(text); - } - } - - public void setSize(int searchBarXSize, int searchBarYSize) { - this.searchBarXSize = searchBarXSize; - this.searchBarYSize = searchBarYSize; - } - - public void setOptions(int options) { - this.options = options; - } - - @Override - public String toString() { - return textField.getText(); - } - - public void setFocus(boolean focus) { - this.focus = focus; - if (!focus) { - textField.setCursorPosition(textField.getCursorPosition()); - } - } - - public boolean getFocus() { - return focus; - } - - public int getHeight() { - ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft()); - int paddingUnscaled = searchBarPadding / scaledresolution.getScaleFactor(); - - int numLines = org.apache.commons.lang3.StringUtils.countMatches(textField.getText(), "\n") + 1; - int extraSize = (searchBarYSize - 8) / 2 + 8; - int bottomTextBox = searchBarYSize + extraSize * (numLines - 1); - - return bottomTextBox + paddingUnscaled * 2; - } - - public int getWidth() { - ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft()); - int paddingUnscaled = searchBarPadding / scaledresolution.getScaleFactor(); - - return searchBarXSize + paddingUnscaled * 2; - } - - private float getScaleFactor(String str) { - return Math.min(1, (searchBarXSize - 2) / (float) Minecraft.getMinecraft().fontRendererObj.getStringWidth(str)); - } - - private boolean isScaling() { - return (options & SCALE_TEXT) != 0; - } - - private static final Pattern PATTERN_CONTROL_CODE = Pattern.compile("(?i)\\u00A7([^\\u00B6]|$)(?!\\u00B6)"); - - public int getCursorPos(int mouseX, int mouseY) { - int xComp = mouseX - x; - int yComp = mouseY - y; - - int extraSize = (searchBarYSize - 8) / 2 + 8; - - String renderText = prependText + textField.getText(); - - int lineNum = Math.round(((yComp - (searchBarYSize - 8) / 2)) / extraSize); - - String text = renderText; - String textNoColour = renderText; - if ((options & COLOUR) != 0) { - while (true) { - Matcher matcher = PATTERN_CONTROL_CODE.matcher(text); - if (!matcher.find() || matcher.groupCount() < 1) break; - String code = matcher.group(1); - if (code.isEmpty()) { - text = matcher.replaceFirst("\u00A7r\u00B6"); - } else { - text = matcher.replaceFirst("\u00A7" + code + "\u00B6" + code); - } - } - } - while (true) { - Matcher matcher = PATTERN_CONTROL_CODE.matcher(textNoColour); - if (!matcher.find() || matcher.groupCount() < 1) break; - String code = matcher.group(1); - textNoColour = matcher.replaceFirst("\u00B6" + code); - } - - int currentLine = 0; - int cursorIndex = 0; - for (; cursorIndex < textNoColour.length(); cursorIndex++) { - if (currentLine == lineNum) break; - if (textNoColour.charAt(cursorIndex) == '\n') { - currentLine++; - } - } - - String textNC = textNoColour.substring(0, cursorIndex); - int colorCodes = org.apache.commons.lang3.StringUtils.countMatches(textNC, "\u00B6"); - String line = text.substring(cursorIndex + (((options & COLOUR) != 0) ? colorCodes * 2 : 0)).split("\n")[0]; - int padding = Math.min(5, searchBarXSize - strLenNoColor(line)) / 2; - String trimmed = Minecraft.getMinecraft().fontRendererObj.trimStringToWidth(line, xComp - padding); - int linePos = strLenNoColor(trimmed); - if (linePos != strLenNoColor(line)) { - char after = line.charAt(linePos); - int trimmedWidth = Minecraft.getMinecraft().fontRendererObj.getStringWidth(trimmed); - int charWidth = Minecraft.getMinecraft().fontRendererObj.getCharWidth(after); - if (trimmedWidth + charWidth / 2 < xComp - padding) { - linePos++; - } - } - cursorIndex += linePos; - - int pre = StringUtils.INSTANCE.removeColor(prependText).length(); - if (cursorIndex < pre) { - cursorIndex = 0; - } else { - cursorIndex -= pre; - } - - return cursorIndex; - } - - public void mouseClicked(int mouseX, int mouseY, int mouseButton) { - if (mouseButton == 1) { - textField.setText(""); - } else { - textField.setCursorPosition(getCursorPos(mouseX, mouseY)); - } - focus = true; - } - - public void unfocus() { - focus = false; - textField.setSelectionPos(textField.getCursorPosition()); - } - - public int strLenNoColor(String str) { - return str.replaceAll("(?i)\\u00A7.", "").length(); - } - - public void mouseClickMove(int mouseX, int mouseY, int clickedMouseButton, long timeSinceLastClick) { - if (focus) { - textField.setSelectionPos(getCursorPos(mouseX, mouseY)); - } - } - - public void keyTyped(char typedChar, int keyCode) { - if (focus) { - if ((options & MULTILINE) != 0) { //Carriage return - Pattern patternControlCode = Pattern.compile("(?i)\\u00A7([^\\u00B6\n]|$)(?!\\u00B6)"); - - String text = textField.getText(); - String textNoColour = textField.getText(); - while (true) { - Matcher matcher = patternControlCode.matcher(text); - if (!matcher.find() || matcher.groupCount() < 1) break; - String code = matcher.group(1); - if (code.isEmpty()) { - text = matcher.replaceFirst("\u00A7r\u00B6"); - } else { - text = matcher.replaceFirst("\u00A7" + code + "\u00B6" + code); - } - } - while (true) { - Matcher matcher = patternControlCode.matcher(textNoColour); - if (!matcher.find() || matcher.groupCount() < 1) break; - String code = matcher.group(1); - textNoColour = matcher.replaceFirst("\u00B6" + code); - } - - if (keyCode == 28) { - String before = textField.getText().substring(0, textField.getCursorPosition()); - String after = textField.getText().substring(textField.getCursorPosition()); - int pos = textField.getCursorPosition(); - textField.setText(before + "\n" + after); - textField.setCursorPosition(pos + 1); - return; - } else if (keyCode == 200) { //Up - String textNCBeforeCursor = textNoColour.substring(0, textField.getSelectionEnd()); - int colorCodes = org.apache.commons.lang3.StringUtils.countMatches(textNCBeforeCursor, "\u00B6"); - String textBeforeCursor = text.substring(0, textField.getSelectionEnd() + colorCodes * 2); - - int numLinesBeforeCursor = org.apache.commons.lang3.StringUtils.countMatches(textBeforeCursor, "\n"); - - String[] split = textBeforeCursor.split("\n"); - int textBeforeCursorWidth; - String lineBefore; - String thisLineBeforeCursor; - if (split.length == numLinesBeforeCursor && split.length > 0) { - textBeforeCursorWidth = 0; - lineBefore = split[split.length - 1]; - thisLineBeforeCursor = ""; - } else if (split.length > 1) { - thisLineBeforeCursor = split[split.length - 1]; - lineBefore = split[split.length - 2]; - textBeforeCursorWidth = Minecraft.getMinecraft().fontRendererObj.getStringWidth(thisLineBeforeCursor); - } else { - return; - } - String trimmed = Minecraft.getMinecraft().fontRendererObj - .trimStringToWidth(lineBefore, textBeforeCursorWidth); - int linePos = strLenNoColor(trimmed); - if (linePos != strLenNoColor(lineBefore)) { - char after = lineBefore.charAt(linePos); - int trimmedWidth = Minecraft.getMinecraft().fontRendererObj.getStringWidth(trimmed); - int charWidth = Minecraft.getMinecraft().fontRendererObj.getCharWidth(after); - if (trimmedWidth + charWidth / 2 < textBeforeCursorWidth) { - linePos++; - } - } - int newPos = textField.getSelectionEnd() - strLenNoColor(thisLineBeforeCursor) - - strLenNoColor(lineBefore) - 1 + linePos; - - if (GuiScreen.isShiftKeyDown()) { - textField.setSelectionPos(newPos); - } else { - textField.setCursorPosition(newPos); - } - } else if (keyCode == 208) { //Down - String textNCBeforeCursor = textNoColour.substring(0, textField.getSelectionEnd()); - int colorCodes = org.apache.commons.lang3.StringUtils.countMatches(textNCBeforeCursor, "\u00B6"); - String textBeforeCursor = text.substring(0, textField.getSelectionEnd() + colorCodes * 2); - - int numLinesBeforeCursor = org.apache.commons.lang3.StringUtils.countMatches(textBeforeCursor, "\n"); - - String[] split = textBeforeCursor.split("\n"); - String thisLineBeforeCursor; - int textBeforeCursorWidth; - if (split.length == numLinesBeforeCursor) { - thisLineBeforeCursor = ""; - textBeforeCursorWidth = 0; - } else if (split.length > 0) { - thisLineBeforeCursor = split[split.length - 1]; - textBeforeCursorWidth = Minecraft.getMinecraft().fontRendererObj.getStringWidth(thisLineBeforeCursor); - } else { - return; - } - - String[] split2 = textNoColour.split("\n"); - if (split2.length > numLinesBeforeCursor + 1) { - String lineAfter = split2[numLinesBeforeCursor + 1]; - String trimmed = Minecraft.getMinecraft().fontRendererObj - .trimStringToWidth(lineAfter, textBeforeCursorWidth); - int linePos = strLenNoColor(trimmed); - if (linePos != strLenNoColor(lineAfter)) { - char after = lineAfter.charAt(linePos); - int trimmedWidth = Minecraft.getMinecraft().fontRendererObj.getStringWidth(trimmed); - int charWidth = Minecraft.getMinecraft().fontRendererObj.getCharWidth(after); - if (trimmedWidth + charWidth / 2 < textBeforeCursorWidth) { - linePos++; - } - } - int newPos = textField.getSelectionEnd() - strLenNoColor(thisLineBeforeCursor) - + strLenNoColor(split2[numLinesBeforeCursor]) + 1 + linePos; - - if (GuiScreen.isShiftKeyDown()) { - textField.setSelectionPos(newPos); - } else { - textField.setCursorPosition(newPos); - } - } - } - } - - String old = textField.getText(); - if ((options & FORCE_CAPS) != 0) typedChar = Character.toUpperCase(typedChar); - if ((options & NO_SPACE) != 0 && typedChar == ' ') return; - - if (typedChar == '\u00B6') { - typedChar = '\u00A7'; - } - - textField.setFocused(true); - textField.textboxKeyTyped(typedChar, keyCode); - - if ((options & COLOUR) != 0) { - if (typedChar == '&') { - int pos = textField.getCursorPosition() - 2; - if (pos >= 0 && pos < textField.getText().length()) { - if (textField.getText().charAt(pos) == '&') { - String before = textField.getText().substring(0, pos); - String after = ""; - if (pos + 2 < textField.getText().length()) { - after = textField.getText().substring(pos + 2); - } - textField.setText(before + "\u00A7" + after); - textField.setCursorPosition(pos + 1); - } - } - } else if (typedChar == '*') { - int pos = textField.getCursorPosition() - 2; - if (pos >= 0 && pos < textField.getText().length()) { - if (textField.getText().charAt(pos) == '*') { - String before = textField.getText().substring(0, pos); - String after = ""; - if (pos + 2 < textField.getText().length()) { - after = textField.getText().substring(pos + 2); - } - textField.setText(before + "\u272A" + after); - textField.setCursorPosition(pos + 1); - } - } - } else { - for (int i = 0; i < 10; i++) { - if (typedChar == Integer.toString(i + 1).charAt(0)) { - int pos = textField.getCursorPosition() - 2; - if (pos >= 0 && pos < textField.getText().length()) { - if (textField.getText().charAt(pos) == '*') { - switch (i) { - case 0: - masterStarUnicode = "\u278A"; - break; - case 1: - masterStarUnicode = "\u278B"; - break; - case 2: - masterStarUnicode = "\u278C"; - break; - case 3: - masterStarUnicode = "\u278D"; - break; - case 4: - masterStarUnicode = "\u278E"; - break; - case 5: - masterStarUnicode = "\u278F"; - break; - case 6: - masterStarUnicode = "\u2790"; - break; - case 7: - masterStarUnicode = "\u2791"; - break; - case 8: - masterStarUnicode = "\u2792"; - break; - case 9: - masterStarUnicode = "\u2793"; - break; - } - String before = textField.getText().substring(0, pos); - String after = ""; - if (pos + 2 < textField.getText().length()) { - after = textField.getText().substring(pos + 2); - } - textField.setText(before + masterStarUnicode + after); - textField.setCursorPosition(pos + 1); - } - } - } - } - } - } - - if ((options & NUM_ONLY) != 0 && textField.getText().matches("[^0-9.]")) textField.setText(old); - } - } - - public void render(int x, int y) { - this.x = x; - this.y = y; - drawTextbox(x, y, searchBarXSize, searchBarYSize, searchBarPadding, textField, focus); - } - - private void drawTextbox( - int x, int y, int searchBarXSize, int searchBarYSize, int searchBarPadding, - GuiTextField textField, boolean focus - ) { - ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft()); - String renderText = prependText + textField.getText(); - - GlStateManager.disableLighting(); - - /* - * Search bar - */ - int paddingUnscaled = searchBarPadding / scaledresolution.getScaleFactor(); - if (paddingUnscaled < 1) paddingUnscaled = 1; - - int numLines = org.apache.commons.lang3.StringUtils.countMatches(renderText, "\n") + 1; - int extraSize = (searchBarYSize - 8) / 2 + 8; - int bottomTextBox = y + searchBarYSize + extraSize * (numLines - 1); - - int borderColour = focus ? Color.GREEN.getRGB() : Color.WHITE.getRGB(); - if (customBorderColour != -1) { - borderColour = customBorderColour; - } - if ((options & DISABLE_BG) == 0) { - //bar background - Gui.drawRect(x - paddingUnscaled, - y - paddingUnscaled, - x + searchBarXSize + paddingUnscaled, - bottomTextBox + paddingUnscaled, borderColour - ); - Gui.drawRect(x, - y, - x + searchBarXSize, - bottomTextBox, Color.BLACK.getRGB() - ); - } - - //bar text - String text = renderText; - String textNoColor = renderText; - if ((options & COLOUR) != 0) { - while (true) { - Matcher matcher = PATTERN_CONTROL_CODE.matcher(text); - if (!matcher.find() || matcher.groupCount() < 1) break; - String code = matcher.group(1); - if (code.isEmpty()) { - text = matcher.replaceFirst("\u00A7r\u00B6"); - } else { - text = matcher.replaceFirst("\u00A7" + code + "\u00B6" + code); - } - } - } - while (true) { - Matcher matcher = PATTERN_CONTROL_CODE.matcher(textNoColor); - if (!matcher.find() || matcher.groupCount() < 1) break; - String code = matcher.group(1); - textNoColor = matcher.replaceFirst("\u00B6" + code); - } - - int xStartOffset = 5; - float scale = 1; - String[] texts = text.split("\n"); - for (int yOffI = 0; yOffI < texts.length; yOffI++) { - int yOff = yOffI * extraSize; - - if (isScaling() && Minecraft.getMinecraft().fontRendererObj.getStringWidth(texts[yOffI]) > searchBarXSize - 10) { - scale = (searchBarXSize - 2) / (float) Minecraft.getMinecraft().fontRendererObj.getStringWidth(texts[yOffI]); - if (scale > 1) scale = 1; - float newLen = Minecraft.getMinecraft().fontRendererObj.getStringWidth(texts[yOffI]) * scale; - xStartOffset = (int) ((searchBarXSize - newLen) / 2f); - - TextRenderUtils.drawStringCenteredScaledMaxWidth( -// ChromaUtils.INSTANCE.chromaStringByColourCode(texts[yOffI]), - texts[yOffI], - Minecraft.getMinecraft().fontRendererObj, - x + searchBarXSize / 2f, - y + searchBarYSize / 2f + yOff, - false, - searchBarXSize - 2, - customTextColour - ); - } else { - if ((options & SCISSOR_TEXT) != 0) { - GlScissorStack.push(x + 5, 0, x + searchBarXSize, scaledresolution.getScaledHeight(), scaledresolution); -// Minecraft.getMinecraft().fontRendererObj.drawString(ChromaUtils.INSTANCE.chromaStringByColourCode(texts[yOffI]), x + 5, - Minecraft.getMinecraft().fontRendererObj.drawString(texts[yOffI], x + 5, - y + (searchBarYSize - 8) / 2 + yOff, customTextColour - ); - GlScissorStack.pop(scaledresolution); - } else { -// String display = Minecraft.getMinecraft().fontRendererObj.trimStringToWidth(ChromaUtils.INSTANCE.chromaStringByColourCode( - String display = Minecraft.getMinecraft().fontRendererObj.trimStringToWidth(texts[yOffI], searchBarXSize - 10); - Minecraft.getMinecraft().fontRendererObj.drawString(display, x + 5, - y + (searchBarYSize - 8) / 2 + yOff, customTextColour - ); - } - - } - } - - if (focus && System.currentTimeMillis() % 1000 > 500) { - String textNCBeforeCursor = textNoColor.substring(0, textField.getCursorPosition() + prependText.length()); - int colorCodes = org.apache.commons.lang3.StringUtils.countMatches(textNCBeforeCursor, "\u00B6"); - String textBeforeCursor = text.substring( - 0, - Math.min( - text.length(), - textField.getCursorPosition() + prependText.length() + (((options & COLOUR) != 0) ? colorCodes * 2 : 0) - ) - ); - - int numLinesBeforeCursor = org.apache.commons.lang3.StringUtils.countMatches(textBeforeCursor, "\n"); - int yOff = numLinesBeforeCursor * extraSize; - - String[] split = textBeforeCursor.split("\n"); - int textBeforeCursorWidth; - if (split.length <= numLinesBeforeCursor || split.length == 0) { - textBeforeCursorWidth = 0; - } else { - textBeforeCursorWidth = (int) (Minecraft.getMinecraft().fontRendererObj.getStringWidth(split[split.length - - 1]) * scale); - } - Gui.drawRect(x + xStartOffset + textBeforeCursorWidth, - y + (searchBarYSize - 8) / 2 - 1 + yOff, - x + xStartOffset + textBeforeCursorWidth + 1, - y + (searchBarYSize - 8) / 2 + 9 + yOff, Color.WHITE.getRGB() - ); - } - - String selectedText = textField.getSelectedText(); - if (!selectedText.isEmpty()) { - int leftIndex = Math.min( - textField.getCursorPosition() + prependText.length(), - textField.getSelectionEnd() + prependText.length() - ); - int rightIndex = Math.max( - textField.getCursorPosition() + prependText.length(), - textField.getSelectionEnd() + prependText.length() - ); - - float texX = 0; - int texY = 0; - boolean sectionSignPrev = false; - boolean ignoreNext = false; - boolean bold = false; - for (int i = 0; i < textNoColor.length(); i++) { - if (ignoreNext) { - ignoreNext = false; - continue; - } - - char c = textNoColor.charAt(i); - if (sectionSignPrev) { - if (c != 'k' && c != 'K' - && c != 'm' && c != 'M' - && c != 'n' && c != 'N' - && c != 'o' && c != 'O') { - bold = c == 'l' || c == 'L'; - } - sectionSignPrev = false; - if (i < prependText.length()) continue; - } - if (c == '\u00B6') { - sectionSignPrev = true; - if (i < prependText.length()) continue; - } - - if (c == '\n') { - if (i >= leftIndex && i < rightIndex) { - Gui.drawRect(x + xStartOffset + (int) texX, - y + (searchBarYSize - 8) / 2 - 1 + texY, - x + xStartOffset + (int) texX + 3, - y + (searchBarYSize - 8) / 2 + 9 + texY, Color.LIGHT_GRAY.getRGB() - ); - } - - texX = 0; - texY += extraSize; - continue; - } - - int len = Minecraft.getMinecraft().fontRendererObj.getStringWidth(String.valueOf(c)); - if (bold) len++; - if (i >= leftIndex && i < rightIndex) { - Gui.drawRect(x + xStartOffset + (int) texX, - y + (searchBarYSize - 8) / 2 - 1 + texY, - x + xStartOffset + (int) (texX + len * scale), - y + (searchBarYSize - 8) / 2 + 9 + texY, Color.LIGHT_GRAY.getRGB() - ); - - TextRenderUtils.drawStringScaled(String.valueOf(c), Minecraft.getMinecraft().fontRendererObj, - x + xStartOffset + texX, - y + searchBarYSize / 2f - scale * 8 / 2f + texY, false, Color.BLACK.getRGB(), scale - ); - if (bold) { - TextRenderUtils.drawStringScaled(String.valueOf(c), Minecraft.getMinecraft().fontRendererObj, - x + xStartOffset + texX + 1, - y + searchBarYSize / 2f - scale * 8 / 2f + texY, false, Color.BLACK.getRGB(), scale - ); - } - } - - texX += len * scale; - } - } - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/GuiScreenElementWrapper.java b/src/main/java/at/hannibal2/skyhanni/config/core/GuiScreenElementWrapper.java deleted file mode 100644 index beef55c70..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/GuiScreenElementWrapper.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core; - -import net.minecraft.client.gui.GuiScreen; -import org.lwjgl.input.Mouse; - -import java.io.IOException; - -public class GuiScreenElementWrapper extends GuiScreen { - public final GuiElement element; - - public GuiScreenElementWrapper(GuiElement element) { - this.element = element; - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - super.drawScreen(mouseX, mouseY, partialTicks); - element.render(); - } - - @Override - public void handleMouseInput() throws IOException { - super.handleMouseInput(); - int i = Mouse.getEventX() * this.width / this.mc.displayWidth; - int j = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1; - element.mouseInput(i, j); - } - - @Override - public void handleKeyboardInput() throws IOException { - super.handleKeyboardInput(); - element.keyboardInput(); - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/Config.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/Config.java deleted file mode 100644 index 4c9ff0d9c..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/Config.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config; - -public class Config { - public void executeRunnable(String runnableId) {} -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/KeybindHelper.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/KeybindHelper.java deleted file mode 100644 index 0253f360a..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/KeybindHelper.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config; - -import org.lwjgl.input.Keyboard; -import org.lwjgl.input.Mouse; - -public class KeybindHelper { - public static String getKeyName(int keyCode) { - if (keyCode == 0) { - return "NONE"; - } else if (keyCode < 0) { - return "Button " + (keyCode + 101); - } else { - String keyName = Keyboard.getKeyName(keyCode); - if (keyName == null) { - keyName = "???"; - } else if (keyName.equalsIgnoreCase("LMENU")) { - keyName = "LALT"; - } else if (keyName.equalsIgnoreCase("RMENU")) { - keyName = "RALT"; - } - return keyName; - } - } - - public static boolean isKeyValid(int keyCode) { - return keyCode != 0; - } - - public static boolean isKeyDown(int keyCode) { - if (!isKeyValid(keyCode)) { - return false; - } else if (keyCode < 0) { - return Mouse.isButtonDown(keyCode + 100); - } else { - return Keyboard.isKeyDown(keyCode); - } - } - - public static boolean isKeyPressed(int keyCode) { - if (!isKeyValid(keyCode)) { - return false; - } else if (keyCode < 0) { - return Mouse.getEventButtonState() && Mouse.getEventButton() == keyCode + 100; - } else { - return Keyboard.getEventKeyState() && Keyboard.getEventKey() == keyCode; - } - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/PositionNew.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/PositionNew.java deleted file mode 100644 index fb7127058..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/PositionNew.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config; - -import com.google.gson.annotations.Expose; -import net.minecraft.client.gui.ScaledResolution; - -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; - -public class PositionNew { - public enum Anchor { - MIN(0, 0, 0), - MID(0.5f, -0.5f, 0), - MAX(1f, -1f, 0), - GUI_MIN(0.5f, -1f, -0.5f), - GUI_MAX(0.5f, 0, 0.5f); - - float screenMult; - float elementMult; - float guiMult; - - Anchor(float screenMult, float elementMult, float guiMult) { - this.screenMult = screenMult; - this.elementMult = elementMult; - this.guiMult = guiMult; - } - } - - @Expose - private int x = 0; - @Expose - private int y = 0; - @Expose - private float scaleX = 1; - @Expose - private float scaleY = 1; - - @Expose - private Anchor anchorX = Anchor.MIN; - @Expose - private Anchor anchorY = Anchor.MIN; - - @Expose - private boolean pinned = false; - @Expose - private boolean allowPinToggle = true; - @Expose - private boolean allowResize = true; - - public PositionNew( - int x, - int y, - int scaleX, - int scaleY, - Anchor anchorX, - Anchor anchorY, - boolean pinned, - boolean allowPinToggle, - boolean allowResize - ) { - this.x = x; - this.y = y; - this.scaleX = scaleX; - this.scaleY = scaleY; - this.anchorX = anchorX; - this.anchorY = anchorY; - this.pinned = pinned; - this.allowPinToggle = allowPinToggle; - this.allowResize = allowResize; - } - - protected PositionNew() {} - - public int moveX(ScaledResolution scaledResolution, int deltaX, int sizeX) { - int originalX = resolveX(scaledResolution, sizeX); - AtomicInteger atomicInteger = new AtomicInteger(x + deltaX); - AtomicReference<Anchor> atomicReference = new AtomicReference<>(anchorX); - move( - atomicInteger, - atomicReference, - anchorY, - (int) Math.ceil(sizeX * scaleX), - scaledResolution.getScaledWidth(), - 176 - ); - x = atomicInteger.get(); - anchorX = atomicReference.get(); - return resolveX(scaledResolution, sizeX) - originalX; - } - - public int moveY(ScaledResolution scaledResolution, int deltaY, int sizeY) { - int originalY = resolveY(scaledResolution, sizeY); - AtomicInteger atomicInteger = new AtomicInteger(y + deltaY); - AtomicReference<Anchor> atomicReference = new AtomicReference<>(anchorY); - move( - atomicInteger, - atomicReference, - anchorY, - (int) Math.ceil(sizeY * scaleY), - scaledResolution.getScaledHeight(), - 166 - ); - y = atomicInteger.get(); - anchorY = atomicReference.get(); - return resolveY(scaledResolution, sizeY) - originalY; - } - - private void move( - AtomicInteger coord, - AtomicReference<Anchor> anchor, - Anchor oppositeAnchor, - int elementSize, - int screenSize, - int guiSize - ) { - int centerCoord = resolve(coord.get(), anchor.get(), elementSize, screenSize, guiSize) + elementSize / 2; - - if (centerCoord < screenSize / 2 - guiSize / 2) { - if (pinned && centerCoord > screenSize / 4 - guiSize / 4 && oppositeAnchor == Anchor.MID) { - anchor.set(Anchor.GUI_MIN); - } else { - anchor.set(Anchor.MIN); - } - } else if (centerCoord > screenSize / 2 + guiSize / 2) { - if (pinned && centerCoord < screenSize - (screenSize / 4 - guiSize / 4) && oppositeAnchor == Anchor.MID) { - anchor.set(Anchor.GUI_MAX); - } else { - anchor.set(Anchor.MAX); - } - } else { - anchor.set(Anchor.MID); - } - - if (centerCoord - elementSize / 2 < 0) centerCoord = elementSize / 2; - if (centerCoord + elementSize / 2 > screenSize) centerCoord = screenSize - elementSize / 2; - - Anchor newAnchor = anchor.get(); - coord.set(Math.round( - centerCoord - (elementSize * (newAnchor.elementMult + 0.5f)) - screenSize * newAnchor.screenMult - - guiSize * newAnchor.guiMult)); - } - - public int resolveX(ScaledResolution scaledResolution, int sizeX) { - return resolve(x, anchorX, (int) Math.ceil(sizeX * scaleX), scaledResolution.getScaledWidth(), 176); - } - - public int resolveY(ScaledResolution scaledResolution, int sizeY) { - return resolve(y, anchorY, (int) Math.ceil(sizeY * scaleY), scaledResolution.getScaledHeight(), 166); - } - - private int resolve(int coord, Anchor anchor, int elementSize, int screenSize, int guiSize) { - return Math.round( - screenSize * anchor.screenMult + elementSize * anchor.elementMult + guiSize * anchor.guiMult + coord); - } - - public void setScaleX(float scaleX) { - if (allowResize) { - this.scaleX = scaleX; - } - } - - public void setScaleY(float scaleY) { - if (allowResize) { - this.scaleY = scaleY; - } - } - - public float getScaleX() { - return scaleX; - } - - public float getScaleY() { - return scaleY; - } - - public void setPinned(boolean pinned) { - if (allowPinToggle) { - this.pinned = pinned; - } - } - - public boolean isPinned() { - return pinned; - } - - public Anchor getAnchorX() { - return anchorX; - } - - public Anchor getAnchorY() { - return anchorY; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/Category.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/Category.java deleted file mode 100644 index 5f9ce4b14..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/Category.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface Category { - String name(); - - String desc(); -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigAccordionId.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigAccordionId.java deleted file mode 100644 index 8948238c8..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigAccordionId.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface ConfigAccordionId { - int id(); -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorAccordion.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorAccordion.java deleted file mode 100644 index 36d73ad2c..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorAccordion.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface ConfigEditorAccordion { - int id(); -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorBoolean.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorBoolean.java deleted file mode 100644 index aae6e4063..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorBoolean.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface ConfigEditorBoolean { - String runnableId() default ""; -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorButton.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorButton.java deleted file mode 100644 index 439844616..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorButton.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface ConfigEditorButton { - String runnableId(); - - String buttonText() default ""; -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorColour.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorColour.java deleted file mode 100644 index 3811cf9df..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorColour.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface ConfigEditorColour {} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorDraggableList.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorDraggableList.java deleted file mode 100644 index f4870a2de..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorDraggableList.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface ConfigEditorDraggableList { - String[] exampleText(); - - boolean allowDeleting() default true; -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorDropdown.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorDropdown.java deleted file mode 100644 index 383a65332..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorDropdown.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface ConfigEditorDropdown { - String[] values(); - - int initialIndex() default 0; -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorFSR.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorFSR.java deleted file mode 100644 index ab3932a13..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorFSR.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface ConfigEditorFSR { - String runnableId(); - - String buttonText() default ""; -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorKeybind.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorKeybind.java deleted file mode 100644 index 6fff86daa..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorKeybind.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface ConfigEditorKeybind { - int defaultKey(); -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorSlider.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorSlider.java deleted file mode 100644 index ad49493b7..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorSlider.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface ConfigEditorSlider { - float minValue(); - - float maxValue(); - - float minStep(); -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorText.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorText.java deleted file mode 100644 index bf4b0283b..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorText.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface ConfigEditorText {} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigOption.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigOption.java deleted file mode 100644 index a37265685..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigOption.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface ConfigOption { - String name(); - - String desc(); - - int subcategoryId() default -1; -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditor.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditor.java deleted file mode 100644 index 2c0d1a0c7..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditor.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.gui; - -import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; -import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.GlStateManager; - -public abstract class GuiOptionEditor { - protected final ConfigProcessor.ProcessedOption option; - private static final int HEIGHT = 45; - - public GuiOptionEditor(ConfigProcessor.ProcessedOption option) { - this.option = option; - } - - public void render(int x, int y, int width) { - int height = getHeight(); - - FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; - GuiRenderUtils.drawFloatingRectDark(x, y, width, height, true); - TextRenderUtils.drawStringCenteredScaledMaxWidth(option.name, - fr, x + width / 6, y + 13, true, width / 3 - 10, 0xc0c0c0 - ); - - int maxLines = 5; - float scale = 1; - int lineCount = fr.listFormattedStringToWidth(option.desc, width * 2 / 3 - 10).size(); - - if (lineCount <= 0) return; - - float paraHeight = 9 * lineCount - 1; - - while (paraHeight >= HEIGHT - 10) { - scale -= 1 / 8f; - lineCount = fr.listFormattedStringToWidth(option.desc, (int) (width * 2 / 3 / scale - 10)).size(); - paraHeight = (int) (9 * scale * lineCount - 1 * scale); - } - - GlStateManager.pushMatrix(); - GlStateManager.translate(x + 5 + width / 3f, y + HEIGHT / 2f - paraHeight / 2, 0); - GlStateManager.scale(scale, scale, 1); - - fr.drawSplitString(option.desc, 0, 0, (int) (width * 2 / 3 / scale - 10), 0xc0c0c0); - - GlStateManager.popMatrix(); - } - - public int getHeight() { - return HEIGHT; - } - - public abstract boolean mouseInput(int x, int y, int width, int mouseX, int mouseY); - - public abstract boolean keyboardInput(); - - public boolean mouseInputOverlay(int x, int y, int width, int mouseX, int mouseY) { - return false; - } - - public void renderOverlay(int x, int y, int width) {} -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorAccordion.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorAccordion.java deleted file mode 100644 index e99c7fd8c..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorAccordion.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.gui; - -import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; -import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import org.lwjgl.input.Mouse; -import org.lwjgl.opengl.GL11; - -public class GuiOptionEditorAccordion extends GuiOptionEditor { - private final int accordionId; - private boolean accordionToggled; - - public GuiOptionEditorAccordion(ConfigProcessor.ProcessedOption option, int accordionId) { - super(option); - this.accordionToggled = (boolean) option.get(); - this.accordionId = accordionId; - } - - @Override - public int getHeight() { - return 20; - } - - public int getAccordionId() { - return accordionId; - } - - public boolean getToggled() { - return accordionToggled; - } - - @Override - public void render(int x, int y, int width) { - int height = getHeight(); - GuiRenderUtils.drawFloatingRectDark(x, y, width, height, true); - - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - GlStateManager.enableBlend(); - GlStateManager.disableTexture2D(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - GlStateManager.color(1, 1, 1, 1); - worldrenderer.begin(GL11.GL_TRIANGLES, DefaultVertexFormats.POSITION); - if (accordionToggled) { - worldrenderer.pos((double) x + 6, (double) y + 6, 0.0D).endVertex(); - worldrenderer.pos((double) x + 9.75f, (double) y + 13.5f, 0.0D).endVertex(); - worldrenderer.pos((double) x + 13.5f, (double) y + 6, 0.0D).endVertex(); - } else { - worldrenderer.pos((double) x + 6, (double) y + 13.5f, 0.0D).endVertex(); - worldrenderer.pos((double) x + 13.5f, (double) y + 9.75f, 0.0D).endVertex(); - worldrenderer.pos((double) x + 6, (double) y + 6, 0.0D).endVertex(); - } - tessellator.draw(); - GlStateManager.enableTexture2D(); - GlStateManager.disableBlend(); - - TextRenderUtils.drawStringScaledMaxWidth(option.name, Minecraft.getMinecraft().fontRendererObj, - x + 18, y + 6, false, width - 10, 0xc0c0c0 - ); - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - if (Mouse.getEventButtonState() && mouseX > x && mouseX < x + width && - mouseY > y && mouseY < y + getHeight()) { - accordionToggled = !accordionToggled; - return true; - } - - return false; - } - - @Override - public boolean keyboardInput() { - return false; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorBoolean.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorBoolean.java deleted file mode 100644 index bb2464ee3..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorBoolean.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.gui; - -import at.hannibal2.skyhanni.config.Features; -import at.hannibal2.skyhanni.config.core.GuiElementBoolean; -import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; - -public class GuiOptionEditorBoolean extends GuiOptionEditor { - - private final GuiElementBoolean bool; - private final Features config; - private final String runnableId; - - public GuiOptionEditorBoolean( - ConfigProcessor.ProcessedOption option, - String runnableId, - Features config - ) { - super(option); - this.config = config; - this.runnableId = runnableId; - bool = new GuiElementBoolean(0, 0, (boolean) option.get(), 10, (value) -> onUpdate(option, value)); - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - int height = getHeight(); - - bool.x = x + width / 6 - 24; - bool.y = y + height - 7 - 14; - bool.render(); - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - int height = getHeight(); - bool.x = x + width / 6 - 24; - bool.y = y + height - 7 - 14; - return bool.mouseInput(mouseX, mouseY); - } - - @Override - public boolean keyboardInput() { - return false; - } - - private void onUpdate(ConfigProcessor.ProcessedOption option, boolean value) { - if (option.set(value)) { - config.executeRunnable(runnableId); - } - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorButton.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorButton.java deleted file mode 100644 index fc9005e7c..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorButton.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.gui; - -import at.hannibal2.skyhanni.config.Features; -import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; -import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import org.lwjgl.input.Mouse; - -import static at.hannibal2.skyhanni.config.GuiTextures.button_tex; - -public class GuiOptionEditorButton extends GuiOptionEditor { - private final String runnableId; - private String buttonText; - private final Features config; - - public GuiOptionEditorButton( - ConfigProcessor.ProcessedOption option, - String runnableId, - String buttonText, - Features config - ) { - super(option); - this.runnableId = runnableId; - this.config = config; - - this.buttonText = buttonText; - if (this.buttonText != null && this.buttonText.isEmpty()) this.buttonText = null; - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - - int height = getHeight(); - - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(button_tex); - GuiRenderUtils.drawTexturedRect(x + width / 6 - 24, y + height - 7 - 14, 48, 16); - - if (buttonText != null) { - TextRenderUtils.drawStringCenteredScaledMaxWidth(buttonText, Minecraft.getMinecraft().fontRendererObj, - x + width / 6, y + height - 7 - 6, - false, 44, 0xFF303030 - ); - } - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - if (Mouse.getEventButtonState()) { - int height = getHeight(); - if (mouseX > x + width / 6 - 24 && mouseX < x + width / 6 + 24 && - mouseY > y + height - 7 - 14 && mouseY < y + height - 7 + 2) { - config.executeRunnable(runnableId); - return true; - } - } - - return false; - } - - @Override - public boolean keyboardInput() { - return false; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorColour.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorColour.java deleted file mode 100644 index 721b85176..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorColour.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.gui; - -import at.hannibal2.skyhanni.config.core.ChromaColour; -import at.hannibal2.skyhanni.config.core.GuiElementColour; -import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; -import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import org.lwjgl.input.Mouse; - -import static at.hannibal2.skyhanni.config.GuiTextures.button_white; - -public class GuiOptionEditorColour extends GuiOptionEditor { - private String chromaColour; - private GuiElementColour colourElement = null; - - public GuiOptionEditorColour(ConfigProcessor.ProcessedOption option) { - super(option); - - this.chromaColour = (String) option.get(); - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - int height = getHeight(); - - int argb = ChromaColour.specialToChromaRGB(chromaColour); - int r = (argb >> 16) & 0xFF; - int g = (argb >> 8) & 0xFF; - int b = argb & 0xFF; - GlStateManager.color(r / 255f, g / 255f, b / 255f, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(button_white); - GuiRenderUtils.drawTexturedRect(x + width / 6 - 24, y + height - 7 - 14, 48, 16); - } - - @Override - public void renderOverlay(int x, int y, int width) { - if (colourElement != null) { - colourElement.render(); - } - } - - @Override - public boolean mouseInputOverlay(int x, int y, int width, int mouseX, int mouseY) { - return colourElement != null && colourElement.mouseInput(mouseX, mouseY); - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - int height = getHeight(); - - if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0 && - mouseX > x + width / 6 - 24 && mouseX < x + width / 6 + 24 && - mouseY > y + height - 7 - 14 && mouseY < y + height - 7 + 2) { - colourElement = new GuiElementColour(mouseX, mouseY, (String) option.get(), (val) -> { - option.set(val); - chromaColour = val; - }, () -> colourElement = null); - } - - return false; - } - - @Override - public boolean keyboardInput() { - return colourElement != null && colourElement.keyboardInput(); - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorDraggableList.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorDraggableList.java deleted file mode 100644 index fb2405ce9..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorDraggableList.java +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.gui; - -import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; -import at.hannibal2.skyhanni.config.core.util.lerp.LerpUtils; -import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils; -import at.hannibal2.skyhanni.utils.RenderUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import org.lwjgl.input.Mouse; -import org.lwjgl.opengl.GL11; - -import java.util.ArrayList; -import java.util.List; - -import static at.hannibal2.skyhanni.config.GuiTextures.button_tex; - -public class GuiOptionEditorDraggableList extends GuiOptionEditor { - private static final ResourceLocation DELETE = new ResourceLocation("notenoughupdates:core/delete.png"); - - private final String[] exampleText; - private final boolean enableDeleting; - private final List<Integer> activeText; - private int currentDragging = -1; - private int dragStartIndex = -1; - - private long trashHoverTime = -1; - - private int dragOffsetX = -1; - private int dragOffsetY = -1; - - private boolean dropdownOpen = false; - - public GuiOptionEditorDraggableList( - ConfigProcessor.ProcessedOption option, - String[] exampleText, - boolean disableDeleting - ) { - super(option); - - this.enableDeleting = disableDeleting; - this.exampleText = exampleText; - this.activeText = (List<Integer>) option.get(); - } - - @Override - public int getHeight() { - int height = super.getHeight() + 13; - - for (int strIndex : activeText) { - String str = exampleText[strIndex]; - height += 10 * str.split("\n").length; - } - - return height; - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - - int height = getHeight(); - - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(button_tex); - GuiRenderUtils.drawTexturedRect(x + width / 6 - 24, y + 45 - 7 - 14, 48, 16); - - TextRenderUtils.drawStringCenteredScaledMaxWidth("Add", Minecraft.getMinecraft().fontRendererObj, - x + width / 6, y + 45 - 7 - 6, - false, 44, 0xFF303030 - ); - - long currentTime = System.currentTimeMillis(); - if (trashHoverTime < 0) { - float greenBlue = LerpUtils.clampZeroOne((currentTime + trashHoverTime) / 250f); - GlStateManager.color(1, greenBlue, greenBlue, 1); - } else { - float greenBlue = LerpUtils.clampZeroOne((250 + trashHoverTime - currentTime) / 250f); - GlStateManager.color(1, greenBlue, greenBlue, 1); - } - - if (enableDeleting) { - Minecraft.getMinecraft().getTextureManager().bindTexture(DELETE); - GuiRenderUtils.drawTexturedRect(x + width / 6 + 27, y + 45 - 7 - 13, 11, 14, GL11.GL_NEAREST); - } - - Gui.drawRect(x + 5, y + 45, x + width - 5, y + height - 5, 0xffdddddd); - Gui.drawRect(x + 6, y + 46, x + width - 6, y + height - 6, 0xff000000); - - int i = 0; - int yOff = 0; - for (int strIndex : activeText) { - String str = exampleText[strIndex]; - - String[] multilines = str.split("\n"); - - int ySize = multilines.length * 10; - - if (i++ != dragStartIndex) { - for (int multilineIndex = 0; multilineIndex < multilines.length; multilineIndex++) { - String line = multilines[multilineIndex]; - RenderUtils.INSTANCE.drawStringScaledMaxWidth(line + EnumChatFormatting.RESET, Minecraft.getMinecraft().fontRendererObj, - x + 20, y + 50 + yOff + multilineIndex * 10, true, width - 20, 0xffffffff - ); - } - Minecraft.getMinecraft().fontRendererObj.drawString( - "\u2261", - x + 10, - y + 50 + yOff + ySize / 2 - 4, - 0xffffff, - true - ); - } - - yOff += ySize; - } - } - - @Override - public void renderOverlay(int x, int y, int width) { - super.renderOverlay(x, y, width); - - if (dropdownOpen) { - List<Integer> remaining = new ArrayList<>(); - for (int i = 0; i < exampleText.length; i++) { - remaining.add(i); - } - remaining.removeAll(activeText); - - FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; - int dropdownWidth = Math.min(width / 2 - 10, 150); - int left = dragOffsetX; - int top = dragOffsetY; - - int dropdownHeight = -1 + 12 * remaining.size(); - - int main = 0xff202026; - int outline = 0xff404046; - Gui.drawRect(left, top, left + 1, top + dropdownHeight, outline); //Left - Gui.drawRect(left + 1, top, left + dropdownWidth, top + 1, outline); //Top - Gui.drawRect(left + dropdownWidth - 1, top + 1, left + dropdownWidth, top + dropdownHeight, outline); //Right - Gui.drawRect( - left + 1, - top + dropdownHeight - 1, - left + dropdownWidth - 1, - top + dropdownHeight, - outline - ); //Bottom - Gui.drawRect(left + 1, top + 1, left + dropdownWidth - 1, top + dropdownHeight - 1, main); //Middle - - int dropdownY = -1; - for (int strIndex : remaining) { - String str = exampleText[strIndex]; - if (str.isEmpty()) { - str = "<NONE>"; - } - TextRenderUtils.drawStringScaledMaxWidth(str.replaceAll("(\n.*)+", " ..."), - fr, left + 3, top + 3 + dropdownY, false, dropdownWidth - 6, 0xffa0a0a0 - ); - dropdownY += 12; - } - } else if (currentDragging >= 0) { - int opacity = 0x80; - long currentTime = System.currentTimeMillis(); - if (trashHoverTime < 0) { - float greenBlue = LerpUtils.clampZeroOne((currentTime + trashHoverTime) / 250f); - opacity = (int) (opacity * greenBlue); - } else { - float greenBlue = LerpUtils.clampZeroOne((250 + trashHoverTime - currentTime) / 250f); - opacity = (int) (opacity * greenBlue); - } - - if (opacity < 20) return; - - ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - int mouseX = Mouse.getX() * scaledResolution.getScaledWidth() / Minecraft.getMinecraft().displayWidth; - int mouseY = scaledResolution.getScaledHeight() - - Mouse.getY() * scaledResolution.getScaledHeight() / Minecraft.getMinecraft().displayHeight - 1; - - String str = exampleText[currentDragging]; - - String[] multilines = str.split("\n"); - - GlStateManager.enableBlend(); - for (int multilineIndex = 0; multilineIndex < multilines.length; multilineIndex++) { - String line = multilines[multilineIndex]; - RenderUtils.INSTANCE.drawStringScaledMaxWidth( - line + EnumChatFormatting.RESET, - Minecraft.getMinecraft().fontRendererObj, - dragOffsetX + mouseX + 10, - dragOffsetY + mouseY + multilineIndex * 10, - true, - width - 20, - 0xffffff | (opacity << 24) - ); - } - - int ySize = multilines.length * 10; - - Minecraft.getMinecraft().fontRendererObj.drawString("\u2261", - dragOffsetX + mouseX, - dragOffsetY + mouseY + ySize / 2 - 4, 0xffffff, true - ); - } - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - if (!Mouse.getEventButtonState() && !dropdownOpen && - dragStartIndex >= 0 && Mouse.getEventButton() == 0 && - mouseX >= x + width / 6 + 27 - 3 && mouseX <= x + width / 6 + 27 + 11 + 3 && - mouseY >= y + 45 - 7 - 13 - 3 && mouseY <= y + 45 - 7 - 13 + 14 + 3) { - if (enableDeleting) { - activeText.remove(dragStartIndex); - } - currentDragging = -1; - dragStartIndex = -1; - return false; - } - - if (!Mouse.isButtonDown(0) || dropdownOpen) { - currentDragging = -1; - dragStartIndex = -1; - if (trashHoverTime > 0 && enableDeleting) trashHoverTime = -System.currentTimeMillis(); - } else if (currentDragging >= 0 && - mouseX >= x + width / 6 + 27 - 3 && mouseX <= x + width / 6 + 27 + 11 + 3 && - mouseY >= y + 45 - 7 - 13 - 3 && mouseY <= y + 45 - 7 - 13 + 14 + 3) { - if (trashHoverTime < 0 && enableDeleting) trashHoverTime = System.currentTimeMillis(); - } else { - if (trashHoverTime > 0 && enableDeleting) trashHoverTime = -System.currentTimeMillis(); - } - - if (Mouse.getEventButtonState()) { - int height = getHeight(); - - if (dropdownOpen) { - List<Integer> remaining = new ArrayList<>(); - for (int i = 0; i < exampleText.length; i++) { - remaining.add(i); - } - remaining.removeAll(activeText); - - int dropdownWidth = Math.min(width / 2 - 10, 150); - int left = dragOffsetX; - int top = dragOffsetY; - - int dropdownHeight = -1 + 12 * remaining.size(); - - if (mouseX > left && mouseX < left + dropdownWidth && - mouseY > top && mouseY < top + dropdownHeight) { - int dropdownY = -1; - for (int strIndex : remaining) { - if (mouseY < top + dropdownY + 12) { - activeText.add(0, strIndex); - if (remaining.size() == 1) dropdownOpen = false; - return true; - } - - dropdownY += 12; - } - } - - dropdownOpen = false; - return true; - } - - if (activeText.size() < exampleText.length && - mouseX > x + width / 6 - 24 && mouseX < x + width / 6 + 24 && - mouseY > y + 45 - 7 - 14 && mouseY < y + 45 - 7 + 2) { - dropdownOpen = !dropdownOpen; - dragOffsetX = mouseX; - dragOffsetY = mouseY; - return true; - } - - if (Mouse.getEventButton() == 0 && - mouseX > x + 5 && mouseX < x + width - 5 && - mouseY > y + 45 && mouseY < y + height - 6) { - int yOff = 0; - int i = 0; - for (int strIndex : activeText) { - int ySize = 10 * exampleText[strIndex].split("\n").length; - if (mouseY < y + 50 + yOff + ySize) { - dragOffsetX = x + 10 - mouseX; - dragOffsetY = y + 50 + yOff - mouseY; - - currentDragging = strIndex; - dragStartIndex = i; - break; - } - yOff += ySize; - i++; - } - } - } else if (Mouse.getEventButton() == -1 && currentDragging >= 0) { - int yOff = 0; - int i = 0; - for (int strIndex : activeText) { - if (dragOffsetY + mouseY + 4 < y + 50 + yOff + 10) { - activeText.remove(dragStartIndex); - activeText.add(i, currentDragging); - - dragStartIndex = i; - break; - } - yOff += 10 * exampleText[strIndex].split("\n").length; - i++; - } - } - - return false; - } - - @Override - public boolean keyboardInput() { - return false; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorDropdown.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorDropdown.java deleted file mode 100644 index f64e5d708..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorDropdown.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.gui; - -import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; -import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.renderer.GlStateManager; -import org.lwjgl.input.Mouse; -import org.lwjgl.opengl.GL11; - -public class GuiOptionEditorDropdown extends GuiOptionEditor { - private final String[] values; - private final boolean useOrdinal; - private int selected; - private boolean open = false; - - public GuiOptionEditorDropdown( - ConfigProcessor.ProcessedOption option, - String[] values, - int selected, - boolean useOrdinal - ) { - super(option); - if (selected >= values.length) selected = values.length; - this.values = values; - this.selected = selected; - this.useOrdinal = useOrdinal; - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - if (!open) { - int height = getHeight(); - - FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; - int dropdownWidth = Math.min(width / 3 - 10, 80); - int left = x + width / 6 - dropdownWidth / 2; - int top = y + height - 7 - 14; - - String selectedString = " - Select - "; - if (selected >= 0 && selected < values.length) { - selectedString = values[selected]; - } - - GuiRenderUtils.drawFloatingRectDark(left, top, dropdownWidth, 14, false); - TextRenderUtils.drawStringScaled( - "\u25BC", - fr, - left + dropdownWidth - 10, - y + height - 7 - 15, - false, - 0xffa0a0a0, - 2 - ); - - TextRenderUtils.drawStringScaledMaxWidth(selectedString, fr, left + 3, top + 3, false, - dropdownWidth - 16, 0xffa0a0a0 - ); - } - } - - @Override - public void renderOverlay(int x, int y, int width) { - if (open) { - String selectedString = " - Select - "; - if (selected >= 0 && selected < values.length) { - selectedString = values[selected]; - } - - int height = getHeight(); - - FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; - int dropdownWidth = Math.min(width / 3 - 10, 80); - int left = x + width / 6 - dropdownWidth / 2; - int top = y + height - 7 - 14; - - int dropdownHeight = 13 + 12 * values.length; - - int main = 0xff202026; - int blue = 0xff2355ad; - - GlStateManager.pushMatrix(); - GL11.glTranslated(0, 0, 100); - Gui.drawRect(left, top, left + 1, top + dropdownHeight, blue); //Left - Gui.drawRect(left + 1, top, left + dropdownWidth, top + 1, blue); //Top - Gui.drawRect(left + dropdownWidth - 1, top + 1, left + dropdownWidth, top + dropdownHeight, blue); //Right - Gui.drawRect(left + 1, top + dropdownHeight - 1, left + dropdownWidth - 1, top + dropdownHeight, blue); //Bottom - Gui.drawRect(left + 1, top + 1, left + dropdownWidth - 1, top + dropdownHeight - 1, main); //Middle - - Gui.drawRect(left + 1, top + 14 - 1, left + dropdownWidth - 1, top + 14, blue); //Bar - int dropdownY = 13; - for (String option : values) { - if (option.isEmpty()) { - option = "<NONE>"; - } - TextRenderUtils.drawStringScaledMaxWidth( - option, - fr, - left + 3, - top + 3 + dropdownY, - false, - dropdownWidth - 6, - 0xffa0a0a0 - ); - dropdownY += 12; - } - - TextRenderUtils.drawStringScaled( - "\u25B2", - fr, - left + dropdownWidth - 10, - y + height - 7 - 15, - false, - 0xffa0a0a0, - 2 - ); - - TextRenderUtils.drawStringScaledMaxWidth(selectedString, fr, left + 3, top + 3, false, - dropdownWidth - 16, 0xffa0a0a0 - ); - GlStateManager.popMatrix(); - } - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - int height = getHeight(); - - int left = x + width / 6 - 40; - int top = y + height - 7 - 14; - - if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { - if (mouseX >= left && mouseX <= left + 80 && - mouseY >= top && mouseY <= top + 14) { - open = !open; - return true; - } - } - - return false; - } - - @Override - public boolean mouseInputOverlay(int x, int y, int width, int mouseX, int mouseY) { - int height = getHeight(); - - int left = x + width / 6 - 40; - int top = y + height - 7 - 14; - - if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { - if (!(mouseX >= left && mouseX <= left + 80 && - mouseY >= top && mouseY <= top + 14) && open) { - open = false; - if (mouseX >= left && mouseX <= left + 80) { - int dropdownY = 13; - for (int ordinal = 0; ordinal < values.length; ordinal++) { - if (mouseY >= top + 3 + dropdownY && mouseY <= top + 3 + dropdownY + 12) { - selected = ordinal; - if (useOrdinal) { - option.set(selected); - } else { - option.set(values[selected]); - } - return true; - } - dropdownY += 12; - } - } - return true; - } - } - - return false; - } - - @Override - public boolean keyboardInput() { - return false; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorFSR.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorFSR.java deleted file mode 100644 index 3ab485780..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorFSR.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.gui; - -import at.hannibal2.skyhanni.config.Features; -import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; -import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import org.lwjgl.input.Mouse; - -import static at.hannibal2.skyhanni.config.GuiTextures.button_fsr; - -public class GuiOptionEditorFSR extends GuiOptionEditor { - private final String runnableId; - private String buttonText; - private final Features config; - - public GuiOptionEditorFSR(ConfigProcessor.ProcessedOption option, String runnableId, String buttonText, Features config) { - super(option); - this.runnableId = runnableId; - this.config = config; - - this.buttonText = buttonText; - if (this.buttonText != null && this.buttonText.isEmpty()) this.buttonText = null; - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - - int height = getHeight(); - - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(button_fsr); - GuiRenderUtils.drawTexturedRect(x + width / 6 - 24, y + height - 7 - 14, 48, 16); - - if (buttonText != null) { - TextRenderUtils.drawStringCenteredScaledMaxWidth(buttonText, Minecraft.getMinecraft().fontRendererObj, - x + width / 6, y + height - 7 - 6, - false, 44, 0xFF303030 - ); - } - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - if (Mouse.getEventButtonState()) { - int height = getHeight(); - if (mouseX > x + width / 6 - 24 && mouseX < x + width / 6 + 24 && - mouseY > y + height - 7 - 14 && mouseY < y + height - 7 + 2) { - config.executeRunnable(runnableId); - return true; - } - } - - return false; - } - - @Override - public boolean keyboardInput() { - return false; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorKeybind.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorKeybind.java deleted file mode 100644 index 4fa0ee822..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorKeybind.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.gui; - -import at.hannibal2.skyhanni.config.core.config.KeybindHelper; -import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; -import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.ResourceLocation; -import org.lwjgl.input.Keyboard; -import org.lwjgl.input.Mouse; -import org.lwjgl.opengl.GL11; - -import static at.hannibal2.skyhanni.config.GuiTextures.button_tex; - -public class GuiOptionEditorKeybind extends GuiOptionEditor { - private static final ResourceLocation RESET = new ResourceLocation("notenoughupdates:itemcustomize/reset.png"); - - private int keyCode; - private final int defaultKeyCode; - private boolean editingKeycode; - - public GuiOptionEditorKeybind(ConfigProcessor.ProcessedOption option, int keyCode, int defaultKeyCode) { - super(option); - this.keyCode = keyCode; - this.defaultKeyCode = defaultKeyCode; - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - - int height = getHeight(); - - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(button_tex); - GuiRenderUtils.drawTexturedRect(x + width / 6 - 24, y + height - 7 - 14, 48, 16); - - String keyName = KeybindHelper.getKeyName(keyCode); - String text = editingKeycode ? "> " + keyName + " <" : keyName; - TextRenderUtils.drawStringCenteredScaledMaxWidth(text, - Minecraft.getMinecraft().fontRendererObj, - x + width / 6, y + height - 7 - 6, - false, 40, 0xFF303030 - ); - - Minecraft.getMinecraft().getTextureManager().bindTexture(RESET); - GlStateManager.color(1, 1, 1, 1); - GuiRenderUtils.drawTexturedRect(x + width / 6 - 24 + 48 + 3, y + height - 7 - 14 + 3, 10, 11, GL11.GL_NEAREST); - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - if (Mouse.getEventButtonState() && Mouse.getEventButton() != -1 && editingKeycode) { - editingKeycode = false; - keyCode = Mouse.getEventButton() - 100; - option.set(keyCode); - return true; - } - - if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { - int height = getHeight(); - if (mouseX > x + width / 6 - 24 && mouseX < x + width / 6 + 24 && - mouseY > y + height - 7 - 14 && mouseY < y + height - 7 + 2) { - editingKeycode = true; - return true; - } - if (mouseX > x + width / 6 - 24 + 48 + 3 && mouseX < x + width / 6 - 24 + 48 + 13 && - mouseY > y + height - 7 - 14 + 3 && mouseY < y + height - 7 - 14 + 3 + 11) { - keyCode = defaultKeyCode; - option.set(keyCode); - return true; - } - } - - return false; - } - - @Override - public boolean keyboardInput() { - if (editingKeycode) { - editingKeycode = false; - if (Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) { - keyCode = 0; - } else if (Keyboard.getEventKey() != 0) { - keyCode = Keyboard.getEventKey(); - } - if (keyCode > 256) keyCode = 0; - option.set(keyCode); - return true; - } - return false; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorSlider.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorSlider.java deleted file mode 100644 index 4441bced9..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorSlider.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.gui; - -import at.hannibal2.skyhanni.config.core.GuiElementTextField; -import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; -import at.hannibal2.skyhanni.config.core.util.GuiElementSlider; -import net.minecraft.client.Minecraft; -import org.lwjgl.input.Keyboard; -import org.lwjgl.input.Mouse; - -public class GuiOptionEditorSlider extends GuiOptionEditor { - private final GuiElementSlider slider; - private final GuiElementTextField textField; - - public GuiOptionEditorSlider(ConfigProcessor.ProcessedOption option, float minValue, float maxValue, float minStep) { - super(option); - if (minStep < 0) minStep = 0.01f; - - float floatVal = ((Number) option.get()).floatValue(); - { - String strVal; - if (floatVal % 1 == 0) { - strVal = Integer.toString((int) floatVal); - } else { - strVal = Float.toString(floatVal); - } - textField = new GuiElementTextField( - strVal, - GuiElementTextField.NO_SPACE | GuiElementTextField.NUM_ONLY | GuiElementTextField.SCALE_TEXT - ); - } - - slider = new GuiElementSlider(0, 0, 80, minValue, maxValue, minStep, floatVal, (val) -> { - option.set(val); - - String strVal; - if (val % 1 == 0) { - strVal = Integer.toString(val.intValue()); - } else { - strVal = Float.toString(val); - strVal = strVal.replaceAll("(\\.\\d\\d\\d)(?:\\d)+", "$1"); - strVal = strVal.replaceAll("0+$", ""); - } - textField.setText(strVal); - }); - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - int height = getHeight(); - - int fullWidth = Math.min(width / 3 - 10, 80); - int sliderWidth = (fullWidth - 5) * 3 / 4; - int textFieldWidth = (fullWidth - 5) / 4; - - slider.x = x + width / 6 - fullWidth / 2; - slider.y = y + height - 7 - 14; - slider.width = sliderWidth; - slider.render(); - - if (textField.getFocus()) { - textField.setOptions(GuiElementTextField.NO_SPACE | GuiElementTextField.NUM_ONLY); - textField.setSize( - Minecraft.getMinecraft().fontRendererObj.getStringWidth(textField.getText()) + 10, - 16 - ); - } else { - textField.setSize(textFieldWidth, 16); - textField.setOptions( - GuiElementTextField.NO_SPACE | GuiElementTextField.NUM_ONLY | GuiElementTextField.SCALE_TEXT); - } - - textField.render(x + width / 6 - fullWidth / 2 + sliderWidth + 5, y + height - 7 - 14); - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - int height = getHeight(); - - int fullWidth = Math.min(width / 3 - 10, 80); - int sliderWidth = (fullWidth - 5) * 3 / 4; - int textFieldWidth = (fullWidth - 5) / 4; - - slider.x = x + width / 6 - fullWidth / 2; - slider.y = y + height - 7 - 14; - slider.width = sliderWidth; - if (slider.mouseInput(mouseX, mouseY)) { - textField.unfocus(); - return true; - } - - if (textField.getFocus()) { - textFieldWidth = Minecraft.getMinecraft().fontRendererObj.getStringWidth(textField.getText()) + 10; - } - - int textFieldX = x + width / 6 - fullWidth / 2 + sliderWidth + 5; - int textFieldY = y + height - 7 - 14; - textField.setSize(textFieldWidth, 16); - - if (Mouse.getEventButtonState() && (Mouse.getEventButton() == 0 || Mouse.getEventButton() == 1)) { - if (mouseX > textFieldX && mouseX < textFieldX + textFieldWidth && - mouseY > textFieldY && mouseY < textFieldY + 16) { - textField.mouseClicked(mouseX, mouseY, Mouse.getEventButton()); - return true; - } - textField.unfocus(); - } - - return false; - } - - @Override - public boolean keyboardInput() { - if (Keyboard.getEventKeyState() && textField.getFocus()) { - textField.keyTyped(Keyboard.getEventCharacter(), Keyboard.getEventKey()); - - try { - textField.setCustomBorderColour(0xffffffff); - float f = Float.parseFloat(textField.getText()); - if (option.set(f)) { - slider.setValue(f); - } else { - textField.setCustomBorderColour(0xff0000ff); - } - } catch (Exception e) { - textField.setCustomBorderColour(0xffff0000); - } - - return true; - } - return false; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorText.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorText.java deleted file mode 100644 index 98274ed49..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorText.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.gui; - -import at.hannibal2.skyhanni.config.core.GuiElementTextField; -import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; -import net.minecraft.client.Minecraft; -import org.lwjgl.input.Keyboard; -import org.lwjgl.input.Mouse; - -public class GuiOptionEditorText extends GuiOptionEditor { - private final GuiElementTextField textField; - - public GuiOptionEditorText(ConfigProcessor.ProcessedOption option) { - super(option); - - textField = new GuiElementTextField((String) option.get(), 0); - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - int height = getHeight(); - - int fullWidth = Math.min(width / 3 - 10, 80); - - int textFieldX = x + width / 6 - fullWidth / 2; - if (textField.getFocus()) { - fullWidth = Math.max( - fullWidth, - Minecraft.getMinecraft().fontRendererObj.getStringWidth(textField.getText()) + 10 - ); - } - - textField.setSize(fullWidth, 16); - - textField.render(textFieldX, y + height - 7 - 14); - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - int height = getHeight(); - - int fullWidth = Math.min(width / 3 - 10, 80); - - int textFieldX = x + width / 6 - fullWidth / 2; - - if (textField.getFocus()) { - fullWidth = Math.max( - fullWidth, - Minecraft.getMinecraft().fontRendererObj.getStringWidth(textField.getText()) + 10 - ); - } - - int textFieldY = y + height - 7 - 14; - textField.setSize(fullWidth, 16); - - if (Mouse.getEventButtonState() && (Mouse.getEventButton() == 0 || Mouse.getEventButton() == 1)) { - if (mouseX > textFieldX && mouseX < textFieldX + fullWidth && - mouseY > textFieldY && mouseY < textFieldY + 16) { - textField.mouseClicked(mouseX, mouseY, Mouse.getEventButton()); - return true; - } - textField.unfocus(); - } - - return false; - } - - @Override - public boolean keyboardInput() { - if (Keyboard.getEventKeyState() && textField.getFocus()) { - textField.keyTyped(Keyboard.getEventCharacter(), Keyboard.getEventKey()); - - try { - textField.setCustomBorderColour(0xffffffff); - option.set(textField.getText()); - } catch (Exception e) { - textField.setCustomBorderColour(0xffff0000); - } - - return true; - } - return false; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/struct/ConfigProcessor.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/struct/ConfigProcessor.java deleted file mode 100644 index 5e25b55c0..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/struct/ConfigProcessor.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.config.struct; - -import at.hannibal2.skyhanni.config.Features; -import at.hannibal2.skyhanni.config.core.config.annotations.*; -import at.hannibal2.skyhanni.config.core.config.gui.*; -import com.google.gson.annotations.Expose; - -import java.lang.reflect.Field; -import java.util.LinkedHashMap; -import java.util.List; - -public class ConfigProcessor { - public static class ProcessedCategory { - public final String name; - public final String desc; - public final LinkedHashMap<String, ProcessedOption> options = new LinkedHashMap<>(); - - public ProcessedCategory(String name, String desc) { - this.name = name; - this.desc = desc; - } - } - - public static class ProcessedOption { - public final String name; - public final String desc; - public final int subcategoryId; - public GuiOptionEditor editor; - - public int accordionId = -1; - - private final Field field; - private final Object container; - - public ProcessedOption(String name, String desc, int subcategoryId, Field field, Object container) { - this.name = name; - this.desc = desc; - this.subcategoryId = subcategoryId; - - this.field = field; - this.container = container; - } - - public Object get() { - try { - return field.get(container); - } catch (Exception e) { - return null; - } - } - - public boolean set(Object value) { - try { - if (field.getType() == int.class && value instanceof Number) { - field.set(container, ((Number) value).intValue()); - } else { - field.set(container, value); - } - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - } - - public static LinkedHashMap<String, ProcessedCategory> create(Features features) { - LinkedHashMap<String, ProcessedCategory> processedConfig = new LinkedHashMap<>(); - for (Field categoryField : features.getClass().getDeclaredFields()) { - boolean exposePresent = categoryField.isAnnotationPresent(Expose.class); - boolean categoryPresent = categoryField.isAnnotationPresent(Category.class); - - if (exposePresent && categoryPresent) { - Object categoryObj; - try { - categoryObj = categoryField.get(features); - } catch (Exception e) { - //System.err.printf("Failed to load config category %s. Field was not accessible.\n", categoryField.getName()); - continue; - } - - Category categoryAnnotation = categoryField.getAnnotation(Category.class); - ProcessedCategory cat = new ProcessedCategory( - categoryAnnotation.name(), - categoryAnnotation.desc() - ); - processedConfig.put(categoryField.getName(), cat); - - for (Field optionField : categoryObj.getClass().getDeclaredFields()) { - boolean optionPresent = optionField.isAnnotationPresent(ConfigOption.class); - - if (optionPresent) { - ConfigOption optionAnnotation = optionField.getAnnotation(ConfigOption.class); - ProcessedOption option = new ProcessedOption( - optionAnnotation.name(), - optionAnnotation.desc(), - optionAnnotation.subcategoryId(), - optionField, - categoryObj - ); - if (optionField.isAnnotationPresent(ConfigAccordionId.class)) { - ConfigAccordionId annotation = optionField.getAnnotation(ConfigAccordionId.class); - option.accordionId = annotation.id(); - } - - GuiOptionEditor editor = null; - Class<?> optionType = optionField.getType(); - if (optionType.isAssignableFrom(int.class) && - optionField.isAnnotationPresent(ConfigEditorKeybind.class)) { - ConfigEditorKeybind configEditorAnnotation = optionField.getAnnotation(ConfigEditorKeybind.class); - editor = new GuiOptionEditorKeybind(option, (int) option.get(), configEditorAnnotation.defaultKey()); - } - if (optionField.isAnnotationPresent(ConfigEditorButton.class)) { - ConfigEditorButton configEditorAnnotation = optionField.getAnnotation(ConfigEditorButton.class); - editor = new GuiOptionEditorButton( - option, - configEditorAnnotation.runnableId(), - configEditorAnnotation.buttonText(), - features - ); - } - if (optionField.isAnnotationPresent(ConfigEditorFSR.class)) { - ConfigEditorFSR configEditorAnnotation = optionField.getAnnotation(ConfigEditorFSR.class); - editor = new GuiOptionEditorFSR( - option, - configEditorAnnotation.runnableId(), - configEditorAnnotation.buttonText(), - features - ); - } - if (optionType.isAssignableFrom(boolean.class) && - optionField.isAnnotationPresent(ConfigEditorBoolean.class)) { - ConfigEditorBoolean configEditorAnnotation = optionField.getAnnotation(ConfigEditorBoolean.class); - editor = new GuiOptionEditorBoolean(option, configEditorAnnotation.runnableId(), features); - } - if (optionType.isAssignableFrom(boolean.class) && - optionField.isAnnotationPresent(ConfigEditorAccordion.class)) { - ConfigEditorAccordion configEditorAnnotation = optionField.getAnnotation(ConfigEditorAccordion.class); - editor = new GuiOptionEditorAccordion(option, configEditorAnnotation.id()); - } - if (optionType.isAssignableFrom(int.class)) { - if (optionField.isAnnotationPresent(ConfigEditorDropdown.class)) { - ConfigEditorDropdown configEditorAnnotation = optionField.getAnnotation(ConfigEditorDropdown.class); - editor = new GuiOptionEditorDropdown(option, configEditorAnnotation.values(), (int) option.get(), true); - } - } - if (optionType.isAssignableFrom(List.class)) { - if (optionField.isAnnotationPresent(ConfigEditorDraggableList.class)) { - ConfigEditorDraggableList configEditorAnnotation = - optionField.getAnnotation(ConfigEditorDraggableList.class); - editor = new GuiOptionEditorDraggableList( - option, - configEditorAnnotation.exampleText(), - configEditorAnnotation.allowDeleting() - ); - } - } - if (optionType.isAssignableFrom(String.class)) { - if (optionField.isAnnotationPresent(ConfigEditorDropdown.class)) { - ConfigEditorDropdown configEditorAnnotation = optionField.getAnnotation(ConfigEditorDropdown.class); - editor = new GuiOptionEditorDropdown(option, configEditorAnnotation.values(), - configEditorAnnotation.initialIndex(), false - ); - } else if (optionField.isAnnotationPresent(ConfigEditorColour.class)) { - editor = new GuiOptionEditorColour(option); - } else if (optionField.isAnnotationPresent(ConfigEditorText.class)) { - editor = new GuiOptionEditorText(option); - } - } - if (optionType.isAssignableFrom(int.class) || - optionType.isAssignableFrom(float.class) || - optionType.isAssignableFrom(double.class)) { - if (optionField.isAnnotationPresent(ConfigEditorSlider.class)) { - ConfigEditorSlider configEditorAnnotation = optionField.getAnnotation(ConfigEditorSlider.class); - editor = new GuiOptionEditorSlider(option, configEditorAnnotation.minValue(), - configEditorAnnotation.maxValue(), configEditorAnnotation.minStep() - ); - } - } - if (optionType.isAssignableFrom(String.class)) { - if (optionField.isAnnotationPresent(ConfigEditorDropdown.class)) { - ConfigEditorDropdown configEditorAnnotation = optionField.getAnnotation(ConfigEditorDropdown.class); - editor = new GuiOptionEditorDropdown(option, configEditorAnnotation.values(), 0, false); - } - } - if (editor == null) { - //System.err.printf("Failed to load config option %s. Could not find suitable editor.\n", optionField.getName()); - continue; - } - option.editor = editor; - cat.options.put(optionField.getName(), option); - } - } - } else if (exposePresent || categoryPresent) { - //System.err.printf("Failed to load config category %s. Both @Expose and @Category must be present.\n", categoryField.getName()); - } - } - return processedConfig; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/util/GuiElementSlider.java b/src/main/java/at/hannibal2/skyhanni/config/core/util/GuiElementSlider.java deleted file mode 100644 index f519f5945..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/util/GuiElementSlider.java +++ /dev/null @@ -1,124 +0,0 @@ -package at.hannibal2.skyhanni.config.core.util; - -import at.hannibal2.skyhanni.config.core.GuiElement; -import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.renderer.GlStateManager; -import org.lwjgl.input.Mouse; -import org.lwjgl.opengl.GL11; - -import java.util.function.Consumer; - -import static at.hannibal2.skyhanni.config.GuiTextures.*; - -public class GuiElementSlider extends GuiElement { - public int x; - public int y; - public int width; - private static final int HEIGHT = 16; - - private final float minValue; - private final float maxValue; - private final float minStep; - - private float value; - private final Consumer<Float> setCallback; - - private boolean clicked = false; - - public GuiElementSlider( - int x, int y, int width, float minValue, float maxValue, float minStep, - float value, Consumer<Float> setCallback - ) { - if (minStep < 0) minStep = 0.01f; - - this.x = x; - this.y = y; - this.width = width; - this.minValue = minValue; - this.maxValue = maxValue; - this.minStep = minStep; - this.value = value; - this.setCallback = setCallback; - } - - public void setValue(float value) { - this.value = value; - } - - @Override - public void render() { - final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - int mouseX = Mouse.getX() * scaledResolution.getScaledWidth() / Minecraft.getMinecraft().displayWidth; - - float value = this.value; - if (clicked) { - value = (mouseX - x) * (maxValue - minValue) / width + minValue; - value = Math.max(minValue, Math.min(maxValue, value)); - value = Math.round(value / minStep) * minStep; - } - - float sliderAmount = Math.max(0, Math.min(1, (value - minValue) / (maxValue - minValue))); - int sliderAmountI = (int) (width * sliderAmount); - - GlStateManager.color(1f, 1f, 1f, 1f); - Minecraft.getMinecraft().getTextureManager().bindTexture(slider_on_cap); - GuiRenderUtils.drawTexturedRect(x, y, 4, HEIGHT, GL11.GL_NEAREST); - Minecraft.getMinecraft().getTextureManager().bindTexture(slider_off_cap); - GuiRenderUtils.drawTexturedRect(x + width - 4, y, 4, HEIGHT, GL11.GL_NEAREST); - - if (sliderAmountI > 5) { - Minecraft.getMinecraft().getTextureManager().bindTexture(slider_on_segment); - GuiRenderUtils.drawTexturedRect(x + 4, y, sliderAmountI - 4, HEIGHT, GL11.GL_NEAREST); - } - - if (sliderAmountI < width - 5) { - Minecraft.getMinecraft().getTextureManager().bindTexture(slider_off_segment); - GuiRenderUtils.drawTexturedRect(x + sliderAmountI, y, width - 4 - sliderAmountI, HEIGHT, GL11.GL_NEAREST); - } - - for (int i = 1; i < 4; i++) { - int notchX = x + width * i / 4 - 1; - Minecraft.getMinecraft().getTextureManager().bindTexture( - notchX > x + sliderAmountI ? slider_off_notch : slider_on_notch); - GuiRenderUtils.drawTexturedRect(notchX, y + (HEIGHT - 4) / 2, 2, 4, GL11.GL_NEAREST); - } - - Minecraft.getMinecraft().getTextureManager().bindTexture(slider_button_new); - GuiRenderUtils.drawTexturedRect(x + sliderAmountI - 4, y, 8, HEIGHT, GL11.GL_NEAREST); - } - - @Override - public boolean mouseInput(int mouseX, int mouseY) { - if (!Mouse.isButtonDown(0)) { - clicked = false; - } - - if (Mouse.getEventButton() == 0) { - clicked = Mouse.getEventButtonState() && mouseX > x && mouseX < x + width && mouseY > y && mouseY < y + HEIGHT; - if (clicked) { - value = (mouseX - x) * (maxValue - minValue) / width + minValue; - value = Math.max(minValue, Math.min(maxValue, value)); - value = (float) (Math.round(value / minStep) * (double) minStep); - setCallback.accept(value); - return true; - } - } - - if (!Mouse.getEventButtonState() && Mouse.getEventButton() == -1 && clicked) { - value = (mouseX - x) * (maxValue - minValue) / width + minValue; - value = Math.max(minValue, Math.min(maxValue, value)); - value = Math.round(value / minStep) * minStep; - setCallback.accept(value); - return true; - } - - return false; - } - - @Override - public boolean keyboardInput() { - return false; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/util/Line.java b/src/main/java/at/hannibal2/skyhanni/config/core/util/Line.java deleted file mode 100644 index bab3175ee..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/util/Line.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.util; - -import net.minecraft.util.Vec3; - -/** - * Represents a line using two points along the line or a segment with endpoints. - */ -public class Line { - private static final double DOUBLE_EPSILON = 4.94065645841247E-324; - public Vec3 point1; - public Vec3 point2; - - public Line(Vec3 first, Vec3 second) { - point1 = first; - point2 = second; - } - - public Vec3 getMidpoint() { - return new Vec3( - (point1.xCoord + point2.xCoord) / 2.0, - (point1.yCoord + point2.yCoord) / 2.0, - (point1.zCoord + point2.zCoord) / 2.0 - ); - } - - /** - * Calculates the intersection line segment between 2 lines - * Based on http://paulbourke.net/geometry/pointlineplane/calclineline.cs - * - * @return The intersection {@link Line} or {@code null} if no solution found - */ - public Line getIntersectionLineSegment(Line other) { - Vec3 p1 = this.point1; - Vec3 p2 = this.point2; - Vec3 p3 = other.point1; - Vec3 p4 = other.point2; - Vec3 p13 = p1.subtract(p3); - Vec3 p43 = p4.subtract(p3); - - if (lengthSquared(p43) < DOUBLE_EPSILON) { - return null; - } - - Vec3 p21 = p2.subtract(p1); - if (lengthSquared(p21) < DOUBLE_EPSILON) { - return null; - } - - double d1343 = p13.xCoord * p43.xCoord + p13.yCoord * p43.yCoord + p13.zCoord * p43.zCoord; - double d4321 = p43.xCoord * p21.xCoord + p43.yCoord * p21.yCoord + p43.zCoord * p21.zCoord; - double d1321 = p13.xCoord * p21.xCoord + p13.yCoord * p21.yCoord + p13.zCoord * p21.zCoord; - double d4343 = p43.xCoord * p43.xCoord + p43.yCoord * p43.yCoord + p43.zCoord * p43.zCoord; - double d2121 = p21.xCoord * p21.xCoord + p21.yCoord * p21.yCoord + p21.zCoord * p21.zCoord; - - double denom = d2121 * d4343 - d4321 * d4321; - if (Math.abs(denom) < DOUBLE_EPSILON) { - return null; - } - double numer = d1343 * d4321 - d1321 * d4343; - - double mua = numer / denom; - double mub = (d1343 + d4321 * (mua)) / d4343; - - Line resultSegment = new Line( - new Vec3( - (float) (p1.xCoord + mua * p21.xCoord), - (float) (p1.yCoord + mua * p21.yCoord), - (float) (p1.zCoord + mua * p21.zCoord) - ), - new Vec3( - (float) (p3.xCoord + mub * p43.xCoord), - (float) (p3.yCoord + mub * p43.yCoord), - (float) (p3.zCoord + mub * p43.zCoord) - ) - ); - - return resultSegment; - } - - public Line getImmutable() { - return new Line(point1, point2); - } - - private static double lengthSquared(Vec3 vec) { - return vec.dotProduct(vec); - } - - public String toString() { - return String.format( - "point1 = %s, point2 = %s, midpoint = %s", - point1 == null ? "NULL" : point1.toString(), - point2 == null ? "NULL" : point2.toString(), - (point1 == null || point2 == null) ? "NULL" : getMidpoint() - ); - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/util/MiscUtils.java b/src/main/java/at/hannibal2/skyhanni/config/core/util/MiscUtils.java deleted file mode 100644 index e90beb581..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/util/MiscUtils.java +++ /dev/null @@ -1,127 +0,0 @@ -///* -// * Copyright (C) 2022 NotEnoughUpdates contributors -// * -// * This file is part of NotEnoughUpdates. -// * -// * NotEnoughUpdates is free software: you can redistribute it -// * and/or modify it under the terms of the GNU Lesser General Public -// * License as published by the Free Software Foundation, either -// * version 3 of the License, or (at your option) any later version. -// * -// * NotEnoughUpdates is distributed in the hope that it will be useful, -// * but WITHOUT ANY WARRANTY; without even the implied warranty of -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// * Lesser General Public License for more details. -// * -// * You should have received a copy of the GNU Lesser General Public License -// * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. -// */ -// -//package at.hannibal2.skyhanni.config.core.util; -// -//import net.minecraft.client.Minecraft; -//import net.minecraft.util.ResourceLocation; -//import org.lwjgl.BufferUtils; -//import org.lwjgl.input.Cursor; -//import org.lwjgl.input.Mouse; -// -//import javax.imageio.ImageIO; -//import java.awt.*; -//import java.awt.datatransfer.StringSelection; -//import java.awt.image.BufferedImage; -//import java.io.File; -//import java.io.FileOutputStream; -//import java.io.IOException; -//import java.io.InputStream; -//import java.nio.IntBuffer; -//import java.nio.file.Files; -//import java.util.zip.ZipEntry; -//import java.util.zip.ZipInputStream; -// -//public class MiscUtils { -// public static void copyToClipboard(String str) { -// Toolkit.getDefaultToolkit().getSystemClipboard() -// .setContents(new StringSelection(str), null); -// } -// -// private static void unzip(InputStream src, File dest) { -// //buffer for read and write data to file -// byte[] buffer = new byte[1024]; -// try { -// ZipInputStream zis = new ZipInputStream(src); -// ZipEntry ze = zis.getNextEntry(); -// while (ze != null) { -// if (!ze.isDirectory()) { -// String fileName = ze.getName(); -// File newFile = new File(dest, fileName); -// //create directories for sub directories in zip -// new File(newFile.getParent()).mkdirs(); -// FileOutputStream fos = new FileOutputStream(newFile); -// int len; -// while ((len = zis.read(buffer)) > 0) { -// fos.write(buffer, 0, len); -// } -// fos.close(); -// } -// //close this ZipEntry -// zis.closeEntry(); -// ze = zis.getNextEntry(); -// } -// //close last ZipEntry -// zis.closeEntry(); -// zis.close(); -// } catch (IOException e) { -// e.printStackTrace(); -// } -// } -// -// public static void recursiveDelete(File file) { -// if (file.isDirectory() && !Files.isSymbolicLink(file.toPath())) { -// for (File child : file.listFiles()) { -// recursiveDelete(child); -// } -// } -// file.delete(); -// } -// -// private static String currentCursor = null; -// -// public static void resetCursor() { -// if (currentCursor == null) { -// return; -// } -// currentCursor = null; -// try { -// Mouse.setNativeCursor(null); -// } catch (Exception ignored) { -// } -// } -// -// public static void setCursor(ResourceLocation loc, int hotspotX, int hotspotY) { -// if (currentCursor != null && loc.getResourcePath().equals(currentCursor)) { -// return; -// } -// currentCursor = loc.getResourcePath(); -// try { -// BufferedImage image = ImageIO.read(Minecraft.getMinecraft() -// .getResourceManager().getResource(loc).getInputStream()); -// int maxSize = Cursor.getMaxCursorSize(); -// IntBuffer buffer = BufferUtils.createIntBuffer(maxSize * maxSize); -// for (int i = 0; i < maxSize * maxSize; i++) { -// int cursorX = i % maxSize; -// int cursorY = i / maxSize; -// if (cursorX >= image.getWidth() || cursorY >= image.getHeight()) { -// buffer.put(0x00000000); -// } else { -// buffer.put(image.getRGB(cursorX, image.getHeight() - 1 - cursorY)); -// } -// } -// buffer.flip(); -// Mouse.setNativeCursor(new Cursor(maxSize, maxSize, hotspotX, hotspotY, 1, -// buffer, null -// )); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -//} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/util/Splitters.java b/src/main/java/at/hannibal2/skyhanni/config/core/util/Splitters.java deleted file mode 100644 index 25b3bd316..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/util/Splitters.java +++ /dev/null @@ -1,26 +0,0 @@ -///* -// * Copyright (C) 2022 NotEnoughUpdates contributors -// * -// * This file is part of NotEnoughUpdates. -// * -// * NotEnoughUpdates is free software: you can redistribute it -// * and/or modify it under the terms of the GNU Lesser General Public -// * License as published by the Free Software Foundation, either -// * version 3 of the License, or (at your option) any later version. -// * -// * NotEnoughUpdates is distributed in the hope that it will be useful, -// * but WITHOUT ANY WARRANTY; without even the implied warranty of -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// * Lesser General Public License for more details. -// * -// * You should have received a copy of the GNU Lesser General Public License -// * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. -// */ -// -//package at.hannibal2.skyhanni.config.core.util; -// -//import com.google.common.base.Splitter; -// -//public class Splitters { -// public static final Splitter NEWLINE_SPLITTER = Splitter.on('\n'); -//} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/util/StringUtils.java b/src/main/java/at/hannibal2/skyhanni/config/core/util/StringUtils.java deleted file mode 100644 index 999786518..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/util/StringUtils.java +++ /dev/null @@ -1,77 +0,0 @@ -///* -// * Copyright (C) 2022 NotEnoughUpdates contributors -// * -// * This file is part of NotEnoughUpdates. -// * -// * NotEnoughUpdates is free software: you can redistribute it -// * and/or modify it under the terms of the GNU Lesser General Public -// * License as published by the Free Software Foundation, either -// * version 3 of the License, or (at your option) any later version. -// * -// * NotEnoughUpdates is distributed in the hope that it will be useful, -// * but WITHOUT ANY WARRANTY; without even the implied warranty of -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// * Lesser General Public License for more details. -// * -// * You should have received a copy of the GNU Lesser General Public License -// * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. -// */ -// -//package at.hannibal2.skyhanni.config.core.util; -// -//import com.google.common.collect.Sets; -//import net.minecraft.client.Minecraft; -//import net.minecraft.client.gui.FontRenderer; -// -//import java.io.UnsupportedEncodingException; -//import java.net.URLEncoder; -//import java.nio.charset.StandardCharsets; -//import java.util.Set; -// -//public class StringUtils { -// public static final Set<String> PROTOCOLS = Sets.newHashSet("http", "https"); -// -// public static String cleanColour(String in) { -// return in.replaceAll("(?i)\\u00A7.", ""); -// } -// -// public static String cleanColourNotModifiers(String in) { -// return in.replaceAll("(?i)\\u00A7[0-9a-f]", "\u00A7r"); -// } -// -// public static String trimToWidth(String str, int len) { -// FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; -// String trim = fr.trimStringToWidth(str, len); -// -// if (str.length() != trim.length() && !trim.endsWith(" ")) { -// char next = str.charAt(trim.length()); -// if (next != ' ') { -// String[] split = trim.split(" "); -// String last = split[split.length - 1]; -// if (last.length() < 8) { -// trim = trim.substring(0, trim.length() - last.length()); -// } -// } -// } -// -// return trim; -// } -// -// public static String substringBetween(String str, String open, String close) { -// return org.apache.commons.lang3.StringUtils.substringBetween(str, open, close); -// } -// -// public static int cleanAndParseInt(String str) { -// str = cleanColour(str); -// str = str.replace(",", ""); -// return Integer.parseInt(str); -// } -// -// public static String urlEncode(String something) { -// try { -// return URLEncoder.encode(something, StandardCharsets.UTF_8.name()); -// } catch (UnsupportedEncodingException e) { -// throw new RuntimeException(e); // UTF 8 should always be present -// } -// } -//} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/util/Vec3Comparable.java b/src/main/java/at/hannibal2/skyhanni/config/core/util/Vec3Comparable.java deleted file mode 100644 index 72d99ed23..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/util/Vec3Comparable.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.util; - -import net.minecraft.util.BlockPos; -import net.minecraft.util.Vec3; -import net.minecraft.util.Vec3i; - -public class Vec3Comparable extends Vec3 implements Comparable<Vec3Comparable> { - public static final Vec3Comparable NULL_VECTOR = new Vec3Comparable(0.0, 0.0, 0.0); - - public Vec3Comparable(double x, double y, double z) { - super(x, y, z); - } - - public Vec3Comparable(Vec3i sourceVec) { - super(sourceVec); - } - - public Vec3Comparable(Vec3 source) { - super(source.xCoord, source.yCoord, source.zCoord); - } - - public Vec3Comparable(BlockPos source) { - - super(source.getX(), source.getY(), source.getZ()); - } - - public Vec3Comparable(Vec3Comparable source) { - super(source.xCoord, source.yCoord, source.zCoord); - } - - @Override - public Vec3Comparable subtractReverse(Vec3 vec) { - return new Vec3Comparable(super.subtractReverse(vec)); - } - - @Override - public Vec3Comparable normalize() { - return new Vec3Comparable(super.normalize()); - } - - @Override - public Vec3Comparable crossProduct(Vec3 vec) { - return new Vec3Comparable(super.crossProduct(vec)); - } - - @Override - public Vec3Comparable subtract(Vec3 vec) { - return new Vec3Comparable(super.subtract(vec)); - } - - @Override - public Vec3Comparable subtract(double x, double y, double z) { - return new Vec3Comparable(super.subtract(x, y, z)); - } - - @Override - public Vec3Comparable add(Vec3 other) { - return new Vec3Comparable(super.add(other)); - } - - @Override - public Vec3Comparable addVector(double x, double y, double z) { - return new Vec3Comparable(super.addVector(x, y, z)); - } - - @Override - public Vec3Comparable getIntermediateWithXValue(Vec3 vec, double x) { - return new Vec3Comparable(super.getIntermediateWithXValue(vec, x)); - } - - @Override - public Vec3Comparable getIntermediateWithYValue(Vec3 vec, double y) { - return new Vec3Comparable(super.getIntermediateWithYValue(vec, y)); - } - - @Override - public Vec3Comparable getIntermediateWithZValue(Vec3 vec, double z) { - return new Vec3Comparable(super.getIntermediateWithZValue(vec, z)); - } - - @Override - public Vec3Comparable rotatePitch(float pitch) { - return new Vec3Comparable(super.rotatePitch(pitch)); - } - - @Override - public Vec3Comparable rotateYaw(float yaw) { - return new Vec3Comparable(super.rotateYaw(yaw)); - } - - @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } else if (!(other instanceof Vec3Comparable)) { - return false; - } else { - Vec3Comparable vec3c = (Vec3Comparable) other; - return this.xCoord == vec3c.xCoord && this.yCoord == vec3c.yCoord && this.zCoord == vec3c.zCoord; - } - } - - @Override - public int hashCode() { - long bits = 1L; - bits = 31L * bits + doubleToLongBits(xCoord); - bits = 31L * bits + doubleToLongBits(yCoord); - bits = 31L * bits + doubleToLongBits(zCoord); - return (int) (bits ^ (bits >> 32)); - } - - public int compareTo(Vec3Comparable other) { - return this.yCoord == other.yCoord ? - (this.zCoord == other.zCoord ? - (int) (this.xCoord - other.xCoord) - : (int) (this.zCoord - other.zCoord)) - : (int) (this.yCoord - other.yCoord); - } - - public boolean signumEquals(Vec3 other) { - return Math.signum(xCoord) == Math.signum(other.xCoord) && - Math.signum(yCoord) == Math.signum(other.yCoord) && - Math.signum(zCoord) == Math.signum(other.zCoord); - } - - private static long doubleToLongBits(double d) { - return d == 0.0 ? 0L : Double.doubleToLongBits(d); - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/util/lerp/LerpUtils.java b/src/main/java/at/hannibal2/skyhanni/config/core/util/lerp/LerpUtils.java deleted file mode 100644 index 8b6cbbc35..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/util/lerp/LerpUtils.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.util.lerp; - -public class LerpUtils { - public static float clampZeroOne(float f) { - return Math.max(0, Math.min(1, f)); - } - - public static float sigmoid(float val) { - return (float) (1 / (1 + Math.exp(-val))); - } - - private static final float sigmoidStr = 8; - private static final float sigmoidA = -1 / (sigmoid(-0.5f * sigmoidStr) - sigmoid(0.5f * sigmoidStr)); - private static final float sigmoidB = sigmoidA * sigmoid(-0.5f * sigmoidStr); - - public static float sigmoidZeroOne(float f) { - f = clampZeroOne(f); - return sigmoidA * sigmoid(sigmoidStr * (f - 0.5f)) - sigmoidB; - } - - public static float lerp(float a, float b, float amount) { - return b + (a - b) * clampZeroOne(amount); - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/util/lerp/LerpingFloat.java b/src/main/java/at/hannibal2/skyhanni/config/core/util/lerp/LerpingFloat.java deleted file mode 100644 index 4f9c699a2..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/util/lerp/LerpingFloat.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.util.lerp; - -public class LerpingFloat { - private int timeSpent; - private long lastMillis; - private final int timeToReachTarget; - - private float targetValue; - private float lerpValue; - - public LerpingFloat(float initialValue, int timeToReachTarget) { - this.targetValue = this.lerpValue = initialValue; - this.timeToReachTarget = timeToReachTarget; - } - - public LerpingFloat(int initialValue) { - this(initialValue, 200); - } - - public void tick() { - int lastTimeSpent = timeSpent; - this.timeSpent += System.currentTimeMillis() - lastMillis; - - float lastDistPercentToTarget = lastTimeSpent / (float) timeToReachTarget; - float distPercentToTarget = timeSpent / (float) timeToReachTarget; - float fac = (1 - lastDistPercentToTarget) / lastDistPercentToTarget; - - float startValue = lerpValue - (targetValue - lerpValue) / fac; - - float dist = targetValue - startValue; - if (dist == 0) return; - - float oldLerpValue = lerpValue; - if (distPercentToTarget >= 1) { - lerpValue = targetValue; - } else { - lerpValue = startValue + dist * distPercentToTarget; - } - - if (lerpValue == oldLerpValue) { - timeSpent = lastTimeSpent; - } else { - this.lastMillis = System.currentTimeMillis(); - } - } - - public void resetTimer() { - this.timeSpent = 0; - this.lastMillis = System.currentTimeMillis(); - } - - public void setTarget(float targetValue) { - this.targetValue = targetValue; - } - - public void setValue(float value) { - this.targetValue = this.lerpValue = value; - } - - public float getValue() { - return lerpValue; - } - - public float getTarget() { - return targetValue; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/util/lerp/LerpingInteger.java b/src/main/java/at/hannibal2/skyhanni/config/core/util/lerp/LerpingInteger.java deleted file mode 100644 index e97b2dc1c..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/util/lerp/LerpingInteger.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.util.lerp; - -public class LerpingInteger { - private int timeSpent; - private long lastMillis; - private int timeToReachTarget; - - private int targetValue; - private int lerpValue; - - public LerpingInteger(int initialValue, int timeToReachTarget) { - this.targetValue = this.lerpValue = initialValue; - this.timeToReachTarget = timeToReachTarget; - } - - public LerpingInteger(int initialValue) { - this(initialValue, 200); - } - - public void tick() { - int lastTimeSpent = timeSpent; - this.timeSpent += System.currentTimeMillis() - lastMillis; - - float lastDistPercentToTarget = lastTimeSpent / (float) timeToReachTarget; - float distPercentToTarget = timeSpent / (float) timeToReachTarget; - float fac = (1 - lastDistPercentToTarget) / lastDistPercentToTarget; - - int startValue = lerpValue - (int) ((targetValue - lerpValue) / fac); - - int dist = targetValue - startValue; - if (dist == 0) return; - - int oldLerpValue = lerpValue; - if (distPercentToTarget >= 1) { - lerpValue = targetValue; - } else { - lerpValue = startValue + (int) (dist * distPercentToTarget); - } - - if (lerpValue == oldLerpValue) { - timeSpent = lastTimeSpent; - } else { - this.lastMillis = System.currentTimeMillis(); - } - } - - public int getTimeSpent() { - return timeSpent; - } - - public void resetTimer() { - this.timeSpent = 0; - this.lastMillis = System.currentTimeMillis(); - } - - public void setTimeToReachTarget(int timeToReachTarget) { - this.timeToReachTarget = timeToReachTarget; - } - - public void setTarget(int targetValue) { - this.targetValue = targetValue; - } - - public void setValue(int value) { - this.targetValue = this.lerpValue = value; - } - - public int getValue() { - return lerpValue; - } - - public int getTarget() { - return targetValue; - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/util/render/GuiRenderUtils.java b/src/main/java/at/hannibal2/skyhanni/config/core/util/render/GuiRenderUtils.java deleted file mode 100644 index 69c7b90b6..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/util/render/GuiRenderUtils.java +++ /dev/null @@ -1,391 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.util.render; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.entity.Entity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MathHelper; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.Vec3i; -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL14; -import org.lwjgl.util.vector.Vector3f; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class GuiRenderUtils { - public static void drawFloatingRectDark(int x, int y, int width, int height) { - drawFloatingRectDark(x, y, width, height, true); - } - - public static void drawFloatingRectDark(int x, int y, int width, int height, boolean shadow) { - int alpha = 0xf0000000; - - if (OpenGlHelper.isFramebufferEnabled()) { -// ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); -// BackgroundBlur.renderBlurredBackground(15, scaledResolution.getScaledWidth(), -// scaledResolution.getScaledHeight(), x, y, width, height, true -// ); - } else { - alpha = 0xff000000; - } - - int main = alpha | 0x202026; - int light = 0xff303036; - int dark = 0xff101016; - Gui.drawRect(x, y, x + 1, y + height, light); //Left - Gui.drawRect(x + 1, y, x + width, y + 1, light); //Top - Gui.drawRect(x + width - 1, y + 1, x + width, y + height, dark); //Right - Gui.drawRect(x + 1, y + height - 1, x + width - 1, y + height, dark); //Bottom - Gui.drawRect(x + 1, y + 1, x + width - 1, y + height - 1, main); //Middle - if (shadow) { - Gui.drawRect(x + width, y + 2, x + width + 2, y + height + 2, 0x70000000); //Right shadow - Gui.drawRect(x + 2, y + height, x + width, y + height + 2, 0x70000000); //Bottom shadow - } - } - - public static void drawFloatingRect(int x, int y, int width, int height) { - drawFloatingRectWithAlpha(x, y, width, height, 0xFF, true); - } - - public static void drawFloatingRectWithAlpha(int x, int y, int width, int height, int alpha, boolean shadow) { - int main = (alpha << 24) | 0xc0c0c0; - int light = (alpha << 24) | 0xf0f0f0; - int dark = (alpha << 24) | 0x909090; - Gui.drawRect(x, y, x + 1, y + height, light); //Left - Gui.drawRect(x + 1, y, x + width, y + 1, light); //Top - Gui.drawRect(x + width - 1, y + 1, x + width, y + height, dark); //Right - Gui.drawRect(x + 1, y + height - 1, x + width - 1, y + height, dark); //Bottom - Gui.drawRect(x + 1, y + 1, x + width - 1, y + height - 1, main); //Middle - if (shadow) { - Gui.drawRect(x + width, y + 2, x + width + 2, y + height + 2, (alpha * 3 / 5) << 24); //Right shadow - Gui.drawRect(x + 2, y + height, x + width, y + height + 2, (alpha * 3 / 5) << 24); //Bottom shadow - } - } - - public static void drawTexturedRect(float x, float y, float width, float height) { - drawTexturedRect(x, y, width, height, 0, 1, 0, 1); - } - - public static void drawTexturedRect(float x, float y, float width, float height, int filter) { - drawTexturedRect(x, y, width, height, 0, 1, 0, 1, filter); - } - - public static void drawTexturedRect( - float x, - float y, - float width, - float height, - float uMin, - float uMax, - float vMin, - float vMax - ) { - drawTexturedRect(x, y, width, height, uMin, uMax, vMin, vMax, GL11.GL_NEAREST); - } - - public static void drawTexturedRect( - float x, - float y, - float width, - float height, - float uMin, - float uMax, - float vMin, - float vMax, - int filter - ) { - GlStateManager.enableBlend(); - GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA); - - drawTexturedRectNoBlend(x, y, width, height, uMin, uMax, vMin, vMax, filter); - - GlStateManager.disableBlend(); - } - - public static void drawTexturedRectNoBlend( - float x, - float y, - float width, - float height, - float uMin, - float uMax, - float vMin, - float vMax, - int filter - ) { - GlStateManager.enableTexture2D(); - - GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, filter); - GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, filter); - - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); - worldrenderer - .pos(x, y + height, 0.0D) - .tex(uMin, vMax).endVertex(); - worldrenderer - .pos(x + width, y + height, 0.0D) - .tex(uMax, vMax).endVertex(); - worldrenderer - .pos(x + width, y, 0.0D) - .tex(uMax, vMin).endVertex(); - worldrenderer - .pos(x, y, 0.0D) - .tex(uMin, vMin).endVertex(); - tessellator.draw(); - - GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); - GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); - } - - public static void drawGradientRect( - int zLevel, - int left, - int top, - int right, - int bottom, - int startColor, - int endColor - ) { - float startAlpha = (float) (startColor >> 24 & 255) / 255.0F; - float startRed = (float) (startColor >> 16 & 255) / 255.0F; - float startGreen = (float) (startColor >> 8 & 255) / 255.0F; - float startBlue = (float) (startColor & 255) / 255.0F; - float endAlpha = (float) (endColor >> 24 & 255) / 255.0F; - float endRed = (float) (endColor >> 16 & 255) / 255.0F; - float endGreen = (float) (endColor >> 8 & 255) / 255.0F; - float endBlue = (float) (endColor & 255) / 255.0F; - - GlStateManager.disableTexture2D(); - GlStateManager.enableBlend(); - GlStateManager.disableAlpha(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - GlStateManager.shadeModel(7425); - - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR); - worldrenderer.pos(right, top, zLevel).color(startRed, startGreen, startBlue, startAlpha).endVertex(); - worldrenderer.pos(left, top, zLevel).color(startRed, startGreen, startBlue, startAlpha).endVertex(); - worldrenderer.pos(left, bottom, zLevel).color(endRed, endGreen, endBlue, endAlpha).endVertex(); - worldrenderer.pos(right, bottom, zLevel).color(endRed, endGreen, endBlue, endAlpha).endVertex(); - tessellator.draw(); - - GlStateManager.shadeModel(7424); - GlStateManager.disableBlend(); - GlStateManager.enableAlpha(); - GlStateManager.enableTexture2D(); - } - - private static final ResourceLocation beaconBeam = new ResourceLocation("textures/entity/beacon_beam.png"); - - private static void renderBeaconBeam( - double x, double y, double z, int rgb, float alphaMult, - float partialTicks, Boolean disableDepth - ) { - int height = 300; - int bottomOffset = 0; - int topOffset = bottomOffset + height; - - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - - if (disableDepth) { - GlStateManager.disableDepth(); - } - - Minecraft.getMinecraft().getTextureManager().bindTexture(beaconBeam); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT); - GlStateManager.disableLighting(); - GlStateManager.enableCull(); - GlStateManager.enableTexture2D(); - GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE, GL11.GL_ZERO); - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); - - double time = Minecraft.getMinecraft().theWorld.getTotalWorldTime() + (double) partialTicks; - double d1 = MathHelper.func_181162_h(-time * 0.2D - (double) MathHelper.floor_double(-time * 0.1D)); - - float r = ((rgb >> 16) & 0xFF) / 255f; - float g = ((rgb >> 8) & 0xFF) / 255f; - float b = (rgb & 0xFF) / 255f; - double d2 = time * 0.025D * -1.5D; - double d4 = 0.5D + Math.cos(d2 + 2.356194490192345D) * 0.2D; - double d5 = 0.5D + Math.sin(d2 + 2.356194490192345D) * 0.2D; - double d6 = 0.5D + Math.cos(d2 + (Math.PI / 4D)) * 0.2D; - double d7 = 0.5D + Math.sin(d2 + (Math.PI / 4D)) * 0.2D; - double d8 = 0.5D + Math.cos(d2 + 3.9269908169872414D) * 0.2D; - double d9 = 0.5D + Math.sin(d2 + 3.9269908169872414D) * 0.2D; - double d10 = 0.5D + Math.cos(d2 + 5.497787143782138D) * 0.2D; - double d11 = 0.5D + Math.sin(d2 + 5.497787143782138D) * 0.2D; - double d14 = -1.0D + d1; - double d15 = (double) (height) * 2.5D + d14; - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); - worldrenderer.pos(x + d4, y + topOffset, z + d5).tex(1.0D, d15).color(r, g, b, 1.0F * alphaMult).endVertex(); - worldrenderer.pos(x + d4, y + bottomOffset, z + d5).tex(1.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d6, y + bottomOffset, z + d7).tex(0.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d6, y + topOffset, z + d7).tex(0.0D, d15).color(r, g, b, 1.0F * alphaMult).endVertex(); - worldrenderer.pos(x + d10, y + topOffset, z + d11).tex(1.0D, d15).color(r, g, b, 1.0F * alphaMult).endVertex(); - worldrenderer.pos(x + d10, y + bottomOffset, z + d11).tex(1.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d8, y + bottomOffset, z + d9).tex(0.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d8, y + topOffset, z + d9).tex(0.0D, d15).color(r, g, b, 1.0F * alphaMult).endVertex(); - worldrenderer.pos(x + d6, y + topOffset, z + d7).tex(1.0D, d15).color(r, g, b, 1.0F * alphaMult).endVertex(); - worldrenderer.pos(x + d6, y + bottomOffset, z + d7).tex(1.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d10, y + bottomOffset, z + d11).tex(0.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d10, y + topOffset, z + d11).tex(0.0D, d15).color(r, g, b, 1.0F * alphaMult).endVertex(); - worldrenderer.pos(x + d8, y + topOffset, z + d9).tex(1.0D, d15).color(r, g, b, 1.0F * alphaMult).endVertex(); - worldrenderer.pos(x + d8, y + bottomOffset, z + d9).tex(1.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d4, y + bottomOffset, z + d5).tex(0.0D, d14).color(r, g, b, 1.0F).endVertex(); - worldrenderer.pos(x + d4, y + topOffset, z + d5).tex(0.0D, d15).color(r, g, b, 1.0F * alphaMult).endVertex(); - tessellator.draw(); - - GlStateManager.disableCull(); - double d12 = -1.0D + d1; - double d13 = height + d12; - - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); - worldrenderer.pos(x + 0.2D, y + topOffset, z + 0.2D).tex(1.0D, d13).color(r, g, b, 0.25F * alphaMult).endVertex(); - worldrenderer.pos(x + 0.2D, y + bottomOffset, z + 0.2D).tex(1.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.8D, y + bottomOffset, z + 0.2D).tex(0.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.8D, y + topOffset, z + 0.2D).tex(0.0D, d13).color(r, g, b, 0.25F * alphaMult).endVertex(); - worldrenderer.pos(x + 0.8D, y + topOffset, z + 0.8D).tex(1.0D, d13).color(r, g, b, 0.25F * alphaMult).endVertex(); - worldrenderer.pos(x + 0.8D, y + bottomOffset, z + 0.8D).tex(1.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.2D, y + bottomOffset, z + 0.8D).tex(0.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.2D, y + topOffset, z + 0.8D).tex(0.0D, d13).color(r, g, b, 0.25F * alphaMult).endVertex(); - worldrenderer.pos(x + 0.8D, y + topOffset, z + 0.2D).tex(1.0D, d13).color(r, g, b, 0.25F * alphaMult).endVertex(); - worldrenderer.pos(x + 0.8D, y + bottomOffset, z + 0.2D).tex(1.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.8D, y + bottomOffset, z + 0.8D).tex(0.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.8D, y + topOffset, z + 0.8D).tex(0.0D, d13).color(r, g, b, 0.25F * alphaMult).endVertex(); - worldrenderer.pos(x + 0.2D, y + topOffset, z + 0.8D).tex(1.0D, d13).color(r, g, b, 0.25F * alphaMult).endVertex(); - worldrenderer.pos(x + 0.2D, y + bottomOffset, z + 0.8D).tex(1.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.2D, y + bottomOffset, z + 0.2D).tex(0.0D, d12).color(r, g, b, 0.25F).endVertex(); - worldrenderer.pos(x + 0.2D, y + topOffset, z + 0.2D).tex(0.0D, d13).color(r, g, b, 0.25F * alphaMult).endVertex(); - tessellator.draw(); - - GlStateManager.disableLighting(); - GlStateManager.enableTexture2D(); - if (disableDepth) { - GlStateManager.enableDepth(); - } - } - - public static void renderWayPoint(String str, Vec3i loc, float partialTicks) { - renderWayPoint(str, new Vector3f(loc.getX(), loc.getY(), loc.getZ()), partialTicks); - } - - public static void renderWayPoint(List<String> str, Vec3i loc, float partialTicks) { - renderWayPoint(str, new Vector3f(loc.getX(), loc.getY(), loc.getZ()), partialTicks); - } - - public static void renderWayPoint(String str, Vector3f loc, float partialTicks) { - renderWayPoint(Arrays.asList(str), loc, partialTicks); - } - - public static void renderWayPoint(List<String> lines, Vector3f loc, float partialTicks) { - GlStateManager.alphaFunc(516, 0.1F); - - GlStateManager.pushMatrix(); - - Entity viewer = Minecraft.getMinecraft().getRenderViewEntity(); - double viewerX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * partialTicks; - double viewerY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * partialTicks; - double viewerZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * partialTicks; - - double x = loc.x - viewerX + 0.5f; - double y = loc.y - viewerY - viewer.getEyeHeight(); - double z = loc.z - viewerZ + 0.5f; - - double distSq = x * x + y * y + z * z; - double dist = Math.sqrt(distSq); - if (distSq > 144) { - x *= 12 / dist; - y *= 12 / dist; - z *= 12 / dist; - } - GlStateManager.translate(x, y, z); - GlStateManager.translate(0, viewer.getEyeHeight(), 0); - - lines = new ArrayList<>(lines); - lines.add(EnumChatFormatting.YELLOW.toString() + Math.round(dist) + "m"); - renderNametag(lines); - - GlStateManager.popMatrix(); - - GlStateManager.disableLighting(); - } - - public static void renderNametag(String str) { - renderNametag(Arrays.asList(str)); - } - - public static void renderNametag(List<String> lines) { - FontRenderer fontrenderer = Minecraft.getMinecraft().fontRendererObj; - float f = 1.6F; - float f1 = 0.016666668F * f; - GlStateManager.pushMatrix(); - GL11.glNormal3f(0.0F, 1.0F, 0.0F); - GlStateManager.rotate(-Minecraft.getMinecraft().getRenderManager().playerViewY, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(Minecraft.getMinecraft().getRenderManager().playerViewX, 1.0F, 0.0F, 0.0F); - GlStateManager.scale(-f1, -f1, f1); - GlStateManager.disableLighting(); - GlStateManager.depthMask(false); - GlStateManager.disableDepth(); - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - int i = 0; - - for (String str : lines) { - int j = fontrenderer.getStringWidth(str) / 2; - - GlStateManager.disableTexture2D(); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR); - worldrenderer.pos(-j - 1, -1 + i, 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - worldrenderer.pos(-j - 1, 8 + i, 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - worldrenderer.pos(j + 1, 8 + i, 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - worldrenderer.pos(j + 1, -1 + i, 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - tessellator.draw(); - GlStateManager.enableTexture2D(); - fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, i, 553648127); - GlStateManager.depthMask(true); - - fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, i, -1); - GlStateManager.translate(0, 10f, 0); - } - GlStateManager.enableDepth(); - GlStateManager.enableBlend(); - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - GlStateManager.popMatrix(); - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/util/render/TextRenderUtils.java b/src/main/java/at/hannibal2/skyhanni/config/core/util/render/TextRenderUtils.java deleted file mode 100644 index bc1208e4d..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/core/util/render/TextRenderUtils.java +++ /dev/null @@ -1,345 +0,0 @@ -/* - * Copyright (C) 2022 NotEnoughUpdates contributors - * - * This file is part of NotEnoughUpdates. - * - * NotEnoughUpdates is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * NotEnoughUpdates is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>. - */ - -package at.hannibal2.skyhanni.config.core.util.render; - -import at.hannibal2.skyhanni.utils.StringUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import org.lwjgl.opengl.GL11; - -import java.util.ArrayList; -import java.util.List; - -public class TextRenderUtils { - public static int getCharVertLen(char c) { - if ("acegmnopqrsuvwxyz".indexOf(c) >= 0) { - return 5; - } else { - return 7; - } - } - - public static float getVerticalHeight(String str) { - str = StringUtils.INSTANCE.removeColor(str); - float height = 0; - for (int i = 0; i < str.length(); i++) { - char c = str.charAt(i); - int charHeight = getCharVertLen(c); - height += charHeight + 1.5f; - } - return height; - } - - public static void drawStringVertical(String str, FontRenderer fr, float x, float y, boolean shadow, int colour) { - String format = FontRenderer.getFormatFromString(str); - str = StringUtils.INSTANCE.removeColor(str); - for (int i = 0; i < str.length(); i++) { - char c = str.charAt(i); - - int charHeight = getCharVertLen(c); - int charWidth = fr.getCharWidth(c); - fr.drawString(format + c, x + (5 - charWidth) / 2f, y - 7 + charHeight, colour, shadow); - - y += charHeight + 1.5f; - } - } - - public static void drawStringScaledMaxWidth( - String str, - FontRenderer fr, - float x, - float y, - boolean shadow, - int len, - int colour - ) { - int strLen = fr.getStringWidth(str); - float factor = len / (float) strLen; - factor = Math.min(1, factor); - - drawStringScaled(str, fr, x, y, shadow, colour, factor); - } - - public static void drawStringCentered(String str, FontRenderer fr, float x, float y, boolean shadow, int colour) { - int strLen = fr.getStringWidth(str); - - float x2 = x - strLen / 2f; - float y2 = y - fr.FONT_HEIGHT / 2f; - - GL11.glTranslatef(x2, y2, 0); - fr.drawString(str, 0, 0, colour, shadow); - GL11.glTranslatef(-x2, -y2, 0); - } - - public static void drawStringScaled( - String str, - FontRenderer fr, - float x, - float y, - boolean shadow, - int colour, - float factor - ) { - GlStateManager.scale(factor, factor, 1); - fr.drawString(str, x / factor, y / factor, colour, shadow); - GlStateManager.scale(1 / factor, 1 / factor, 1); - } - - public static void drawStringCenteredScaledMaxWidth( - String str, - FontRenderer fr, - float x, - float y, - boolean shadow, - int len, - int colour - ) { - int strLen = fr.getStringWidth(str); - float factor = len / (float) strLen; - factor = Math.min(1, factor); - int newLen = Math.min(strLen, len); - - float fontHeight = 8 * factor; - - drawStringScaled(str, fr, x - newLen / 2, y - fontHeight / 2, shadow, colour, factor); - } - - public static void renderToolTip( - ItemStack stack, - int mouseX, - int mouseY, - int screenWidth, - int screenHeight, - FontRenderer fontStd - ) { - List<String> list = stack.getTooltip( - Minecraft.getMinecraft().thePlayer, - Minecraft.getMinecraft().gameSettings.advancedItemTooltips - ); - - for (int i = 0; i < list.size(); ++i) { - if (i == 0) { - list.set(i, stack.getRarity().rarityColor + list.get(i)); - } else { - list.set(i, EnumChatFormatting.GRAY + list.get(i)); - } - } - - FontRenderer font = stack.getItem().getFontRenderer(stack); - drawHoveringText(list, mouseX, mouseY, screenWidth, screenHeight, -1, font == null ? fontStd : font); - } - - public static void drawHoveringText( - List<String> textLines, - final int mouseX, - final int mouseY, - final int screenWidth, - final int screenHeight, - final int maxTextWidth, - FontRenderer font - ) { - if (!textLines.isEmpty()) { - GlStateManager.disableRescaleNormal(); - RenderHelper.disableStandardItemLighting(); - GlStateManager.disableLighting(); - GlStateManager.disableDepth(); - int tooltipTextWidth = 0; - - for (String textLine : textLines) { - int textLineWidth = font.getStringWidth(textLine); - - if (textLineWidth > tooltipTextWidth) { - tooltipTextWidth = textLineWidth; - } - } - - boolean needsWrap = false; - - int titleLinesCount = 1; - int tooltipX = mouseX + 12; - if (tooltipX + tooltipTextWidth + 4 > screenWidth) { - tooltipX = mouseX - 16 - tooltipTextWidth; - if (tooltipX < 4) // if the tooltip doesn't fit on the screen - { - if (mouseX > screenWidth / 2) { - tooltipTextWidth = mouseX - 12 - 8; - } else { - tooltipTextWidth = screenWidth - 16 - mouseX; - } - needsWrap = true; - } - } - - if (maxTextWidth > 0 && tooltipTextWidth > maxTextWidth) { - tooltipTextWidth = maxTextWidth; - needsWrap = true; - } - - if (needsWrap) { - int wrappedTooltipWidth = 0; - List<String> wrappedTextLines = new ArrayList<>(); - for (int i = 0; i < textLines.size(); i++) { - String textLine = textLines.get(i); - List<String> wrappedLine = font.listFormattedStringToWidth(textLine, tooltipTextWidth); - if (i == 0) { - titleLinesCount = wrappedLine.size(); - } - - for (String line : wrappedLine) { - int lineWidth = font.getStringWidth(line); - if (lineWidth > wrappedTooltipWidth) { - wrappedTooltipWidth = lineWidth; - } - wrappedTextLines.add(line); - } - } - tooltipTextWidth = wrappedTooltipWidth; - textLines = wrappedTextLines; - - if (mouseX > screenWidth / 2) { - tooltipX = mouseX - 16 - tooltipTextWidth; - } else { - tooltipX = mouseX + 12; - } - } - - int tooltipY = mouseY - 12; - int tooltipHeight = 8; - - if (textLines.size() > 1) { - tooltipHeight += (textLines.size() - 1) * 10; - if (textLines.size() > titleLinesCount) { - tooltipHeight += 2; // gap between title lines and next lines - } - } - - if (tooltipY + tooltipHeight + 6 > screenHeight) { - tooltipY = screenHeight - tooltipHeight - 6; - } - - final int zLevel = 300; - final int backgroundColor = 0xF0100010; - GuiRenderUtils.drawGradientRect( - zLevel, - tooltipX - 3, - tooltipY - 4, - tooltipX + tooltipTextWidth + 3, - tooltipY - 3, - backgroundColor, - backgroundColor - ); - GuiRenderUtils.drawGradientRect( - zLevel, - tooltipX - 3, - tooltipY + tooltipHeight + 3, - tooltipX + tooltipTextWidth + 3, - tooltipY + tooltipHeight + 4, - backgroundColor, - backgroundColor - ); - GuiRenderUtils.drawGradientRect( - zLevel, - tooltipX - 3, - tooltipY - 3, - tooltipX + tooltipTextWidth + 3, - tooltipY + tooltipHeight + 3, - backgroundColor, - backgroundColor - ); - GuiRenderUtils.drawGradientRect( - zLevel, - tooltipX - 4, - tooltipY - 3, - tooltipX - 3, - tooltipY + tooltipHeight + 3, - backgroundColor, - backgroundColor - ); - GuiRenderUtils.drawGradientRect( - zLevel, - tooltipX + tooltipTextWidth + 3, - tooltipY - 3, - tooltipX + tooltipTextWidth + 4, - tooltipY + tooltipHeight + 3, - backgroundColor, - backgroundColor - ); - final int borderColorStart = 0x505000FF; - final int borderColorEnd = (borderColorStart & 0xFEFEFE) >> 1 | borderColorStart & 0xFF000000; - GuiRenderUtils.drawGradientRect( - zLevel, - tooltipX - 3, - tooltipY - 3 + 1, - tooltipX - 3 + 1, - tooltipY + tooltipHeight + 3 - 1, - borderColorStart, - borderColorEnd - ); - GuiRenderUtils.drawGradientRect( - zLevel, - tooltipX + tooltipTextWidth + 2, - tooltipY - 3 + 1, - tooltipX + tooltipTextWidth + 3, - tooltipY + tooltipHeight + 3 - 1, - borderColorStart, - borderColorEnd - ); - GuiRenderUtils.drawGradientRect( - zLevel, - tooltipX - 3, - tooltipY - 3, - tooltipX + tooltipTextWidth + 3, - tooltipY - 3 + 1, - borderColorStart, - borderColorStart - ); - GuiRenderUtils.drawGradientRect( - zLevel, - tooltipX - 3, - tooltipY + tooltipHeight + 2, - tooltipX + tooltipTextWidth + 3, - tooltipY + tooltipHeight + 3, - borderColorEnd, - borderColorEnd - ); - - for (int lineNumber = 0; lineNumber < textLines.size(); ++lineNumber) { - String line = textLines.get(lineNumber); - font.drawStringWithShadow(line, (float) tooltipX, (float) tooltipY, -1); - - if (lineNumber + 1 == titleLinesCount) { - tooltipY += 2; - } - - tooltipY += 10; - } - - GlStateManager.enableLighting(); - GlStateManager.enableDepth(); - RenderHelper.enableStandardItemLighting(); - GlStateManager.enableRescaleNormal(); - } - GlStateManager.disableLighting(); - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Ashfang.java b/src/main/java/at/hannibal2/skyhanni/config/features/Ashfang.java index fb4d868db..180e80ed7 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Ashfang.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Ashfang.java @@ -1,10 +1,10 @@ package at.hannibal2.skyhanni.config.features; import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorBoolean; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorColour; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; +import io.github.moulberry.moulconfig.annotations.ConfigEditorColour; +import io.github.moulberry.moulconfig.annotations.ConfigOption; public class Ashfang { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Bazaar.java b/src/main/java/at/hannibal2/skyhanni/config/features/Bazaar.java index f592642a2..98a0d0852 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Bazaar.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Bazaar.java @@ -1,9 +1,9 @@ package at.hannibal2.skyhanni.config.features; import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorBoolean; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; +import io.github.moulberry.moulconfig.annotations.ConfigOption; public class Bazaar { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Bingo.java b/src/main/java/at/hannibal2/skyhanni/config/features/Bingo.java index c3c6f6100..0d49786af 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Bingo.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Bingo.java @@ -1,11 +1,9 @@ package at.hannibal2.skyhanni.config.features; import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigAccordionId; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorAccordion; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorBoolean; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.Overlay; +import io.github.moulberry.moulconfig.annotations.*; public class Bingo { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Chat.java b/src/main/java/at/hannibal2/skyhanni/config/features/Chat.java index b9f83a887..c198b5bc3 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Chat.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Chat.java @@ -1,7 +1,7 @@ package at.hannibal2.skyhanni.config.features; -import at.hannibal2.skyhanni.config.core.config.annotations.*; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.*; import org.lwjgl.input.Keyboard; public class Chat { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/CommandsFeatures.java b/src/main/java/at/hannibal2/skyhanni/config/features/CommandsFeatures.java index 385f471d7..34c2d9dcd 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/CommandsFeatures.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/CommandsFeatures.java @@ -1,8 +1,8 @@ package at.hannibal2.skyhanni.config.features; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorBoolean; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; +import io.github.moulberry.moulconfig.annotations.ConfigOption; public class CommandsFeatures { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/DamageIndicator.java b/src/main/java/at/hannibal2/skyhanni/config/features/DamageIndicator.java index a491090d4..966ece63c 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/DamageIndicator.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/DamageIndicator.java @@ -1,10 +1,10 @@ package at.hannibal2.skyhanni.config.features; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorBoolean; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorDraggableList; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorDropdown; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; +import io.github.moulberry.moulconfig.annotations.ConfigEditorDraggableList; +import io.github.moulberry.moulconfig.annotations.ConfigEditorDropdown; +import io.github.moulberry.moulconfig.annotations.ConfigOption; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/DevData.java b/src/main/java/at/hannibal2/skyhanni/config/features/DevData.java index 0f2abb6d3..74711781c 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/DevData.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/DevData.java @@ -1,11 +1,9 @@ package at.hannibal2.skyhanni.config.features; import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigAccordionId; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorAccordion; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorBoolean; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.Overlay; +import io.github.moulberry.moulconfig.annotations.*; public class DevData { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Diana.java b/src/main/java/at/hannibal2/skyhanni/config/features/Diana.java index 072ac2fba..deac9d9c3 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Diana.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Diana.java @@ -1,9 +1,9 @@ package at.hannibal2.skyhanni.config.features; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorBoolean; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorKeybind; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; +import io.github.moulberry.moulconfig.annotations.ConfigEditorKeybind; +import io.github.moulberry.moulconfig.annotations.ConfigOption; import org.lwjgl.input.Keyboard; public class Diana { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Dungeon.java b/src/main/java/at/hannibal2/skyhanni/config/features/Dungeon.java index 783ef8f4a..7b10030ad 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Dungeon.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Dungeon.java @@ -1,11 +1,11 @@ package at.hannibal2.skyhanni.config.features; import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigAccordionId; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorAccordion; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorBoolean; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.ConfigAccordionId; +import io.github.moulberry.moulconfig.annotations.ConfigEditorAccordion; +import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; +import io.github.moulberry.moulconfig.annotations.ConfigOption; public class Dungeon { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Fishing.java b/src/main/java/at/hannibal2/skyhanni/config/features/Fishing.java index 236351ce8..55b3d8f22 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Fishing.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Fishing.java @@ -1,8 +1,8 @@ package at.hannibal2.skyhanni.config.features; import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.config.core.config.annotations.*; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.*; public class Fishing { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/GUI.java b/src/main/java/at/hannibal2/skyhanni/config/features/GUI.java index 5d223fb96..eba1feea8 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/GUI.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/GUI.java @@ -1,10 +1,10 @@ package at.hannibal2.skyhanni.config.features; -import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorButton; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorKeybind; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; +import at.hannibal2.skyhanni.data.GuiEditManager; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.ConfigEditorButton; +import io.github.moulberry.moulconfig.annotations.ConfigEditorKeybind; +import io.github.moulberry.moulconfig.annotations.ConfigOption; import org.lwjgl.input.Keyboard; public class GUI { @@ -14,10 +14,9 @@ public class GUI { desc = "Change the position of SkyHanni's overlays" ) @ConfigEditorButton( - runnableId = "editGuiLocations", buttonText = "Edit" ) - public Position positions = new Position(-1, -1); + public Runnable positions = GuiEditManager::openGuiEditor; @Expose @ConfigOption( diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java b/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java index dd78c3095..67f0decca 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java @@ -1,8 +1,9 @@ package at.hannibal2.skyhanni.config.features; import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.config.core.config.annotations.*; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.*; +import net.minecraft.client.Minecraft; import org.lwjgl.input.Keyboard; import java.util.ArrayList; @@ -251,7 +252,7 @@ public class Garden { @Expose @ConfigOption( name = "Always On", - desc = "Show the Best Display always while on the garden.") + desc = "Show the Best Display always while on the ") @ConfigEditorBoolean @ConfigAccordionId(id = 7) public boolean cropMilestoneBestAlwaysOn = false; @@ -307,20 +308,39 @@ public class Garden { public boolean keybind = false; @Expose - @ConfigOption(name = "Enabled", desc = "Use custom keybinds while holding a farming tool or daedalus axe in the garden. §cOnly updates after scrolling in the hotbar.") + @ConfigOption(name = "Enabled", desc = "Use custom keybinds while holding a farming tool or daedalus axe in the §cOnly updates after scrolling in the hotbar.") @ConfigEditorBoolean @ConfigAccordionId(id = 8) public boolean keyBindEnabled = false; @ConfigOption(name = "Disable All", desc = "Disable all keys.") - @ConfigEditorButton(runnableId = "gardenKeyBindPresetDisabled", buttonText = "Disable") + @ConfigEditorButton(buttonText = "Disable") @ConfigAccordionId(id = 8) - public int keyBindPresetDisable = 0; + public Runnable keyBindPresetDisable = () -> { + keyBindAttack = Keyboard.KEY_NONE; + keyBindLeft = Keyboard.KEY_NONE; + keyBindRight = Keyboard.KEY_NONE; + keyBindForward = Keyboard.KEY_NONE; + keyBindBack = Keyboard.KEY_NONE; + keyBindJump = Keyboard.KEY_NONE; + keyBindSneak = Keyboard.KEY_NONE; + + Minecraft.getMinecraft().thePlayer.closeScreen(); + }; @ConfigOption(name = "Set Default", desc = "Reset all keys to default.") - @ConfigEditorButton(runnableId = "gardenKeyBindPresetDefault", buttonText = "Default") + @ConfigEditorButton(buttonText = "Default") @ConfigAccordionId(id = 8) - public int keyBindPresetDefault = 0; + public Runnable keyBindPresetDefault = ()-> { + keyBindAttack = -100; + keyBindLeft = Keyboard.KEY_A; + keyBindRight = Keyboard.KEY_D; + keyBindForward = Keyboard.KEY_W; + keyBindBack = Keyboard.KEY_S; + keyBindJump = Keyboard.KEY_SPACE; + keyBindSneak = Keyboard.KEY_LSHIFT; + Minecraft.getMinecraft().thePlayer.closeScreen(); + }; @Expose @ConfigOption(name = "Attack", desc = "") diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Inventory.java b/src/main/java/at/hannibal2/skyhanni/config/features/Inventory.java index 65ad96900..f157b3554 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Inventory.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Inventory.java @@ -1,7 +1,7 @@ package at.hannibal2.skyhanni.config.features; -import at.hannibal2.skyhanni.config.core.config.annotations.*; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.*; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/ItemAbilities.java b/src/main/java/at/hannibal2/skyhanni/config/features/ItemAbilities.java index 11feed3d1..0955081dd 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/ItemAbilities.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/ItemAbilities.java @@ -1,7 +1,7 @@ package at.hannibal2.skyhanni.config.features; -import at.hannibal2.skyhanni.config.core.config.annotations.*; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.*; public class ItemAbilities { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/MarkedPlayers.java b/src/main/java/at/hannibal2/skyhanni/config/features/MarkedPlayers.java index 7bff63e95..89d5a624c 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/MarkedPlayers.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/MarkedPlayers.java @@ -1,8 +1,10 @@ package at.hannibal2.skyhanni.config.features; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorBoolean; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; +import at.hannibal2.skyhanni.features.misc.MarkedPlayerManager; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; +import io.github.moulberry.moulconfig.annotations.ConfigOption; +import io.github.moulberry.moulconfig.observer.Property; public class MarkedPlayers { @@ -16,8 +18,7 @@ public class MarkedPlayers { @ConfigEditorBoolean public boolean highlightInChat = true; - @Expose @ConfigOption(name = "Mark Own Name", desc = "Mark own player name.") - @ConfigEditorBoolean(runnableId = "markOwnPlayer") - public boolean markOwnName = false; + @ConfigEditorBoolean() + public Property<Boolean> markOwnName = Property.of(false); } diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Minions.java b/src/main/java/at/hannibal2/skyhanni/config/features/Minions.java index cd721dd8d..03022c08f 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Minions.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Minions.java @@ -1,8 +1,8 @@ package at.hannibal2.skyhanni.config.features; import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.config.core.config.annotations.*; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.*; public class Minions { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Misc.java b/src/main/java/at/hannibal2/skyhanni/config/features/Misc.java index 8e59cb297..3ef26c89b 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Misc.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Misc.java @@ -1,11 +1,12 @@ package at.hannibal2.skyhanni.config.features; import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigAccordionId; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorAccordion; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorBoolean; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.ConfigAccordionId; +import io.github.moulberry.moulconfig.annotations.ConfigEditorAccordion; +import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; +import io.github.moulberry.moulconfig.annotations.ConfigOption; +import io.github.moulberry.moulconfig.observer.Property; public class Misc { @@ -50,21 +51,21 @@ public class Misc { @Expose @ConfigOption(name = "Hide Armor", desc = "Hide other players' armor.") - @ConfigEditorBoolean(runnableId = "hideArmor") + @ConfigEditorBoolean() @ConfigAccordionId(id = 3) - public boolean hideArmorEnabled = false; + public Property<Boolean> hideArmorEnabled = Property.of(false); @Expose @ConfigOption(name = "Own Armor", desc = "Hide your own armor.") - @ConfigEditorBoolean(runnableId = "hideArmor") + @ConfigEditorBoolean() @ConfigAccordionId(id = 3) - public boolean hideArmorOwn = true; + public Property<Boolean> hideArmorOwn = Property.of(true); @Expose @ConfigOption(name = "Only Helmet", desc = "Only hide the helmet.") - @ConfigEditorBoolean(runnableId = "hideArmor") + @ConfigEditorBoolean() @ConfigAccordionId(id = 3) - public boolean hideArmorOnlyHelmet = false; + public Property<Boolean> hideArmorOnlyHelmet = Property.of(false); @Expose @ConfigOption(name = "Damage Splash", desc = "") diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Mobs.java b/src/main/java/at/hannibal2/skyhanni/config/features/Mobs.java index 366cbc849..fbf467e31 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Mobs.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Mobs.java @@ -1,10 +1,10 @@ package at.hannibal2.skyhanni.config.features; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigAccordionId; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorAccordion; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorBoolean; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.ConfigAccordionId; +import io.github.moulberry.moulconfig.annotations.ConfigEditorAccordion; +import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; +import io.github.moulberry.moulconfig.annotations.ConfigOption; public class Mobs { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Slayer.java b/src/main/java/at/hannibal2/skyhanni/config/features/Slayer.java index e9c2375c4..0338f713c 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Slayer.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Slayer.java @@ -1,7 +1,7 @@ package at.hannibal2.skyhanni.config.features; -import at.hannibal2.skyhanni.config.core.config.annotations.*; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.*; public class Slayer { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Summonings.java b/src/main/java/at/hannibal2/skyhanni/config/features/Summonings.java index 8a1061bad..6c38e1f50 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/Summonings.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/Summonings.java @@ -1,11 +1,11 @@ package at.hannibal2.skyhanni.config.features; import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigAccordionId; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorAccordion; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigEditorBoolean; -import at.hannibal2.skyhanni.config.core.config.annotations.ConfigOption; import com.google.gson.annotations.Expose; +import io.github.moulberry.moulconfig.annotations.ConfigAccordionId; +import io.github.moulberry.moulconfig.annotations.ConfigEditorAccordion; +import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; +import io.github.moulberry.moulconfig.annotations.ConfigOption; public class Summonings { diff --git a/src/main/java/at/hannibal2/skyhanni/data/SendTitleHelper.kt b/src/main/java/at/hannibal2/skyhanni/data/SendTitleHelper.kt index 502bc2023..5b65bfad3 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/SendTitleHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/SendTitleHelper.kt @@ -1,7 +1,7 @@ package at.hannibal2.skyhanni.data -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils import at.hannibal2.skyhanni.events.GuiRenderEvent +import io.github.moulberry.moulconfig.internal.TextRenderUtils import net.minecraft.client.Minecraft import net.minecraft.client.gui.ScaledResolution import net.minecraft.client.renderer.GlStateManager diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCustomKeybinds.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCustomKeybinds.kt index 26b3c7abf..4e24cf988 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCustomKeybinds.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCustomKeybinds.kt @@ -1,10 +1,10 @@ package at.hannibal2.skyhanni.features.garden import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.core.config.KeybindHelper import at.hannibal2.skyhanni.config.features.Garden import at.hannibal2.skyhanni.events.GardenToolChangeEvent import at.hannibal2.skyhanni.mixins.transformers.AccessorKeyBinding +import io.github.moulberry.moulconfig.internal.KeybindHelper import net.minecraft.client.Minecraft import net.minecraft.client.settings.KeyBinding import net.minecraftforge.event.world.WorldEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/ButtonOnPause.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/ButtonOnPause.kt index d54cd7225..c28119857 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/ButtonOnPause.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/ButtonOnPause.kt @@ -1,8 +1,7 @@ package at.hannibal2.skyhanni.features.misc import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.ConfigEditor -import at.hannibal2.skyhanni.config.core.GuiScreenElementWrapper +import at.hannibal2.skyhanni.config.ConfigGuiManager import at.hannibal2.skyhanni.utils.LorenzUtils import net.minecraft.client.gui.GuiButton import net.minecraft.client.gui.GuiIngameMenu @@ -17,11 +16,7 @@ class ButtonOnPause { if (!LorenzUtils.isHyPixel) return if (SkyHanniMod.feature.misc.configButtonOnPause && event.gui is GuiIngameMenu && event.button.id == buttonId) { - SkyHanniMod.screenToOpen = GuiScreenElementWrapper( - ConfigEditor( - SkyHanniMod.feature - ) - ) + ConfigGuiManager.openConfigGui() } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/HideArmor.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/HideArmor.kt index c3fe0d509..0e252b5ed 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/HideArmor.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/HideArmor.kt @@ -1,8 +1,10 @@ package at.hannibal2.skyhanni.features.misc import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.PacketEvent import at.hannibal2.skyhanni.utils.LorenzUtils +import io.github.moulberry.moulconfig.observer.Observer import net.minecraft.client.Minecraft import net.minecraft.client.entity.EntityOtherPlayerMP import net.minecraft.client.entity.EntityPlayerSP @@ -27,7 +29,7 @@ class HideArmor { fixOtherArmor() - if (!SkyHanniMod.feature.misc.hideArmorEnabled) return + if (!SkyHanniMod.feature.misc.hideArmorEnabled.get()) return val currentScreen = Minecraft.getMinecraft().currentScreen if (currentScreen == null || currentScreen !is GuiInventory) { @@ -45,6 +47,15 @@ class HideArmor { } } + @SubscribeEvent + fun onConfigLoaded(event: ConfigLoadEvent) { + val observer = Observer<Boolean> { a, b -> updateArmor() } + SkyHanniMod.feature.misc.hideArmorEnabled.whenChanged(observer) + SkyHanniMod.feature.misc.hideArmorOwn.whenChanged(observer) + SkyHanniMod.feature.misc.hideArmorOnlyHelmet.whenChanged(observer) + } + + // Since S04PacketEntityEquipment gets sent before the entity is fully loaded, I need to remove the armor later private fun fixOtherArmor() { for (entity in Minecraft.getMinecraft().theWorld.loadedEntityList) { @@ -54,10 +65,10 @@ class HideArmor { if (entityId !in laterCheck) continue laterCheck.remove(entityId) - if (SkyHanniMod.feature.misc.hideArmorEnabled) { + if (SkyHanniMod.feature.misc.hideArmorEnabled.get()) { val armorInventory = entity.inventory.armorInventory for ((equipmentSlot, _) in armorInventory.withIndex()) { - if (!SkyHanniMod.feature.misc.hideArmorOnlyHelmet || equipmentSlot == 3) { + if (!SkyHanniMod.feature.misc.hideArmorOnlyHelmet.get() || equipmentSlot == 3) { armorInventory[equipmentSlot] = null } } @@ -86,9 +97,9 @@ class HideArmor { val currentScreen = Minecraft.getMinecraft().currentScreen if (currentScreen == null || currentScreen !is GuiInventory) { - if (SkyHanniMod.feature.misc.hideArmorEnabled) { - if (SkyHanniMod.feature.misc.hideArmorOwn) { - if (!SkyHanniMod.feature.misc.hideArmorOnlyHelmet || armorSlot == 3) { + if (SkyHanniMod.feature.misc.hideArmorEnabled.get()) { + if (SkyHanniMod.feature.misc.hideArmorOwn.get()) { + if (!SkyHanniMod.feature.misc.hideArmorOnlyHelmet.get() || armorSlot == 3) { packet.itemStacks[slot] = null } } @@ -115,9 +126,9 @@ class HideArmor { val currentScreen = Minecraft.getMinecraft().currentScreen if (currentScreen == null || currentScreen !is GuiInventory) { - if (SkyHanniMod.feature.misc.hideArmorEnabled) { - if (SkyHanniMod.feature.misc.hideArmorOwn) { - if (!SkyHanniMod.feature.misc.hideArmorOnlyHelmet || armorSlot == 3) { + if (SkyHanniMod.feature.misc.hideArmorEnabled.get()) { + if (SkyHanniMod.feature.misc.hideArmorOwn.get()) { + if (!SkyHanniMod.feature.misc.hideArmorOnlyHelmet.get() || armorSlot == 3) { event.isCanceled = true } } @@ -146,8 +157,8 @@ class HideArmor { // set item in cache armor[equipmentSlot] = packet.itemStack - if (SkyHanniMod.feature.misc.hideArmorEnabled) { - if (!SkyHanniMod.feature.misc.hideArmorOnlyHelmet || equipmentSlot == 3) { + if (SkyHanniMod.feature.misc.hideArmorEnabled.get()) { + if (!SkyHanniMod.feature.misc.hideArmorOnlyHelmet.get() || equipmentSlot == 3) { event.isCanceled = true } } @@ -177,7 +188,7 @@ class HideArmor { changeArmor(entity, it) } - if (SkyHanniMod.feature.misc.hideArmorEnabled) { + if (SkyHanniMod.feature.misc.hideArmorEnabled.get()) { changeArmor(entity, null) } } @@ -195,13 +206,13 @@ class HideArmor { return } - if (!SkyHanniMod.feature.misc.hideArmorOwn) { + if (!SkyHanniMod.feature.misc.hideArmorOwn.get()) { if (entity is EntityPlayerSP) { return } } - if (!SkyHanniMod.feature.misc.hideArmorOnlyHelmet) { + if (!SkyHanniMod.feature.misc.hideArmorOnlyHelmet.get()) { current[0] = null current[1] = null current[2] = null diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt index ec722eed4..8a3299561 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.features.misc import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.RenderMobColoredEvent import at.hannibal2.skyhanni.events.ResetEntityHurtEvent import at.hannibal2.skyhanni.events.withAlpha @@ -59,10 +60,14 @@ class MarkedPlayerManager { fun isMarkedPlayer(player: String): Boolean = player.lowercase() in playerNamesToMark - fun toggleOwn() { - val ownName = SkyHanniMod.feature.markedPlayers.markOwnName + } + + + @SubscribeEvent + fun onConfigLoad(event: ConfigLoadEvent) { + SkyHanniMod.feature.markedPlayers.markOwnName.whenChanged { old, new -> val name = Minecraft.getMinecraft().thePlayer.name - if (ownName) { + if (new) { if (!playerNamesToMark.contains(name)) { playerNamesToMark.add(name) } @@ -110,7 +115,7 @@ class MarkedPlayerManager { if (Minecraft.getMinecraft().thePlayer == null) return markedPlayers.clear() - if (SkyHanniMod.feature.markedPlayers.markOwnName) { + if (SkyHanniMod.feature.markedPlayers.markOwnName.get()) { val name = Minecraft.getMinecraft().thePlayer.name if (!playerNamesToMark.contains(name)) { playerNamesToMark.add(name) diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt index 18659e587..769b1a962 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt @@ -1,7 +1,6 @@ package at.hannibal2.skyhanni.features.slayer.blaze import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils import at.hannibal2.skyhanni.data.ClickType import at.hannibal2.skyhanni.events.BlockClickEvent import at.hannibal2.skyhanni.events.GuiRenderEvent @@ -14,6 +13,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NumberUtil.roundToPrecision import at.hannibal2.skyhanni.utils.StringUtils.matchRegex import at.hannibal2.skyhanni.utils.getLorenzVec +import io.github.moulberry.moulconfig.internal.TextRenderUtils import net.minecraft.client.Minecraft import net.minecraft.client.gui.ScaledResolution import net.minecraft.client.renderer.GlStateManager diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt index 1d24ff1e9..491b73d31 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt @@ -1,11 +1,11 @@ package at.hannibal2.skyhanni.utils import at.hannibal2.skyhanni.config.core.config.Position -import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils.drawStringScaled import at.hannibal2.skyhanni.data.GuiEditManager import at.hannibal2.skyhanni.data.GuiEditManager.Companion.getAbsX import at.hannibal2.skyhanni.data.GuiEditManager.Companion.getAbsY import at.hannibal2.skyhanni.utils.NEUItems.renderOnScreen +import io.github.moulberry.moulconfig.internal.TextRenderUtils import net.minecraft.client.Minecraft import net.minecraft.client.gui.FontRenderer import net.minecraft.client.gui.Gui @@ -665,7 +665,7 @@ object RenderUtils { val strLen = fr.getStringWidth(str) var factor = len / strLen.toFloat() factor = Math.min(1f, factor) - drawStringScaled(str, fr, x, y, shadow, colour, factor) + TextRenderUtils.drawStringScaled(str, fr, x, y, shadow, colour, factor) } fun RenderWorldLastEvent.drawDynamicText( |