Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 21 additions & 6 deletions src/main/java/me/makkuusen/timing/system/TSListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import me.makkuusen.timing.system.database.EventDatabase;
import me.makkuusen.timing.system.database.TSDatabase;
import me.makkuusen.timing.system.database.TrackDatabase;
import me.makkuusen.timing.system.drs.PushToPass;
import me.makkuusen.timing.system.heat.Heat;
import me.makkuusen.timing.system.heat.HeatState;
import me.makkuusen.timing.system.heat.Lap;
Expand Down Expand Up @@ -191,7 +192,16 @@ public void onVehicleExit(VehicleExitEvent event) {
}
var maybeDriver = EventDatabase.getDriverFromRunningHeat(player.getUniqueId());
if (maybeDriver.isPresent()) {
if (maybeDriver.get().getState() == DriverState.LOADED || maybeDriver.get().getState() == DriverState.STARTING || maybeDriver.get().getState() == DriverState.RUNNING || maybeDriver.get().getState() == DriverState.RESET || maybeDriver.get().getState() == DriverState.LAPRESET) {
Driver driver = maybeDriver.get();

if (driver.getHeat().getPushToPass() != null && driver.getHeat().getPushToPass()
&& driver.getState() == DriverState.RUNNING) {
PushToPass.togglePushToPass(player);
event.setCancelled(true);
return;
}

if (driver.getState() == DriverState.LOADED || driver.getState() == DriverState.STARTING || driver.getState() == DriverState.RUNNING || driver.getState() == DriverState.RESET || driver.getState() == DriverState.LAPRESET) {
event.setCancelled(true);
return;
}
Expand Down Expand Up @@ -738,11 +748,13 @@ private static void handleHeat(Driver driver, PlayerMoveEvent e) {

if (driver.getHeat().getRound() instanceof FinalRound) {
// Check for pitstop
for (var r : track.getTrackRegions().getRegions(TrackRegion.RegionType.PIT)) {
if (r.contains(player.getLocation())) {
if (driver.passPit()) {
heat.updatePositions();
break;
if (!heat.isBoatSwitchingEnabled()) {
for (var r : track.getTrackRegions().getRegions(TrackRegion.RegionType.PIT)) {
if (r.contains(player.getLocation())) {
if (driver.passPit()) {
heat.updatePositions();
break;
}
}
}
}
Expand Down Expand Up @@ -770,6 +782,9 @@ private static void handleHeat(Driver driver, PlayerMoveEvent e) {
if (trackRegion.contains(player.getLocation()) && !inPits.contains(player.getUniqueId())) {
inPits.add(player.getUniqueId());
heat.updatePositions();
if (driver.getHeat().getPushToPass() != null && driver.getHeat().getPushToPass()) {
PushToPass.handleInpitEntry(player);
}
} else if (!trackRegion.contains(player.getLocation()) && inPits.contains(player.getUniqueId())) {
inPits.remove(player.getUniqueId());
heat.updatePositions();
Expand Down
10 changes: 8 additions & 2 deletions src/main/java/me/makkuusen/timing/system/Tasks.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import me.makkuusen.timing.system.database.TSDatabase;
import me.makkuusen.timing.system.database.TrackDatabase;
import me.makkuusen.timing.system.drs.DrsManager;
import me.makkuusen.timing.system.drs.PushToPass;
import me.makkuusen.timing.system.heat.QualifyHeat;
import me.makkuusen.timing.system.participant.Driver;
import me.makkuusen.timing.system.participant.DriverState;
Expand Down Expand Up @@ -164,9 +165,9 @@ private static void displayDriverTimer(Player player, Driver driver) {
}

private static String getPositionOrDrsDisplay(Driver driver) {
UUID playerId = driver.getTPlayer().getUniqueId();

if (driver.getHeat().getDrs() != null && driver.getHeat().getDrs()) {
UUID playerId = driver.getTPlayer().getUniqueId();

if (DrsManager.hasDrsActive(playerId)) {
return "&s&lDRS";
}
Expand Down Expand Up @@ -390,6 +391,11 @@ private void drawPolyRegion(TrackPolyRegion polyRegion, Player player, Particle
public void startDrsCleanup(TimingSystem plugin) {
Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, DrsManager::cleanupOldDetections, 100, 100);
}

public void startPushToPassUpdater(TimingSystem plugin) {
Bukkit.getScheduler().runTaskTimerAsynchronously(plugin,
PushToPass::updateAllCharges, 2, 2);
}
}


1 change: 1 addition & 0 deletions src/main/java/me/makkuusen/timing/system/TimingSystem.java
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ public void onEnable() {
tasks.startParticleSpawner(plugin);
tasks.generateTotalTime(plugin);
tasks.startDrsCleanup(plugin);
tasks.startPushToPassUpdater(plugin);

// Small check to make sure that PlaceholderAPI is installed
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ public class TimingSystemConfiguration {
private Integer drsMaxDelta;
private Integer drsDuration;
private Double drsForwardAccel;
private Integer pushToPassMaxUseTime;
private Integer pushToPassFullChargeTime;
private Double pushToPassForwardAccel;
private Integer pushToPassStartingCharge;
private final boolean frostHexAddOnEnabled;
private final boolean medalsAddOnEnabled;
private final boolean medalsShowNextMedal;
Expand Down Expand Up @@ -74,6 +78,10 @@ public class TimingSystemConfiguration {
drsMaxDelta = plugin.getConfig().getInt("drs.maxDelta", 1150);
drsDuration = plugin.getConfig().getInt("drs.duration", 2000);
drsForwardAccel = plugin.getConfig().getDouble("drs.forwardAccel", 0.06);
pushToPassMaxUseTime = plugin.getConfig().getInt("pushtopass.maxUseTime", 5000);
pushToPassFullChargeTime = plugin.getConfig().getInt("pushtopass.fullChargeTime", 60000);
pushToPassForwardAccel = plugin.getConfig().getDouble("pushtopass.forwardAccel", 0.05);
pushToPassStartingCharge = plugin.getConfig().getInt("pushtopass.startingCharge", 0);
frostHexAddOnEnabled = plugin.getConfig().getBoolean("frosthexaddon.enabled");
medalsAddOnEnabled = plugin.getConfig().getBoolean("medalsaddon.enabled");
medalsShowNextMedal = plugin.getConfig().getBoolean("medalsaddon.showNextMedal");
Expand Down Expand Up @@ -148,6 +156,22 @@ public void setDrsForwardAccel(double value) {
drsForwardAccel = value;
}

public void setPushToPassMaxUseTime(int value) {
pushToPassMaxUseTime = value;
}

public void setPushToPassFullChargeTime(int value) {
pushToPassFullChargeTime = value;
}

public void setPushToPassForwardAccel(double value) {
pushToPassForwardAccel = value;
}

public void setPushToPassStartingCharge(int value) {
pushToPassStartingCharge = value;
}

public <T extends TSDatabase & EventDatabase> T getDatabaseType() {
// This could maybe be improved but I have no idea :P
return (T) databaseType;
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/me/makkuusen/timing/system/commands/CommandHeat.java
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,17 @@ public static void onHeatInfo(Player player, Heat heat) {
}
player.sendMessage(drsMessage);

var pushToPassMessage = Component.text("Push to Pass: ").color(theme.getPrimary());

if (!heat.isFinished() && player.hasPermission("timingsystem.packs.eventadmin")) {
String p2pValue = (heat.getPushToPass() != null && heat.getPushToPass()) ? "true" : "false";
pushToPassMessage = pushToPassMessage.append(theme.getEditButton(player, p2pValue, theme).clickEvent(ClickEvent.suggestCommand("/heat set pushtopass " + heat.getName() + " ")));
} else {
String p2pValue = (heat.getPushToPass() != null && heat.getPushToPass()) ? "enabled" : "disabled";
pushToPassMessage = pushToPassMessage.append(theme.highlight(p2pValue));
}
player.sendMessage(pushToPassMessage);

if (heat.getFastestLapUUID() != null) {
Driver d = heat.getDrivers().get(heat.getFastestLapUUID());
player.sendMessage(Text.get(player, Info.HEAT_INFO_FASTEST_LAP, "%time%", ApiUtilities.formatAsTime(d.getBestLap().get().getLapTime()), "%player%", d.getTPlayer().getName()));
Expand Down Expand Up @@ -397,6 +408,14 @@ public static void onHeatSetDrsDowntime(Player player, Heat heat, Integer laps)
Text.send(player, Success.SAVED);
}

@Subcommand("set pushtopass|p2p")
@CommandCompletion("@heat true|false")
@CommandPermission("%permissionheat_set_pushtopass")
public static void onHeatSetPushToPass(Player player, Heat heat, Boolean pushToPass) {
heat.setPushToPass(pushToPass);
Text.send(player, Success.SAVED);
}

@Subcommand("set lonely")
@CommandCompletion("@heat true|false")
@CommandPermission("%permissionheat_set_lonely")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,42 @@ public static void onDrsForwardAccelChange(CommandSender sender, double value) {
Text.send(sender, Success.SAVED);
}

@Subcommand("pushtopass|p2p maxusetime")
@CommandCompletion("<value in ms>")
@CommandPermission("%permissiontimingsystem_pushtopass_set_maxusetime")
public static void onPushToPassMaxUseTimeChange(CommandSender sender, int value) {
TimingSystem.configuration.setPushToPassMaxUseTime(value);
Text.send(sender, Success.SAVED);
}

@Subcommand("pushtopass|p2p fullchargetime")
@CommandCompletion("<value in ms>")
@CommandPermission("%permissiontimingsystem_pushtopass_set_fullchargetime")
public static void onPushToPassFullChargeTimeChange(CommandSender sender, int value) {
TimingSystem.configuration.setPushToPassFullChargeTime(value);
Text.send(sender, Success.SAVED);
}

@Subcommand("pushtopass|p2p forwardaccel")
@CommandCompletion("<value>")
@CommandPermission("%permissiontimingsystem_pushtopass_set_forwardaccel")
public static void onPushToPassForwardAccelChange(CommandSender sender, double value) {
TimingSystem.configuration.setPushToPassForwardAccel(value);
Text.send(sender, Success.SAVED);
}

@Subcommand("pushtopass|p2p startingcharge")
@CommandCompletion("<0-100>")
@CommandPermission("%permissiontimingsystem_pushtopass_set_startingcharge")
public static void onPushToPassStartingChargeChange(CommandSender sender, int value) {
if (value < 0 || value > 100) {
Text.send(sender, Error.GENERIC);
return;
}
TimingSystem.configuration.setPushToPassStartingCharge(value);
Text.send(sender, Success.SAVED);
}

@Subcommand("shortname")
@CommandCompletion("<shortname> @players")
@CommandPermission("%permissiontimingsystem_shortname_others")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public boolean update() {
try {
var row = DB.getFirstRow("SELECT * FROM `ts_version` ORDER BY `date` DESC;");

int databaseVersion = 13;
int databaseVersion = 14;
if (row == null) { // First startup
DB.executeInsert("INSERT INTO `ts_version` (`version`, `date`) VALUES(?, ?);",
databaseVersion,
Expand Down Expand Up @@ -147,6 +147,9 @@ private static void updateDatabase(int previousVersion) throws SQLException {
if (previousVersion < 13) {
Version13.updateMySQL();
}
if (previousVersion < 14) {
Version14.updateMySQL();
}
}


Expand Down Expand Up @@ -281,6 +284,7 @@ PRIMARY KEY (`id`)
`boatSwitching` tinyint(1) DEFAULT NULL,
`drs` tinyint(1) NOT NULL DEFAULT '0',
`drsDowntime` int(11) DEFAULT NULL,
`pushToPass` tinyint(1) NOT NULL DEFAULT '0',
`isRemoved` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;""");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public boolean update() {
try {
var row = DB.getFirstRow("SELECT * FROM `ts_version` ORDER BY `date` DESC;");

int databaseVersion = 13;
int databaseVersion = 14;
if (row == null) { // First startup
DB.executeInsert("INSERT INTO `ts_version` (`version`, `date`) VALUES(?, ?);",
databaseVersion,
Expand Down Expand Up @@ -110,6 +110,10 @@ private static void updateDatabase(int previousVersion) throws SQLException {
if (previousVersion < 13) {
Version13.updateSQLite();
}

if (previousVersion < 14) {
Version14.updateSQLite();
}
}


Expand Down Expand Up @@ -235,6 +239,7 @@ public boolean createTables() {
`collisionMode` TEXT DEFAULT NULL,
`drs` INTEGER NOT NULL DEFAULT 0,
`drsDowntime` INTEGER DEFAULT NULL,
`pushToPass` INTEGER NOT NULL DEFAULT 0,
`isRemoved` INTEGER NOT NULL DEFAULT '0'
);""");

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package me.makkuusen.timing.system.database.updates;

import co.aikar.idb.DB;

import java.sql.SQLException;

public class Version14 {

public static void updateMySQL() throws SQLException {
try {
DB.executeUpdate("ALTER TABLE `ts_heats` ADD COLUMN `pushToPass` tinyint(1) NOT NULL DEFAULT 0");
} catch (SQLException e) {
if (e.getErrorCode() != 1060) {
throw e;
}
}
}

public static void updateSQLite() throws SQLException {
try {
DB.executeUpdate("ALTER TABLE `ts_heats` ADD COLUMN `pushToPass` INTEGER NOT NULL DEFAULT 0");
} catch (SQLException e) {
if (!e.getMessage().toLowerCase().contains("duplicate column")) {
throw e;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ private static void sendForwardAccelerationPacket(Player player, float accelerat
}
}

private static void resetToTrackSettings(Player player) {
public static void resetToTrackSettings(Player player) {
Optional<Driver> maybeDriver = EventDatabase.getDriverFromRunningHeat(player.getUniqueId());
if (maybeDriver.isPresent()) {
Heat heat = maybeDriver.get().getHeat();
Expand Down
Loading