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;