Skip to content

trynafindbhumik/HomeForge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🏠 HomeForge

A modern, feature-rich sethome plugin for Paper 1.21.11+ and Folia

Build Paper Folia Java License

Set homes. Teleport instantly. Manage everything from a clean GUI. Now fully compatible with Folia's regionized multithreading.


✨ Features

  • Chest GUI β€” browse all homes in one place, click any home to manage it
  • Per-home settings β€” teleport, update location, set primary, change icon, delete
  • Icon picker β€” choose from 80+ materials as a home's visual symbol
  • Primary home β€” mark one home as default for /home with no arguments
  • Stackable permissions β€” add homeforge.limit.N permissions together, or use highest
  • Admin extra homes β€” grant bonus slots per player on top of their permission limit
  • Teleport delay β€” optional countdown with movement cancellation
  • Cooldown β€” configurable time between teleports
  • Sound & particles β€” visual feedback on arrival
  • BungeeCord support β€” share homes across servers using MySQL
  • EssentialsX importer β€” migrate all existing Essentials homes with one command
  • SQLite (default) β€” zero-config, single-file, WAL mode
  • MySQL (optional) β€” HikariCP connection pool for multi-server networks
  • Tab completion β€” all commands suggest home names and player names
  • 100% async β€” all database I/O off the main thread, zero TPS impact
  • Fully configurable messages β€” every chat message is customizable
  • βœ… Folia compatible β€” all schedulers migrated to EntityScheduler, RegionScheduler, AsyncScheduler, and GlobalRegionScheduler

🧩 Compatibility

Requirement Version
Server Paper 1.21.11+ or Folia (any recent build)
Java 21 or higher
Dependencies None β€” SQLite & HikariCP downloaded automatically

Works with Java and Bedrock (Geyser) players. The GUI uses single-click so Bedrock players on mobile/console have full access to all features.

Folia note: HomeForge is explicitly marked folia-supported: true and has been fully rewritten to use region-aware schedulers. It is safe to drop into any Folia server without modification.


πŸ“₯ Installation

  1. πŸ‘‰ Download Latest
  2. Drop it into your server's plugins/ folder
  3. Start the server β€” Paper/Folia downloads SQLite and HikariCP automatically
  4. Edit plugins/HomeForge/config.yml to your liking
  5. Run /hfreload to apply changes without restarting

πŸ—„οΈ Database

SQLite (Default β€” single server)

Works out of the box, no configuration needed. Data is stored in plugins/HomeForge/homes.db.

MySQL (Multi-server / BungeeCord)

database:
  type: MYSQL
  mysql:
    host: localhost
    port: 3306
    database: homeforge
    username: root
    password: 'yourpassword'

Also set settings.server_name to each server's name as configured in BungeeCord's config.yml.


πŸ“‹ Commands

Command Description Permission
/sethome [name] Set or update a home at your location homeforge.use
/home [name] Teleport to a home (primary if no name given) homeforge.use
/removehome <name> Delete a home (alias: /delhome) homeforge.use
/homes Open the homes GUI homeforge.use
/homes <player> View another player's homes homeforge.admin.viewother
/homes add <player> <n> Grant extra home slots homeforge.admin.extrahomes
/homes remove <player> <n> Remove extra home slots homeforge.admin.extrahomes
/homes set <player> <n> Set extra home slots to exactly N homeforge.admin.extrahomes
/homes info <player> Show home count, limit, and bonus slots homeforge.admin.extrahomes
/hfreload Reload config without restart (alias: /homeforgereload) homeforge.admin.reload
/importhomes essentials Import all homes from EssentialsX homeforge.admin.import

πŸ”‘ Permissions

homeforge.use                     # Basic home commands (default: true)

homeforge.limit.1                 # Allow 1 home
homeforge.limit.2                 # Allow 2 homes
homeforge.limit.3                 # Allow 3 homes
homeforge.limit.5                 # Allow 5 homes
homeforge.limit.10                # Allow 10 homes
homeforge.limit.20                # Allow 20 homes
homeforge.limit.50                # Allow 50 homes
homeforge.limit.*                 # Allow max homes defined in config (default 54)

homeforge.cooldown.bypass         # Skip teleport cooldown

homeforge.admin                   # All admin permissions (default: op)
  β”œβ”€ homeforge.admin.viewother    # View other players' homes
  β”œβ”€ homeforge.admin.editother    # Edit other players' homes
  β”œβ”€ homeforge.admin.extrahomes   # Manage bonus home slots
  β”œβ”€ homeforge.admin.reload       # Use /hfreload
  └─ homeforge.admin.import       # Use /importhomes

Home limits explained

# In config.yml:
settings:
  count_home_permission_limit_together: false
  • false (default) β€” highest matching homeforge.limit.N permission is used
    • Player has limit.3 and limit.5 β†’ allowed 5 homes
  • true β€” all matching permissions are added together
    • Player has limit.3 and limit.5 β†’ allowed 8 homes

Admin-granted bonus slots (/homes add) stack on top of either calculation.

LuckPerms example

# Give VIP rank 5 homes
lp group vip permission set homeforge.limit.5 true

# Give a specific player 3 bonus slots on top of their rank
/homes add Steve 3

βš™οΈ Configuration

settings:
  use_permissions: true           # false = unlimited homes for everyone
  default_home_limit: 3           # limit for players without homeforge.limit.N
  max_home_limit: 54              # limit for homeforge.limit.*
  count_home_permission_limit_together: false

  command_cooldown_home: 0        # seconds between /home uses (0 = off)
  teleport_delay: 0               # countdown before teleport (0 = instant)
  teleport_delay_check_movement: true

  sound_on_teleport: true
  particle_on_teleport: true

  server_name: ''                 # BungeeCord server name (blank = single server)

All chat messages are configurable under messages: in config.yml. Supports & color codes and %placeholder% variables.


πŸ”€ Folia Threading Model

HomeForge uses the correct scheduler for every operation:

Scheduler Used for
AsyncScheduler All database I/O (SQLite / MySQL)
GlobalRegionScheduler Chat messages, future completion callbacks
EntityScheduler Inventory opens, teleport delay timers, post-teleport effects, join delay
RegionScheduler Location-based block operations

The teleport delay countdown runs on the EntityScheduler so it correctly follows the player if they cross a region boundary during the countdown. Post-teleport sound and particle effects are dispatched back onto the player's entity region after teleportAsync completes. All CompletableFuture callbacks that open inventories are re-dispatched onto the player's entity region before calling openInventory.

folia-supported: true is declared in plugin.yml. The plugin also works identically on regular Paper β€” the new scheduler APIs are available in Paper 1.19.4+ and behave as single-threaded equivalents.


πŸ—ƒοΈ Database Schema

CREATE TABLE Homes (
    id         BIGINT      NOT NULL,
    owner      VARCHAR(40) NOT NULL,   -- Player UUID
    serverName TEXT,                   -- BungeeCord server (null = local)
    world      TEXT        NOT NULL,
    loc_x      DECIMAL(65,5) NOT NULL,
    loc_y      DECIMAL(65,5) NOT NULL,
    loc_z      DECIMAL(65,5) NOT NULL,
    loc_yaw    DECIMAL(65,5) NOT NULL,
    loc_pitch  DECIMAL(65,5) NOT NULL,
    name       TEXT        NOT NULL,
    symbol     VARCHAR(128) NOT NULL,  -- Material enum name
    last_used  BIGINT      NOT NULL,   -- Epoch milliseconds
    PRIMARY KEY (id)
);

CREATE TABLE Players (
    uuid         VARCHAR(40) NOT NULL,
    primary_home BIGINT      NULL,     -- FK β†’ Homes.id
    extra_homes  BIGINT      NULL,     -- Admin-granted bonus slots
    PRIMARY KEY (uuid)
);

πŸ”¨ Building from Source

Requirements

  • Java 21+
  • Maven 3.8+
git clone https://github.com/trynafindbhumik/HomeForge.git
cd HomeForge
mvn clean package
# Output: target/HomeForge-1.1.0.jar

πŸ“ Project Structure

HomeForge/
β”œβ”€β”€ pom.xml
└── src/main/
    β”œβ”€β”€ resources/
    β”‚   β”œβ”€β”€ plugin.yml
    β”‚   └── config.yml
    └── java/io/github/homeforge/
        β”œβ”€β”€ HomeForge.java              ← Main plugin class
        β”œβ”€β”€ commands/
        β”‚   β”œβ”€β”€ SetHomeCommand.java
        β”‚   β”œβ”€β”€ HomeCommand.java
        β”‚   β”œβ”€β”€ RemoveHomeCommand.java
        β”‚   β”œβ”€β”€ HomesCommand.java
        β”‚   β”œβ”€β”€ ReloadCommand.java
        β”‚   └── ImportHomesCommand.java
        β”œβ”€β”€ config/
        β”‚   └── ConfigManager.java
        β”œβ”€β”€ database/
        β”‚   β”œβ”€β”€ Database.java           ← Interface
        β”‚   β”œβ”€β”€ SQLiteDatabase.java
        β”‚   └── MySQLDatabase.java
        β”œβ”€β”€ gui/
        β”‚   β”œβ”€β”€ HomesGUI.java           ← Home list chest GUI
        β”‚   β”œβ”€β”€ HomeSettingsGUI.java    ← Per-home management
        β”‚   └── SymbolPickerGUI.java    ← Material icon picker
        β”œβ”€β”€ listeners/
        β”‚   β”œβ”€β”€ GUIListener.java
        β”‚   β”œβ”€β”€ PlayerListener.java
        β”‚   └── BungeeCordListener.java
        β”œβ”€β”€ managers/
        β”‚   β”œβ”€β”€ HomeManager.java        ← Async DB + cache layer
        β”‚   └── TeleportManager.java    ← Delay, cooldown, cross-server
        β”œβ”€β”€ models/
        β”‚   β”œβ”€β”€ Home.java
        β”‚   └── PlayerData.java
        └── utils/
            β”œβ”€β”€ MessageUtil.java
            └── SchedulerUtil.java      ← Folia/Paper scheduler abstraction (NEW)

πŸ“„ License

MIT License

Copyright (c) 2026 Bhumik Jain

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Made with β˜• by Bhumik Jain

About

A lightweight and efficient Minecraft plugin built on the Paper API that allows players to set, manage, and teleport to homes with ease. HomeForge focuses on performance, simplicity, and extensibility, making it ideal for both small and large servers looking for a reliable home management system.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages