Skip to content

refactor: Remove data management config sections and restructure clear commands#64

Merged
ptthanh02 merged 2 commits into
mainfrom
copilot/remove-data-management-section
Oct 15, 2025
Merged

refactor: Remove data management config sections and restructure clear commands#64
ptthanh02 merged 2 commits into
mainfrom
copilot/remove-data-management-section

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Oct 15, 2025

Overview

This PR removes the data_saving and ghost_spawners configuration sections from config.yml, restructures the hologram clear command, and updates the permission system to use a .command prefix for better organization.

Changes Made

🗑️ Configuration Cleanup

Removed two configuration sections that are no longer needed:

  • data_saving section - The auto-save interval is now hardcoded to 5 minutes (6000 ticks) in SpawnerFileHandler
  • ghost_spawners section - Ghost spawner removal on approach is disabled; use the new command instead

🔄 Command Restructuring

Reorganized the clear commands under a common parent command:

Previous:

/ss hologram clear

New:

/ss clear holograms           # Clear all text display holograms
/ss clear ghost_spawners      # Check and remove ghost spawners (async)

The /ss hologram toggle command remains unchanged.

🆕 New Ghost Spawner Cleanup Command

Added /ss clear ghost_spawners which:

  • Runs asynchronously to prevent server lag
  • Checks all spawners for missing spawner blocks
  • Reports the count of removed ghost spawners
  • Shows appropriate messages for progress and completion

🔐 Permission System Update

Updated all command permissions to use .command prefix for consistency:

  • smartspawner.command.use (main command, replaces smartspawner.admin)
  • smartspawner.command.reload
  • smartspawner.command.give
  • smartspawner.command.list
  • smartspawner.command.hologram
  • smartspawner.command.prices
  • smartspawner.command.clear (new)

Backwards Compatibility: Legacy permissions (smartspawner.admin, smartspawner.reload, etc.) continue to work through permission inheritance defined in plugin.yml.

📝 New Messages

Added localized messages in en_US/messages.yml:

  • clear_command_usage - Usage help for /ss clear
  • command_ghost_spawner_check_start - Checking progress message
  • command_ghost_spawner_cleared - Success message with count placeholder
  • command_ghost_spawner_none_found - No ghost spawners found message

Files Changed

  • 3 new files: ClearSubCommand.java, ClearHologramsSubCommand.java, ClearGhostSpawnersSubCommand.java
  • 12 modified files: Command permissions, config removal, hardcoded intervals, and message additions

Migration Notes

Server administrators should:

  1. Remove any custom data_saving or ghost_spawners configurations from their config files
  2. Update permission plugins if using specific command permissions (legacy permissions still work)
  3. Use /ss clear ghost_spawners command instead of relying on automatic ghost spawner removal

Testing

  • ✅ Config sections successfully removed
  • ✅ Auto-save interval hardcoded to 5 minutes
  • ✅ Clear commands restructured with new parent command
  • ✅ Permission system updated with backwards compatibility
  • ✅ New messages added to language files

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • jitpack.io
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED -XX:MaxMetaspaceSize=384m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/gradle-launcher-8.8.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/agents/gradle-instrumentation-agent-8.8.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.8 (dns block)
  • maven.enginehub.org
  • mvn.lumine.io
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED -XX:MaxMetaspaceSize=384m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/gradle-launcher-8.8.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/agents/gradle-instrumentation-agent-8.8.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.8 (dns block)
  • nexus.iridiumdevelopment.net
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED -XX:MaxMetaspaceSize=384m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/gradle-launcher-8.8.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/agents/gradle-instrumentation-agent-8.8.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.8 (dns block)
  • repo.bg-software.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED -XX:MaxMetaspaceSize=384m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/gradle-launcher-8.8.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/agents/gradle-instrumentation-agent-8.8.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.8 (dns block)
  • repo.codemc.io
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED -XX:MaxMetaspaceSize=384m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/gradle-launcher-8.8.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/agents/gradle-instrumentation-agent-8.8.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.8 (dns block)
  • repo.glaremasters.me
  • repo.nightexpressdev.com
  • repo.opencollab.dev
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED -XX:MaxMetaspaceSize=384m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/gradle-launcher-8.8.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/agents/gradle-instrumentation-agent-8.8.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.8 (dns block)
  • repo.papermc.io
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED -XX:MaxMetaspaceSize=384m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/gradle-launcher-8.8.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/agents/gradle-instrumentation-agent-8.8.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.8 (dns block)
  • repository.minecodes.pl
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED -XX:MaxMetaspaceSize=384m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/gradle-launcher-8.8.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.8-bin/dl7vupf4psengwqhwktix4v1/gradle-8.8/lib/agents/gradle-instrumentation-agent-8.8.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.8 (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

remove in the config.yml this section:

#---------------------------------------------------
#                 Data Management
#---------------------------------------------------
# Controls how and when spawner data is saved
data_saving:
  # Periodic auto-save interval
  interval: 5m          # Time between saves (see time format guide above)

  # Save spawner data on server shutdown
  save_on_shutdown: true

# Ghost spawners are error spawners that exist in the world but no longer have a physical spawner block
# This can happen due to server crashes, chunk corruption, or other issues
# These settings control how ghost spawners are handled and removed
ghost_spawners:
  # Remove ghost spawners when server starts up
  # Only checks spawners in loaded chunks
  remove_on_startup: true

  # Remove ghost spawners when players approach them
  # This checks when players enter spawner range
  remove_on_approach: false

also remove the code for it as well some of the code for the config have been already removed by me. And for the data_saving.interval set in the code is 5 minute hardcoded for now we don't allow changing the interval in config.yml

change the hologram from
/ss hologram clear
command to
/ss clear holograms

and add another command to check and clear ghost spawner (async)

/ss clear ghost_spawners

so to create a common ss clear command also add 1 permission for it is smartspawner.command.clear

also change other permission to add an extra .command to theme if they are permission for command

and for the smartspawner.admin change it to smartspawner.command.use

and help me fix the logging system everytime I changed gthe mob spawner type with an egg it also log I opened spawner UI even though I'm not


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

@ptthanh02 ptthanh02 marked this pull request as ready for review October 15, 2025 06:45
Co-authored-by: ptthanh02 <73684260+ptthanh02@users.noreply.github.com>
Copilot AI changed the title [WIP] Remove data management section from config.yml refactor: Remove data management config sections and restructure clear commands Oct 15, 2025
Copilot AI requested a review from ptthanh02 October 15, 2025 07:01
@ptthanh02 ptthanh02 merged commit 216852e into main Oct 15, 2025
2 checks passed
@ptthanh02 ptthanh02 deleted the copilot/remove-data-management-section branch October 15, 2025 07:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants