diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index 548771f..94c1fbd 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -4,7 +4,7 @@ net.lewmc kryptonite Kryptonite - 1.4.0-SNAPSHOT + 1.4.0 diff --git a/pom.xml b/pom.xml index 9dd5baa..96fc7d1 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ net.lewmc kryptonite - 1.4.0-SNAPSHOT + 1.4.0 jar Kryptonite diff --git a/src/main/java/net/lewmc/kryptonite/Kryptonite.java b/src/main/java/net/lewmc/kryptonite/Kryptonite.java index a7b1174..87f4e91 100644 --- a/src/main/java/net/lewmc/kryptonite/Kryptonite.java +++ b/src/main/java/net/lewmc/kryptonite/Kryptonite.java @@ -61,6 +61,11 @@ private void initFilesystem() { saveResource("profiles/YouHaveTrouble.kos", false); } + File FFProfile = new File(getDataFolder() + File.separator + "profiles/FarmFriendly.kos"); + if (!FFProfile.exists()) { + saveResource("profiles/FarmFriendly.kos", false); + } + File profilesFolder = new File(getDataFolder() + File.separator + "profiles"); if (!profilesFolder.exists()) { if (!profilesFolder.mkdirs()) { @@ -150,7 +155,6 @@ private void detectBadPlugins() { this.log.severe(""); this.log.severe("Using known lag-causing plugin: "+badPlugin); this.log.severe("This plugin may cause more lag than it resolves or conflict with Kryptonite. Consider removing it."); - this.log.severe("Learn more: https://wiki.lewmc.net/index.php/Lag_Plugins"); this.log.severe(""); } } diff --git a/src/main/java/net/lewmc/kryptonite/commands/ExploitDBCommand.java b/src/main/java/net/lewmc/kryptonite/commands/ExploitDBCommand.java index 1c3a2ff..6015264 100644 --- a/src/main/java/net/lewmc/kryptonite/commands/ExploitDBCommand.java +++ b/src/main/java/net/lewmc/kryptonite/commands/ExploitDBCommand.java @@ -165,7 +165,7 @@ public boolean onCommand( } } else { message.Error("You do not have the required permissions to run this command."); - message.Error("Please visit https://wiki.lewmc.net/index.php/Kryptonite_Commands for more information."); + message.Error("Please visit https://wiki.lewmc.net/kr-commands.html for more information."); } return true; } @@ -187,7 +187,7 @@ private void checkAll(Check check) { message.Warning("Many of these exploits require Paper to be patched, which you are not running."); } - message.Info("More information: https://wiki.lewmc.net/index.php/Exploit_Database"); + message.Info("More information: https://wiki.lewmc.net/kr-exploit-database.html"); } private void complete(boolean passed, String code) { diff --git a/src/main/java/net/lewmc/kryptonite/commands/OptimiseCommand.java b/src/main/java/net/lewmc/kryptonite/commands/OptimiseCommand.java index 2be268f..7a45590 100644 --- a/src/main/java/net/lewmc/kryptonite/commands/OptimiseCommand.java +++ b/src/main/java/net/lewmc/kryptonite/commands/OptimiseCommand.java @@ -1,20 +1,14 @@ package net.lewmc.kryptonite.commands; -import de.themoep.inventorygui.InventoryGui; -import de.themoep.inventorygui.StaticGuiElement; import net.lewmc.kryptonite.Kryptonite; import net.lewmc.kryptonite.kos.KOS; import net.lewmc.kryptonite.kos.gui.KosMainGui; import net.lewmc.kryptonite.utils.MessageUtil; import net.lewmc.kryptonite.utils.PermissionUtil; -import org.bukkit.ChatColor; -import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; import java.util.Objects; @@ -43,31 +37,38 @@ public boolean onCommand(CommandSender commandSender, Command command, String s, PermissionUtil perm = new PermissionUtil(); if (perm.isOperator(commandSender)) { - if (args.length == 1) { - if (Objects.equals(args[0].toLowerCase(), "yes")) { - message.Info("Kryptonite will now run it's optimisation system."); - message.Info("You should backup your server before running Kryptonite."); - message.Info("You'll need to restart the server after completion for changes to be made."); - message.Info(""); + if (commandSender instanceof Player) { + KosMainGui gui = new KosMainGui(this.plugin, commandSender); + gui.show(); + } else { + if (args.length == 1) { + if (Objects.equals(args[0].toLowerCase(), "yes")) { + message.Info("Kryptonite will now run it's optimisation system."); + message.Info("You should backup your server before running Kryptonite."); + message.Info("You'll need to restart the server after completion for changes to be made."); + message.Info(""); + message.Info("Using profile '" + this.plugin.getConfig().getString("kos.default-profile") + "'"); - KOS kos = new KOS(commandSender, this.plugin, this.plugin.getConfig().getString("kos.profile")); - kos.runDefault(true); - } else if (Objects.equals(args[0].toLowerCase(), "no") && perm.isOperator(commandSender)) { - message.Info("Kryptonite will now run it's optimisation system."); - message.Info("You should backup your server before running Kryptonite."); - message.Info("You'll need to restart the server after completion for changes to be made."); - message.Info(""); + KOS kos = new KOS(commandSender, this.plugin, this.plugin.getConfig().getString("kos.default-profile")); + kos.runDefault(true); + } else if (Objects.equals(args[0].toLowerCase(), "no") && perm.isOperator(commandSender)) { + message.Info("Kryptonite will now run it's optimisation system."); + message.Info("You should backup your server before running Kryptonite."); + message.Info("You'll need to restart the server after completion for changes to be made."); + message.Info(""); + message.Info("Using profile '" + this.plugin.getConfig().getString("kos.default-profile") + "'"); - KOS kos = new KOS(commandSender, this.plugin, this.plugin.getConfig().getString("kos.profile")); - kos.runDefault(false); - } else { - message.Error("Unknown command. Use /kos for help."); - } - } else { - if (commandSender instanceof Player) { - KosMainGui gui = new KosMainGui(this.plugin, commandSender); - gui.show(); + KOS kos = new KOS(commandSender, this.plugin, this.plugin.getConfig().getString("kos.default-profile")); + kos.runDefault(false); + } else { + message.Error("Unknown command. Use /kos for help."); + } } else { + message.Info("--- KRYPTONITE OPTIMISATION SYSTEM ---"); + message.Info("KOS will use the kos.default-profile value set in Kryptonite.yml"); + message.Info("Please ensure this is correct before continuing."); + message.Info("Current profile: " + this.plugin.getConfig().getString("kos.default-profile")); + message.Info(""); message.Info("Have you pregenerated your world and set a vanilla world border?"); message.Info("This will affect which optimisations can be applied."); message.Info(""); diff --git a/src/main/java/net/lewmc/kryptonite/kos/KOS.java b/src/main/java/net/lewmc/kryptonite/kos/KOS.java index 70faed9..3f8cf99 100644 --- a/src/main/java/net/lewmc/kryptonite/kos/KOS.java +++ b/src/main/java/net/lewmc/kryptonite/kos/KOS.java @@ -199,36 +199,36 @@ private void runPaper(boolean pregeneratedWorld) { ); pw.ambientDespawnRanges( - this.patches.getInt("paper.despawn-ranges.ambient.hard"), - this.patches.getInt("paper.despawn-ranges.ambient.soft") + this.patches.get("paper.despawn-ranges.ambient.hard"), + this.patches.get("paper.despawn-ranges.ambient.soft") ); pw.axolotlsDespawnRanges( - this.patches.getInt("paper.despawn-ranges.axolotl.hard"), - this.patches.getInt("paper.despawn-ranges.axolotl.soft") + this.patches.get("paper.despawn-ranges.axolotl.hard"), + this.patches.get("paper.despawn-ranges.axolotl.soft") ); pw.creatureDespawnRanges( - this.patches.getInt("paper.despawn-ranges.creature.hard"), - this.patches.getInt("paper.despawn-ranges.creature.soft") + this.patches.get("paper.despawn-ranges.creature.hard"), + this.patches.get("paper.despawn-ranges.creature.soft") ); pw.miscDespawnRanges( - this.patches.getInt("paper.despawn-ranges.misc.hard"), - this.patches.getInt("paper.despawn-ranges.misc.soft") + this.patches.get("paper.despawn-ranges.misc.hard"), + this.patches.get("paper.despawn-ranges.misc.soft") ); pw.monsterDespawnRanges( - this.patches.getInt("paper.despawn-ranges.monster.hard"), - this.patches.getInt("paper.despawn-ranges.monster.soft") + this.patches.get("paper.despawn-ranges.monster.hard"), + this.patches.get("paper.despawn-ranges.monster.soft") ); pw.undergroundWaterCreatureDespawnRanges( - this.patches.getInt("paper.despawn-ranges.water.underground-creature.hard"), - this.patches.getInt("paper.despawn-ranges.water.underground-creature.soft") + this.patches.get("paper.despawn-ranges.water.underground-creature.hard"), + this.patches.get("paper.despawn-ranges.water.underground-creature.soft") ); pw.waterAmbientDespawnRanges( - this.patches.getInt("paper.despawn-ranges.water.ambient.hard"), - this.patches.getInt("paper.despawn-ranges.water.ambient.soft") + this.patches.get("paper.despawn-ranges.water.ambient.hard"), + this.patches.get("paper.despawn-ranges.water.ambient.soft") ); pw.waterCreatureDespawnRanges( - this.patches.getInt("paper.despawn-ranges.water.creature.hard"), - this.patches.getInt("paper.despawn-ranges.water.creature.soft") + this.patches.get("paper.despawn-ranges.water.creature.hard"), + this.patches.get("paper.despawn-ranges.water.creature.soft") ); pw.perPlayerMobSpawns(this.patches.getBoolean("paper.per-player-mob-spawns")); diff --git a/src/main/java/net/lewmc/kryptonite/kos/config/PaperWorld.java b/src/main/java/net/lewmc/kryptonite/kos/config/PaperWorld.java index b71230f..c0dd85a 100644 --- a/src/main/java/net/lewmc/kryptonite/kos/config/PaperWorld.java +++ b/src/main/java/net/lewmc/kryptonite/kos/config/PaperWorld.java @@ -71,42 +71,42 @@ public void entityPerChunkSaveLimit(int areaEffectCloud, this.plugin.getConfig().set("chunks.entity-per-chunk-save-limit.wither_skull", witherSkull); } - public void ambientDespawnRanges(int hard, int soft) { + public void ambientDespawnRanges(Object hard, Object soft) { this.plugin.getConfig().set("entities.spawning.despawn-ranges.ambient.hard", hard); this.plugin.getConfig().set("entities.spawning.despawn-ranges.ambient.soft", soft); } - public void axolotlsDespawnRanges(int hard, int soft) { + public void axolotlsDespawnRanges(Object hard, Object soft) { this.plugin.getConfig().set("entities.spawning.despawn-ranges.axolotls.hard", hard); this.plugin.getConfig().set("entities.spawning.despawn-ranges.axolotls.soft", soft); } - public void creatureDespawnRanges(int hard, int soft) { + public void creatureDespawnRanges(Object hard, Object soft) { this.plugin.getConfig().set("entities.spawning.despawn-ranges.creature.hard", hard); this.plugin.getConfig().set("entities.spawning.despawn-ranges.creature.soft", soft); } - public void miscDespawnRanges(int hard, int soft) { + public void miscDespawnRanges(Object hard, Object soft) { this.plugin.getConfig().set("entities.spawning.despawn-ranges.misc.hard", hard); this.plugin.getConfig().set("entities.spawning.despawn-ranges.misc.soft", soft); } - public void monsterDespawnRanges(int hard, int soft) { + public void monsterDespawnRanges(Object hard, Object soft) { this.plugin.getConfig().set("entities.spawning.despawn-ranges.monster.hard", hard); this.plugin.getConfig().set("entities.spawning.despawn-ranges.monster.soft", soft); } - public void undergroundWaterCreatureDespawnRanges(int hard, int soft) { + public void undergroundWaterCreatureDespawnRanges(Object hard, Object soft) { this.plugin.getConfig().set("entities.spawning.despawn-ranges.underground_water_creature.hard", hard); this.plugin.getConfig().set("entities.spawning.despawn-ranges.underground_water_creature.soft", soft); } - public void waterAmbientDespawnRanges(int hard, int soft) { + public void waterAmbientDespawnRanges(Object hard, Object soft) { this.plugin.getConfig().set("entities.spawning.despawn-ranges.water_ambient.hard", hard); this.plugin.getConfig().set("entities.spawning.despawn-ranges.water_ambient.soft", soft); } - public void waterCreatureDespawnRanges(int hard, int soft) { + public void waterCreatureDespawnRanges(Object hard, Object soft) { this.plugin.getConfig().set("entities.spawning.despawn-ranges.water_creature.hard", hard); this.plugin.getConfig().set("entities.spawning.despawn-ranges.water_creature.soft", soft); } diff --git a/src/main/java/net/lewmc/kryptonite/kos/gui/KosMainGui.java b/src/main/java/net/lewmc/kryptonite/kos/gui/KosMainGui.java index 7267341..d6eff16 100644 --- a/src/main/java/net/lewmc/kryptonite/kos/gui/KosMainGui.java +++ b/src/main/java/net/lewmc/kryptonite/kos/gui/KosMainGui.java @@ -3,13 +3,18 @@ import de.themoep.inventorygui.InventoryGui; import de.themoep.inventorygui.StaticGuiElement; import net.lewmc.kryptonite.Kryptonite; +import net.lewmc.kryptonite.utils.ConfigurationUtil; +import net.lewmc.kryptonite.utils.MessageUtil; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; +import java.io.File; + /** * The main menu GUI for KOS. */ @@ -33,10 +38,13 @@ public KosMainGui(Kryptonite plugin, CommandSender commandSender) { */ public void show() { InventoryHolder holder = this.commandSender.getServer().getPlayer(this.commandSender.getName()); - this.gui = new InventoryGui(this.plugin, holder, "KOS - Select a Profile", this.getElements()); + char[] chars = this.addElements(false); + + this.gui = new InventoryGui(this.plugin, holder, "KOS - Select a Profile", this.getElements(chars)); + + this.addElements(true); this.gui.setFiller(new ItemStack(Material.GRAY_STAINED_GLASS_PANE, 1)); - this.addElements(); this.gui.build(); this.gui.show((Player) this.commandSender); @@ -45,41 +53,81 @@ public void show() { /** * Adds pre-programmed elements to the GUI */ - private void addElements() { - this.gui.addElement(new StaticGuiElement('y', - new ItemStack(Material.OAK_SIGN), - 1, - click -> { - click.getGui().close(); - KosPregeneratedGui kpg = new KosPregeneratedGui(this.plugin, this.commandSender, "YouHaveTrouble"); - kpg.show(); - return true; - }, - "YouHaveTrouble" - )); - - this.gui.addElement(new StaticGuiElement('h', - new ItemStack(Material.PAPER), - 1, - click -> { - click.getWhoClicked().sendMessage(ChatColor.YELLOW+"https://wiki.lewmc.net/kr-kryptonite-optimisation-system.html"); - click.getGui().close(); - return true; - }, - "Need help?", - "Click here to get a link to our Wiki." - )); + private char[] addElements(boolean addToGui) { + File dir = new File(this.plugin.getDataFolder() + "/profiles"); + File[] directoryListing = dir.listFiles(); + char firstChar = 'a'; + char[] chars = new char[directoryListing.length]; + if (directoryListing != null) { + int index = 0; + for (File child : directoryListing) { + if (child.getName().contains(".kos")) { + ConfigurationUtil cfg = new ConfigurationUtil(this.plugin, commandSender); + YamlConfiguration item = cfg.load(this.plugin.getDataFolder() + "/profiles/"+child.getName()); + chars[index] = firstChar; + if (addToGui) { + this.gui.addElement(new StaticGuiElement(firstChar, + new ItemStack(Material.OAK_SIGN), + 1, + click -> { + click.getGui().close(); + KosPregeneratedGui kpg = new KosPregeneratedGui(this.plugin, this.commandSender, child.getName().replace(".kos", "")); + kpg.show(); + return true; + }, + child.getName().replace(".kos", ""), + item.getString("meta.description"), + "Created by " + item.getString("meta.author") + )); + } + index++; + firstChar++; + } + } + } else { + MessageUtil msg = new MessageUtil(this.commandSender); + msg.Error("Unable to find any installed KOS profiles."); + } + + if (addToGui) { + this.gui.addElement(new StaticGuiElement('h', + new ItemStack(Material.PAPER), + 1, + click -> { + click.getWhoClicked().sendMessage(ChatColor.YELLOW + "https://wiki.lewmc.net/kr-kryptonite-optimisation-system.html"); + click.getGui().close(); + return true; + }, + "Need help?", + "Click here to get a link to our Wiki." + )); + } + + return chars; } /** * Determines where the elements should be positioned. - * @return String[] - The position of the elements. + * @return chars[] - The characters used. */ - private String[] getElements() { + private String[] getElements(char[] chars) { + StringBuilder line1 = new StringBuilder(" "); + StringBuilder line2 = new StringBuilder(" "); + String line3 = " h "; + + int i = 0; + for (; i < chars.length && i < 9; i++) { + line1.setCharAt(i, chars[i]); + } + + for (int j = 0; i < chars.length && j < 9; i++, j++) { + line2.setCharAt(j, chars[i]); + } + return new String[]{ - " y ", - " ", - " h " + line1.toString(), + line2.toString(), + line3 }; } } diff --git a/src/main/java/net/lewmc/kryptonite/utils/UpdateUtil.java b/src/main/java/net/lewmc/kryptonite/utils/UpdateUtil.java index 40ae2d9..7daf735 100644 --- a/src/main/java/net/lewmc/kryptonite/utils/UpdateUtil.java +++ b/src/main/java/net/lewmc/kryptonite/utils/UpdateUtil.java @@ -74,12 +74,19 @@ public void UpdateConfig() { } public void UpdatePatches() { - File configFile = new File(this.plugin.getDataFolder(), "profiles/YouHaveTrouble.kos"); + File YHT = new File(this.plugin.getDataFolder(), "/profiles/YouHaveTrouble.kos"); + File FF = new File(this.plugin.getDataFolder(), "/profiles/FarmFriendly.kos"); try { - ConfigUpdater.update(plugin, "profiles/YouHaveTrouble.kos", configFile); - } catch (IOException e) { - this.log.warn("Unable to update profiles: "+e); + ConfigUpdater.update(plugin, "/profiles/YouHaveTrouble.kos", YHT); + } catch (IOException|NullPointerException e) { + this.log.warn("Unable to update YouHaveTrouble profile: "+e); + } + + try { + ConfigUpdater.update(plugin, "/profiles/FarmFriendly.kos", FF); + } catch (IOException|NullPointerException e) { + this.log.warn("Unable to update FarmFriendly profile: "+e); } } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 772b534..4e570ba 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,10 +1,11 @@ # -# Generated by Kryptonite 1.3.0 +# Generated by Kryptonite ${project.version} # # Wiki: https://wiki.lewmc.net/kryptonite.html # update-check: true kos: + default-profile: YouHaveTrouble override-pregenerated-world-protections: false using-tcpshield: false diff --git a/src/main/resources/profiles/FarmFriendly.kos b/src/main/resources/profiles/FarmFriendly.kos new file mode 100644 index 0000000..bea9d56 --- /dev/null +++ b/src/main/resources/profiles/FarmFriendly.kos @@ -0,0 +1,209 @@ +# +# Generated by Kryptonite ${project.version} +# +# A farm-friendly optimisation profile. +# +# Wiki: https://wiki.lewmc.net/kr-profiles.html +# + +# Profile information +meta: + description: A farm-friendly optimisation profile, does not change any animal settings. + author: LewMC + +# Server Settings +server: + network-compression-threshold: 256 + distance: + view: 8 + simulation: 4 + sync-chunk-writes: false + +# CraftBukkit Settings +craftbukkit: + spawn-limits: + monsters: 70 + animals: 10 + axolotls: 5 + ambient: 15 + water: + animals: 5 + ambient: 20 + underground-creature: 5 + ticks-per: + monsters: 1 + animals: 400 + axolotls: 1 + ambient: 1 + water: + animals: 1 + ambient: 1 + underground-creature: 1 + chunk-gc-period-in-ticks: 400 + +# Spigot Settings +spigot: + view-distance: default + mob-spawn-range: 8 + entities: + activation-range: + animals: 32 + monsters: 32 + raiders: 64 + misc: 16 + water: 16 + villagers: 32 + flying: 32 + tracking-range: + players: 128 + animals: 96 + monsters: 96 + misc: 96 + other: 64 + tick-inactive-villagers: true + spawner-mobs-nerfed: false + merge-radius: + items: 3.5 + exp: 4.0 + hopper: + transfer: 8 + check: 8 + +# Paper Settings +paper: + chunks: + delay-unloads: 10 + max-autosave-per-tick: 8 + prevent-moving-into-unloaded: true + entity-save-limit: + area-effect-cloud: 8 + arrow: 16 + dragon-fireball: 3 + egg: -1 + ender-pearl: 8 + experience-bottle: 3 + experience-orb: 16 + eye-of-ender: 8 + fireball: 8 + llama-spit: -1 + potion: 8 + shulker-bullet: 8 + small-fireball: 8 + snowball: 8 + spectral-arrow: 16 + trident: 16 + wither-skull: 4 + despawn-ranges: + ambient: + hard: default + soft: default + axolotl: + hard: default + soft: default + creature: + hard: default + soft: default + misc: + hard: default + soft: default + monster: + hard: default + soft: default + water: + underground-creature: + hard: default + soft: default + ambient: + hard: default + soft: default + creature: + hard: default + soft: default + per-player-mob-spawns: true + max-entity-collisions: 8 + update-pathfinding-on-block-update: false + fix-climbing-bypass-cramming-rule: true + armor-stands: + tick: false + do-collision-entity-lookups: false + nerfed-spawner-mobs-can-jump: false + tick-rates: + villager: + behaviour: + nearby-poi: -1 + acquire-poi: -1 + sensor: + secondary-poi: 40 + nearest-bed: 40 + villager-babies: 40 + player: 40 + nearest-living-entity: 40 + mob-spawner: 1 + grass-spread: 4 + container-update: 2 + optimised-despawn: + enabled: true + cobblestone: 300 + netherrack: 300 + sand: 300 + red-sand: 300 + gravel: 300 + dirt: 300 + short-grass: 300 + pumpkin: 300 + melon-slice: 300 + kelp: 300 + bamboo: 300 + sugar-cane: 300 + twisting-vines: 300 + weeping-vines: 300 + oak-leaves: 300 + spruce-leaves: 300 + birch-leaves: 300 + jungle-leaves: 300 + acacia-leaves: 300 + dark-oak-leaves: 300 + mangrove-leaves: 300 + cactus: 300 + diorite: 300 + granite: 300 + andesite: 300 + scaffolding: 300 + arrow: + non-player: 20 + creative: 20 + redstone-implementation: ALTERNATE_CURRENT + hoppers: + disable-move-event: true + ignore-occluding-blocks: true + optimise-explosions: true + find-already-discovered-treasure-maps: true + +# Purpur Settings +purpur: + entities: + all: + can-use-portals: true + zombie: + aggressive-towards-villager-when-lagging: true + villager: + lobotomized: false + search-radius: + acquire-poi: 20 + nearest-bed-sensor: 20 + use-alternative-keepalive: true + teleport-if-outside-worldborder: true + lagging-tps-threshold: 19.0 + +# Pufferfish Settings +pufferfish: + max-loads-per-projectile: 8 + entities: + dynamic-activation-of-brain: + enabled: false + max-tick-freq: 20 + activation-distance-modifier: 7 + async-mob-spawning: true + suffocation-optimisation: true + inactive-goal-selector-throttle: true + disable-method-profiler: true \ No newline at end of file diff --git a/src/main/resources/profiles/YouHaveTrouble.kos b/src/main/resources/profiles/YouHaveTrouble.kos index ea7ab79..ecb5a2c 100644 --- a/src/main/resources/profiles/YouHaveTrouble.kos +++ b/src/main/resources/profiles/YouHaveTrouble.kos @@ -1,15 +1,15 @@ # -# Generated by Kryptonite 1.3.0 +# Generated by Kryptonite ${project.version} # # KOS Profile for YouHaveTrouble's optimisation guide # https://github.com/YouHaveTrouble/minecraft-optimization # -# Wiki: https://wiki.lewmc.net/index.php?title=Kryptonite:Profiles +# Wiki: https://wiki.lewmc.net/kr-profiles.html # # Profile information meta: - description: A profile for KOS based on the YouHaveTrouble optimisation guide. + description: Based on the YouHaveTrouble optimisation guide. author: YouHaveTrouble and LewMC # Server Settings