diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..bc0353c
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,50 @@
+
+
+
+ 4.0.0
+
+ com.rsscripting
+ RS-FasterMinecarts
+ 0.1.0
+ jar
+
+
+ 21
+ UTF-8
+
+
+
+
+ papermc
+ https://repo.papermc.io/repository/maven-public/
+
+
+
+
+
+ io.papermc.paper
+ paper-api
+ 1.21.10-R0.1-SNAPSHOT
+ provided
+
+
+
+
+ RS-FasterMinecarts-0-1-0
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.14.1
+
+ 21
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/rsscripting/rsfasterminecarts/MinecartListener.java b/src/main/java/com/rsscripting/rsfasterminecarts/MinecartListener.java
new file mode 100644
index 0000000..db47886
--- /dev/null
+++ b/src/main/java/com/rsscripting/rsfasterminecarts/MinecartListener.java
@@ -0,0 +1,66 @@
+package com.rsscripting.rsfasterminecarts;
+
+import org.bukkit.entity.Minecart;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.vehicle.VehicleEnterEvent;
+import org.bukkit.event.vehicle.VehicleExitEvent;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+public class MinecartListener implements Listener {
+
+ private final RSFasterMinecarts plugin;
+ private final Map originalSpeeds = new HashMap<>();
+
+ public MinecartListener(RSFasterMinecarts plugin) {
+ this.plugin = plugin;
+ }
+
+ @EventHandler
+ public void onVehicleEnter(VehicleEnterEvent event) {
+
+ if (!(event.getVehicle() instanceof Minecart minecart)) {
+ return;
+ }
+
+ if (!(event.getEntered() instanceof Player)) {
+ return;
+ }
+
+ UUID minecartId = minecart.getUniqueId();
+
+ // Do not multiply an already modified minecart.
+ if (originalSpeeds.containsKey(minecartId)) {
+ return;
+ }
+
+ double originalSpeed = minecart.getMaxSpeed();
+ double multiplier = plugin.getConfig().getDouble("max-speed", 3.0);
+
+ originalSpeeds.put(minecartId, originalSpeed);
+
+ minecart.setMaxSpeed(originalSpeed * multiplier);
+ }
+
+ @EventHandler
+ public void onVehicleExit(VehicleExitEvent event) {
+
+ if (!(event.getVehicle() instanceof Minecart minecart)) {
+ return;
+ }
+
+ UUID minecartId = minecart.getUniqueId();
+
+ Double originalSpeed = originalSpeeds.remove(minecartId);
+
+ if (originalSpeed == null) {
+ return;
+ }
+
+ minecart.setMaxSpeed(originalSpeed);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/rsscripting/rsfasterminecarts/RSFasterMinecarts.java b/src/main/java/com/rsscripting/rsfasterminecarts/RSFasterMinecarts.java
new file mode 100644
index 0000000..e68e0e0
--- /dev/null
+++ b/src/main/java/com/rsscripting/rsfasterminecarts/RSFasterMinecarts.java
@@ -0,0 +1,24 @@
+package com.rsscripting.rsfasterminecarts;
+
+import org.bukkit.plugin.java.JavaPlugin;
+
+public class RSFasterMinecarts extends JavaPlugin {
+
+ @Override
+ public void onEnable() {
+
+ saveDefaultConfig();
+
+ getServer().getPluginManager().registerEvents(
+ new MinecartListener(this),
+ this
+ );
+
+ getLogger().info("RS-FasterMinecarts enabled.");
+ }
+
+ @Override
+ public void onDisable() {
+ getLogger().info("RS-FasterMinecarts disabled.");
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
new file mode 100644
index 0000000..0d469d5
--- /dev/null
+++ b/src/main/resources/config.yml
@@ -0,0 +1,4 @@
+# Maximum speed multiplier for player-occupied minecarts.
+# 1.0 = normal Minecraft speed
+# 3.0 = three times normal speed
+max-speed: 3.0
\ No newline at end of file
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
new file mode 100644
index 0000000..cb51fe6
--- /dev/null
+++ b/src/main/resources/plugin.yml
@@ -0,0 +1,6 @@
+name: RS-FasterMinecarts
+version: ${project.version}
+main: com.rsscripting.rsfasterminecarts.RSFasterMinecarts
+api-version: '1.21'
+description: Increases the maximum speed of player-occupied minecarts.
+author: RS Scripting
\ No newline at end of file
diff --git a/target/classes/com/rsscripting/rsfasterminecarts/MinecartListener.class b/target/classes/com/rsscripting/rsfasterminecarts/MinecartListener.class
new file mode 100644
index 0000000..acca1ef
Binary files /dev/null and b/target/classes/com/rsscripting/rsfasterminecarts/MinecartListener.class differ