mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
Compare commits
No commits in common. "v1.x.x" and "v1.7.1" have entirely different histories.
260 changed files with 2534 additions and 14610 deletions
201
.github/workflows/gradle.yml
vendored
201
.github/workflows/gradle.yml
vendored
|
|
@ -9,155 +9,74 @@ name: Java CI with Gradle
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ "v1.x.x", "v2.x.x" ]
|
branches: [ "master" ]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ "v1.x.x", "v2.x.x" ]
|
branches: [ "master" ]
|
||||||
release:
|
|
||||||
types: [published]
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Set up JDKs
|
||||||
|
uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
java-version: |
|
||||||
|
16
|
||||||
|
17
|
||||||
|
20
|
||||||
|
21
|
||||||
|
distribution: 'temurin'
|
||||||
|
cache: 'gradle'
|
||||||
|
|
||||||
|
# Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies.
|
||||||
|
# See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
|
||||||
|
- name: Setup Gradle
|
||||||
|
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
|
||||||
|
|
||||||
|
- name: Make gradlew executable
|
||||||
|
run: chmod +x ./gradlew
|
||||||
|
- name: Build with Gradle Wrapper
|
||||||
|
run: ./gradlew build
|
||||||
|
|
||||||
|
- name: Summarize tests results
|
||||||
|
uses: jeantessier/test-summary-action@v1
|
||||||
|
if: ${{ always() }}
|
||||||
|
|
||||||
|
# NOTE: The Gradle Wrapper is the default and recommended way to run Gradle (https://docs.gradle.org/current/userguide/gradle_wrapper.html).
|
||||||
|
# If your project does not have the Gradle Wrapper configured, you can use the following configuration to run Gradle with a specified version.
|
||||||
|
#
|
||||||
|
# - name: Setup Gradle
|
||||||
|
# uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
|
||||||
|
# with:
|
||||||
|
# gradle-version: '8.9'
|
||||||
|
#
|
||||||
|
# - name: Build with Gradle 8.9
|
||||||
|
# run: gradle build
|
||||||
|
|
||||||
|
dependency-submission:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
env:
|
|
||||||
MODRINTH_VERSIONS: '["1.18.x", "1.19.x", "1.20.x", "1.21.x", "26.1.x", "26.2.x"]'
|
|
||||||
MODRINTH_PLATFORMS: '["spigot", "paper", "purpur", "folia"]'
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Set up JDKs
|
- name: Set up JDKs
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v4
|
||||||
with:
|
with:
|
||||||
java-version: |
|
distribution: 'temurin'
|
||||||
|
java-version: |
|
||||||
|
16
|
||||||
|
17
|
||||||
|
20
|
||||||
21
|
21
|
||||||
distribution: 'temurin'
|
|
||||||
cache: gradle
|
|
||||||
|
|
||||||
- name: Cache Gradle root and wrapper
|
# Generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies.
|
||||||
uses: actions/cache@v3
|
# See: https://github.com/gradle/actions/blob/main/dependency-submission/README.md
|
||||||
with:
|
- name: Generate and submit dependency graph
|
||||||
path: |
|
uses: gradle/actions/dependency-submission@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
|
||||||
~/.gradle/caches
|
|
||||||
~/.gradle/wrapper
|
|
||||||
key: gradle-root-${{ runner.os }}-${{ hashFiles('build.gradle*') }}
|
|
||||||
restore-keys: gradle-root-${{ runner.os }}-
|
|
||||||
|
|
||||||
# Setup paperweight cache
|
|
||||||
- name: Cache paperweight
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
./nms/*/.gradle/caches/paperweight
|
|
||||||
key: paperweight-submodules-${{ runner.os }}-${{ hashFiles('nms/*/build.gradle*') }}
|
|
||||||
restore-keys: |
|
|
||||||
paperweight-submodules-${{ runner.os }}-
|
|
||||||
|
|
||||||
# Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies.
|
|
||||||
# See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
|
|
||||||
- name: Setup Gradle
|
|
||||||
uses: gradle/actions/setup-gradle@v5
|
|
||||||
|
|
||||||
- name: Make gradlew executable
|
|
||||||
run: chmod +x ./gradlew
|
|
||||||
|
|
||||||
- name: Get small commit hash
|
|
||||||
if: ${{ github.event_name != 'release' && success() }}
|
|
||||||
run: echo "SMALL_COMMIT_HASH=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Build with Gradle Wrapper
|
|
||||||
run: ./gradlew build --parallel --stacktrace
|
|
||||||
|
|
||||||
# only submit dependency on push
|
|
||||||
- name: Generate and submit dependency graph
|
|
||||||
uses: gradle/actions/dependency-submission@v4
|
|
||||||
if: ${{ github.event_name == 'push' && success() }}
|
|
||||||
continue-on-error: true
|
|
||||||
|
|
||||||
# Get the names of the online and offline jars
|
|
||||||
# grep -v "offline" to exclude offline jar as the regex would catch it otherwise
|
|
||||||
- name: Get file name for jars
|
|
||||||
run: |
|
|
||||||
ONLINE_JAR_PATH=$(ls build/libs/CustomAnvil-*.jar | grep -v "offline")
|
|
||||||
OFFLINE_JAR_PATH=$(ls build/libs/CustomAnvil-*-offline.jar)
|
|
||||||
|
|
||||||
echo "ONLINE_JAR_NAME=$(basename $ONLINE_JAR_PATH)" >> $GITHUB_ENV
|
|
||||||
echo "OFFLINE_JAR_NAME=$(basename $OFFLINE_JAR_PATH)" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# upload the named jars as artifact
|
|
||||||
- name: Upload online JAR artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: CustomAnvil.jar
|
|
||||||
path: build/libs/${{ env.ONLINE_JAR_NAME }}
|
|
||||||
|
|
||||||
- name: Upload offline JAR file
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: CustomAnvil-offline.jar
|
|
||||||
path: build/libs/${{ env.OFFLINE_JAR_NAME }}
|
|
||||||
|
|
||||||
- name: Summarize tests results
|
|
||||||
uses: jeantessier/test-summary-action@v1
|
|
||||||
if: ${{ always() }}
|
|
||||||
|
|
||||||
# upload the jar to release
|
|
||||||
- name: Upload jar to release
|
|
||||||
if: ${{ github.event_name == 'release' && success() }}
|
|
||||||
uses: softprops/action-gh-release@v2
|
|
||||||
with:
|
|
||||||
files: |
|
|
||||||
build/libs/${{ env.ONLINE_JAR_NAME }}
|
|
||||||
build/libs/${{ env.OFFLINE_JAR_NAME }}
|
|
||||||
|
|
||||||
- name: Hangar release
|
|
||||||
if: ${{ (github.event_name != 'release' || github.event_name != 'push') && github.repository_owner == 'alexcrea' && success() }}
|
|
||||||
env:
|
|
||||||
HANGAR_API_TOKEN: ${{ secrets.HANGAR_API_TOKEN }}
|
|
||||||
RELEASE_CHANGELOG: ${{ github.event.release.body }}
|
|
||||||
run: ./gradlew publishAllPublicationsToHangar --stacktrace
|
|
||||||
|
|
||||||
- name: Modrinth publish alpha
|
|
||||||
if: ${{ github.event_name == 'push' && github.repository_owner == 'alexcrea' && success() }}
|
|
||||||
uses: cloudnode-pro/modrinth-publish@v2
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.MODRINTH_TOKEN }}
|
|
||||||
project: S75Ueiq9
|
|
||||||
name: dev-${{ env.SMALL_COMMIT_HASH }}
|
|
||||||
version: dev-${{ env.SMALL_COMMIT_HASH }}
|
|
||||||
loaders: ${{ env.MODRINTH_PLATFORMS }}
|
|
||||||
game-versions: ${{ env.MODRINTH_VERSIONS }}
|
|
||||||
channel: alpha
|
|
||||||
files: build/libs/${{ env.ONLINE_JAR_NAME }}
|
|
||||||
changelog: ${{ github.event.head_commit.message }}
|
|
||||||
|
|
||||||
- name: Modrinth publish release
|
|
||||||
if: ${{ github.event_name == 'release' && github.repository_owner == 'alexcrea' && success() }}
|
|
||||||
uses: cloudnode-pro/modrinth-publish@v2
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.MODRINTH_TOKEN }}
|
|
||||||
project: S75Ueiq9
|
|
||||||
name: ${{ github.event.release.name }}
|
|
||||||
version: ${{ github.event.release.tag_name }}${{ github.event.release.prerelease && '-pre' || '' }}
|
|
||||||
loaders: ${{ env.MODRINTH_PLATFORMS }}
|
|
||||||
game-versions: ${{ env.MODRINTH_VERSIONS }}
|
|
||||||
channel: ${{ github.event.release.prerelease == false && 'release' || 'beta' }}
|
|
||||||
files: build/libs/${{ env.ONLINE_JAR_NAME }}
|
|
||||||
changelog: ${{ github.event.release.body }}
|
|
||||||
|
|
||||||
- name: Send release note to discord
|
|
||||||
if: ${{ github.event_name == 'release' && github.repository_owner == 'alexcrea' && success() }}
|
|
||||||
uses: tsickert/discord-webhook@v7.0.0
|
|
||||||
with:
|
|
||||||
webhook-url: ${{ secrets.RELEASE_WEBHOOK_URL }}
|
|
||||||
content: |
|
|
||||||
${{ github.event.release.prerelease == false && '<@&1338546156325568642>' || '<@&1352296092989001768>' }}
|
|
||||||
# New ${{ github.event.release.prerelease && 'beta ' || '' }}version of custom anvil ! <:CustomAnvil:1262550667986342001>([Modrinth](https://modrinth.com/plugin/customanvil), [Hangar](https://hangar.papermc.io/alexcrea/CustomAnvil) and [GitHub](${{ github.event.release.html_url }}) links)
|
|
||||||
-# note: automated release. spigot is not uploaded yet.
|
|
||||||
|
|
||||||
${{ github.event.release.body }}
|
|
||||||
|
|
|
||||||
13
.gitignore
vendored
13
.gitignore
vendored
|
|
@ -4,19 +4,8 @@
|
||||||
/out/
|
/out/
|
||||||
.lastDeploymentsId
|
.lastDeploymentsId
|
||||||
|
|
||||||
#nms & impl submodule build directory ignored
|
#nms submodule build directory ignored
|
||||||
/nms/build
|
/nms/build
|
||||||
/nms/.gradle
|
/nms/.gradle
|
||||||
/nms/*/build
|
/nms/*/build
|
||||||
/nms/*/.gradle
|
/nms/*/.gradle
|
||||||
/impl/build
|
|
||||||
/impl/.gradle
|
|
||||||
/impl/*/build
|
|
||||||
/impl/*/.gradle
|
|
||||||
|
|
||||||
# run folder
|
|
||||||
/run/
|
|
||||||
|
|
||||||
# other random folders
|
|
||||||
/htmlReport
|
|
||||||
/.kotlin/errors
|
|
||||||
|
|
|
||||||
BIN
.idea/icon.png
generated
BIN
.idea/icon.png
generated
Binary file not shown.
|
Before Width: | Height: | Size: 58 KiB |
|
|
@ -1,9 +0,0 @@
|
||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Server" type="JarApplication">
|
|
||||||
<option name="JAR_PATH" value="$PROJECT_DIR$/run/server.jar" />
|
|
||||||
<option name="PROGRAM_PARAMETERS" value="-nogui" />
|
|
||||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/run" />
|
|
||||||
<option name="ALTERNATIVE_JRE_PATH" />
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
||||||
### Bedrock issue
|
|
||||||
For server using geyser, bedrock player cannot use custom "recipes" in the anvil.
|
|
||||||
This is cannot be fixed on geyser or my side.
|
|
||||||
|
|
||||||
### Plugin Compatibility
|
|
||||||
Here is various plugins that had issues with CustomAnvil
|
|
||||||
where efforts was made for compatibility and should be working right:
|
|
||||||
|
|
||||||
some if not all of them are cool ! I recommend checking them out !
|
|
||||||
|
|
||||||
## Supported By CustomAnvil
|
|
||||||
These plugins have compatibility handled by custom anvil. seek help on custom anvil and do not bother these developers
|
|
||||||
|
|
||||||
#### Enchantment Plugins
|
|
||||||
- [ExcellentEnchants](https://www.spigotmc.org/resources/excellentenchants-%E2%AD%90-75-vanilla-like-enchantments.61693/) by NightExpress:
|
|
||||||
Use ExcellentEnchants item type \
|
|
||||||
Also use ExcellentEnchant max enchant limit
|
|
||||||
|
|
||||||
- [EcoEnchant](https://www.spigotmc.org/resources/ecoenchants-%E2%AD%95-250-enchantments-%E2%9C%85-create-custom-enchants-%E2%9C%A8-essentials-cmi-support.79573/) by Auxilor:
|
|
||||||
Need to use /anvilconfigreload or a server restart to add newly added enchantment.
|
|
||||||
Use EcoEnchant restriction system but new restriction can be added in custom anvil
|
|
||||||
|
|
||||||
- [Enchantment²](https://www.spigotmc.org/resources/enchants-squared-the-enchantsplus-rewrite-custom-enchantments-that-act-like-vanilla-ones.86747/) by Athlaeos:
|
|
||||||
Support by Custom Anvil but still experimental. Automatic configuration. Plugin is not actively developed anymore
|
|
||||||
|
|
||||||
- [SuperEnchants](https://modrinth.com/plugin/superenchants) by Aznos:
|
|
||||||
Use SuperEnchant restrictions system but new restriction can be added in custom anvil
|
|
||||||
|
|
||||||
|
|
||||||
#### Custom Items Plugins
|
|
||||||
Custom Items support is considered unstable. If you find issue please report it !
|
|
||||||
|
|
||||||
- [EcoItem](https://www.spigotmc.org/resources/30-sale%E2%8F%B3-ecoitems-%E2%AD%95-create-custom-items-%E2%9C%85-weapons-armors-tools-charms-%E2%9C%A8-item-levels-rarities.94601/) by Exanthiax:
|
|
||||||
May have some issue. but should partially work I hope
|
|
||||||
|
|
||||||
- [ItemAdder](https://www.spigotmc.org/resources/%E2%9C%A8itemsadder%E2%AD%90emotes-mobs-items-armors-hud-gui-emojis-blocks-wings-hats-liquids.73355/) by LoneDev:
|
|
||||||
Need to fix unit item not working completly correctly as in can't have twice same base item
|
|
||||||
|
|
||||||
#### Anvil Mechanics Plugins
|
|
||||||
- [Disenchantment](https://www.spigotmc.org/resources/disenchantment-1-21-1-1-20-6-new-book-splitting-mechanics.110741/) by H7KZ
|
|
||||||
Partially use Custom Anvil maximum XP settings (>= 6.1.5)
|
|
||||||
|
|
||||||
- [HavenBags](https://www.spigotmc.org/resources/havenbags-shulker-like-player-bound-bags-1-17-1-21-4.110420/) by hyperdefined
|
|
||||||
For bag upgrade and skin via anvil. (version >= 1.31.0)
|
|
||||||
|
|
||||||
- [AxPlayerWarp](https://modrinth.com/project/QDJHDKvi) by ArtillexStudios
|
|
||||||
For its anvil inventory usage
|
|
||||||
|
|
||||||
- [ToolsStats](https://modrinth.com/project/oBZj9E15) by Valorless
|
|
||||||
For token application using anvil
|
|
||||||
|
|
||||||
### Known Partially Incompatible
|
|
||||||
- [UberEnchant](https://modrinth.com/plugin/uberenchant) by coltonj96
|
|
||||||
Anvil handling as they are doing something similar to CustomAnvil.
|
|
||||||
It is by no mean there faults and I recommend checking them out especially if custom anvil do not work for your use case !
|
|
||||||
|
|
||||||
- [AdvencedEnchantments](https://ae.advancedplugins.net/) by Advanced Plugins
|
|
||||||
Paid plugin I do not own as I did not get commissioned for support.
|
|
||||||
may be able to use api but cannot test on my side
|
|
||||||
|
|
||||||
If you like Custom Anvil to support a specific plugin (custom enchant or anvil mechanic).
|
|
||||||
You can ask, but please note implementing compatibility will be considered
|
|
||||||
as low priority as I work for the plugin as an hobby on my free time for free.
|
|
||||||
34
CREDITS.md
34
CREDITS.md
|
|
@ -1,34 +0,0 @@
|
||||||
Thanks **DelilahEve** for making [Unsafe Enchants](https://github.com/DelilahEve/UnsafeEnchants). \
|
|
||||||
CustomAnvil was initially a fork of Unsafe Enchants where I wanted to add more and more and here we are now !
|
|
||||||
|
|
||||||
Thanks for all the contributors of bukkit, spigot, the paper team and the adventure API developers \
|
|
||||||
Thanks JetBrain for making IntelliJ
|
|
||||||
|
|
||||||
### Dependencies
|
|
||||||
These dependencies (or a modified version of) are used by custom anvil
|
|
||||||
- [IF](https://github.com/stefvanschie/IF) an inventory framework by stefvanschie
|
|
||||||
- [Mockbukkit](https://github.com/MockBukkit/MockBukkit) for unit testing
|
|
||||||
- [CentralPortalPlus](https://github.com/lalakii/central-portal-plus) by lalakii
|
|
||||||
- [test-summary-action](https://github.com/jeantessier/test-summary-action) by jeantessier
|
|
||||||
- [modrinth-publish](https://github.com/cloudnode-pro/modrinth-publish) by Zefir
|
|
||||||
- [discord-webhook](https://github.com/tsickert/discord-webhook) by tsickert
|
|
||||||
- Thanks [bstats](https://bstats.org/) for keeping me motivated
|
|
||||||
- And [FastStats](https://faststats.dev/) alternative to bstats in beta test
|
|
||||||
- [ModrinthUpdateChecker](https://github.com/Clickism/ModrinthUpdateChecker) by Clickism and thanks to the modrinth team
|
|
||||||
|
|
||||||
### Compatibility
|
|
||||||
Thanks to all the cool creator making the minecraft plugin's ecosystem works ! \
|
|
||||||
See [Compatibility list](https://github.com/alexcrea/CustomAnvil/blob/v1.x.x/COMPATIBILITY.md) for details
|
|
||||||
|
|
||||||
but especially, Big Thanks for H7KZ maker of [Disenchantment](https://github.com/H7KZ/Disenchantment)
|
|
||||||
|
|
||||||
### Special Thanks
|
|
||||||
|
|
||||||
Thanks for all the users trying my plugin for these niche use cases
|
|
||||||
, reporting issues and giving ideas !
|
|
||||||
|
|
||||||
Thanks coltonj96 for [UberEnchant](https://modrinth.com/plugin/uberenchant).
|
|
||||||
we may be incompatible with the anvil, but I do think it is a good alternative ! \
|
|
||||||
I wish one day to work on cross compatibiltiy \
|
|
||||||
* If custom anvil do not work well for you or your use case give it a try ! *
|
|
||||||
|
|
||||||
105
README.md
105
README.md
|
|
@ -1,11 +1,18 @@
|
||||||
# Custom Anvil
|
# Custom Anvil
|
||||||
|
|
||||||
**Custom Anvil** is a plugin that allows server administrators to customize every aspect of the anvil's mechanics.
|
**Custom Anvil** is a plugin that allows server administrators to customize every aspect of the anvil's mechanics.
|
||||||
|
It is expected to work on 1.18 to 1.21.3 minecraft servers running spigot or paper.
|
||||||
|
(the plugin support of 1.16.5 to 1.17.1 is experimental and may encounter issues)
|
||||||
|
|
||||||
|
**Custom Anvil** was previously named **Unsafe Enchants+**.
|
||||||
|
It was renamed because it now affects every anvil aspect and not only unsafe enchants\
|
||||||
|
**Custom Anvil** is based on [Unsafe Enchants](https://github.com/DelilahEve/UnsafeEnchants) by DelilahEve.
|
||||||
|
|
||||||
### Download Locations:
|
### Download Locations:
|
||||||
|
|
||||||
the plugin can be downloaded on
|
the plugin can be downloaded on
|
||||||
[Modrinth](https://modrinth.com/plugin/customanvil),
|
[Spigot](https://www.spigotmc.org/resources/custom-anvil.114884),
|
||||||
|
[modrinth](https://modrinth.com/plugin/customanvil),
|
||||||
[Hangar](https://hangar.papermc.io/alexcrea/CustomAnvil)
|
[Hangar](https://hangar.papermc.io/alexcrea/CustomAnvil)
|
||||||
or here [on GitHub](https://github.com/alexcrea/CustomAnvil/releases/latest)
|
or here [on GitHub](https://github.com/alexcrea/CustomAnvil/releases/latest)
|
||||||
|
|
||||||
|
|
@ -14,98 +21,84 @@ the plugin can be downloaded on
|
||||||
- Vanilla like default configuration.
|
- Vanilla like default configuration.
|
||||||
- Custom enchantment level limit.
|
- Custom enchantment level limit.
|
||||||
- Custom anvil recipes.
|
- Custom anvil recipes.
|
||||||
- Custom enchant restrictions (allows unsafe enchantment only for a group of item or create new restriction).
|
- Custom enchant restrictions (allow unsafe enchantment only for a group of item or create new restriction).
|
||||||
- Custom items of unit repairs (repair damaged with unit of "material", for example the repair of diamond sword by diamonds).
|
- Custom items of unit repairs (repair damaged with unit of "material", for example the repair of diamond sword by diamonds).
|
||||||
- Custom XP cost for every aspect of the anvil.
|
- Custom XP cost for every aspect of the anvil.
|
||||||
- Permissions to bypass level limit or enchantment restriction.
|
- Permissions to bypass level limit or enchantment restriction.
|
||||||
- Display XP cost instead of "too expensive" when above level 40. (see below for more information)
|
- Display XP cost instead of "too expensive" when above level 40. (see below for more information)
|
||||||
- Can handle some custom enchantment plugins (see below for more information)
|
- Can handle some custom enchantment plugins (see below for more information)
|
||||||
- Gui to configure the plugin in game.
|
- Gui to configure the plugin in game.
|
||||||
- Support use of color code, hexadecimal color and minimessage for color/decoration
|
- Support of color code and hexadecimal color
|
||||||
- (Experimental) Folia support (gui do not work)
|
- (Experimental) Folia support (gui do not work)
|
||||||
- (Experimental) Dialog rename (allows longer rename)
|
|
||||||
- (Experimental) Anvil with monetary cost (using vault) (require dialog rename)
|
|
||||||
|
|
||||||
And more !
|
|
||||||
|
|
||||||
---
|
---
|
||||||
### Permissions:
|
### Permissions:
|
||||||
Note that for most of them you also need to enable feature and in most case enable use of permission for the specfic feature (indicated with `(toggleable)`)
|
|
||||||
```yml
|
```yml
|
||||||
# Generic and bypass permissions
|
|
||||||
ca.affected: Player with this permission will be affected by the plugin
|
ca.affected: Player with this permission will be affected by the plugin
|
||||||
ca.bypass.fuse: Allow player to combine every enchantments to every item (no custom limit)
|
ca.bypass.fuse: Allow player to combine every enchantments to every item (no custom limit)
|
||||||
ca.bypass.level: Allow player to bypass every level limit (no custom limit)
|
ca.bypass.level: Allow player to bypass every level limit (no custom limit)
|
||||||
|
|
||||||
# Command permissions
|
|
||||||
ca.command.reload: Allow administrator to reload the plugin's configs
|
ca.command.reload: Allow administrator to reload the plugin's configs
|
||||||
ca.command.diagnostic: Allow adminastator to diagnistic some simple problem with the plugin
|
|
||||||
ca.config.edit: Allow administrator to edit the plugin's config in game
|
ca.config.edit: Allow administrator to edit the plugin's config in game
|
||||||
|
# Related to use of color (usage of permission for color is toggleable in basic config gui or config.yml)
|
||||||
# -----------------------------------------------------------------------------
|
ca.color.code: Allow player to use color code if permission is required (toggleable)
|
||||||
# Bellow permissions also require some config change to allow usage of features
|
ca.color.hex: Allow player to use hexadecimal color if permission is required (toggleable)
|
||||||
# Usage of these permission is toggleable in basic config gui or config.yml
|
|
||||||
# -----------------------------------------------------------------------------
|
|
||||||
# Permissions related to use of color and minimessage
|
|
||||||
ca.color.code: Allow player to use color code on rename if enabled (toggleable)
|
|
||||||
ca.color.code.[thecode] (for example ca.color.code.a): Allows usage of only certain color code (toggleable)
|
|
||||||
ca.color.hex: Allow player to use hexadecimal color on rename if enabled (toggleable)
|
|
||||||
ca.rename.minimessage: Allow player to use minimessage formating on rename if enabled (toggleable)
|
|
||||||
|
|
||||||
# Permissions related to edition of the lore
|
|
||||||
ca.lore_edit.book: Allow player to edit lore via book and quil if enabled (toggleable)
|
|
||||||
ca.lore_edit.paper: Allow player to edit lore via paper if enabled (toggleable)
|
|
||||||
|
|
||||||
# Others
|
|
||||||
ca.rename.dialog: Allow player to use the rename dialog (toggleable)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Commands
|
### Commands
|
||||||
|
```yml
|
||||||
run `/customanvil help` to get information about available commands \
|
anvilconfigreload or carl: Reload every config of this plugin
|
||||||
this only show subcommands you have permission for
|
customanvilconfig or configanvil: open a menu for administrator to edit plugin's config in game
|
||||||
|
```
|
||||||
### Supported Plugins
|
### Supported Plugins
|
||||||
See the [Compatibility list](https://github.com/alexcrea/CustomAnvil/blob/v1.x.x/COMPATIBILITY.md)
|
Custom Anvil can be compatible with some custom enchantments and anvil mechanics plugins.
|
||||||
|
|
||||||
|
Here is a list of supported custom enchantment plugins with support status:
|
||||||
|
- [Enchantment²](https://www.spigotmc.org/resources/enchants-squared-the-enchantsplus-rewrite-custom-enchantments-that-act-like-vanilla-ones.86747/):
|
||||||
|
Officially supported by Custom Anvil but still experimental. Automatic configuration.
|
||||||
|
|
||||||
|
- [EcoEnchant](https://www.spigotmc.org/resources/ecoenchants-%E2%AD%95-250-enchantments-%E2%9C%85-create-custom-enchants-%E2%9C%A8-essentials-cmi-support.79573/):
|
||||||
|
Officially supported by Custom Anvil but still experimental. Need to use /anvilconfigreload or a server restart to add newly added enchantment.
|
||||||
|
Use EcoEnchant restriction system by default.
|
||||||
|
|
||||||
|
- [ExcellentEnchants](https://www.spigotmc.org/resources/excellentenchants-%E2%AD%90-75-vanilla-like-enchantments.61693/):
|
||||||
|
Officially supported but still experimental. use ExcellentEnchants item type.
|
||||||
|
|
||||||
|
Here is a list of supported anvil mechanic plugins with support status:
|
||||||
|
- [Disenchantment](https://www.spigotmc.org/resources/disenchantment-1-21-1-1-20-6-new-book-splitting-mechanics.110741/)
|
||||||
|
Officially supported by Custom Anvil but still experimental. Mostly use Custom Anvil basic XP settings. (version >= 6.1.0)
|
||||||
|
|
||||||
|
- [HavenBags](https://www.spigotmc.org/resources/havenbags-shulker-like-player-bound-bags-1-17-1-21-4.110420/)
|
||||||
|
Officially supported by Custom Anvil. Not really enchantment related but CustomAnvil should not impact bag upgrade and skin via anvil.
|
||||||
|
|
||||||
|
If you like Custom Anvil to support a specific plugin (custom enchant or anvil mechanic).
|
||||||
|
You can ask, but please note implementing compatibility will be considered
|
||||||
|
as low priority as I work for the plugin on my free time for free.
|
||||||
|
|
||||||
### Overriding Too Expensive
|
### Overriding Too Expensive
|
||||||
|
|
||||||
One of the configurations allow displaying price about 40 and removing Too Expensive. \
|
One of the configurations allow displaying price about 40 and removing Too Expensive. \
|
||||||
By how the minecraft client work: price above 40 can only be displayed green, even if the player does not own enough experience level.
|
By how the minecraft client work: price above 40 can only be displayed green, even if the player does not own enough experience level.
|
||||||
spigot version 1.18 to 1.21.11 do not need any ProtocoLib dependency. (26.1.0 or above requires it) \
|
Minecraft version 1.17 to 1.21.1 do not need any dependency. Other version need ProtocoLib enabled on your server for this feature. \
|
||||||
Any recent paper version also are supported for this feature.
|
You can also wait for an update of the plugin to support a newer version.
|
||||||
But you should wait for update for new version containing new enchantable item or new enchantments if any of this got added.
|
|
||||||
Else it is, likely, fine to use the current version you are ussing on a new paper version
|
Please note that 1.16.5 to 1.17.1 are not officially supported. Run at your own risk.
|
||||||
|
|
||||||
### For custom enchantment plugin developers
|
### For custom enchantment plugin developers
|
||||||
For information about the API, please refer to [the Wiki](https://github.com/alexcrea/CustomAnvil/wiki) \
|
For information about the API, please refer to [the Wiki](https://github.com/alexcrea/CustomAnvil/wiki) \
|
||||||
(Please note that the wiki is currently incomplete)
|
(Please note that the wiki is currently incomplete)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Default Plugin's Configurations
|
### Default Plugin's Configurations
|
||||||
see [Here](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs)
|
For 1.18 to 1.20.6 use the [1.18 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.18)\
|
||||||
|
For 1.21 to 1.21.1 use the [1.21 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21)
|
||||||
|
|
||||||
---
|
---
|
||||||
### Metric And Telemetry
|
Custom anvil [use bstat](https://bstats.org/plugin/bukkit/Unsafe%20Enchants%20Plus/20923) for metric. You can [disable it](https://bstats.org/getting-started) if you like.
|
||||||
Custom anvil [use bstat](https://bstats.org/plugin/bukkit/Unsafe%20Enchants%20Plus/20923)
|
|
||||||
and [faststats](https://faststats.dev/project/customanvil/minecraft-plugin) for metric and error reporting.
|
|
||||||
|
|
||||||
You can select specific telemetry or disable all in config.yml. \
|
|
||||||
You can also [disable bstat](https://bstats.org/getting-started) and [faststats](https://faststats.dev/info) in their /plugin folder if you like too.
|
|
||||||
|
|
||||||
faststats is in beta testing please report me or them any error you encounter
|
|
||||||
|
|
||||||
### Credits and Thanks
|
|
||||||
Credits and thanks can be seen [here](https://github.com/alexcrea/CustomAnvil/blob/v1.x.x/CREDITS.md)
|
|
||||||
|
|
||||||
### Planned:
|
### Planned:
|
||||||
- Better Folia support (make gui work. fix some dirty handled parts)
|
- Better Folia support (make gui work. fix some dirty handled parts)
|
||||||
- Get restriction on unknown enchantments (planned for V2)
|
- Get restriction on unknown enchantments
|
||||||
- More features for custom anvil craft
|
- More features for custom anvil craft
|
||||||
|
|
||||||
### Known issue:
|
### Known issue:
|
||||||
Most unknown registered enchantments (by unsupported custom enchantment plugin & datapacks) will not have restriction by default. Planned but no eta.
|
Most unknown registered enchantments (by unsupported custom enchantment plugin & datapacks) will not have restriction by default. Planned but no eta.
|
||||||
|
|
||||||
### Do you need help with the plugin, or have any issue or suggestion?
|
|
||||||
You can ask on the discussion page, create a [GitHub issue](https://github.com/alexcrea/CustomAnvil/issues) or join my [discord](https://discord.gg/KHUNsUfRYJ)
|
|
||||||
|
|
|
||||||
315
build.gradle.kts
315
build.gradle.kts
|
|
@ -1,126 +1,78 @@
|
||||||
import cn.lalaki.pub.BaseCentralPortalPlusExtension
|
import cn.lalaki.pub.BaseCentralPortalPlusExtension
|
||||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||||
import groovy.util.Node
|
|
||||||
import groovy.util.NodeList
|
|
||||||
import io.papermc.hangarpublishplugin.model.HangarPublication
|
|
||||||
import io.papermc.hangarpublishplugin.model.Platforms
|
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||||
import java.io.ByteArrayOutputStream
|
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
kotlin("jvm") version "2.3.0"
|
kotlin("jvm") version "2.1.0"
|
||||||
java
|
java
|
||||||
id("org.jetbrains.dokka").version("1.9.20")
|
id("org.jetbrains.dokka").version("1.9.20")
|
||||||
id("com.gradleup.shadow").version("9.3.0")
|
id("com.gradleup.shadow").version("8.3.5")
|
||||||
// Maven publish
|
// Maven publish
|
||||||
`maven-publish`
|
`maven-publish`
|
||||||
signing
|
signing
|
||||||
id("cn.lalaki.central").version("1.2.8")
|
id("cn.lalaki.central").version("1.2.5")
|
||||||
// Paper
|
// Paper
|
||||||
id("io.papermc.paperweight.userdev") version "2.0.0-beta.17" apply false
|
id("io.papermc.paperweight.userdev") version "2.0.0-beta.14" apply false
|
||||||
id("io.papermc.hangar-publish-plugin") version "0.1.2"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "xyz.alexcrea"
|
group = "xyz.alexcrea"
|
||||||
version = "1.17.5"
|
version = "1.7.1"
|
||||||
|
|
||||||
val isDevBuild = System.getenv("SMALL_COMMIT_HASH") != null
|
|
||||||
val isPreRelease = System.getenv("IS_GITHUB_PRERELEASE") == "true"
|
|
||||||
|
|
||||||
val effectiveVersion = "$version" +
|
|
||||||
(if (isDevBuild) "-dev-${System.getenv("SMALL_COMMIT_HASH")!!}" else "")
|
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
// EcoEnchants
|
// EcoEnchants
|
||||||
maven(url = "https://repo.auxilor.io/repository/maven-public/")
|
maven(url = "https://repo.auxilor.io/repository/maven-public/")
|
||||||
|
|
||||||
// ExcellentEnchants
|
|
||||||
maven(url = "https://repo.nightexpressdev.com/releases")
|
|
||||||
|
|
||||||
// ItemsAdder
|
|
||||||
maven(url = "https://maven.devs.beer/")
|
|
||||||
|
|
||||||
// For fast stats
|
|
||||||
maven {
|
|
||||||
name = "thenextlvlReleases"
|
|
||||||
url = uri("https://repo.thenextlvl.net/releases")
|
|
||||||
}
|
|
||||||
|
|
||||||
// For vault unlocked
|
|
||||||
maven { url = uri("https://repo.codemc.io/repository/creatorfromhell/") }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val reobfNMS = providers.gradleProperty("subprojects.reobfnms")
|
|
||||||
.get().split(",")
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// Spigot api
|
// Spigot api
|
||||||
compileOnly("org.spigotmc:spigot-api:1.18-R0.1-SNAPSHOT")
|
compileOnly("org.spigotmc:spigot-api:1.18-R0.1-SNAPSHOT")
|
||||||
|
|
||||||
// fast stats
|
|
||||||
implementation("dev.faststats.metrics:bukkit:0.27.0")
|
|
||||||
|
|
||||||
// minimessage
|
|
||||||
implementation("net.kyori:adventure-text-minimessage:4.25.0")
|
|
||||||
|
|
||||||
// Gui library
|
// Gui library
|
||||||
val inventoryFramework = "xyz.alexcrea.cuanvil.inventoryframework:IF-CustomAnvil:0.10.18.2"
|
val inventoryFramework = "xyz.alexcrea.cuanvil.inventoryframework:IF-CustomAnvil:0.10.18"
|
||||||
implementation(inventoryFramework)
|
implementation(inventoryFramework)
|
||||||
testRuntimeOnly(inventoryFramework)
|
testRuntimeOnly(inventoryFramework)
|
||||||
|
|
||||||
// EnchantsSquaredRewritten
|
// EnchantsSquaredRewritten
|
||||||
compileOnly(files("libs/EnchantsSquared.jar"))
|
compileOnly(files("libs/EnchantsSquared.jar"))
|
||||||
|
|
||||||
// EcoEnchants & item
|
// EcoEnchants
|
||||||
compileOnly("com.willfp:libreforge:4.79.0:all")
|
|
||||||
compileOnly("com.willfp:eco:6.74.5")
|
|
||||||
|
|
||||||
compileOnly("com.willfp:EcoEnchants:12.11.1")
|
compileOnly("com.willfp:EcoEnchants:12.11.1")
|
||||||
|
compileOnly("com.willfp:eco:6.74.5")
|
||||||
compileOnly(project(":impl:LegacyEcoEnchant"))
|
compileOnly(project(":impl:LegacyEcoEnchant"))
|
||||||
|
|
||||||
compileOnly("com.willfp:EcoItems:5.66.0")
|
|
||||||
|
|
||||||
// ExcellentEnchants
|
// ExcellentEnchants
|
||||||
implementation(project(":impl:ExcellentEnchant5_4"))
|
compileOnly(files("libs/nightcore-2.7.3.jar"))
|
||||||
compileOnly("su.nightexpress.excellentenchants:Core:5.1.0") {
|
compileOnly(files("libs/ExcellentEnchants-4.3.1.jar"))
|
||||||
exclude("org.spigotmc")
|
compileOnly(files("libs/ExcellentEnchants 4.1.0-striped.jar")) // For legacy excellent enchants
|
||||||
}
|
|
||||||
compileOnly(files("libs/ExcellentEnchants-4.3.3-striped.jar")) // For pre v5 excellent enchants
|
|
||||||
compileOnly(files("libs/ExcellentEnchants-4.1.0-striped.jar")) // For legacy excellent enchants
|
|
||||||
|
|
||||||
// Disenchantment
|
// Disenchantment
|
||||||
compileOnly(files("libs/Disenchantment-6.1.5.jar"))
|
compileOnly(files("libs/Disenchantment-6.1.0.jar"))
|
||||||
|
|
||||||
// HavenBags
|
// HavenBags
|
||||||
compileOnly(files("libs/HavenBags-1.31.0.1760.jar"))
|
compileOnly(files("libs/HavenBags-1.30.1.1729.jar"))
|
||||||
|
|
||||||
// ToolStats
|
|
||||||
compileOnly(files("libs/toolstats-1.9.6-stripped.jar"))
|
|
||||||
|
|
||||||
// AxPlayerWarps
|
|
||||||
compileOnly(files("libs/AxPlayerWarps-1.10.3.jar"))
|
|
||||||
|
|
||||||
// SuperEnchants
|
|
||||||
compileOnly(files("libs/SuperEnchants-4.6.2-all.jar"))
|
|
||||||
|
|
||||||
// ItemsAdder API
|
|
||||||
compileOnly("dev.lone:api-itemsadder:4.0.10")
|
|
||||||
|
|
||||||
// Vault api
|
|
||||||
compileOnly("net.milkbowl.vault:VaultUnlockedAPI:2.16")
|
|
||||||
|
|
||||||
// Include nms
|
// Include nms
|
||||||
implementation(project(":nms:nms-common"))
|
implementation(project(":nms:nms-common"))
|
||||||
implementation(project(":nms:nms-paper"))
|
implementation(project(":nms:v1_17R1", configuration = "reobf"))
|
||||||
for (nmsPart in reobfNMS) {
|
implementation(project(":nms:v1_18R1", configuration = "reobf"))
|
||||||
implementation(project(":nms:$nmsPart", configuration = "reobf"))
|
implementation(project(":nms:v1_18R2", configuration = "reobf"))
|
||||||
}
|
implementation(project(":nms:v1_19R1", configuration = "reobf"))
|
||||||
|
implementation(project(":nms:v1_19R2", configuration = "reobf"))
|
||||||
|
implementation(project(":nms:v1_19R3", configuration = "reobf"))
|
||||||
|
implementation(project(":nms:v1_20R1", configuration = "reobf"))
|
||||||
|
implementation(project(":nms:v1_20R2", configuration = "reobf"))
|
||||||
|
implementation(project(":nms:v1_20R3", configuration = "reobf"))
|
||||||
|
implementation(project(":nms:v1_20R4", configuration = "reobf"))
|
||||||
|
implementation(project(":nms:v1_21R1", configuration = "reobf"))
|
||||||
|
implementation(project(":nms:v1_21R2", configuration = "reobf"))
|
||||||
|
implementation(project(":nms:v1_21R3", configuration = "reobf"))
|
||||||
|
|
||||||
// include kotlin for the offline jar
|
// include kotlin for the offline jar
|
||||||
implementation(kotlin("stdlib"))
|
implementation(kotlin("stdlib"))
|
||||||
|
|
||||||
// Test dependency
|
// Test dependency
|
||||||
testImplementation("org.mockbukkit.mockbukkit:mockbukkit-v1.21:4.48.0")
|
testImplementation("org.mockbukkit.mockbukkit:mockbukkit-v1.21:4.21.0")
|
||||||
testRuntimeOnly("commons-lang:commons-lang:2.6")
|
testRuntimeOnly("commons-lang:commons-lang:2.6")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -142,9 +94,8 @@ allprojects {
|
||||||
compileOnly(kotlin("stdlib"))
|
compileOnly(kotlin("stdlib"))
|
||||||
|
|
||||||
// Test dependency
|
// Test dependency
|
||||||
testImplementation(platform("org.junit:junit-bom:5.12.2"))
|
testImplementation(platform("org.junit:junit-bom:5.11.3"))
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter")
|
testImplementation("org.junit.jupiter:junit-jupiter")
|
||||||
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.getByName<Test>("test") {
|
tasks.getByName<Test>("test") {
|
||||||
|
|
@ -159,8 +110,7 @@ allprojects {
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility =
|
sourceCompatibility = "16" // We aim for java 16 for minecraft 1.16.5. even if it not really suported by custom anvil.
|
||||||
"16" // We aim for java 16 for minecraft 1.16.5. even if it not really supported by custom anvil.
|
|
||||||
targetCompatibility = "16"
|
targetCompatibility = "16"
|
||||||
|
|
||||||
options.encoding = "UTF-8"
|
options.encoding = "UTF-8"
|
||||||
|
|
@ -168,29 +118,43 @@ allprojects {
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_16)
|
jvmTarget.set(JvmTarget.JVM_16)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fat-jar builder
|
||||||
|
val fatJar = tasks.register<Jar>("fatJar") {
|
||||||
|
manifest {
|
||||||
|
attributes.apply { put("Main-Class", "io.delilaheve.CustomAnvil") }
|
||||||
|
}
|
||||||
|
archiveFileName.set("${rootProject.name}-${project.version}.jar")
|
||||||
|
exclude("META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA")
|
||||||
|
duplicatesStrategy = DuplicatesStrategy.WARN
|
||||||
|
from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })
|
||||||
|
with(tasks.jar.get() as CopySpec)
|
||||||
|
}
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
|
// Online jar (use of libraries)
|
||||||
|
shadowJar {
|
||||||
|
// No suffix for this jar
|
||||||
|
archiveClassifier.set("")
|
||||||
|
|
||||||
fun ShadowJar.configureBaseShadow(suffix: String, libraries: Array<String>) {
|
// Exclude kotlin std and its annotation
|
||||||
val processedSuffix = if(suffix.isEmpty()) "" else "-$suffix"
|
exclude("**/kotlin-stdlib*.jar")
|
||||||
val name = "${rootProject.name}-${effectiveVersion}${processedSuffix}.jar"
|
exclude("**/annotations*.jar")
|
||||||
archiveFileName.set(name)
|
|
||||||
|
|
||||||
// Shadow necessary dependency
|
// Shadow necessary dependency
|
||||||
relocate("com.github.stefvanschie.inventoryframework", "xyz.alexcrea.cuanvil.inventoryframework")
|
relocate("com.github.stefvanschie.inventoryframework", "xyz.alexcrea.inventoryframework")
|
||||||
relocate("dev.faststats", "xyz.alexcrea.cuanvil.faststats")
|
|
||||||
|
|
||||||
|
// Replace version and example fields in plugin.yml
|
||||||
filesMatching("plugin.yml") {
|
filesMatching("plugin.yml") {
|
||||||
expand(
|
expand(
|
||||||
"version" to effectiveVersion + processedSuffix,
|
"version" to project.version,
|
||||||
"libraries" to libraries.joinToString(transform = { "\"$it\"" }),
|
"libraries" to " \"org.jetbrains.kotlin:kotlin-stdlib:2.1.0\" "
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -198,28 +162,35 @@ tasks {
|
||||||
dependsOn(processResources)
|
dependsOn(processResources)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Online jar (use of libraries)
|
// Offline jar (include kotlin std in the final jar fine)
|
||||||
shadowJar {
|
val offlineJar by // Shadow necessary dependency
|
||||||
configureBaseShadow("",
|
registering(
|
||||||
arrayOf(
|
|
||||||
"org.jetbrains.kotlin:kotlin-stdlib:2.3.0",
|
|
||||||
"net.kyori:adventure-text-minimessage:4.25.0",
|
|
||||||
"net.kyori:adventure-text-serializer-plain:4.25.0",
|
|
||||||
"net.kyori:adventure-text-serializer-legacy:4.25.0",
|
|
||||||
))
|
|
||||||
|
|
||||||
// Exclude kotlin std, annotations and adventure api
|
// Include all project other dependencies
|
||||||
exclude("*kotlin/**")
|
ShadowJar
|
||||||
exclude("**/annotations/**")
|
|
||||||
exclude("net/kyori/**")
|
|
||||||
}
|
|
||||||
|
|
||||||
val offlineJar by registering(ShadowJar::class) {
|
// Add custom anvil compiled
|
||||||
configureBaseShadow("offline", emptyArray())
|
::class, fun ShadowJar.() {
|
||||||
|
archiveClassifier.set("offline")
|
||||||
|
|
||||||
from(sourceSets.main.get().output)
|
// Shadow necessary dependency
|
||||||
configurations = listOf(project.configurations.runtimeClasspath.get())
|
relocate("com.github.stefvanschie.inventoryframework", "xyz.alexcrea.inventoryframework")
|
||||||
}
|
|
||||||
|
filesMatching("plugin.yml") {
|
||||||
|
expand(
|
||||||
|
"version" to "${project.version}-offline",
|
||||||
|
"libraries" to ""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Include all project other dependencies
|
||||||
|
from(project.configurations.runtimeClasspath)
|
||||||
|
|
||||||
|
// Add custom anvil compiled
|
||||||
|
from(sourceSets.main.get().output)
|
||||||
|
|
||||||
|
dependsOn(processResources)
|
||||||
|
})
|
||||||
|
|
||||||
// Make the online and offline jar on build
|
// Make the online and offline jar on build
|
||||||
named("build") {
|
named("build") {
|
||||||
|
|
@ -272,10 +243,6 @@ object Meta {
|
||||||
const val snapshot = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
|
const val snapshot = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
|
||||||
}
|
}
|
||||||
|
|
||||||
val disallowedDependency = HashSet<String>()
|
|
||||||
disallowedDependency.addAll(reobfNMS)
|
|
||||||
disallowedDependency.addAll(listOf("nms-common", "nms-paper", "kotlin-stdlib"))
|
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
repositories {
|
repositories {
|
||||||
maven {
|
maven {
|
||||||
|
|
@ -291,16 +258,6 @@ publishing {
|
||||||
from(components["kotlin"])
|
from(components["kotlin"])
|
||||||
artifact(tasks["sourcesJar"])
|
artifact(tasks["sourcesJar"])
|
||||||
artifact(tasks["javadocJar"])
|
artifact(tasks["javadocJar"])
|
||||||
|
|
||||||
versionMapping {
|
|
||||||
usage("java-api") {
|
|
||||||
fromResolutionOf("runtimeClasspath")
|
|
||||||
}
|
|
||||||
usage("java-runtime") {
|
|
||||||
fromResolutionResult()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pom {
|
pom {
|
||||||
name.set(project.name)
|
name.set(project.name)
|
||||||
description.set(Meta.desc)
|
description.set(Meta.desc)
|
||||||
|
|
@ -333,123 +290,7 @@ publishing {
|
||||||
issueManagement {
|
issueManagement {
|
||||||
url.set("https://github.com/${Meta.githubRepo}/issues")
|
url.set("https://github.com/${Meta.githubRepo}/issues")
|
||||||
}
|
}
|
||||||
|
|
||||||
withXml {
|
|
||||||
val dependenciesNode = (asNode().get("dependencies") as NodeList)[0] as Node
|
|
||||||
|
|
||||||
val toRemove = ArrayList<Node>()
|
|
||||||
for (child in dependenciesNode.children()) {
|
|
||||||
val artifactNode = ((child as Node).get("artifactId") as NodeList)[0] as Node
|
|
||||||
val artifactID = artifactNode.value() as String
|
|
||||||
|
|
||||||
if(disallowedDependency.contains(artifactID)) {
|
|
||||||
toRemove.add(child)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (node in toRemove) {
|
|
||||||
dependenciesNode.remove(node)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// hangar publish
|
|
||||||
|
|
||||||
fun executeGitCommand(vararg command: String): String {
|
|
||||||
val byteOut = ByteArrayOutputStream()
|
|
||||||
exec {
|
|
||||||
commandLine = listOf("git", *command)
|
|
||||||
standardOutput = byteOut
|
|
||||||
}
|
|
||||||
return byteOut.toString(Charsets.UTF_8.name()).trim()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fun latestCommitMessage(): String {
|
|
||||||
return executeGitCommand("log", "-1", "--pretty=%B")
|
|
||||||
}
|
|
||||||
|
|
||||||
fun changelog(isOnline: Boolean): String {
|
|
||||||
var changelog = if(isDevBuild) latestCommitMessage()
|
|
||||||
else System.getenv("RELEASE_CHANGELOG")
|
|
||||||
|
|
||||||
if(!isOnline) {
|
|
||||||
changelog = "This is an offline version of the plugin. \\\n" +
|
|
||||||
"This mean that this plugin libraries are shaded into this plugin \\\n" +
|
|
||||||
"You likely want to use the normal version of this plugin\n\n" + changelog
|
|
||||||
}
|
|
||||||
|
|
||||||
if(changelog == null || changelog.isEmpty()) {
|
|
||||||
changelog = "empty changelog"
|
|
||||||
}
|
|
||||||
|
|
||||||
return changelog
|
|
||||||
}
|
|
||||||
|
|
||||||
hangarPublish {
|
|
||||||
|
|
||||||
fun HangarPublication.configure(isOnline: Boolean, devChannel: String, releaseChannel: String) {
|
|
||||||
var versionName = effectiveVersion
|
|
||||||
if(isPreRelease) versionName+= "-pre"
|
|
||||||
if(!isOnline) versionName+= "-offline"
|
|
||||||
|
|
||||||
version.set(versionName)
|
|
||||||
channel.set(if (isDevBuild || isPreRelease) devChannel else releaseChannel)
|
|
||||||
|
|
||||||
changelog.set(changelog(isOnline))
|
|
||||||
id.set("CustomAnvil")
|
|
||||||
apiKey.set(System.getenv("HANGAR_API_TOKEN"))
|
|
||||||
|
|
||||||
platforms {
|
|
||||||
register(Platforms.PAPER) {
|
|
||||||
// Set the JAR file to upload
|
|
||||||
var task = if(isOnline) tasks.shadowJar
|
|
||||||
else tasks.named<ShadowJar>("offlineJar")
|
|
||||||
|
|
||||||
jar.set(task.flatMap { it.archiveFile })
|
|
||||||
|
|
||||||
// Set platform versions from gradle.properties file
|
|
||||||
val versions: List<String> = (property("paperVersion") as String)
|
|
||||||
.split(",")
|
|
||||||
.map { it.trim() }
|
|
||||||
platformVersions.set(versions)
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
hangar("ProtocolLib") {
|
|
||||||
required.set(false)
|
|
||||||
}
|
|
||||||
url("Disenchantment", "https://modrinth.com/plugin/disenchantment") {
|
|
||||||
required.set(false)
|
|
||||||
}
|
|
||||||
url("ToolStats", "https://modrinth.com/plugin/toolstats") {
|
|
||||||
required.set(false)
|
|
||||||
}
|
|
||||||
url("HavenBags", "https://www.spigotmc.org/resources/havenbags-shulker-like-player-bound-bags-1-17-1-21-4.110420/") {
|
|
||||||
required.set(false)
|
|
||||||
}
|
|
||||||
url("EcoEnchants", "https://www.spigotmc.org/resources/ecoenchants-%E2%AD%95-250-enchantments-%E2%9C%85-create-custom-enchants-%E2%9C%A8-essentials-cmi-support.79573/") {
|
|
||||||
required.set(false)
|
|
||||||
}
|
|
||||||
hangar("EnchantsSquared") {
|
|
||||||
required.set(false)
|
|
||||||
}
|
|
||||||
url("ExcellentEnchants", "https://www.spigotmc.org/resources/excellentenchants-%E2%AD%90-75-vanilla-like-enchantments.61693/") {
|
|
||||||
required.set(false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
publications.register("plugin") {
|
|
||||||
configure(true, "DevSnapshot", "Release")
|
|
||||||
}
|
|
||||||
|
|
||||||
publications.register("offline") {
|
|
||||||
configure(false, "OfflineSnapshot", "OfflineRelease")
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -3,19 +3,6 @@
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# What service of metric should custom anvil use
|
|
||||||
# Custom anvil collect generic information like server minecraft version, type, etc...
|
|
||||||
# It can also collect error information if error is happening (currently faststats only)
|
|
||||||
# It can also be disabled
|
|
||||||
# Please refer to README for public metric link
|
|
||||||
# Possible options: auto, bstat, faststats, disabled (auto by default)
|
|
||||||
metric_type: auto
|
|
||||||
|
|
||||||
# Allow to report errors made caused by this plugin (only for faststats)
|
|
||||||
# This allows me to fix potentials issue that I'm not aware of
|
|
||||||
# Accept true or false (true by default)
|
|
||||||
metric_collect_errors: true
|
|
||||||
|
|
||||||
# All anvil cost will be capped to limit_repair_value if enabled.
|
# All anvil cost will be capped to limit_repair_value if enabled.
|
||||||
#
|
#
|
||||||
# In other words:
|
# In other words:
|
||||||
|
|
@ -72,22 +59,8 @@ sacrifice_illegal_enchant_cost: 1
|
||||||
#
|
#
|
||||||
# Color code are prefixed by "&" and hexadecimal color by "#".
|
# Color code are prefixed by "&" and hexadecimal color by "#".
|
||||||
# Color code will not be applied if it colors nothing. "&&" can be used to write "&".
|
# Color code will not be applied if it colors nothing. "&&" can be used to write "&".
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
allow_color_code: false
|
allow_color_code: false
|
||||||
allow_hexadecimal_color: false
|
allow_hexadecimal_color: false
|
||||||
allow_minimessage: false
|
|
||||||
|
|
||||||
# This enables restricting color code for player having specific permission
|
|
||||||
# It requires allow_color_code enabled for... obvious reasons
|
|
||||||
#
|
|
||||||
# For example: if player want to use "&aHello" it will be required that the player has
|
|
||||||
# the permission "ca.color.code.a" as he used the color code "a"
|
|
||||||
# In general permission to give to the player is "ca.color.code.[code]"
|
|
||||||
# where [code] is the color code you wish to allow the player
|
|
||||||
#
|
|
||||||
# It is kinda of useless when minimessage is supported as players would be able to bypass
|
|
||||||
# that using the equivalent minimessage tag
|
|
||||||
per_color_code_permission: false
|
|
||||||
|
|
||||||
# Toggle if color should only be applicable if the player a certain permission.
|
# Toggle if color should only be applicable if the player a certain permission.
|
||||||
#
|
#
|
||||||
|
|
@ -99,23 +72,22 @@ permission_needed_for_color: true
|
||||||
# Valid values include 0 to 1000.
|
# Valid values include 0 to 1000.
|
||||||
use_of_color_cost: 0
|
use_of_color_cost: 0
|
||||||
|
|
||||||
# Dialogue rename menu make use of dialog menu to allow bigger rename
|
# Work penalty increase the price for every anvil use.
|
||||||
# You can also change the maximum size and set it to -1 or less for maximum
|
# This config allow you to choose the comportment of work penalty.
|
||||||
|
# Vanilla work penalty formula can be represented as 2 * previous_penalty + 1. with start value equal to 0
|
||||||
|
# See https://minecraft.wiki/w/Anvil_mechanics#Anvil_uses for more detail
|
||||||
#
|
#
|
||||||
# This feature only work on paper 1.21.7 or later
|
# Valid work penalty type is:
|
||||||
#
|
# - default: work penalty added and increased
|
||||||
# At the moment only english is available for this menu... sorry !
|
# - increase_only: work penalty increased but not added
|
||||||
#
|
# - add_only: work penalty added but not increased
|
||||||
# CustomAnvil use "ca.rename.dialog" when permission
|
# - disabled: work penalty disabled
|
||||||
enable_dialog_rename: false
|
work_penalty_type: default
|
||||||
dialog_rename_max_size: 256
|
|
||||||
permission_needed_for_dialog_rename: false
|
|
||||||
|
|
||||||
# This allows custom anvil to not "guess" the text used for rename but store it in the item
|
# Default limit to apply to any enchants missing from enchant_limits
|
||||||
# It will make item stackable only and only if it had used the same rename text
|
|
||||||
#
|
#
|
||||||
# For practical reason. this only work when dialog rename is enabled
|
# Valid values include 1 to 1000
|
||||||
dialog_rename_keep_user_text: true
|
default_limit: 5
|
||||||
|
|
||||||
# Override limits for specific enchants
|
# Override limits for specific enchants
|
||||||
#
|
#
|
||||||
|
|
@ -123,8 +95,7 @@ dialog_rename_keep_user_text: true
|
||||||
#
|
#
|
||||||
# Overrides provided default from aqua_affinity to depth_strider won't change effect with extra levels
|
# Overrides provided default from aqua_affinity to depth_strider won't change effect with extra levels
|
||||||
#
|
#
|
||||||
# Valid range of 0 - 255 for each enchantment
|
# Valid range of 1 - 255 for each enchantment
|
||||||
# -1 mean keep default
|
|
||||||
enchant_limits:
|
enchant_limits:
|
||||||
minecraft:aqua_affinity: 1
|
minecraft:aqua_affinity: 1
|
||||||
minecraft:binding_curse: 1
|
minecraft:binding_curse: 1
|
||||||
|
|
@ -306,161 +277,21 @@ enchant_values:
|
||||||
# Even if disable-merge-over of unbreaking is set to 2
|
# Even if disable-merge-over of unbreaking is set to 2
|
||||||
# -1 mean enchantment merge for this enchantment is not disabled. default to -1 if absent.
|
# -1 mean enchantment merge for this enchantment is not disabled. default to -1 if absent.
|
||||||
disable-merge-over:
|
disable-merge-over:
|
||||||
# Sharpness is set to -1. it equivalent to it not being set to anything (and work as vanilla on default configuration)
|
# Sharpness is set to -1. it equivalent to it not being set to anything (and work as vanilla)
|
||||||
minecraft:sharpness: -1
|
minecraft:sharpness: -1
|
||||||
# If uncommented. 2 unbreaking II book would not give an unbreaking III book. but unbreaking III book can still be applied
|
# If uncommented. 2 unbreaking II book would not give an unbreaking III book. but unbreaking III book can still be applied
|
||||||
#minecraft:unbreaking: 2
|
#minecraft:unbreaking: 2
|
||||||
|
|
||||||
# The maximum number of enchantment an item can get. -1 for infinity
|
|
||||||
# Use eco enchant enchant_limit if present by default unless "default" is not equal to -1
|
|
||||||
enchantment_count_limit:
|
|
||||||
default: -1
|
|
||||||
# Limit for specific items. example bellow is an example with stick
|
|
||||||
# Per item enchantment limit override eco enchant enchant_limit and default limit
|
|
||||||
items:
|
|
||||||
stick: -1
|
|
||||||
|
|
||||||
# Settings for lore modification
|
|
||||||
lore_edit:
|
|
||||||
book_and_quil:
|
|
||||||
# Permission is ca.lore_edit.book
|
|
||||||
use_permission: true
|
|
||||||
append:
|
|
||||||
# If adding lore using book & quil is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Cost used for every lore line added
|
|
||||||
per_line_cost: 0
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If adding the lore consume the book & quil
|
|
||||||
do_consume: false
|
|
||||||
# Allow using color code and hexadecimal color when editing lore via book & quil
|
|
||||||
#
|
|
||||||
# Color code are prefixed by "&" and hexadecimal color by "#"
|
|
||||||
# Color code will not be applied if it colors nothing. "&&" can be used to write "&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
#
|
|
||||||
# Note that currently minimessage would disable hex code when adding color
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
|
|
||||||
remove:
|
|
||||||
# If removing lore using book & quil is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Cost used for every lore line removed
|
|
||||||
per_line_cost: 0
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If removing the lore consume the book & quil
|
|
||||||
do_consume: false
|
|
||||||
# Cost of replacing colors
|
|
||||||
remove_color_cost: 0
|
|
||||||
# Allowed some color and tags to be reverted to plain text
|
|
||||||
# Custom anvil will prioritise format that result is a smaller resulting text
|
|
||||||
# Note that not allowing certain format will lead to some lost of color or tags.
|
|
||||||
# If configuration are exact as append appending this book should result in the exact same color
|
|
||||||
#
|
|
||||||
# Color code will be prefixed by "&" and hexadecimal color by "#".
|
|
||||||
# If color code is allowed, "&" in the text will get converted to "&&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
|
|
||||||
paper:
|
|
||||||
# Permission is ca.lore_edit.paper
|
|
||||||
use_permission: true
|
|
||||||
# what order should the lines should get added/removed (start/end, if invalid or not present will be end)
|
|
||||||
order: end
|
|
||||||
|
|
||||||
append_line:
|
|
||||||
# If adding lore line using paper is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If adding the lore line consume the paper
|
|
||||||
do_consume: false
|
|
||||||
# Allow using color code and hexadecimal color when editing lore via book & quil
|
|
||||||
#
|
|
||||||
# Color code are prefixed by "&" and hexadecimal color by "#"
|
|
||||||
# Color code will not be applied if it colors nothing. "&&" can be used to write "&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
#
|
|
||||||
# Note that currently minimessage would disable hex code when adding color
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
color_use_cost: 0
|
|
||||||
|
|
||||||
remove_line:
|
|
||||||
# If removing lore line using paper is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If removing the lore line consume the paper
|
|
||||||
do_consume: false
|
|
||||||
# Cost of replacing colors
|
|
||||||
remove_color_cost: 0
|
|
||||||
# Allowed some color and tags to be reverted to plain text
|
|
||||||
# Custom anvil will prioritise format that result is a smaller resulting text
|
|
||||||
# Note that not allowing certain format will lead to some lost of color or tags.
|
|
||||||
# If configuration are exact as append appending this paper should result in the exact same color
|
|
||||||
#
|
|
||||||
# Color code will be prefixed by "&" and hexadecimal color by "#".
|
|
||||||
# If color code is allowed, "&" in the text will get converted to "&&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
|
|
||||||
# Allow to replace the xp cost by a monetary cost
|
|
||||||
# If enabled it will not be bound to the experience level limits
|
|
||||||
#
|
|
||||||
# It also requires to enable dialog rename (set "enable_dialog_rename: false" a bit higher)
|
|
||||||
# If dialog rename permission is enabled and player do not have the permission merge will fall back to vanilla xp cost
|
|
||||||
#
|
|
||||||
# If you are using custom craft I recommend using Linear Xp Cost with Exact Linear Xp as normal Xp Cost will act "weird"
|
|
||||||
# But Linear Xp will act as 1$ time global multiplier. In other word: like you expect
|
|
||||||
#
|
|
||||||
# As this feature require dialog rename, it can only be enabled starting with paper 1.21.6 and later
|
|
||||||
monetary_cost:
|
|
||||||
enabled: false
|
|
||||||
# If using vault unlocked this allow to specify what currency should be used for anvil usage
|
|
||||||
# default being the default currency
|
|
||||||
currency: default
|
|
||||||
# multiply the anvil cost by a value to allow to have price a big bigger than like 40
|
|
||||||
multipliers:
|
|
||||||
# global multipliers. all usage type will be multiplied by this value
|
|
||||||
global: 1.0
|
|
||||||
# usage specific type. it will only apply for specific xp "reason"
|
|
||||||
enchantment: 1.0 # related to enchantments level
|
|
||||||
repair: 1.0 # for repairing via unit repair (per unit)
|
|
||||||
rename: 1.0 # for renaming the item
|
|
||||||
lore_edit: 1.0 # for changing the lore of the item (only if lore edit is enabled)
|
|
||||||
work_penalty: 1.0 # for work penalty (aka use penalty)
|
|
||||||
recipe: 1.0 # for custom anvil recipe cost
|
|
||||||
|
|
||||||
# Whether to show debug logging
|
# Whether to show debug logging
|
||||||
debug_log: false
|
debug_log: false
|
||||||
|
|
||||||
# Whether to show verbose debug logging
|
# Whether to show verbose debug logging
|
||||||
debug_log_verbose: false
|
debug_log_verbose: false
|
||||||
|
|
||||||
configVersion: 1.11.0
|
# In case something when wrong with CustomAnvil packet manager.
|
||||||
|
# If you see "missing class exception" or similar you may test this.
|
||||||
|
# If enabled and Protocolib absent or disabled "Replace to expensive" will not work.
|
||||||
|
# ProtocoLib may also be used if the server is in an "unsupported" version even if this option is disabled.
|
||||||
|
force_protocolib: false
|
||||||
|
|
||||||
|
configVersion: 1.6.2
|
||||||
|
|
|
||||||
|
|
@ -92,10 +92,6 @@ restriction_loyalty:
|
||||||
enchantments: [ minecraft:loyalty ]
|
enchantments: [ minecraft:loyalty ]
|
||||||
notAffectedGroups: [ enchanted_book, trident ]
|
notAffectedGroups: [ enchanted_book, trident ]
|
||||||
|
|
||||||
restriction_luck_of_the_sea:
|
|
||||||
enchantments: [ minecraft:luck_of_the_sea ]
|
|
||||||
notAffectedGroups: [ enchanted_book, fishing_rod ]
|
|
||||||
|
|
||||||
restriction_lure:
|
restriction_lure:
|
||||||
enchantments: [ minecraft:lure ]
|
enchantments: [ minecraft:lure ]
|
||||||
notAffectedGroups: [ enchanted_book, fishing_rod ]
|
notAffectedGroups: [ enchanted_book, fishing_rod ]
|
||||||
|
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
### Default Plugin's Configurations For 1.21.11
|
|
||||||
- [config.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11/config.yml)
|
|
||||||
- [enchant_conflict.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11/enchant_conflict.yml)
|
|
||||||
- [item_groups.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11/item_groups.yml)
|
|
||||||
- [unit_repair_item.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11/unit_repair_item.yml)
|
|
||||||
- [custom_recipes.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11/custom_recipes.yml)
|
|
||||||
|
|
@ -1,487 +0,0 @@
|
||||||
#
|
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
|
||||||
#
|
|
||||||
|
|
||||||
# What service of metric should custom anvil use
|
|
||||||
# Custom anvil collect generic information like server minecraft version, type, etc...
|
|
||||||
# It can also collect error information if error is happening (currently faststats only)
|
|
||||||
# It can also be disabled
|
|
||||||
# Please refer to README for public metric link
|
|
||||||
# Possible options: auto, bstat, faststats, disabled (auto by default)
|
|
||||||
metric_type: auto
|
|
||||||
|
|
||||||
# Allow to report errors made caused by this plugin (only for faststats)
|
|
||||||
# This allows me to fix potentials issue that I'm not aware of
|
|
||||||
# Accept true or false (true by default)
|
|
||||||
metric_collect_errors: true
|
|
||||||
|
|
||||||
# All anvil cost will be capped to limit_repair_value if enabled.
|
|
||||||
#
|
|
||||||
# In other words:
|
|
||||||
# For any anvil cost greater than limit_repair_value, Cost will be set to limit_repair_value.
|
|
||||||
limit_repair_cost: false
|
|
||||||
|
|
||||||
# Max cost value the Anvil can get to.
|
|
||||||
#
|
|
||||||
# Valid values include 0 to 1000.
|
|
||||||
# Cost will be displayed as "Too Expensive":
|
|
||||||
# - If Cost is above 39
|
|
||||||
# - And replace_too_expensive is disabled (false)
|
|
||||||
limit_repair_value: 39
|
|
||||||
|
|
||||||
# Whether the anvil's cost limit should be removed entirely.
|
|
||||||
#
|
|
||||||
# The anvil will still visually display "Too Expensive" if "replace_too_expensive" is disabled
|
|
||||||
# However, the action will be completable if xp requirement is meet.
|
|
||||||
remove_repair_limit: false
|
|
||||||
|
|
||||||
# Whenever anvil cost is above 39 should display the true price and not "Too Expensive".
|
|
||||||
#
|
|
||||||
# However, when bypassing "Too Expensive", anvil price will be displayed as Green.
|
|
||||||
# If the action is not completable, the cost will still be displayed as "Too expensive".
|
|
||||||
# That mean you also need to change other settings like remove_repair_limit or limit_repair_cost.
|
|
||||||
#
|
|
||||||
# Require ProtocoLib.
|
|
||||||
replace_too_expensive: false
|
|
||||||
|
|
||||||
# XP Level amount added to the anvil when the item is repaired by another item of the same type
|
|
||||||
#
|
|
||||||
# Valid values include 0 to 1000
|
|
||||||
item_repair_cost: 2
|
|
||||||
|
|
||||||
# XP Level amount added to the anvil when the item is renamed
|
|
||||||
#
|
|
||||||
# Valid values include 0 to 1000
|
|
||||||
item_rename_cost: 1
|
|
||||||
|
|
||||||
# XP Level amount added to the anvil when the item is repaired by an "unit"
|
|
||||||
# For example: a Diamond on a Diamond Sword
|
|
||||||
# What's considered unit for what can be edited on the unit repair configuration.
|
|
||||||
#
|
|
||||||
# Valid values include 0 to 1000
|
|
||||||
unit_repair_cost: 1
|
|
||||||
|
|
||||||
# XP Level amount added to the anvil when a sacrifice enchantment
|
|
||||||
# conflict with one of the left item enchantment
|
|
||||||
#
|
|
||||||
# Valid values include 0 to 1000
|
|
||||||
sacrifice_illegal_enchant_cost: 1
|
|
||||||
|
|
||||||
# Allow using color code and hexadecimal color.
|
|
||||||
#
|
|
||||||
# Color code are prefixed by "&" and hexadecimal color by "#".
|
|
||||||
# Color code will not be applied if it colors nothing. "&&" can be used to write "&".
|
|
||||||
# For minimessage search for minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
# Note that only color and decoration tags are allowed for minimisage in the v1 version of this plugin
|
|
||||||
# but any global tag will be allowed later when v2 release
|
|
||||||
allow_color_code: false
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: false
|
|
||||||
|
|
||||||
# This enables restricting color code for player having specific permission
|
|
||||||
# It requires allow_color_code enabled for... obvious reasons
|
|
||||||
#
|
|
||||||
# For example: if player want to use "&aHello" it will be required that the player has
|
|
||||||
# the permission "ca.color.code.a" as he used the color code "a"
|
|
||||||
# In general permission to give to the player is "ca.color.code.[code]"
|
|
||||||
# where [code] is the color code you wish to allow the player
|
|
||||||
#
|
|
||||||
# It is kinda of useless when minimessage is supported as players would be able to bypass
|
|
||||||
# that using the equivalent minimessage tag
|
|
||||||
per_color_code_permission: false
|
|
||||||
|
|
||||||
# Toggle if color should only be applicable if the player a certain permission.
|
|
||||||
#
|
|
||||||
# permission are "ca.color.code" for use of color code and "ca.color.hex" for use of hexadecimal color.
|
|
||||||
permission_needed_for_color: true
|
|
||||||
|
|
||||||
# Xp cost if the player use color in the items name on rename.
|
|
||||||
#
|
|
||||||
# Valid values include 0 to 1000.
|
|
||||||
use_of_color_cost: 0
|
|
||||||
|
|
||||||
# Dialogue rename menu make use of dialog menu to allow bigger rename
|
|
||||||
# You can also change the maximum size and set it to -1 or less for maximum
|
|
||||||
#
|
|
||||||
# This feature only work on paper 1.21.7 or later
|
|
||||||
#
|
|
||||||
# At the moment only english is available for this menu... sorry !
|
|
||||||
#
|
|
||||||
# CustomAnvil use "ca.rename.dialog" when permission
|
|
||||||
enable_dialog_rename: false
|
|
||||||
dialog_rename_max_size: 256
|
|
||||||
permission_needed_for_dialog_rename: false
|
|
||||||
|
|
||||||
# This allows custom anvil to not "guess" the text used for rename but store it in the item
|
|
||||||
# It will make item stackable only and only if it had used the same rename text
|
|
||||||
#
|
|
||||||
# For practical reason. this only work when dialog rename is enabled
|
|
||||||
dialog_rename_keep_user_text: true
|
|
||||||
|
|
||||||
# Override limits for specific enchants
|
|
||||||
#
|
|
||||||
# Enchantments not listed here will use the value of default_limit
|
|
||||||
#
|
|
||||||
# Overrides provided default from aqua_affinity to depth_strider won't change effect with extra levels
|
|
||||||
#
|
|
||||||
# Valid range of 0 - 255 for each enchantment
|
|
||||||
# -1 mean keep default
|
|
||||||
enchant_limits:
|
|
||||||
minecraft:aqua_affinity: 1
|
|
||||||
minecraft:binding_curse: 1
|
|
||||||
minecraft:channeling: 1
|
|
||||||
minecraft:flame: 1
|
|
||||||
minecraft:infinity: 1
|
|
||||||
minecraft:mending: 1
|
|
||||||
minecraft:multishot: 1
|
|
||||||
minecraft:silk_touch: 1
|
|
||||||
minecraft:vanishing_curse: 1
|
|
||||||
minecraft:depth_strider: 3 # anything more than 3 is treated as 3 by the game
|
|
||||||
minecraft:protection: 4
|
|
||||||
minecraft:fire_protection: 4
|
|
||||||
minecraft:blast_protection: 4
|
|
||||||
minecraft:projectile_protection: 4
|
|
||||||
minecraft:feather_falling: 4
|
|
||||||
minecraft:thorns: 3
|
|
||||||
minecraft:respiration: 3
|
|
||||||
minecraft:sharpness: 5
|
|
||||||
minecraft:smite: 5
|
|
||||||
minecraft:bane_of_arthropods: 5
|
|
||||||
minecraft:knockback: 2
|
|
||||||
minecraft:fire_aspect: 2
|
|
||||||
minecraft:looting: 3
|
|
||||||
minecraft:sweeping: 3
|
|
||||||
minecraft:sweeping_edge: 3
|
|
||||||
minecraft:efficiency: 5
|
|
||||||
minecraft:unbreaking: 3
|
|
||||||
minecraft:fortune: 3
|
|
||||||
minecraft:power: 5
|
|
||||||
minecraft:punch: 2
|
|
||||||
minecraft:luck_of_the_sea: 3
|
|
||||||
minecraft:lure: 3
|
|
||||||
minecraft:frost_walker: 2
|
|
||||||
minecraft:impaling: 5
|
|
||||||
minecraft:riptide: 3
|
|
||||||
minecraft:loyalty: 3
|
|
||||||
minecraft:piercing: 4
|
|
||||||
minecraft:quick_charge: 3
|
|
||||||
minecraft:soul_speed: 3
|
|
||||||
minecraft:swift_sneak: 3
|
|
||||||
minecraft:density: 5
|
|
||||||
minecraft:breach: 4
|
|
||||||
minecraft:wind_burst: 3
|
|
||||||
minecraft:lunge: 3
|
|
||||||
|
|
||||||
# Multipliers used to calculate the enchantment's value in repair/combining
|
|
||||||
#
|
|
||||||
# Values here are pulled from the fandom wiki:
|
|
||||||
# https://minecraft.fandom.com/wiki/Anvil_mechanics#Costs_for_combining_enchantments
|
|
||||||
#
|
|
||||||
# If an enchantment is missing values here, or is less than 0, it will default to 0
|
|
||||||
#
|
|
||||||
# Calculated as: [Enchantment lvl] * [multiplier]
|
|
||||||
#
|
|
||||||
# With default values protection 4 would have a value of 4 when
|
|
||||||
# coming from either a book (4 * 1) or an item (4 * 1)
|
|
||||||
enchant_values:
|
|
||||||
minecraft:aqua_affinity:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:bane_of_arthropods:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:binding_curse:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:blast_protection:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:channeling:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:depth_strider:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:efficiency:
|
|
||||||
item: 1
|
|
||||||
book: 1
|
|
||||||
minecraft:flame:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:feather_falling:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:fire_aspect:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:fire_protection:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:fortune:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:frost_walker:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:impaling:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:infinity:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:knockback:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:looting:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:loyalty:
|
|
||||||
item: 1
|
|
||||||
book: 1
|
|
||||||
minecraft:luck_of_the_sea:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:lure:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:mending:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:multishot:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:piercing:
|
|
||||||
item: 1
|
|
||||||
book: 1
|
|
||||||
minecraft:power:
|
|
||||||
item: 1
|
|
||||||
book: 1
|
|
||||||
minecraft:projectile_protection:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:protection:
|
|
||||||
item: 1
|
|
||||||
book: 1
|
|
||||||
minecraft:punch:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:quick_charge:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:respiration:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:riptide:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:silk_touch:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:sharpness:
|
|
||||||
item: 1
|
|
||||||
book: 1
|
|
||||||
minecraft:smite:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:soul_speed:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:swift_sneak:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:sweeping:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:sweeping_edge:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:thorns:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:unbreaking:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:vanishing_curse:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:density:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:breach:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:wind_burst:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:lunge:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
|
|
||||||
# Disable enchantment merging for level above the set value
|
|
||||||
# Enchantment merging is when, for example, 2 unbreaking II book combine to give sharpness III
|
|
||||||
# But Enchantment above this value can still be applied. following the previous example, we could still apply a unbreaking III book to a sword
|
|
||||||
# Even if disable-merge-over of unbreaking is set to 2
|
|
||||||
# -1 mean enchantment merge for this enchantment is not disabled. default to -1 if absent.
|
|
||||||
disable-merge-over:
|
|
||||||
# Sharpness is set to -1. it equivalent to it not being set to anything (and work as vanilla on default configuration)
|
|
||||||
minecraft:sharpness: -1
|
|
||||||
# If uncommented. 2 unbreaking II book would not give an unbreaking III book. but unbreaking III book can still be applied
|
|
||||||
# minecraft:unbreaking: 2
|
|
||||||
|
|
||||||
# The maximum number of enchantment an item can get. -1 for infinity
|
|
||||||
# Use eco enchant enchant_limit if present by default unless "default" is not equal to -1
|
|
||||||
enchantment_count_limit:
|
|
||||||
default: -1
|
|
||||||
# Limit for specific items. example bellow is an example with stick
|
|
||||||
# Per item enchantment limit override eco enchant enchant_limit and default limit
|
|
||||||
items:
|
|
||||||
stick: -1
|
|
||||||
|
|
||||||
# Settings for lore modification
|
|
||||||
lore_edit:
|
|
||||||
book_and_quil:
|
|
||||||
# Permission is ca.lore_edit.book
|
|
||||||
use_permission: true
|
|
||||||
append:
|
|
||||||
# If adding lore using book & quil is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Cost used for every lore line added
|
|
||||||
per_line_cost: 0
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If adding the lore consume the book & quil
|
|
||||||
do_consume: false
|
|
||||||
# Allow using color code and hexadecimal color when editing lore via book & quil
|
|
||||||
#
|
|
||||||
# Color code are prefixed by "&" and hexadecimal color by "#"
|
|
||||||
# Color code will not be applied if it colors nothing. "&&" can be used to write "&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
#
|
|
||||||
# Note that currently minimessage would disable hex code when adding color
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
use_cost: 0
|
|
||||||
|
|
||||||
remove:
|
|
||||||
# If removing lore using book & quil is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Cost used for every lore line removed
|
|
||||||
per_line_cost: 0
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If removing the lore consume the book & quil
|
|
||||||
do_consume: false
|
|
||||||
# Cost of replacing colors
|
|
||||||
remove_color_cost: 0
|
|
||||||
# Allowed some color and tags to be reverted to plain text
|
|
||||||
# Custom anvil will prioritise format that result is a smaller resulting text
|
|
||||||
# Note that not allowing certain format will lead to some lost of color or tags.
|
|
||||||
# If configuration are exact as append appending this book should result in the exact same color
|
|
||||||
#
|
|
||||||
# Color code will be prefixed by "&" and hexadecimal color by "#".
|
|
||||||
# If color code is allowed, "&" in the text will get converted to "&&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
|
|
||||||
paper:
|
|
||||||
# Permission is ca.lore_edit.paper
|
|
||||||
use_permission: true
|
|
||||||
# what order should the lines should get added/removed (start/end, if invalid or not present will be end)
|
|
||||||
order: end
|
|
||||||
|
|
||||||
append_line:
|
|
||||||
# If adding lore line using paper is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If adding the lore line consume the paper
|
|
||||||
do_consume: false
|
|
||||||
# Allow using color code and hexadecimal color when editing lore via book & quil
|
|
||||||
#
|
|
||||||
# Color code are prefixed by "&" and hexadecimal color by "#"
|
|
||||||
# Color code will not be applied if it colors nothing. "&&" can be used to write "&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
#
|
|
||||||
# Note that currently minimessage would disable hex code when adding color
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
color_use_cost: 0
|
|
||||||
use_cost: 0
|
|
||||||
|
|
||||||
remove_line:
|
|
||||||
# If removing lore line using paper is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If removing the lore line consume the paper
|
|
||||||
do_consume: false
|
|
||||||
# Cost of replacing colors
|
|
||||||
remove_color_cost: 0
|
|
||||||
# Allowed some color and tags to be reverted to plain text
|
|
||||||
# Custom anvil will prioritise format that result is a smaller resulting text
|
|
||||||
# Note that not allowing certain format will lead to some lost of color or tags.
|
|
||||||
# If configuration are exact as append appending this paper should result in the exact same color
|
|
||||||
#
|
|
||||||
# Color code will be prefixed by "&" and hexadecimal color by "#".
|
|
||||||
# If color code is allowed, "&" in the text will get converted to "&&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
|
|
||||||
# Allow to replace the xp cost by a monetary cost
|
|
||||||
# If enabled it will not be bound to the experience level limits
|
|
||||||
#
|
|
||||||
# It also requires to enable dialog rename (set "enable_dialog_rename: false" a bit higher)
|
|
||||||
# If dialog rename permission is enabled and player do not have the permission merge will fall back to vanilla xp cost
|
|
||||||
#
|
|
||||||
# If you are using custom craft I recommend using Linear Xp Cost with Exact Linear Xp as normal Xp Cost will act "weird"
|
|
||||||
# But Linear Xp will act as 1$ time global multiplier. In other word: like you expect
|
|
||||||
#
|
|
||||||
# As this feature require dialog rename, it can only be enabled starting with paper 1.21.6 and later
|
|
||||||
monetary_cost:
|
|
||||||
enabled: false
|
|
||||||
# If using vault unlocked this allow to specify what currency should be used for anvil usage
|
|
||||||
# default being the default currency
|
|
||||||
currency: default
|
|
||||||
# multiply the anvil cost by a value to allow to have price a big bigger than like 40
|
|
||||||
multipliers:
|
|
||||||
# global multipliers. all usage type will be multiplied by this value
|
|
||||||
global: 1.0
|
|
||||||
# usage specific type. it will only apply for specific xp "reason"
|
|
||||||
enchantment: 1.0 # related to enchantments level
|
|
||||||
repair: 1.0 # for repairing via unit repair (per unit)
|
|
||||||
rename: 1.0 # for renaming the item
|
|
||||||
lore_edit: 1.0 # for changing the lore of the item (only if lore edit is enabled)
|
|
||||||
work_penalty: 1.0 # for work penalty (aka use penalty)
|
|
||||||
recipe: 1.0 # for custom anvil recipe cost
|
|
||||||
|
|
||||||
# Whether to show debug logging
|
|
||||||
debug_log: false
|
|
||||||
|
|
||||||
# Whether to show verbose debug logging
|
|
||||||
debug_log_verbose: false
|
|
||||||
|
|
||||||
configVersion: 1.15.5
|
|
||||||
lowMinecraftVersion: 1.21.11
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
# ----------------------------------------------------
|
|
||||||
# This config file is to store custom craft
|
|
||||||
# It is recommended to use the in game config editor for this configuration.
|
|
||||||
# /customanvilconfig With ca.config.edit permission
|
|
||||||
# ----------------------------------------------------
|
|
||||||
|
|
@ -1,398 +0,0 @@
|
||||||
#
|
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
|
||||||
#
|
|
||||||
|
|
||||||
# material conflicts
|
|
||||||
#
|
|
||||||
# If you want to edit this file:
|
|
||||||
# - A conflict will apply to every item except if in one of the notAffectedGroups group
|
|
||||||
# - the conflict will count only if the user try to combine at least as
|
|
||||||
# many conflicting enchantment as "maxEnchantmentBeforeConflict"
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# ----------------------------------------------------
|
|
||||||
# These restriction are about not allowing enchantment
|
|
||||||
# on illegal items
|
|
||||||
# ----------------------------------------------------
|
|
||||||
|
|
||||||
restriction_aqua_affinity:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:aqua_affinity
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- helmets
|
|
||||||
|
|
||||||
restriction_bane_of_arthropods:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:bane_of_arthropods
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- melee_weapons
|
|
||||||
- mace
|
|
||||||
|
|
||||||
restriction_blast_protection:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:blast_protection
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- armors
|
|
||||||
|
|
||||||
restriction_channeling:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:channeling
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- trident
|
|
||||||
|
|
||||||
restriction_binding_curse:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:binding_curse
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- wearable
|
|
||||||
|
|
||||||
restriction_vanishing_curse:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:vanishing_curse
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- can_vanish
|
|
||||||
|
|
||||||
restriction_depth_strider:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:depth_strider
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- boots
|
|
||||||
|
|
||||||
restriction_efficiency:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:efficiency
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- tools
|
|
||||||
- shears
|
|
||||||
|
|
||||||
restriction_feather_falling:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:feather_falling
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- boots
|
|
||||||
|
|
||||||
restriction_fire_aspect:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:fire_aspect
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- swords
|
|
||||||
- mace
|
|
||||||
- spears
|
|
||||||
|
|
||||||
restriction_fire_protection:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:fire_protection
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- armors
|
|
||||||
|
|
||||||
restriction_flame:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:flame
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- bow
|
|
||||||
|
|
||||||
restriction_fortune:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:fortune
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- tools
|
|
||||||
|
|
||||||
restriction_frost_walker:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:frost_walker
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- boots
|
|
||||||
|
|
||||||
restriction_impaling:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:impaling
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- trident
|
|
||||||
|
|
||||||
restriction_infinity:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:infinity
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- bow
|
|
||||||
|
|
||||||
restriction_knockback:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:knockback
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- swords
|
|
||||||
- spears
|
|
||||||
|
|
||||||
restriction_looting:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:looting
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- swords
|
|
||||||
- spears
|
|
||||||
|
|
||||||
restriction_loyalty:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:loyalty
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- trident
|
|
||||||
|
|
||||||
restriction_luck_of_the_sea:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:luck_of_the_sea
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- fishing_rod
|
|
||||||
|
|
||||||
restriction_lure:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:lure
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- fishing_rod
|
|
||||||
|
|
||||||
restriction_mending:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:mending
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- can_unbreak
|
|
||||||
|
|
||||||
restriction_minecraft_multishot:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:multishot
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- crossbow
|
|
||||||
|
|
||||||
restriction_piercing:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:piercing
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- crossbow
|
|
||||||
|
|
||||||
restriction_power:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:power
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- bow
|
|
||||||
|
|
||||||
restriction_projectile_protection:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:projectile_protection
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- armors
|
|
||||||
|
|
||||||
restriction_protection:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:protection
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- armors
|
|
||||||
|
|
||||||
restriction_punch:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:punch
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- bow
|
|
||||||
|
|
||||||
restriction_quick_charge:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:quick_charge
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- crossbow
|
|
||||||
|
|
||||||
restriction_respiration:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:respiration
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- helmets
|
|
||||||
|
|
||||||
restriction_riptide:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:riptide
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- trident
|
|
||||||
|
|
||||||
restriction_sharpness:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:sharpness
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- melee_weapons
|
|
||||||
|
|
||||||
restriction__silk_touch:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:silk_touch
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- tools
|
|
||||||
|
|
||||||
restriction_smite:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:smite
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- melee_weapons
|
|
||||||
- mace
|
|
||||||
|
|
||||||
restriction_soul_speed:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:soul_speed
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- boots
|
|
||||||
|
|
||||||
restriction_sweeping_edge:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:sweeping
|
|
||||||
- minecraft:sweeping_edge
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- swords
|
|
||||||
|
|
||||||
# Do not exist in 1.18, that mean useInFuture will be set to true
|
|
||||||
# useInFuture set to true also mean it will not warn if there is an issue
|
|
||||||
restriction_swift_sneak:
|
|
||||||
useInFuture: true
|
|
||||||
enchantments:
|
|
||||||
- minecraft:swift_sneak
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- leggings
|
|
||||||
|
|
||||||
restriction_thorns:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:thorns
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- armors
|
|
||||||
|
|
||||||
restriction__unbreaking:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:unbreaking
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- can_unbreak
|
|
||||||
|
|
||||||
# ----------------------------------------------------
|
|
||||||
# Now we have conflicts about enchantment Incompatibility
|
|
||||||
# We just filtered what item enchantments can be applied
|
|
||||||
# notAffectedGroups is empty as we don't want anything to not respect theses rules
|
|
||||||
# maxEnchantmentBeforeConflict is set to 1 to only have 1 on those enchantment available
|
|
||||||
# ----------------------------------------------------
|
|
||||||
|
|
||||||
sword_enchant_conflict:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:bane_of_arthropods
|
|
||||||
- minecraft:smite
|
|
||||||
- minecraft:sharpness
|
|
||||||
- minecraft:density
|
|
||||||
- minecraft:breach
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
protection_enchant_conflict:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:blast_protection
|
|
||||||
- minecraft:fire_protection
|
|
||||||
- minecraft:projectile_protection
|
|
||||||
- minecraft:protection
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
trident_conflict1:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:channeling
|
|
||||||
- minecraft:riptide
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
trident_conflict2:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:loyalty
|
|
||||||
- minecraft:riptide
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
boot_conflict:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:depth_strider
|
|
||||||
- minecraft:frost_walker
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
tool_conflict:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:fortune
|
|
||||||
- minecraft:silk_touch
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
bow_conflict:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:mending
|
|
||||||
- minecraft:infinity
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
crossbow_conflict:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:multishot
|
|
||||||
- minecraft:piercing
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
restriction_density:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:density
|
|
||||||
notAffectedGroups:
|
|
||||||
- mace
|
|
||||||
- enchanted_book
|
|
||||||
restriction_breach:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:breach
|
|
||||||
notAffectedGroups:
|
|
||||||
- mace
|
|
||||||
- enchanted_book
|
|
||||||
restriction_wind_burst:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:wind_burst
|
|
||||||
notAffectedGroups:
|
|
||||||
- mace
|
|
||||||
- enchanted_book
|
|
||||||
restriction_lunge:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:lunge
|
|
||||||
notAffectedGroups:
|
|
||||||
- spears
|
|
||||||
- enchanted_book
|
|
||||||
|
|
||||||
# ----------------------------------------------------
|
|
||||||
# Bellow is for custom conflicts.
|
|
||||||
# This is also where conflict create from the gui will be placed.
|
|
||||||
# ----------------------------------------------------
|
|
||||||
|
|
@ -1,247 +0,0 @@
|
||||||
#
|
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
|
||||||
#
|
|
||||||
|
|
||||||
# Please note this config use spigot material names.
|
|
||||||
# It should match minecraft name in most case, maybe every case, but I can't be sure
|
|
||||||
# In case there an issue with material name, you can found them here:
|
|
||||||
# https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html
|
|
||||||
|
|
||||||
# An empty Exclude group exclude nothing, so it contain everything
|
|
||||||
everything:
|
|
||||||
type: exclude
|
|
||||||
|
|
||||||
# An empty include group will include nothing
|
|
||||||
nothing:
|
|
||||||
type: include
|
|
||||||
|
|
||||||
# This group is an example of a group including only stone and polished granite
|
|
||||||
example_include:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- stone
|
|
||||||
- polished_granite
|
|
||||||
|
|
||||||
# This group contain everything except polished granite and elements of example_include
|
|
||||||
example_exclude:
|
|
||||||
type: exclude
|
|
||||||
items:
|
|
||||||
- polished_granite
|
|
||||||
groups:
|
|
||||||
- example_include
|
|
||||||
|
|
||||||
# Default configuration should be vanilla enchantment conflict group
|
|
||||||
# there may have error, if you find one you can fix it !
|
|
||||||
# https://minecraft.fandom.com/wiki/Enchanting
|
|
||||||
|
|
||||||
swords:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- wooden_sword
|
|
||||||
- stone_sword
|
|
||||||
- iron_sword
|
|
||||||
- diamond_sword
|
|
||||||
- golden_sword
|
|
||||||
- netherite_sword
|
|
||||||
- copper_sword
|
|
||||||
|
|
||||||
axes:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- wooden_axe
|
|
||||||
- stone_axe
|
|
||||||
- iron_axe
|
|
||||||
- diamond_axe
|
|
||||||
- golden_axe
|
|
||||||
- netherite_axe
|
|
||||||
- copper_axe
|
|
||||||
|
|
||||||
melee_weapons:
|
|
||||||
type: include
|
|
||||||
groups:
|
|
||||||
- swords
|
|
||||||
- axes
|
|
||||||
- spears
|
|
||||||
|
|
||||||
helmets:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- leather_helmet
|
|
||||||
- chainmail_helmet
|
|
||||||
- iron_helmet
|
|
||||||
- diamond_helmet
|
|
||||||
- golden_helmet
|
|
||||||
- netherite_helmet
|
|
||||||
- turtle_helmet
|
|
||||||
- copper_helmet
|
|
||||||
|
|
||||||
chestplate:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- leather_chestplate
|
|
||||||
- chainmail_chestplate
|
|
||||||
- iron_chestplate
|
|
||||||
- diamond_chestplate
|
|
||||||
- golden_chestplate
|
|
||||||
- netherite_chestplate
|
|
||||||
- copper_chestplate
|
|
||||||
|
|
||||||
leggings:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- leather_leggings
|
|
||||||
- chainmail_leggings
|
|
||||||
- iron_leggings
|
|
||||||
- diamond_leggings
|
|
||||||
- golden_leggings
|
|
||||||
- netherite_leggings
|
|
||||||
- copper_leggings
|
|
||||||
|
|
||||||
boots:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- leather_boots
|
|
||||||
- chainmail_boots
|
|
||||||
- iron_boots
|
|
||||||
- diamond_boots
|
|
||||||
- golden_boots
|
|
||||||
- netherite_boots
|
|
||||||
- copper_boots
|
|
||||||
|
|
||||||
armors:
|
|
||||||
type: include
|
|
||||||
groups:
|
|
||||||
- helmets
|
|
||||||
- chestplate
|
|
||||||
- leggings
|
|
||||||
- boots
|
|
||||||
|
|
||||||
wearable:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- elytra
|
|
||||||
- carved_pumpkin
|
|
||||||
- skeleton_skull
|
|
||||||
- wither_skeleton_skull
|
|
||||||
- zombie_head
|
|
||||||
- player_head
|
|
||||||
- creeper_head
|
|
||||||
- dragon_head
|
|
||||||
- piglin_head
|
|
||||||
groups:
|
|
||||||
- armors
|
|
||||||
|
|
||||||
pickaxes:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- wooden_pickaxe
|
|
||||||
- stone_pickaxe
|
|
||||||
- iron_pickaxe
|
|
||||||
- diamond_pickaxe
|
|
||||||
- golden_pickaxe
|
|
||||||
- netherite_pickaxe
|
|
||||||
- copper_pickaxe
|
|
||||||
|
|
||||||
shovels:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- wooden_shovel
|
|
||||||
- stone_shovel
|
|
||||||
- iron_shovel
|
|
||||||
- diamond_shovel
|
|
||||||
- golden_shovel
|
|
||||||
- netherite_shovel
|
|
||||||
- copper_shovel
|
|
||||||
|
|
||||||
hoes:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- wooden_hoe
|
|
||||||
- stone_hoe
|
|
||||||
- iron_hoe
|
|
||||||
- diamond_hoe
|
|
||||||
- golden_hoe
|
|
||||||
- netherite_hoe
|
|
||||||
- copper_hoe
|
|
||||||
|
|
||||||
tools:
|
|
||||||
type: include
|
|
||||||
groups:
|
|
||||||
- pickaxes
|
|
||||||
- shovels
|
|
||||||
- hoes
|
|
||||||
- axes
|
|
||||||
|
|
||||||
enchanted_book:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- enchanted_book
|
|
||||||
|
|
||||||
trident:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- trident
|
|
||||||
|
|
||||||
bow:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- bow
|
|
||||||
|
|
||||||
crossbow:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- crossbow
|
|
||||||
|
|
||||||
fishing_rod:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- fishing_rod
|
|
||||||
|
|
||||||
shears:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- shears
|
|
||||||
|
|
||||||
can_unbreak:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- elytra
|
|
||||||
- flint_and_steel
|
|
||||||
- shield
|
|
||||||
- carrot_on_a_stick
|
|
||||||
- warped_fungus_on_a_stick
|
|
||||||
- brush
|
|
||||||
groups:
|
|
||||||
- melee_weapons
|
|
||||||
- tools
|
|
||||||
- armors
|
|
||||||
- trident
|
|
||||||
- bow
|
|
||||||
- crossbow
|
|
||||||
- fishing_rod
|
|
||||||
- shears
|
|
||||||
- mace
|
|
||||||
|
|
||||||
can_vanish:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- compass
|
|
||||||
groups:
|
|
||||||
- wearable
|
|
||||||
- can_unbreak
|
|
||||||
mace:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- mace
|
|
||||||
spears:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- wooden_spear
|
|
||||||
- golden_spear
|
|
||||||
- stone_spear
|
|
||||||
- copper_spear
|
|
||||||
- iron_spear
|
|
||||||
- diamond_spear
|
|
||||||
- netherite_spear
|
|
||||||
|
|
||||||
|
|
@ -1,220 +0,0 @@
|
||||||
#
|
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
|
||||||
#
|
|
||||||
|
|
||||||
# Unit repair configuration
|
|
||||||
#
|
|
||||||
# This configuration is to make custom unit repair
|
|
||||||
# A unit repair is, for example, a diamond to repair a diamond sword
|
|
||||||
# In vanilla, a unit repair 25% of object durability
|
|
||||||
# you can make a custom value here
|
|
||||||
#
|
|
||||||
# Item name should NOT combine caps and no caps (example: Stone)
|
|
||||||
|
|
||||||
# Default value if the config is an invalid value (value <= 0 )
|
|
||||||
# If value > 1 it will be treated as being = 1
|
|
||||||
default_repair_amount: 0.25
|
|
||||||
|
|
||||||
# You can add custom unit repair
|
|
||||||
# The example bellow make a shield repaired by 10% by sticks
|
|
||||||
|
|
||||||
# stick:
|
|
||||||
# shield: 0.10
|
|
||||||
|
|
||||||
|
|
||||||
# Vanilla unit repair group is bellow
|
|
||||||
diamond:
|
|
||||||
diamond_helmet: 0.25
|
|
||||||
diamond_chestplate: 0.25
|
|
||||||
diamond_leggings: 0.25
|
|
||||||
diamond_boots: 0.25
|
|
||||||
diamond_sword: 0.25
|
|
||||||
diamond_pickaxe: 0.25
|
|
||||||
diamond_axe: 0.25
|
|
||||||
diamond_shovel: 0.25
|
|
||||||
diamond_hoe: 0.25
|
|
||||||
diamond_spear: 0.25
|
|
||||||
|
|
||||||
netherite_ingot:
|
|
||||||
netherite_helmet: 0.25
|
|
||||||
netherite_chestplate: 0.25
|
|
||||||
netherite_leggings: 0.25
|
|
||||||
netherite_boots: 0.25
|
|
||||||
netherite_sword: 0.25
|
|
||||||
netherite_pickaxe: 0.25
|
|
||||||
netherite_axe: 0.25
|
|
||||||
netherite_shovel: 0.25
|
|
||||||
netherite_hoe: 0.25
|
|
||||||
netherite_spear: 0.25
|
|
||||||
|
|
||||||
gold_ingot:
|
|
||||||
golden_helmet: 0.25
|
|
||||||
golden_chestplate: 0.25
|
|
||||||
golden_leggings: 0.25
|
|
||||||
golden_boots: 0.25
|
|
||||||
golden_sword: 0.25
|
|
||||||
golden_pickaxe: 0.25
|
|
||||||
golden_axe: 0.25
|
|
||||||
golden_shovel: 0.25
|
|
||||||
golden_hoe: 0.25
|
|
||||||
golden_spear: 0.25
|
|
||||||
|
|
||||||
iron_ingot:
|
|
||||||
iron_helmet: 0.25
|
|
||||||
iron_chestplate: 0.25
|
|
||||||
iron_leggings: 0.25
|
|
||||||
iron_boots: 0.25
|
|
||||||
iron_sword: 0.25
|
|
||||||
iron_pickaxe: 0.25
|
|
||||||
iron_axe: 0.25
|
|
||||||
iron_shovel: 0.25
|
|
||||||
iron_hoe: 0.25
|
|
||||||
iron_spear: 0.25
|
|
||||||
|
|
||||||
cobblestone:
|
|
||||||
stone_sword: 0.25
|
|
||||||
stone_pickaxe: 0.25
|
|
||||||
stone_axe: 0.25
|
|
||||||
stone_shovel: 0.25
|
|
||||||
stone_hoe: 0.25
|
|
||||||
stone_spear: 0.25
|
|
||||||
|
|
||||||
cobbled_deepslate:
|
|
||||||
stone_sword: 0.25
|
|
||||||
stone_pickaxe: 0.25
|
|
||||||
stone_axe: 0.25
|
|
||||||
stone_shovel: 0.25
|
|
||||||
stone_hoe: 0.25
|
|
||||||
stone_spear: 0.25
|
|
||||||
|
|
||||||
blackstone:
|
|
||||||
stone_sword: 0.25
|
|
||||||
stone_pickaxe: 0.25
|
|
||||||
stone_axe: 0.25
|
|
||||||
stone_shovel: 0.25
|
|
||||||
stone_hoe: 0.25
|
|
||||||
|
|
||||||
leather:
|
|
||||||
leather_helmet: 0.25
|
|
||||||
leather_chestplate: 0.25
|
|
||||||
leather_leggings: 0.25
|
|
||||||
leather_boots: 0.25
|
|
||||||
|
|
||||||
phantom_membrane:
|
|
||||||
elytra: 0.25
|
|
||||||
|
|
||||||
scute:
|
|
||||||
turtle_helmet: 0.25
|
|
||||||
|
|
||||||
oak_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
wooden_spear: 0.25
|
|
||||||
|
|
||||||
spruce_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
wooden_spear: 0.25
|
|
||||||
|
|
||||||
birch_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
wooden_spear: 0.25
|
|
||||||
|
|
||||||
jungle_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
wooden_spear: 0.25
|
|
||||||
|
|
||||||
acacia_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
wooden_spear: 0.25
|
|
||||||
|
|
||||||
dark_oak_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
wooden_spear: 0.25
|
|
||||||
|
|
||||||
mangrove_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
wooden_spear: 0.25
|
|
||||||
|
|
||||||
cherry_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
wooden_spear: 0.25
|
|
||||||
|
|
||||||
bamboo_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
wooden_spear: 0.25
|
|
||||||
|
|
||||||
crimson_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
wooden_spear: 0.25
|
|
||||||
|
|
||||||
warped_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
wooden_spear: 0.25
|
|
||||||
breeze_rod:
|
|
||||||
mace: 0.25
|
|
||||||
copper_ingot:
|
|
||||||
copper_helmet: 0.25
|
|
||||||
copper_chestplate: 0.25
|
|
||||||
copper_leggings: 0.25
|
|
||||||
copper_boots: 0.25
|
|
||||||
copper_pickaxe: 0.25
|
|
||||||
copper_shovel: 0.25
|
|
||||||
copper_hoe: 0.25
|
|
||||||
copper_axe: 0.25
|
|
||||||
copper_sword: 0.25
|
|
||||||
copper_spear: 0.25
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
### Default Plugin's Configurations For 1.21.9
|
|
||||||
- [config.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.9/config.yml)
|
|
||||||
- [enchant_conflict.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.9/enchant_conflict.yml)
|
|
||||||
- [item_groups.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.9/item_groups.yml)
|
|
||||||
- [unit_repair_item.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.9/unit_repair_item.yml)
|
|
||||||
- [custom_recipes.yml](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.9/custom_recipes.yml)
|
|
||||||
|
|
@ -1,479 +0,0 @@
|
||||||
#
|
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
|
||||||
#
|
|
||||||
|
|
||||||
# What service of metric should custom anvil use
|
|
||||||
# Custom anvil collect generic information like server minecraft version, type, etc...
|
|
||||||
# It can also collect error information if error is happening (currently faststats only)
|
|
||||||
# It can also be disabled
|
|
||||||
# Please refer to README for public metric link
|
|
||||||
# Possible options: auto, bstat, faststats, disabled (auto by default)
|
|
||||||
metric_type: auto
|
|
||||||
|
|
||||||
# Allow to report errors made caused by this plugin (only for faststats)
|
|
||||||
# This allows me to fix potentials issue that I'm not aware of
|
|
||||||
# Accept true or false (true by default)
|
|
||||||
metric_collect_errors: true
|
|
||||||
|
|
||||||
# All anvil cost will be capped to limit_repair_value if enabled.
|
|
||||||
#
|
|
||||||
# In other words:
|
|
||||||
# For any anvil cost greater than limit_repair_value, Cost will be set to limit_repair_value.
|
|
||||||
limit_repair_cost: false
|
|
||||||
|
|
||||||
# Max cost value the Anvil can get to.
|
|
||||||
#
|
|
||||||
# Valid values include 0 to 1000.
|
|
||||||
# Cost will be displayed as "Too Expensive":
|
|
||||||
# - If Cost is above 39
|
|
||||||
# - And replace_too_expensive is disabled (false)
|
|
||||||
limit_repair_value: 39
|
|
||||||
|
|
||||||
# Whether the anvil's cost limit should be removed entirely.
|
|
||||||
#
|
|
||||||
# The anvil will still visually display "Too Expensive" if "replace_too_expensive" is disabled
|
|
||||||
# However, the action will be completable if xp requirement is meet.
|
|
||||||
remove_repair_limit: false
|
|
||||||
|
|
||||||
# Whenever anvil cost is above 39 should display the true price and not "Too Expensive".
|
|
||||||
#
|
|
||||||
# However, when bypassing "Too Expensive", anvil price will be displayed as Green.
|
|
||||||
# If the action is not completable, the cost will still be displayed as "Too expensive".
|
|
||||||
# That mean you also need to change other settings like remove_repair_limit or limit_repair_cost.
|
|
||||||
#
|
|
||||||
# Require ProtocoLib.
|
|
||||||
replace_too_expensive: false
|
|
||||||
|
|
||||||
# XP Level amount added to the anvil when the item is repaired by another item of the same type
|
|
||||||
#
|
|
||||||
# Valid values include 0 to 1000
|
|
||||||
item_repair_cost: 2
|
|
||||||
|
|
||||||
# XP Level amount added to the anvil when the item is renamed
|
|
||||||
#
|
|
||||||
# Valid values include 0 to 1000
|
|
||||||
item_rename_cost: 1
|
|
||||||
|
|
||||||
# XP Level amount added to the anvil when the item is repaired by an "unit"
|
|
||||||
# For example: a Diamond on a Diamond Sword
|
|
||||||
# What's considered unit for what can be edited on the unit repair configuration.
|
|
||||||
#
|
|
||||||
# Valid values include 0 to 1000
|
|
||||||
unit_repair_cost: 1
|
|
||||||
|
|
||||||
# XP Level amount added to the anvil when a sacrifice enchantment
|
|
||||||
# conflict with one of the left item enchantment
|
|
||||||
#
|
|
||||||
# Valid values include 0 to 1000
|
|
||||||
sacrifice_illegal_enchant_cost: 1
|
|
||||||
|
|
||||||
# Allow using color code and hexadecimal color.
|
|
||||||
#
|
|
||||||
# Color code are prefixed by "&" and hexadecimal color by "#".
|
|
||||||
# Color code will not be applied if it colors nothing. "&&" can be used to write "&".
|
|
||||||
# For minimessage search for minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
allow_color_code: false
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: false
|
|
||||||
|
|
||||||
# This enables restricting color code for player having specific permission
|
|
||||||
# It requires allow_color_code enabled for... obvious reasons
|
|
||||||
#
|
|
||||||
# For example: if player want to use "&aHello" it will be required that the player has
|
|
||||||
# the permission "ca.color.code.a" as he used the color code "a"
|
|
||||||
# In general permission to give to the player is "ca.color.code.[code]"
|
|
||||||
# where [code] is the color code you wish to allow the player
|
|
||||||
#
|
|
||||||
# It is kinda of useless when minimessage is supported as players would be able to bypass
|
|
||||||
# that using the equivalent minimessage tag
|
|
||||||
per_color_code_permission: false
|
|
||||||
|
|
||||||
# Toggle if color should only be applicable if the player a certain permission.
|
|
||||||
#
|
|
||||||
# permission are "ca.color.code" for use of color code and "ca.color.hex" for use of hexadecimal color.
|
|
||||||
permission_needed_for_color: true
|
|
||||||
|
|
||||||
# Xp cost if the player use color in the items name on rename.
|
|
||||||
#
|
|
||||||
# Valid values include 0 to 1000.
|
|
||||||
use_of_color_cost: 0
|
|
||||||
|
|
||||||
# Dialogue rename menu make use of dialog menu to allow bigger rename
|
|
||||||
# You can also change the maximum size and set it to -1 or less for maximum
|
|
||||||
#
|
|
||||||
# This feature only work on paper 1.21.7 or later
|
|
||||||
#
|
|
||||||
# At the moment only english is available for this menu... sorry !
|
|
||||||
#
|
|
||||||
# CustomAnvil use "ca.rename.dialog" when permission
|
|
||||||
enable_dialog_rename: false
|
|
||||||
dialog_rename_max_size: 256
|
|
||||||
permission_needed_for_dialog_rename: false
|
|
||||||
|
|
||||||
# This allows custom anvil to not "guess" the text used for rename but store it in the item
|
|
||||||
# It will make item stackable only and only if it had used the same rename text
|
|
||||||
#
|
|
||||||
# For practical reason. this only work when dialog rename is enabled
|
|
||||||
dialog_rename_keep_user_text: true
|
|
||||||
|
|
||||||
# Override limits for specific enchants
|
|
||||||
#
|
|
||||||
# Enchantments not listed here will use the value of default_limit
|
|
||||||
#
|
|
||||||
# Overrides provided default from aqua_affinity to depth_strider won't change effect with extra levels
|
|
||||||
#
|
|
||||||
# Valid range of 0 - 255 for each enchantment
|
|
||||||
# -1 mean keep default
|
|
||||||
enchant_limits:
|
|
||||||
minecraft:aqua_affinity: 1
|
|
||||||
minecraft:binding_curse: 1
|
|
||||||
minecraft:channeling: 1
|
|
||||||
minecraft:flame: 1
|
|
||||||
minecraft:infinity: 1
|
|
||||||
minecraft:mending: 1
|
|
||||||
minecraft:multishot: 1
|
|
||||||
minecraft:silk_touch: 1
|
|
||||||
minecraft:vanishing_curse: 1
|
|
||||||
minecraft:depth_strider: 3 # anything more than 3 is treated as 3 by the game
|
|
||||||
minecraft:protection: 4
|
|
||||||
minecraft:fire_protection: 4
|
|
||||||
minecraft:blast_protection: 4
|
|
||||||
minecraft:projectile_protection: 4
|
|
||||||
minecraft:feather_falling: 4
|
|
||||||
minecraft:thorns: 3
|
|
||||||
minecraft:respiration: 3
|
|
||||||
minecraft:sharpness: 5
|
|
||||||
minecraft:smite: 5
|
|
||||||
minecraft:bane_of_arthropods: 5
|
|
||||||
minecraft:knockback: 2
|
|
||||||
minecraft:fire_aspect: 2
|
|
||||||
minecraft:looting: 3
|
|
||||||
minecraft:sweeping: 3
|
|
||||||
minecraft:sweeping_edge: 3
|
|
||||||
minecraft:efficiency: 5
|
|
||||||
minecraft:unbreaking: 3
|
|
||||||
minecraft:fortune: 3
|
|
||||||
minecraft:power: 5
|
|
||||||
minecraft:punch: 2
|
|
||||||
minecraft:luck_of_the_sea: 3
|
|
||||||
minecraft:lure: 3
|
|
||||||
minecraft:frost_walker: 2
|
|
||||||
minecraft:impaling: 5
|
|
||||||
minecraft:riptide: 3
|
|
||||||
minecraft:loyalty: 3
|
|
||||||
minecraft:piercing: 4
|
|
||||||
minecraft:quick_charge: 3
|
|
||||||
minecraft:soul_speed: 3
|
|
||||||
minecraft:swift_sneak: 3
|
|
||||||
minecraft:density: 5
|
|
||||||
minecraft:breach: 4
|
|
||||||
minecraft:wind_burst: 3
|
|
||||||
|
|
||||||
# Multipliers used to calculate the enchantment's value in repair/combining
|
|
||||||
#
|
|
||||||
# Values here are pulled from the fandom wiki:
|
|
||||||
# https://minecraft.fandom.com/wiki/Anvil_mechanics#Costs_for_combining_enchantments
|
|
||||||
#
|
|
||||||
# If an enchantment is missing values here, or is less than 0, it will default to 0
|
|
||||||
#
|
|
||||||
# Calculated as: [Enchantment lvl] * [multiplier]
|
|
||||||
#
|
|
||||||
# With default values protection 4 would have a value of 4 when
|
|
||||||
# coming from either a book (4 * 1) or an item (4 * 1)
|
|
||||||
enchant_values:
|
|
||||||
minecraft:aqua_affinity:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:bane_of_arthropods:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:binding_curse:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:blast_protection:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:channeling:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:depth_strider:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:efficiency:
|
|
||||||
item: 1
|
|
||||||
book: 1
|
|
||||||
minecraft:flame:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:feather_falling:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:fire_aspect:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:fire_protection:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:fortune:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:frost_walker:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:impaling:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:infinity:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:knockback:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:looting:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:loyalty:
|
|
||||||
item: 1
|
|
||||||
book: 1
|
|
||||||
minecraft:luck_of_the_sea:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:lure:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:mending:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:multishot:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:piercing:
|
|
||||||
item: 1
|
|
||||||
book: 1
|
|
||||||
minecraft:power:
|
|
||||||
item: 1
|
|
||||||
book: 1
|
|
||||||
minecraft:projectile_protection:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:protection:
|
|
||||||
item: 1
|
|
||||||
book: 1
|
|
||||||
minecraft:punch:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:quick_charge:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:respiration:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:riptide:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:silk_touch:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:sharpness:
|
|
||||||
item: 1
|
|
||||||
book: 1
|
|
||||||
minecraft:smite:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:soul_speed:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:swift_sneak:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:sweeping:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:sweeping_edge:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:thorns:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:unbreaking:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:vanishing_curse:
|
|
||||||
item: 8
|
|
||||||
book: 4
|
|
||||||
minecraft:density:
|
|
||||||
item: 2
|
|
||||||
book: 1
|
|
||||||
minecraft:breach:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
minecraft:wind_burst:
|
|
||||||
item: 4
|
|
||||||
book: 2
|
|
||||||
|
|
||||||
# Disable enchantment merging for level above the set value
|
|
||||||
# Enchantment merging is when, for example, 2 unbreaking II book combine to give sharpness III
|
|
||||||
# But Enchantment above this value can still be applied. following the previous example, we could still apply a unbreaking III book to a sword
|
|
||||||
# Even if disable-merge-over of unbreaking is set to 2
|
|
||||||
# -1 mean enchantment merge for this enchantment is not disabled. default to -1 if absent.
|
|
||||||
disable-merge-over:
|
|
||||||
# Sharpness is set to -1. it equivalent to it not being set to anything (and work as vanilla on default configuration)
|
|
||||||
minecraft:sharpness: -1
|
|
||||||
# If uncommented. 2 unbreaking II book would not give an unbreaking III book. but unbreaking III book can still be applied
|
|
||||||
# minecraft:unbreaking: 2
|
|
||||||
|
|
||||||
# The maximum number of enchantment an item can get. -1 for infinity
|
|
||||||
# Use eco enchant enchant_limit if present by default unless "default" is not equal to -1
|
|
||||||
enchantment_count_limit:
|
|
||||||
default: -1
|
|
||||||
# Limit for specific items. example bellow is an example with stick
|
|
||||||
# Per item enchantment limit override eco enchant enchant_limit and default limit
|
|
||||||
items:
|
|
||||||
stick: -1
|
|
||||||
|
|
||||||
# Settings for lore modification
|
|
||||||
lore_edit:
|
|
||||||
book_and_quil:
|
|
||||||
# Permission is ca.lore_edit.book
|
|
||||||
use_permission: true
|
|
||||||
append:
|
|
||||||
# If adding lore using book & quil is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Cost used for every lore line added
|
|
||||||
per_line_cost: 0
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If adding the lore consume the book & quil
|
|
||||||
do_consume: false
|
|
||||||
# Allow using color code and hexadecimal color when editing lore via book & quil
|
|
||||||
#
|
|
||||||
# Color code are prefixed by "&" and hexadecimal color by "#"
|
|
||||||
# Color code will not be applied if it colors nothing. "&&" can be used to write "&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
#
|
|
||||||
# Note that currently minimessage would disable hex code when adding color
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
|
|
||||||
remove:
|
|
||||||
# If removing lore using book & quil is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Cost used for every lore line removed
|
|
||||||
per_line_cost: 0
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If removing the lore consume the book & quil
|
|
||||||
do_consume: false
|
|
||||||
# Cost of replacing colors
|
|
||||||
remove_color_cost: 0
|
|
||||||
# Allowed some color and tags to be reverted to plain text
|
|
||||||
# Custom anvil will prioritise format that result is a smaller resulting text
|
|
||||||
# Note that not allowing certain format will lead to some lost of color or tags.
|
|
||||||
# If configuration are exact as append appending this book should result in the exact same color
|
|
||||||
#
|
|
||||||
# Color code will be prefixed by "&" and hexadecimal color by "#".
|
|
||||||
# If color code is allowed, "&" in the text will get converted to "&&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
|
|
||||||
paper:
|
|
||||||
# Permission is ca.lore_edit.paper
|
|
||||||
use_permission: true
|
|
||||||
# what order should the lines should get added/removed (start/end, if invalid or not present will be end)
|
|
||||||
order: end
|
|
||||||
|
|
||||||
append_line:
|
|
||||||
# If adding lore line using paper is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If adding the lore line consume the paper
|
|
||||||
do_consume: false
|
|
||||||
# Allow using color code and hexadecimal color when editing lore via book & quil
|
|
||||||
#
|
|
||||||
# Color code are prefixed by "&" and hexadecimal color by "#"
|
|
||||||
# Color code will not be applied if it colors nothing. "&&" can be used to write "&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
#
|
|
||||||
# Note that currently minimessage would disable hex code when adding color
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
color_use_cost: 0
|
|
||||||
|
|
||||||
remove_line:
|
|
||||||
# If removing lore line using paper is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If removing the lore line consume the paper
|
|
||||||
do_consume: false
|
|
||||||
# Cost of replacing colors
|
|
||||||
remove_color_cost: 0
|
|
||||||
# Allowed some color and tags to be reverted to plain text
|
|
||||||
# Custom anvil will prioritise format that result is a smaller resulting text
|
|
||||||
# Note that not allowing certain format will lead to some lost of color or tags.
|
|
||||||
# If configuration are exact as append appending this paper should result in the exact same color
|
|
||||||
#
|
|
||||||
# Color code will be prefixed by "&" and hexadecimal color by "#".
|
|
||||||
# If color code is allowed, "&" in the text will get converted to "&&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
|
|
||||||
# Allow to replace the xp cost by a monetary cost
|
|
||||||
# If enabled it will not be bound to the experience level limits
|
|
||||||
#
|
|
||||||
# It also requires to enable dialog rename (set "enable_dialog_rename: false" a bit higher)
|
|
||||||
# If dialog rename permission is enabled and player do not have the permission merge will fall back to vanilla xp cost
|
|
||||||
#
|
|
||||||
# If you are using custom craft I recommend using Linear Xp Cost with Exact Linear Xp as normal Xp Cost will act "weird"
|
|
||||||
# But Linear Xp will act as 1$ time global multiplier. In other word: like you expect
|
|
||||||
#
|
|
||||||
# As this feature require dialog rename, it can only be enabled starting with paper 1.21.6 and later
|
|
||||||
monetary_cost:
|
|
||||||
enabled: false
|
|
||||||
# If using vault unlocked this allow to specify what currency should be used for anvil usage
|
|
||||||
# default being the default currency
|
|
||||||
currency: default
|
|
||||||
# multiply the anvil cost by a value to allow to have price a big bigger than like 40
|
|
||||||
multipliers:
|
|
||||||
# global multipliers. all usage type will be multiplied by this value
|
|
||||||
global: 1.0
|
|
||||||
# usage specific type. it will only apply for specific xp "reason"
|
|
||||||
enchantment: 1.0 # related to enchantments level
|
|
||||||
repair: 1.0 # for repairing via unit repair (per unit)
|
|
||||||
rename: 1.0 # for renaming the item
|
|
||||||
lore_edit: 1.0 # for changing the lore of the item (only if lore edit is enabled)
|
|
||||||
work_penalty: 1.0 # for work penalty (aka use penalty)
|
|
||||||
recipe: 1.0 # for custom anvil recipe cost
|
|
||||||
|
|
||||||
# Whether to show debug logging
|
|
||||||
debug_log: false
|
|
||||||
|
|
||||||
# Whether to show verbose debug logging
|
|
||||||
debug_log_verbose: false
|
|
||||||
|
|
||||||
configVersion: 1.11.0
|
|
||||||
lowMinecraftVersion: 1.21.9
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
# ----------------------------------------------------
|
|
||||||
# This config file is to store custom craft
|
|
||||||
# It is recommended to use the in game config editor for this configuration.
|
|
||||||
# /customanvilconfig With ca.config.edit permission
|
|
||||||
# ----------------------------------------------------
|
|
||||||
|
|
@ -1,389 +0,0 @@
|
||||||
#
|
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
|
||||||
#
|
|
||||||
|
|
||||||
# material conflicts
|
|
||||||
#
|
|
||||||
# If you want to edit this file:
|
|
||||||
# - A conflict will apply to every item except if in one of the notAffectedGroups group
|
|
||||||
# - the conflict will count only if the user try to combine at least as
|
|
||||||
# many conflicting enchantment as "maxEnchantmentBeforeConflict"
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# ----------------------------------------------------
|
|
||||||
# These restriction are about not allowing enchantment
|
|
||||||
# on illegal items
|
|
||||||
# ----------------------------------------------------
|
|
||||||
|
|
||||||
restriction_aqua_affinity:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:aqua_affinity
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- helmets
|
|
||||||
|
|
||||||
restriction_bane_of_arthropods:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:bane_of_arthropods
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- melee_weapons
|
|
||||||
- mace
|
|
||||||
|
|
||||||
restriction_blast_protection:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:blast_protection
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- armors
|
|
||||||
|
|
||||||
restriction_channeling:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:channeling
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- trident
|
|
||||||
|
|
||||||
restriction_binding_curse:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:binding_curse
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- wearable
|
|
||||||
|
|
||||||
restriction_vanishing_curse:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:vanishing_curse
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- can_vanish
|
|
||||||
|
|
||||||
restriction_depth_strider:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:depth_strider
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- boots
|
|
||||||
|
|
||||||
restriction_efficiency:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:efficiency
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- tools
|
|
||||||
- shears
|
|
||||||
|
|
||||||
restriction_feather_falling:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:feather_falling
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- boots
|
|
||||||
|
|
||||||
restriction_fire_aspect:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:fire_aspect
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- swords
|
|
||||||
- mace
|
|
||||||
|
|
||||||
restriction_fire_protection:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:fire_protection
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- armors
|
|
||||||
|
|
||||||
restriction_flame:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:flame
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- bow
|
|
||||||
|
|
||||||
restriction_fortune:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:fortune
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- tools
|
|
||||||
|
|
||||||
restriction_frost_walker:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:frost_walker
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- boots
|
|
||||||
|
|
||||||
restriction_impaling:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:impaling
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- trident
|
|
||||||
|
|
||||||
restriction_infinity:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:infinity
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- bow
|
|
||||||
|
|
||||||
restriction_knockback:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:knockback
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- swords
|
|
||||||
|
|
||||||
restriction_looting:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:looting
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- swords
|
|
||||||
|
|
||||||
restriction_loyalty:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:loyalty
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- trident
|
|
||||||
|
|
||||||
restriction_luck_of_the_sea:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:luck_of_the_sea
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- fishing_rod
|
|
||||||
|
|
||||||
restriction_lure:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:lure
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- fishing_rod
|
|
||||||
|
|
||||||
restriction_mending:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:mending
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- can_unbreak
|
|
||||||
|
|
||||||
restriction_minecraft_multishot:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:multishot
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- crossbow
|
|
||||||
|
|
||||||
restriction_piercing:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:piercing
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- crossbow
|
|
||||||
|
|
||||||
restriction_power:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:power
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- bow
|
|
||||||
|
|
||||||
restriction_projectile_protection:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:projectile_protection
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- armors
|
|
||||||
|
|
||||||
restriction_protection:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:protection
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- armors
|
|
||||||
|
|
||||||
restriction_punch:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:punch
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- bow
|
|
||||||
|
|
||||||
restriction_quick_charge:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:quick_charge
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- crossbow
|
|
||||||
|
|
||||||
restriction_respiration:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:respiration
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- helmets
|
|
||||||
|
|
||||||
restriction_riptide:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:riptide
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- trident
|
|
||||||
|
|
||||||
restriction_sharpness:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:sharpness
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- melee_weapons
|
|
||||||
|
|
||||||
restriction__silk_touch:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:silk_touch
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- tools
|
|
||||||
|
|
||||||
restriction_smite:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:smite
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- melee_weapons
|
|
||||||
- mace
|
|
||||||
|
|
||||||
restriction_soul_speed:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:soul_speed
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- boots
|
|
||||||
|
|
||||||
restriction_sweeping_edge:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:sweeping
|
|
||||||
- minecraft:sweeping_edge
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- swords
|
|
||||||
|
|
||||||
# Do not exist in 1.18, that mean useInFuture will be set to true
|
|
||||||
# useInFuture set to true also mean it will not warn if there is an issue
|
|
||||||
restriction_swift_sneak:
|
|
||||||
useInFuture: true
|
|
||||||
enchantments:
|
|
||||||
- minecraft:swift_sneak
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- leggings
|
|
||||||
|
|
||||||
restriction_thorns:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:thorns
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- armors
|
|
||||||
|
|
||||||
restriction__unbreaking:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:unbreaking
|
|
||||||
notAffectedGroups:
|
|
||||||
- enchanted_book
|
|
||||||
- can_unbreak
|
|
||||||
|
|
||||||
# ----------------------------------------------------
|
|
||||||
# Now we have conflicts about enchantment Incompatibility
|
|
||||||
# We just filtered what item enchantments can be applied
|
|
||||||
# notAffectedGroups is empty as we don't want anything to not respect theses rules
|
|
||||||
# maxEnchantmentBeforeConflict is set to 1 to only have 1 on those enchantment available
|
|
||||||
# ----------------------------------------------------
|
|
||||||
|
|
||||||
sword_enchant_conflict:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:bane_of_arthropods
|
|
||||||
- minecraft:smite
|
|
||||||
- minecraft:sharpness
|
|
||||||
- minecraft:density
|
|
||||||
- minecraft:breach
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
protection_enchant_conflict:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:blast_protection
|
|
||||||
- minecraft:fire_protection
|
|
||||||
- minecraft:projectile_protection
|
|
||||||
- minecraft:protection
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
trident_conflict1:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:channeling
|
|
||||||
- minecraft:riptide
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
trident_conflict2:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:loyalty
|
|
||||||
- minecraft:riptide
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
boot_conflict:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:depth_strider
|
|
||||||
- minecraft:frost_walker
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
tool_conflict:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:fortune
|
|
||||||
- minecraft:silk_touch
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
bow_conflict:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:mending
|
|
||||||
- minecraft:infinity
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
|
|
||||||
crossbow_conflict:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:multishot
|
|
||||||
- minecraft:piercing
|
|
||||||
notAffectedGroups: []
|
|
||||||
maxEnchantmentBeforeConflict: 1
|
|
||||||
restriction_density:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:density
|
|
||||||
notAffectedGroups:
|
|
||||||
- mace
|
|
||||||
- enchanted_book
|
|
||||||
restriction_breach:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:breach
|
|
||||||
notAffectedGroups:
|
|
||||||
- mace
|
|
||||||
- enchanted_book
|
|
||||||
restriction_wind_burst:
|
|
||||||
enchantments:
|
|
||||||
- minecraft:wind_burst
|
|
||||||
notAffectedGroups:
|
|
||||||
- mace
|
|
||||||
- enchanted_book
|
|
||||||
|
|
||||||
# ----------------------------------------------------
|
|
||||||
# Bellow is for custom conflicts.
|
|
||||||
# This is also where conflict create from the gui will be placed.
|
|
||||||
# ----------------------------------------------------
|
|
||||||
|
|
@ -1,236 +0,0 @@
|
||||||
#
|
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
|
||||||
#
|
|
||||||
|
|
||||||
# Please note this config use spigot material names.
|
|
||||||
# It should match minecraft name in most case, maybe every case, but I can't be sure
|
|
||||||
# In case there an issue with material name, you can found them here:
|
|
||||||
# https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html
|
|
||||||
|
|
||||||
# An empty Exclude group exclude nothing, so it contain everything
|
|
||||||
everything:
|
|
||||||
type: exclude
|
|
||||||
|
|
||||||
# An empty include group will include nothing
|
|
||||||
nothing:
|
|
||||||
type: include
|
|
||||||
|
|
||||||
# This group is an example of a group including only stone and polished granite
|
|
||||||
example_include:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- stone
|
|
||||||
- polished_granite
|
|
||||||
|
|
||||||
# This group contain everything except polished granite and elements of example_include
|
|
||||||
example_exclude:
|
|
||||||
type: exclude
|
|
||||||
items:
|
|
||||||
- polished_granite
|
|
||||||
groups:
|
|
||||||
- example_include
|
|
||||||
|
|
||||||
# Default configuration should be vanilla enchantment conflict group
|
|
||||||
# there may have error, if you find one you can fix it !
|
|
||||||
# https://minecraft.fandom.com/wiki/Enchanting
|
|
||||||
|
|
||||||
swords:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- wooden_sword
|
|
||||||
- stone_sword
|
|
||||||
- iron_sword
|
|
||||||
- diamond_sword
|
|
||||||
- golden_sword
|
|
||||||
- netherite_sword
|
|
||||||
- copper_sword
|
|
||||||
|
|
||||||
axes:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- wooden_axe
|
|
||||||
- stone_axe
|
|
||||||
- iron_axe
|
|
||||||
- diamond_axe
|
|
||||||
- golden_axe
|
|
||||||
- netherite_axe
|
|
||||||
- copper_axe
|
|
||||||
|
|
||||||
melee_weapons:
|
|
||||||
type: include
|
|
||||||
groups:
|
|
||||||
- swords
|
|
||||||
- axes
|
|
||||||
|
|
||||||
helmets:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- leather_helmet
|
|
||||||
- chainmail_helmet
|
|
||||||
- iron_helmet
|
|
||||||
- diamond_helmet
|
|
||||||
- golden_helmet
|
|
||||||
- netherite_helmet
|
|
||||||
- turtle_helmet
|
|
||||||
- copper_helmet
|
|
||||||
|
|
||||||
chestplate:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- leather_chestplate
|
|
||||||
- chainmail_chestplate
|
|
||||||
- iron_chestplate
|
|
||||||
- diamond_chestplate
|
|
||||||
- golden_chestplate
|
|
||||||
- netherite_chestplate
|
|
||||||
- copper_chestplate
|
|
||||||
|
|
||||||
leggings:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- leather_leggings
|
|
||||||
- chainmail_leggings
|
|
||||||
- iron_leggings
|
|
||||||
- diamond_leggings
|
|
||||||
- golden_leggings
|
|
||||||
- netherite_leggings
|
|
||||||
- copper_leggings
|
|
||||||
|
|
||||||
boots:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- leather_boots
|
|
||||||
- chainmail_boots
|
|
||||||
- iron_boots
|
|
||||||
- diamond_boots
|
|
||||||
- golden_boots
|
|
||||||
- netherite_boots
|
|
||||||
- copper_boots
|
|
||||||
|
|
||||||
armors:
|
|
||||||
type: include
|
|
||||||
groups:
|
|
||||||
- helmets
|
|
||||||
- chestplate
|
|
||||||
- leggings
|
|
||||||
- boots
|
|
||||||
|
|
||||||
wearable:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- elytra
|
|
||||||
- carved_pumpkin
|
|
||||||
- skeleton_skull
|
|
||||||
- wither_skeleton_skull
|
|
||||||
- zombie_head
|
|
||||||
- player_head
|
|
||||||
- creeper_head
|
|
||||||
- dragon_head
|
|
||||||
- piglin_head
|
|
||||||
groups:
|
|
||||||
- armors
|
|
||||||
|
|
||||||
pickaxes:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- wooden_pickaxe
|
|
||||||
- stone_pickaxe
|
|
||||||
- iron_pickaxe
|
|
||||||
- diamond_pickaxe
|
|
||||||
- golden_pickaxe
|
|
||||||
- netherite_pickaxe
|
|
||||||
- copper_pickaxe
|
|
||||||
|
|
||||||
shovels:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- wooden_shovel
|
|
||||||
- stone_shovel
|
|
||||||
- iron_shovel
|
|
||||||
- diamond_shovel
|
|
||||||
- golden_shovel
|
|
||||||
- netherite_shovel
|
|
||||||
- copper_shovel
|
|
||||||
|
|
||||||
hoes:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- wooden_hoe
|
|
||||||
- stone_hoe
|
|
||||||
- iron_hoe
|
|
||||||
- diamond_hoe
|
|
||||||
- golden_hoe
|
|
||||||
- netherite_hoe
|
|
||||||
- copper_hoe
|
|
||||||
|
|
||||||
tools:
|
|
||||||
type: include
|
|
||||||
groups:
|
|
||||||
- pickaxes
|
|
||||||
- shovels
|
|
||||||
- hoes
|
|
||||||
- axes
|
|
||||||
|
|
||||||
enchanted_book:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- enchanted_book
|
|
||||||
|
|
||||||
trident:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- trident
|
|
||||||
|
|
||||||
bow:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- bow
|
|
||||||
|
|
||||||
crossbow:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- crossbow
|
|
||||||
|
|
||||||
fishing_rod:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- fishing_rod
|
|
||||||
|
|
||||||
shears:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- shears
|
|
||||||
|
|
||||||
can_unbreak:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- elytra
|
|
||||||
- flint_and_steel
|
|
||||||
- shield
|
|
||||||
- carrot_on_a_stick
|
|
||||||
- warped_fungus_on_a_stick
|
|
||||||
- brush
|
|
||||||
groups:
|
|
||||||
- melee_weapons
|
|
||||||
- tools
|
|
||||||
- armors
|
|
||||||
- trident
|
|
||||||
- bow
|
|
||||||
- crossbow
|
|
||||||
- fishing_rod
|
|
||||||
- shears
|
|
||||||
- mace
|
|
||||||
|
|
||||||
can_vanish:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- compass
|
|
||||||
groups:
|
|
||||||
- wearable
|
|
||||||
- can_unbreak
|
|
||||||
mace:
|
|
||||||
type: include
|
|
||||||
items:
|
|
||||||
- mace
|
|
||||||
|
|
||||||
|
|
@ -1,192 +0,0 @@
|
||||||
#
|
|
||||||
# It is recommended that you use /configanvil to edit theses config.
|
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
|
||||||
#
|
|
||||||
|
|
||||||
# Unit repair configuration
|
|
||||||
#
|
|
||||||
# This configuration is to make custom unit repair
|
|
||||||
# A unit repair is, for example, a diamond to repair a diamond sword
|
|
||||||
# In vanilla, a unit repair 25% of object durability
|
|
||||||
# you can make a custom value here
|
|
||||||
#
|
|
||||||
# Item name should NOT combine caps and no caps (example: Stone)
|
|
||||||
|
|
||||||
# Default value if the config is an invalid value (value <= 0 )
|
|
||||||
# If value > 1 it will be treated as being = 1
|
|
||||||
default_repair_amount: 0.25
|
|
||||||
|
|
||||||
# You can add custom unit repair
|
|
||||||
# The example bellow make a shield repaired by 10% by sticks
|
|
||||||
|
|
||||||
# stick:
|
|
||||||
# shield: 0.10
|
|
||||||
|
|
||||||
|
|
||||||
# Vanilla unit repair group is bellow
|
|
||||||
diamond:
|
|
||||||
diamond_helmet: 0.25
|
|
||||||
diamond_chestplate: 0.25
|
|
||||||
diamond_leggings: 0.25
|
|
||||||
diamond_boots: 0.25
|
|
||||||
diamond_sword: 0.25
|
|
||||||
diamond_pickaxe: 0.25
|
|
||||||
diamond_axe: 0.25
|
|
||||||
diamond_shovel: 0.25
|
|
||||||
diamond_hoe: 0.25
|
|
||||||
|
|
||||||
netherite_ingot:
|
|
||||||
netherite_helmet: 0.25
|
|
||||||
netherite_chestplate: 0.25
|
|
||||||
netherite_leggings: 0.25
|
|
||||||
netherite_boots: 0.25
|
|
||||||
netherite_sword: 0.25
|
|
||||||
netherite_pickaxe: 0.25
|
|
||||||
netherite_axe: 0.25
|
|
||||||
netherite_shovel: 0.25
|
|
||||||
netherite_hoe: 0.25
|
|
||||||
|
|
||||||
gold_ingot:
|
|
||||||
golden_helmet: 0.25
|
|
||||||
golden_chestplate: 0.25
|
|
||||||
golden_leggings: 0.25
|
|
||||||
golden_boots: 0.25
|
|
||||||
golden_sword: 0.25
|
|
||||||
golden_pickaxe: 0.25
|
|
||||||
golden_axe: 0.25
|
|
||||||
golden_shovel: 0.25
|
|
||||||
golden_hoe: 0.25
|
|
||||||
|
|
||||||
iron_ingot:
|
|
||||||
iron_helmet: 0.25
|
|
||||||
iron_chestplate: 0.25
|
|
||||||
iron_leggings: 0.25
|
|
||||||
iron_boots: 0.25
|
|
||||||
iron_sword: 0.25
|
|
||||||
iron_pickaxe: 0.25
|
|
||||||
iron_axe: 0.25
|
|
||||||
iron_shovel: 0.25
|
|
||||||
iron_hoe: 0.25
|
|
||||||
|
|
||||||
cobblestone:
|
|
||||||
stone_sword: 0.25
|
|
||||||
stone_pickaxe: 0.25
|
|
||||||
stone_axe: 0.25
|
|
||||||
stone_shovel: 0.25
|
|
||||||
stone_hoe: 0.25
|
|
||||||
|
|
||||||
cobbled_deepslate:
|
|
||||||
stone_sword: 0.25
|
|
||||||
stone_pickaxe: 0.25
|
|
||||||
stone_axe: 0.25
|
|
||||||
stone_shovel: 0.25
|
|
||||||
stone_hoe: 0.25
|
|
||||||
|
|
||||||
blackstone:
|
|
||||||
stone_sword: 0.25
|
|
||||||
stone_pickaxe: 0.25
|
|
||||||
stone_axe: 0.25
|
|
||||||
stone_shovel: 0.25
|
|
||||||
stone_hoe: 0.25
|
|
||||||
|
|
||||||
leather:
|
|
||||||
leather_helmet: 0.25
|
|
||||||
leather_chestplate: 0.25
|
|
||||||
leather_leggings: 0.25
|
|
||||||
leather_boots: 0.25
|
|
||||||
|
|
||||||
phantom_membrane:
|
|
||||||
elytra: 0.25
|
|
||||||
|
|
||||||
scute:
|
|
||||||
turtle_helmet: 0.25
|
|
||||||
|
|
||||||
oak_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
|
|
||||||
spruce_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
|
|
||||||
birch_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
|
|
||||||
jungle_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
|
|
||||||
acacia_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
|
|
||||||
dark_oak_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
|
|
||||||
mangrove_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
|
|
||||||
cherry_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
|
|
||||||
bamboo_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
|
|
||||||
crimson_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
|
|
||||||
warped_planks:
|
|
||||||
wooden_sword: 0.25
|
|
||||||
wooden_pickaxe: 0.25
|
|
||||||
wooden_axe: 0.25
|
|
||||||
wooden_shovel: 0.25
|
|
||||||
wooden_hoe: 0.25
|
|
||||||
shield: 0.25
|
|
||||||
breeze_rod:
|
|
||||||
mace: 0.25
|
|
||||||
|
|
@ -3,19 +3,6 @@
|
||||||
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
# You can still manually edit here if you like to. but if you do, don't forget to /anvilconfigreload after you changes !
|
||||||
#
|
#
|
||||||
|
|
||||||
# What service of metric should custom anvil use
|
|
||||||
# Custom anvil collect generic information like server minecraft version, type, etc...
|
|
||||||
# It can also collect error information if error is happening (currently faststats only)
|
|
||||||
# It can also be disabled
|
|
||||||
# Please refer to README for public metric link
|
|
||||||
# Possible options: auto, bstat, faststats, disabled (auto by default)
|
|
||||||
metric_type: auto
|
|
||||||
|
|
||||||
# Allow to report errors made caused by this plugin (only for faststats)
|
|
||||||
# This allows me to fix potentials issue that I'm not aware of
|
|
||||||
# Accept true or false (true by default)
|
|
||||||
metric_collect_errors: true
|
|
||||||
|
|
||||||
# All anvil cost will be capped to limit_repair_value if enabled.
|
# All anvil cost will be capped to limit_repair_value if enabled.
|
||||||
#
|
#
|
||||||
# In other words:
|
# In other words:
|
||||||
|
|
@ -72,22 +59,8 @@ sacrifice_illegal_enchant_cost: 1
|
||||||
#
|
#
|
||||||
# Color code are prefixed by "&" and hexadecimal color by "#".
|
# Color code are prefixed by "&" and hexadecimal color by "#".
|
||||||
# Color code will not be applied if it colors nothing. "&&" can be used to write "&".
|
# Color code will not be applied if it colors nothing. "&&" can be used to write "&".
|
||||||
# For minimessage search for minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
allow_color_code: false
|
allow_color_code: false
|
||||||
allow_hexadecimal_color: false
|
allow_hexadecimal_color: false
|
||||||
allow_minimessage: false
|
|
||||||
|
|
||||||
# This enables restricting color code for player having specific permission
|
|
||||||
# It requires allow_color_code enabled for... obvious reasons
|
|
||||||
#
|
|
||||||
# For example: if player want to use "&aHello" it will be required that the player has
|
|
||||||
# the permission "ca.color.code.a" as he used the color code "a"
|
|
||||||
# In general permission to give to the player is "ca.color.code.[code]"
|
|
||||||
# where [code] is the color code you wish to allow the player
|
|
||||||
#
|
|
||||||
# It is kinda of useless when minimessage is supported as players would be able to bypass
|
|
||||||
# that using the equivalent minimessage tag
|
|
||||||
per_color_code_permission: false
|
|
||||||
|
|
||||||
# Toggle if color should only be applicable if the player a certain permission.
|
# Toggle if color should only be applicable if the player a certain permission.
|
||||||
#
|
#
|
||||||
|
|
@ -99,23 +72,22 @@ permission_needed_for_color: true
|
||||||
# Valid values include 0 to 1000.
|
# Valid values include 0 to 1000.
|
||||||
use_of_color_cost: 0
|
use_of_color_cost: 0
|
||||||
|
|
||||||
# Dialogue rename menu make use of dialog menu to allow bigger rename
|
# Work penalty increase the price for every anvil use.
|
||||||
# You can also change the maximum size and set it to -1 or less for maximum
|
# This config allow you to choose the comportment of work penalty.
|
||||||
|
# Vanilla work penalty formula can be represented as 2 * previous_penalty + 1. with start value equal to 0
|
||||||
|
# See https://minecraft.wiki/w/Anvil_mechanics#Anvil_uses for more detail
|
||||||
#
|
#
|
||||||
# This feature only work on paper 1.21.7 or later
|
# Valid work penalty type is:
|
||||||
#
|
# - default: work penalty added and increased
|
||||||
# At the moment only english is available for this menu... sorry !
|
# - increase_only: work penalty increased but not added
|
||||||
#
|
# - add_only: work penalty added but not increased
|
||||||
# CustomAnvil use "ca.rename.dialog" when permission
|
# - disabled: work penalty disabled
|
||||||
enable_dialog_rename: false
|
work_penalty_type: default
|
||||||
dialog_rename_max_size: 256
|
|
||||||
permission_needed_for_dialog_rename: false
|
|
||||||
|
|
||||||
# This allows custom anvil to not "guess" the text used for rename but store it in the item
|
# Default limit to apply to any enchants missing from enchant_limits
|
||||||
# It will make item stackable only and only if it had used the same rename text
|
|
||||||
#
|
#
|
||||||
# For practical reason. this only work when dialog rename is enabled
|
# Valid values include 1 to 1000
|
||||||
dialog_rename_keep_user_text: true
|
default_limit: 5
|
||||||
|
|
||||||
# Override limits for specific enchants
|
# Override limits for specific enchants
|
||||||
#
|
#
|
||||||
|
|
@ -123,8 +95,7 @@ dialog_rename_keep_user_text: true
|
||||||
#
|
#
|
||||||
# Overrides provided default from aqua_affinity to depth_strider won't change effect with extra levels
|
# Overrides provided default from aqua_affinity to depth_strider won't change effect with extra levels
|
||||||
#
|
#
|
||||||
# Valid range of 0 - 255 for each enchantment
|
# Valid range of 1 - 255 for each enchantment
|
||||||
# -1 mean keep default
|
|
||||||
enchant_limits:
|
enchant_limits:
|
||||||
minecraft:aqua_affinity: 1
|
minecraft:aqua_affinity: 1
|
||||||
minecraft:binding_curse: 1
|
minecraft:binding_curse: 1
|
||||||
|
|
@ -306,156 +277,10 @@ enchant_values:
|
||||||
# Even if disable-merge-over of unbreaking is set to 2
|
# Even if disable-merge-over of unbreaking is set to 2
|
||||||
# -1 mean enchantment merge for this enchantment is not disabled. default to -1 if absent.
|
# -1 mean enchantment merge for this enchantment is not disabled. default to -1 if absent.
|
||||||
disable-merge-over:
|
disable-merge-over:
|
||||||
# Sharpness is set to -1. it equivalent to it not being set to anything (and work as vanilla on default configuration)
|
# Sharpness is set to -1. it equivalent to it not being set to anything (and work as vanilla)
|
||||||
minecraft:sharpness: -1
|
minecraft:sharpness: -1
|
||||||
# If uncommented. 2 unbreaking II book would not give an unbreaking III book. but unbreaking III book can still be applied
|
# If uncommented. 2 unbreaking II book would not give an unbreaking III book. but unbreaking III book can still be applied
|
||||||
# minecraft:unbreaking: 2
|
#minecraft:unbreaking: 2
|
||||||
|
|
||||||
# The maximum number of enchantment an item can get. -1 for infinity
|
|
||||||
# Use eco enchant enchant_limit if present by default unless "default" is not equal to -1
|
|
||||||
enchantment_count_limit:
|
|
||||||
default: -1
|
|
||||||
# Limit for specific items. example bellow is an example with stick
|
|
||||||
# Per item enchantment limit override eco enchant enchant_limit and default limit
|
|
||||||
items:
|
|
||||||
stick: -1
|
|
||||||
|
|
||||||
# Settings for lore modification
|
|
||||||
lore_edit:
|
|
||||||
book_and_quil:
|
|
||||||
# Permission is ca.lore_edit.book
|
|
||||||
use_permission: true
|
|
||||||
append:
|
|
||||||
# If adding lore using book & quil is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Cost used for every lore line added
|
|
||||||
per_line_cost: 0
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If adding the lore consume the book & quil
|
|
||||||
do_consume: false
|
|
||||||
# Allow using color code and hexadecimal color when editing lore via book & quil
|
|
||||||
#
|
|
||||||
# Color code are prefixed by "&" and hexadecimal color by "#"
|
|
||||||
# Color code will not be applied if it colors nothing. "&&" can be used to write "&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
#
|
|
||||||
# Note that currently minimessage would disable hex code when adding color
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
|
|
||||||
remove:
|
|
||||||
# If removing lore using book & quil is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Cost used for every lore line removed
|
|
||||||
per_line_cost: 0
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If removing the lore consume the book & quil
|
|
||||||
do_consume: false
|
|
||||||
# Cost of replacing colors
|
|
||||||
remove_color_cost: 0
|
|
||||||
# Allowed some color and tags to be reverted to plain text
|
|
||||||
# Custom anvil will prioritise format that result is a smaller resulting text
|
|
||||||
# Note that not allowing certain format will lead to some lost of color or tags.
|
|
||||||
# If configuration are exact as append appending this book should result in the exact same color
|
|
||||||
#
|
|
||||||
# Color code will be prefixed by "&" and hexadecimal color by "#".
|
|
||||||
# If color code is allowed, "&" in the text will get converted to "&&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
|
|
||||||
paper:
|
|
||||||
# Permission is ca.lore_edit.paper
|
|
||||||
use_permission: true
|
|
||||||
# what order should the lines should get added/removed (start/end, if invalid or not present will be end)
|
|
||||||
order: end
|
|
||||||
|
|
||||||
append_line:
|
|
||||||
# If adding lore line using paper is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If adding the lore line consume the paper
|
|
||||||
do_consume: false
|
|
||||||
# Allow using color code and hexadecimal color when editing lore via book & quil
|
|
||||||
#
|
|
||||||
# Color code are prefixed by "&" and hexadecimal color by "#"
|
|
||||||
# Color code will not be applied if it colors nothing. "&&" can be used to write "&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
#
|
|
||||||
# Note that currently minimessage would disable hex code when adding color
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
color_use_cost: 0
|
|
||||||
|
|
||||||
remove_line:
|
|
||||||
# If removing lore line using paper is enabled
|
|
||||||
enabled: false
|
|
||||||
# Cost used every time
|
|
||||||
fixed_cost: 1
|
|
||||||
# Use left item vanilla cost penalty if any
|
|
||||||
shared_increase: false
|
|
||||||
# Increase shared left item cost penalty
|
|
||||||
shared_additive: false
|
|
||||||
# If removing the lore line consume the paper
|
|
||||||
do_consume: false
|
|
||||||
# Cost of replacing colors
|
|
||||||
remove_color_cost: 0
|
|
||||||
# Allowed some color and tags to be reverted to plain text
|
|
||||||
# Custom anvil will prioritise format that result is a smaller resulting text
|
|
||||||
# Note that not allowing certain format will lead to some lost of color or tags.
|
|
||||||
# If configuration are exact as append appending this paper should result in the exact same color
|
|
||||||
#
|
|
||||||
# Color code will be prefixed by "&" and hexadecimal color by "#".
|
|
||||||
# If color code is allowed, "&" in the text will get converted to "&&"
|
|
||||||
# For minimessage see minimessage formating https://docs.papermc.io/adventure/minimessage/format/
|
|
||||||
allow_color_code: true
|
|
||||||
allow_hexadecimal_color: false
|
|
||||||
allow_minimessage: true
|
|
||||||
|
|
||||||
# Allow to replace the xp cost by a monetary cost
|
|
||||||
# If enabled it will not be bound to the experience level limits
|
|
||||||
#
|
|
||||||
# It also requires to enable dialog rename (set "enable_dialog_rename: false" a bit higher)
|
|
||||||
# If dialog rename permission is enabled and player do not have the permission merge will fall back to vanilla xp cost
|
|
||||||
#
|
|
||||||
# If you are using custom craft I recommend using Linear Xp Cost with Exact Linear Xp as normal Xp Cost will act "weird"
|
|
||||||
# But Linear Xp will act as 1$ time global multiplier. In other word: like you expect
|
|
||||||
#
|
|
||||||
# As this feature require dialog rename, it can only be enabled starting with paper 1.21.6 and later
|
|
||||||
monetary_cost:
|
|
||||||
enabled: false
|
|
||||||
# If using vault unlocked this allow to specify what currency should be used for anvil usage
|
|
||||||
# default being the default currency
|
|
||||||
currency: default
|
|
||||||
# multiply the anvil cost by a value to allow to have price a big bigger than like 40
|
|
||||||
multipliers:
|
|
||||||
# global multipliers. all usage type will be multiplied by this value
|
|
||||||
global: 1.0
|
|
||||||
# usage specific type. it will only apply for specific xp "reason"
|
|
||||||
enchantment: 1.0 # related to enchantments level
|
|
||||||
repair: 1.0 # for repairing via unit repair (per unit)
|
|
||||||
rename: 1.0 # for renaming the item
|
|
||||||
lore_edit: 1.0 # for changing the lore of the item (only if lore edit is enabled)
|
|
||||||
work_penalty: 1.0 # for work penalty (aka use penalty)
|
|
||||||
recipe: 1.0 # for custom anvil recipe cost
|
|
||||||
|
|
||||||
# Whether to show debug logging
|
# Whether to show debug logging
|
||||||
debug_log: false
|
debug_log: false
|
||||||
|
|
@ -463,4 +288,10 @@ debug_log: false
|
||||||
# Whether to show verbose debug logging
|
# Whether to show verbose debug logging
|
||||||
debug_log_verbose: false
|
debug_log_verbose: false
|
||||||
|
|
||||||
configVersion: 1.11.0
|
# In case something when wrong with CustomAnvil packet manager.
|
||||||
|
# If you see "missing class exception" or similar you may test this.
|
||||||
|
# If enabled and Protocolib absent or disabled "Replace to expensive" will not work.
|
||||||
|
# ProtocoLib may also be used if the server is in an "unsupported" version even if this option is disabled.
|
||||||
|
force_protocolib: false
|
||||||
|
|
||||||
|
configVersion: 1.6.2
|
||||||
|
|
|
||||||
|
|
@ -92,10 +92,6 @@ restriction_loyalty:
|
||||||
enchantments: [ minecraft:loyalty ]
|
enchantments: [ minecraft:loyalty ]
|
||||||
notAffectedGroups: [ enchanted_book, trident ]
|
notAffectedGroups: [ enchanted_book, trident ]
|
||||||
|
|
||||||
restriction_luck_of_the_sea:
|
|
||||||
enchantments: [ minecraft:luck_of_the_sea ]
|
|
||||||
notAffectedGroups: [ enchanted_book, fishing_rod ]
|
|
||||||
|
|
||||||
restriction_lure:
|
restriction_lure:
|
||||||
enchantments: [ minecraft:lure ]
|
enchantments: [ minecraft:lure ]
|
||||||
notAffectedGroups: [ enchanted_book, fishing_rod ]
|
notAffectedGroups: [ enchanted_book, fishing_rod ]
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
### Default Plugin's Configurations
|
### Default Plugin's Configurations
|
||||||
From 1.18 to 1.20.6 use [1.18 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.18) \
|
For 1.18 to 1.20.6 use [1.18 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.18) \
|
||||||
From 1.21 to 1.21.8 use [1.21 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21) \
|
For 1.21 use [1.21 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21)
|
||||||
From 1.21.9 to 1.21.10 use [1.21.9 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.9) \
|
|
||||||
From 1.21.11 use [1.21.11 configurations](https://github.com/alexcrea/CustomAnvil/tree/master/defaultconfigs/1.21.11)
|
|
||||||
|
|
@ -1,13 +1,8 @@
|
||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
|
|
||||||
# Signing
|
# Signing
|
||||||
signing.secretKeyRingFile=~/.gnupg/secring.gpg
|
signing.gnupg.executable=gpg
|
||||||
|
signing.gnupg.useLegacyGpg=true
|
||||||
|
signing.gnupg.keyName=B0DBF91F
|
||||||
|
|
||||||
kotlin.daemon.jvmargs=-Xmx8G
|
kotlin.daemon.jvmargs=-Xmx8G
|
||||||
|
|
||||||
# list of nms
|
|
||||||
subprojects.reobfnms=v1_17R1,v1_18R1,v1_18R2,v1_19R1,v1_19R2,v1_19R3,v1_20R1,v1_20R2,v1_20R3,v1_20R4,v1_21R1,v1_21R2,v1_21R3,v1_21R4,v1_21R5,v1_21R6,v1_21R7
|
|
||||||
|
|
||||||
# list of version for hangar release
|
|
||||||
paperVersion=1.18-26.2
|
|
||||||
|
|
||||||
|
|
|
||||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
|
@ -1,5 +1,5 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|
|
||||||
0
gradlew
vendored
Executable file → Normal file
0
gradlew
vendored
Executable file → Normal file
|
|
@ -1,17 +0,0 @@
|
||||||
group = rootProject.group
|
|
||||||
version = rootProject.version
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
kotlin("jvm") version "2.3.0"
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
// ExcellentEnchants
|
|
||||||
maven(url = "https://repo.nightexpressdev.com/releases")
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
// Excellent Enchant
|
|
||||||
compileOnly("su.nightexpress.excellentenchants:Core:5.4.3")
|
|
||||||
compileOnly("su.nightexpress.nightcore:main:2.16.2")
|
|
||||||
}
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.dependency.plugins;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import su.nightexpress.excellentenchants.api.enchantment.CustomEnchantment;
|
|
||||||
import su.nightexpress.excellentenchants.enchantment.EnchantRegistry;
|
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class ExcellentEnchant5_3Registry {
|
|
||||||
|
|
||||||
public static @NotNull Set<CustomEnchantment> getRegistered(){
|
|
||||||
return EnchantRegistry.getRegistered();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.dependency.plugins;
|
|
||||||
|
|
||||||
import su.nightexpress.excellentenchants.EnchantsAPI;
|
|
||||||
|
|
||||||
public class ExcellentEnchant5_4EnchantSettings {
|
|
||||||
|
|
||||||
|
|
||||||
public static int anvilLimit() {
|
|
||||||
return EnchantsAPI.getEnchantManager().getSettings().getAnvilEnchantsLimit();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
1
impl/LegacyEcoEnchant/.gitignore
vendored
1
impl/LegacyEcoEnchant/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -2,7 +2,7 @@ group = rootProject.group
|
||||||
version = rootProject.version
|
version = rootProject.version
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
kotlin("jvm") version "2.3.0"
|
kotlin("jvm") version "2.1.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Imitate needed class and method to support legacy version of EcoEnchant
|
// Imitate needed class and method to support legacy version of EcoEnchant
|
||||||
|
|
@ -10,4 +10,6 @@ dependencies {
|
||||||
// Spigot api
|
// Spigot api
|
||||||
compileOnly("org.spigotmc:spigot-api:1.18-R0.1-SNAPSHOT")
|
compileOnly("org.spigotmc:spigot-api:1.18-R0.1-SNAPSHOT")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Binary file not shown.
BIN
libs/Disenchantment-6.1.0.jar
Normal file
BIN
libs/Disenchantment-6.1.0.jar
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
libs/ExcellentEnchants-4.3.1.jar
Normal file
BIN
libs/ExcellentEnchants-4.3.1.jar
Normal file
Binary file not shown.
Binary file not shown.
BIN
libs/HavenBags-1.30.1.1729.jar
Normal file
BIN
libs/HavenBags-1.30.1.1729.jar
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
1
nms/nms-common/.gitignore
vendored
1
nms/nms-common/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -1,35 +1,16 @@
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
|
||||||
|
|
||||||
group = rootProject.group
|
group = rootProject.group
|
||||||
version = rootProject.version
|
version = rootProject.version
|
||||||
|
|
||||||
plugins {
|
repositories {
|
||||||
id("io.papermc.paperweight.userdev")
|
// ProtocoLib
|
||||||
|
maven (url = "https://repo.dmulloy2.net/repository/public/" )
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// Used for nms
|
// Spigot api
|
||||||
paperweight.paperDevBundle("1.21.10-R0.1-SNAPSHOT")
|
compileOnly("org.spigotmc:spigot-api:1.18-R0.1-SNAPSHOT")
|
||||||
|
|
||||||
// Protocolib
|
// Protocolib
|
||||||
compileOnly("net.dmulloy2:ProtocolLib:5.4.0")
|
compileOnly("com.comphenix.protocol:ProtocolLib:5.1.0")
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
maven("https://repo.papermc.io/repository/maven-public/")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set target version
|
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
|
||||||
sourceCompatibility = "16"
|
|
||||||
targetCompatibility = "16"
|
|
||||||
|
|
||||||
options.encoding = "UTF-8"
|
|
||||||
}
|
|
||||||
|
|
||||||
kotlin {
|
|
||||||
compilerOptions {
|
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
|
||||||
jvmTarget.set(JvmTarget.JVM_16)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui
|
||||||
|
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
|
||||||
|
interface ExternGuiTester {
|
||||||
|
|
||||||
|
val wesjdAnvilGuiName: String?
|
||||||
|
|
||||||
|
fun getContainerClass(inventory: InventoryView): Class<Any>?
|
||||||
|
|
||||||
|
fun testIfGui(inventory: InventoryView): Boolean {
|
||||||
|
val clazz = getContainerClass(inventory)
|
||||||
|
if(clazz == null) return false
|
||||||
|
|
||||||
|
val expectedWesjdGuiPath = "anvilgui.version.$wesjdAnvilGuiName"
|
||||||
|
|
||||||
|
val clazzName = clazz.name
|
||||||
|
val isWejdsGui = clazzName.contains(expectedWesjdGuiPath)
|
||||||
|
|
||||||
|
return isWejdsGui
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,102 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.dependency.util
|
|
||||||
|
|
||||||
import net.kyori.adventure.text.Component
|
|
||||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
|
|
||||||
import org.bukkit.inventory.ItemStack
|
|
||||||
import org.bukkit.inventory.meta.ItemMeta
|
|
||||||
|
|
||||||
// Mostly made for paper, spigot and folia support
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
object PlatformUtil {
|
|
||||||
|
|
||||||
private fun hasClass(className: String): Boolean {
|
|
||||||
try {
|
|
||||||
Class.forName(className)
|
|
||||||
return true
|
|
||||||
} catch (_: ClassNotFoundException) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun hasMethod(clazz: Class<*>, name: String, vararg parameterTypes: Class<*>): Boolean {
|
|
||||||
try {
|
|
||||||
clazz.getDeclaredMethod(name, *parameterTypes)
|
|
||||||
return true
|
|
||||||
} catch (_: NoSuchMethodException) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val isPaper = hasClass("com.destroystokyo.paper.PaperConfig") ||
|
|
||||||
hasClass("io.papermc.paper.configuration.Configuration")
|
|
||||||
|
|
||||||
val isFolia = hasClass("io.papermc.paper.threadedregions.RegionizedServer")
|
|
||||||
|
|
||||||
private val legacy_mm = LegacyComponentSerializer.legacySection()
|
|
||||||
|
|
||||||
// Lore
|
|
||||||
fun ItemMeta.componentLore(): MutableList<Component> {
|
|
||||||
val lore: List<Component>?
|
|
||||||
if(isPaper){
|
|
||||||
lore = this.lore()
|
|
||||||
} else {
|
|
||||||
val legacyLores = this.lore ?: return ArrayList()
|
|
||||||
|
|
||||||
lore = ArrayList(legacyLores.size)
|
|
||||||
for (legacyLore in legacyLores) {
|
|
||||||
lore.add(legacy_mm.deserialize(legacyLore))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return lore ?: ArrayList()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun ItemMeta.setComponentLore(lore: List<Component?>) {
|
|
||||||
if(isPaper){
|
|
||||||
this.lore(lore)
|
|
||||||
} else {
|
|
||||||
val legacyLore = ArrayList<String?>(lore.size)
|
|
||||||
for (component in lore) {
|
|
||||||
legacyLore.add(if(component == null) null
|
|
||||||
else legacy_mm.serialize(component))
|
|
||||||
}
|
|
||||||
|
|
||||||
this.lore = legacyLore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Display name
|
|
||||||
private val useCustomName = hasMethod(ItemStack::class.java, "customName")
|
|
||||||
|
|
||||||
fun ItemMeta.componentDisplayName(): Component? {
|
|
||||||
if(useCustomName){
|
|
||||||
if(!this.hasCustomName()) return null
|
|
||||||
return this.customName()
|
|
||||||
}else if(isPaper){
|
|
||||||
if(!this.hasDisplayName()) return null
|
|
||||||
return this.displayName()
|
|
||||||
} else {
|
|
||||||
if(!this.hasDisplayName()) return null
|
|
||||||
|
|
||||||
val legacy = this.displayName
|
|
||||||
return legacy_mm.deserialize(legacy)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun ItemMeta.setComponentDisplayName(component: Component?) {
|
|
||||||
if(useCustomName){
|
|
||||||
this.customName(component)
|
|
||||||
}else if(isPaper){
|
|
||||||
this.displayName(component)
|
|
||||||
} else {
|
|
||||||
if(component == null){
|
|
||||||
this.setDisplayName(null)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
val legacy = legacy_mm.serialize(component)
|
|
||||||
this.setDisplayName(legacy)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.dialog
|
|
||||||
|
|
||||||
import org.bukkit.NamespacedKey
|
|
||||||
import org.bukkit.entity.HumanEntity
|
|
||||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
|
||||||
|
|
||||||
interface AnvilRenameDialog {
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
val PCD_KEEP_RENAME_TEXT_KEY = NamespacedKey.fromString("customanvil:last_rename_text")!!
|
|
||||||
}
|
|
||||||
|
|
||||||
fun canSendDialog(): Boolean
|
|
||||||
|
|
||||||
fun tryShowDialog(player: HumanEntity, event: PrepareAnvilEvent)
|
|
||||||
|
|
||||||
fun closeInventory(player: HumanEntity)
|
|
||||||
|
|
||||||
fun currentText(player: HumanEntity): String?
|
|
||||||
|
|
||||||
fun isOpenFor(player: HumanEntity): Boolean
|
|
||||||
|
|
||||||
}
|
|
||||||
1
nms/nms-paper/.gitignore
vendored
1
nms/nms-paper/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
|
||||||
|
|
||||||
group = rootProject.group
|
|
||||||
version = rootProject.version
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
id("io.papermc.paperweight.userdev")
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation(project(":nms:nms-common"))
|
|
||||||
|
|
||||||
// Used for nms
|
|
||||||
paperweight.paperDevBundle("1.21.7-R0.1-SNAPSHOT")
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
maven("https://repo.papermc.io/repository/maven-public/")
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set target version
|
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
|
||||||
sourceCompatibility = "18"
|
|
||||||
targetCompatibility = "18"
|
|
||||||
|
|
||||||
options.encoding = "UTF-8"
|
|
||||||
}
|
|
||||||
|
|
||||||
kotlin {
|
|
||||||
compilerOptions {
|
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
|
||||||
jvmTarget.set(JvmTarget.JVM_18)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.dependency.datapack
|
|
||||||
|
|
||||||
import io.papermc.paper.datapack.Datapack
|
|
||||||
import org.bukkit.Bukkit
|
|
||||||
import org.bukkit.packs.DataPack
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
object DataPackTester {
|
|
||||||
val legacyNames: List<String>
|
|
||||||
get() = Bukkit.getDataPackManager().dataPacks
|
|
||||||
.stream().filter { obj -> obj.isEnabled }
|
|
||||||
.map { pack -> pack.key.key }
|
|
||||||
.toList()
|
|
||||||
|
|
||||||
val enabledPacks: List<String>
|
|
||||||
get() {
|
|
||||||
try {
|
|
||||||
// will throw error if do not exist
|
|
||||||
Bukkit::class.java.getDeclaredMethod("getDatapackManager")
|
|
||||||
|
|
||||||
return Bukkit.getDatapackManager().enabledPacks
|
|
||||||
.stream().map { obj: Datapack -> obj.name }
|
|
||||||
.toList()
|
|
||||||
} catch (e: NoSuchMethodException) {
|
|
||||||
try {
|
|
||||||
DataPack::class.java.getDeclaredMethod("getKey")
|
|
||||||
} catch (e: NoSuchMethodException) {
|
|
||||||
System.err.println("Could not find compatible datapack manager")
|
|
||||||
System.err.println("If you are using a datapack that should be compatible with CustomAnvil. It will not get detected...")
|
|
||||||
return emptyList()
|
|
||||||
}
|
|
||||||
return legacyNames
|
|
||||||
} catch (e: Exception){
|
|
||||||
// Assume cause UnimplementedOperationException on mock server
|
|
||||||
return Collections.emptyList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.dependency.packet.versions
|
|
||||||
|
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket
|
|
||||||
import net.minecraft.world.entity.player.Abilities
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftPlayer
|
|
||||||
import org.bukkit.entity.Player
|
|
||||||
import xyz.alexcrea.cuanvil.dependency.packet.PacketManager
|
|
||||||
import xyz.alexcrea.cuanvil.dependency.packet.PacketManagerBase
|
|
||||||
|
|
||||||
class PaperPacketManager : PacketManagerBase(), PacketManager {
|
|
||||||
override val canSetInstantBuild: Boolean
|
|
||||||
get() = true
|
|
||||||
|
|
||||||
override fun setInstantBuild(player: Player, instantBuild: Boolean) {
|
|
||||||
val nmsPlayer = (player as CraftPlayer).handle
|
|
||||||
val playerAbilities = nmsPlayer.abilities
|
|
||||||
val sendedAbilities: Abilities
|
|
||||||
if (playerAbilities.instabuild == instantBuild) {
|
|
||||||
sendedAbilities = playerAbilities
|
|
||||||
} else {
|
|
||||||
sendedAbilities = Abilities()
|
|
||||||
sendedAbilities.invulnerable = playerAbilities.invulnerable
|
|
||||||
sendedAbilities.flying = playerAbilities.flying
|
|
||||||
sendedAbilities.mayfly = playerAbilities.mayfly
|
|
||||||
sendedAbilities.instabuild = instantBuild
|
|
||||||
sendedAbilities.mayBuild = playerAbilities.mayBuild
|
|
||||||
sendedAbilities.setFlyingSpeed(playerAbilities.getFlyingSpeed())
|
|
||||||
sendedAbilities.setWalkingSpeed(playerAbilities.getWalkingSpeed())
|
|
||||||
}
|
|
||||||
val packet = ClientboundPlayerAbilitiesPacket(sendedAbilities)
|
|
||||||
nmsPlayer.connection.send(packet)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,236 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.dialog
|
|
||||||
|
|
||||||
import io.papermc.paper.dialog.Dialog
|
|
||||||
import io.papermc.paper.registry.data.dialog.ActionButton
|
|
||||||
import io.papermc.paper.registry.data.dialog.DialogBase
|
|
||||||
import io.papermc.paper.registry.data.dialog.action.DialogAction
|
|
||||||
import io.papermc.paper.registry.data.dialog.body.DialogBody
|
|
||||||
import io.papermc.paper.registry.data.dialog.input.DialogInput
|
|
||||||
import io.papermc.paper.registry.data.dialog.type.DialogType
|
|
||||||
import io.papermc.paper.threadedregions.scheduler.ScheduledTask
|
|
||||||
import net.kyori.adventure.text.Component
|
|
||||||
import net.kyori.adventure.text.event.ClickCallback
|
|
||||||
import net.kyori.adventure.text.format.TextColor
|
|
||||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer
|
|
||||||
import net.minecraft.world.inventory.AnvilMenu
|
|
||||||
import org.bukkit.craftbukkit.event.CraftEventFactory
|
|
||||||
import org.bukkit.craftbukkit.inventory.CraftInventoryView
|
|
||||||
import org.bukkit.craftbukkit.inventory.view.CraftAnvilView
|
|
||||||
import org.bukkit.entity.HumanEntity
|
|
||||||
import org.bukkit.event.inventory.PrepareAnvilEvent
|
|
||||||
import org.bukkit.inventory.InventoryView
|
|
||||||
import org.bukkit.inventory.ItemStack
|
|
||||||
import org.bukkit.persistence.PersistentDataType
|
|
||||||
import org.bukkit.plugin.Plugin
|
|
||||||
import java.util.*
|
|
||||||
import java.util.function.BiFunction
|
|
||||||
import java.util.function.Consumer
|
|
||||||
import java.util.function.Supplier
|
|
||||||
|
|
||||||
@Suppress("UnstableApiUsage")
|
|
||||||
class AnvilRenameDialogImpl(
|
|
||||||
val fromFormated: BiFunction<HumanEntity, Component?, String?>,
|
|
||||||
val keepUserPreviousDialog: Supplier<Boolean>,
|
|
||||||
val maxLength: Supplier<Int>,
|
|
||||||
val plugin: Plugin,
|
|
||||||
) : AnvilRenameDialog {
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
private const val RENAME_TEXT_KEY = "rename"
|
|
||||||
|
|
||||||
private const val MAX_WIDTH = 512
|
|
||||||
|
|
||||||
private val PLAIN_TEXT_SERIALIZER = PlainTextComponentSerializer.plainText()
|
|
||||||
|
|
||||||
// Need to be able to translate it later !
|
|
||||||
private val USER_FACING_RENAME_TITLE = Component.text("Rename Your Item")
|
|
||||||
private val USER_FACING_WARNING = Component.text(
|
|
||||||
"Note that the repair text will appear blank after Confirm\n" +
|
|
||||||
"But the name will be correctly applied"
|
|
||||||
)
|
|
||||||
private val USER_FACING_CONFIRM = Component.text("Confirm").color(TextColor.fromHexString("#40FF40"))
|
|
||||||
private val USER_FACING_CANCEL = Component.text("Cancel").color(TextColor.fromHexString("#FF4040"))
|
|
||||||
|
|
||||||
fun itemDefaultName(item: ItemStack?): String? {
|
|
||||||
return PLAIN_TEXT_SERIALIZER.serializeOrNull(item?.effectiveName())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private val lastNames = HashMap<UUID, String>()
|
|
||||||
private val lastRenames = HashMap<UUID, String>()
|
|
||||||
|
|
||||||
|
|
||||||
private val lastLeftItem = HashMap<UUID, String>()
|
|
||||||
private val runTaskMap = HashMap<UUID, ScheduledTask>()
|
|
||||||
|
|
||||||
// For monetary cost
|
|
||||||
val hasUiOpen = HashSet<UUID>()
|
|
||||||
|
|
||||||
private val containerField = CraftInventoryView::class.java.getDeclaredField("container")
|
|
||||||
|
|
||||||
init {
|
|
||||||
containerField.setAccessible(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun canSendDialog(): Boolean {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
fun makeDialog(playerID: UUID, initial: String?, callback: Consumer<String?>): Dialog {
|
|
||||||
val maxLength = this.maxLength.get()
|
|
||||||
val initialFinal = initial?.take(maxLength)
|
|
||||||
|
|
||||||
val baseBuilder = DialogBase.builder(USER_FACING_RENAME_TITLE)
|
|
||||||
.canCloseWithEscape(true)
|
|
||||||
.afterAction(DialogBase.DialogAfterAction.CLOSE)
|
|
||||||
.inputs(
|
|
||||||
listOf(
|
|
||||||
DialogInput.text(RENAME_TEXT_KEY, Component.text("Rename text"))
|
|
||||||
.maxLength(maxLength)
|
|
||||||
.initial(initialFinal ?: "")
|
|
||||||
.labelVisible(false)
|
|
||||||
.width(MAX_WIDTH)
|
|
||||||
.build(),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
baseBuilder.body(
|
|
||||||
listOf(
|
|
||||||
DialogBody.plainMessage(USER_FACING_WARNING, MAX_WIDTH)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return Dialog.create { builder ->
|
|
||||||
builder.empty()
|
|
||||||
.base(baseBuilder.build())
|
|
||||||
.type(
|
|
||||||
DialogType.confirmation(
|
|
||||||
ActionButton.builder(USER_FACING_CONFIRM)
|
|
||||||
.action(DialogAction.customClick({ response, _ ->
|
|
||||||
hasUiOpen.remove(playerID)
|
|
||||||
val text = response.getText(RENAME_TEXT_KEY)!!
|
|
||||||
callback.accept(text)
|
|
||||||
}, ClickCallback.Options.builder().build()))
|
|
||||||
.build(),
|
|
||||||
ActionButton.builder(USER_FACING_CANCEL)
|
|
||||||
.action(DialogAction.customClick({ response, _ ->
|
|
||||||
hasUiOpen.remove(playerID)
|
|
||||||
}, ClickCallback.Options.builder().build()))
|
|
||||||
.build(),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setResult(player: HumanEntity, view: InventoryView, result: String?) {
|
|
||||||
val defaultName = itemDefaultName(view.getItem(0))
|
|
||||||
if (defaultName == result) {
|
|
||||||
setName(player, view, "", null)
|
|
||||||
if (defaultName != null) lastNames[player.uniqueId] = defaultName
|
|
||||||
} else setName(player, view, result, result)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setName(player: HumanEntity, view: InventoryView, name: String?, rename: String?) {
|
|
||||||
val menu = (containerField.get(view) as AnvilMenu)
|
|
||||||
val isSameName = menu.itemName == name
|
|
||||||
menu.itemName = rename
|
|
||||||
|
|
||||||
if (name == null)
|
|
||||||
lastNames.remove(player.uniqueId)
|
|
||||||
else
|
|
||||||
lastNames[player.uniqueId] = name
|
|
||||||
|
|
||||||
if (rename == null)
|
|
||||||
lastRenames.remove(player.uniqueId)
|
|
||||||
else
|
|
||||||
lastRenames[player.uniqueId] = rename
|
|
||||||
|
|
||||||
if (!isSameName)
|
|
||||||
CraftEventFactory.callPrepareResultEvent(menu, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun nameFromItem(player: HumanEntity, item: ItemStack?): String? {
|
|
||||||
// Already has text
|
|
||||||
if (item?.hasItemMeta() != true || !item.itemMeta.hasCustomName())
|
|
||||||
return PLAIN_TEXT_SERIALIZER.serializeOrNull(item?.effectiveName())
|
|
||||||
|
|
||||||
if (keepUserPreviousDialog.get() && item.hasItemMeta()) {
|
|
||||||
val lastName = item.itemMeta.persistentDataContainer.get(
|
|
||||||
AnvilRenameDialog.PCD_KEEP_RENAME_TEXT_KEY,
|
|
||||||
PersistentDataType.STRING
|
|
||||||
)
|
|
||||||
|
|
||||||
if (lastName != null) return lastName
|
|
||||||
}
|
|
||||||
|
|
||||||
return fromFormated.apply(player, item.effectiveName())
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun tryShowDialogScheduled(player: HumanEntity, event: PrepareAnvilEvent) {
|
|
||||||
val view = event.view
|
|
||||||
if (view !is CraftAnvilView) return
|
|
||||||
|
|
||||||
val renameText = view.renameText
|
|
||||||
val leftItem = view.getItem(0)
|
|
||||||
val leftItemStr = leftItem?.toString()
|
|
||||||
|
|
||||||
val lastName = lastNames.getOrDefault(player.uniqueId, null)
|
|
||||||
val lastRename = lastRenames.getOrDefault(player.uniqueId, null)
|
|
||||||
|
|
||||||
if (lastLeftItem.getOrDefault(player.uniqueId, null) != leftItemStr) {
|
|
||||||
if (leftItemStr == null)
|
|
||||||
lastLeftItem.remove(player.uniqueId)
|
|
||||||
else lastLeftItem[player.uniqueId] = leftItemStr
|
|
||||||
|
|
||||||
setName(player, view, renameText, nameFromItem(player, leftItem))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lastName == renameText || lastRename == renameText)
|
|
||||||
return
|
|
||||||
|
|
||||||
if (renameText?.isBlank() == true || renameText == itemDefaultName(leftItem)) {
|
|
||||||
setName(player, view, lastName, lastRename)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
val dialog = makeDialog(player.uniqueId, lastRename)
|
|
||||||
{ result -> setResult(player, view, result) }
|
|
||||||
player.showDialog(dialog)
|
|
||||||
|
|
||||||
hasUiOpen.add(player.uniqueId)
|
|
||||||
}
|
|
||||||
|
|
||||||
// We need to wait for a short time as changing item will change the name BEFORE the item change
|
|
||||||
// no guaranty both of them came in the same tick too so let's wait 2 tick....
|
|
||||||
override fun tryShowDialog(player: HumanEntity, event: PrepareAnvilEvent) {
|
|
||||||
runTaskMap.remove(player.uniqueId)?.cancel()
|
|
||||||
|
|
||||||
val task = player.scheduler.runDelayed(
|
|
||||||
plugin,
|
|
||||||
{ _ ->
|
|
||||||
run { tryShowDialogScheduled(player, event) }
|
|
||||||
},
|
|
||||||
{},
|
|
||||||
2
|
|
||||||
)
|
|
||||||
if (task == null) return
|
|
||||||
|
|
||||||
runTaskMap[player.uniqueId] = task
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun closeInventory(player: HumanEntity) {
|
|
||||||
lastNames.remove(player.uniqueId)
|
|
||||||
lastRenames.remove(player.uniqueId)
|
|
||||||
lastLeftItem.remove(player.uniqueId)
|
|
||||||
runTaskMap.remove(player.uniqueId)?.cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun currentText(player: HumanEntity): String? {
|
|
||||||
return lastNames[player.uniqueId]
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun isOpenFor(player: HumanEntity): Boolean {
|
|
||||||
return hasUiOpen.contains(player.uniqueId)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.util
|
|
||||||
|
|
||||||
import io.papermc.paper.threadedregions.scheduler.ScheduledTask
|
|
||||||
import org.bukkit.entity.HumanEntity
|
|
||||||
import org.bukkit.inventory.InventoryView
|
|
||||||
import org.bukkit.plugin.Plugin
|
|
||||||
import xyz.alexcrea.cuanvil.dialog.AnvilRenameDialog
|
|
||||||
import java.util.HashMap
|
|
||||||
import java.util.UUID
|
|
||||||
|
|
||||||
object AnvilTitleUtil {
|
|
||||||
|
|
||||||
private val runTaskMap = HashMap<UUID, ScheduledTask>()
|
|
||||||
|
|
||||||
private fun actualRename(view: InventoryView, name: String, player: HumanEntity, anvilDialog: AnvilRenameDialog) {
|
|
||||||
runTaskMap.remove(player.uniqueId)
|
|
||||||
if (view.title == name) return
|
|
||||||
|
|
||||||
// We assume rename impl is used
|
|
||||||
if (anvilDialog.isOpenFor(player)) return
|
|
||||||
|
|
||||||
view.title = name
|
|
||||||
}
|
|
||||||
|
|
||||||
// We don't want to rename instantly it is causing issue with rename text
|
|
||||||
// especially as it can "override" current ui when it is rename ui time but rename ui also need some delay
|
|
||||||
fun rename(view: InventoryView, name: String, player: HumanEntity, anvilDialog: AnvilRenameDialog, plugin: Plugin) {
|
|
||||||
runTaskMap.remove(player.uniqueId)?.cancel()
|
|
||||||
|
|
||||||
val task = player.scheduler.runDelayed(
|
|
||||||
plugin,
|
|
||||||
{ _ ->
|
|
||||||
run { actualRename(view, name, player, anvilDialog) }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
runTaskMap.remove(player.uniqueId)
|
|
||||||
},
|
|
||||||
2
|
|
||||||
)
|
|
||||||
|
|
||||||
if (task == null) return
|
|
||||||
runTaskMap[player.uniqueId] = task
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
1
nms/v1_17R1/.gitignore
vendored
1
nms/v1_17R1/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,6 +19,14 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// As minecraft 1.17 recommended java version is 1.16. we set language version to 1.16
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "16"
|
sourceCompatibility = "16"
|
||||||
|
|
@ -29,7 +37,7 @@ tasks.withType<JavaCompile>().configureEach {
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_16)
|
jvmTarget.set(JvmTarget.JVM_16)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_17R1_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_17_R1"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
1
nms/v1_18R1/.gitignore
vendored
1
nms/v1_18R1/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,6 +19,14 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// As minecraft 1.18 work with java 1.17 or above. we set language version to 1.17
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "17"
|
sourceCompatibility = "17"
|
||||||
|
|
@ -29,7 +37,7 @@ tasks.withType<JavaCompile>().configureEach {
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_17)
|
jvmTarget.set(JvmTarget.JVM_17)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_18R1_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_18_R1"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
1
nms/v1_18R2/.gitignore
vendored
1
nms/v1_18R2/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,6 +19,14 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// As minecraft 1.18 work with java 1.17 or above. we set language version to 1.17
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "17"
|
sourceCompatibility = "17"
|
||||||
|
|
@ -29,7 +37,7 @@ tasks.withType<JavaCompile>().configureEach {
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_17)
|
jvmTarget.set(JvmTarget.JVM_17)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_18R2_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_18_R2"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
1
nms/v1_19R1/.gitignore
vendored
1
nms/v1_19R1/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,6 +19,14 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// I do not know minecraft 1.19 recommended java version. assumed 17 is good enough
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "17"
|
sourceCompatibility = "17"
|
||||||
|
|
@ -29,7 +37,7 @@ tasks.withType<JavaCompile>().configureEach {
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_17)
|
jvmTarget.set(JvmTarget.JVM_17)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_19R1_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_19_R1"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
1
nms/v1_19R2/.gitignore
vendored
1
nms/v1_19R2/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,6 +19,14 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// I do not know minecraft 1.19 recommended java version. assumed 17 is good enough
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "17"
|
sourceCompatibility = "17"
|
||||||
|
|
@ -29,7 +37,7 @@ tasks.withType<JavaCompile>().configureEach {
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_17)
|
jvmTarget.set(JvmTarget.JVM_17)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_19R2_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_19_R2"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
1
nms/v1_19R3/.gitignore
vendored
1
nms/v1_19R3/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,6 +19,14 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// I do not know minecraft 1.19 recommended java version. assumed 17 is good enough
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "17"
|
sourceCompatibility = "17"
|
||||||
|
|
@ -29,7 +37,7 @@ tasks.withType<JavaCompile>().configureEach {
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_17)
|
jvmTarget.set(JvmTarget.JVM_17)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_19R3_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_19_R3"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
1
nms/v1_20R1/.gitignore
vendored
1
nms/v1_20R1/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,17 +19,25 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// minecraft 1.20 recommended java version is 18. but we assume 17 is good enough as lts
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "18"
|
sourceCompatibility = "17"
|
||||||
targetCompatibility = "18"
|
targetCompatibility = "17"
|
||||||
|
|
||||||
options.encoding = "UTF-8"
|
options.encoding = "UTF-8"
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_18)
|
jvmTarget.set(JvmTarget.JVM_17)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_20R1_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_20_R1"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
1
nms/v1_20R2/.gitignore
vendored
1
nms/v1_20R2/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,17 +19,25 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// minecraft 1.20 recommended java version is 18. but we assume 17 is good enough as lts
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "18"
|
sourceCompatibility = "17"
|
||||||
targetCompatibility = "18"
|
targetCompatibility = "17"
|
||||||
|
|
||||||
options.encoding = "UTF-8"
|
options.encoding = "UTF-8"
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_18)
|
jvmTarget.set(JvmTarget.JVM_17)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
import kotlin.jvm.javaClass
|
||||||
|
|
||||||
|
class v1_20R2_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_20_R2"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
1
nms/v1_20R3/.gitignore
vendored
1
nms/v1_20R3/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,17 +19,25 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// minecraft 1.20 recommended java version is 18. but we assume 17 is good enough as lts
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "18"
|
sourceCompatibility = "17"
|
||||||
targetCompatibility = "18"
|
targetCompatibility = "17"
|
||||||
|
|
||||||
options.encoding = "UTF-8"
|
options.encoding = "UTF-8"
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_18)
|
jvmTarget.set(JvmTarget.JVM_17)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.v1_20_R3.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
import kotlin.jvm.javaClass
|
||||||
|
|
||||||
|
class v1_20R3_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_20_R3"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
1
nms/v1_20R4/.gitignore
vendored
1
nms/v1_20R4/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,10 +19,18 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// minecraft 1.20 recommended java version is 18. but we assume 17 is good enough as lts
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "18"
|
sourceCompatibility = "17"
|
||||||
targetCompatibility = "18"
|
targetCompatibility = "17"
|
||||||
|
|
||||||
options.encoding = "UTF-8"
|
options.encoding = "UTF-8"
|
||||||
}
|
}
|
||||||
|
|
@ -30,6 +38,6 @@ tasks.withType<JavaCompile>().configureEach {
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_18)
|
jvmTarget.set(JvmTarget.JVM_17)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
import kotlin.jvm.javaClass
|
||||||
|
|
||||||
|
class v1_20R4_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_20_R4"
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
if (view !is CraftInventoryView) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.util
|
|
||||||
|
|
||||||
import org.bukkit.inventory.meta.Damageable
|
|
||||||
|
|
||||||
// I LOVE support of old versions and needing to do modules like that
|
|
||||||
// That truly is my favorite activity
|
|
||||||
// TODO clean this one of legacy removal branch
|
|
||||||
object MaxDamageCheckerUtil {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return max damage or int max if not set
|
|
||||||
*/
|
|
||||||
fun getMaxDamage(meta: Damageable): Int {
|
|
||||||
if(!meta.hasMaxDamage()) return Integer.MAX_VALUE
|
|
||||||
return meta.maxDamage
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
1
nms/v1_21R1/.gitignore
vendored
1
nms/v1_21R1/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,6 +19,14 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// minecraft 1.21 java version is 21.
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "21"
|
sourceCompatibility = "21"
|
||||||
|
|
@ -29,7 +37,7 @@ tasks.withType<JavaCompile>().configureEach {
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_21)
|
jvmTarget.set(JvmTarget.JVM_21)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
package xyz.alexcrea.cuanvil.dependency.gui.version
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.inventory.CraftInventoryView
|
||||||
|
import org.bukkit.inventory.InventoryView
|
||||||
|
import xyz.alexcrea.cuanvil.dependency.gui.ExternGuiTester
|
||||||
|
|
||||||
|
class v1_21R1_ExternGuiTester: ExternGuiTester {
|
||||||
|
override val wesjdAnvilGuiName = "Wrapper1_21_R1"
|
||||||
|
|
||||||
|
var tested = false;
|
||||||
|
var possible = false;
|
||||||
|
|
||||||
|
override fun getContainerClass(view: InventoryView): Class<Any>? {
|
||||||
|
// In case we are in a test environment
|
||||||
|
if(!tested) testClassExist()
|
||||||
|
if(!possible) return null
|
||||||
|
|
||||||
|
if(view !is CraftInventoryView<*, *>) return null
|
||||||
|
val container = view.handle
|
||||||
|
|
||||||
|
return container.javaClass
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testClassExist(){
|
||||||
|
tested = true;
|
||||||
|
try {
|
||||||
|
Class.forName("org.bukkit.craftbukkit.inventory.CraftInventoryView")
|
||||||
|
possible = true
|
||||||
|
} catch (e: ClassNotFoundException){
|
||||||
|
possible = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
1
nms/v1_21R2/.gitignore
vendored
1
nms/v1_21R2/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,6 +19,14 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// minecraft 1.21 java version is 21.
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "21"
|
sourceCompatibility = "21"
|
||||||
|
|
@ -29,7 +37,7 @@ tasks.withType<JavaCompile>().configureEach {
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_21)
|
jvmTarget.set(JvmTarget.JVM_21)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
1
nms/v1_21R3/.gitignore
vendored
1
nms/v1_21R3/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -19,6 +19,14 @@ repositories {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// minecraft 1.21 java version is 21.
|
||||||
|
|
||||||
|
// Configure used version of kotlin and java
|
||||||
|
java {
|
||||||
|
disableAutoTargetJvm()
|
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
|
||||||
|
}
|
||||||
|
|
||||||
// Set target version
|
// Set target version
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
sourceCompatibility = "21"
|
sourceCompatibility = "21"
|
||||||
|
|
@ -29,7 +37,7 @@ tasks.withType<JavaCompile>().configureEach {
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
|
||||||
jvmTarget.set(JvmTarget.JVM_21)
|
jvmTarget.set(JvmTarget.JVM_21)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
1
nms/v1_21R4/.gitignore
vendored
1
nms/v1_21R4/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
|
||||||
|
|
||||||
group = rootProject.group
|
|
||||||
version = rootProject.version
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
id("io.papermc.paperweight.userdev")
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation(project(":nms:nms-common"))
|
|
||||||
|
|
||||||
// Used for nms
|
|
||||||
paperweight.paperDevBundle("1.21.5-R0.1-SNAPSHOT")
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
maven("https://repo.papermc.io/repository/maven-public/")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set target version
|
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
|
||||||
sourceCompatibility = "21"
|
|
||||||
targetCompatibility = "21"
|
|
||||||
|
|
||||||
options.encoding = "UTF-8"
|
|
||||||
}
|
|
||||||
|
|
||||||
kotlin {
|
|
||||||
compilerOptions {
|
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
|
||||||
jvmTarget.set(JvmTarget.JVM_21)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.dependency.packet.versions
|
|
||||||
|
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket
|
|
||||||
import net.minecraft.world.entity.player.Abilities
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftPlayer
|
|
||||||
import org.bukkit.entity.Player
|
|
||||||
import xyz.alexcrea.cuanvil.dependency.packet.PacketManager
|
|
||||||
import xyz.alexcrea.cuanvil.dependency.packet.PacketManagerBase
|
|
||||||
|
|
||||||
class V1_21R4_PacketManager : PacketManagerBase(), PacketManager {
|
|
||||||
override val canSetInstantBuild: Boolean
|
|
||||||
get() = true
|
|
||||||
|
|
||||||
override fun setInstantBuild(player: Player, instantBuild: Boolean) {
|
|
||||||
val nmsPlayer = (player as CraftPlayer).handle
|
|
||||||
val playerAbilities = nmsPlayer.abilities
|
|
||||||
val sendedAbilities: Abilities
|
|
||||||
if (playerAbilities.instabuild == instantBuild) {
|
|
||||||
sendedAbilities = playerAbilities
|
|
||||||
} else {
|
|
||||||
sendedAbilities = Abilities()
|
|
||||||
sendedAbilities.invulnerable = playerAbilities.invulnerable
|
|
||||||
sendedAbilities.flying = playerAbilities.flying
|
|
||||||
sendedAbilities.mayfly = playerAbilities.mayfly
|
|
||||||
sendedAbilities.instabuild = instantBuild
|
|
||||||
sendedAbilities.mayBuild = playerAbilities.mayBuild
|
|
||||||
sendedAbilities.flyingSpeed = playerAbilities.flyingSpeed
|
|
||||||
sendedAbilities.walkingSpeed = playerAbilities.walkingSpeed
|
|
||||||
}
|
|
||||||
val packet = ClientboundPlayerAbilitiesPacket(sendedAbilities)
|
|
||||||
nmsPlayer.connection.send(packet)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
1
nms/v1_21R5/.gitignore
vendored
1
nms/v1_21R5/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
||||||
.lastDeploymentsId
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
|
||||||
|
|
||||||
group = rootProject.group
|
|
||||||
version = rootProject.version
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
id("io.papermc.paperweight.userdev")
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation(project(":nms:nms-common"))
|
|
||||||
|
|
||||||
// Used for nms
|
|
||||||
paperweight.paperDevBundle("1.21.6-R0.1-SNAPSHOT")
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
maven("https://repo.papermc.io/repository/maven-public/")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set target version
|
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
|
||||||
sourceCompatibility = "21"
|
|
||||||
targetCompatibility = "21"
|
|
||||||
|
|
||||||
options.encoding = "UTF-8"
|
|
||||||
}
|
|
||||||
|
|
||||||
kotlin {
|
|
||||||
compilerOptions {
|
|
||||||
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_2)
|
|
||||||
jvmTarget.set(JvmTarget.JVM_21)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
package xyz.alexcrea.cuanvil.dependency.packet.versions
|
|
||||||
|
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket
|
|
||||||
import net.minecraft.world.entity.player.Abilities
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftPlayer
|
|
||||||
import org.bukkit.entity.Player
|
|
||||||
import xyz.alexcrea.cuanvil.dependency.packet.PacketManager
|
|
||||||
import xyz.alexcrea.cuanvil.dependency.packet.PacketManagerBase
|
|
||||||
|
|
||||||
class V1_21R5_PacketManager : PacketManagerBase(), PacketManager {
|
|
||||||
override val canSetInstantBuild: Boolean
|
|
||||||
get() = true
|
|
||||||
|
|
||||||
override fun setInstantBuild(player: Player, instantBuild: Boolean) {
|
|
||||||
val nmsPlayer = (player as CraftPlayer).handle
|
|
||||||
val playerAbilities = nmsPlayer.abilities
|
|
||||||
val sendedAbilities: Abilities
|
|
||||||
if (playerAbilities.instabuild == instantBuild) {
|
|
||||||
sendedAbilities = playerAbilities
|
|
||||||
} else {
|
|
||||||
sendedAbilities = Abilities()
|
|
||||||
sendedAbilities.invulnerable = playerAbilities.invulnerable
|
|
||||||
sendedAbilities.flying = playerAbilities.flying
|
|
||||||
sendedAbilities.mayfly = playerAbilities.mayfly
|
|
||||||
sendedAbilities.instabuild = instantBuild
|
|
||||||
sendedAbilities.mayBuild = playerAbilities.mayBuild
|
|
||||||
sendedAbilities.flyingSpeed = playerAbilities.flyingSpeed
|
|
||||||
sendedAbilities.walkingSpeed = playerAbilities.walkingSpeed
|
|
||||||
}
|
|
||||||
val packet = ClientboundPlayerAbilitiesPacket(sendedAbilities)
|
|
||||||
nmsPlayer.connection.send(packet)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue