25 Commits

Author SHA1 Message Date
Oliver
5f5d5302cc fancynpcs: Remove newline in VERSION file 2025-12-05 18:57:22 +01:00
Oliver
dc80615146 Add support for 1.21.11-rc2 2025-12-05 18:51:27 +01:00
Oliver
7fb487a344 Add support for 1.21.11-pre5 2025-12-04 14:32:32 +01:00
Oliver
e837ad89d3 fancydialogs: Update changelog path in snapshot deployment config 2025-12-03 16:58:10 +01:00
Oliver
47bb6f7a10 ci: Use FancyVerteiler (#170)
* ci: Use FancyVerteiler for FD snapshot

* Update configs

* Revert some stuff

* Use FancyVerteiler for all plugins

* Fixes

* Fix

* Delete deployment tool
2025-12-03 16:11:23 +01:00
Oliver
54572f1736 fancynpcs, fancyholograms, fancydialogs: Add support for 1.21.11-pre4 2025-12-01 20:55:39 +01:00
Oliver
fb79b5eaed fancynpcs, fancyholograms, fancydialogs: Update FancyAnalytics 2025-11-27 14:45:47 +01:00
Oliver
ef5109444e fancyholograms, fancydialogs: Use 1.21.11-pre3 2025-11-26 20:11:24 +01:00
Oliver
878fee61e7 fancynpcs: Use 1.21.11-pre3 2025-11-26 19:59:06 +01:00
Oliver
c7fb3b0b92 packets, fancynpcs: Update to 1.21.11-pre3 2025-11-25 18:35:43 +01:00
Oliver
9aecf99744 fancynpcs: Update version to 2.8.1 2025-11-25 18:05:01 +01:00
Oliver
1bdf350594 fancyvisuals: Update README.md 2025-11-25 18:00:45 +01:00
Oliver
b285b8f364 docs: Add built in placeholders of FancyCore 2025-11-25 14:33:37 +01:00
Oliver
9cba1bfb31 docs: Update event and punishment service references; add Placeholders API documentation 2025-11-25 13:48:12 +01:00
Oliver
0336844633 docs: Add blog post "introducing hytale plugins" 2025-11-24 18:15:01 +01:00
Oliver
62f387e6b9 docs: Update getting started page for FancyCore 2025-11-24 18:15:01 +01:00
Oliver
4ce6acf325 docs: Add punishment API and some disclaimers for FancyCore 2025-11-24 18:15:01 +01:00
Oliver
1bc13362c1 docs: Add chat and server commands for FancyCore 2025-11-24 18:15:01 +01:00
Oliver
e1c57f8e1c docs: Add economy related commands for FancyCore 2025-11-24 18:15:01 +01:00
Oliver
bcd526db5b docs: Add player related commands for FancyCore 2025-11-24 18:15:01 +01:00
Oliver
a22db1cbb1 docs: Add docs about event system in FancyCore 2025-11-24 18:15:01 +01:00
Oliver
18518f9c19 docs: Add some command documentation for FancyCore 2025-11-24 18:15:01 +01:00
Oliver
30898973c3 docs: Add docs for FancyCore 2025-11-24 18:15:01 +01:00
Oliver
217c4c36cc docs: Add banner and logo of FancyCore 2025-11-24 18:15:01 +01:00
Oliver
6d130bd93e docs: Add dialog examples by reunionsmp 2025-11-24 16:41:53 +01:00
78 changed files with 1569 additions and 730 deletions

View File

@@ -2,8 +2,9 @@ name: Deploy FancyDialogs (release)
on:
workflow_dispatch:
jobs:
deploy-plugin:
deploy:
runs-on: ubuntu-latest
steps:
@@ -27,25 +28,20 @@ jobs:
- name: Modify gradlew permissions
run: chmod +x ./gradlew
- name: Build deployment tool
run: ./gradlew :tools:deployment:shadowJar
- name: Build FancyDialogs for Modrinth
- name: Build
env:
RELEASE_CHANNEL: 'release'
RELEASE_PLATFORM: 'modrinth'
run: ./gradlew :plugins:fancydialogs:shadowJar
- name: Deploy to Modrinth
env:
MODRINTH_API_KEY: ${{ secrets.MODRINTH_API_KEY }}
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run:
cd tools/deployment/build/libs &&
java -jar deployment.jar modrinth ../../../../plugins/fancydialogs/release_deployment_config.json true
- name: Deploy
uses: fancyinnovations/fancyverteiler@main
with:
config_path: "/plugins/fancydialogs/release_deployment_config.json"
modrinth_api_key: ${{ secrets.MODRINTH_API_KEY }}
discord_webhook_url: ${{ secrets.DISCORD_WEBHOOK_URL }}
- name: Publish to reposilite (releases)
run: ./gradlew :plugins:fancydialogs:fd-api:publishAllPublicationsToFancyinnovationsReleasesRepository
# - name: Publish to reposilite (releases)
# run: ./gradlew :plugins:fancydialogs:fd-api:publishAllPublicationsToFancyinnovationsReleasesRepository
- name: Publish to reposilite (snapshots)
run: ./gradlew :plugins:fancydialogs:fd-api:publishAllPublicationsToFancyinnovationsSnapshotsRepository
# - name: Publish to reposilite (snapshots)
# run: ./gradlew :plugins:fancydialogs:fd-api:publishAllPublicationsToFancyinnovationsSnapshotsRepository

View File

@@ -2,8 +2,9 @@ name: Deploy FancyHolograms v2 (release)
on:
workflow_dispatch:
jobs:
deploy-plugin:
deploy:
runs-on: ubuntu-latest
steps:
@@ -27,25 +28,20 @@ jobs:
- name: Modify gradlew permissions
run: chmod +x ./gradlew
- name: Build deployment tool
run: ./gradlew :tools:deployment:shadowJar
- name: Build FancyHolograms v2 for Modrinth
- name: Build
env:
RELEASE_CHANNEL: 'release'
RELEASE_PLATFORM: 'modrinth'
run: ./gradlew :plugins:fancyholograms-v2:shadowJar
- name: Deploy to Modrinth
env:
MODRINTH_API_KEY: ${{ secrets.MODRINTH_API_KEY }}
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run:
cd tools/deployment/build/libs &&
java -jar deployment.jar modrinth ../../../../plugins/fancyholograms-v2/release_deployment_config.json true
- name: Deploy
uses: fancyinnovations/fancyverteiler@main
with:
config_path: "/plugins/fancyholograms-v2/release_deployment_config.json"
modrinth_api_key: ${{ secrets.MODRINTH_API_KEY }}
discord_webhook_url: ${{ secrets.DISCORD_WEBHOOK_URL }}
- name: Publish to reposilite (releases)
run: ./gradlew :plugins:fancyholograms-v2:api:publishAllPublicationsToFancyinnovationsReleasesRepository
# - name: Publish to reposilite (releases)
# run: ./gradlew :plugins:fancyholograms-v2:api:publishAllPublicationsToFancyinnovationsReleasesRepository
- name: Publish to reposilite (snapshots)
run: ./gradlew :plugins:fancyholograms-v2:api:publishAllPublicationsToFancyinnovationsSnapshotsRepository
# - name: Publish to reposilite (snapshots)
# run: ./gradlew :plugins:fancyholograms-v2:api:publishAllPublicationsToFancyinnovationsSnapshotsRepository

View File

@@ -2,8 +2,9 @@ name: Deploy FancyHolograms (release)
on:
workflow_dispatch:
jobs:
deploy-plugin:
deploy:
runs-on: ubuntu-latest
steps:
@@ -27,25 +28,20 @@ jobs:
- name: Modify gradlew permissions
run: chmod +x ./gradlew
- name: Build deployment tool
run: ./gradlew :tools:deployment:shadowJar
- name: Build FancyHolograms for Modrinth
- name: Build
env:
RELEASE_CHANNEL: 'release'
RELEASE_PLATFORM: 'modrinth'
run: ./gradlew :plugins:fancyholograms:shadowJar
- name: Deploy to Modrinth
env:
MODRINTH_API_KEY: ${{ secrets.MODRINTH_API_KEY }}
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run:
cd tools/deployment/build/libs &&
java -jar deployment.jar modrinth ../../../../plugins/fancyholograms/release_deployment_config.json true
- name: Deploy
uses: fancyinnovations/fancyverteiler@main
with:
config_path: "/plugins/fancyholograms/release_deployment_config.json"
modrinth_api_key: ${{ secrets.MODRINTH_API_KEY }}
discord_webhook_url: ${{ secrets.DISCORD_WEBHOOK_URL }}
- name: Publish to reposilite (releases)
run: ./gradlew :plugins:fancyholograms:fh-api:publishAllPublicationsToFancyinnovationsReleasesRepository
# - name: Publish to reposilite (releases)
# run: ./gradlew :plugins:fancyholograms:fh-api:publishAllPublicationsToFancyinnovationsReleasesRepository
- name: Publish to reposilite (snapshots)
run: ./gradlew :plugins:fancyholograms:fh-api:publishAllPublicationsToFancyinnovationsSnapshotsRepository
# - name: Publish to reposilite (snapshots)
# run: ./gradlew :plugins:fancyholograms:fh-api:publishAllPublicationsToFancyinnovationsSnapshotsRepository

View File

@@ -2,8 +2,9 @@ name: Deploy FancyNpcs (release)
on:
workflow_dispatch:
jobs:
deploy-plugin:
deploy:
runs-on: ubuntu-latest
steps:
@@ -27,25 +28,20 @@ jobs:
- name: Modify gradlew permissions
run: chmod +x ./gradlew
- name: Build deployment tool
run: ./gradlew :tools:deployment:shadowJar
- name: Build FancyNpcs for Modrinth
- name: Build
env:
RELEASE_CHANNEL: 'release'
RELEASE_PLATFORM: 'modrinth'
run: ./gradlew :plugins:fancynpcs:shadowJar
- name: Deploy to Modrinth
env:
MODRINTH_API_KEY: ${{ secrets.MODRINTH_API_KEY }}
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run:
cd tools/deployment/build/libs &&
java -jar deployment.jar modrinth ../../../../plugins/fancynpcs/release_deployment_config.json true
- name: Deploy
uses: fancyinnovations/fancyverteiler@main
with:
config_path: "/plugins/fancynpcs/release_deployment_config.json"
modrinth_api_key: ${{ secrets.MODRINTH_API_KEY }}
discord_webhook_url: ${{ secrets.DISCORD_WEBHOOK_URL }}
- name: Publish to reposilite (releases)
run: ./gradlew :plugins:fancynpcs:fn-api:publishAllPublicationsToFancyinnovationsReleasesRepository
# - name: Publish to reposilite (releases)
# run: ./gradlew :plugins:fancynpcs:fn-api:publishAllPublicationsToFancyinnovationsReleasesRepository
- name: Publish to reposilite (snapshots)
run: ./gradlew :plugins:fancynpcs:fn-api:publishAllPublicationsToFancyinnovationsSnapshotsRepository
# - name: Publish to reposilite (snapshots)
# run: ./gradlew :plugins:fancynpcs:fn-api:publishAllPublicationsToFancyinnovationsSnapshotsRepository

View File

@@ -2,8 +2,9 @@ name: Deploy FancyDialogs (snapshot)
on:
workflow_dispatch:
jobs:
deploy-fancydialogs:
deploy:
runs-on: ubuntu-latest
steps:
@@ -27,22 +28,17 @@ jobs:
- name: Modify gradlew permissions
run: chmod +x ./gradlew
- name: Build deployment tool
run: ./gradlew :tools:deployment:shadowJar
- name: Build FancyDialogs for Modrinth
- name: Build
env:
RELEASE_CHANNEL: 'snapshot'
RELEASE_PLATFORM: 'modrinth'
run: ./gradlew :plugins:fancydialogs:shadowJar
- name: Deploy to Modrinth
env:
MODRINTH_API_KEY: ${{ secrets.MODRINTH_API_KEY }}
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run:
cd tools/deployment/build/libs &&
java -jar deployment.jar modrinth ../../../../plugins/fancydialogs/snapshot_deployment_config.json true
- name: Deploy
uses: fancyinnovations/fancyverteiler@main
with:
config_path: "/plugins/fancydialogs/snapshot_deployment_config.json"
modrinth_api_key: ${{ secrets.MODRINTH_API_KEY }}
discord_webhook_url: ${{ secrets.DISCORD_WEBHOOK_URL }}
- name: Publish to reposilite (snapshots)
run: ./gradlew :plugins:fancydialogs:fd-api:publishAllPublicationsToFancyinnovationsSnapshotsRepository
# - name: Publish to reposilite (snapshots)
# run: ./gradlew :plugins:fancydialogs:fd-api:publishAllPublicationsToFancyinnovationsSnapshotsRepository

View File

@@ -2,8 +2,9 @@ name: Deploy FancyHolograms v2 (snapshot)
on:
workflow_dispatch:
jobs:
deploy-fancyholograms:
deploy:
runs-on: ubuntu-latest
steps:
@@ -27,22 +28,17 @@ jobs:
- name: Modify gradlew permissions
run: chmod +x ./gradlew
- name: Build deployment tool
run: ./gradlew :tools:deployment:shadowJar
- name: Build FancyHolograms v2 for Modrinth
- name: Build
env:
RELEASE_CHANNEL: 'snapshot'
RELEASE_PLATFORM: 'modrinth'
run: ./gradlew :plugins:fancyholograms-v2:shadowJar
- name: Deploy to Modrinth
env:
MODRINTH_API_KEY: ${{ secrets.MODRINTH_API_KEY }}
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run:
cd tools/deployment/build/libs &&
java -jar deployment.jar modrinth ../../../../plugins/fancyholograms-v2/snapshot_deployment_config.json true
- name: Deploy
uses: fancyinnovations/fancyverteiler@main
with:
config_path: "/plugins/fancyholograms-v2/snapshot_deployment_config.json"
modrinth_api_key: ${{ secrets.MODRINTH_API_KEY }}
discord_webhook_url: ${{ secrets.DISCORD_WEBHOOK_URL }}
- name: Publish to reposilite (snapshots)
run: ./gradlew :plugins:fancyholograms-v2:api:publishAllPublicationsToFancyinnovationsSnapshotsRepository
# - name: Publish to reposilite (snapshots)
# run: ./gradlew :plugins:fancyholograms-v2:api:publishAllPublicationsToFancyinnovationsSnapshotsRepository

View File

@@ -2,8 +2,9 @@ name: Deploy FancyHolograms (snapshot)
on:
workflow_dispatch:
jobs:
deploy-plugin:
deploy:
runs-on: ubuntu-latest
steps:
@@ -27,22 +28,17 @@ jobs:
- name: Modify gradlew permissions
run: chmod +x ./gradlew
- name: Build deployment tool
run: ./gradlew :tools:deployment:shadowJar
- name: Build FancyHolograms for Modrinth
- name: Build
env:
RELEASE_CHANNEL: 'snapshot'
RELEASE_PLATFORM: 'modrinth'
run: ./gradlew :plugins:fancyholograms:shadowJar
- name: Deploy to Modrinth
env:
MODRINTH_API_KEY: ${{ secrets.MODRINTH_API_KEY }}
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run:
cd tools/deployment/build/libs &&
java -jar deployment.jar modrinth ../../../../plugins/fancyholograms/snapshot_deployment_config.json true
- name: Deploy
uses: fancyinnovations/fancyverteiler@main
with:
config_path: "/plugins/fancyholograms/snapshot_deployment_config.json"
modrinth_api_key: ${{ secrets.MODRINTH_API_KEY }}
discord_webhook_url: ${{ secrets.DISCORD_WEBHOOK_URL }}
- name: Publish to reposilite (snapshots)
run: ./gradlew :plugins:fancyholograms:fh-api:publishAllPublicationsToFancyinnovationsSnapshotsRepository
# - name: Publish to reposilite (snapshots)
# run: ./gradlew :plugins:fancyholograms:fh-api:publishAllPublicationsToFancyinnovationsSnapshotsRepository

View File

@@ -2,8 +2,9 @@ name: Deploy FancyNpcs (snapshot)
on:
workflow_dispatch:
jobs:
deploy-plugin:
deploy:
runs-on: ubuntu-latest
steps:
@@ -27,36 +28,17 @@ jobs:
- name: Modify gradlew permissions
run: chmod +x ./gradlew
- name: Build deployment tool
run: ./gradlew :tools:deployment:shadowJar
- name: Build FancyNpcs for Modrinth
- name: Build
env:
RELEASE_CHANNEL: 'snapshot'
RELEASE_PLATFORM: 'modrinth'
run: ./gradlew :plugins:fancynpcs:shadowJar
- name: Deploy to Modrinth
env:
MODRINTH_API_KEY: ${{ secrets.MODRINTH_API_KEY }}
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run:
cd tools/deployment/build/libs &&
java -jar deployment.jar modrinth ../../../../plugins/fancynpcs/snapshot_deployment_config.json true
- name: Deploy
uses: fancyinnovations/fancyverteiler@main
with:
config_path: "/plugins/fancynpcs/snapshot_deployment_config.json"
modrinth_api_key: ${{ secrets.MODRINTH_API_KEY }}
discord_webhook_url: ${{ secrets.DISCORD_WEBHOOK_URL }}
# - name: Build FancyNpcs for Hangar
# env:
# RELEASE_CHANNEL: 'snapshot'
# RELEASE_PLATFORM: 'hangar'
# run: ./gradlew :plugins:fancynpcs:shadowJar
#
# - name: Deploy to Hangar
# env:
# HANGAR_API_KEY: "${{ secrets.HANGAR_API_KEY }}"
# DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
# run:
# cd tools/deployment/build/libs &&
# java -jar deployment.jar hangar ../../../../plugins/fancynpcs/snapshot_deployment_config.json true
- name: Publish to reposilite (snapshots)
run: ./gradlew :plugins:fancynpcs:fn-api:publishAllPublicationsToFancyinnovationsSnapshotsRepository
# - name: Publish to reposilite (snapshots)
# run: ./gradlew :plugins:fancynpcs:fn-api:publishAllPublicationsToFancyinnovationsSnapshotsRepository

View File

@@ -35,7 +35,6 @@ This is a [monorepo](docs/src/development-guidelines/monorepo.md) for all plugin
- Packets: packet handling library (also called FancySitula)
**Tools:**
- Deployment: deploy plugins to platforms like modrinth
- Quick E2E: generate a quick end-to-end environment for testing
## Usage

View File

@@ -15,12 +15,5 @@ allprojects {
maven("https://repo.papermc.io/repository/maven-public/")
maven("https://repo.fancyinnovations.com/releases")
maven(url = "https://jitpack.io")
maven("https://maven-prs.papermc.io/Paper/pr13194") {
name = "Maven for PR #13194" // https://github.com/PaperMC/Paper/pull/13194
mavenContent {
includeModule("io.papermc.paper", "dev-bundle")
includeModule("io.papermc.paper", "paper-api")
}
}
}
}

