Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
37 changes: 37 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Copilot Instructions

This repository follows the DPC (Dans Plugins Community) conventions defined at
https://github.com/Dans-Plugins/dpc-conventions. Read those conventions before
making any changes.

## Technology Stack

- Language: Java
- Build tool: Maven
- Target platform: Spigot / Paper (Minecraft plugin, API version 1.13+)
- Test framework: JUnit (via Maven Surefire)
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This lists “Test framework: JUnit (via Maven Surefire)”, but pom.xml currently has no JUnit (or other test) dependency configured. Update this to match the actual setup (or add the missing test dependencies/config).

Suggested change
- Test framework: JUnit (via Maven Surefire)
- Test framework: Not yet configured (add JUnit via Maven Surefire in pom.xml when introducing tests)

Copilot uses AI. Check for mistakes.

## Project Structure

- `src/main/java/dansplugins/spawnsystem/` – Plugin source code
- `commands/` – Command executor classes
- `listeners/` – Bukkit event listener classes
- `services/` – Business-logic services (command dispatch, storage)
- `utils/` – Utility helpers (block checking, UUID lookup, event registration)
- `data/` – Persistent data model
- `bstats/` – bStats metrics integration
- `src/main/resources/` – `plugin.yml` and other resources
- `src/test/java/` – Unit tests
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This references src/test/java/ for unit tests, but the repository currently has no src/test directory. Either add the missing test directory/tests or adjust this project-structure note so it stays accurate.

Suggested change
- `src/test/java/` – Unit tests
- `src/test/java/` – Unit tests (if/when a test suite is added)

Copilot uses AI. Check for mistakes.

## Coding Conventions

- Follow the existing package structure (`dansplugins.spawnsystem.*`) when adding new classes.
- All user-facing messages are currently hard-coded strings; prefer extracting them to a lang file in `src/main/resources/lang/` for new contributions.
- Annotate every command executor and event listener with `@Override` where applicable.
- The plugin uses the Maven Shade plugin to produce a shaded JAR in `target/`.

## Contribution Workflow

- Branch from `develop` for all changes.
- Open a pull request against `develop`, not `main`.
- Reference the related GitHub issue in every pull request description.
26 changes: 26 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Build

on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The project is configured to compile for Java 8 (pom.xml sets <java.version>1.8</java.version>), but this workflow builds on JDK 17. Building on 17 without using --release 8/toolchains can accidentally allow compilation against newer JDK APIs and produce artifacts that won’t run on Java 8 servers. Consider building on JDK 8 (and optionally also 17), or update Maven compiler config to use maven.compiler.release=8 (or toolchains) to enforce Java 8 compatibility.

Suggested change
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
- name: Set up JDK 8
uses: actions/setup-java@v4
with:
java-version: '8'

Copilot uses AI. Check for mistakes.
distribution: 'temurin'

- name: Build with Maven
run: mvn clean package
29 changes: 29 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Release

on:
release:
types: [ created ]

permissions:
contents: write

jobs:
build-and-attach:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same concern as build workflow: the repo targets Java 8 bytecode (per pom.xml), but this release workflow builds on JDK 17. Consider switching to JDK 8 or enforcing --release 8 via Maven configuration/toolchains to avoid publishing jars that won’t run on older servers.

Suggested change
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
- name: Set up JDK 8
uses: actions/setup-java@v4
with:
java-version: '8'

Copilot uses AI. Check for mistakes.
distribution: 'temurin'

- name: Build with Maven
run: mvn clean package

