Skip to main content
Dan's Plugins Community
HomeNewsGuidesLeaderboardAboutRoad MapCommissionsDev PortalAccount
All plugins
Dan's Spawn System icon

Dan's Spawn System

0

1 servers
Latest: v2.2.0
107 downloads on GitHub
Tested on Minecraft 26.2
186 downloads on SpigotMC

First released August 13, 2020 · Last updated October 11, 2026

Downloads from this site

67 total

4 latest (v2.2.0)

Allows players to use signs to select a custom spawn in their world.

admin
world
DownloadUser guideSourceSpigotMC
Rendered in 3D from a test server’s real world, as a spectator camera player saw it while a bot player used the plugin. The 3D viewer draws no signs, so the sign is drawn from its real text and position on the server; the chat lines are recreated from the server’s real output.

Usage

Last reported in use 32 days ago

Usage reported by trace — how it works. CI and test servers are excluded.

Usage of every plugin


Verified before release

Version 2.2.0 was started on real servers running Minecraft 1.19.4, 1.21.11, 26.2 and 26.3 before it was published. The jar you download is the exact one that passed. How releases work

Versions

All releases on GitHub
Latest
2.2.0October 11, 2026· 4 downloads

2.2.0

For a server running v2.1.0, this release is a drop-in upgrade. Saved spawns load as before and no configuration or permission changes are needed. The difference is in the server log: problems reading or writing spawn data now appear as warnings tagged with the plugin's name, with full error details, instead of untagged console lines. They are easier to spot and filter. On a first start, before any spawn has been saved, you may see a single "Error loading the spawns!" warning, which is expected.

Changes