View File

@@ -0,0 +1,93 @@
---
authors:
- name: Oliver Schlüter
email: oliver@fancyinnovations.com
link: https://github.com/OliverSchlueter
avatar: https://avatars.githubusercontent.com/u/79666085?v=4
date: 2025-11-24
title: "Introducing Hytale Plugins"
description: "The first Hytale plugin by FancyInnovations will be: FancyCore, a powerful plugin that provides a wide range of features and tools for Hytale server owners."
---
![](../static/blogs/introducing-hytale-plugins/hytale-plugins.png)
[Hytale](https://hytale.com/) is finally heading into early access, and I couldnt be more excited. With that, Im thrilled to announce that **FancyInnovations will be creating server-side plugins for the Hytale ecosystem**.
The moment I read the [“Hytale is saved!”](https://hytale.com/news/2025/11/hytale-is-saved) announcement, my brain immediately jumped into brainstorming mode.
After digging through the currently available information about Hytale modding, one thing became very clear:
**Hytale needs a plugin that provides a strong set of essential features — a foundation others can build on.**
And thats exactly what Im creating.
## Introducing FancyCore
With FancyCore I want to create a platform where gamemode specific plugins can be built on. It will cover many features you probably would expect from a core plugin.
Lets look at some features:
- Teleportation (teleport, teleport request, teleport all, spawn, warps, player homes, …)
- World (create, teleport, change day time, weather, spawn protection, …)
- Inventory (kits, virtual backpacks, …)
- Economy (balance, pay, sell items, shops, …)
- Chat (chat format, player-to-player messages, nicknames, help, rules, broadcast, mute chat, clear chat, chat rooms, …)
- Moderation (report, warn, kick, mute, ban, chat / command history, vanish, sudo, …)
- Permissions (groups, permissions, …)
- Server (list online players, uptime, tps, mspt, cpu usage, ram usage, disk usage, …)
- Player (gamemode, playtime, fly, heal, feed, god, ping, …)
- Easy to use API
Notable API features:
- Permissions API
- Economy API
- Placeholder API
Other features for the future:
- Discord integration
- Built-in WebUI
This is a long list of features and not all will be available on day 1.
As I am writing this blog post, there is no public Hytale API documentation, so all I can do at the moment is write all the business logic and implement the actual commands and other Hytale specific features as soon as the API documentation is available.
For now, it will be a big all-in-one plugin, in the future I might create separate plugins for each category, but that's not final yet.
**FancyCore will be a Hytale only plugin**, I dont plan to create a Minecraft plugin out of this at the moment.
For now the plan is to get FancyCore working for Hytale as soon as possible while, but while keeping a good quality.
The plugin will be free and open-source, just like all Minecraft plugins. You can already take a look at the new mono-repo for Hytale plugins [here](https://github.com/FancyInnovations/HytalePlugins).
Some parts that dont require the Hytale server dependency are already being worked on.
Feel free to take a look and contribute to it if you want.
Parts of the documentation is also already written (mostly the commands). You can take a look at it here.
From what Ive seen, you wont be able to upload Hytale plugins to Modrinth (just speculations).
The only popular platform that supports distribution of Hytale plugins is Curseforge.
I'm currently not sure if I want to distribute FancyCore there.
In the meanwhile Ive been programming a little download service myself to distribute Hytale plugins, so they will for sure be available on the fancyinnovations.com website.
I know the community is currently working on alternative platforms as well, so we will see how that develops.
## FancyAnalytics
Alongside FancyCore, Ill also be releasing FancyAnalytics for Hytale — a toolset for gathering analytics from your Hytale server or plugins.
It will include:
* A Hytale plugin for collecting metrics such as online players, TPS, entity counts, CPU usage, and more
* An SDK for plugin developers to track usage metrics, including support for custom data points
This gives developers powerful insight into how their plugins are used — and helps server owners better understand performance.
## Conclusion
If youre as excited as I am about Hytale — and FancyCore — then join our Discord community!
Assign yourself the “FancyCore” role to get all the latest updates.
I'm currently working on it daily and will share progress updates there.
If you have any suggestions or feature requests for FancyCore, feel free to share them in the `#core-discussion` channel or DM me directly (`real_oliver`).
Theres also a dedicated channel for general Hytale news.
(The release date for early access will be announced this week!)
*Oliver*

View File

@@ -0,0 +1,2 @@
icon: code
order: 7

View File

@@ -0,0 +1,30 @@
---
icon: dot
order: 9
---
# Events API
FancyCore has its own event system that allows you to listen to various events that happen in the FancyCore system.
## Registering an event listener
Example for registering a listener for the `PlayerReportedEvent`:
```java
EventService eventService = EventService.get();
eventService.registerListener(PlayerReportedEvent.class, (event) -> {
System.out.println("PlayerReportedEvent fired with report id: " + event.getReport().id());
});
```
## Available events
### Player events
| Event | Description |
|-----------------------|-------------------------------------------------------------------------------|
| `PlayerModifiedEvent` | Event fired when a player's data is modified (through FancyPlayer's setters). |
| `PlayerReportedEvent` | Fired when a player is reported. |
| `PlayerPunishedEvent` | Fired when a player receives a punishment (warning, kick, mute or ban). |

View File

@@ -0,0 +1,51 @@
---
icon: dot
order: 10
---
# Getting started
## Include the API in your project
To include the FancyCore API in your project, you need to add the following dependency to your `build.gradle.kts` or `pom.xml` file.
**Gradle:**
```kotlin
repositories {
maven("https://repo.fancyinnovations.com/releases")
}
```
```kotlin
dependencies {
compileOnly("com.fancyinnovations:FancyCore:VERSION")
}
```
**Maven:**
```xml
<repository>
<id>fancyinnovations-releases</id>
<name>FancyInnovations Repository</name>
<url>https://repo.fancyinnovations.com/releases</url>
</repository>
```
```xml
<dependency>
<groupId>com.fancyinnovations</groupId>
<artifactId>FancyCore</artifactId>
<version>VERSION</version>
<scope>provided</scope>
</dependency>
```
Replace `VERSION` with the version of the API you want to use. You can find the latest version on the download pages or in the GitHub releases.
## JavaDocs and help
You can find the JavaDocs for the FancyDialogs API [here](https://repo.fancyinnovations.com/javadoc/releases/com/fancyinnovations/FancyCore/latest).
Join the [FancyInnovations Discord](https://discord.gg/ZUgYCEJUEx) for help and support. There is a dedicated channel for help about the api (`#core-api`).
```

View File

@@ -0,0 +1,48 @@
---
icon: dot
order: 7
---
# Placeholder API
FancyCore includes a Placeholders API that allows you to create and manage custom placeholders for use in various plugins.
## Parse placeholders
To parse placeholders in a string, use the `PlaceholderService`'s `parse` method. Here's an example:
```java
PlaceholderService placeholderService = PlaceholderService.get();
String parsedString = placeholderService.parse(player, "Hello, {player_name}! Your rank is {player_rank}.");
```
## Creating a custom placeholder
To create a custom placeholder, implement the `PlaceholderProvider` interface and register it with the `PlaceholderService`. Here's an example of creating a simple placeholder that returns a player's rank:
```java
public class PlayerRankPlaceholder implements PlaceholderProvider {
@Override
public String getName() {
return "Player Rank Placeholder";
}
@Override
public String getIdentifier() {
return "player_rank";
}
@Override
public String parse(FancyPlayer player, String input) {
return player.getRank().getName();
}
}
```
You can then register your placeholder provider with the `PlaceholderService`:
```java
PlaceholderService placeholderService = PlaceholderService.get();
placeholderService.registerPlaceholderProvider(new PlayerRankPlaceholder());
```

View File

@@ -0,0 +1,38 @@
---
icon: dot
order: 8
---
# Punishment API
FancyCore provides a comprehensive Punishment API that allows you to manage player punishments such as warnings, kicks, mutes, and bans.
## Using the Punishment Service
With the Punishment Service, you can easily issue various types of punishments to players. Below are examples of how to use the Punishment Service:
```java
PunishmentService punishmentService = PunishmentService.get();
punishmentService.warnPlayer(player, staff, "reason", duration);
punishmentService.mutePlayer(player, staff, "reason"); // Permanent mute
punishmentService.mutePlayer(player, staff, "reason", 1000*60*60*4); // Temporary mute (4 hours)
punishmentService.kickPlayer(player, staff, "reason");
punishmentService.banPlayer(player, staff, "reason", duration); // Permanent ban
punishmentService.banPlayer(player, staff, "reason", 1000*60*60*24); // Temporary ban (1 day)
```
You can also retrieve existing punishments for a player:
```java
List<Punishment> punishments = punishmentService.getPunishmentsForPlayer(player);
```
Player reports are also managed through the Punishment Service:
```java
punishmentService.reportPlayer(player, staff, "reason");
```

View File

@@ -0,0 +1,2 @@
icon: log
order: 5

View File

@@ -0,0 +1,9 @@
---
icon: dot
title: V0
order: 1
---
# FancyCore v0.x.x

View File

@@ -0,0 +1,99 @@
---
icon: dot
title: Chat
---
![](../../static/commands.png)
# Commands for the chat system
!!!warning
The command list is not complete and not all commands are properly documented yet.
Some commands might not be implemented yet.
!!!
## Messages
### Message
Description: Sends a private message to the specified player.<br/>
Syntax: ``/Message (player) (message)`` or ``/Msg (player) (message)``<br/>
Permission: ``fancycore.commands.message``
### Reply
Description: Replies to the last private message received.<br/>
Syntax: ``/Reply (message)`` or ``/R (message)``<br/>
Permission: ``fancycore.commands.reply``
### Message Spy
Description: Toggles message spying to see private messages between other players.<br/>
Syntax: ``/MessageSpy`` or ``/MsgSpy``<br/>
Permission: ``fancycore.commands.messagespy``
### ToggleMessages
Description: Toggles the ability to receive private messages.<br/>
Syntax: ``/ToggleMessages`` or ``/ToggleMsg``<br/>
Permission: ``fancycore.commands.togglemessages``
## Chat rooms
### CreateChatRoom
Description: Creates a new chat room with the specified name.<br/>
Syntax: ``/CreateChatRoom (name)`` or ``/CCR (name)``<br/>
Permission: ``fancycore.commands.createchatroom``
### JoinChatRoom
Description: Joins the specified chat room.<br/>
Syntax: ``/JoinChatRoom (name)`` or ``/JCR (name)``<br/>
Permission: ``fancycore.commands.joinchatroom``
### LeaveChatRoom
Description: Leaves the current chat room.<br/>
Syntax: ``/LeaveChatRoom`` or ``/LCR``<br/>
Permission: ``fancycore.commands.leavechatroom``
### ListChatRooms
Description: Lists all available chat rooms on the server.<br/>
Syntax: ``/ListChatRooms`` or ``/LCRs``<br/>
Permission: ``fancycore.commands.listchatrooms``
### ChatRoomInfo
Description: Displays information about the specified chat room.<br/>
Syntax: ``/ChatRoomInfo (name)`` or ``/CRInfo (name)``<br/>
Permission: ``fancycore.commands.chatroominfo``
## Chat Management
### ClearChat
Description: Clears the chat for all players on the server.<br/>
Syntax: ``/ClearChat`` or ``/CC``<br/>
Permission: ``fancycore.commands.clearchat``
### SlowChat
Description: Sets a slow mode for chat, limiting how often players can send messages.<br/>
Syntax: ``/SlowChat (seconds)`` or ``/Slow (seconds)``<br/>
Permission: ``fancycore.commands.slowchat``
### MuteChat
Description: Mutes the chat for all players, preventing them from sending messages.<br/>
Syntax: ``/MuteChat``<br/>
Permission: ``fancycore.commands.mutechat``
### UnmuteChat
Description: Unmutes the chat, allowing players to send messages again.<br/>
Syntax: ``/UnmuteChat``<br/>
Permission: ``fancycore.commands.unmutechat``

View File

@@ -0,0 +1,2 @@
order: 9
icon: command-palette

View File

@@ -0,0 +1,49 @@
---
icon: dot
title: Economy
---
![](../../static/commands.png)
# Commands for the economy system
!!!warning
The command list is not complete and not all commands are properly documented yet.
Some commands might not be implemented yet.
!!!
### Balance
Description: Displays the balance of the specified player or your own balance if no player is specified.<br/>
Syntax: ``/Balance [player]``<br/>
Permission: ``fancycore.commands.balance``
### Pay
Description: Transfers a specified amount of money from your balance to another player's balance.<br/>
Syntax: ``/Pay (player) (amount)``<br/>
Permission: ``fancycore.commands.pay``
### Set Balance
Description: Sets the balance of the specified player to a given amount.<br/>
Syntax: ``/SetBalance (player) (amount)``<br/>
Permission: ``fancycore.commands.setbalance``
### Add Balance
Description: Adds a specified amount of money to the balance of the specified player.<br/>
Syntax: ``/AddBalance (player) (amount)``<br/>
Permission: ``fancycore.commands.addbalance``
### Remove Balance
Description: Removes a specified amount of money from the balance of the specified player.<br/>
Syntax: ``/RemoveBalance (player) (amount)``<br/>
Permission: ``fancycore.commands.removebalance``
### Top Balances
Description: Displays a leaderboard of players with the highest balances.<br/>
Syntax: ``/TopBalances [page]``<br/>
Permission: ``fancycore.commands.topbalances``

View File

@@ -0,0 +1,79 @@
---
icon: dot
title: Inventory
---
![](../../static/commands.png)
# Commands for the inventory system
!!!warning
The command list is not complete and not all commands are properly documented yet.
Some commands might not be implemented yet.
!!!
## Kits
### Create Kit
Description: Creates a new kit with the specified name. It contains all items in your inventory<br/>
Syntax: ``/CreateKit (name)``<br/>
Permission: ``fancycore.commands.createkit``
### Delete Kit
Description: Deletes the specified kit.<br/>
Syntax: ``/DeleteKit (name)``<br/>
Permission: ``fancycore.commands.deletekit``
### Give Kit
Description: Gives the specified kit to the targeted player(s).<br/>
Syntax: ``/Kit (name) [player]``<br/>
Permission: ``fancycore.commands.kit.(name)``
### List Kits
Description: Lists all available kits.<br/>
Syntax: ``/Kits`` or ``/ListKits``<br/>
Permission: ``fancycore.commands.listkits``
## Backpacks
### Open Backpack
Description: Opens the specified backpack of the targeted player.<br/>
Syntax: ``/Backpack (name) [player]``<br/>
Permission: ``fancycore.commands.backpack``
### Create Backpack
Description: Creates a new backpack with the specified name and size.<br/>
Syntax: ``/CreateBackpack (name) (size)``<br/>
Permission: ``fancycore.commands.createbackpack``
### Delete Backpack
Description: Deletes the specified backpack.<br/>
Syntax: ``/DeleteBackpack (name)``<br/>
Permission: ``fancycore.commands.deletebackpack``
### List Backpacks
Description: Lists all available backpacks.<br/>
Syntax: ``/Backpacks`` or ``/ListBackpacks``<br/>
Permission: ``fancycore.commands.listbackpacks``
## Utilities
### Clear Inventory
Description: Clears the inventory of the targeted player(s).<br/>
Syntax: ``/ClearInventory [player]``<br/>
Permission: ``fancycore.commands.clearinventory``
### Open another Player's Inventory
Description: Opens the inventory of the targeted player.<br/>
Syntax: ``/OpenInventory (player)`` or ``/Invsee (player)``<br/>
Permission: ``fancycore.commands.openinventory``

View File

@@ -0,0 +1,110 @@
---
icon: dot
title: Moderation
---
![](../../static/commands.png)
# Commands for the moderation system
!!!warning
The command list is not complete and not all commands are properly documented yet.
Some commands might not be implemented yet.
!!!
## Report
### Report a Player
Description: Reports a player for misconduct.<br/>
Syntax: ``/Report (player) [reason]``<br/>
Permission: ``fancycore.commands.report``
### List Reports
Description: Lists all active player reports.<br/>
Syntax: ``/Reports list``<br/>
Permission: ``fancycore.commands.reports.list``
### View Report Details
Description: Views details of a specific report.<br/>
Syntax: ``/Reports view (reportID)``<br/>
Permission: ``fancycore.commands.reports.view``
### Close Report
Description: Closes a specific report.<br/>
Syntax: ``/Reports close (reportID)``<br/>
Permission: ``fancycore.commands.reports.close``
## Warn
### Warn a Player
Description: Issues a warning to a player.<br/>
Syntax: ``/Warn (player) [reason]``<br/>
Permission: ``fancycore.commands.warn``
## Mute
### Mute a Player
Description: Mutes a player, preventing them from sending chat messages.<br/>
Syntax: ``/Mute (player) [reason]``<br/>
Permission: ``fancycore.commands.mute``
### Temporary Mute a Player
Description: Temporarily mutes a player for a specified duration.<br/>
Syntax: ``/Tempmute (player) (duration) [reason]``<br/>
Permission: ``fancycore.commands.tempmute``
### Unmute a Player
Description: Unmutes a player.<br/>
Syntax: ``/Unmute (player)``<br/>
Permission: ``fancycore.commands.unmute``
## Kick
### Kick a Player
Description: Kicks a player from the server.<br/>
Syntax: ``/Kick (player) [reason]``<br/>
Permission: ``fancycore.commands.kick``
## Ban
### Ban a Player
Description: Bans a player from the server.<br/>
Syntax: ``/Ban (player) [reason]``<br/>
Permission: ``fancycore.commands.ban``
### Temporary Ban a Player
Description: Temporarily bans a player from the server for a specified duration.<br/>
Syntax: ``/Tempban (player) (duration) [reason]``<br/>
Permission: ``fancycore.commands.tempban``
### Unban a Player
Description: Unbans a player from the server.<br/>
Syntax: ``/Unban (player)``<br/>
Permission: ``fancycore.commands.unban``
## Logs
### View Moderation Logs
Description: Views the moderation logs.<br/>
Syntax: ``/Modlogs [player]``<br/>
Permission: ``fancycore.commands.modlogs``
### View Chat Logs
Description: Views the chat logs.<br/>
Syntax: ``/Chatlogs [player] [--withCommands]``<br/>
Permission: ``fancycore.commands.chatlogs``

View File

@@ -0,0 +1,107 @@
---
icon: dot
title: Permissions
---
![](../../static/commands.png)
# Commands for the permissions system
!!!warning
The command list is not complete and not all commands are properly documented yet.
Some commands might not be implemented yet.
!!!
## Groups
### Create Group
Description: Creates a new group with the specified name.<br/>
Syntax: ``/Groups create (name)``<br/>
Permission: ``fancycore.commands.creategroup``
### Delete Group
Description: Deletes the specified permission group.<br/>
Syntax: ``/Groups delete (name)``<br/>
Permission: ``fancycore.commands.deletegroup``
### List Groups
Description: Lists all available permission groups.<br/>
Syntax: ``/Groups list``<br/>
Permission: ``fancycore.commands.listgroups``
### Info Group
Description: Displays information about the specified permission group.<br/>
Syntax: ``/Groups info (name)``<br/>
Permission: ``fancycore.commands.infogroup``
### Set Parent Group
Description: Sets the parent group for the specified permission group.<br/>
Syntax: ``/Groups parent (group) set (parent)``<br/>
Permission: ``fancycore.commands.setparentgroup``
### Add Permission to Group
Description: Adds the specified permission to the permission group.<br/>
Syntax: ``/Groups permission (group) add (permission)``<br/>
Permission: ``fancycore.commands.addpermtogroup``
### Remove Permission from Group
Description: Removes the specified permission from the permission group.<br/>
Syntax: ``/Groups permission (group) remove (permission)``<br/>
Permission: ``fancycore.commands.removepermfromgroup``
### Set Prefix for Group
Description: Sets the prefix for the specified permission group.<br/>
Syntax: ``/Groups prefix (group) set (prefix)``<br/>
Permission: ``fancycore.commands.setprefixforgroup``
### Set Suffix for Group
Description: Sets the suffix for the specified permission group.<br/>
Syntax: ``/Groups suffix (group) set (suffix)``<br/>
Permission: ``fancycore.commands.setsuffixforgroup``
### Add Player to Group
Description: Adds the specified player to the permission group.<br/>
Syntax: ``/Groups player (player) add (group)``<br/>
Permission: ``fancycore.commands.addplayertogroup``
### Remove Player from Group
Description: Removes the specified player from the permission group.<br/>
Syntax: ``/Groups player (player) remove (group)``<br/>
Permission: ``fancycore.commands.removeplayerfromgroup``
## Player Permissions
### Add Permission to Player
Description: Adds the specified permission to the targeted player.<br/>
Syntax: ``/Permission add (permission) [player]``<br/>
Permission: ``fancycore.commands.addpermtoplayer``
### Remove Permission from Player
Description: Removes the specified permission from the targeted player.<br/>
Syntax: ``/Permission remove (permission) [player]``<br/>
Permission: ``fancycore.commands.removepermfromplayer``
### Check Player Permission
Description: Checks if the targeted player has the specified permission.<br/>
Syntax: ``/Permission check (permission) [player]``<br/>
Permission: ``fancycore.commands.checkplayerperm``
### List Player Permissions
Description: Lists all permissions of the targeted player.<br/>
Syntax: ``/Permission list [player]``<br/>
Permission: ``fancycore.commands.listplayerperms``

View File

@@ -0,0 +1,91 @@
---
icon: dot
title: Player
---
![](../../static/commands.png)
# Commands for the player system
!!!warning
The command list is not complete and not all commands are properly documented yet.
Some commands might not be implemented yet.
!!!
### Gamemode
Description: Changes the gamemode of a player.<br/>
Syntax: ``/Gamemode (gamemode) [player]`` or ``/GM (gamemode)``<br/>
Permission: ``fancycore.commands.gamemode``
### Gamemode explorer
Description: Changes the gamemode of a player to explorer mode.<br/>
Syntax: ``/gme [player]``<br/>
Permission: ``fancycore.commands.gamemode``
### Gamemode creative
Description: Changes the gamemode of a player to creative mode.<br/>
Syntax: ``/gmc [player]``<br/>
Permission: ``fancycore.commands.gamemode``
### Fly
Description: Toggles fly mode for a player.<br/>
Syntax: ``/Fly [player]``<br/>
Permission: ``fancycore.commands.fly``
### Speed
Description: Sets the walk and fly speed of a player.<br/>
Syntax: ``/Speed (speed) [player]``<br/>
Permission: ``fancycore.commands.speed``
### Heal
Description: Heals a player to full health.<br/>
Syntax: ``/Heal [player]``<br/>
Permission: ``fancycore.commands.heal``
### Feed
Description: Feeds a player to full hunger.<br/>
Syntax: ``/Feed [player]``<br/>
Permission: ``fancycore.commands.feed``
### God mode
Description: Toggles god mode for a player.<br/>
Syntax: ``/God [player]``<br/>
Permission: ``fancycore.commands.god``
### Vanish
Description: Toggles vanish mode for a player.<br/>
Syntax: ``/Vanish [player]``<br/>
Permission: ``fancycore.commands.vanish``
### Playtime
Description: Displays the playtime of a player.<br/>
Syntax: ``/Playtime [player]``<br/>
Permission: ``fancycore.commands.playtime``
### Seen
Description: Displays the last seen time of a player.<br/>
Syntax: ``/Seen (player)``<br/>
Permission: ``fancycore.commands.seen``
### Near
Description: Lists players near the command sender within a specified radius.<br/>
Syntax: ``/Near [radius]``<br/>
Permission: ``fancycore.commands.near``
### Ping
Description: Displays the ping of a player.<br/>
Syntax: ``/Ping [player]``<br/>
Permission: ``fancycore.commands.ping``

View File

@@ -0,0 +1,91 @@
---
icon: dot
title: Server
---
![](../../static/commands.png)
# Commands for the server system
!!!warning
The command list is not complete and not all commands are properly documented yet.
Some commands might not be implemented yet.
!!!
## Server control
### Restart
Description: Restarts the server after a specified delay.<br/>
Syntax: ``/Restart (delay)``<br/>
Permission: ``fancycore.commands.restart``
### Stop
Description: Stops the server after a specified delay.<br/>
Syntax: ``/Stop (delay)``<br/>
Permission: ``fancycore.commands.stop``
### Save All
Description: Forces the server to save all data immediately.<br/>
Syntax: ``/SaveAll``<br/>
Permission: ``fancycore.commands.saveall``
## Server health
### Health
Description: Displays an overview of the server's health status.<br/>
Syntax: ``/Health``<br/>
Permission: ``fancycore.commands.health``
### TPS
Description: Displays the current ticks per second (TPS) of the server.<br/>
Syntax: ``/Health tps``<br/>
Permission: ``fancycore.commands.health.tps``
### Memory
Description: Displays the current memory usage of the server.<br/>
Syntax: ``/Health memory``<br/>
Permission: ``fancycore.commands.health.memory``
### Uptime
Description: Displays the server's uptime since the last restart.<br/>
Syntax: ``/Health uptime``<br/>
Permission: ``fancycore.commands.health.uptime``
### CPU Usage
Description: Displays the current CPU usage of the server.<br/>
Syntax: ``/Health cpu``<br/>
Permission: ``fancycore.commands.health.cpu``
### Entity Count
Description: Displays the total number of entities currently loaded on the server.<br/>
Syntax: ``/Health entities``<br/>
Permission: ``fancycore.commands.health.entities``
### Player Count
Description: Displays the current number of players online on the server.<br/>
Syntax: ``/Health players``<br/>
Permission: ``fancycore.commands.health.players``
## Players
### List online players
Description: Lists all players currently online on the server.<br/>
Syntax: ``/OnlinePlayers``<br/>
Permission: ``fancycore.commands.onlineplayers``
### List all registered players
Description: Lists all players registered on the server.<br/>
Syntax: ``/RegisteredPlayers``<br/>
Permission: ``fancycore.commands.registeredplayers``

View File

@@ -0,0 +1,129 @@
---
icon: dot
title: Teleportation
---
![](../../static/commands.png)
# Commands for the teleportation system
!!!warning
The command list is not complete and not all commands are properly documented yet.
Some commands might not be implemented yet.
!!!
## Player Teleportation
### Teleport to another player
Description: Teleports you or the specified player to another player's location.<br/>
Syntax: ``/TP (target player) [destination player]`` or ``/Teleport (target player) [destination player]``<br/>
Permission: ``fancycore.commands.tp``
### Teleport another player to you
Description: Teleports the specified player to your location.<br/>
Syntax: ``/TPHere (player)`` or ``/TeleportHere (player)``<br/>
Permission: ``fancycore.commands.tphere``
### Teleport all players to you
Description: Teleports all players on the server to your location.<br/>
Syntax: ``/TPAll`` or ``/TeleportAll``<br/>
Permission: ``fancycore.commands.tpall``
### Teleport to specific coordinates
Description: Teleports you to the specified coordinates<br/>
Syntax: ``/TPPos (x) (y) (z) [world]`` or ``/TeleportPos (x) (y) (z) [world]``<br/>
Permission: ``fancycore.commands.tppos``
### Request teleport to another player
Description: Sends a teleport request to another player to teleport to their location.<br/>
Syntax: ``/TPR (player)``, ``/TPRequest (player)`` or ``/TeleportRequest (player)``<br/>
Permission: ``fancycore.commands.tprequest``
### Accept teleport request
Description: Accepts a pending teleport request from another player.<br/>
Syntax: ``/TPA [player]``, ``/TPAccept [player]`` or ``/TeleportAccept [player]``<br/>
Permission: ``fancycore.commands.tpaccept``
### Deny teleport request
Description: Denies a pending teleport request from another player.<br/>
Syntax: ``/TPD [player]``, ``/TPDeny [player]`` or ``/TeleportDeny [player]``<br/>
Permission: ``fancycore.commands.tpdeny``
### Teleport back to previous location
Description: Teleports you back to your previous location before your last teleport.<br/>
Syntax: ``/Back``<br/>
Permission: ``fancycore.commands.back``
### Teleport to last death location
Description: Teleports you to the location where you last died.<br/>
Syntax: ``/DeathBack``, ``/DeathTP`` or ``/DeathTeleport``<br/>
Permission: ``fancycore.commands.deathback``
## Spawn
### Set spawn point
Description: Sets the server's spawn point to your current location.<br/>
Syntax: ``/SetSpawn``<br/>
Permission: ``fancycore.commands.setspawn``
### Teleport to spawn point
Description: Teleports you to the server's spawn point.<br/>
Syntax: ``/Spawn``<br/>
Permission: ``fancycore.commands.spawn``
## Warps
### Create a warp point
Description: Creates a warp point at your current location with the specified name.<br/>
Syntax: ``/CreateWarp (name)``<br/>
Permission: ``fancycore.commands.createwarp``
### Delete a warp point
Description: Deletes the warp point with the specified name.<br/>
Syntax: ``/DeleteWarp (name)``<br/>
Permission: ``fancycore.commands.deletewarp``
### Teleport to a warp point
Description: Teleports you to the warp point with the specified name.<br/>
Syntax: ``/Warp (name)``<br/>
Permission: ``fancycore.commands.warp.(name)``
### List all warp points
Description: Lists all available warp points on the server.<br/>
Syntax: ``/ListWarps``, ``/Warps``<br/>
Permission: ``fancycore.commands.listwarps``
## Homes
### Set home point
Description: Sets your home point to your current location.<br/>
Syntax: ``/SetHome (name)``<br/>
Permission: ``fancycore.commands.sethome``
### Delete home point
Description: Deletes your home point with the specified name.<br/>
Syntax: ``/DeleteHome (name)``<br/>
Permission: ``fancycore.commands.deletehome``
### Teleport to home point
Description: Teleports you to your home point with the specified name or the first home if no name is provided.<br/>
Syntax: ``/Home [name]``<br/>
Permission: ``fancycore.commands.home``

View File

@@ -0,0 +1,59 @@
---
icon: dot
title: World
---
![](../../static/commands.png)
# Commands for the world management system
!!!warning
The command list is not complete and not all commands are properly documented yet.
Some commands might not be implemented yet.
!!!
## World Management
### Create a new world
Description: Creates a new world with the specified name.<br/>
Syntax: ``/CreateWorld (world name) [type]``<br/>
Permission: ``fancycore.commands.createworld``
### Copy an existing world
Description: Creates a copy of the specified world.<br/>
Syntax: ``/CopyWorld (source world name) (new world name)``<br/>
Permission: ``fancycore.commands.copyworld``
### Delete an existing world
Description: Deletes the specified world from the server.<br/>
Syntax: ``/DeleteWorld (world name)``<br/>
Permission: ``fancycore.commands.deleteworld``
### List all worlds
Description: Lists all available worlds on the server.<br/>
Syntax: ``/ListWorlds``, ``/Worlds``<br/>
Permission: ``fancycore.commands.listworlds``
### Teleport to a world
Description: Teleports you to the specified world.<br/>
Syntax: ``/World (world name)``<br/>
Permission: ``fancycore.commands.world``
## Utility Commands
### Set weather
Description: Sets the weather in the current world.<br/>
Syntax: ``/SetWeather (sun|rain)``<br/>
Permission: ``fancycore.commands.setweather``
### Set time
Description: Sets the time of day in the current world.<br/>
Syntax: ``/SetTime (time)``<br/>
Permission: ``fancycore.commands.settime``

View File

@@ -0,0 +1,33 @@
---
title: FancyCore [Hytale]
icon: package
order: 90
---
#
![](../static/logos-and-banners/fancycore-banner.png)
!!!
Essential features every Hytale server needs. From permission management over world management to economy and more.
!!!
## Features
With FancyCore, you get a wide variety of features that are essential for running a Hytale server:
- **Permissions**: permission management system to control access to commands and features
- **Economy**: robust economy system with virtual currency, shops, and trading
- **Chat**: advanced chat management with channels, formatting, nicknames and msgs
- **Moderation**: tools for server admins including bans, kicks, warnings, and logs
- **World**: create and manage multiple worlds with different settings and environments
- **Inventory**: manage player inventories, kits and player backpacks
- **Teleportation**: spawn point, warps, player homes, and teleport requests
- **Player**: utility commands such as fly, speed, gamemode, heal, and more
- **Server**: view server stats and manage plugins
- **API**: comprehensive API for developers to extend and customize FancyCore
- **And much more!**
FancyCore is designed to provide all the essential features needed to build a successful Hytale server, while being easy to use and highly customizable.
We are trying to get a usable version out as soon as possible.
If you don't want to miss any updates, join our [Discord](https://discord.gg/ZUgYCEJUEx) and assign yourself the "FancyCore" role.

10
docs/src/fancycore/faq.md Normal file
View File

@@ -0,0 +1,10 @@
---
order: 6
icon: book
---
# FAQ
### Is FancyCore available for Minecraft?
No, FancyCore is a Hytale only plugin. There are no plans to make it available for Minecraft at this time.

View File

@@ -0,0 +1,29 @@
---
order: 10
icon: info
---
# Getting started
!!!danger
Be aware that this plugin is only made for Hytale servers. Only the latest version of Hytale is supported.
!!!
## Installation
To install FancyCore, you need to download the latest version from one of the following sources:
[!button size="s" icon="download" iconAlign="left" text="SOON" target="blank"]()
!!!warning
It's not yet decided on which platforms FancyCore will be available.
You keep an eye on the discord server for updates: [FancyInnovations Discord](https://discord.gg/ZUgYCEJUEx)
!!!
After downloading the plugin, you can install it by placing the downloaded file in the `plugins` folder of your server.
Restart your server and you are ready to go!
To check if the plugin is installed correctly, you can use the command `/fancycore version`. If the plugin is installed correctly, it will show you the version of the plugin.
You can now learn more about the commands in the `Commands` section of the documentation or learn how to configure the plugin in the `Tutorials` section.
The API documentation can be found in the `Api` section.

View File

@@ -0,0 +1,14 @@
---
order: 8
icon: paste
---
# Placeholders
FancyCore provides a set of built-in placeholders that can be used in various parts of the system.
You can use placeholders in almost any text field within FancyCore.
FancyCore also offers an API for creating and parse placeholders programmatically, read more about it in the [API documentation](../api/placeholders.md).
## Built-in Placeholders
* [Player related placeholders](player.md)

View File

@@ -0,0 +1,19 @@
---
icon: dot
title: Player
---
# Player placeholders
| Name | Identfier | Description | Examples outputs |
|------------------------------------------|---------------------------|------------------------------------------------------------|----------------------------------------|
| Player balance (formatted) | `player_balance` | Displays the player's current balance (formatted) | "0", "123", "123.45", "13,123.97" |
| Player balance (raw) | `player_balance_raw` | Displays the player's current balance (raw) | "0", "123", "123.45", "13123.9417" |
| Player chat color (hex) | `player_chat_color` | Displays the player's chat color in hex format | "#FF0000", "#00FF00", "#0000FF" |
| Player first time joined | `player_first_joined` | Displays the date and time the player first joined | "2023-01-01 12:00:00" |
| Player first time joined (raw timestamp) | `player_first_joined_raw` | Displays the raw timestamp of when the player first joined | "1672531200" |
| Player name | `player_name` | Displays the player's name | "Simon", "OliverHD" |
| Player nickname | `player_nickname` | Displays the player's nickname | "Oli" |
| Player play time (formatted) | `player_play_time` | Displays the player's total play time (formatted) | "0s", "5m 30s", "2h 15m" |
| Player play time (ms) | `player_play_time_ms` | Displays the player's total play time in milliseconds | "0", "330000", "8100000" |
| Player UUID | `player_uuid` | Displays the player's UUID | "9b605d04-5a59-4353-bba3-2ddf570eb38a" |

View File

@@ -0,0 +1,2 @@
order: 7
icon: mortar-board

View File

@@ -9,6 +9,10 @@ The following examples show how to use FancyDialogs in different ways. They are
Almost all examples are made by the community. If you have a nice example that you want to share, feel free come to our discord server and show it to us.
![Provided by reunionsmp.com](../static/fancydialogs/examples/reunionsmp-1.png)
![Provided by reunionsmp.com](../static/fancydialogs/examples/reunionsmp-2.png)
![Provided by oliver](../static/fancydialogs/examples/oliver-welcome_to_fd.png)
![Provided by oliver](../static/fancydialogs/examples/oliver-welcome.png)

View File

@@ -7,6 +7,17 @@ order: 2
#
## v2.8.1 [!badge variant="info" text="2025-11-25"]
- Removed support for 1.19.4
- Fixed npcs randomly disappearing
- Fixed skin mirroring for 1.21.9
- Added inverted permission check for `need_permission` action (use prefix `!` to invert)
- Added `/npc rotate <npc> <yaw> <pitch>` command to set NPC orientation
- Added `swing_arm_on_update` config option
- Added `use-minecraft-usercache` feature flag
## v2.8.0 [!badge variant="info" text="2025-10-10"]
- Added support for 1.21.9 and 1.21.10

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 717 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

View File

@@ -6,7 +6,7 @@ plugins {
paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION
dependencies {
paperweight.paperDevBundle("1.21.11-pre2-R0.1-SNAPSHOT")
paperweight.paperDevBundle("1.21.11-rc2-R0.1-SNAPSHOT")
compileOnly(project(":libraries:packets:packets-api"))
testImplementation(project(":libraries:packets"))

View File

@@ -7,7 +7,7 @@ import java.util.List;
public enum ServerVersion {
v1_21_11("1.21.11", 774),
v1_21_11("1.21.11 Release Candidate 2", 774),
v1_21_10("1.21.10", 773),
v1_21_9("1.21.9", 773),
v1_21_8("1.21.8", 772),

View File

@@ -1 +1 @@
1.0.1
1.0.1.37

View File

@@ -45,8 +45,8 @@ dependencies {
implementation(project(":libraries:common"))
implementation(project(":libraries:jdb"))
implementation(project(":libraries:config"))
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.4")
implementation("de.oliver.FancyAnalytics:mc-api:0.1.11")
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.5")
implementation("de.oliver.FancyAnalytics:mc-api:0.1.12")
implementation("de.oliver.FancyAnalytics:logger:0.0.8")
compileOnly(project(":plugins:fancynpcs:fn-api"))
@@ -85,14 +85,14 @@ paper {
tasks {
runServer {
minecraftVersion("1.21.10")
minecraftVersion("1.21.11-rc2")
downloadPlugins {
modrinth("fancynpcs", "2.8.0")
// modrinth("fancynpcs", "2.8.0")
// hangar("ViaVersion", "5.3.2")
// hangar("ViaBackwards", "5.3.2")
// modrinth("multiverse-core", "4.3.11")
hangar("PlaceholderAPI", "2.11.6")
// hangar("PlaceholderAPI", "2.11.6")
}
}

View File

@@ -1,20 +1,23 @@
{
"project_name": "FancyDialogs",
"plugin_jar_path": "/plugins/fancydialogs/build/libs/FancyDialogs-%VERSION%.jar",
"changelog_path": "/plugins/fancydialogs/CHANGELOG.md",
"version_path": "/plugins/fancydialogs/VERSION",
"modrinth": {
"project_id": "Sx6YwpnK",
"plugin_jar_path": "../../../../plugins/fancydialogs/build/libs/FancyDialogs-%VERSION%.jar",
"changelog_path": "../../../../plugins/fancydialogs/CHANGELOG.md",
"version_path": "../../../../plugins/fancydialogs/VERSION",
"supported_versions": [
"1.21.6",
"1.21.7",
"1.21.8",
"1.21.9",
"1.21.10"
"1.21.10",
"1.21.11"
],
"channel": "RELEASE",
"channel": "release",
"loaders": [
"paper",
"folia"
],
"featured": true
}
}

View File

@@ -1,20 +1,23 @@
{
"project_name": "FancyDialogs",
"plugin_jar_path": "/plugins/fancydialogs/build/libs/FancyDialogs-%VERSION%.jar",
"changelog_path": "/plugins/fancydialogs/CHANGELOG-SNAPSHOT.md",
"version_path": "/plugins/fancydialogs/VERSION",
"modrinth": {
"project_id": "Sx6YwpnK",
"plugin_jar_path": "../../../../plugins/fancydialogs/build/libs/FancyDialogs-%VERSION%.jar",
"changelog_path": "../../../../plugins/fancydialogs/CHANGELOG-SNAPSHOT.md",
"version_path": "../../../../plugins/fancydialogs/VERSION",
"supported_versions": [
"1.21.6",
"1.21.7",
"1.21.8",
"1.21.9",
"1.21.10"
"1.21.10",
"1.21.11-rc2"
],
"channel": "BETA",
"channel": "beta",
"loaders": [
"paper",
"folia"
],
"featured": false
}
}

View File

@@ -1 +1 @@
2.8.0.160
2.8.0.165

View File

@@ -48,8 +48,8 @@ dependencies {
implementation(project(":libraries:common"))
implementation(project(":libraries:jdb"))
implementation(project(":libraries:config"))
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.4")
implementation("de.oliver.FancyAnalytics:mc-api:0.1.11")
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.5")
implementation("de.oliver.FancyAnalytics:mc-api:0.1.12")
implementation("de.oliver.FancyAnalytics:logger:0.0.8")
compileOnly(project(":plugins:fancynpcs:fn-api"))
@@ -90,7 +90,7 @@ paper {
tasks {
runServer {
minecraftVersion("1.21.10")
minecraftVersion("1.21.11-rc2")
downloadPlugins {
// modrinth("fancynpcs", "2.5.2")

View File

@@ -1,9 +1,10 @@
{
"project_name": "FancyHolograms",
"plugin_jar_path": "/plugins/fancyholograms-v2/build/libs/FancyHolograms-%VERSION%.jar",
"changelog_path": "/plugins/fancyholograms-v2/CHANGELOG.md",
"version_path": "/plugins/fancyholograms-v2/VERSION",
"modrinth": {
"project_id": "5QNgOj66",
"plugin_jar_path": "../../../../plugins/fancyholograms-v2/build/libs/FancyHolograms-%VERSION%.jar",
"changelog_path": "../../../../plugins/fancyholograms-v2/CHANGELOG.md",
"version_path": "../../../../plugins/fancyholograms-v2/VERSION",
"supported_versions": [
"1.20",
"1.20.1",
@@ -25,10 +26,11 @@
"1.21.10",
"1.21.11"
],
"channel": "RELEASE",
"channel": "release",
"loaders": [
"paper",
"folia"
],
"featured": true
}
}

View File

@@ -1,9 +1,10 @@
{
"project_name": "FancyHolograms",
"plugin_jar_path": "/plugins/fancyholograms-v2/build/libs/FancyHolograms-%VERSION%.jar",
"changelog_path": "/plugins/fancyholograms-v2/CHANGELOG-SNAPSHOT.md",
"version_path": "/plugins/fancyholograms-v2/VERSION",
"modrinth": {
"project_id": "5QNgOj66",
"plugin_jar_path": "../../../../plugins/fancyholograms-v2/build/libs/FancyHolograms-%VERSION%.jar",
"changelog_path": "../../../../plugins/fancyholograms-v2/CHANGELOG-SNAPSHOT.md",
"version_path": "../../../../plugins/fancyholograms-v2/VERSION",
"supported_versions": [
"1.20",
"1.20.1",
@@ -22,12 +23,14 @@
"1.21.7",
"1.21.8",
"1.21.9",
"1.21.10"
"1.21.10",
"1.21.11-rc2"
],
"channel": "BETA",
"channel": "beta",
"loaders": [
"paper",
"folia"
],
"featured": false
}
}

View File

@@ -1 +1 @@
3.0.0-SNAPSHOT.11
3.0.0-SNAPSHOT.16

View File

@@ -46,8 +46,8 @@ dependencies {
implementation(project(":libraries:config"))
implementation(project(":libraries:packets"))
implementation(project(":libraries:packets:packets-api"))
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.4")
implementation("de.oliver.FancyAnalytics:mc-api:0.1.11")
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.5")
implementation("de.oliver.FancyAnalytics:mc-api:0.1.12")
implementation("de.oliver.FancyAnalytics:logger:0.0.8")
implementation("io.github.revxrsal:lamp.common:4.0.0-rc.12")
@@ -96,7 +96,7 @@ paper {
tasks {
runServer {
minecraftVersion("1.21.10")
minecraftVersion("1.21.11-rc2")
downloadPlugins {
modrinth("fancynpcs", "2.7.0")

View File

@@ -1,9 +1,10 @@
{
"project_name": "FancyHolograms",
"plugin_jar_path": "/plugins/fancyholograms/build/libs/FancyHolograms-%VERSION%.jar",
"changelog_path": "/plugins/fancyholograms/CHANGELOG.md",
"version_path": "/plugins/fancyholograms/VERSION",
"modrinth": {
"project_id": "5QNgOj66",
"plugin_jar_path": "../../../../plugins/fancyholograms/build/libs/FancyHolograms-%VERSION%.jar",
"changelog_path": "../../../../plugins/fancyholograms/CHANGELOG.md",
"version_path": "../../../../plugins/fancyholograms/VERSION",
"supported_versions": [
"1.20.5",
"1.20.6",
@@ -20,10 +21,11 @@
"1.21.10",
"1.21.11"
],
"channel": "RELEASE",
"channel": "release",
"loaders": [
"paper",
"folia"
],
"featured": true
}
}

View File

@@ -1,9 +1,10 @@
{
"project_name": "FancyHolograms",
"plugin_jar_path": "/plugins/fancyholograms/build/libs/FancyHolograms-%VERSION%.jar",
"changelog_path": "/plugins/fancyholograms/CHANGELOG-SNAPSHOT.md",
"version_path": "/plugins/fancyholograms/VERSION",
"modrinth": {
"project_id": "5QNgOj66",
"plugin_jar_path": "../../../../plugins/fancyholograms/build/libs/FancyHolograms-%VERSION%.jar",
"changelog_path": "../../../../plugins/fancyholograms/CHANGELOG-SNAPSHOT.md",
"version_path": "../../../../plugins/fancyholograms/VERSION",
"supported_versions": [
"1.20.5",
"1.20.6",
@@ -17,12 +18,14 @@
"1.21.7",
"1.21.8",
"1.21.9",
"1.21.10"
"1.21.10",
"1.21.11-rc2"
],
"channel": "ALPHA",
"channel": "alpha",
"loaders": [
"paper",
"folia"
],
"featured": false
}
}

View File

@@ -1,4 +1,5 @@
- Added support for 1.21.11
- Removed support for 1.19.4
- Fixed npcs randomly disappearing
- Fixed skin mirroring for 1.21.9
- Added inverted permission check for `need_permission` action (use prefix `!` to invert)
- Added `/npc rotate <npc> <yaw> <pitch>` command to set NPC orientation

View File

@@ -1 +1 @@
2.8.0.312
2.8.1.317

View File

@@ -54,8 +54,8 @@ dependencies {
implementation(project(":libraries:plugin-tests"))
implementation(project(":libraries:config"))
compileOnly("org.lushplugins:ChatColorHandler:6.0.0")
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.4")
implementation("de.oliver.FancyAnalytics:mc-api:0.1.11")
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.5")
implementation("de.oliver.FancyAnalytics:mc-api:0.1.12")
implementation("de.oliver.FancyAnalytics:logger:0.0.8")
implementation("org.incendo:cloud-core:2.0.0")
implementation("org.incendo:cloud-paper:2.0.0-beta.13")
@@ -95,7 +95,7 @@ paper {
tasks {
runServer {
minecraftVersion("1.21.10")
minecraftVersion("1.21.11-rc2")
downloadPlugins {
// hangar("ViaVersion", "5.4.0")

View File

@@ -6,8 +6,7 @@ plugins {
paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION
dependencies {
paperweight.paperDevBundle("1.21.11-pre2-R0.1-SNAPSHOT")
// compileOnly("com.fancyinnovations:fancymc:1.21.6-pre2")
paperweight.paperDevBundle("1.21.11-rc2-R0.1-SNAPSHOT")
compileOnly(project(":plugins:fancynpcs:fn-api"))
compileOnly(project(":libraries:common"))

View File

@@ -7,7 +7,6 @@ paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArt
dependencies {
paperweight.paperDevBundle("1.21.7-R0.1-SNAPSHOT")
// compileOnly("com.fancyinnovations:fancymc:1.21.6-pre2")
compileOnly(project(":plugins:fancynpcs:fn-api"))
compileOnly(project(":libraries:common"))

View File

@@ -7,7 +7,6 @@ paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArt
dependencies {
paperweight.paperDevBundle("1.21.9-R0.1-SNAPSHOT")
// compileOnly("com.fancyinnovations:fancymc:1.21.6-pre2")
compileOnly(project(":plugins:fancynpcs:fn-api"))
compileOnly(project(":libraries:common"))

View File

@@ -1,9 +1,10 @@
{
"project_name": "FancyNpcs",
"plugin_jar_path": "/plugins/fancynpcs/build/libs/FancyNpcs-%VERSION%.jar",
"changelog_path": "/plugins/fancynpcs/CHANGELOG.md",
"version_path": "/plugins/fancynpcs/VERSION",
"modrinth": {
"project_id": "EeyAn23L",
"plugin_jar_path": "../../../../plugins/fancynpcs/build/libs/FancyNpcs-%VERSION%.jar",
"changelog_path": "../../../../plugins/fancynpcs/CHANGELOG.md",
"version_path": "../../../../plugins/fancynpcs/VERSION",
"supported_versions": [
"1.20",
"1.20.1",
@@ -25,10 +26,11 @@
"1.21.10",
"1.21.11"
],
"channel": "RELEASE",
"channel": "release",
"loaders": [
"paper",
"folia"
],
"featured": true
}
}

View File

@@ -1,9 +1,10 @@
{
"project_name": "FancyNpcs",
"plugin_jar_path": "/plugins/fancynpcs/build/libs/FancyNpcs-%VERSION%.jar",
"changelog_path": "/plugins/fancynpcs/CHANGELOG-SNAPSHOT.md",
"version_path": "/plugins/fancynpcs/VERSION",
"modrinth": {
"project_id": "EeyAn23L",
"plugin_jar_path": "../../../../plugins/fancynpcs/build/libs/FancyNpcs-%VERSION%.jar",
"changelog_path": "../../../../plugins/fancynpcs/CHANGELOG-SNAPSHOT.md",
"version_path": "../../../../plugins/fancynpcs/VERSION",
"supported_versions": [
"1.20",
"1.20.1",
@@ -22,12 +23,14 @@
"1.21.7",
"1.21.8",
"1.21.9",
"1.21.10"
"1.21.10",
"1.21.11-rc2"
],
"channel": "BETA",
"channel": "beta",
"loaders": [
"paper",
"folia"
],
"featured": false
}
}

View File

@@ -31,7 +31,7 @@ public class AttributeManagerImpl implements AttributeManager {
private void init() {
String mcVersion = Bukkit.getMinecraftVersion();
switch (mcVersion) {
case "1.21.11" -> attributes = Attributes_1_21_11.getAllAttributes();
case "1.21.11 Release Candidate 2" -> attributes = Attributes_1_21_11.getAllAttributes();
case "1.21.9", "1.21.10" -> attributes = Attributes_1_21_9.getAllAttributes();
case "1.21.6", "1.21.7", "1.21.8" -> attributes = Attributes_1_21_6.getAllAttributes();
case "1.21.5" -> attributes = Attributes_1_21_5.getAllAttributes();

View File

@@ -164,7 +164,7 @@ public class FancyNpcs extends JavaPlugin implements FancyNpcsPlugin {
String mcVersion = Bukkit.getMinecraftVersion();
switch (mcVersion) {
case "1.21.11" -> npcAdapter = Npc_1_21_11::new;
case "1.21.11 Release Candidate 2" -> npcAdapter = Npc_1_21_11::new;
case "1.21.9", "1.21.10" -> npcAdapter = Npc_1_21_9::new;
case "1.21.6", "1.21.7", "1.21.8" -> npcAdapter = Npc_1_21_6::new;
case "1.21.5" -> npcAdapter = Npc_1_21_5::new;
@@ -277,7 +277,7 @@ public class FancyNpcs extends JavaPlugin implements FancyNpcsPlugin {
pluginManager.registerEvents(new PlayerTeleportListener(), instance);
pluginManager.registerEvents(new PlayerChangedWorldListener(), instance);
pluginManager.registerEvents(skinManager, instance);
if (Set.of("1.21.4", "1.21.5", "1.21.6", "1.21.7", "1.21.8", "1.21.9", "1.21.10", "1.21.11").contains(Bukkit.getMinecraftVersion())) {
if (Set.of("1.21.4", "1.21.5", "1.21.6", "1.21.7", "1.21.8", "1.21.9", "1.21.10", "1.21.11 Release Candidate 2").contains(Bukkit.getMinecraftVersion())) {
getServer().getPluginManager().registerEvents(new PlayerLoadedListener(), this);
}

View File

@@ -33,8 +33,8 @@ import org.incendo.cloud.parser.standard.EnumParser;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import java.util.Optional;
import java.util.Set;
import static org.incendo.cloud.exception.handling.ExceptionHandler.unwrappingHandler;
@@ -199,7 +199,7 @@ public final class CloudCommandManager {
annotationParser.parse(FancyNpcsDebugCMD.INSTANCE);
}
if (Set.of("1.20.5", "1.20.6", "1.21", "1.21.1", "1.21.2", "1.21.3", "1.21.4", "1.21.5", "1.21.6", "1.21.7", "1.21.8", "1.21.9", "1.21.10", "1.21.11").contains(Bukkit.getMinecraftVersion())) {
if (Set.of("1.20.5", "1.20.6", "1.21", "1.21.1", "1.21.2", "1.21.3", "1.21.4", "1.21.5", "1.21.6", "1.21.7", "1.21.8", "1.21.9", "1.21.10", "1.21.11 Release Candidate 2").contains(Bukkit.getMinecraftVersion())) {
annotationParser.parse(ScaleCMD.INSTANCE);
}

View File

@@ -1,5 +1,8 @@
# FancyVisuals
> [!IMPORTANT]
> FancyVisuals is not being actively developed anymore.
**Do not use this plugin in production! It is still in development and may contain bugs and unfinished features.**
This is a plugin to customise most visual components of your minecraft server. This includes the scoreboard, tablist,

View File

@@ -37,7 +37,7 @@ dependencies {
implementation(project(":libraries:packets"))
implementation(project(":libraries:packets:packets-api"))
implementation(project(":libraries:config"))
compileOnly("de.oliver.FancyAnalytics:mc-api:0.1.11") // loaded in FancyVisualLoader
compileOnly("de.oliver.FancyAnalytics:mc-api:0.1.12") // loaded in FancyVisualLoader
compileOnly("de.oliver.FancyAnalytics:logger:0.0.8") // loaded in FancyVisualLoader
implementation("org.lushplugins:ChatColorHandler:6.0.0")

View File

@@ -16,7 +16,7 @@ public class FancyVisualsLoader implements PluginLoader {
MavenLibraryResolver resolver = new MavenLibraryResolver();
resolver.addRepository(new RemoteRepository.Builder("fancyinnovations", "default", "https://repo.fancyinnovations.com/releases").build());
// resolver.addRepository(new RemoteRepository.Builder("mavencentral", "default", "https://repo1.maven.org/maven2/").build());
resolver.addDependency(new Dependency(new DefaultArtifact("de.oliver.FancyAnalytics:mc-api:0.1.11"), "compile"));
resolver.addDependency(new Dependency(new DefaultArtifact("de.oliver.FancyAnalytics:mc-api:0.1.12"), "compile"));
resolver.addDependency(new Dependency(new DefaultArtifact("de.oliver.FancyAnalytics:logger:0.0.8"), "compile"));
classpathBuilder.addLibrary(resolver);

View File

@@ -48,7 +48,6 @@ include(":libraries:packets:implementations:1_21_9")
include(":libraries:packets:implementations:1_21_11")
include(":tools:deployment")
include(":tools:quick-e2e")
pluginManagement {

View File

@@ -1,61 +0,0 @@
plugins {
id("java")
id("maven-publish")
id("com.gradleup.shadow")
}
group = "de.oliver"
description = "Tool to deploy Minecraft plugins"
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
}
repositories {
mavenCentral()
maven("https://repo.papermc.io/repository/maven-public/")
maven("https://repo.fancyinnovations.com/releases")
}
dependencies {
implementation("dev.masecla:Modrinth4J:2.2.0")
implementation("com.google.code.gson:gson:2.13.1")
implementation("com.squareup.okhttp3:okhttp:4.12.0")
implementation("org.jetbrains:annotations:26.0.2")
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.4")
implementation("de.oliver.FancyAnalytics:logger:0.0.8")
}
tasks {
jar {
manifest {
attributes["Main-Class"] = "de.oliver.deployment.Main"
}
}
shadowJar {
archiveClassifier.set("")
}
compileJava {
options.encoding = Charsets.UTF_8.name() // We want UTF-8 for everything
// Set the release flag. This configures what version bytecode the compiler will emit, as well as what JDK APIs are usable.
// See https://openjdk.java.net/jeps/247 for more information.
options.release.set(21)
}
java {
withSourcesJar()
withJavadocJar()
}
javadoc {
options.encoding = Charsets.UTF_8.name() // We want UTF-8 for everything
}
processResources {
filteringCharset = Charsets.UTF_8.name() // We want UTF-8 for everything
}
}

View File

@@ -1,28 +0,0 @@
{
"project_name": "FancyHolograms",
"project_id": "fancyholograms",
"plugin_jar_path": "../../../plugins/fancyholograms/build/libs/FancyHolograms-*.jar",
"changelog_path": "../../../plugins/fancyholograms/CHANGELOG.md",
"version": "3.0.0",
"supported_versions":[
"1.19.4",
"1.20",
"1.20.1",
"1.20.2",
"1.20.3",
"1.20.4",
"1.20.5",
"1.20.6",
"1.21",
"1.21.1",
"1.21.2",
"1.21.3",
"1.21.4"
],
"channel": "release",
"loaders": [
"paper",
"folia"
],
"featured": true
}

View File

@@ -1,29 +0,0 @@
package de.oliver.deployment;
import com.google.gson.annotations.SerializedName;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public record Configuration(
@SerializedName("project_name") String projectName,
@SerializedName("project_id") String projectID,
@SerializedName("plugin_jar_path") String pluginJarPath,
@SerializedName("changelog_path") String changeLogPath,
@SerializedName("version_path") String versionPath,
@SerializedName("supported_versions") String[] supportedVersions,
String channel,
@SerializedName("loaders") String[] loaders,
boolean featured
) {
public String readVersion() {
try {
return Files.readString(Path.of(versionPath));
} catch (IOException e) {
return "unknown";
}
}
}

View File

@@ -1,81 +0,0 @@
package de.oliver.deployment;
import com.google.gson.Gson;
import de.oliver.deployment.git.GitService;
import de.oliver.deployment.modrinth.ModrinthService;
import de.oliver.deployment.notification.DiscordWebhook;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
public class Main {
private static final Gson GSON = new Gson();
public static void main(String[] args) throws IOException {
if (args.length < 2) {
System.err.println("Usage: java -jar deployment.jar <platform> <config_file path> [send_notification]");
System.exit(1);
}
String platform = args[0];
String configFilePath = args[1];
String configData = Files.readString(Path.of(configFilePath));
Configuration configuration = GSON.fromJson(configData, Configuration.class);
boolean sendNotification = args.length > 2 && Boolean.parseBoolean(args[2]);
if (platform.equalsIgnoreCase("modrinth")) {
deployToModrinth(configuration);
}
if (sendNotification) {
sendDiscordNotification(configuration);
System.out.println("Deployment completed and notification sent.");
} else {
System.out.println("Deployment completed without sending notification.");
}
}
private static void deployToModrinth(Configuration configuration) {
String modrinthApiKey = System.getenv("MODRINTH_API_KEY");
ModrinthService modrinthService = new ModrinthService(modrinthApiKey);
try {
modrinthService.deployPlugin(configuration);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void sendDiscordNotification(Configuration configuration) {
String discordWebhookUrl = System.getenv("DISCORD_WEBHOOK_URL");
if (discordWebhookUrl != null) {
DiscordWebhook.Data data = new DiscordWebhook.Data("Deployment completed", List.of(
new DiscordWebhook.Data.Embed(
"New version of " + configuration.projectName(),
"""
**Version:** %s
**Channel:** %s
**Commit:** [%s](https://github.com/FancyMcPlugins/fancyplugins/commit/%s)
**Download:** %s
""".formatted(
configuration.readVersion(),
configuration.channel(),
GitService.getCommitHash().substring(0, 7),
GitService.getCommitHash(),
"https://modrinth.com/plugin/" + configuration.projectName() + "/version/" + configuration.readVersion()),
0x00FF00
)
));
DiscordWebhook discordWebhook = new DiscordWebhook();
discordWebhook.sendWebhook(discordWebhookUrl, data);
} else {
System.out.println("Discord webhook URL not set. Skipping notification.");
}
}
}

View File

@@ -1,37 +0,0 @@
package de.oliver.deployment.git;
import java.io.IOException;
public class GitService {
public static String getCommitHash() {
ProcessBuilder processBuilder = new ProcessBuilder("git", "rev-parse", "HEAD");
processBuilder.redirectErrorStream(true);
processBuilder.directory(new java.io.File("."));
try {
Process process = processBuilder.start();
return new String(process.getInputStream().readAllBytes()).trim();
} catch (IOException e) {
e.printStackTrace();
}
return "unknown";
}
public static String getCommitMessage() {
ProcessBuilder processBuilder = new ProcessBuilder("git", "log", "-1", "--pretty=%B");
processBuilder.redirectErrorStream(true);
processBuilder.directory(new java.io.File("."));
try {
Process process = processBuilder.start();
return new String(process.getInputStream().readAllBytes()).trim();
} catch (IOException e) {
e.printStackTrace();
}
return "unknown";
}
}

View File

@@ -1,68 +0,0 @@
package de.oliver.deployment.modrinth;
import de.oliver.deployment.Configuration;
import de.oliver.deployment.git.GitService;
import masecla.modrinth4j.client.agent.UserAgent;
import masecla.modrinth4j.endpoints.version.CreateVersion;
import masecla.modrinth4j.main.ModrinthAPI;
import masecla.modrinth4j.model.version.ProjectVersion;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
public class ModrinthService {
private final ModrinthAPI api;
public ModrinthService(String apiKey) {
this.api = ModrinthAPI.rateLimited(
UserAgent.builder()
.authorUsername("Oliver")
.contact("oliver@fancyinnovations.com")
.build(),
apiKey
);
}
public void deployPlugin(Configuration config) throws IOException {
String changelog = Files.readString(Path.of(config.changeLogPath()));
changelog = changelog.replaceAll("%COMMIT_HASH%", GitService.getCommitHash());
changelog = changelog.replaceAll("%COMMIT_MESSAGE%", GitService.getCommitMessage());
String version = config.readVersion();
String pluginJarPath = config.pluginJarPath().replace("%VERSION%", version);
File pluginFile = new File(pluginJarPath);
InputStream pluginJarFileStream = Files.newInputStream(pluginFile.toPath());
CreateVersion.CreateVersionRequest request = new CreateVersion.CreateVersionRequest(
version,
version,
changelog,
new ArrayList<>(),
Arrays.asList(config.supportedVersions()),
ProjectVersion.VersionType.valueOf(config.channel()),
Arrays.asList(config.loaders()),
config.featured(),
config.projectID(),
pluginJarPath,
List.of(pluginFile.getName()),
List.of(pluginJarFileStream)
);
System.out.println("Creating version: " + request);
CompletableFuture<ProjectVersion> resp = api.versions().createProjectVersion(request);
ProjectVersion createdVersion = resp.join();
System.out.println("Version created: " + createdVersion);
}
}

View File

@@ -1,35 +0,0 @@
package de.oliver.deployment.notification;
import de.oliver.fancyanalytics.sdk.utils.HttpRequest;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.http.HttpResponse;
import java.util.List;
public class DiscordWebhook {
public void sendWebhook(String webhookUrl, Data data) {
HttpRequest request = new HttpRequest(webhookUrl)
.withMethod("POST")
.withHeader("Content-Type", "application/json")
.withBody(data);
try {
HttpResponse<String> resp = request.send();
if (resp.statusCode() != 204) {
System.out.println("Failed to send message with discord webhook: " + resp.body());
}
} catch (URISyntaxException | IOException | InterruptedException e) {
System.out.println("Failed to send webhook");
e.printStackTrace();
}
}
public record Data(String content, List<Embed> embeds) {
public record Embed(String title, String description, int color) {
}
}
}

View File

@@ -22,7 +22,7 @@ dependencies {
implementation("com.squareup.okhttp3:okhttp:4.12.0")
implementation("org.jetbrains:annotations:26.0.2")
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.4")
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.5")
implementation("de.oliver.FancyAnalytics:logger:0.0.8")
}