diff --git a/build.gradle.kts b/build.gradle.kts index 091b14f..6396976 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,7 +21,7 @@ labyMod { author = "RappyTV" description = "Stops you from using your currently used tool when its almost destroyed." minecraftVersion = "1.8<1.20.4" - version = System.getenv().getOrDefault("VERSION", "1.3.4") + version = System.getenv().getOrDefault("VERSION", "1.4.0") } minecraft { diff --git a/core/src/main/java/com/rappytv/toolwarn/TbwAddon.java b/core/src/main/java/com/rappytv/toolwarn/TbwAddon.java index 0a77a26..7050b28 100644 --- a/core/src/main/java/com/rappytv/toolwarn/TbwAddon.java +++ b/core/src/main/java/com/rappytv/toolwarn/TbwAddon.java @@ -2,6 +2,7 @@ import com.rappytv.toolwarn.config.TbwConfiguration; import com.rappytv.toolwarn.core.generated.DefaultReferenceStorage; +import com.rappytv.toolwarn.listener.ConfigMigrationListener; import com.rappytv.toolwarn.listener.GameTickListener; import com.rappytv.toolwarn.util.ITbwSounds; import net.labymod.api.Laby; @@ -19,10 +20,13 @@ public class TbwAddon extends LabyAddon { public static Component prefix; private static ITbwSounds sounds; + private static TbwAddon instance; @Override protected void preConfigurationLoad() { - Laby.references().revisionRegistry().register(new SimpleRevision("toolwarn", new SemanticVersion("1.4.3"), "2024-01-26")); + Laby.references().revisionRegistry().register(new SimpleRevision("toolwarn", new SemanticVersion("1.3.4"), "2024-01-26")); + Laby.references().revisionRegistry().register(new SimpleRevision("toolwarn", new SemanticVersion("1.4.0"), "2024-03-14")); + registerListener(new ConfigMigrationListener()); } @Override @@ -32,10 +36,15 @@ protected void enable() { .append(Component.text("» ", NamedTextColor.DARK_GRAY)); sounds = ((DefaultReferenceStorage) this.referenceStorageAccessor()).iTbwSounds(); registerSettingCategory(); + instance = this; registerListener(new GameTickListener(this)); } + public static TbwAddon get() { + return instance; + } + public static ITbwSounds getSounds() { return sounds; } diff --git a/core/src/main/java/com/rappytv/toolwarn/config/TbwConfiguration.java b/core/src/main/java/com/rappytv/toolwarn/config/TbwConfiguration.java index 02e6e4a..59ebefd 100644 --- a/core/src/main/java/com/rappytv/toolwarn/config/TbwConfiguration.java +++ b/core/src/main/java/com/rappytv/toolwarn/config/TbwConfiguration.java @@ -1,105 +1,60 @@ package com.rappytv.toolwarn.config; -import com.rappytv.toolwarn.config.subconfig.TbwSoundSubConfig; +import com.rappytv.toolwarn.ui.ToolConfigActivity; +import com.rappytv.toolwarn.util.WarnTool; import net.labymod.api.addon.AddonConfig; -import net.labymod.api.client.gui.screen.widget.widgets.input.SliderWidget.SliderSetting; +import net.labymod.api.client.gui.screen.activity.Activity; +import net.labymod.api.client.gui.screen.widget.widgets.activity.settings.ActivitySettingWidget.ActivitySetting; import net.labymod.api.client.gui.screen.widget.widgets.input.SwitchWidget.SwitchSetting; import net.labymod.api.configuration.loader.annotation.ConfigName; +import net.labymod.api.configuration.loader.annotation.Exclude; import net.labymod.api.configuration.loader.annotation.IntroducedIn; import net.labymod.api.configuration.loader.annotation.SpriteSlot; import net.labymod.api.configuration.loader.annotation.SpriteTexture; -import net.labymod.api.configuration.loader.annotation.VersionCompatibility; import net.labymod.api.configuration.loader.property.ConfigProperty; import net.labymod.api.configuration.settings.annotation.SettingSection; +import net.labymod.api.util.MethodOrder; +import java.util.ArrayList; +import java.util.List; @ConfigName("settings") @SpriteTexture(value = "settings") public class TbwConfiguration extends AddonConfig { - @SwitchSetting @SpriteSlot(size = 32) - private final ConfigProperty enabled = new ConfigProperty<>(true); - @SettingSection("general") @SwitchSetting - @SpriteSlot(size = 32, x = 1) - private final ConfigProperty openChat = new ConfigProperty<>(true); - @SwitchSetting - @SpriteSlot(size = 32, x = 3) - private final ConfigProperty lastHit = new ConfigProperty<>(true); + private final ConfigProperty enabled = new ConfigProperty<>(true); - @SettingSection("sounds") - @SpriteSlot(size = 32, y = 1) - private final TbwSoundSubConfig sounds = new TbwSoundSubConfig(); + @Exclude + private final List tools = new ArrayList<>(); @SettingSection("tools") - @SliderSetting(steps = 1, min = 1, max = 25) - @SpriteSlot(size = 32, y = 2) - private final ConfigProperty swordPercentage = new ConfigProperty<>(5); - @SliderSetting(steps = 1, min = 1, max = 25) - @SpriteSlot(size = 32, y = 2, x = 1) - private final ConfigProperty pickaxePercentage = new ConfigProperty<>(5); - @SliderSetting(steps = 1, min = 1, max = 25) - @SpriteSlot(size = 32, y = 2, x = 2) - private final ConfigProperty axePercentage = new ConfigProperty<>(5); - @SliderSetting(steps = 1, min = 1, max = 25) - @SpriteSlot(size = 32, y = 2, x = 3) - private final ConfigProperty shovelPercentage = new ConfigProperty<>(5); - @SliderSetting(steps = 1, min = 1, max = 25) - @SpriteSlot(size = 32, y = 3) - @VersionCompatibility("1.14<*") - @IntroducedIn(namespace = "globaltags", value = "1.4.3") - private final ConfigProperty crossbowPercentage = new ConfigProperty<>(5); - @SliderSetting(steps = 1, min = 1, max = 25) - @SpriteSlot(size = 32, y = 3, x = 1) - @IntroducedIn(namespace = "globaltags", value = "1.4.3") - private final ConfigProperty lighterPercentage = new ConfigProperty<>(5); - @SliderSetting(steps = 1, min = 1, max = 25) - @SpriteSlot(size = 32, y = 3, x = 2) - @IntroducedIn(namespace = "globaltags", value = "1.4.3") - private final ConfigProperty shearsPercentage = new ConfigProperty<>(5); - @SliderSetting(steps = 1, min = 1, max = 25) - @SpriteSlot(size = 32, y = 3, x = 3) - @VersionCompatibility("1.13<*") - @IntroducedIn(namespace = "globaltags", value = "1.4.3") - private final ConfigProperty tridentPercentage = new ConfigProperty<>(5); + @IntroducedIn(namespace = "toolwarn", value = "1.4.0") + @SpriteSlot(size = 32, x = 1) + @MethodOrder(after = "enabled") + @ActivitySetting + public Activity toolConfig() { + return new ToolConfigActivity(); + } @Override public ConfigProperty enabled() { return enabled; } - public ConfigProperty openChat() { - return openChat; - } - public ConfigProperty lastHit() { - return lastHit; - } - public TbwSoundSubConfig sounds() { - return sounds; + public List getTools() { + return tools; } - - public ConfigProperty swordPercentage() { - return swordPercentage; - } - public ConfigProperty pickAxePercentage() { - return pickaxePercentage; - } - public ConfigProperty axePercentage() { - return axePercentage; - } - public ConfigProperty shovelPercentage() { - return shovelPercentage; - } - public ConfigProperty crossbowPercentage() { - return crossbowPercentage; + public void removeInvalidTools() { + this.tools.removeIf(entry -> + entry.getWarnAt() < 1 + || entry.getWarnAt() > 25 + || entry.getType() == null + ); } - public ConfigProperty lighterPercentage() { - return lighterPercentage; - } - public ConfigProperty shearsPercentage() { - return shearsPercentage; - } - public ConfigProperty tridentPercentage() { - return tridentPercentage; + + @Override + public int getConfigVersion() { + return 2; } } diff --git a/core/src/main/java/com/rappytv/toolwarn/listener/ConfigMigrationListener.java b/core/src/main/java/com/rappytv/toolwarn/listener/ConfigMigrationListener.java new file mode 100644 index 0000000..05e9c38 --- /dev/null +++ b/core/src/main/java/com/rappytv/toolwarn/listener/ConfigMigrationListener.java @@ -0,0 +1,79 @@ +package com.rappytv.toolwarn.listener; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.rappytv.toolwarn.config.TbwConfiguration; +import com.rappytv.toolwarn.util.WarnSound; +import com.rappytv.toolwarn.util.WarnTool; +import com.rappytv.toolwarn.util.WarnTool.Type; +import net.labymod.api.configuration.loader.Config; +import net.labymod.api.event.Subscribe; +import net.labymod.api.event.labymod.config.ConfigurationVersionUpdateEvent; + +@SuppressWarnings("FieldCanBeLocal") +public class ConfigMigrationListener { + + private final Gson gson = new Gson(); + private final int defaultPercentage = 5; + + @Subscribe + public void onConfigVersionUpdate(ConfigurationVersionUpdateEvent event) { + Class configClass = event.getConfigClass(); + int usedVersion = event.getUsedVersion(); + + if(configClass == TbwConfiguration.class) { + if(usedVersion == 1) migrateFromOne(event); + } + } + + private void migrateFromOne(ConfigurationVersionUpdateEvent event) { + JsonObject config = event.getJsonObject(); + if(!config.has("sounds")) return; + + JsonObject sounds = config.get("sounds").getAsJsonObject(); + + WarnSound warnSound = WarnSound.NONE; + WarnSound lastHitSound = WarnSound.NONE; + boolean openChat = true; + boolean lastHitWarn = true; + int sword = defaultPercentage; + int pickaxe = defaultPercentage; + int axe = defaultPercentage; + int shovel = defaultPercentage; + int crossbow = defaultPercentage; + int lighter = defaultPercentage; + int shears = defaultPercentage; + int trident = defaultPercentage; + + try { + warnSound = WarnSound.valueOf(sounds.get("warnSound").getAsString()); + lastHitSound = WarnSound.valueOf(sounds.get("lastHitSound").getAsString()); + openChat = config.get("openChat").getAsBoolean(); + lastHitWarn = config.get("lastHit").getAsBoolean(); + sword = config.get("swordPercentage").getAsInt(); + pickaxe = config.get("pickaxePercentage").getAsInt(); + axe = config.get("axePercentage").getAsInt(); + shovel = config.get("shovelPercentage").getAsInt(); + crossbow = config.get("crossbowPercentage").getAsInt(); + lighter = config.get("lighterPercentage").getAsInt(); + shears = config.get("shearsPercentage").getAsInt(); + trident = config.get("tridentPercentage").getAsInt(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + + JsonArray tools = new JsonArray(); + tools.add(gson.toJsonTree(new WarnTool(Type.SWORD, warnSound, lastHitSound, sword, openChat, lastHitWarn))); + tools.add(gson.toJsonTree(new WarnTool(Type.PICKAXE, warnSound, lastHitSound, pickaxe, openChat, lastHitWarn))); + tools.add(gson.toJsonTree(new WarnTool(Type.AXE, warnSound, lastHitSound, axe, openChat, lastHitWarn))); + tools.add(gson.toJsonTree(new WarnTool(Type.SHOVEL, warnSound, lastHitSound, shovel, openChat, lastHitWarn))); + tools.add(gson.toJsonTree(new WarnTool(Type.CROSSBOW, warnSound, lastHitSound, crossbow, openChat, lastHitWarn))); + tools.add(gson.toJsonTree(new WarnTool(Type.LIGHTER, warnSound, lastHitSound, lighter, openChat, lastHitWarn))); + tools.add(gson.toJsonTree(new WarnTool(Type.SHEARS, warnSound, lastHitSound, shears, openChat, lastHitWarn))); + tools.add(gson.toJsonTree(new WarnTool(Type.TRIDENT, warnSound, lastHitSound, trident, openChat, lastHitWarn))); + + config.add("tools", tools); + event.setJsonObject(config); + } +} diff --git a/core/src/main/java/com/rappytv/toolwarn/listener/GameTickListener.java b/core/src/main/java/com/rappytv/toolwarn/listener/GameTickListener.java index 0e429f2..acf9480 100644 --- a/core/src/main/java/com/rappytv/toolwarn/listener/GameTickListener.java +++ b/core/src/main/java/com/rappytv/toolwarn/listener/GameTickListener.java @@ -2,9 +2,10 @@ import com.rappytv.toolwarn.TbwAddon; import com.rappytv.toolwarn.config.TbwConfiguration; -import com.rappytv.toolwarn.util.ToolType; import com.rappytv.toolwarn.util.Util; import com.rappytv.toolwarn.util.WarnSound; +import com.rappytv.toolwarn.util.WarnTool; +import com.rappytv.toolwarn.util.WarnTool.Type; import net.labymod.api.Laby; import net.labymod.api.client.component.Component; import net.labymod.api.client.component.format.NamedTextColor; @@ -38,51 +39,56 @@ public void onTick(GameTickEvent event) { if(itemStack.getMaximumDamage() == 0) return; if(player.gameMode() != GameMode.SURVIVAL && player.gameMode() != GameMode.ADVENTURE) return; - toolUsed(itemStack, ToolType.getByItem(itemStack)); + checkForWarn(itemStack, Type.getByItem(itemStack)); } - public void toolUsed(ItemStack itemStack, ToolType toolType) { - if(toolType == ToolType.None) return; + private void checkForWarn(ItemStack itemStack, WarnTool.Type type) { + if(type == Type.NONE) return; if(Laby.labyAPI().minecraft().minecraftWindow().isScreenOpened()) return; - int itemWarnInt = (toolType.getWarnPercentage(config) * itemStack.getMaximumDamage()) / 100; int itemUsedInt = itemStack.getMaximumDamage() - itemStack.getCurrentDamageValue(); - if(itemUsedInt == itemWarnInt) { - if(!warns.contains(itemStack)) { - if(this.config.openChat().get()) Laby.labyAPI().minecraft().openChat(""); - Util.msg(Component.translatable("toolwarn.messages.warning", NamedTextColor.RED, Component.text(toolType.getWarnPercentage(config))), true); - warns.add(itemStack); + for(WarnTool tool : config.getTools()) { + if(tool.getType() != type) continue; + int itemWarnInt = (tool.getWarnAt() * itemStack.getMaximumDamage()) / 100; - if(config.sounds().enabled().get() && config.sounds().warnSound().get() != WarnSound.NONE) { - Laby.labyAPI().minecraft().sounds().playSound( - config.sounds().warnSound().get().getResourceLocation(), - 1f, - 1f - ); - } - } - } else if(isLastHit(itemStack)) { - if(!warns.contains(itemStack)) { - if(this.config.openChat().get()) Laby.labyAPI().minecraft().openChat(""); - Util.msg(Component.translatable("toolwarn.messages.lastHit", NamedTextColor.RED), true); - warns.add(itemStack); + if(itemUsedInt == itemWarnInt) { + if(!warns.contains(itemStack)) { + if(tool.openChat()) Laby.labyAPI().minecraft().openChat(""); + Util.msg(Component.translatable( + "toolwarn.messages.warning", + NamedTextColor.RED, + Component.text(tool.getWarnAt()) + ), true); + warns.add(itemStack); - if(config.sounds().enabled().get() && config.sounds().lastHitSound().get() != WarnSound.NONE) { - Laby.labyAPI().minecraft().sounds().playSound( - config.sounds().lastHitSound().get().getResourceLocation(), - 1f, - 1f + if(tool.getSound() != WarnSound.NONE) { + Laby.labyAPI().minecraft().sounds().playSound( + tool.getSound().getResourceLocation(), + 1f, + 1f + ); + } + } + } else if(tool.lastHitWarn() && itemUsedInt <= 1) { + if(!warns.contains(itemStack)) { + if(tool.openChat()) Laby.labyAPI().minecraft().openChat(""); + Util.msg( + Component.translatable("toolwarn.messages.lastHit", NamedTextColor.RED), + true ); + warns.add(itemStack); + if(tool.getLastSound() != WarnSound.NONE) { + Laby.labyAPI().minecraft().sounds().playSound( + tool.getLastSound().getResourceLocation(), + 1f, + 1f + ); + } } + } else { + warns.remove(itemStack); } - } else { - warns.remove(itemStack); } } - - public boolean isLastHit(ItemStack i) { - if (!addon.configuration().lastHit().get()) return false; - return (i.getMaximumDamage() - i.getCurrentDamageValue()) <= 1; - } } diff --git a/core/src/main/java/com/rappytv/toolwarn/ui/ToolConfigActivity.java b/core/src/main/java/com/rappytv/toolwarn/ui/ToolConfigActivity.java new file mode 100644 index 0000000..5eec10d --- /dev/null +++ b/core/src/main/java/com/rappytv/toolwarn/ui/ToolConfigActivity.java @@ -0,0 +1,327 @@ +package com.rappytv.toolwarn.ui; + +import com.rappytv.toolwarn.TbwAddon; +import com.rappytv.toolwarn.util.WarnSound; +import com.rappytv.toolwarn.util.WarnTool; +import com.rappytv.toolwarn.util.WarnTool.Type; +import net.labymod.api.client.gui.mouse.MutableMouse; +import net.labymod.api.client.gui.screen.LabyScreen; +import net.labymod.api.client.gui.screen.Parent; +import net.labymod.api.client.gui.screen.activity.Activity; +import net.labymod.api.client.gui.screen.activity.AutoActivity; +import net.labymod.api.client.gui.screen.activity.Link; +import net.labymod.api.client.gui.screen.activity.Links; +import net.labymod.api.client.gui.screen.key.InputType; +import net.labymod.api.client.gui.screen.key.Key; +import net.labymod.api.client.gui.screen.key.MouseButton; +import net.labymod.api.client.gui.screen.widget.Widget; +import net.labymod.api.client.gui.screen.widget.widgets.ComponentWidget; +import net.labymod.api.client.gui.screen.widget.widgets.DivWidget; +import net.labymod.api.client.gui.screen.widget.widgets.input.ButtonWidget; +import net.labymod.api.client.gui.screen.widget.widgets.input.CheckBoxWidget; +import net.labymod.api.client.gui.screen.widget.widgets.input.CheckBoxWidget.State; +import net.labymod.api.client.gui.screen.widget.widgets.input.SliderWidget; +import net.labymod.api.client.gui.screen.widget.widgets.input.dropdown.DropdownWidget; +import net.labymod.api.client.gui.screen.widget.widgets.layout.FlexibleContentWidget; +import net.labymod.api.client.gui.screen.widget.widgets.layout.ScrollWidget; +import net.labymod.api.client.gui.screen.widget.widgets.layout.list.HorizontalListWidget; +import net.labymod.api.client.gui.screen.widget.widgets.layout.list.VerticalListWidget; +import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings("deprecation") +@Links({@Link("manage.lss"), @Link("config.lss")}) +@AutoActivity +public class ToolConfigActivity extends Activity { + + private final TbwAddon addon; + private final VerticalListWidget toolList; + private final List toolWidgets; + private int sliderValue; + + private ToolWidget selectedTool; + + private ButtonWidget removeButton; + private ButtonWidget editButton; + + private FlexibleContentWidget inputWidget; + + private Action action; + + public ToolConfigActivity() { + this.addon = TbwAddon.get(); + + this.toolWidgets = new ArrayList<>(); + this.addon.configuration().getTools().forEach((tool) -> + this.toolWidgets.add(new ToolWidget(tool)) + ); + + this.toolList = new VerticalListWidget<>() + .addId("tool-list"); + this.toolList.setSelectCallback(nameTagWidget -> { + ToolWidget selectedNameTag = this.toolList.session().getSelectedEntry(); + if (selectedNameTag == null || selectedNameTag.getTool() != nameTagWidget.getTool()) { + this.editButton.setEnabled(true); + this.removeButton.setEnabled(true); + } + }); + + this.toolList.setDoubleClickCallback(nameTagWidget -> this.setAction(Action.EDIT)); + } + + @Override + public void initialize(Parent parent) { + super.initialize(parent); + + FlexibleContentWidget container = new FlexibleContentWidget() + .addId("tool-container"); + for (ToolWidget nameTagWidget : this.toolWidgets) { + this.toolList.addChild(nameTagWidget); + } + this.selectedTool = this.toolList.session().getSelectedEntry(); + + HorizontalListWidget buttons = new HorizontalListWidget() + .addId("overview-button-menu"); + this.editButton = ButtonWidget.i18n("labymod.ui.button.edit", () -> + this.setAction(Action.EDIT) + ); + this.editButton.setEnabled(this.selectedTool != null); + this.removeButton = ButtonWidget.i18n("labymod.ui.button.remove", () -> + this.setAction(Action.REMOVE) + ); + this.removeButton.setEnabled(this.selectedTool != null); + + buttons.addEntry(ButtonWidget.i18n("labymod.ui.button.add", () -> + this.setAction(Action.ADD)) + ); + buttons.addEntry(this.editButton); + buttons.addEntry(this.removeButton); + + container.addFlexibleContent(new ScrollWidget(this.toolList)); + container.addContent(buttons); + this.document().addChild(container); + + if(this.action == null) return; + + Widget overlayWidget = switch (this.action) { + default -> { + ToolWidget newCustomNameTag = new ToolWidget(new WarnTool()); + yield this.initializeManageContainer(newCustomNameTag); + } + case EDIT -> this.initializeManageContainer(this.selectedTool); + case REMOVE -> this.initializeRemoveContainer(this.selectedTool); + }; + + DivWidget manageContainer = new DivWidget() + .addId("manage-container"); + manageContainer.addChild(overlayWidget); + this.document().addChild(manageContainer); + } + + private FlexibleContentWidget initializeRemoveContainer(ToolWidget toolWidget) { + this.inputWidget = new FlexibleContentWidget() + .addId("remove-container"); + + ComponentWidget confirmationWidget = ComponentWidget.i18n("toolwarn.gui.remove") + .addId("remove-confirmation"); + + ToolWidget previewWidget = new ToolWidget(toolWidget.getTool()); + previewWidget.addId("remove-preview"); + + HorizontalListWidget menu = new HorizontalListWidget(); + menu.addId("remove-button-menu"); + + menu.addEntry(ButtonWidget.i18n("labymod.ui.button.remove", () -> { + this.addon.configuration().getTools().remove(toolWidget.getTool()); + this.toolWidgets.remove(toolWidget); + this.toolList.session().setSelectedEntry(null); + this.setAction(null); + })); + menu.addEntry(ButtonWidget.i18n("labymod.ui.button.cancel", () -> this.setAction(null))); + + this.inputWidget.addContent(confirmationWidget); + this.inputWidget.addContent(previewWidget); + this.inputWidget.addContent(menu); + + return this.inputWidget; + } + + private DivWidget initializeManageContainer(ToolWidget toolWidget) { + ButtonWidget doneButton = ButtonWidget.i18n("labymod.ui.button.done"); + + DivWidget inputContainer = new DivWidget() + .addId("input-container"); + + DivWidget typeDiv = new DivWidget() + .addId("type-div"); + + ComponentWidget typeText = ComponentWidget.i18n("toolwarn.gui.type") + .addId("type-name"); + + DropdownWidget typeDropdown = new DropdownWidget<>() + .addId("type-dropdown"); + for(WarnTool.Type type : WarnTool.Type.values()) { + if(type == Type.NONE) continue; + typeDropdown.add(type); + } + typeDropdown.setTranslationKeyPrefix("toolwarn.gui.dropdown.type"); + typeDropdown.setSelected(toolWidget.getTool().getType()); + + typeDiv.addChild(typeText); + typeDiv.addChild(typeDropdown); + + ComponentWidget sliderText = ComponentWidget.i18n("toolwarn.gui.slider") + .addId("slider-name"); + + SliderWidget warnSlider = new SliderWidget(value -> sliderValue = (int) value) + .addId("warn-slider"); + warnSlider.range(1, 25); + warnSlider.setValue(toolWidget.getTool().getWarnAt()); + + DivWidget soundDiv = new DivWidget() + .addId("dropdown-div"); + DivWidget lastSoundDiv = new DivWidget() + .addId("dropdown-div"); + + ComponentWidget soundText = ComponentWidget.i18n("toolwarn.gui.dropdown.warnSound") + .addId("dropdown-name"); + + DropdownWidget soundDropdown = new DropdownWidget<>() + .addId("dropdown-item"); + soundDropdown.setTranslationKeyPrefix("toolwarn.gui.dropdown.sound"); + + ComponentWidget lastSoundText = ComponentWidget.i18n("toolwarn.gui.dropdown.lastSound") + .addId("dropdown-name"); + + DropdownWidget lastSoundDropdown = new DropdownWidget<>() + .addId("dropdown-item"); + lastSoundDropdown.setTranslationKeyPrefix("toolwarn.gui.dropdown.sound"); + + soundDiv.addChild(soundText); + soundDiv.addChild(soundDropdown); + lastSoundDiv.addChild(lastSoundText); + lastSoundDiv.addChild(lastSoundDropdown); + + for(WarnSound sound : WarnSound.values()) { + soundDropdown.add(sound); + lastSoundDropdown.add(sound); + } + soundDropdown.setSelected(toolWidget.getTool().getSound()); + lastSoundDropdown.setSelected(toolWidget.getTool().getLastSound()); + + DivWidget openChatDiv = new DivWidget() + .addId("checkbox-div"); + DivWidget lastHitDiv = new DivWidget() + .addId("checkbox-div"); + + ComponentWidget openChatText = ComponentWidget.i18n("toolwarn.gui.checkbox.openChat") + .addId("checkbox-name"); + + CheckBoxWidget openChatCheck = new CheckBoxWidget() + .addId("checkbox-item"); + openChatCheck.setState(toolWidget.getTool().openChat() ? State.CHECKED : State.UNCHECKED); + + ComponentWidget lastHitText = ComponentWidget.i18n("toolwarn.gui.checkbox.lastHit") + .addId("checkbox-name"); + + CheckBoxWidget lastHitCheck = new CheckBoxWidget() + .addId("checkbox-item"); + lastHitCheck.setState(toolWidget.getTool().lastHitWarn() ? State.CHECKED : State.UNCHECKED); + + openChatDiv.addChild(openChatText); + openChatDiv.addChild(openChatCheck); + lastHitDiv.addChild(lastHitText); + lastHitDiv.addChild(lastHitCheck); + + this.inputWidget = new FlexibleContentWidget(); + this.inputWidget.addId("input-list"); + + HorizontalListWidget dropdownList = new HorizontalListWidget() + .addId("dropdown-list"); + dropdownList.addEntry(soundDiv); + dropdownList.addEntry(lastSoundDiv); + + HorizontalListWidget checkBoxList = new HorizontalListWidget() + .addId("checkbox-list"); + checkBoxList.addEntry(openChatDiv); + checkBoxList.addEntry(lastHitDiv); + + inputWidget.addContent(typeDiv); + inputWidget.addContent(sliderText); + inputWidget.addContent(warnSlider); + inputWidget.addContent(dropdownList); + inputWidget.addContent(checkBoxList); + + HorizontalListWidget buttonList = new HorizontalListWidget() + .addId("edit-button-menu"); + + doneButton.setEnabled(true); + doneButton.setPressable(() -> { + if(!this.toolWidgets.contains(toolWidget)) { + this.toolWidgets.add(toolWidget); + this.toolList.session().setSelectedEntry(toolWidget); + } + + WarnTool tool = toolWidget.getTool(); + tool.setType(typeDropdown.getSelected()); + tool.setWarnAt(sliderValue); + tool.setSound(soundDropdown.getSelected()); + tool.setLastSound(lastSoundDropdown.getSelected()); + tool.setOpenChat(openChatCheck.state() == State.CHECKED); + tool.setLastHitWarn(lastHitCheck.state() == State.CHECKED); + this.addon.configuration().getTools().remove(toolWidget.getTool()); + this.addon.configuration().getTools().add(tool); + this.addon.configuration().removeInvalidTools(); + + toolWidget.setTool(tool); + this.setAction(null); + }); + + buttonList.addEntry(doneButton); + buttonList.addEntry(ButtonWidget.i18n("labymod.ui.button.cancel", () -> this.setAction(null))); + this.inputWidget.addContent(buttonList); + + inputContainer.addChild(this.inputWidget); + return inputContainer; + } + + @Override + public boolean mouseClicked(MutableMouse mouse, MouseButton mouseButton) { + try { + if (this.action != null) { + return this.inputWidget.mouseClicked(mouse, mouseButton); + } + + return super.mouseClicked(mouse, mouseButton); + } finally { + this.selectedTool = this.toolList.session().getSelectedEntry(); + this.removeButton.setEnabled(this.selectedTool != null); + this.editButton.setEnabled(this.selectedTool != null); + } + } + + @Override + public boolean keyPressed(Key key, InputType type) { + if (key.getId() == 256 && this.action != null) { + this.setAction(null); + return true; + } + + return super.keyPressed(key, type); + } + + private void setAction(Action action) { + this.action = action; + this.reload(); + } + + @Override + public @Nullable T renew() { + return null; + } + + private enum Action { + ADD, EDIT, REMOVE + } +} diff --git a/core/src/main/java/com/rappytv/toolwarn/ui/ToolWidget.java b/core/src/main/java/com/rappytv/toolwarn/ui/ToolWidget.java new file mode 100644 index 0000000..0fa91df --- /dev/null +++ b/core/src/main/java/com/rappytv/toolwarn/ui/ToolWidget.java @@ -0,0 +1,48 @@ +package com.rappytv.toolwarn.ui; + +import com.rappytv.toolwarn.util.WarnTool; +import net.labymod.api.client.gui.lss.property.annotation.AutoWidget; +import net.labymod.api.client.gui.screen.Parent; +import net.labymod.api.client.gui.screen.widget.SimpleWidget; +import net.labymod.api.client.gui.screen.widget.widgets.ComponentWidget; +import net.labymod.api.client.gui.screen.widget.widgets.renderer.IconWidget; +import net.labymod.api.util.I18n; + +@AutoWidget +public class ToolWidget extends SimpleWidget { + + private WarnTool tool; + + public ToolWidget(WarnTool tool) { + this.tool = tool; + } + + @Override + public void initialize(Parent parent) { + super.initialize(parent); + IconWidget iconWidget = new IconWidget(tool.getType().getIcon()) + .addId("tool-icon"); + + ComponentWidget nameWidget = ComponentWidget.i18n( + "toolwarn.gui.dropdown.type." + tool.getType().name().toLowerCase() + ).addId("name-component"); + + ComponentWidget meta = ComponentWidget.text(I18n.translate( + "toolwarn.gui.meta", + tool.getWarnAt(), + tool.openChat() ? "§a✔§r" : "§c✘§r", + tool.lastHitWarn() ? "§a✔§r" : "§c✘§r" + )).addId("meta-component"); + + this.addChild(iconWidget); + this.addChild(nameWidget); + this.addChild(meta); + } + + public WarnTool getTool() { + return tool; + } + public void setTool(WarnTool tool) { + this.tool = tool; + } +} diff --git a/core/src/main/java/com/rappytv/toolwarn/util/ToolType.java b/core/src/main/java/com/rappytv/toolwarn/util/ToolType.java deleted file mode 100644 index d71b562..0000000 --- a/core/src/main/java/com/rappytv/toolwarn/util/ToolType.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.rappytv.toolwarn.util; - -import com.rappytv.toolwarn.config.TbwConfiguration; -import net.labymod.api.client.world.item.ItemStack; - -public enum ToolType { - None, Sword, Pickaxe, Axe, Shovel, Crossbow, Lighter, Shears, Trident; - - public static ToolType getByItem(ItemStack itemStack) { - String path = itemStack.getIdentifier().getPath(); - if(path.endsWith("_sword")) - return Sword; - else if(path.endsWith("_pickaxe")) - return Pickaxe; - else if(path.endsWith("_axe")) - return Axe; - else if(path.endsWith("_shovel")) - return Shovel; - else if(path.equalsIgnoreCase("crossbow")) - return Crossbow; - else if(path.equalsIgnoreCase("flint_and_steel")) - return Lighter; - else if(path.equalsIgnoreCase("shears")) - return Shears; - else if(path.equalsIgnoreCase("trident")) - return Trident; - return None; - } - - public int getWarnPercentage(TbwConfiguration configuration) { - return switch (this) { - case Sword -> configuration.swordPercentage().get(); - case Pickaxe -> configuration.pickAxePercentage().get(); - case Axe -> configuration.axePercentage().get(); - case Shovel -> configuration.shovelPercentage().get(); - case Crossbow -> configuration.crossbowPercentage().get(); - case Lighter -> configuration.lighterPercentage().get(); - case Shears -> configuration.shearsPercentage().get(); - case Trident -> configuration.tridentPercentage().get(); - default -> -1; - }; - } -} diff --git a/core/src/main/java/com/rappytv/toolwarn/util/WarnTool.java b/core/src/main/java/com/rappytv/toolwarn/util/WarnTool.java new file mode 100644 index 0000000..ada5414 --- /dev/null +++ b/core/src/main/java/com/rappytv/toolwarn/util/WarnTool.java @@ -0,0 +1,117 @@ +package com.rappytv.toolwarn.util; + +import net.labymod.api.client.gui.icon.Icon; +import net.labymod.api.client.resources.ResourceLocation; +import net.labymod.api.client.world.item.ItemStack; + +public class WarnTool { + + private Type type; + private WarnSound sound; + private WarnSound lastSound; + private int warnAt; + private boolean openChat; + private boolean lastHitWarn; + + public WarnTool() { + this(Type.SWORD, WarnSound.NONE, WarnSound.NONE, 5, true, true); + } + + public WarnTool(Type type, WarnSound sound, WarnSound lastSound, int warnAt, boolean openChat, boolean lastHitWarn) { + this.type = type; + this.sound = sound; + this.lastSound = lastSound; + this.warnAt = warnAt; + this.openChat = openChat; + this.lastHitWarn = lastHitWarn; + } + + public Type getType() { + return type; + } + public WarnSound getSound() { + return sound; + } + public WarnSound getLastSound() { + return lastSound; + } + public int getWarnAt() { + return warnAt; + } + public boolean openChat() { + return openChat; + } + public boolean lastHitWarn() { + return lastHitWarn; + } + + public void setType(Type type) { + this.type = type; + } + public void setSound(WarnSound sound) { + this.sound = sound; + } + public void setLastSound(WarnSound lastSound) { + this.lastSound = lastSound; + } + public void setWarnAt(int warnAt) { + this.warnAt = warnAt; + } + public void setOpenChat(boolean openChat) { + this.openChat = openChat; + } + public void setLastHitWarn(boolean lastHitWarn) { + this.lastHitWarn = lastHitWarn; + } + + public enum Type { + NONE(-1, -1), + SWORD(0, 0), + PICKAXE(1, 0), + AXE(2, 0), + SHOVEL(3, 0), + HOE(0, 1), + CROSSBOW(1, 1), + LIGHTER(2, 1), + SHEARS(3, 1), + TRIDENT(0, 2); + + private final ResourceLocation sprite = ResourceLocation.create("toolwarn", "textures/tools.png"); + private final int x; + private final int y; + + Type(int x, int y) { + this.x = x; + this.y = y; + } + + public Icon getIcon() { + return Icon.sprite32(sprite, x, y); + } + + public static Type getByItem(ItemStack itemStack) { + if(itemStack == null) return NONE; + String path = itemStack.getIdentifier().getPath(); + if (path.endsWith("_sword")) { + return SWORD; + } else if (path.endsWith("_pickaxe")) { + return PICKAXE; + } else if (path.endsWith("_axe")) { + return AXE; + } else if (path.endsWith("_shovel")) { + return SHOVEL; + } else if (path.endsWith("_hoe")) { + return HOE; + } else if (path.equalsIgnoreCase("crossbow")) { + return CROSSBOW; + } else if (path.equalsIgnoreCase("flint_and_steel")) { + return LIGHTER; + } else if (path.equalsIgnoreCase("shears")) { + return SHEARS; + } else if (path.equalsIgnoreCase("trident")) { + return TRIDENT; + } + return NONE; + } + } +} diff --git a/core/src/main/resources/assets/toolwarn/i18n/de_de.json b/core/src/main/resources/assets/toolwarn/i18n/de_de.json index c51ed1e..1a00470 100644 --- a/core/src/main/resources/assets/toolwarn/i18n/de_de.json +++ b/core/src/main/resources/assets/toolwarn/i18n/de_de.json @@ -3,12 +3,6 @@ "settings": { "name": "Toolbreak Warnung", "header": { - "general": { - "name": "Allgemein" - }, - "sounds": { - "name": "Sounds" - }, "tools": { "name": "Werkzeuge" } @@ -16,66 +10,45 @@ "enabled": { "name": "Aktiviert" }, - "openChat": { - "name": "Chat öffnen beim warnen", - "description": "Wenn das Addon dich warnt, wird sich dein Chat öffnen, damit du daran gehindert wirst, die letzten Hits mit deinem Tool zu verbrauchen." - }, - "lastHit": { - "name": "Warnung beim letzten Schlag", - "description": "Warnt dich, wenn dein Tool bei Haltbarkeit 1 angekommen ist" - }, - "sounds": { - "name": "Sound Einstellungen", - "description": "Verwaltet die Sounds, die abgespielt werden.", - "warnSound": { - "name": "Warnungs Sound", - "entries": { - "none": "Keiner", - "anvilUse": "Amboss", - "levelUp": "Level Up", - "glassBreak": "Glas abbauen", - "pling": "Pling" - } - }, - "lastHitSound": { - "name": "Sound beim letzten Schlag", - "entries": { - "none": "Keiner", - "anvilUse": "Amboss", - "levelUp": "Level Up", - "glassBreak": "Glas abbauen", - "pling": "Pling" - } - } - }, - "swordPercentage": { - "name": "Schwert-Warnung (%)" - }, - "pickaxePercentage": { - "name": "Spitzhacken-Warnung (%)" - }, - "axePercentage": { - "name": "Axt-Warnung (%)" - }, - "shovelPercentage": { - "name": "Schaufel-Warnung (%)" - }, - "crossbowPercentage": { - "name": "Armbrust-Warnung (%)" - }, - "lighterPercentage": { - "name": "Feuerzeug-Warnung (%)" - }, - "shearsPercentage": { - "name": "Scheren-Warnung (%)" - }, - "tridentPercentage": { - "name": "Dreizack-Warnung (%)" + "toolConfig": { + "name": "Werkzeuge verwalten" } }, "messages": { "lastHit": "Du solltest das Tool jetzt weglegen. Das ist dein letzter Schlag!", "warning": "Willst du das Tool wirklich weiter benutzen? Die Haltbarkeit liegt bei %s%%!" + }, + "gui": { + "meta": "Warnung bei: %s%% • Chat: %s • Letzter Schlag: %s", + "remove": "Willst du diesen Eintrag wirklich entfernen?", + "checkbox": { + "openChat": "Chat öffnen", + "lastHit": "Warnung bei letztem Schlag" + }, + "dropdown": { + "warnSound": "Warnungston", + "lastSound": "Warnungston bei letztem Schlag", + "type": { + "sword": "Schwert", + "pickaxe": "Spitzhacke", + "axe": "Axt", + "shovel": "Schaufel", + "hoe": "Hacke", + "crossbow": "Armbrust", + "lighter": "Feuerzeug", + "shears": "Schere", + "trident": "Dreizack" + }, + "sound": { + "none": "Keiner", + "anvilUse": "Amboss", + "levelUp": "Level Up", + "glassBreak": "Glas Abbauen", + "pling": "Pling" + } + }, + "slider": "Haltbarkeit (in %)", + "type": "Werkzeug Typ" } } } \ No newline at end of file diff --git a/core/src/main/resources/assets/toolwarn/i18n/en_us.json b/core/src/main/resources/assets/toolwarn/i18n/en_us.json index dc4efaf..d707cf3 100644 --- a/core/src/main/resources/assets/toolwarn/i18n/en_us.json +++ b/core/src/main/resources/assets/toolwarn/i18n/en_us.json @@ -3,12 +3,6 @@ "settings": { "name": "Toolbreak Warning", "header": { - "general": { - "name": "General" - }, - "sounds": { - "name": "Sounds" - }, "tools": { "name": "Tools" } @@ -16,66 +10,45 @@ "enabled": { "name": "Activated" }, - "openChat": { - "name": "Open chat on warn", - "description": "When the addon warns you, your chat will open to prevent you from wasting the last durability of your tool." - }, - "lastHit": { - "name": "Warn on last hit", - "description": "Warns you when your tool is at 1 durability" - }, - "sounds": { - "name": "Sound Settings", - "description": "Manages the sounds that are played.", - "warnSound": { - "name": "Warn Sound", - "entries": { - "none": "None", - "anvilUse": "Anvil Use", - "levelUp": "Level Up", - "glassBreak": "Glass Break", - "pling": "Pling" - } - }, - "lastHitSound": { - "name": "Last hit warn sound", - "entries": { - "none": "None", - "anvilUse": "Anvil Use", - "levelUp": "Level Up", - "glassBreak": "Glass Break", - "pling": "Pling" - } - } - }, - "swordPercentage": { - "name": "Sword warn percentage" - }, - "pickaxePercentage": { - "name": "Pickaxe warn percentage" - }, - "axePercentage": { - "name": "Axe warn percentage" - }, - "shovelPercentage": { - "name": "Shovel warn percentage" - }, - "crossbowPercentage": { - "name": "Crossbow warn percentage" - }, - "lighterPercentage": { - "name": "Flint and Steel warn percentage" - }, - "shearsPercentage": { - "name": "Shears warn percentage" - }, - "tridentPercentage": { - "name": "Trident warn percentage" + "toolConfig": { + "name": "Manage tools" } }, "messages": { "lastHit": "You should stop using this tool now, this is your last hit!", "warning": "Do you really want to continue using this tool? Its durability is at %s%%!" + }, + "gui": { + "meta": "Warn at: %s%% • Chat: %s • Last hit: %s", + "remove": "Do you really want to remove this entry?", + "checkbox": { + "openChat": "Open chat", + "lastHit": "Last hit warning" + }, + "dropdown": { + "warnSound": "Warn sound", + "lastSound": "Last hit warn sound", + "type": { + "sword": "Sword", + "pickaxe": "Pickaxe", + "axe": "Axe", + "shovel": "Shovel", + "hoe": "Hoe", + "crossbow": "Crossbow", + "lighter": "Flint and steel", + "shears": "Shears", + "trident": "Trident" + }, + "sound": { + "none": "None", + "anvilUse": "Anvil Use", + "levelUp": "Level Up", + "glassBreak": "Glass Break", + "pling": "Pling" + } + }, + "slider": "Warning durability (in %)", + "type": "Tool type" } } } \ No newline at end of file diff --git a/core/src/main/resources/assets/toolwarn/textures/tools.png b/core/src/main/resources/assets/toolwarn/textures/tools.png new file mode 100644 index 0000000..470ad8f Binary files /dev/null and b/core/src/main/resources/assets/toolwarn/textures/tools.png differ diff --git a/core/src/main/resources/assets/toolwarn/themes/fancy/lss/config.lss b/core/src/main/resources/assets/toolwarn/themes/fancy/lss/config.lss new file mode 100644 index 0000000..443f5e2 --- /dev/null +++ b/core/src/main/resources/assets/toolwarn/themes/fancy/lss/config.lss @@ -0,0 +1,85 @@ +.tool-container { + width: 100%; + height: 100%; + left: 0; + top: 0; + + Scroll { + width: 90%; + top: 0; + bottom: 0; + margin-top: 5; + margin-bottom: 5; + left: 50%; + alignment-x: center; + + .tool-list { + left: 0; + top: 0; + height: fit-content; + space-between-entries: 2; + selectable: true; + } + + Scrollbar { + left: 0; + top: 0; + width: 5; + height: 100%; + margin-left: 5; + } + } +} + +.overview-button-menu { + width: 90%; + height: 20; + left: 50%; + alignment-x: center; + bottom: 5; + layout: fill; + space-between-entries: 8; + margin-bottom: 5; +} + +.edit-button-menu { + width: 90%; + height: 20; + left: 50%; + alignment-x: center; + bottom: 0; + layout: fill; + space-between-entries: 8; +} + +Tool { + width: 100%; + height: 24; + padding: 1; + + .tool-icon { + left: 3; + top: 2; + width: 16; + height: width; + clickable: true; + + margin-top: 2; + } + + .name-component { + left: 22; + top: 2; + } + + .meta-component { + left: 22; + top: 13; + } + + &:selected { + padding: 0; + border: 1 gray; + background-color: black; + } +} \ No newline at end of file diff --git a/core/src/main/resources/assets/toolwarn/themes/fancy/lss/manage.lss b/core/src/main/resources/assets/toolwarn/themes/fancy/lss/manage.lss new file mode 100644 index 0000000..1d18ac5 --- /dev/null +++ b/core/src/main/resources/assets/toolwarn/themes/fancy/lss/manage.lss @@ -0,0 +1,155 @@ +.manage-container { + top: 0; + left: 0; + width: 100%; + height: 100%; + clear-depth: true; + + .input-container { + width: 90%; + height: 165; + left: 50%; + top: 47%; + alignment-x: center; + alignment-y: center; + + background-color: rgba(20, 20, 20, 180); + border-radius: 10; + padding: 10; + + .custom-preview { + top: 5; + left: 50%; + alignment-x: center; + font-size: 1.5; + padding: 2 3 2 3; + background-color: black; + min-width: 11; + max-width: 100%; + } + + .input-list { + left: 0; + top: 0; + width: 100%; + bottom: 0; + } + } +} + +.remove-container { + width: 90%; + height: fit-content; + left: 50%; + top: 50%; + alignment-x: center; + alignment-y: center; + space-between-entries: 15; + + background-color: rgba(20, 20, 20, 180); + border-radius: 10; + padding: 10; +} + +.remove-confirmation { + left: 50%; + alignment-x: center; +} + +.remove-preview { + left: 50%; + alignment-x: center; + height: 24; + width: 100%; +} + +.remove-button-menu { + left: 50%; + alignment-x: center; + height: 20; + layout: fill; + space-between-entries: 8; + width: 90%; +} + +.type-div { + top: 0; + height: 20%; + width: 100%; +} +.type-name { + top: 0; + left: 50%; + alignment-x: center; + font-size: 0.8; +} +.type-dropdown { + top: 10; + height: 20; + left: 50%; + alignment-x: center; +} + +.slider-name { + top: 0; + alignment-x: center; + font-size: 0.8; +} +.warn-slider { + margin-top: 2; + height: 20; + width: 100; + alignment-x: center; +} + +.dropdown-list { + margin-top: 10; + left: 0; + width: 90%; + height: 25%; + left: 50%; + alignment-x: center; +} +.dropdown-div { + top: 0; + height: 100%; + width: 50%; +} +.dropdown-name { + top: 0; + left: 50%; + alignment-x: center; + font-size: 0.8; +} +.dropdown-item { + top: 10; + height: 20; + left: 50%; + alignment-x: center; +} + +.checkbox-list { + left: 0; + width: 90%; + height: 35; + left: 50%; + alignment-x: center; +} +.checkbox-div { + top: 0; + height: 100%; + width: 50%; +} +.checkbox-name { + top: 0; + left: 50%; + alignment-x: center; + font-size: 0.8; +} +.checkbox-item { + top: 10; + width: 20; + height: 20; + left: 50%; + alignment-x: center; +} \ No newline at end of file diff --git a/core/src/main/resources/assets/toolwarn/themes/vanilla/lss/config.lss b/core/src/main/resources/assets/toolwarn/themes/vanilla/lss/config.lss new file mode 100644 index 0000000..443f5e2 --- /dev/null +++ b/core/src/main/resources/assets/toolwarn/themes/vanilla/lss/config.lss @@ -0,0 +1,85 @@ +.tool-container { + width: 100%; + height: 100%; + left: 0; + top: 0; + + Scroll { + width: 90%; + top: 0; + bottom: 0; + margin-top: 5; + margin-bottom: 5; + left: 50%; + alignment-x: center; + + .tool-list { + left: 0; + top: 0; + height: fit-content; + space-between-entries: 2; + selectable: true; + } + + Scrollbar { + left: 0; + top: 0; + width: 5; + height: 100%; + margin-left: 5; + } + } +} + +.overview-button-menu { + width: 90%; + height: 20; + left: 50%; + alignment-x: center; + bottom: 5; + layout: fill; + space-between-entries: 8; + margin-bottom: 5; +} + +.edit-button-menu { + width: 90%; + height: 20; + left: 50%; + alignment-x: center; + bottom: 0; + layout: fill; + space-between-entries: 8; +} + +Tool { + width: 100%; + height: 24; + padding: 1; + + .tool-icon { + left: 3; + top: 2; + width: 16; + height: width; + clickable: true; + + margin-top: 2; + } + + .name-component { + left: 22; + top: 2; + } + + .meta-component { + left: 22; + top: 13; + } + + &:selected { + padding: 0; + border: 1 gray; + background-color: black; + } +} \ No newline at end of file diff --git a/core/src/main/resources/assets/toolwarn/themes/vanilla/lss/manage.lss b/core/src/main/resources/assets/toolwarn/themes/vanilla/lss/manage.lss new file mode 100644 index 0000000..3ba4c39 --- /dev/null +++ b/core/src/main/resources/assets/toolwarn/themes/vanilla/lss/manage.lss @@ -0,0 +1,154 @@ +.manage-container { + top: 0; + left: 0; + width: 100%; + height: 100%; + clear-depth: true; + + .input-container { + width: 90%; + height: 165; + left: 50%; + top: 47%; + alignment-x: center; + alignment-y: center; + + background-color: rgba(20, 20, 20, 180); + padding: 10; + + .custom-preview { + top: 5; + left: 50%; + alignment-x: center; + font-size: 1.5; + padding: 2 3 2 3; + background-color: black; + min-width: 11; + max-width: 100%; + } + + .input-list { + left: 0; + top: 0; + width: 100%; + bottom: 0; + } + } +} + +.remove-container { + width: 90%; + height: fit-content; + left: 50%; + top: 50%; + alignment-x: center; + alignment-y: center; + space-between-entries: 15; + + background-color: rgba(20, 20, 20, 180); + padding: 10; +} + +.remove-confirmation { + left: 50%; + alignment-x: center; +} + +.remove-preview { + left: 50%; + alignment-x: center; + height: 24; + width: 100%; +} + +.remove-button-menu { + left: 50%; + alignment-x: center; + height: 20; + layout: fill; + space-between-entries: 8; + width: 90%; +} + +.type-div { + top: 0; + height: 20%; + width: 100%; +} +.type-name { + top: 0; + left: 50%; + alignment-x: center; + font-size: 0.8; +} +.type-dropdown { + top: 10; + height: 20; + left: 50%; + alignment-x: center; +} + +.slider-name { + top: 0; + alignment-x: center; + font-size: 0.8; +} +.warn-slider { + margin-top: 2; + height: 20; + width: 100; + alignment-x: center; +} + +.dropdown-list { + margin-top: 10; + left: 0; + width: 90%; + height: 25%; + left: 50%; + alignment-x: center; +} +.dropdown-div { + top: 0; + height: 100%; + width: 50%; +} +.dropdown-name { + top: 0; + left: 50%; + alignment-x: center; + font-size: 0.8; +} +.dropdown-item { + top: 10; + height: 20; + left: 50%; + alignment-x: center; +} + +.checkbox-list { + margin-top: 5; + left: 0; + width: 90%; + height: 35; + left: 50%; + alignment-x: center; +} +.checkbox-div { + top: 0; + height: 100%; + width: 50%; +} +.checkbox-name { + top: 0; + left: 50%; + alignment-x: center; + font-size: 0.8; +} +.checkbox-item { + top: 10; + width: 20; + height: 20; + left: 50%; + alignment-x: center; +} \ No newline at end of file diff --git a/core/src/main/resources/assets/toolwarn/themes/vanilla/textures/settings.png b/core/src/main/resources/assets/toolwarn/themes/vanilla/textures/settings.png index 25ca292..653361f 100644 Binary files a/core/src/main/resources/assets/toolwarn/themes/vanilla/textures/settings.png and b/core/src/main/resources/assets/toolwarn/themes/vanilla/textures/settings.png differ diff --git a/game-runner/src/v1_12_2/java/com/rappytv/toolwarn/v1_12_2/TbwSoundImpl.java b/game-runner/src/v1_12_2/java/com/rappytv/toolwarn/v1_12_2/TbwSoundImpl.java index 824ee4e..019bac1 100644 --- a/game-runner/src/v1_12_2/java/com/rappytv/toolwarn/v1_12_2/TbwSoundImpl.java +++ b/game-runner/src/v1_12_2/java/com/rappytv/toolwarn/v1_12_2/TbwSoundImpl.java @@ -16,11 +16,11 @@ public class TbwSoundImpl implements ITbwSounds { private final ResourceLocation anvilUseSound = ResourceLocation.create("minecraft", "block.anvil.use"); @Override - public ResourceLocation getPlingSound() { + public @NotNull ResourceLocation getPlingSound() { return plingSound; } @Override - public ResourceLocation getLevelUpSound() { + public @NotNull ResourceLocation getLevelUpSound() { return levelUpSound; } @Override @@ -28,7 +28,7 @@ public ResourceLocation getLevelUpSound() { return glassBreakSound; } @Override - public ResourceLocation getAnvilUseSound() { + public @NotNull ResourceLocation getAnvilUseSound() { return anvilUseSound; } } diff --git a/game-runner/src/v1_16_5/java/com/rappytv/toolwarn/v1_16_5/TbwSoundImpl.java b/game-runner/src/v1_16_5/java/com/rappytv/toolwarn/v1_16_5/TbwSoundImpl.java index 5fdc009..14b2251 100644 --- a/game-runner/src/v1_16_5/java/com/rappytv/toolwarn/v1_16_5/TbwSoundImpl.java +++ b/game-runner/src/v1_16_5/java/com/rappytv/toolwarn/v1_16_5/TbwSoundImpl.java @@ -16,11 +16,11 @@ public class TbwSoundImpl implements ITbwSounds { private final ResourceLocation anvilUseSound = ResourceLocation.create("minecraft", "block.anvil.use"); @Override - public ResourceLocation getPlingSound() { + public @NotNull ResourceLocation getPlingSound() { return plingSound; } @Override - public ResourceLocation getLevelUpSound() { + public @NotNull ResourceLocation getLevelUpSound() { return levelUpSound; } @Override @@ -28,7 +28,7 @@ public ResourceLocation getLevelUpSound() { return glassBreakSound; } @Override - public ResourceLocation getAnvilUseSound() { + public @NotNull ResourceLocation getAnvilUseSound() { return anvilUseSound; } } diff --git a/game-runner/src/v1_17_1/java/com/rappytv/toolwarn/v1_17_1/TbwSoundImpl.java b/game-runner/src/v1_17_1/java/com/rappytv/toolwarn/v1_17_1/TbwSoundImpl.java index ebb2032..4d0b846 100644 --- a/game-runner/src/v1_17_1/java/com/rappytv/toolwarn/v1_17_1/TbwSoundImpl.java +++ b/game-runner/src/v1_17_1/java/com/rappytv/toolwarn/v1_17_1/TbwSoundImpl.java @@ -17,11 +17,11 @@ public class TbwSoundImpl implements ITbwSounds { private final ResourceLocation anvilUseSound = ResourceLocation.create("minecraft", "block.anvil.use"); @Override - public ResourceLocation getPlingSound() { + public @NotNull ResourceLocation getPlingSound() { return plingSound; } @Override - public ResourceLocation getLevelUpSound() { + public @NotNull ResourceLocation getLevelUpSound() { return levelUpSound; } @Override @@ -29,7 +29,7 @@ public ResourceLocation getLevelUpSound() { return glassBreakSound; } @Override - public ResourceLocation getAnvilUseSound() { + public @NotNull ResourceLocation getAnvilUseSound() { return anvilUseSound; } } diff --git a/game-runner/src/v1_18_2/java/com/rappytv/toolwarn/v1_18_2/TbwSoundImpl.java b/game-runner/src/v1_18_2/java/com/rappytv/toolwarn/v1_18_2/TbwSoundImpl.java index 6d25e6f..bb9774a 100644 --- a/game-runner/src/v1_18_2/java/com/rappytv/toolwarn/v1_18_2/TbwSoundImpl.java +++ b/game-runner/src/v1_18_2/java/com/rappytv/toolwarn/v1_18_2/TbwSoundImpl.java @@ -16,11 +16,11 @@ public class TbwSoundImpl implements ITbwSounds { private final ResourceLocation anvilUseSound = ResourceLocation.create("minecraft", "block.anvil.use"); @Override - public ResourceLocation getPlingSound() { + public @NotNull ResourceLocation getPlingSound() { return plingSound; } @Override - public ResourceLocation getLevelUpSound() { + public @NotNull ResourceLocation getLevelUpSound() { return levelUpSound; } @Override @@ -28,7 +28,7 @@ public ResourceLocation getLevelUpSound() { return glassBreakSound; } @Override - public ResourceLocation getAnvilUseSound() { + public @NotNull ResourceLocation getAnvilUseSound() { return anvilUseSound; } } diff --git a/game-runner/src/v1_19_2/java/com/rappytv/toolwarn/v1_19_2/TbwSoundImpl.java b/game-runner/src/v1_19_2/java/com/rappytv/toolwarn/v1_19_2/TbwSoundImpl.java index 8bc0b0e..6dad5bd 100644 --- a/game-runner/src/v1_19_2/java/com/rappytv/toolwarn/v1_19_2/TbwSoundImpl.java +++ b/game-runner/src/v1_19_2/java/com/rappytv/toolwarn/v1_19_2/TbwSoundImpl.java @@ -16,11 +16,11 @@ public class TbwSoundImpl implements ITbwSounds { private final ResourceLocation anvilUseSound = ResourceLocation.create("minecraft", "block.anvil.use"); @Override - public ResourceLocation getPlingSound() { + public @NotNull ResourceLocation getPlingSound() { return plingSound; } @Override - public ResourceLocation getLevelUpSound() { + public @NotNull ResourceLocation getLevelUpSound() { return levelUpSound; } @Override @@ -28,7 +28,7 @@ public ResourceLocation getLevelUpSound() { return glassBreakSound; } @Override - public ResourceLocation getAnvilUseSound() { + public @NotNull ResourceLocation getAnvilUseSound() { return anvilUseSound; } } diff --git a/game-runner/src/v1_19_3/java/com/rappytv/toolwarn/v1_19_3/TbwSoundImpl.java b/game-runner/src/v1_19_3/java/com/rappytv/toolwarn/v1_19_3/TbwSoundImpl.java index 48bea28..39c2916 100644 --- a/game-runner/src/v1_19_3/java/com/rappytv/toolwarn/v1_19_3/TbwSoundImpl.java +++ b/game-runner/src/v1_19_3/java/com/rappytv/toolwarn/v1_19_3/TbwSoundImpl.java @@ -16,11 +16,11 @@ public class TbwSoundImpl implements ITbwSounds { private final ResourceLocation anvilUseSound = ResourceLocation.create("minecraft", "block.anvil.use"); @Override - public ResourceLocation getPlingSound() { + public @NotNull ResourceLocation getPlingSound() { return plingSound; } @Override - public ResourceLocation getLevelUpSound() { + public @NotNull ResourceLocation getLevelUpSound() { return levelUpSound; } @Override @@ -28,7 +28,7 @@ public ResourceLocation getLevelUpSound() { return glassBreakSound; } @Override - public ResourceLocation getAnvilUseSound() { + public @NotNull ResourceLocation getAnvilUseSound() { return anvilUseSound; } } diff --git a/game-runner/src/v1_19_4/java/com/rappytv/toolwarn/v1_19_4/TbwSoundImpl.java b/game-runner/src/v1_19_4/java/com/rappytv/toolwarn/v1_19_4/TbwSoundImpl.java index 0fbf221..f5200b1 100644 --- a/game-runner/src/v1_19_4/java/com/rappytv/toolwarn/v1_19_4/TbwSoundImpl.java +++ b/game-runner/src/v1_19_4/java/com/rappytv/toolwarn/v1_19_4/TbwSoundImpl.java @@ -16,11 +16,11 @@ public class TbwSoundImpl implements ITbwSounds { private final ResourceLocation anvilUseSound = ResourceLocation.create("minecraft", "block.anvil.use"); @Override - public ResourceLocation getPlingSound() { + public @NotNull ResourceLocation getPlingSound() { return plingSound; } @Override - public ResourceLocation getLevelUpSound() { + public @NotNull ResourceLocation getLevelUpSound() { return levelUpSound; } @Override @@ -28,7 +28,7 @@ public ResourceLocation getLevelUpSound() { return glassBreakSound; } @Override - public ResourceLocation getAnvilUseSound() { + public @NotNull ResourceLocation getAnvilUseSound() { return anvilUseSound; } } diff --git a/game-runner/src/v1_20_1/java/com/rappytv/toolwarn/v1_20_1/TbwSoundImpl.java b/game-runner/src/v1_20_1/java/com/rappytv/toolwarn/v1_20_1/TbwSoundImpl.java index f8304e0..8bbf29a 100644 --- a/game-runner/src/v1_20_1/java/com/rappytv/toolwarn/v1_20_1/TbwSoundImpl.java +++ b/game-runner/src/v1_20_1/java/com/rappytv/toolwarn/v1_20_1/TbwSoundImpl.java @@ -16,11 +16,11 @@ public class TbwSoundImpl implements ITbwSounds { private final ResourceLocation anvilUseSound = ResourceLocation.create("minecraft", "block.anvil.use"); @Override - public ResourceLocation getPlingSound() { + public @NotNull ResourceLocation getPlingSound() { return plingSound; } @Override - public ResourceLocation getLevelUpSound() { + public @NotNull ResourceLocation getLevelUpSound() { return levelUpSound; } @Override @@ -28,7 +28,7 @@ public ResourceLocation getLevelUpSound() { return glassBreakSound; } @Override - public ResourceLocation getAnvilUseSound() { + public @NotNull ResourceLocation getAnvilUseSound() { return anvilUseSound; } } diff --git a/game-runner/src/v1_20_2/java/com/rappytv/toolwarn/v1_20_2/TbwSoundImpl.java b/game-runner/src/v1_20_2/java/com/rappytv/toolwarn/v1_20_2/TbwSoundImpl.java index c4caf1d..ab814f5 100644 --- a/game-runner/src/v1_20_2/java/com/rappytv/toolwarn/v1_20_2/TbwSoundImpl.java +++ b/game-runner/src/v1_20_2/java/com/rappytv/toolwarn/v1_20_2/TbwSoundImpl.java @@ -16,11 +16,11 @@ public class TbwSoundImpl implements ITbwSounds { private final ResourceLocation anvilUseSound = ResourceLocation.create("minecraft", "block.anvil.use"); @Override - public ResourceLocation getPlingSound() { + public @NotNull ResourceLocation getPlingSound() { return plingSound; } @Override - public ResourceLocation getLevelUpSound() { + public @NotNull ResourceLocation getLevelUpSound() { return levelUpSound; } @Override @@ -28,7 +28,7 @@ public ResourceLocation getLevelUpSound() { return glassBreakSound; } @Override - public ResourceLocation getAnvilUseSound() { + public @NotNull ResourceLocation getAnvilUseSound() { return anvilUseSound; } } diff --git a/game-runner/src/v1_20_4/java/com/rappytv/toolwarn/v1_20_4/TbwSoundImpl.java b/game-runner/src/v1_20_4/java/com/rappytv/toolwarn/v1_20_4/TbwSoundImpl.java index d1aa47c..9fcd23b 100644 --- a/game-runner/src/v1_20_4/java/com/rappytv/toolwarn/v1_20_4/TbwSoundImpl.java +++ b/game-runner/src/v1_20_4/java/com/rappytv/toolwarn/v1_20_4/TbwSoundImpl.java @@ -17,11 +17,11 @@ public class TbwSoundImpl implements ITbwSounds { private final ResourceLocation anvilUseSound = ResourceLocation.create("minecraft", "block.anvil.use"); @Override - public ResourceLocation getPlingSound() { + public @NotNull ResourceLocation getPlingSound() { return plingSound; } @Override - public ResourceLocation getLevelUpSound() { + public @NotNull ResourceLocation getLevelUpSound() { return levelUpSound; } @Override @@ -29,7 +29,7 @@ public ResourceLocation getLevelUpSound() { return glassBreakSound; } @Override - public ResourceLocation getAnvilUseSound() { + public @NotNull ResourceLocation getAnvilUseSound() { return anvilUseSound; } } diff --git a/game-runner/src/v1_8_9/java/com/rappytv/toolwarn/v1_8_9/TbwSoundImpl.java b/game-runner/src/v1_8_9/java/com/rappytv/toolwarn/v1_8_9/TbwSoundImpl.java index dc07f4b..5ba01bc 100644 --- a/game-runner/src/v1_8_9/java/com/rappytv/toolwarn/v1_8_9/TbwSoundImpl.java +++ b/game-runner/src/v1_8_9/java/com/rappytv/toolwarn/v1_8_9/TbwSoundImpl.java @@ -16,11 +16,11 @@ public class TbwSoundImpl implements ITbwSounds { private final ResourceLocation anvilUseSound = ResourceLocation.create("minecraft", "random.anvil_use"); @Override - public ResourceLocation getPlingSound() { + public @NotNull ResourceLocation getPlingSound() { return plingSound; } @Override - public ResourceLocation getLevelUpSound() { + public @NotNull ResourceLocation getLevelUpSound() { return levelUpSound; } @Override @@ -28,7 +28,7 @@ public ResourceLocation getLevelUpSound() { return glassBreakSound; } @Override - public ResourceLocation getAnvilUseSound() { + public @NotNull ResourceLocation getAnvilUseSound() { return anvilUseSound; } }