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
16 changes: 16 additions & 0 deletions MomentumSpeed/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# MomentumSpeed

Simple Spigot plugin that increases a player's walk speed while they are moving and resets it immediately when the player stops.

Configuration:
- To change sensitivity or strength, edit the constants in the Java source:
- MOVE_THRESHOLD
- ACCELERATION
- MAX_MOMENTUM

Build:
- This repository builds each plugin with Maven; the provided POM follows the same pattern as SpearUpgradesCow.
- Run `mvn -f MomentumSpeed/pom.xml clean package` or rely on your repo CI/build scripts.

Install:
- Drop the shaded JAR from target/ into your server's plugins folder.
76 changes: 76 additions & 0 deletions MomentumSpeed/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.johnfmarion</groupId>
<artifactId>MomentumSpeed</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>

<name>MomentumSpeed</name>
<description>Increase player speed while moving, reset when stopping.</description>

<properties>
<java.version>21</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
<defaultGoal>clean package</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>

<repositories>
<repository>
<id>spigotmc-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.21.11-R0.2-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package com.johnfmarion.momentumspeed;

import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;

/**
* Simple Spigot plugin that increases player walk speed while they're moving and
* resets it immediately when they stop moving.
*
* - Follows the existing plugin structure in this repo (Maven + shade).
* - Tweak MOVE_THRESHOLD, ACCELERATION, MAX_MOMENTUM to change behaviour.
*/
public class MomentumSpeedPlugin extends JavaPlugin implements Listener {
// Tweak these to change how speed builds up and the maximum extra speed
private static final double MOVE_THRESHOLD = 0.001; // minimum horizontal movement per event to count as "moving"
private static final double ACCELERATION = 0.2; // momentum increase per block moved (per move event)
private static final double MAX_MOMENTUM = 0.5; // max multiplier (0.5 = +50% speed)

// Per-player state
private final Map<UUID, Double> momentum = new ConcurrentHashMap<>();
private final Map<UUID, Float> baseWalkSpeed = new ConcurrentHashMap<>();

@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
// store base walk speed for any online players (reloads / restarts)
for (Player p : getServer().getOnlinePlayers()) {
baseWalkSpeed.put(p.getUniqueId(), p.getWalkSpeed());
}
getLogger().info("MomentumSpeed enabled");
}

@Override
public void onDisable() {
// restore walk speeds
for (Player p : getServer().getOnlinePlayers()) {
Float base = baseWalkSpeed.get(p.getUniqueId());
if (base != null) p.setWalkSpeed(base);
}
momentum.clear();
baseWalkSpeed.clear();
getLogger().info("MomentumSpeed disabled");
}

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player p = event.getPlayer();
baseWalkSpeed.put(p.getUniqueId(), p.getWalkSpeed());
}

@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
UUID id = event.getPlayer().getUniqueId();
// restore base on quit (defensive)
Float base = baseWalkSpeed.remove(id);
if (base != null) {
try { event.getPlayer().setWalkSpeed(base); } catch (Exception ignored) {}
}
momentum.remove(id);
}

@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
Location from = event.getFrom();
Location to = event.getTo();
if (to == null) return;
Player player = event.getPlayer();

double dx = to.getX() - from.getX();
double dz = to.getZ() - from.getZ();
double horizontalDist = Math.sqrt(dx * dx + dz * dz);

UUID id = player.getUniqueId();

if (horizontalDist > MOVE_THRESHOLD) {
double m = momentum.getOrDefault(id, 0.0);
m = Math.min(MAX_MOMENTUM, m + horizontalDist * ACCELERATION);
momentum.put(id, m);

// ensure we have the base walk speed stored
float base = baseWalkSpeed.computeIfAbsent(id, k -> player.getWalkSpeed());
// Walk speed must stay within valid range; default is ~0.2f.
float newSpeed = (float) Math.min(1.0d, base * (1.0d + m));
try {
player.setWalkSpeed(newSpeed);
} catch (IllegalArgumentException ignored) {
// clamp defensively if something unexpected happens
player.setWalkSpeed(Math.max(-1.0f, Math.min(1.0f, newSpeed)));
}
} else {
// stopped moving: remove momentum and reset speed
momentum.remove(id);
Float base = baseWalkSpeed.get(id);
if (base != null) {
try { player.setWalkSpeed(base); } catch (Exception ignored) {}
}
}
}
}
6 changes: 6 additions & 0 deletions MomentumSpeed/src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
name: MomentumSpeed
main: com.johnfmarion.momentumspeed.MomentumSpeedPlugin
version: 1.0.0
api-version: "1.21"
description: Increases player speed while moving and resets it when the player stops.
author: Birdnamedlarry
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ public void onPlayerJoin(PlayerJoinEvent event) {
}

// -------------------------------------------------------------------------
// Cow kill with spear -> upgrade one tier
// Player kill with spear -> upgrade one tier.
// -------------------------------------------------------------------------
@EventHandler
public void onEntityDeath(EntityDeathEvent event) {
if (!(event.getEntity() instanceof Cow)) return;
if (!(event.getEntity() instanceof Player)) return;

Player killer = event.getEntity().getKiller();
if (killer == null) return;
Expand Down