Skip to content

Commit

Permalink
Fixed ParkourLevel and ParkourRank format
Browse files Browse the repository at this point in the history
Added option to not teleport Player on Leave
Treat AutoStart as a Restart if already on Course to prevent exploitation
  • Loading branch information
A5H73Y committed Dec 29, 2020
1 parent ca63f48 commit 3e0241c
Show file tree
Hide file tree
Showing 15 changed files with 186 additions and 34 deletions.
2 changes: 0 additions & 2 deletions docs/developer.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
Developer Tutorials
======

## Description

Are you a developer? Great! You can make the most of out Parkour's functionality to create the perfect experience for your server. I've made the plugin super easy to expand and integrate into, first we will import Parkour project to begin working with it.

## Importing Parkour into your Project
Expand Down
2 changes: 0 additions & 2 deletions docs/tutorials/rewarding-player.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
Rewarding the Player
======

## Description

There are several ways we can reward the player for completing a Course. We are able to reward the Player with ParkourLevels that allow them to unlock new courses, or achieve a ParkourRank that showcases how far they've progressed. All can be configured to match any server requirements, and even allow developers to natively add their own functionality.

## Course Prizes
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.a5h73y</groupId>
<artifactId>Parkour</artifactId>
<version>6.1</version>
<version>6.2</version>
<packaging>jar</packaging>

<name>Parkour</name>
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/io/github/a5h73y/parkour/Parkour.java
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ private void checkForUpdates() {
private boolean parkourNeedsUpgrading() {
if (super.getConfig().contains("Version")) {
Version existingVersion = new Version(super.getConfig().getString("Version"));
return existingVersion.isLowerThan("6.0");
return existingVersion.isLowerThan(this.getDescription().getVersion());
}
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ protected void initializeConfig() {

this.addDefault("OnLeave.TeleportToLinkedLobby", false);
this.addDefault("OnLeave.DestroyCourseProgress", true);
this.addDefault("OnLeave.TeleportAway", true);

this.addDefault("OnDie.ResetTimeWithNoCheckpoint", false);
this.addDefault("OnDie.SetXPBarToDeathCount", false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,9 +237,8 @@ public void onAutoStartEvent(PlayerInteractEvent event) {
if (session != null) {
// we only want to do something if the names match
if (session.getCourseName().equals(courseName)) {
session.resetTime();
parkour.getBountifulApi().sendActionBar(event.getPlayer(),
TranslationUtils.getTranslation("Parkour.TimerStarted", false), true);
Bukkit.getScheduler().runTask(parkour, () ->
parkour.getPlayerManager().restartCourse(event.getPlayer(), true));
}
} else {
parkour.getPlayerManager().joinCourseButDelayed(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ public static void setParkourLevel(OfflinePlayer player, int level) {
* @return player's parkour rank
*/
public static String getParkourRank(OfflinePlayer player) {
return getPlayersConfig().getString(player.getUniqueId() + ".Rank",
return getPlayersConfig().getString(player.getUniqueId() + ".ParkourRank",
TranslationUtils.getTranslation("Event.DefaultRank", false));
}

Expand All @@ -235,7 +235,7 @@ public static String getParkourRank(OfflinePlayer player) {
* @param parkourRank parkour rank value
*/
public static void setParkourRank(OfflinePlayer player, String parkourRank) {
getPlayersConfig().set(player.getUniqueId() + ".Rank", parkourRank);
getPlayersConfig().set(player.getUniqueId() + ".ParkourRank", parkourRank);
persistChanges();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -335,11 +335,13 @@ public void leaveCourse(Player player, boolean silent) {
session.getCourse().getName(), LEAVE, "Parkour.Leave"),
parkour.getConfig().getBoolean("DisplayTitle.Leave"));

if (parkour.getConfig().isTeleportToJoinLocation()
&& PlayerInfo.hasJoinLocation(player)) {
player.teleport(PlayerInfo.getJoinLocation(player));
} else {
parkour.getLobbyManager().teleportToLeaveDestination(player, session);
if (parkour.getConfig().getBoolean("OnLeave.TeleportAway")) {
if (parkour.getConfig().isTeleportToJoinLocation()
&& PlayerInfo.hasJoinLocation(player)) {
player.teleport(PlayerInfo.getJoinLocation(player));
} else {
parkour.getLobbyManager().teleportToLeaveDestination(player, session);
}
}
parkour.getCourseManager().runEventCommands(player, session.getCourseName(), LEAVE);
}
Expand Down Expand Up @@ -586,6 +588,17 @@ public void finishCourse(final Player player) {
* @param player requesting player
*/
public void restartCourse(Player player) {
restartCourse(player, false);
}

/**
* Restart Course progress.
* Will trigger a silent leave and rejoin of the Course.
*
* @param player requesting player
* @param doNotTeleport do not teleport the player manually
*/
public void restartCourse(Player player, boolean doNotTeleport) {
if (!isPlaying(player)) {
return;
}
Expand All @@ -595,7 +608,7 @@ public void restartCourse(Player player) {
deleteParkourSession(player);
joinCourse(player, course, true);
// if they are restarting the Course, we need to teleport them back
if (!parkour.getConfig().getBoolean("OnJoin.TeleportPlayer")) {
if (!doNotTeleport && !parkour.getConfig().getBoolean("OnJoin.TeleportPlayer")) {
player.teleport(course.getCheckpoints().get(0).getLocation());
}
TranslationUtils.sendTranslation("Parkour.Restarting", player);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
package io.github.a5h73y.parkour.upgrade;

import com.g00fy2.versioncompare.Version;
import io.github.a5h73y.parkour.Parkour;
import io.github.a5h73y.parkour.other.AbstractPluginReceiver;
import io.github.a5h73y.parkour.other.Backup;
import io.github.a5h73y.parkour.upgrade.major.CourseInfoUpgradeTask;
import io.github.a5h73y.parkour.upgrade.major.DatabaseUpgradeTask;
import io.github.a5h73y.parkour.upgrade.major.DefaultConfigUpgradeTask;
import io.github.a5h73y.parkour.upgrade.major.PlayerInfoUpgradeTask;
import io.github.a5h73y.parkour.upgrade.major.StringsConfigUpgradeTask;
import io.github.a5h73y.parkour.upgrade.minor.PartialUpgradeTask;
import java.io.File;
import java.io.IOException;
import java.util.function.BooleanSupplier;
Expand Down Expand Up @@ -57,6 +64,39 @@ public boolean getAsBoolean() {
parkour.getLogger().info("Creating backup of current install...");
Backup.backupNow(true);

boolean success = true;
Version existingVersion = new Version(defaultConfig.getString("Version"));

if (existingVersion.isLowerThan("5.0")) {
parkour.getLogger().warning("This version is too outdated.");
success = false;

} else if (existingVersion.isLowerThan("6.0")) {
success = performFullUpgrade();

} else {
success = performPartialUpgrade();
}

if (success) {
try {
defaultConfig.set("Version", parkour.getDescription().getVersion());
saveDefaultConfig();
parkour.reloadConfig();
parkour.getLogger().info("Parkour successfully upgraded to v"
+ parkour.getDescription().getVersion());
parkour.getLogger().info("The plugin will now start up...");

} catch (IOException e) {
parkour.getLogger().severe("An error occurred during upgrade: " + e.getMessage());
e.printStackTrace();
success = false;
}
}
return success;
}

private boolean performFullUpgrade() {
if (!new PlayerInfoUpgradeTask(this).start()) {
return false;
}
Expand All @@ -83,16 +123,11 @@ public boolean getAsBoolean() {

parkour.getLogger().info("Setting up Configs and Database...");
parkour.registerEssentialManagers();
return databaseUpgrade.doMoreWork();
}

if (!databaseUpgrade.doMoreWork()) {
return false;
}

parkour.getLogger().info("Parkour successfully upgraded to " + parkour.getDescription().getVersion());
parkour.getLogger().info("The plugin will now start up...");
parkour.reloadConfig();
parkour.onEnable();
return true;
private boolean performPartialUpgrade() {
return new PartialUpgradeTask(this, defaultConfig.getString("Version")).start();
}

public FileConfiguration getDefaultConfig() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.github.a5h73y.parkour.upgrade;
package io.github.a5h73y.parkour.upgrade.major;

import io.github.a5h73y.parkour.upgrade.ParkourUpgrader;
import io.github.a5h73y.parkour.upgrade.TimedConfigUpgradeTask;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
Expand Down Expand Up @@ -33,6 +35,9 @@ protected boolean doWork() {
}

transferAndDelete(courseName + ".Finished", courseName + ".Ready");
transferAndDelete(courseName + ".Level", courseName + ".RewardLevel");
transferAndDelete(courseName + ".LevelAdd", courseName + ".RewardLevelAdd");

if (getConfig().contains(courseName + ".RewardDelay")) {
getConfig().set(courseName + ".RewardDelay",
getConfig().getInt(courseName + ".RewardDelay") * 24);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package io.github.a5h73y.parkour.upgrade;
package io.github.a5h73y.parkour.upgrade.major;

import io.github.a5h73y.parkour.Parkour;
import io.github.a5h73y.parkour.database.ParkourDatabase;
import io.github.a5h73y.parkour.database.SQLite;
import io.github.a5h73y.parkour.database.TimeEntry;
import io.github.a5h73y.parkour.upgrade.ParkourUpgrader;
import io.github.a5h73y.parkour.upgrade.TimedUpgradeTask;
import java.io.File;
import java.sql.ResultSet;
import java.sql.SQLException;
Expand Down Expand Up @@ -101,7 +103,13 @@ protected boolean doWork() {
return success;
}

protected boolean doMoreWork() {
/**
* Proceed to do the additional Database work required.
* Reinserts the times and cleans up the temporary tables.
*
* @return success
*/
public boolean doMoreWork() {
boolean success = true;
// create a proper Parkour connection
// which also setups up the new tables
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package io.github.a5h73y.parkour.upgrade;
package io.github.a5h73y.parkour.upgrade.major;

import com.cryptomorin.xseries.XMaterial;
import io.github.a5h73y.parkour.Parkour;
import io.github.a5h73y.parkour.upgrade.ParkourUpgrader;
import io.github.a5h73y.parkour.upgrade.TimedConfigUpgradeTask;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
Expand Down Expand Up @@ -53,7 +54,6 @@ protected boolean doWork() {
// miscellaneous
getConfig().set("OnJoin.Item.HideAllEnabled.Material",
getConfig().getString("OnJoin.Item.HideAll.Material"));
getConfig().set("Version", Double.valueOf(Parkour.getInstance().getDescription().getVersion()));
if ("SAPLING".equals(getConfig().getString("OnJoin.Item.Leave.Material"))) {
getConfig().set("OnJoin.Item.Leave.Material", XMaterial.OAK_SAPLING.parseMaterial().name());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.github.a5h73y.parkour.upgrade;
package io.github.a5h73y.parkour.upgrade.major;

import io.github.a5h73y.parkour.upgrade.ParkourUpgrader;
import io.github.a5h73y.parkour.upgrade.TimedConfigUpgradeTask;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
Expand Down Expand Up @@ -55,6 +57,9 @@ protected boolean doWork() {
convertPlayerInventory(playerName, targetPlayer);
}

transferAndDelete(targetPlayer.getUniqueId() + ".Level", targetPlayer.getUniqueId() + ".ParkourLevel");
transferAndDelete(targetPlayer.getUniqueId() + ".Rank", targetPlayer.getUniqueId() + ".ParkourRank");

count++;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.github.a5h73y.parkour.upgrade;
package io.github.a5h73y.parkour.upgrade.major;

import io.github.a5h73y.parkour.upgrade.ParkourUpgrader;
import io.github.a5h73y.parkour.upgrade.TimedConfigUpgradeTask;
import java.io.IOException;
import java.util.Set;
import java.util.regex.Matcher;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package io.github.a5h73y.parkour.upgrade.minor;

import io.github.a5h73y.parkour.upgrade.ParkourUpgrader;
import io.github.a5h73y.parkour.upgrade.TimedUpgradeTask;
import java.io.IOException;
import java.util.Set;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;

public class PartialUpgradeTask extends TimedUpgradeTask {

private final String previousVersion;

public PartialUpgradeTask(ParkourUpgrader parkourUpgrader, String previousVersion) {
super(parkourUpgrader);
this.previousVersion = previousVersion;
}

@Override
protected String getTitle() {
return previousVersion + " Config";
}

@Override
protected boolean doWork() {
switch (previousVersion) {
case "6.0":
case "6.1":
convertPlayerParkourLevelConfig();
convertCourseParkourLevelConfig();
break;

default:
break;
}

return true;
}

private void convertPlayerParkourLevelConfig() {
FileConfiguration playerConfig = getParkourUpgrader().getPlayerConfig();
ConfigurationSection playerSection = playerConfig.getConfigurationSection("");

if (playerSection != null) {
Set<String> playerIds = playerSection.getKeys(false);
for (String playerId : playerIds) {
if (playerConfig.contains(playerId + ".Level")) {
playerConfig.set(playerId + ".ParkourLevel", playerConfig.getInt(playerId + ".Level"));
playerConfig.set(playerId + ".Level", null);
}
if (playerConfig.contains(playerId + ".Rank")) {
playerConfig.set(playerId + ".ParkourRank", playerConfig.getString(playerId + ".Rank"));
playerConfig.set(playerId + ".Rank", null);
}
}

try {
getParkourUpgrader().savePlayerConfig();
} catch (IOException e) {
getParkourUpgrader().getLogger().severe("An error occurred during upgrade: " + e.getMessage());
e.printStackTrace();
}
}
}

private void convertCourseParkourLevelConfig() {
FileConfiguration coursesConfig = getParkourUpgrader().getCoursesConfig();

for (String courseName : coursesConfig.getStringList("Courses")) {
if (coursesConfig.contains(courseName + ".Level")) {
coursesConfig.set(courseName + ".RewardLevel", coursesConfig.getInt(courseName + ".Level"));
coursesConfig.set(courseName + ".Level", null);
}

if (coursesConfig.contains(courseName + ".LevelAdd")) {
coursesConfig.set(courseName + ".RewardLevelAdd", coursesConfig.getInt(courseName + ".LevelAdd"));
coursesConfig.set(courseName + ".LevelAdd", null);
}
}

try {
getParkourUpgrader().saveCoursesConfig();
} catch (IOException e) {
getParkourUpgrader().getLogger().severe("An error occurred during upgrade: " + e.getMessage());
e.printStackTrace();
}
}
}

0 comments on commit 3e0241c

Please sign in to comment.