14 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
54 changed files with 454 additions and 733 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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) - Packets: packet handling library (also called FancySitula)
**Tools:** **Tools:**
- Deployment: deploy plugins to platforms like modrinth
- Quick E2E: generate a quick end-to-end environment for testing - Quick E2E: generate a quick end-to-end environment for testing
## Usage ## Usage

View File

@@ -15,12 +15,5 @@ allprojects {
maven("https://repo.papermc.io/repository/maven-public/") maven("https://repo.papermc.io/repository/maven-public/")
maven("https://repo.fancyinnovations.com/releases") maven("https://repo.fancyinnovations.com/releases")
maven(url = "https://jitpack.io") 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

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

View File

@@ -12,7 +12,8 @@ FancyCore has its own event system that allows you to listen to various events t
Example for registering a listener for the `PlayerReportedEvent`: Example for registering a listener for the `PlayerReportedEvent`:
```java ```java
EventService eventService = FancyCore.get().getEventService(); EventService eventService = EventService.get();
eventService.registerListener(PlayerReportedEvent.class, (event) -> { eventService.registerListener(PlayerReportedEvent.class, (event) -> {
System.out.println("PlayerReportedEvent fired with report id: " + event.getReport().id()); System.out.println("PlayerReportedEvent fired with report id: " + event.getReport().id());
}); });

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

@@ -12,7 +12,7 @@ FancyCore provides a comprehensive Punishment API that allows you to manage play
With the Punishment Service, you can easily issue various types of punishments to players. Below are examples of how to use 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 ```java
PunishmentService punishmentService = FancyCore.get().getPunishmentService(); PunishmentService punishmentService = PunishmentService.get();
punishmentService.warnPlayer(player, staff, "reason", duration); punishmentService.warnPlayer(player, staff, "reason", duration);

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

@@ -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"] ## v2.8.0 [!badge variant="info" text="2025-10-10"]
- Added support for 1.21.9 and 1.21.10 - Added support for 1.21.9 and 1.21.10

View File

@@ -6,7 +6,7 @@ plugins {
paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.MOJANG_PRODUCTION
dependencies { 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")) compileOnly(project(":libraries:packets:packets-api"))
testImplementation(project(":libraries:packets")) testImplementation(project(":libraries:packets"))

View File

@@ -7,7 +7,7 @@ import java.util.List;
public enum ServerVersion { 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_10("1.21.10", 773),
v1_21_9("1.21.9", 773), v1_21_9("1.21.9", 773),
v1_21_8("1.21.8", 772), 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:common"))
implementation(project(":libraries:jdb")) implementation(project(":libraries:jdb"))
implementation(project(":libraries:config")) implementation(project(":libraries:config"))
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.4") implementation("de.oliver.FancyAnalytics:java-sdk:0.0.5")
implementation("de.oliver.FancyAnalytics:mc-api:0.1.11") implementation("de.oliver.FancyAnalytics:mc-api:0.1.12")
implementation("de.oliver.FancyAnalytics:logger:0.0.8") implementation("de.oliver.FancyAnalytics:logger:0.0.8")
compileOnly(project(":plugins:fancynpcs:fn-api")) compileOnly(project(":plugins:fancynpcs:fn-api"))
@@ -85,14 +85,14 @@ paper {
tasks { tasks {
runServer { runServer {
minecraftVersion("1.21.10") minecraftVersion("1.21.11-rc2")
downloadPlugins { downloadPlugins {
modrinth("fancynpcs", "2.8.0") // modrinth("fancynpcs", "2.8.0")
// hangar("ViaVersion", "5.3.2") // hangar("ViaVersion", "5.3.2")
// hangar("ViaBackwards", "5.3.2") // hangar("ViaBackwards", "5.3.2")
// modrinth("multiverse-core", "4.3.11") // 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", "project_name": "FancyDialogs",
"project_id": "Sx6YwpnK", "plugin_jar_path": "/plugins/fancydialogs/build/libs/FancyDialogs-%VERSION%.jar",
"plugin_jar_path": "../../../../plugins/fancydialogs/build/libs/FancyDialogs-%VERSION%.jar", "changelog_path": "/plugins/fancydialogs/CHANGELOG.md",
"changelog_path": "../../../../plugins/fancydialogs/CHANGELOG.md", "version_path": "/plugins/fancydialogs/VERSION",
"version_path": "../../../../plugins/fancydialogs/VERSION", "modrinth": {
"supported_versions": [ "project_id": "Sx6YwpnK",
"1.21.6", "supported_versions": [
"1.21.7", "1.21.6",
"1.21.8", "1.21.7",
"1.21.9", "1.21.8",
"1.21.10" "1.21.9",
], "1.21.10",
"channel": "RELEASE", "1.21.11"
"loaders": [ ],
"paper", "channel": "release",
"folia" "loaders": [
], "paper",
"featured": true "folia"
],
"featured": true
}
} }

View File

@@ -1,20 +1,23 @@
{ {
"project_name": "FancyDialogs", "project_name": "FancyDialogs",
"project_id": "Sx6YwpnK", "plugin_jar_path": "/plugins/fancydialogs/build/libs/FancyDialogs-%VERSION%.jar",
"plugin_jar_path": "../../../../plugins/fancydialogs/build/libs/FancyDialogs-%VERSION%.jar", "changelog_path": "/plugins/fancydialogs/CHANGELOG-SNAPSHOT.md",
"changelog_path": "../../../../plugins/fancydialogs/CHANGELOG-SNAPSHOT.md", "version_path": "/plugins/fancydialogs/VERSION",
"version_path": "../../../../plugins/fancydialogs/VERSION", "modrinth": {
"supported_versions": [ "project_id": "Sx6YwpnK",
"1.21.6", "supported_versions": [
"1.21.7", "1.21.6",
"1.21.8", "1.21.7",
"1.21.9", "1.21.8",
"1.21.10" "1.21.9",
], "1.21.10",
"channel": "BETA", "1.21.11-rc2"
"loaders": [ ],
"paper", "channel": "beta",
"folia" "loaders": [
], "paper",
"featured": false "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:common"))
implementation(project(":libraries:jdb")) implementation(project(":libraries:jdb"))
implementation(project(":libraries:config")) implementation(project(":libraries:config"))
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.4") implementation("de.oliver.FancyAnalytics:java-sdk:0.0.5")
implementation("de.oliver.FancyAnalytics:mc-api:0.1.11") implementation("de.oliver.FancyAnalytics:mc-api:0.1.12")
implementation("de.oliver.FancyAnalytics:logger:0.0.8") implementation("de.oliver.FancyAnalytics:logger:0.0.8")
compileOnly(project(":plugins:fancynpcs:fn-api")) compileOnly(project(":plugins:fancynpcs:fn-api"))
@@ -90,7 +90,7 @@ paper {
tasks { tasks {
runServer { runServer {
minecraftVersion("1.21.10") minecraftVersion("1.21.11-rc2")
downloadPlugins { downloadPlugins {
// modrinth("fancynpcs", "2.5.2") // modrinth("fancynpcs", "2.5.2")

View File

@@ -1,34 +1,36 @@
{ {
"project_name": "FancyHolograms", "project_name": "FancyHolograms",
"project_id": "5QNgOj66", "plugin_jar_path": "/plugins/fancyholograms-v2/build/libs/FancyHolograms-%VERSION%.jar",
"plugin_jar_path": "../../../../plugins/fancyholograms-v2/build/libs/FancyHolograms-%VERSION%.jar", "changelog_path": "/plugins/fancyholograms-v2/CHANGELOG.md",
"changelog_path": "../../../../plugins/fancyholograms-v2/CHANGELOG.md", "version_path": "/plugins/fancyholograms-v2/VERSION",
"version_path": "../../../../plugins/fancyholograms-v2/VERSION", "modrinth": {
"supported_versions": [ "project_id": "5QNgOj66",
"1.20", "supported_versions": [
"1.20.1", "1.20",
"1.20.2", "1.20.1",
"1.20.3", "1.20.2",
"1.20.4", "1.20.3",
"1.20.5", "1.20.4",
"1.20.6", "1.20.5",
"1.21", "1.20.6",
"1.21.1", "1.21",
"1.21.2", "1.21.1",
"1.21.3", "1.21.2",
"1.21.4", "1.21.3",
"1.21.5", "1.21.4",
"1.21.6", "1.21.5",
"1.21.7", "1.21.6",
"1.21.8", "1.21.7",
"1.21.9", "1.21.8",
"1.21.10", "1.21.9",
"1.21.11" "1.21.10",
], "1.21.11"
"channel": "RELEASE", ],
"loaders": [ "channel": "release",
"paper", "loaders": [
"folia" "paper",
], "folia"
"featured": true ],
"featured": true
}
} }

View File

@@ -1,33 +1,36 @@
{ {
"project_name": "FancyHolograms", "project_name": "FancyHolograms",
"project_id": "5QNgOj66", "plugin_jar_path": "/plugins/fancyholograms-v2/build/libs/FancyHolograms-%VERSION%.jar",
"plugin_jar_path": "../../../../plugins/fancyholograms-v2/build/libs/FancyHolograms-%VERSION%.jar", "changelog_path": "/plugins/fancyholograms-v2/CHANGELOG-SNAPSHOT.md",
"changelog_path": "../../../../plugins/fancyholograms-v2/CHANGELOG-SNAPSHOT.md", "version_path": "/plugins/fancyholograms-v2/VERSION",
"version_path": "../../../../plugins/fancyholograms-v2/VERSION", "modrinth": {
"supported_versions": [ "project_id": "5QNgOj66",
"1.20", "supported_versions": [
"1.20.1", "1.20",
"1.20.2", "1.20.1",
"1.20.3", "1.20.2",
"1.20.4", "1.20.3",
"1.20.5", "1.20.4",
"1.20.6", "1.20.5",
"1.21", "1.20.6",
"1.21.1", "1.21",
"1.21.2", "1.21.1",
"1.21.3", "1.21.2",
"1.21.4", "1.21.3",
"1.21.5", "1.21.4",
"1.21.6", "1.21.5",
"1.21.7", "1.21.6",
"1.21.8", "1.21.7",
"1.21.9", "1.21.8",
"1.21.10" "1.21.9",
], "1.21.10",
"channel": "BETA", "1.21.11-rc2"
"loaders": [ ],
"paper", "channel": "beta",
"folia" "loaders": [
], "paper",
"featured": false "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:config"))
implementation(project(":libraries:packets")) implementation(project(":libraries:packets"))
implementation(project(":libraries:packets:packets-api")) implementation(project(":libraries:packets:packets-api"))
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.4") implementation("de.oliver.FancyAnalytics:java-sdk:0.0.5")
implementation("de.oliver.FancyAnalytics:mc-api:0.1.11") implementation("de.oliver.FancyAnalytics:mc-api:0.1.12")
implementation("de.oliver.FancyAnalytics:logger:0.0.8") implementation("de.oliver.FancyAnalytics:logger:0.0.8")
implementation("io.github.revxrsal:lamp.common:4.0.0-rc.12") implementation("io.github.revxrsal:lamp.common:4.0.0-rc.12")
@@ -96,7 +96,7 @@ paper {
tasks { tasks {
runServer { runServer {
minecraftVersion("1.21.10") minecraftVersion("1.21.11-rc2")
downloadPlugins { downloadPlugins {
modrinth("fancynpcs", "2.7.0") modrinth("fancynpcs", "2.7.0")

View File

@@ -1,29 +1,31 @@
{ {
"project_name": "FancyHolograms", "project_name": "FancyHolograms",
"project_id": "5QNgOj66", "plugin_jar_path": "/plugins/fancyholograms/build/libs/FancyHolograms-%VERSION%.jar",
"plugin_jar_path": "../../../../plugins/fancyholograms/build/libs/FancyHolograms-%VERSION%.jar", "changelog_path": "/plugins/fancyholograms/CHANGELOG.md",
"changelog_path": "../../../../plugins/fancyholograms/CHANGELOG.md", "version_path": "/plugins/fancyholograms/VERSION",
"version_path": "../../../../plugins/fancyholograms/VERSION", "modrinth": {
"supported_versions": [ "project_id": "5QNgOj66",
"1.20.5", "supported_versions": [
"1.20.6", "1.20.5",
"1.21", "1.20.6",
"1.21.1", "1.21",
"1.21.2", "1.21.1",
"1.21.3", "1.21.2",
"1.21.4", "1.21.3",
"1.21.5", "1.21.4",
"1.21.6", "1.21.5",
"1.21.7", "1.21.6",
"1.21.8", "1.21.7",
"1.21.9", "1.21.8",
"1.21.10", "1.21.9",
"1.21.11" "1.21.10",
], "1.21.11"
"channel": "RELEASE", ],
"loaders": [ "channel": "release",
"paper", "loaders": [
"folia" "paper",
], "folia"
"featured": true ],
"featured": true
}
} }

View File

@@ -1,28 +1,31 @@
{ {
"project_name": "FancyHolograms", "project_name": "FancyHolograms",
"project_id": "5QNgOj66", "plugin_jar_path": "/plugins/fancyholograms/build/libs/FancyHolograms-%VERSION%.jar",
"plugin_jar_path": "../../../../plugins/fancyholograms/build/libs/FancyHolograms-%VERSION%.jar", "changelog_path": "/plugins/fancyholograms/CHANGELOG-SNAPSHOT.md",
"changelog_path": "../../../../plugins/fancyholograms/CHANGELOG-SNAPSHOT.md", "version_path": "/plugins/fancyholograms/VERSION",
"version_path": "../../../../plugins/fancyholograms/VERSION", "modrinth": {
"supported_versions": [ "project_id": "5QNgOj66",
"1.20.5", "supported_versions": [
"1.20.6", "1.20.5",
"1.21", "1.20.6",
"1.21.1", "1.21",
"1.21.2", "1.21.1",
"1.21.3", "1.21.2",
"1.21.4", "1.21.3",
"1.21.5", "1.21.4",
"1.21.6", "1.21.5",
"1.21.7", "1.21.6",
"1.21.8", "1.21.7",
"1.21.9", "1.21.8",
"1.21.10" "1.21.9",
], "1.21.10",
"channel": "ALPHA", "1.21.11-rc2"
"loaders": [ ],
"paper", "channel": "alpha",
"folia" "loaders": [
], "paper",
"featured": false "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 - Fixed skin mirroring for 1.21.9
- Added inverted permission check for `need_permission` action (use prefix `!` to invert) - Added inverted permission check for `need_permission` action (use prefix `!` to invert)
- Added `/npc rotate <npc> <yaw> <pitch>` command to set NPC orientation - 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:plugin-tests"))
implementation(project(":libraries:config")) implementation(project(":libraries:config"))
compileOnly("org.lushplugins:ChatColorHandler:6.0.0") compileOnly("org.lushplugins:ChatColorHandler:6.0.0")
implementation("de.oliver.FancyAnalytics:java-sdk:0.0.4") implementation("de.oliver.FancyAnalytics:java-sdk:0.0.5")
implementation("de.oliver.FancyAnalytics:mc-api:0.1.11") implementation("de.oliver.FancyAnalytics:mc-api:0.1.12")
implementation("de.oliver.FancyAnalytics:logger:0.0.8") implementation("de.oliver.FancyAnalytics:logger:0.0.8")
implementation("org.incendo:cloud-core:2.0.0") implementation("org.incendo:cloud-core:2.0.0")
implementation("org.incendo:cloud-paper:2.0.0-beta.13") implementation("org.incendo:cloud-paper:2.0.0-beta.13")
@@ -95,7 +95,7 @@ paper {
tasks { tasks {
runServer { runServer {
minecraftVersion("1.21.10") minecraftVersion("1.21.11-rc2")
downloadPlugins { downloadPlugins {
// hangar("ViaVersion", "5.4.0") // hangar("ViaVersion", "5.4.0")

View File

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

View File

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

View File

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

View File

@@ -1,34 +1,36 @@
{ {
"project_name": "FancyNpcs", "project_name": "FancyNpcs",
"project_id": "EeyAn23L", "plugin_jar_path": "/plugins/fancynpcs/build/libs/FancyNpcs-%VERSION%.jar",
"plugin_jar_path": "../../../../plugins/fancynpcs/build/libs/FancyNpcs-%VERSION%.jar", "changelog_path": "/plugins/fancynpcs/CHANGELOG.md",
"changelog_path": "../../../../plugins/fancynpcs/CHANGELOG.md", "version_path": "/plugins/fancynpcs/VERSION",
"version_path": "../../../../plugins/fancynpcs/VERSION", "modrinth": {
"supported_versions": [ "project_id": "EeyAn23L",
"1.20", "supported_versions": [
"1.20.1", "1.20",
"1.20.2", "1.20.1",
"1.20.3", "1.20.2",
"1.20.4", "1.20.3",
"1.20.5", "1.20.4",
"1.20.6", "1.20.5",
"1.21", "1.20.6",
"1.21.1", "1.21",
"1.21.2", "1.21.1",
"1.21.3", "1.21.2",
"1.21.4", "1.21.3",
"1.21.5", "1.21.4",
"1.21.6", "1.21.5",
"1.21.7", "1.21.6",
"1.21.8", "1.21.7",
"1.21.9", "1.21.8",
"1.21.10", "1.21.9",
"1.21.11" "1.21.10",
], "1.21.11"
"channel": "RELEASE", ],
"loaders": [ "channel": "release",
"paper", "loaders": [
"folia" "paper",
], "folia"
"featured": true ],
"featured": true
}
} }

View File

@@ -1,33 +1,36 @@
{ {
"project_name": "FancyNpcs", "project_name": "FancyNpcs",
"project_id": "EeyAn23L", "plugin_jar_path": "/plugins/fancynpcs/build/libs/FancyNpcs-%VERSION%.jar",
"plugin_jar_path": "../../../../plugins/fancynpcs/build/libs/FancyNpcs-%VERSION%.jar", "changelog_path": "/plugins/fancynpcs/CHANGELOG-SNAPSHOT.md",
"changelog_path": "../../../../plugins/fancynpcs/CHANGELOG-SNAPSHOT.md", "version_path": "/plugins/fancynpcs/VERSION",
"version_path": "../../../../plugins/fancynpcs/VERSION", "modrinth": {
"supported_versions": [ "project_id": "EeyAn23L",
"1.20", "supported_versions": [
"1.20.1", "1.20",
"1.20.2", "1.20.1",
"1.20.3", "1.20.2",
"1.20.4", "1.20.3",
"1.20.5", "1.20.4",
"1.20.6", "1.20.5",
"1.21", "1.20.6",
"1.21.1", "1.21",
"1.21.2", "1.21.1",
"1.21.3", "1.21.2",
"1.21.4", "1.21.3",
"1.21.5", "1.21.4",
"1.21.6", "1.21.5",
"1.21.7", "1.21.6",
"1.21.8", "1.21.7",
"1.21.9", "1.21.8",
"1.21.10" "1.21.9",
], "1.21.10",
"channel": "BETA", "1.21.11-rc2"
"loaders": [ ],
"paper", "channel": "beta",
"folia" "loaders": [
], "paper",
"featured": false "folia"
],
"featured": false
}
} }

View File

@@ -31,7 +31,7 @@ public class AttributeManagerImpl implements AttributeManager {
private void init() { private void init() {
String mcVersion = Bukkit.getMinecraftVersion(); String mcVersion = Bukkit.getMinecraftVersion();
switch (mcVersion) { 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.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.6", "1.21.7", "1.21.8" -> attributes = Attributes_1_21_6.getAllAttributes();
case "1.21.5" -> attributes = Attributes_1_21_5.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(); String mcVersion = Bukkit.getMinecraftVersion();
switch (mcVersion) { 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.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.6", "1.21.7", "1.21.8" -> npcAdapter = Npc_1_21_6::new;
case "1.21.5" -> npcAdapter = Npc_1_21_5::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 PlayerTeleportListener(), instance);
pluginManager.registerEvents(new PlayerChangedWorldListener(), instance); pluginManager.registerEvents(new PlayerChangedWorldListener(), instance);
pluginManager.registerEvents(skinManager, 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); 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.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.Set;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import static org.incendo.cloud.exception.handling.ExceptionHandler.unwrappingHandler; import static org.incendo.cloud.exception.handling.ExceptionHandler.unwrappingHandler;
@@ -199,7 +199,7 @@ public final class CloudCommandManager {
annotationParser.parse(FancyNpcsDebugCMD.INSTANCE); 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); annotationParser.parse(ScaleCMD.INSTANCE);
} }

View File

@@ -1,5 +1,8 @@
# FancyVisuals # 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.** **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, 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"))
implementation(project(":libraries:packets:packets-api")) implementation(project(":libraries:packets:packets-api"))
implementation(project(":libraries:config")) 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 compileOnly("de.oliver.FancyAnalytics:logger:0.0.8") // loaded in FancyVisualLoader
implementation("org.lushplugins:ChatColorHandler:6.0.0") implementation("org.lushplugins:ChatColorHandler:6.0.0")

View File

@@ -16,7 +16,7 @@ public class FancyVisualsLoader implements PluginLoader {
MavenLibraryResolver resolver = new MavenLibraryResolver(); MavenLibraryResolver resolver = new MavenLibraryResolver();
resolver.addRepository(new RemoteRepository.Builder("fancyinnovations", "default", "https://repo.fancyinnovations.com/releases").build()); 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.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")); resolver.addDependency(new Dependency(new DefaultArtifact("de.oliver.FancyAnalytics:logger:0.0.8"), "compile"));
classpathBuilder.addLibrary(resolver); classpathBuilder.addLibrary(resolver);

View File

@@ -48,7 +48,6 @@ include(":libraries:packets:implementations:1_21_9")
include(":libraries:packets:implementations:1_21_11") include(":libraries:packets:implementations:1_21_11")
include(":tools:deployment")
include(":tools:quick-e2e") include(":tools:quick-e2e")
pluginManagement { 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("com.squareup.okhttp3:okhttp:4.12.0")
implementation("org.jetbrains:annotations:26.0.2") 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") implementation("de.oliver.FancyAnalytics:logger:0.0.8")
} }