Logging

  • Spawn storage errors are now logged through the plugin logger at WARNING level. Save and load failures include the underlying exception, and messages about missing or unreadable coordinates or world names in spawn files are tagged with the plugin name (#108).

Version

v2.1.0 → 2.2.0 — MINOR. Mechanical floor from comparing the two jars: MINOR. Judgment: The only operator-facing change is #108: spawn storage errors now go through the plugin's logger at WARNING level, with stack traces, instead of plain stdout. Spawn files are read and written the same way, and no command, config key or permission changed. The StorageService constructor now takes a Plugin instead of a DansSpawnSystem; existing callers still compile, but code built against the old constructor must be recompiled, which is ordinary minor-level API movement. The bundled trace-client update adds an install-ID-file option that this plugin doesn't use, and the reporting-link changes only touch comments and log text, so neither justifies raising the level. I kept the minor floor.

  • minor: storage path changed: src/main/java/dansplugins/spawnsystem/services/StorageService.java

<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>

  • dansplugins.spawnsystem.services.StorageService: removed/changed public dansplugins.spawnsystem.services.StorageService(dansplugins.spawnsystem.DansSpawnSystem, dansplugins.spawnsystem.data.PersistentData);
  • dansplugins.spawnsystem.services.StorageService: added public dansplugins.spawnsystem.services.StorageService(org.bukkit.plugin.Plugin, dansplugins.spawnsystem.data.PersistentData);
  • dansplugins.spawnsystem.trace.TraceClient: added public static java.lang.String installIdFromFile(java.io.File);
  • dansplugins.spawnsystem.trace.TraceClient$Builder: added public dansplugins.spawnsystem.trace.TraceClient$Builder installIdFile(java.io.File);

</details>

Verification

Verified on a real Spigot server before publication; this release carries the exact jar that was verified.

  • boot gate run: booted twice on a fresh Spigot server running Minecraft 1.19.4 (11 assertions passed).
  • boot gate run: booted twice on a fresh Spigot server running Minecraft 1.21.11 (11 assertions passed).
  • boot gate run: booted twice on a fresh Spigot server running Minecraft 26.2 (11 assertions passed).
  • boot gate run: booted twice on a fresh Spigot server running Minecraft 26.3 (11 assertions passed).
  • save-compatibility gate run: data written by v2.1.0 was loaded by this release across two restarts with nothing lost (16 assertions passed).

Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.


drafted by Claude on behalf of Daniel Stephenson

Dans-Spawn-System-2.2.0.jar (58.2 KB)

2.1.0

For a server running v2.0.0, this is a drop-in upgrade. /resetspawn now also works when typed as /dansspawnsystem:resetspawn, and the plugin has been checked against Minecraft 26.3. Usage reporting changes in two ways when it is on. It creates a random server ID and stores it in plugins/trace/config.yml. It also sends that ID and the plugin version with every event. The ID does not identify any person, account or IP address. No player data is sent. Your existing settings and data files are unchanged, and turning reporting off works exactly as before.

Changes

Commands

  • /resetspawn now works the same way when typed in its namespaced form /dansspawnsystem:resetspawn. Before, that form was not handled (#93).

Compatibility

  • Checked against Minecraft 26.3, alongside 1.19.4, 1.21.11 and 26.2 (#101).

Usage reporting

  • Every event now includes a random server ID, so servers can be counted instead of raw events. The ID is created once and saved as the server-id line in plugins/trace/config.yml, and all plugins on the server that use this reporting share it. Delete the line to get a new ID. No ID is created or saved while reporting is off (#99).
  • Every event, including command events, now carries the plugin version (#96).
  • plugins/trace/config.yml accepts an optional tags: block, and those tags are added to every event from the server. For example, set ci: "true" on a test server so its events are left out of real-server figures (#95).
  • The startup message and the comments in config.yml now mention the server ID (#100).

Version

v2.0.0 → 2.1.0 — MINOR. Mechanical floor from comparing the two jars: PATCH. Judgment: The mechanical check flagged only signature changes to internal classes (CommandService, EventRegistry, TraceClient). The plugin itself changed in ways that check cannot see. Usage reporting now writes a new random server-id line to plugins/trace/config.yml, sends it and the plugin version on every event, and honours a new optional server-wide tags: block. That is new data written and new behaviour, so the floor rises to minor. Nothing breaks: existing config keys, permissions, data files and command arguments keep their meaning, and the command-routing change only makes the namespaced form /dansspawnsystem:resetspawn work too.

  • no interface or storage difference observed between the jars

<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>

  • dansplugins.spawnsystem.services.CommandService: removed/changed public boolean interpretCommand(org.bukkit.command.CommandSender, java.lang.String, java.lang.String[]);
  • dansplugins.spawnsystem.services.CommandService: removed/changed public dansplugins.spawnsystem.services.CommandService(dansplugins.spawnsystem.data.PersistentData, dansplugins.spawnsystem.utils.UUIDChecker, dansplugins.spawnsystem.DansSpawnSystem);
  • dansplugins.spawnsystem.services.CommandService: added public boolean interpretCommand(org.bukkit.command.CommandSender, org.bukkit.command.Command, java.lang.String[]);
  • dansplugins.spawnsystem.services.CommandService: added public dansplugins.spawnsystem.services.CommandService(dansplugins.spawnsystem.data.PersistentData, dansplugins.spawnsystem.utils.UUIDChecker, org.bukkit.Server);
  • dansplugins.spawnsystem.trace.TraceClient: removed/changed public static dansplugins.spawnsystem.trace.TraceClient$Builder builder(java.lang.String, java.lang.String);
  • dansplugins.spawnsystem.trace.TraceClient: added public java.lang.String installId();
  • dansplugins.spawnsystem.trace.TraceClient: added public static dansplugins.spawnsystem.trace.TraceClient$Builder builder(java.lang.String, java.lang.String, java.lang.String);
  • dansplugins.spawnsystem.trace.TraceClient: added public static final java.lang.String VERSION;
  • dansplugins.spawnsystem.trace.TraceClient$Builder: added public dansplugins.spawnsystem.trace.TraceClient$Builder installId(java.lang.String);
  • dansplugins.spawnsystem.utils.EventRegistry: removed/changed public dansplugins.spawnsystem.utils.EventRegistry(dansplugins.spawnsystem.DansSpawnSystem, dansplugins.spawnsystem.utils.BlockChecker, dansplugins.spawnsystem.data.PersistentData);
  • dansplugins.spawnsystem.utils.EventRegistry: added public dansplugins.spawnsystem.utils.EventRegistry(org.bukkit.plugin.Plugin, dansplugins.spawnsystem.utils.BlockChecker, dansplugins.spawnsystem.data.PersistentData);

</details>

Verification

Verified on a real Spigot server before publication; this release carries the exact jar that was verified.

  • boot gate run: booted twice on a fresh Spigot server running Minecraft 1.19.4 (11 assertions passed).
  • boot gate run: booted twice on a fresh Spigot server running Minecraft 1.21.11 (11 assertions passed).
  • boot gate run: booted twice on a fresh Spigot server running Minecraft 26.2 (11 assertions passed).
  • boot gate run: booted twice on a fresh Spigot server running Minecraft 26.3 (11 assertions passed).
  • save-compatibility gate run: data written by v2.0.0 was loaded by this release across two restarts with nothing lost (16 assertions passed).

Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.


drafted by Claude on behalf of Daniel Stephenson

2.0.0

A server on 1.2.0 upgrading to this release gets a set of long-standing bug fixes to spawn selection, sign detection and /resetspawn, and a new opt-out usage-reporting feature that is enabled by default. The permission nodes declared in plugin.yml have been renamed to the spawnsystem.* names the plugin actually checks, so any grants written against the old dansplugins.* names need updating. The plugin now ships a config.yml, which is created on first start and gains a usage-reporting block on upgraded installations.

Changes

Spawn selection and signs

  • A player's chosen spawn is now kept once set; previously every click on a [Spawn] sign silently overwrote it. Use /resetspawn to pick a new one. (#63)
  • Spawn signs are only activated by right-clicking; left-clicking or stepping on a pressure plate next to one no longer sets a spawn. (#80)
  • A [Spawn] sign whose coordinates cannot be read now tells the player to see an admin and logs a warning through the plugin logger with the sign's location, instead of failing silently. (#80)
  • All sign types added after 1.15 (crimson, warped, mangrove, bamboo, cherry, hanging signs) are now recognised as spawn signs. (#74)
  • Saved spawns with a 0 on any axis are no longer discarded on load; only missing or unreadable values are skipped. (#74)

Commands

  • /resetspawn now tells the console it is player-only, reports when a named player cannot be found instead of claiming success, and only notifies the target if they are online. (#73)

Permissions

  • Declared permission nodes are now spawnsystem.reset.self, spawnsystem.reset.others, spawnsystem.placeSpawnSign, spawnsystem.breakSpawnSign and the new spawnsystem.admin (all default to op), matching the nodes the plugin checks. The dansplugins.* nodes are no longer declared. (#62)

Usage reporting

  • The plugin now sends a small usage event on startup (plugin name and version) and on each command (command name) to https://trace.danielstephenson.dev. Nothing about players or the server is included; sending happens off the main thread and is dropped if the server cannot be reached. (#81)
  • A startup log line states whether reporting is on and, if off, why. Reporting can be turned off per plugin with usage-reporting.enabled: false in config.yml, server-wide with enabled: false in plugins/trace/config.yml, or via the TRACE_USAGE_REPORTING=off / DO_NOT_TRACK=1 environment variables. (#81, #86)
  • On upgraded servers the usage-reporting block is written into config.yml so the switch is visible on disk; an existing block is left untouched. (#86)

Upgrade notes

  • If your permissions plugin grants any dansplugins.spawnsystem.*, dansplugins.placeSpawnSign or dansplugins.breakSpawnSign nodes, change them to the spawnsystem.* names above.
  • Usage reporting is on by default. To opt out before the first report is sent, set usage-reporting.enabled: false in plugins/DansSpawnSystem/config.yml, or create plugins/trace/config.yml containing enabled: false, before starting the server with the new jar.
  • Players who relied on re-clicking a sign to change their spawn now need to run /resetspawn first.

Version

1.2.0 → 2.0.0 — MAJOR. Mechanical floor from comparing the two jars: MAJOR. Judgment: The mechanical floor of major stands: every permission node declared in plugin.yml moves from the dansplugins.* prefix to spawnsystem.*, so any permission-plugin grants written against the old names no longer match what is declared. Nothing in the source raises above that, but two behaviour changes are worth surfacing for operators: usage reporting to an external endpoint is now on by default and writes config.yml and plugins/trace/config.yml, and a spawn-selection fix means a player's first sign choice now sticks until reset rather than being overwritten by every click. The remaining changes are bug fixes, tests, CI and repository housekeeping that do not affect the level.

  • major: permission removed: dansplugins.breakspawnsign
  • major: permission removed: dansplugins.placespawnsign
  • major: permission removed: dansplugins.spawnsystem.reset.others
  • major: permission removed: dansplugins.spawnsystem.reset.self
  • minor: permission added: spawnsystem.admin
  • minor: permission added: spawnsystem.breakspawnsign
  • minor: permission added: spawnsystem.placespawnsign
  • minor: permission added: spawnsystem.reset.others
  • minor: permission added: spawnsystem.reset.self
  • minor: default config key added: usage-reporting.enabled
  • minor: default config key added: usage-reporting.endpoint
  • minor: default config key added: usage-reporting.key
  • minor: storage path changed: src/main/java/dansplugins/spawnsystem/data/PersistentData.java
  • minor: storage path changed: src/main/java/dansplugins/spawnsystem/services/StorageService.java

<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>

  • public class added: dansplugins.spawnsystem.config.ConfigManager
  • public class added: dansplugins.spawnsystem.trace.TraceClient
  • public class added: dansplugins.spawnsystem.trace.TraceClient$Builder
  • dansplugins.spawnsystem.commands.ResetSpawnCommand: removed/changed public dansplugins.spawnsystem.commands.ResetSpawnCommand(dansplugins.spawnsystem.data.PersistentData, dansplugins.spawnsystem.utils.UUIDChecker, dansplugins.spawnsystem.DansSpawnSystem);
  • dansplugins.spawnsystem.commands.ResetSpawnCommand: added public dansplugins.spawnsystem.commands.ResetSpawnCommand(dansplugins.spawnsystem.data.PersistentData, dansplugins.spawnsystem.utils.UUIDChecker, org.bukkit.Server);
  • dansplugins.spawnsystem.listeners.PlayerInteractListener: removed/changed public dansplugins.spawnsystem.listeners.PlayerInteractListener(dansplugins.spawnsystem.utils.BlockChecker, dansplugins.spawnsystem.data.PersistentData);
  • dansplugins.spawnsystem.listeners.PlayerInteractListener: added public dansplugins.spawnsystem.listeners.PlayerInteractListener(dansplugins.spawnsystem.utils.BlockChecker, dansplugins.spawnsystem.data.PersistentData, java.util.logging.Logger);
  • dansplugins.spawnsystem.listeners.PlayerRespawnListener: removed/changed public dansplugins.spawnsystem.listeners.PlayerRespawnListener(dansplugins.spawnsystem.data.PersistentData, dansplugins.spawnsystem.DansSpawnSystem);
  • dansplugins.spawnsystem.listeners.PlayerRespawnListener: added public dansplugins.spawnsystem.listeners.PlayerRespawnListener(dansplugins.spawnsystem.data.PersistentData, org.bukkit.plugin.Plugin);

</details>

Verification

Booted twice on a real Spigot server before publication — boot gate run (10 assertions passed). This release carries the exact jar that was verified.

Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.


drafted by Claude on behalf of Daniel Stephenson

Snapshot release marking Dans-Spawn-System's move to an AI-first development approach.

Day-to-day feature work, grooming, review and maintenance now run through AI agents working directly against this repository, with the maintainers setting direction and approving what lands. The version bump marks that change in how the project is built — it is not a compatibility break. Behaviour, configuration and stored data are unchanged, and existing installations can upgrade in place.

This is a dated snapshot, not a finished release. It follows the precedent set by Medieval Factions' 6.0.0-SNAPSHOT-7-25-2026: the AI-first line has not yet been verified in live operation, and the snapshot designation stays until it has.

Version changes

  • pom.xml: 1.2-SNAPSHOT → 2.0.0-SNAPSHOT-8-8-2026

Opened as https://github.com/Dans-Plugins/Dans-Spawn-System/pull/65.


Drafted by Claude on behalf of Daniel Stephenson.

Changes in Dan's Spawn System v1.1

  • Refactored the structure of the plugin to be more consistent with my other plugins.
  • Implemented the Singleton pattern instead of passing references everywhere.
  • Integrated the plugin with bStats.
  • Refactored the plugin to use an EventRegistry class.
  • Abstracted out the Reset Spawn command into its own command class.
  • Put all of the permissions of the plugin in the plugin.yml file and designated which ones should be default.
  • Abstracted out the functionality of the Utility Subsystem into other classes.
  • If a player has a bed spawn, they will no longer get teleported to their custom spawn upon death.
  • Made sure that the plugin worked on 1.17.

Dan's Spawn System v1.0 allows you to

  • Place a spawn selection sign if you have permission.
  • Break a spawn selection sign if you have permission.
  • Use a spawn selection sign to select your spawn.
  • Reset your spawn with /resetspawn if you have permission.
  • Reset someone else's spawn with /resetspawn (player) if you have permission.

In addition, it also

  • Teleports players upon respawn to their custom spawn location.
  • Provides saving/loading for custom spawn points.
Nether Access Controller

Allows operators to control who has access to the nether.

Activity Tracker

Tracks the activity of players.

Alternate Account Finder

Identifies accounts that have used the same IP address.

BlueMap Medieval Factions

Renders Medieval Factions claims on BlueMap's web map. Originally written by Kilz.

Something wrong, or something missing?

Bugs go to the plugin's issue tracker, where they can actually be fixed and tracked. Ideas for new behaviour go to the Dev Portal, where the community can upvote them.

v0.15.2
Source CodeReport a BugKnowledge BaseFree Server Hosting

More by Daniel Stephenson → danielstephenson.dev · Play his games in your browser