- name: Upload JAR to release
uses: softprops/action-gh-release@v2
with:
files: target/*.jar
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

files: target/*.jar will likely upload multiple jars when using the Maven Shade plugin (e.g., both the shaded jar and original-*.jar). Consider narrowing the glob to only the intended distributable (or explicitly excluding original-*) so releases don’t contain confusing/incorrect artifacts.

Suggested change
files: target/*.jar
files: |
target/*.jar
!target/original-*.jar

Copilot uses AI. Check for mistakes.
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

## [Unreleased]

## [1.2] – (date unknown)

### Changed
- Internal refactoring of spawn storage and event handling.

## [1.0] – (date unknown)

### Added
- Initial release.
- `[Spawn]` sign mechanic: right-clicking a sign sets the player's respawn point.
- `/resetspawn` command to clear a player's custom spawn.
- bStats metrics integration (plugin ID 12161).
12 changes: 12 additions & 0 deletions COMMANDS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Commands Reference

## Spawn Commands

### /resetspawn [player]

**Description:** Resets a player's custom spawn point, returning them to the world's default spawn on next death.
**Permission (no argument):** `spawnsystem.reset.self` or `spawnsystem.admin`
**Permission (with argument):** `spawnsystem.reset.others` or `spawnsystem.admin`
**Usage:** `/resetspawn` or `/resetspawn <player>`
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The command currently only performs any action when executed by an in-game player (the implementation returns early for non-player senders). The docs should mention that /resetspawn is player-only, or the command should be updated to support console execution (with appropriate feedback).

Suggested change
**Usage:** `/resetspawn` or `/resetspawn <player>`
**Usage:** (in-game players only) `/resetspawn` or `/resetspawn <player>`

Copilot uses AI. Check for mistakes.
**Example:** `/resetspawn` — resets your own spawn
**Example:** `/resetspawn Steve` — resets Steve's spawn
17 changes: 17 additions & 0 deletions CONFIG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Configuration Guide

Dans-Spawn-System does not currently use a `config.yml` file. All configuration is performed through in-game signs and permissions.

## Permissions Configuration

Permissions can be managed through any standard Bukkit permissions plugin (e.g. LuckPerms).

| Permission Node | Default | Description |
|-----------------|---------|-------------|
| `spawnsystem.placeSpawnSign` | op | Allows placing `[Spawn]` signs |
| `spawnsystem.breakSpawnSign` | op | Allows breaking `[Spawn]` signs |
| `spawnsystem.reset.self` | op | Allows a player to reset their own spawn |
| `spawnsystem.reset.others` | op | Allows resetting another player's spawn |
| `spawnsystem.admin` | op | Grants all plugin permissions |
Comment on lines +9 to +15
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The permissions table is using || at the start of each row, which renders as an extra empty column in Markdown. Switch to standard Markdown table formatting (single leading |, consistent trailing |).

Copilot uses AI. Check for mistakes.

These defaults are defined in `src/main/resources/plugin.yml` and can be overridden by your permissions plugin.
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line says the permission defaults are defined in src/main/resources/plugin.yml, but the current plugin.yml does not declare these spawnsystem.* nodes (it declares different nodes). Either update plugin.yml to match the documented permission nodes/defaults, or adjust this documentation so it doesn’t point to an incorrect source of truth.

Suggested change
These defaults are defined in `src/main/resources/plugin.yml` and can be overridden by your permissions plugin.
By default, these permissions are granted to server operators (`op`) and can be overridden by your permissions plugin.

Copilot uses AI. Check for mistakes.
59 changes: 59 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Contributing

## Thank You

Thank you for your interest in contributing to Dans-Spawn-System! This guide will help you get started.

## Links

- [Website](https://dansplugins.com)
- [Discord](https://discord.gg/xXtuAQ2)

## Requirements

- A GitHub account
- Git installed on your local machine
- A Java IDE or text editor
- A basic understanding of Java

## Getting Started

1. [Sign up for GitHub](https://github.com/signup) if you don't have an account.
2. Fork the repository by clicking **Fork** at the top right of the repo page.
3. Clone your fork: `git clone https://github.com/<your-username>/Dans-Spawn-System.git`
4. Open the project in your IDE.
5. Build the plugin: `mvn clean package`
If you encounter errors, please open an issue.

## Identifying What to Work On

### Issues

Work items are tracked as [GitHub issues](https://github.com/Dans-Plugins/Dans-Spawn-System/issues).

### Milestones

Issues are grouped into [milestones](https://github.com/Dans-Plugins/Dans-Spawn-System/milestones) representing upcoming releases.

## Making Changes

1. Make sure an issue exists for the work. If not, create one.
2. Switch to `develop`: `git checkout develop`
3. Create a branch: `git checkout -b <branch-name>`
4. Make your changes.
5. Test your changes.
6. Commit: `git commit -m "Description of changes"`
7. Push: `git push origin <branch-name>`
8. Open a pull request against `develop`, link the related issue with `#<number>`.
9. Address review feedback.

## Testing

Run the unit tests with:

Linux: `mvn clean test`
Windows: `mvn.cmd clean test`

Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section instructs contributors to run “unit tests”, but there is currently no src/test/java directory and pom.xml has no test dependencies configured. Consider updating this section to state that there are no automated tests yet (and what manual verification is expected), or add a minimal test setup so these instructions are actionable.

Suggested change
Run the unit tests with:
Linux: `mvn clean test`
Windows: `mvn.cmd clean test`
There are currently no automated unit tests configured for this project.
Please verify your changes manually by:
- Building the plugin: `mvn clean package`
- Copying the built JAR from `target/` into your test server's `plugins` folder
- Starting the server and ensuring the plugin loads without errors in the console
- Exercising relevant spawn-related functionality to confirm your changes behave as expected

Copilot uses AI. Check for mistakes.
## Questions

Ask in the [Discord server](https://discord.gg/xXtuAQ2).
83 changes: 82 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,94 @@
# Dans-Spawn-System
An open source plugin that allows players to use signs to select a custom spawn in their world.

## Description

Dans-Spawn-System is a Minecraft plugin that allows players to use signs to select a custom spawn point in their world. Server operators place `[Spawn]` signs with coordinates, and players right-click those signs to set their personal respawn location.

## Installation

### First Time Installation

1. Download the plugin from [SpigotMC](https://www.spigotmc.org/resources/dans-spawn-system.95997/).
2. Place the jar in the `plugins` folder of your server.
3. Restart your server.

## Usage

### Documentation

- [User Guide](USER_GUIDE.md) – Getting started and common scenarios
- [Commands Reference](COMMANDS.md) – Complete list of all commands
- [Configuration Guide](CONFIG.md) – Detailed configuration options

### Wiki & Additional Resources

- [Wiki Guide](https://github.com/Dans-Plugins/Dans-Spawn-System/wiki)

## Support

You can find the support Discord server [here](https://discord.gg/xXtuAQ2).

### Experiencing a bug?

Please fill out a bug report [here](https://github.com/Dans-Plugins/Dans-Spawn-System/issues/new).

- [Known Bugs](https://github.com/Dans-Plugins/Dans-Spawn-System/issues?q=is%3Aissue+is%3Aopen+label%3Abug)

## Contributing

- [CONTRIBUTING.md](CONTRIBUTING.md)
- [Notes for Developers](https://github.com/Dans-Plugins/Dans-Spawn-System/wiki)

## Testing

### Unit Tests

Linux:

mvn clean test

Windows:

mvn.cmd clean test

If you see `BUILD SUCCESS`, the tests have passed.

Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The README describes running “Unit Tests”, but the repository currently has no src/test/java directory and pom.xml has no JUnit/test dependencies. This makes the Testing section misleading; consider either adding an initial test setup or updating the section to reflect that there are currently no automated tests (and how to validate changes instead).

Suggested change
### Unit Tests
Linux:
mvn clean test
Windows:
mvn.cmd clean test
If you see `BUILD SUCCESS`, the tests have passed.
### Automated Tests
This project does not currently include automated unit tests.
To verify that the project builds successfully, run:
Linux:
mvn clean package
Windows:
mvn.cmd clean package
If you see `BUILD SUCCESS`, the project compiled successfully.
For validating functional changes, follow the steps in the **Development** section below to run the plugin on a test server.

Copilot uses AI. Check for mistakes.
## Development

### Test Server with Plugin Hot-Reloading

A Docker-based test server can be used for development.

#### Setup

1. Build the plugin: `mvn clean package`
2. Copy the resulting jar from `target/` into your server's `plugins/` folder.
3. Start your test server.
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section mentions a “Docker-based test server”, but there are no Dockerfiles / docker-compose configs in the repo. Either add the referenced Docker setup (and link to it) or remove/adjust this wording so contributors aren’t sent looking for non-existent tooling.

Copilot uses AI. Check for mistakes.

## Authors and Acknowledgement
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR description says the README follows the required section names/order (including an “Authors” section). The README uses “Authors and Acknowledgement” instead, which may not satisfy tooling or checklist expectations that look for the exact “Authors” heading. Consider renaming this heading to match the convention/PR claim.

Copilot uses AI. Check for mistakes.

### Developers

| Name | Main Contributions |
|------|--------------------|
| DanTheTechMan | Original author and lead developer |
Comment on lines +72 to +74
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Developers table is using || at the start of the header/rows, which creates an extra empty column in Markdown. Use a single leading | (and consistent trailing |) so the table renders as intended.

Copilot uses AI. Check for mistakes.

## License

This project is licensed under the [GNU General Public License v3.0](LICENSE) (GPL-3.0).

You are free to use, modify, and distribute this software, provided that:

- Source code is made available under the same license when distributed.
- Changes are documented and attributed.
- No additional restrictions are applied.

See the [LICENSE](LICENSE) file for the full text of the GPL-3.0 license.

## Project Status

This project is in active development.

### bStats

You can view the bStats page for the plugin [here](https://bstats.org/plugin/bukkit/DansSpawnSystem/12161).
55 changes: 55 additions & 0 deletions USER_GUIDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# User Guide

## Prerequisites

- A Spigot or Paper Minecraft server (1.13 or later)
- The Dans-Spawn-System plugin installed in your `plugins/` folder

## First Steps

After installing the plugin and restarting your server, players can have their respawn location customised by interacting with spawn-selection signs placed by administrators.

## Common Scenarios

### Setting Up a Spawn Selection Sign (Admin)

1. Place a sign in the world.
2. On the **first line** of the sign, type `[Spawn]`.
3. On the **second line**, enter the X coordinate of the target spawn location.
4. On the **third line**, enter the Y coordinate.
5. On the **fourth line**, enter the Z coordinate.
6. Confirm placement — you will see a green confirmation message if you have the required permission.

**Example sign contents:**

```
[Spawn]
100
64
-200
```

Players who right-click this sign will have their respawn point set to coordinates (100, 64, -200) in their current world.

### Selecting a Spawn (Player)

Simply **right-click** any `[Spawn]` sign to set your personal respawn location to the coordinates written on that sign.

### Resetting a Player's Spawn (Admin)

Use the `/resetspawn` command to clear a player's custom spawn:

- Reset your own spawn: `/resetspawn`
- Reset another player's spawn: `/resetspawn <player>`

See [COMMANDS.md](COMMANDS.md) for full command details.

## Permissions

| Permission Node | Default | Description |
|-----------------|---------|-------------|
| `spawnsystem.placeSpawnSign` | op | Allows placing `[Spawn]` signs |
| `spawnsystem.breakSpawnSign` | op | Allows breaking `[Spawn]` signs |
| `spawnsystem.reset.self` | op | Allows resetting your own spawn with `/resetspawn` |
| `spawnsystem.reset.others` | op | Allows resetting another player's spawn with `/resetspawn <player>` |
| `spawnsystem.admin` | op | Grants all plugin permissions |
Comment thread
dmccoystephenson marked this conversation as resolved.
Comment thread
dmccoystephenson marked this conversation as resolved.
Loading