diff --git a/MomentumSpeed/README.md b/MomentumSpeed/README.md
new file mode 100644
index 0000000..86b3b6b
--- /dev/null
+++ b/MomentumSpeed/README.md
@@ -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.
diff --git a/MomentumSpeed/pom.xml b/MomentumSpeed/pom.xml
new file mode 100644
index 0000000..461d662
--- /dev/null
+++ b/MomentumSpeed/pom.xml
@@ -0,0 +1,76 @@
+
+
+ 4.0.0
+
+ com.johnfmarion
+ MomentumSpeed
+ 1.0.0
+ jar
+
+ MomentumSpeed
+ Increase player speed while moving, reset when stopping.
+
+
+ 21
+ UTF-8
+
+
+
+ clean package
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.11.0
+
+ ${java.version}
+ ${java.version}
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.5.0
+
+
+ package
+
+ shade
+
+
+ false
+
+
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+ spigotmc-repo
+ https://hub.spigotmc.org/nexus/content/repositories/snapshots/
+
+
+ sonatype
+ https://oss.sonatype.org/content/groups/public/
+
+
+
+
+
+ org.spigotmc
+ spigot-api
+ 1.21.11-R0.2-SNAPSHOT
+ provided
+
+
+
diff --git a/MomentumSpeed/src/main/java/com/johnfmarion/momentumspeed/MomentumSpeedPlugin.java b/MomentumSpeed/src/main/java/com/johnfmarion/momentumspeed/MomentumSpeedPlugin.java
new file mode 100644
index 0000000..691af52
--- /dev/null
+++ b/MomentumSpeed/src/main/java/com/johnfmarion/momentumspeed/MomentumSpeedPlugin.java
@@ -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 momentum = new ConcurrentHashMap<>();
+ private final Map 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) {}
+ }
+ }
+ }
+}
diff --git a/MomentumSpeed/src/main/resources/plugin.yml b/MomentumSpeed/src/main/resources/plugin.yml
new file mode 100644
index 0000000..cb3ea31
--- /dev/null
+++ b/MomentumSpeed/src/main/resources/plugin.yml
@@ -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
diff --git a/SpearUpgradesCow/src/main/java/com/johnfmarion/spearupgrades/SpearListener.java b/SpearUpgradesCow/src/main/java/com/johnfmarion/spearupgrades/SpearListener.java
index da9936f..5ff9212 100644
--- a/SpearUpgradesCow/src/main/java/com/johnfmarion/spearupgrades/SpearListener.java
+++ b/SpearUpgradesCow/src/main/java/com/johnfmarion/spearupgrades/SpearListener.java
@@ -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;