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