diff --git a/pom.xml b/pom.xml
index 27fb51ec..8b1d5158 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,29 +29,39 @@
jitpack.io
https://jitpack.io
+
+ placeholderapi
+ http://repo.extendedclip.com/content/repositories/placeholderapi/
+
+
+ me.clip
+ placeholderapi
+ 2.10.9
+
org.spigotmc
- spigot-api-v1164
+ spigot-api
1.16.4-R0.1-SNAPSHOT
system
${project.basedir}/libs/spigot-1.16.4.jar
-
- com.github.MilkBowl
- VaultAPI
- 1.7
- provided
-
org.spigotmc
- spigot-api-v1163
+ spigot-api-v163
1.16.3-R0.1-SNAPSHOT
system
${project.basedir}/libs/spigot-1.16.3.jar
+
+ com.github.MilkBowl
+ VaultAPI
+ 1.7
+ system
+ ${project.basedir}/libs/Vault.jar
+
com.comphenix.protocol
ProtocolLib
diff --git a/src/main/java/dev/efnilite/witp/ParkourPlayer.java b/src/main/java/dev/efnilite/witp/ParkourPlayer.java
index 13a15ea5..f8fddb65 100644
--- a/src/main/java/dev/efnilite/witp/ParkourPlayer.java
+++ b/src/main/java/dev/efnilite/witp/ParkourPlayer.java
@@ -94,7 +94,7 @@ public ParkourPlayer(@NotNull Player player, int highScore, String time, String
player.setPlayerTime(getTime(time), false);
WITP.getDivider().generate(this);
- if (showDeathMsg) {
+ if (showDeathMsg && ParkourGenerator.Configurable.SCOREBOARD) {
updateScoreboard();
}
if (player.isOp() && WITP.isOutdated) {
@@ -196,7 +196,7 @@ public void menu() {
InventoryBuilder builder3 = new InventoryBuilder(this, 3, "Time").open();
if (WITP.getConfiguration().getFile("config").getBoolean("styles.enabled")) {
- builder.setItem(10, new ItemBuilder(Material.END_STONE, "&a&lParkour style")
+ builder.setItem(9, new ItemBuilder(Material.END_STONE, "&a&lParkour style")
.setLore("&7The style of your parkour.", "&7(which blocks will be used)", "", "&7Currently: &a" + style).build(), (t, e) -> {
List styles = Util.getNode(WITP.getConfiguration().getFile("config"), "styles.list");
if (styles == null) {
@@ -226,7 +226,7 @@ public void menu() {
builder2.build();
});
}
- builder.setItem(11, new ItemBuilder(Material.GLASS, "&a&lLead")
+ builder.setItem(10, new ItemBuilder(Material.GLASS, "&a&lLead")
.setLore("&7How many blocks will", "&7be generated ahead of you.", "", "&7Currently: &a" + blockLead + " blocks").build(), (t, e) -> {
for (int i = 10; i < 17; i++) {
builder1.setItem(i, new ItemBuilder(Material.PAPER, "&b&l" + (i - 9) + " block(s)").build(), (t2, e2) -> {
@@ -239,7 +239,7 @@ public void menu() {
builder1.setItem(26, new ItemBuilder(Material.ARROW, "&c&lClose").build(), (t2, e2) -> player.closeInventory());
builder1.build();
});
- builder.setItem(12, new ItemBuilder(Material.CLOCK, "&a&lTime")
+ builder.setItem(11, new ItemBuilder(Material.CLOCK, "&a&lTime")
.setLore("&7The time of day.", "", "&7Currently: &a" + time.toLowerCase()).build(), (t, e) -> {
List times = Arrays.asList("Day", "Noon", "Dawn", "Night", "Midnight");
int i = 11;
@@ -261,7 +261,7 @@ public void menu() {
Material difficulty = useDifficulty ? Material.GREEN_WOOL : Material.RED_WOOL;
String difficultyString = Boolean.toString(useDifficulty);
String difficultyValue = Util.normalizeBoolean(Util.colorBoolean(difficultyString));
- builder.setItem(13, new ItemBuilder(difficulty, "&a&lUse difficulty")
+ builder.setItem(12, new ItemBuilder(difficulty, "&a&lUse difficulty")
.setLore("&7If enabled having a higher score will mean", "&7the parkour becomes more difficult.", "",
"&7Currently: " + difficultyValue).build(), (t2, e2) -> {
useDifficulty = !useDifficulty;
@@ -304,7 +304,7 @@ public void menu() {
String specialString = Boolean.toString(useSpecial);
String specialValue = Util.normalizeBoolean(Util.colorBoolean(specialString));
builder.setItem(16, new ItemBuilder(special, "&a&lUse special blocks")
- .setLore("&7If enabled uses special blocks.", "",
+ .setLore("&7If enabled uses special blocks like ice and slabs.", "",
"&7Currently: " + specialValue).build(), (t2, e2) -> {
useSpecial = !useSpecial;
send("&7You changed your usage of special blocks to " +
@@ -312,18 +312,18 @@ public void menu() {
saveStats();
player.closeInventory();
});
-// Material structures = useStructures ? Material.GREEN_WOOL : Material.RED_WOOL;
-// String structuresString = Boolean.toString(useStructures);
-// String structuresValue = Util.normalizeBoolean(Util.colorBoolean(useStructures));
-// builder.setItem(15, new ItemBuilder(structures, "&a&lUse structures")
-// .setLore("&7If enabled static structures", "&7will appear throughout the parkour.", "",
-// "&7Currently: " + structuresValue).build(), (t2, e2) -> {
-// useStructures = !useStructures;
-// send("&7You changed your changed your usage of structures to " +
- // Util.normalizeBoolean(Util.colorBoolean(Util.reverseBoolean(structuresString))));
-// saveStats();
-// player.closeInventory();
-// });
+ Material structures = useStructure ? Material.GREEN_WOOL : Material.RED_WOOL;
+ String structuresString = Boolean.toString(useStructure);
+ String structuresValue = Util.normalizeBoolean(Util.colorBoolean(structuresString));
+ builder.setItem(17, new ItemBuilder(structures, "&a&lUse structures")
+ .setLore("&7If enabled static structures", "&7will appear throughout the parkour.", "",
+ "&7Currently: " + structuresValue).build(), (t2, e2) -> {
+ useStructure = !useStructure;
+ send("&7You changed your usage of structures to " +
+ Util.normalizeBoolean(Util.colorBoolean(Util.reverseBoolean(structuresString))));
+ saveStats();
+ player.closeInventory();
+ });
builder.setItem(26, new ItemBuilder(Material.BARRIER, "&4&lQuit").build(), (t2, e2) -> {
try {
ParkourPlayer.unregister(this, true);
diff --git a/src/main/java/dev/efnilite/witp/WITP.java b/src/main/java/dev/efnilite/witp/WITP.java
index 2e099ceb..2989786a 100644
--- a/src/main/java/dev/efnilite/witp/WITP.java
+++ b/src/main/java/dev/efnilite/witp/WITP.java
@@ -3,6 +3,7 @@
import dev.efnilite.witp.command.MainCommand;
import dev.efnilite.witp.generator.ParkourGenerator;
import dev.efnilite.witp.generator.subarea.SubareaDivider;
+import dev.efnilite.witp.hook.PlaceholderHook;
import dev.efnilite.witp.util.Configuration;
import dev.efnilite.witp.util.Util;
import dev.efnilite.witp.util.Verbose;
@@ -68,6 +69,9 @@ public void onEnable() {
if (configuration.getFile("config").getBoolean("metrics")) {
new Metrics(this, 9272);
}
+ if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
+ new PlaceholderHook().register();
+ }
ParkourGenerator.Configurable.init();
this.getServer().getPluginManager().registerEvents(this, this);
@@ -80,7 +84,7 @@ public void onEnable() {
public void run() {
checker.check();
}
- }, 20 * 60 * 20);
+ }, 30 * 60 * 20);
}
private void addCommand(String name, BukkitCommand wrapper) {
diff --git a/src/main/java/dev/efnilite/witp/generator/ParkourGenerator.java b/src/main/java/dev/efnilite/witp/generator/ParkourGenerator.java
index 38565bcf..9c9205e7 100644
--- a/src/main/java/dev/efnilite/witp/generator/ParkourGenerator.java
+++ b/src/main/java/dev/efnilite/witp/generator/ParkourGenerator.java
@@ -87,7 +87,7 @@ public ParkourGenerator(ParkourPlayer player) {
this.borderOffset = Configurable.BORDER_SIZE / 2.0;
this.stopped = false;
this.player = player;
- this.structureCooldown = 30;
+ this.structureCooldown = 20;
this.lastSpawn = player.getPlayer().getLocation().clone();
this.lastPlayer = lastSpawn.clone();
this.distanceChances = new HashMap<>();
@@ -131,10 +131,10 @@ public void run() {
// Structure deletion check
if (structureBlocks.contains(current) && current.getType() == Material.RED_WOOL && !deleteStructure) {
score += 10;
- if (player.showDeathMsg) {
+ if (player.showDeathMsg && Configurable.SCOREBOARD) {
player.updateScoreboard();
}
- structureCooldown = 30;
+ structureCooldown = 20;
generateNext(player.blockLead);
deleteStructure = true;
return;
@@ -150,16 +150,18 @@ public void run() {
totalScore++;
// Rewards
- if (Configurable.REWARDS && totalScore % Configurable.REWARDS_INTERVAL == 0 && Configurable.REWARDS_COMMAND != null) {
- Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), Configurable.REWARDS_COMMAND);
- player.send(Configurable.REWARDS_MESSAGE);
+ if (Configurable.REWARDS && totalScore % Configurable.REWARDS_INTERVAL == 0) {
+ if (Configurable.REWARDS_COMMAND != null) {
+ Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), Configurable.REWARDS_COMMAND);
+ }
if (Configurable.REWARDS_MONEY != 0) {
Util.depositPlayer(player.getPlayer(), Configurable.REWARDS_MONEY);
}
+ player.send(Configurable.REWARDS_MESSAGE);
}
new PlayerScoreEvent(player).call();
- if (player.showDeathMsg) {
+ if (player.showDeathMsg && Configurable.SCOREBOARD) {
player.updateScoreboard();
}
List locations = new ArrayList<>(buildLog.keySet());
@@ -185,7 +187,7 @@ public void run() {
}
time = stopwatch.toString();
player.getPlayer().setSaturation(20);
- if (player.showDeathMsg) {
+ if (player.showDeathMsg && Configurable.SCOREBOARD) {
player.updateScoreboard();
}
}
@@ -209,7 +211,7 @@ public void reset(boolean regenerate) {
for (String s : buildLog.keySet()) {
Util.parseLocation(s).getBlock().setType(Material.AIR);
}
- structureCooldown = 30;
+ structureCooldown = 20;
buildLog.clear();
player.getPlayer().teleport(playerSpawn);
if (player.showDeathMsg) {
@@ -412,7 +414,6 @@ public void generateNext() {
List possible = getPossible(gap - height, height);
if (possible.size() == 0) {
lastSpawn = local;
- generateNext();
return;
}
@@ -436,17 +437,30 @@ public void generateNext() {
List files = Arrays.asList(folder.listFiles((dir, name) -> name.contains("parkour-")));
File structure = files.get(random.nextInt(files.size() - 1));
- structureCooldown = 30;
+ structureCooldown = 20;
int gapStructure = distanceChances.get(random.nextInt(distanceChances.size())) + 1;
+
+ Location local2 = lastSpawn.clone();
List possibleStructure = getPossible(gapStructure, 0);
if (possibleStructure.size() == 0) {
+ lastSpawn = local2;
return;
}
Block chosenStructure = possibleStructure.get(random.nextInt(possibleStructure.size()));
StructureData data = WITP.getVersionManager().placeAt(structure, chosenStructure.getLocation(), heading);
- structureBlocks = new ArrayList<>(data.blocks);
+ structureBlocks = data.blocks;
lastSpawn = data.end.clone();
+
+ // if something during the pasting was set to air
+ List locations = new ArrayList<>(buildLog.keySet());
+ int index = buildLog.get(Util.toString(lastPlayer, false));
+ for (int i = 0; i < index; i++) {
+ Block block = Util.parseLocation(locations.get(i)).getBlock();
+ if (!structureBlocks.contains(block) && block.getType() == Material.AIR) {
+ block.setType(player.randomMaterial());
+ }
+ }
break;
}
@@ -540,10 +554,6 @@ public boolean isNearBorder(Vector vector) {
return Math.abs(borderOffset - Math.abs(vector.getX())) < 25 || Math.abs(borderOffset - Math.abs(vector.getZ())) < 25;
}
- public boolean isNearIsland(Vector vector) {
- return vector.distance(playerSpawn.toVector()) < 50;
- }
-
/**
* Class for variables required in generating without accessing the file a lot (constants)
*/
@@ -581,6 +591,8 @@ public static class Configurable {
public static int SOUND_PITCH;
public static Particle PARTICLE_TYPE;
+ public static boolean SCOREBOARD;
+
// Advanced settings
public static double BORDER_SIZE;
public static int GENERATOR_CHECK;
@@ -629,6 +641,8 @@ public static void init() {
REWARDS_MESSAGE = null;
}
+ SCOREBOARD = config.getBoolean("scoreboard.enabled");
+
SOUND_TYPE = Sound.valueOf(config.getString("particles.sound-type").toUpperCase());
SOUND_PITCH = config.getInt("particles.sound-pitch");
PARTICLE_TYPE = Particle.valueOf(config.getString("particles.particle-type").toUpperCase());
diff --git a/src/main/java/dev/efnilite/witp/hook/PlaceholderHook.java b/src/main/java/dev/efnilite/witp/hook/PlaceholderHook.java
new file mode 100644
index 00000000..6955499b
--- /dev/null
+++ b/src/main/java/dev/efnilite/witp/hook/PlaceholderHook.java
@@ -0,0 +1,72 @@
+package dev.efnilite.witp.hook;
+
+import dev.efnilite.witp.ParkourPlayer;
+import dev.efnilite.witp.WITP;
+import me.clip.placeholderapi.expansion.PlaceholderExpansion;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+public class PlaceholderHook extends PlaceholderExpansion {
+
+ @Override
+ public @NotNull String getIdentifier() {
+ return "witp";
+ }
+
+ @Override
+ public @NotNull String getAuthor() {
+ return "Efnilite";
+ }
+
+ @Override
+ public boolean canRegister(){
+ return true;
+ }
+
+
+ @Override
+ public boolean persist(){
+ return true;
+ }
+
+ @Override
+ public @NotNull String getVersion() {
+ return WITP.getInstance().getDescription().getVersion();
+ }
+
+ @Override
+ public String onPlaceholderRequest(Player player, @NotNull String params) {
+ if (player == null) {
+ return "player doesn't exist";
+ }
+ ParkourPlayer pp = ParkourPlayer.getPlayer(player);
+ if (pp == null) {
+ return "player is not registered";
+ }
+
+ switch (params) {
+ case "highscore":
+ case "high_score":
+ return Integer.toString(pp.highScore);
+ case "score":
+ case "current_score":
+ return Integer.toString(pp.getGenerator().score);
+ case "time":
+ case "current_time":
+ return pp.getGenerator().time;
+ case "version":
+ case "ver":
+ return WITP.getInstance().getDescription().getVersion();
+ case "blocklead":
+ case "lead":
+ return Integer.toString(pp.blockLead);
+ case "style":
+ return pp.style;
+ case "time_pref":
+ case "time_preference":
+ return pp.time;
+ }
+
+ return null;
+ }
+}
diff --git a/src/main/java/dev/efnilite/witp/util/Configuration.java b/src/main/java/dev/efnilite/witp/util/Configuration.java
index 07e0fb72..4604dfad 100644
--- a/src/main/java/dev/efnilite/witp/util/Configuration.java
+++ b/src/main/java/dev/efnilite/witp/util/Configuration.java
@@ -53,7 +53,7 @@ public Configuration(Plugin plugin) {
* Downloads the structures
*/
private void structures() {
- if (!(new File(plugin.getDataFolder().toString() + "/structures/spawn-island.nbt").exists())) {
+ if (!(new File(plugin.getDataFolder().toString() + "/structures/parkour-1.nbt").exists())) {
String[] schematics = new String[] {"spawn-island.nbt"};
File folder = new File(plugin.getDataFolder().toString() + "/structures");
folder.mkdirs();
diff --git a/src/main/java/dev/efnilite/witp/version/VersionManager_v1_16_R2.java b/src/main/java/dev/efnilite/witp/version/VersionManager_v1_16_R2.java
index c9edb8ef..c21d6a62 100644
--- a/src/main/java/dev/efnilite/witp/version/VersionManager_v1_16_R2.java
+++ b/src/main/java/dev/efnilite/witp/version/VersionManager_v1_16_R2.java
@@ -5,10 +5,12 @@
import dev.efnilite.witp.util.Verbose;
import net.minecraft.server.v1_16_R2.*;
import org.bukkit.Location;
+import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_16_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
@@ -62,6 +64,26 @@ public void pasteStructure(File file, Location to) {
}
}
+ // gets the appropriate rotation fo the schematic for the heading
+ private EnumBlockRotation getRotation(@NotNull Vector heading) {
+ if (heading.getBlockZ() != 0) { // north/south
+ switch (heading.getBlockZ()) {
+ case 1: // south
+ return EnumBlockRotation.CLOCKWISE_180;
+ case -1: // north
+ return EnumBlockRotation.NONE;
+ }
+ } else if (heading.getBlockX() != 0) { // east/west
+ switch (heading.getBlockX()) {
+ case 1: // east
+ return EnumBlockRotation.CLOCKWISE_90;
+ case -1: // west
+ return EnumBlockRotation.COUNTERCLOCKWISE_90;
+ }
+ }
+ return EnumBlockRotation.COUNTERCLOCKWISE_90;
+ }
+
// todo holy shit please fix this
@Override
public @Nullable ParkourGenerator.StructureData placeAt(File file, Location to, Vector heading) {
@@ -71,8 +93,8 @@ public void pasteStructure(File file, Location to) {
structure.b(NBTCompressedStreamTools.a(new FileInputStream(file)));
World world = ((CraftWorld) to.getWorld()).getHandle();
- DefinedStructureInfo info = new DefinedStructureInfo().a(EnumBlockMirror.NONE).a(EnumBlockRotation.NONE)
- .a(false).a((ChunkCoordIntPair) null).c(false).a(ThreadLocalRandom.current());
+ DefinedStructureInfo info = new DefinedStructureInfo().a(EnumBlockMirror.NONE).a(getRotation(heading))
+ .a(true).a((ChunkCoordIntPair) null).c(true).a(ThreadLocalRandom.current());
StructureBoundingBox box = structure.b(info, new BlockPosition(to.getBlockX(), to.getBlockY(), to.getBlockZ()));
Location pos1 = new Location(to.getWorld(), box.a, box.b, box.c); // box coords to bukkit
Location pos2 = new Location(to.getWorld(), box.d, box.e, box.f); // box coords to bukkit
@@ -89,29 +111,32 @@ public void pasteStructure(File file, Location to) {
List beginBlock = structure.a(pos, info, Blocks.LIME_WOOL);
Vector beginPos = null;
for (DefinedStructure.BlockInfo blockInfo : beginBlock) {
- beginPos = new Vector(blockInfo.a.getX(), blockInfo.a.getY(), blockInfo.a.getZ()).clone().subtract(base);
+ BlockPosition position = blockInfo.a;
+ beginPos = new Vector(position.getX(), position.getY(), position.getZ()).subtract(base);
}
if (beginPos == null) {
Verbose.error("There is no lime wool (start of parkour) in structure " + file.getName());
return null;
}
- List endBlock = structure.a(pos, info, Blocks.RED_WOOL);
+ max.subtract(beginPos); // the max values of everything, but offset so it matches where the schematic gets pasted
+ min.subtract(beginPos); // the min values of everything, but also offset
+ to = to.subtract(beginPos); // where the structure gets pasted from (top left corner)
+ structure.a((WorldAccess) world, new BlockPosition(to.getX(), to.getY(), to.getZ()), info, ThreadLocalRandom.current());
+
+ List blocks = Util.getBlocks(max.clone(), min.clone());
Location endPos = null;
- for (DefinedStructure.BlockInfo blockinfo : endBlock) {
- endPos = new Location(to.getWorld(), blockinfo.a.getX(), blockinfo.a.getY(), blockinfo.a.getZ());
+ for (Block block : blocks) {
+ if (block.getType() == org.bukkit.Material.RED_WOOL) {
+ endPos = block.getLocation();
+ }
}
if (endPos == null) {
Verbose.error("There is no red wool (end of parkour) in structure " + file.getName());
return null;
}
- Vector location = to.clone().subtract(beginPos).toVector();
- structure.a((WorldAccess) world, new BlockPosition(location.getX(), location.getY(), location.getZ()), info, ThreadLocalRandom.current());
-
- Location loc = base.toLocation(to.getWorld());
- Vector vector = new Vector(deltaX + 1, max.subtract(min).getBlockY() + 1, deltaZ + 1);
- return new ParkourGenerator.StructureData(endPos.clone(), Util.getBlocks(loc, loc.clone().add(vector)));
+ return new ParkourGenerator.StructureData(endPos.clone(), blocks);
} catch (IOException e) {
e.printStackTrace();
return null;
diff --git a/src/main/java/dev/efnilite/witp/version/VersionManager_v1_16_R3.java b/src/main/java/dev/efnilite/witp/version/VersionManager_v1_16_R3.java
index 24a3f311..5ff3f081 100644
--- a/src/main/java/dev/efnilite/witp/version/VersionManager_v1_16_R3.java
+++ b/src/main/java/dev/efnilite/witp/version/VersionManager_v1_16_R3.java
@@ -94,7 +94,7 @@ private EnumBlockRotation getRotation(@NotNull Vector heading) {
World world = ((CraftWorld) to.getWorld()).getHandle();
DefinedStructureInfo info = new DefinedStructureInfo().a(EnumBlockMirror.NONE).a(getRotation(heading))
- .a(false).a((ChunkCoordIntPair) null).c(false).a(ThreadLocalRandom.current());
+ .a(true).a((ChunkCoordIntPair) null).c(true).a(ThreadLocalRandom.current());
StructureBoundingBox box = structure.b(info, new BlockPosition(to.getBlockX(), to.getBlockY(), to.getBlockZ()));
Location pos1 = new Location(to.getWorld(), box.a, box.b, box.c); // box coords to bukkit
Location pos2 = new Location(to.getWorld(), box.d, box.e, box.f); // box coords to bukkit
@@ -124,10 +124,7 @@ private EnumBlockRotation getRotation(@NotNull Vector heading) {
to = to.subtract(beginPos); // where the structure gets pasted from (top left corner)
structure.a((WorldAccess) world, new BlockPosition(to.getX(), to.getY(), to.getZ()), info, ThreadLocalRandom.current());
- Verbose.info(min.toString());
- Verbose.info(max.toString());
-
- List blocks = Util.getBlocks(max, min);
+ List blocks = Util.getBlocks(max.clone(), min.clone());
Location endPos = null;
for (Block block : blocks) {
if (block.getType() == org.bukkit.Material.RED_WOOL) {
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 668d72ef..b8d30fe2 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -22,11 +22,11 @@ metrics: true
# If this is set to true it will display extra data when stuff happens (useful for developers)
verbose: false
-# Options about Bungeecord
+# Options about Bungeecord/autojoining
bungeecord:
# Enabling this will make players who join the server (that's running this plugin) automatically join the game on that server
- # If this is disabled, you have to use /witp join to join and /witp leave to leave.
+ # !! If this is disabled, you have to use /witp join to join and /witp leave to leave. !!
enabled: true
# The server the players will be returned to after the game is done
@@ -63,18 +63,25 @@ styles:
blue: [blue_wool, blue_stained_glass, blue_concrete, blue_terracotta]
light blue: [light_blue_wool, light_blue_stained_glass, light_blue_concrete, light_blue_terracotta]
green: [green_wool, green_stained_glass, green_concrete, green_terracotta]
+ lime: [lime_wool, lime_stained_glass, lime_concrete, lime_terracotta]
+ cyan: [cyan_wool, cyan_stained_glass, cyan_concrete, cyan_terracotta]
+ purple: [purple_wool, purple_stained_glass, purple_concrete, purple_terracotta]
yellow: [yellow_wool, yellow_stained_glass, yellow_concrete, yellow_terracotta]
gray: [gray_wool, gray_stained_glass, gray_concrete, gray_terracotta]
end: [end_stone, end_stone_bricks, purpur_block, purpur_pillar]
- nether: [netherrack, nether_bricks, red_nether_bricks, chiseled_nether_bricks, nether_wart_block, nether_gold_ore, netherite_block]
+ nether: [netherrack, nether_bricks, red_nether_bricks, chiseled_nether_bricks, nether_wart_block, nether_gold_ore, netherite_block, basalt]
quartz: [smooth_quartz, chiseled_quartz_block, quartz_block, quartz_bricks, quartz_pillar]
ocean: [prismarine, prismarine_bricks, dark_prismarine, sea_lantern]
redstone: [observer, dispenser, redstone_block, piston, sticky_piston, redstone_lamp, target]
overworld: [grass_block, stone, cobblestone, oak_log]
+ ores: [diamond_ore, gold_ore, iron_ore, coal_ore, nether_gold_ore, lapis_ore, redstone_ore, emerald_ore, nether_quartz_ore]
+ wood: [oak_planks, spruce_planks, jungle_planks, acacia_planks, birch_planks, dark_oak_planks, oak_log, spruce_log, jungle_log, birch_log, acacia_log, dark_oak_log]
# How the scoreboard looks
# Placeholders: %score%, %time%
scoreboard:
+ enabled: true
+
title: '&c&lInfinite Parkour'
lines:
- '&a'
diff --git a/src/main/resources/generation.yml b/src/main/resources/generation.yml
index c9a9faa2..7dc96d7d 100644
--- a/src/main/resources/generation.yml
+++ b/src/main/resources/generation.yml
@@ -6,7 +6,8 @@ generation:
normal-jump:
# The chance for normal jumps to appear (in %)
- chance: 70
+ # When compared to structures.chance and special.chance this should be 100%, but it can go over
+ chance: 88
# The chances of different types of block jumps
# if 'normal-jump' is selected to be the next parkour section
@@ -37,7 +38,7 @@ generation:
structures:
# The chance for structures to appear (in %)
- chance: 20
+ chance: 2
settings:
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 67dde7b0..eae68b90 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,9 +1,10 @@
name: 'WITP'
description: 'Automatically generating, infinitely long parkour plugin. The sky, and your time, is the limit. The further you go, the harder it gets. Should be a walk in the park, right?'
author: Efnilite, Ice_Pancake
-version: 1.4a
+version: 1.5
api-version: 1.16
main: dev.efnilite.witp.WITP
+softdepend: [Vault, PlaceholderAPI]
commands:
witp:
aliases: [parkour]