Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c457ce552 |
No files matched your search
@@ -1 +0,0 @@
|
||||
.gitea/CODEOWNERS linguist-detectable=false
|
||||
@@ -0,0 +1,5 @@
|
||||
root: ./wiki
|
||||
|
||||
structure:
|
||||
readme: README.md
|
||||
summary: SUMMARY.md
|
||||
@@ -1,3 +0,0 @@
|
||||
# Pull requests request review from the eligible staff team(s).
|
||||
# One approval from either an Admin or Developer satisfies branch protection.
|
||||
* @trueog/Admins @trueog/Developers
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Run the command '...'
|
||||
2. Click on a mob '....'
|
||||
3. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Software (please complete the following information):**
|
||||
- Server: [e.g. Spigot 1.12]
|
||||
- Plugin version [e.g. 2.12.1]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@@ -0,0 +1,37 @@
|
||||
# This workflow will build a Java project with Maven
|
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
|
||||
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
fail-fast: true
|
||||
max-parallel: 4
|
||||
matrix:
|
||||
java-version: [ 8, 11, 16, 17 ]
|
||||
runs-on: ubuntu-latest
|
||||
name: Java ${{ matrix.java-version }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: "Set up JDK ${{ matrix.java-version }}"
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: "${{ matrix.java-version }}"
|
||||
distribution: 'adopt'
|
||||
cache: 'maven'
|
||||
- name: Build with Maven
|
||||
run: mvn -B -U package --file pom.xml
|
||||
- name: Upload Build Artifact
|
||||
if: "${{ matrix.java-version == 8 }}"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: SimpleClans
|
||||
path: target/SimpleClans.jar
|
||||
@@ -0,0 +1,31 @@
|
||||
name: Publish to CurseForge
|
||||
on:
|
||||
release:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 8
|
||||
cache: 'maven'
|
||||
distribution: 'adopt'
|
||||
- name: Build with Maven
|
||||
run: mvn -B package --file pom.xml
|
||||
- name: Upload artifact
|
||||
uses: itsmeow/curseforge-upload@v3
|
||||
with:
|
||||
token: ${{ secrets.CURSEFORGE_TOKEN }}
|
||||
project_id: 380814
|
||||
game_endpoint: minecraft
|
||||
file_path: target/SimpleClans.jar
|
||||
changelog: ${{ github.event.release.body }}
|
||||
changelog_type: markdown
|
||||
display_name: ${{ github.event.release.tag_name }}
|
||||
game_versions: 8849,8503,7915,7667,7330,7105,6588,630,591,585,531
|
||||
release_type: release
|
||||
relations: vault:optionalDependency,worldguard:optionalDependency,grief-prevention:optionalDependency
|
||||
@@ -0,0 +1,31 @@
|
||||
name: Publish to Modrinth
|
||||
on:
|
||||
release:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 8
|
||||
cache: 'maven'
|
||||
distribution: 'adopt'
|
||||
- name: Build with Maven
|
||||
run: mvn -B package --file pom.xml
|
||||
- name: Upload artifact
|
||||
uses: RubixDev/modrinth-upload@v1.0.0
|
||||
with:
|
||||
token: ${{ secrets.MODRINTH_TOKEN }}
|
||||
project_id: quLDfyDl
|
||||
file_path: target/SimpleClans.jar
|
||||
changelog: ${{ github.event.release.body }}
|
||||
name: ${{ github.event.release.tag_name }}
|
||||
version: ${{ github.event.release.tag_name }}
|
||||
game_versions: 1.19,1.18,1.17,1.16,1.15,1.14,1.13,1.12,1.11,1.10,1.9,1.8
|
||||
release_type: release
|
||||
loaders: spigot
|
||||
featured: true
|
||||
@@ -0,0 +1,29 @@
|
||||
name: Publish to Reposilite
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 8
|
||||
server-id: reposilite # Value of the distributionManagement/repository/id field of the pom.xml
|
||||
server-username: MAVEN_USERNAME
|
||||
server-password: MAVEN_PASSWORD
|
||||
cache: 'maven'
|
||||
distribution: 'adopt'
|
||||
- name: Build with Maven
|
||||
run: mvn -B package --file pom.xml
|
||||
- name: Publish to Reposilite
|
||||
run: mvn -B deploy
|
||||
env:
|
||||
MAVEN_USERNAME: simpleclans
|
||||
MAVEN_PASSWORD: ${{ secrets.REPOSILITE_TOKEN }}
|
||||
@@ -0,0 +1,15 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
name: release-please
|
||||
jobs:
|
||||
release-please:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: google-github-actions/release-please-action@v3
|
||||
with:
|
||||
release-type: maven
|
||||
package-name: SimpleClans
|
||||
token: ${{ secrets.PAT_TOKEN }}
|
||||
fork: false
|
||||
+6
-8
@@ -1,11 +1,9 @@
|
||||
.idea/
|
||||
bin/
|
||||
.classpath
|
||||
.project
|
||||
/target/
|
||||
/.idea/
|
||||
/bin/
|
||||
/.classpath
|
||||
/.project
|
||||
/dependency-reduced-pom.xml
|
||||
*.jar
|
||||
build/
|
||||
.gradle/
|
||||
.settings
|
||||
.factorypath
|
||||
SimpleClans.iml
|
||||
/unions.txt
|
||||
@@ -1,6 +0,0 @@
|
||||
[submodule "libs/Utilities-OG"]
|
||||
path = libs/Utilities-OG
|
||||
url = https://git.trueog.net/trueog/Utilities-OG
|
||||
[submodule "libs/DiamondBank-OG"]
|
||||
path = libs/DiamondBank-OG
|
||||
url = https://git.trueog.net/trueog/DiamondBank-OG
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
# Use https://travis-ci.org/ for automatic testing
|
||||
|
||||
# This is a java project
|
||||
language: java
|
||||
|
||||
script: mvn install
|
||||
|
||||
jdk: [openjdk8]
|
||||
|
||||
# if one build failed, exit testing
|
||||
matrix:
|
||||
fast_finish: true
|
||||
|
||||
addons:
|
||||
artifacts: true
|
||||
|
||||
# Disable caching in order to get notified if there are some repo/dependency issues
|
||||
## Cache maven dependencies
|
||||
#sudo: false
|
||||
#cache:
|
||||
# directories:
|
||||
# - '$HOME/.m2/repository'
|
||||
+25
-116
@@ -1,126 +1,35 @@
|
||||
# Unions-OG Changelog
|
||||
# Changelog
|
||||
|
||||
This changelog records only changes made by the Unions-OG soft fork relative
|
||||
to upstream [SimpleClans](https://github.com/RoinujNosde/SimpleClans). Changes
|
||||
inherited unchanged from SimpleClans are intentionally omitted.
|
||||
## [2.18.0](https://github.com/RoinujNosde/SimpleClans/compare/v2.17.0...v2.18.0) (2022-10-14)
|
||||
|
||||
## [2.5.1] - 2026-08-15
|
||||
|
||||
- Inactivity purges removed. Unions and player data are no longer deleted on startup.
|
||||
### Features
|
||||
|
||||
## [2.5] - 2026-08-13
|
||||
* add help-size config ([25197cd](https://github.com/RoinujNosde/SimpleClans/commit/25197cdd729cea63d7e223dc1e0aaef830613327))
|
||||
* added method for registering protection providers ([2ea7444](https://github.com/RoinujNosde/SimpleClans/commit/2ea744443f502970b15859818e9d5e45ca69d453))
|
||||
* adds permission to bypass the teleport delay ([d56a0a9](https://github.com/RoinujNosde/SimpleClans/commit/d56a0a979a47a140115742518e934a2469e6f880))
|
||||
* adds PlayerHomeClearEvent ([becb88b](https://github.com/RoinujNosde/SimpleClans/commit/becb88b763380bed5a2e1dd209c32c8363a7f88b))
|
||||
* adds starter-ranks ([a440834](https://github.com/RoinujNosde/SimpleClans/commit/a4408343479d7efa6ae5a65894f8b822ecd47ebb))
|
||||
* Improves Bungee support ([#327](https://github.com/RoinujNosde/SimpleClans/issues/327)) ([2c9b0f9](https://github.com/RoinujNosde/SimpleClans/commit/2c9b0f98fe3942ea74190c1a81d61be2c8647db8))
|
||||
* **lang:** new crowdin updates ([#319](https://github.com/RoinujNosde/SimpleClans/issues/319)) ([87ece22](https://github.com/RoinujNosde/SimpleClans/commit/87ece22036fb674c8c362b6a1b86fe884543e6ad))
|
||||
|
||||
### Added
|
||||
|
||||
- Clickable chat buttons for request responses. Accept and deny regroup requests
|
||||
now display green `[ACCEPT]` and red `[DENY]` buttons in chat that players can
|
||||
click instead of typing commands. Hover text explains each button's action.
|
||||
Command-based responses still work for full backward compatibility.
|
||||
- Adventure/MiniMessage dependency for rich text rendering and interactive chat
|
||||
components.
|
||||
- Fix union commands and help menu
|
||||
### Bug Fixes
|
||||
|
||||
## [2.4] - 2026-08-10
|
||||
* changes size of some frames for better visualization on Bedrock ([1adec0b](https://github.com/RoinujNosde/SimpleClans/commit/1adec0b89d676767cdb94dcdf91ba37a231eb4a8))
|
||||
* ConfigurationSerializableAdapter NPE ([30a501c](https://github.com/RoinujNosde/SimpleClans/commit/30a501c063aa9dbcf596df83adc2b15baf0e4bb9))
|
||||
* getPastClans() preserves the insertion order ([af07988](https://github.com/RoinujNosde/SimpleClans/commit/af079881030bd299b9bae1ebf0cc62353af7e6fc))
|
||||
* NoClassDefFoundError in WorldGuard6Provider ([a859928](https://github.com/RoinujNosde/SimpleClans/commit/a8599286225ba603ea124b8b52510245b94ffd24))
|
||||
* NPE while collecting fees ([c47289c](https://github.com/RoinujNosde/SimpleClans/commit/c47289c5bf8113a9d6a8e1ee74a5afb0358647b6))
|
||||
* NPE while purging data ([f14c425](https://github.com/RoinujNosde/SimpleClans/commit/f14c42548846feef01b484acbb5f02bcbcabd8db))
|
||||
* NPE while sending a message to spies ([#322](https://github.com/RoinujNosde/SimpleClans/issues/322)) ([e7f756f](https://github.com/RoinujNosde/SimpleClans/commit/e7f756f3063c646e21415e08eea73f123d2818a0))
|
||||
* removes duplicate /clan from help ([f7e7ec6](https://github.com/RoinujNosde/SimpleClans/commit/f7e7ec66243359e26d3c456a9740a53753951c48))
|
||||
* removes rank and join date on disband ([2a1ad5b](https://github.com/RoinujNosde/SimpleClans/commit/2a1ad5b5c8d2937a8ee6dd6f7f43d85c86f08307))
|
||||
* set useSSL to false ([f484bc1](https://github.com/RoinujNosde/SimpleClans/commit/f484bc16c6176ccd13e05aae2169400e7bcf5d62))
|
||||
* supports '.' and '*' as username prefix by default ([37f0ecf](https://github.com/RoinujNosde/SimpleClans/commit/37f0ecff506d06f3047e3598848117a14c2b7ead))
|
||||
* updates join date when joining a clan ([#326](https://github.com/RoinujNosde/SimpleClans/issues/326)) ([96a13d8](https://github.com/RoinujNosde/SimpleClans/commit/96a13d8d6cc18c91d4dee20dd632cd5d65db5213))
|
||||
|
||||
### Added
|
||||
|
||||
- Unions decide by member vote. `disband`, `home set` and `war start` now open
|
||||
a proposal that passes when half the members are in favour, is rejected once
|
||||
half becomes unreachable, and expires after 7 days. Votes are stored in the
|
||||
database, so members can vote when they next log in.
|
||||
- `/union vote` shows the open proposal and its tally; `/union vote yes|no`
|
||||
casts a vote. A vote screen in the GUI does the same, and is shown once on
|
||||
login to members who have not voted.
|
||||
- Disbanding a union splits its bank evenly between all members. Inert until
|
||||
union bank accounts are enabled.
|
||||
- `/clan`, `/clans`, `/factions`, `/guilds`, `/party`, `/tribe`, `/nation`,
|
||||
`/crew`, `/squad` and `/gang` tell the player to use `/union` instead.
|
||||
`/f`, `/faction` and `/guild` are left to Utilities-OG.
|
||||
### Performance Improvements
|
||||
|
||||
### Changed
|
||||
|
||||
- Unions are flat. Every union command is member-level, and the three actions
|
||||
above are the only ones needing more than one member's say-so.
|
||||
- Folded `unionsog.leader.*` into `unionsog.member.*`, which is granted by
|
||||
default. Union ally management is `unionsog.member.ally-set` and union
|
||||
friendly fire is `unionsog.member.union-ff`, to avoid clashing with the
|
||||
existing ally-chat and personal-friendly-fire nodes.
|
||||
- Renamed clan to union across the API, config sections and message keys:
|
||||
`Clan` is `Union`, `clan:` is `union:`, `clanchat:` is `unionchat:`.
|
||||
Database identifiers and PlaceholderAPI placeholder names deliberately keep
|
||||
their `clan` spelling.
|
||||
- Renamed `/union clanff` to `/union unionff`.
|
||||
- Chat and display formats accept `{union}`; `{clan}` still works.
|
||||
- A union now ends with its last member.
|
||||
- `/union war start` no longer asks the target union, so the member-count
|
||||
guard always applies. Removed `war-and-protection.war-start.request-enabled`.
|
||||
- Inter-union requests are answered by the first member of the asked union
|
||||
rather than by its leaders.
|
||||
- Set the union GUI title to "Union Management".
|
||||
|
||||
### Removed
|
||||
|
||||
- Ranks, promotion and demotion, with their commands, settings, events and GUI
|
||||
screens.
|
||||
- The leader role: no leader flag, leader-only command, tag colour, Discord
|
||||
role or `sc_leader` LuckPerms group. The `sc_players.leader` column is kept
|
||||
and always written `0` for data compatibility.
|
||||
- The leaders-only land creation option.
|
||||
- The in-game Crowdin translation prompts.
|
||||
|
||||
### Fixed
|
||||
|
||||
- `/union lookup` and `/union profile` no longer print a literal
|
||||
`%player_rank%` or `%clan_leaders%`.
|
||||
- Removed a stale `%rank%` token from the default chat formats.
|
||||
- `/union unionff block` now requires union membership, matching
|
||||
`/union unionff allow`.
|
||||
- The legacy database importer no longer reads or writes leader relationships.
|
||||
|
||||
## [2.3] - Initial release
|
||||
|
||||
### Added
|
||||
|
||||
- `/union` and `/unions` as primary command aliases, keeping `/clan` and
|
||||
`/clans`.
|
||||
- `/u [message]` for union chat. Running `/u` alone toggles the channel.
|
||||
- `/union color <color>` with named, legacy and hex color support.
|
||||
- `simpleunions` PlaceholderAPI aliases alongside the legacy `simpleclans`
|
||||
identifier, plus MiniPlaceholders support through Utilities-OG.
|
||||
- A Union Banking preview in the main GUI.
|
||||
- A configuration-gated legacy database migration from `unions_parties` and
|
||||
`unions_players`. It never touches the source tables, requires empty
|
||||
transactional destinations, is idempotent, and aborts startup on failure so
|
||||
the server cannot run on partially migrated data.
|
||||
|
||||
### Changed
|
||||
|
||||
- Renamed the plugin and artifact to Unions-OG, moved the namespace to
|
||||
`net.trueog.unionsog` and permission nodes to `unionsog.*`.
|
||||
- Replaced Vault with DiamondBank-OG and its shard-based balances. Legacy
|
||||
Vault-denominated union balances are zeroed once. Union-bank commands are
|
||||
disabled until DiamondBank-OG provides union-owned accounts.
|
||||
- Unions are treated as verified without the upstream verification workflow.
|
||||
- Reserved `None` as a union name or tag, and made the no-union color-tag
|
||||
placeholder return a stable `&8None`.
|
||||
- Bulletin-board messages no longer show on login by default.
|
||||
- Reordered the main GUI around the union overview, banking preview, lists,
|
||||
leaderboards and administrative tools.
|
||||
- Replaced the WorldGuard 6 reflection provider with the WorldEdit and
|
||||
WorldGuard 7 APIs.
|
||||
- Updated MySQL driver loading for Connector/J 8, MariaDB and JDBC service
|
||||
discovery.
|
||||
- Migrated the build from Maven to Gradle with a Java 17 toolchain,
|
||||
reproducible shaded jars, and the Utilities-OG and DiamondBank-OG submodules.
|
||||
|
||||
### Removed
|
||||
|
||||
- The Vault dependency, along with the member-fee and upkeep tasks it backed.
|
||||
- The legacy WorldGuard 6 provider.
|
||||
- bStats telemetry.
|
||||
|
||||
## Fork baseline
|
||||
|
||||
The fork last merged upstream SimpleClans history through commit `0406c61b`
|
||||
on 2026-03-30. Earlier SimpleClans release history belongs to the upstream
|
||||
project.
|
||||
* improved UUID lookup performance ([4ab53d1](https://github.com/RoinujNosde/SimpleClans/commit/4ab53d16135ecf5a4067b1a63d058da392dc5313))
|
||||
@@ -1,140 +1,85 @@
|
||||

|
||||
[](https://www.spigotmc.org/resources/simpleclans.71242/)
|
||||
|
||||
# Unions-OG
|
||||
SimpleClans
|
||||
==========
|
||||
|
||||
A full-featured union system for PvP Minecraft servers.
|
||||
Full featured clan system for PVP Minecraft Servers!
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Unions-OG is an unofficial soft fork of
|
||||
> [SimpleClans](https://github.com/RoinujNosde/SimpleClans), maintained for the
|
||||
> TrueOG Network. Upstream behavior is retained where practical, while
|
||||
> branding, integrations, and selected gameplay behavior intentionally differ.
|
||||
[](https://ci.roinujnosde.me/job/SimpleClans/)
|
||||
[](https://www.spigotmc.org/resources/simpleclans.71242/)
|
||||
[](https://github.com/RoinujNosde/SimpleClans/issues)
|
||||
[](https://crowdin.com/project/simpleclans)
|
||||
[](https://discord.gg/CkNwgdE)
|
||||
[](https://bstats.org/plugin/bukkit/SimpleClans/7131)
|
||||
[](https://bstats.org/plugin/bukkit/SimpleClans/7131)
|
||||
|
||||
Current fork version: **2.4**
|
||||
|
||||
- [Fork-only changelog](CHANGELOG.md)
|
||||
- [PlaceholderAPI and MiniPlaceholders reference](placeholder-info.txt)
|
||||
- [Upstream SimpleClans project](https://github.com/RoinujNosde/SimpleClans)
|
||||
#### Download Link
|
||||
|
||||
## Main fork differences
|
||||
* [Download from Spigot](https://www.spigotmc.org/resources/simpleclans.71242/)
|
||||
|
||||
### Flat unions
|
||||
#### Documentation
|
||||
|
||||
Unions have no internal hierarchy. Ranks, promotion, demotion and the leader
|
||||
role itself were removed, so every member holds the same powers.
|
||||
* [Documentation](https://simpleclans.gitbook.io/simpleclans/)
|
||||
* Commands & Permissions
|
||||
* [Permissions](https://simpleclans.gitbook.io/simpleclans/commands-and-permissions/permissions)
|
||||
* [Commands](https://simpleclans.gitbook.io/simpleclans/commands-and-permissions/commands)
|
||||
* [Clan Alliances and Rivalries](https://simpleclans.gitbook.io/simpleclans/commands-and-permissions/aliances-and-rivalries)
|
||||
* [Clan Ranks with Permissions](https://simpleclans.gitbook.io/simpleclans/commands-and-permissions/ranks-with-permissions)
|
||||
* How to Setup
|
||||
* [Configuration](https://simpleclans.gitbook.io/simpleclans/how-to-setup/configuration)
|
||||
* [Translation](https://simpleclans.gitbook.io/simpleclans/how-to-setup/translation)
|
||||
* [Clan Member Fee](https://simpleclans.gitbook.io/simpleclans/how-to-setup/member-fee)
|
||||
* [Clan Upkeep](https://simpleclans.gitbook.io/simpleclans/how-to-setup/clan-upkeep)
|
||||
* [Clan name above players head](https://simpleclans.gitbook.io/simpleclans/how-to-setup/clan-below-players-name)
|
||||
* [Clan name on Tablist](https://simpleclans.gitbook.io/simpleclans/how-to-setup/clan-on-tablist)
|
||||
* Plugins & Development
|
||||
* [SimpleClans API Example](https://simpleclans.gitbook.io/simpleclans/other/simpleclans-api)
|
||||
* [PlaceholderAPI Placeholders](https://simpleclans.gitbook.io/simpleclans/other/placeholderapi-support)
|
||||
* [Land Protection Plugins](https://simpleclans.gitbook.io/simpleclans/other/land-claims)
|
||||
|
||||
#### Support & Suggestions
|
||||
|
||||
- Every union command is member-level. There is no leader flag, no rank
|
||||
system, and no way to grant one member authority over another.
|
||||
- A union ends with its last member: resigning, or being kicked or moved out
|
||||
as the only member, disbands it.
|
||||
* [Discord Support](https://discord.gg/CkNwgdE)
|
||||
* [Bugs and Suggestions](https://github.com/RoinujNosde/SimpleClans/issues)
|
||||
|
||||
### Decisions by member consensus
|
||||
|
||||
Three actions need a vote of the union's own members instead of a leader's
|
||||
say-so: **disband**, **home set**, and **war start**.
|
||||
#### Developers
|
||||
|
||||
- A proposal passes as soon as half the members (rounded up) vote in favour,
|
||||
and is rejected as soon as enough vote against that half can no longer be
|
||||
reached.
|
||||
- Votes are stored in the database, so a member who is offline when a
|
||||
proposal opens can still vote the next time they log in. Proposals expire
|
||||
after 7 days.
|
||||
- A union can only have one proposal open at a time.
|
||||
- Members vote with `/union vote yes|no`, or by clicking the vote buttons in
|
||||
the union GUI. The GUI is presented once on login to members who have not
|
||||
voted yet.
|
||||
- `/union vote` on its own shows the open proposal and the running tally.
|
||||
|
||||
### Other differences
|
||||
|
||||
- Uses Unions-OG branding and union terminology throughout, including config
|
||||
sections (`union:`, `unionchat:`) and message keys.
|
||||
- Provides `/union` and `/unions`. Other group words — `/clan`, `/clans`,
|
||||
`/factions`, `/guilds`, `/party`, `/tribe`, `/nation`, `/crew`, `/squad` and
|
||||
`/gang` — are registered as signposts that tell the player to run the same command with
|
||||
`/union` instead. `/f`, `/faction` and `/guild` belong to Utilities-OG,
|
||||
which already redirects them.
|
||||
- Uses `/u` for union chat; a bare `/u` toggles the union-chat channel.
|
||||
- Adds `/union rename <name>` and `/union color <color>`, both open to any
|
||||
member.
|
||||
- Union-wide friendly fire is `/union unionff allow|block`, aliased as
|
||||
`/union pvp on|off`. The per-player friendly fire opt-in (`/union ff`)
|
||||
is removed, so friendly fire is decided only by the union setting or the
|
||||
staff-wide `globalff` override.
|
||||
- Supports both `simpleclans` and `simpleunions` placeholder identifiers in
|
||||
PlaceholderAPI and MiniPlaceholders.
|
||||
- Uses DiamondBank-OG instead of Vault for player economy access. Union-owned
|
||||
bank accounts remain under development, so their commands are currently
|
||||
disabled. Once enabled, disbanding a union splits its bank evenly between
|
||||
all members.
|
||||
- Treats unions as verified without requiring the upstream verification
|
||||
workflow.
|
||||
- Includes a configuration-gated, transactional importer for the legacy
|
||||
unions database.
|
||||
|
||||
See the [changelog](CHANGELOG.md) for the complete list of changes maintained
|
||||
by this fork. Upstream SimpleClans changes are intentionally not repeated
|
||||
there.
|
||||
|
||||
## Documentation
|
||||
|
||||
The [Unions-OG wiki](wiki/) documents this fork, and is the reference to use.
|
||||
|
||||
- [Commands](wiki/commands-and-permissions/commands.md)
|
||||
- [Permissions](wiki/commands-and-permissions/permissions.md)
|
||||
- [Proposals and Voting](wiki/commands-and-permissions/proposals-and-voting.md)
|
||||
- [Union Alliances and Rivalries](wiki/commands-and-permissions/alliances-and-rivalries.md)
|
||||
- [Configuration](wiki/how-to-setup/configuration.md)
|
||||
- [PlaceholderAPI Support](wiki/other/placeholderapi-support.md)
|
||||
- [API example](wiki/other/unions-og-api.md)
|
||||
|
||||
> [!WARNING]
|
||||
> The [upstream SimpleClans documentation](https://simpleclans.gitbook.io/simpleclans/)
|
||||
> no longer describes this fork. Its pages on leaders, ranks, promotion,
|
||||
> demotion, member fees and upkeep do **not** apply, and its command,
|
||||
> permission and configuration names have all been renamed here.
|
||||
|
||||
For the unmodified upstream plugin and its public releases, use the
|
||||
[SimpleClans Spigot page](https://www.spigotmc.org/resources/simpleclans.71242/).
|
||||
That download is not an Unions-OG build.
|
||||
|
||||
## Building
|
||||
|
||||
The build requires Java 17. Clone with submodules, then run:
|
||||
|
||||
```bash
|
||||
git submodule update --init --recursive
|
||||
./gradlew build
|
||||
Including SimpleClans with Maven:
|
||||
```xml
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>roinujnosde-repo</id>
|
||||
<url>https://repo.roinujnosde.me/releases/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
```
|
||||
```xml
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>net.sacredlabyrinth.phaed.simpleclans</groupId>
|
||||
<artifactId>SimpleClans</artifactId>
|
||||
<version>2.17.0</version> <!-- You can find the latest version at the bottom -->
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
The shaded plugin is produced under `build/libs/` with the
|
||||
`Unions-OG-2.4.jar` name.
|
||||
Using Gradle:
|
||||
```groovy
|
||||
repositories {
|
||||
maven {
|
||||
url "https://repo.roinujnosde.me/releases/"
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
compileOnly "net.sacredlabyrinth.phaed.simpleclans:SimpleClans:2.17.0"
|
||||
}
|
||||
```
|
||||
|
||||
## Developer compatibility
|
||||
|
||||
- Java and Gradle namespace: `net.trueog.unionsog`
|
||||
- Bukkit main class: `net.trueog.unionsog.UnionsOG`
|
||||
- API types use union naming: `Union`, `UnionPlayer`, `UnionManager`,
|
||||
`Proposal`, `DisbandUnionEvent`
|
||||
- Permission prefix: `unionsog.*`. Union actions all live under
|
||||
`unionsog.member.*`, which is granted by default; there is no
|
||||
`unionsog.leader.*` tree
|
||||
- Command aliases: `union` and `unions`. Other group words are redirect-only
|
||||
signposts, not aliases, and never execute a union command
|
||||
- Placeholder identifiers: `simpleunions` and the retained `simpleclans`
|
||||
compatibility identifier. Placeholder **names** deliberately keep their
|
||||
upstream `clan` spelling (`%simpleunions_clan_name%`) so existing setups
|
||||
keep resolving
|
||||
- Database identifiers are unchanged for live-data compatibility: the table
|
||||
prefix stays `sc_`, and the `clans` table and `leader` column are retained
|
||||
even though the leader column is no longer used
|
||||
- Chat and display formats accept `{union}`; the legacy `{clan}` token still
|
||||
works
|
||||
|
||||
The old SimpleClans Maven coordinates and Java packages do not describe this
|
||||
fork and should not be used as Unions-OG API coordinates.
|
||||
|
||||
## Credits and license
|
||||
|
||||
Unions-OG is derived from SimpleClans by its original and upstream
|
||||
contributors. This fork remains licensed under the [GNU GPL v3](LICENSE).
|
||||
Feel free to learn our [Javadoc](https://ci.roinujnosde.me/job/SimpleClans/Javadoc/).
|
||||
##### Latest version:
|
||||
[](https://repo.roinujnosde.me/#/releases/net/sacredlabyrinth/phaed/simpleclans/SimpleClans)
|
||||
##### API Examples
|
||||
* [Examples of how to use the API](https://simpleclans.gitbook.io/simpleclans/other/simpleclans-api)
|
||||
+145
@@ -0,0 +1,145 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||
<output url="file://$MODULE_DIR$/target/classes" />
|
||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-api:1.16.4-R0.1-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.6" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:guava:21.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.16-R0.3" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.MilkBowl:VaultAPI:1.7" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:bukkit:1.13.1-R0.1-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: junit:junit:4.10" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.bstats:bstats-bukkit:2.2.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.bstats:bstats-base:2.2.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: me.clip:placeholderapi:2.10.9" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jetbrains:annotations:22.0.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.papermc:paperlib:1.0.8-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" name="Maven: co.aikar:acf-paper:0.5.1-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.github.cryptomorin:XSeries:8.3.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.2" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.7.2" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard:worldguard-bukkit:7.0.4" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit:worldedit-bukkit:7.2.0-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard:worldguard-core:7.0.4" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard.worldguard-libs:core:7.0.4" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit:worldedit-core:7.2.0-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit.worldedit-libs:core:7.2.0-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: de.schlichtherle:truezip:6.8.3" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-profile-default_2.13:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.scala-lang:scala-library:2.13.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-http:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-kernel-spec:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-annotations:2.5.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:annotations:3.0.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-cio:2.5.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-io:2.5.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-services:2.5.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-logging:2.5.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.inject:javax.inject:1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.httpcomponents:httpclient:4.5.10" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.httpcomponents:httpcore:4.4.12" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-odf:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-zipdriver:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-zip:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bouncycastle:bcprov-jdk15on:1.63" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-tardriver:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-compress:1.19" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar-bzip2:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar-gzip:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar-xz:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.tukaani:xz:1.8" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-zip-raes:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-profile-base_2.13:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-access-swing:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-access:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-file:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-jar:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-zip:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-ibm437:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-kernel-impl_2.13:0.12.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-console:2.5.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-default:2.5.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-swing:2.5.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-macosx:2.5.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-spec:2.5.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-shed:2.5.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.dev.jna:jna:4.1.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.mozilla:rhino-runtime:1.7.12" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: it.unimi.dsi:fastutil:8.2.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.antlr:antlr4-runtime:4.7.2" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.flywaydb:flyway-core:3.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q:commandbook:2.3" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TechFortress:GriefPrevention:16.17.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.discordsrv:discordsrv:1.24.1-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.dv8tion:JDA:4.3.0_349" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.squareup.okhttp3:okhttp:3.13.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.squareup.okio:okio:1.17.2" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.10.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.core:jackson-core:2.10.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.neovisionaries:nv-websocket-client:2.14" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.sf.trove4j:trove4j:3.0.3" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: github.scarsz:configuralize:1.3.2" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.alexheretic:dynamics:4.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.alexheretic:fluent:2.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:slf4j-jdk14:1.7.25" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:jcl-over-slf4j:1.7.25" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-io:commons-io:2.8.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-lang3:3.5" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-codec:commons-codec:1.11" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.vdurmont:emoji-java:5.1.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.json:json:20170516" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.zafarkhaja:java-semver:0.9.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.kevinsawicki:http-request:6.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.minidns:minidns-hla:1.0.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.minidns:minidns-dnssec:1.0.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.minidns:minidns-client:1.0.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.minidns:minidns-core:1.0.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.minidns:minidns-iterative-resolver:1.0.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework:spring-expression:5.2.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework:spring-core:5.2.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: dev.vankka:MCDiscordReserializer:4.2.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: dev.vankka:SimpleAST:2.2.7" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-api:4.9.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-key:4.9.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:examination-api:1.3.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:examination-string:1.3.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-legacy:4.9.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-gson:4.9.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-plain:4.9.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-platform-bukkit:4.0.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-platform-api:4.0.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-bungeecord:4.0.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-nbt:4.9.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-gson-legacy-impl:4.9.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-platform-facet:4.0.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-platform-viaversion:4.0.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-minimessage:4.1.0-20210316.192746" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: biz.princeps:landlord-latest:4.351" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: biz.princeps:landlord-core:4.351" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: biz.princeps:landlord-api:4.351" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: io.github.bananapuncher714:nbteditor:7.16.1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: de.eldoria:eldo-util:1.9.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.9.1" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,4 +0,0 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
# Fetch all submodule content.
|
||||
git submodule update --force --recursive --init
|
||||
@@ -1,181 +0,0 @@
|
||||
import org.gradle.kotlin.dsl.provideDelegate
|
||||
|
||||
/* ------------------------------ Plugins ------------------------------ */
|
||||
plugins {
|
||||
id("java") // Import Java plugin.
|
||||
id("java-library") // Import Java Library plugin.
|
||||
id("com.diffplug.spotless") version "8.1.0" // Import Spotless plugin.
|
||||
id("com.gradleup.shadow") version "8.3.9" // Import Shadow plugin.
|
||||
id("checkstyle") // Import Checkstyle plugin.
|
||||
eclipse // Import Eclipse plugin.
|
||||
kotlin("jvm") version "2.1.21" // Import Kotlin JVM plugin.
|
||||
}
|
||||
|
||||
extra["kotlinAttribute"] = Attribute.of("kotlin-tag", Boolean::class.javaObjectType)
|
||||
|
||||
val kotlinAttribute: Attribute<Boolean> by rootProject.extra
|
||||
|
||||
/* --------------------------- JDK / Kotlin ---------------------------- */
|
||||
java {
|
||||
sourceCompatibility = JavaVersion.VERSION_17 // Compile with JDK 17 compatibility.
|
||||
toolchain { // Select Java toolchain.
|
||||
languageVersion.set(JavaLanguageVersion.of(17)) // Use JDK 17.
|
||||
vendor.set(JvmVendorSpec.GRAAL_VM) // Use GraalVM CE.
|
||||
}
|
||||
}
|
||||
|
||||
kotlin { jvmToolchain(17) }
|
||||
|
||||
/* ----------------------------- Metadata ------------------------------ */
|
||||
group = "net.trueog.unionsog" // Declare bundle identifier.
|
||||
|
||||
version = "2.5.1" // Declare plugin version (will be in .jar).
|
||||
|
||||
val apiVersion = "1.19" // Declare minecraft server target version.
|
||||
|
||||
/* ----------------------------- Resources ----------------------------- */
|
||||
tasks.named<ProcessResources>("processResources") {
|
||||
val props = mapOf("version" to version, "apiVersion" to apiVersion)
|
||||
inputs.properties(props) // Indicates to rerun if version changes.
|
||||
filesMatching("plugin.yml") { expand(props) }
|
||||
from("LICENSE") { into("/") } // Bundle licenses into jarfiles.
|
||||
}
|
||||
|
||||
/* ---------------------------- Repos ---------------------------------- */
|
||||
repositories {
|
||||
mavenCentral() // Import the Maven Central Maven Repository.
|
||||
gradlePluginPortal() // Import the Gradle Plugin Portal Maven Repository.
|
||||
maven { url = uri("https://repo.purpurmc.org/snapshots") } // Import the PurpurMC Maven Repository.
|
||||
maven { url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") }
|
||||
maven { url = uri("https://repo.extendedclip.com/content/repositories/placeholderapi/") }
|
||||
maven { url = uri("https://repo.codemc.org/repository/maven-public") }
|
||||
maven { url = uri("https://repo.papermc.io/repository/maven-public/") }
|
||||
maven { url = uri("https://repo.aikar.co/content/groups/aikar/") }
|
||||
maven { url = uri("https://maven.enginehub.org/repo/") }
|
||||
maven { url = uri("https://nexus.scarsz.me/content/groups/public/") }
|
||||
maven { url = uri("https://eldonexus.de/repository/maven-public") }
|
||||
maven { url = uri("https://jitpack.io") }
|
||||
maven { url = uri("file://${System.getProperty("user.home")}/.m2/repository") }
|
||||
System.getProperty("SELF_MAVEN_LOCAL_REPO")?.let {
|
||||
val dir = file(it)
|
||||
if (dir.isDirectory) {
|
||||
println("Using SELF_MAVEN_LOCAL_REPO at: $it")
|
||||
maven { url = uri("file://${dir.absolutePath}") }
|
||||
} else {
|
||||
logger.error("TrueOG Bootstrap not found, defaulting to ~/.m2 for mavenLocal()")
|
||||
mavenLocal()
|
||||
}
|
||||
} ?: logger.error("TrueOG Bootstrap not found, defaulting to ~/.m2 for mavenLocal()")
|
||||
}
|
||||
|
||||
/* ---------------------- Java project deps ---------------------------- */
|
||||
dependencies {
|
||||
compileOnly("org.purpurmc.purpur:purpur-api:1.19.4-R0.1-SNAPSHOT")
|
||||
compileOnly("net.luckperms:api:5.5") // Import LuckPerms API.
|
||||
compileOnlyApi(project(":libs:Utilities-OG")) // Import TrueOG Network Utilities-OG Java API (from source).
|
||||
compileOnlyApi(project(":libs:DiamondBank-OG")) {
|
||||
attributes { attribute(kotlinAttribute, true) }
|
||||
} // Import TrueOG network DiamondBank-OG Kotlin API (from source).
|
||||
compileOnly("me.clip:placeholderapi:2.11.3")
|
||||
compileOnly("org.jetbrains:annotations:24.0.1")
|
||||
implementation("io.papermc:paperlib:1.0.8-SNAPSHOT")
|
||||
implementation("net.kyori:adventure-api:4.14.0")
|
||||
implementation("net.kyori:adventure-text-minimessage:4.14.0")
|
||||
implementation("net.kyori:adventure-platform-bukkit:4.3.0")
|
||||
implementation("co.aikar:acf-paper:0.5.1-SNAPSHOT")
|
||||
implementation("com.github.cryptomorin:XSeries:11.2.0.1")
|
||||
compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.3.0-SNAPSHOT") { isTransitive = false }
|
||||
compileOnly("com.sk89q.worldedit:worldedit-core:7.3.0-SNAPSHOT") { isTransitive = false }
|
||||
compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.0.8") { isTransitive = false }
|
||||
compileOnly("com.sk89q.worldguard:worldguard-core:7.0.8") { isTransitive = false }
|
||||
compileOnly("com.github.TechFortress:GriefPrevention:17.0.0")
|
||||
compileOnly("com.discordsrv:discordsrv:1.28.0")
|
||||
implementation("com.google.code.gson:gson:2.10.1")
|
||||
testImplementation("org.purpurmc.purpur:purpur-api:1.19.4-R0.1-SNAPSHOT")
|
||||
testImplementation("org.junit.jupiter:junit-jupiter-api:5.11.3")
|
||||
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.11.3")
|
||||
testImplementation("org.junit.jupiter:junit-jupiter-params:5.11.3")
|
||||
testImplementation("org.mockito:mockito-core:5.14.2")
|
||||
testImplementation("org.mockito:mockito-junit-jupiter:5.14.2")
|
||||
testImplementation("com.h2database:h2:2.3.232")
|
||||
}
|
||||
|
||||
apply(from = "eclipse.gradle.kts") // Import eclipse classpath support script.
|
||||
|
||||
/* ---------------------- Reproducible jars ---------------------------- */
|
||||
tasks.withType<AbstractArchiveTask>().configureEach { // Ensure reproducible .jars
|
||||
isPreserveFileTimestamps = false
|
||||
isReproducibleFileOrder = true
|
||||
}
|
||||
|
||||
/* ----------------------------- Shadow -------------------------------- */
|
||||
tasks.shadowJar {
|
||||
relocate("io.papermc.lib", "net.trueog.unionsog.paperlib")
|
||||
relocate("co.aikar.commands", "net.trueog.unionsog.acf")
|
||||
relocate("co.aikar.locales", "net.trueog.unionsog.locales")
|
||||
relocate("com.cryptomorin.xseries", "net.trueog.unionsog.xseries")
|
||||
relocate("com.google.gson", "net.trueog.unionsog.gson")
|
||||
dependencies { exclude(dependency("org.jetbrains:annotations:.*")) }
|
||||
archiveBaseName.set("Unions-OG")
|
||||
archiveClassifier.set("")
|
||||
}
|
||||
|
||||
tasks.jar { archiveClassifier.set("part") } // Applies to root jarfile only.
|
||||
|
||||
tasks.build { dependsOn(tasks.spotlessApply, tasks.shadowJar, tasks.javadoc) } // Build depends on spotless and shadow.
|
||||
|
||||
/* --------------------------- Javac opts ------------------------------- */
|
||||
tasks.withType<JavaCompile>().configureEach {
|
||||
options.compilerArgs.add("-parameters") // Enable reflection for java code.
|
||||
options.isFork = true // Run javac in its own process.
|
||||
options.compilerArgs.add("-Xlint:deprecation") // Trigger deprecation warning messages.
|
||||
options.encoding = "UTF-8" // Use UTF-8 file encoding.
|
||||
}
|
||||
|
||||
tasks.test { useJUnitPlatform() }
|
||||
|
||||
/* ----------------------------- Auto Formatting ------------------------ */
|
||||
spotless {
|
||||
java {
|
||||
eclipse().configFile("config/formatter/eclipse-java-formatter.xml") // Eclipse java formatting.
|
||||
leadingTabsToSpaces() // Convert leftover leading tabs to spaces.
|
||||
removeUnusedImports() // Remove imports that aren't being called.
|
||||
}
|
||||
kotlinGradle {
|
||||
ktfmt().kotlinlangStyle().configure { it.setMaxWidth(120) } // JetBrains Kotlin formatting.
|
||||
target("build.gradle.kts", "settings.gradle.kts") // Gradle files to format.
|
||||
}
|
||||
}
|
||||
|
||||
checkstyle {
|
||||
toolVersion = "10.18.1" // Declare checkstyle version to use.
|
||||
configFile = file("config/checkstyle/checkstyle.xml") // Point checkstyle to config file.
|
||||
isIgnoreFailures = true // Don't fail the build if checkstyle does not pass.
|
||||
isShowViolations = true // Show the violations in any IDE with the checkstyle plugin.
|
||||
}
|
||||
|
||||
tasks.named("compileJava") {
|
||||
dependsOn("spotlessApply") // Run spotless before compiling with the JDK.
|
||||
}
|
||||
|
||||
tasks.named("spotlessCheck") {
|
||||
dependsOn("spotlessApply") // Run spotless before checking if spotless ran.
|
||||
}
|
||||
|
||||
/* ------------------------------ Eclipse SHIM ------------------------- */
|
||||
|
||||
// This can't be put in eclipse.gradle.kts because Gradle is weird.
|
||||
subprojects {
|
||||
apply(plugin = "java-library")
|
||||
apply(plugin = "eclipse")
|
||||
eclipse.project.name = "${project.name}-${rootProject.name}"
|
||||
tasks.withType<Jar>().configureEach { archiveBaseName.set("${project.name}-${rootProject.name}") }
|
||||
}
|
||||
|
||||
tasks.register<Copy>("copyToTestServer") {
|
||||
val out = System.getenv("TEST_SERVER")?.let { file("$it/plugins") }
|
||||
onlyIf { out != null }
|
||||
dependsOn(tasks.shadowJar)
|
||||
from(tasks.shadowJar)
|
||||
into(out ?: layout.buildDirectory.dir("noop").get().asFile)
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE module PUBLIC
|
||||
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
|
||||
"https://checkstyle.org/dtds/configuration_1_3.dtd">
|
||||
<module name="Checker">
|
||||
|
||||
<module name="FileTabCharacter">
|
||||
<property name="eachLine" value="true"/>
|
||||
<property name="severity" value="error"/>
|
||||
</module>
|
||||
|
||||
<module name="TreeWalker">
|
||||
<module name="FinalLocalVariable"/>
|
||||
<module name="AvoidStarImport"/>
|
||||
<module name="Indentation">
|
||||
<property name="severity" value="ignore"/>
|
||||
</module>
|
||||
</module>
|
||||
|
||||
<module name="RegexpSingleline">
|
||||
<property name="format" value="\borg\.junit\.jupiter\.api\.Assertions\.fail\s*\(\s*"Not yet implemented"\s*\)\s*;"/>
|
||||
<property name="message" value="Remove placeholder fail() and implement the test."/>
|
||||
<property name="ignoreCase" value="true"/>
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<module name="RegexpSingleline">
|
||||
<property name="format" value="(?<!\w)fail\s*\(\s*"Not yet implemented"\s*\)\s*;"/>
|
||||
<property name="message" value="Remove placeholder fail() and implement the test."/>
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
</module>
|
||||
|
||||
@@ -1,404 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<profiles version="23">
|
||||
<profile kind="CodeFormatterProfile" name="TrueOG Network Formatting" version="23">
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_record_components" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant" value="49"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.text_block_indentation" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_permitted_types" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_annotations" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_not_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package" value="49"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_permitted_types_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.javadoc_do_not_separate_block_tags" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_constructor" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case_after_arrow" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_arrows_in_switch_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_declaration" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type" value="49"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable" value="49"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field" value="49"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_line_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow" value="20"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method" value="49"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assertion_message" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_permitted_types" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line_on_wrap"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
|
||||
</profile>
|
||||
</profiles>
|
||||
@@ -0,0 +1,412 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>net.sacredlabyrinth.phaed.simpleclans</groupId>
|
||||
<artifactId>SimpleClans</artifactId>
|
||||
<name>SimpleClans</name>
|
||||
<version>2.18.1-SNAPSHOT</version>
|
||||
<url>https://www.spigotmc.org/resources/simpleclans.71242/</url>
|
||||
<build>
|
||||
<resources>
|
||||
<resource>
|
||||
<targetPath>.</targetPath>
|
||||
<filtering>true</filtering>
|
||||
<directory>${basedir}/src/main/resources</directory>
|
||||
<includes>
|
||||
<include>plugin.yml</include>
|
||||
<include>config.yml</include>
|
||||
<include>*.properties</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
<finalName>${project.name}</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
<showDeprecation>true</showDeprecation>
|
||||
<showWarnings>true</showWarnings>
|
||||
<compilerArgs>
|
||||
<arg>-parameters</arg>
|
||||
</compilerArgs>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-release-plugin</artifactId>
|
||||
<version>2.3.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>shade</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<relocations>
|
||||
<relocation>
|
||||
<pattern>org.bstats</pattern>
|
||||
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.metrics</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>io.papermc.lib</pattern>
|
||||
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.paperlib</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>co.aikar.commands</pattern>
|
||||
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.acf</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>co.aikar.locales</pattern>
|
||||
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.locales</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>com.cryptomorin.xseries</pattern>
|
||||
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.xseries</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>com.google.gson</pattern>
|
||||
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.gson</shadedPattern>
|
||||
</relocation>
|
||||
</relocations>
|
||||
<artifactSet>
|
||||
<excludes>
|
||||
<exclude>org.jetbrains:annotations</exclude>
|
||||
</excludes>
|
||||
</artifactSet>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-installed</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>copy</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>${project.artifactId}</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<type>${project.packaging}</type>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
<outputDirectory>${env.TEST_SERVER}\plugins</outputDirectory>
|
||||
<silent>true</silent>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>pl.project13.maven</groupId>
|
||||
<artifactId>git-commit-id-plugin</artifactId>
|
||||
<version>3.0.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>validate</phase>
|
||||
<goals>
|
||||
<goal>revision</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>3.3.2</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>javadoc</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<source>8</source>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>spigot-repo</id>
|
||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>placeholderapi-repo</id>
|
||||
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>bstats-repo</id>
|
||||
<url>https://repo.codemc.org/repository/maven-public</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>papermc</id>
|
||||
<url>https://papermc.io/repo/repository/maven-public/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>aikar</id>
|
||||
<url>https://repo.aikar.co/content/groups/aikar/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>sk89q-repo</id>
|
||||
<url>https://maven.enginehub.org/repo/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>Scarsz-Nexus</id>
|
||||
<url>https://nexus.scarsz.me/content/groups/public/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>eldonexus</id>
|
||||
<url>https://eldonexus.de/repository/maven-public</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>jitpack.io</id>
|
||||
<url>https://jitpack.io</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.16.4-R0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>commons-lang</artifactId>
|
||||
<groupId>commons-lang</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>guava</artifactId>
|
||||
<groupId>com.google.guava</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>bungeecord-chat</artifactId>
|
||||
<groupId>net.md-5</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>snakeyaml</artifactId>
|
||||
<groupId>org.yaml</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.MilkBowl</groupId>
|
||||
<artifactId>VaultAPI</artifactId>
|
||||
<version>1.7</version>
|
||||
<scope>provided</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>bukkit</artifactId>
|
||||
<groupId>org.bukkit</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>me.clip</groupId>
|
||||
<artifactId>placeholderapi</artifactId>
|
||||
<version>2.10.9</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains</groupId>
|
||||
<artifactId>annotations</artifactId>
|
||||
<version>22.0.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-api</artifactId>
|
||||
<version>5.7.2</version>
|
||||
<scope>test</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>apiguardian-api</artifactId>
|
||||
<groupId>org.apiguardian</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>opentest4j</artifactId>
|
||||
<groupId>org.opentest4j</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>junit-platform-commons</artifactId>
|
||||
<groupId>org.junit.platform</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sk89q.worldguard</groupId>
|
||||
<artifactId>worldguard-bukkit</artifactId>
|
||||
<version>7.0.4</version>
|
||||
<scope>provided</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>worldedit-bukkit</artifactId>
|
||||
<groupId>com.sk89q.worldedit</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>worldguard-core</artifactId>
|
||||
<groupId>com.sk89q.worldguard</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>commandbook</artifactId>
|
||||
<groupId>com.sk89q</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>guava</artifactId>
|
||||
<groupId>com.google.guava</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.TechFortress</groupId>
|
||||
<artifactId>GriefPrevention</artifactId>
|
||||
<version>16.17.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.discordsrv</groupId>
|
||||
<artifactId>discordsrv</artifactId>
|
||||
<version>1.24.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>JDA</artifactId>
|
||||
<groupId>net.dv8tion</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>nv-websocket-client</artifactId>
|
||||
<groupId>com.neovisionaries</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>trove4j</artifactId>
|
||||
<groupId>net.sf.trove4j</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>configuralize</artifactId>
|
||||
<groupId>github.scarsz</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>slf4j-jdk14</artifactId>
|
||||
<groupId>org.slf4j</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>jcl-over-slf4j</artifactId>
|
||||
<groupId>org.slf4j</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<groupId>commons-io</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>commons-collections</artifactId>
|
||||
<groupId>commons-collections</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<groupId>commons-codec</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>emoji-java</artifactId>
|
||||
<groupId>com.vdurmont</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>java-semver</artifactId>
|
||||
<groupId>com.github.zafarkhaja</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>http-request</artifactId>
|
||||
<groupId>com.github.kevinsawicki</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>minidns-hla</artifactId>
|
||||
<groupId>org.minidns</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>spring-expression</artifactId>
|
||||
<groupId>org.springframework</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>MCDiscordReserializer</artifactId>
|
||||
<groupId>dev.vankka</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>adventure-api</artifactId>
|
||||
<groupId>net.kyori</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>adventure-text-serializer-legacy</artifactId>
|
||||
<groupId>net.kyori</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>adventure-text-serializer-gson</artifactId>
|
||||
<groupId>net.kyori</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>adventure-text-serializer-plain</artifactId>
|
||||
<groupId>net.kyori</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>adventure-platform-bukkit</artifactId>
|
||||
<groupId>net.kyori</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>adventure-text-minimessage</artifactId>
|
||||
<groupId>net.kyori</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>guava</artifactId>
|
||||
<groupId>com.google.guava</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>biz.princeps</groupId>
|
||||
<artifactId>landlord-latest</artifactId>
|
||||
<version>4.351</version>
|
||||
<scope>provided</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>landlord-core</artifactId>
|
||||
<groupId>biz.princeps</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>reposilite</id>
|
||||
<url>https://repo.roinujnosde.me/releases/</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>reposilite</id>
|
||||
<url>https://repo.roinujnosde.me/snapshots/</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
</project>
|
||||
|
||||
@@ -1,151 +0,0 @@
|
||||
/* This is free and unencumbered software released into the public domain */
|
||||
|
||||
import org.gradle.plugins.ide.eclipse.model.EclipseModel
|
||||
import java.nio.file.Files
|
||||
import javax.xml.parsers.DocumentBuilderFactory
|
||||
import javax.xml.transform.OutputKeys
|
||||
import javax.xml.transform.TransformerFactory
|
||||
import javax.xml.transform.dom.DOMSource
|
||||
import javax.xml.transform.stream.StreamResult
|
||||
|
||||
val kotlinAttribute: Attribute<Boolean> by rootProject.extra
|
||||
|
||||
val kotlinPluginProjects = configurations
|
||||
.getByName("compileClasspath")
|
||||
.allDependencies
|
||||
.filterIsInstance<ProjectDependency>()
|
||||
.filter { it -> it.attributes.getAttribute(kotlinAttribute) != null }
|
||||
.map { it.path }
|
||||
kotlinPluginProjects.forEach { evaluationDependsOn(it) }
|
||||
|
||||
val ideLibs: Configuration by
|
||||
configurations.creating {
|
||||
isCanBeResolved = true
|
||||
isCanBeConsumed = false
|
||||
}
|
||||
|
||||
configure<EclipseModel> {
|
||||
project {
|
||||
name = "Template-OG-Plugin"
|
||||
}
|
||||
classpath {
|
||||
plusConfigurations.add(ideLibs)
|
||||
}
|
||||
}
|
||||
|
||||
val ideLibDir = layout.buildDirectory.dir("ide-libs")
|
||||
val hashRegex = Regex("-[0-9a-fA-F]{10}(?=\\.jar$)") // Black magic.
|
||||
|
||||
val copyTasks = mutableListOf<TaskProvider<Copy>>()
|
||||
|
||||
kotlinPluginProjects.forEach { path ->
|
||||
val sub = project(path)
|
||||
val shadowJarProv = sub.tasks.named("shadowJar")
|
||||
val copyTask =
|
||||
tasks.register<Copy>("ideCopy${sub.name.replaceFirstChar(Char::titlecase)}") {
|
||||
dependsOn(shadowJarProv)
|
||||
from(shadowJarProv)
|
||||
into(ideLibDir)
|
||||
rename { it.replace(hashRegex, "") } // Remove git commit hash from jarfile.
|
||||
}
|
||||
copyTasks += copyTask
|
||||
}
|
||||
|
||||
/* Ensure the jars exist before .classpath is generated */
|
||||
tasks.named("eclipseClasspath").configure { dependsOn(copyTasks) }
|
||||
|
||||
/* Supply those jars to the ideLibs configuration (after evaluation) */
|
||||
afterEvaluate { dependencies { add("ideLibs", fileTree(ideLibDir) { include("*.jar") }) } }
|
||||
|
||||
val injectIdeLibs =
|
||||
tasks.register("injectIdeLibs") {
|
||||
dependsOn("eclipse") // run after all eclipse files are generated
|
||||
doLast {
|
||||
val cpFile = file(".classpath")
|
||||
if (!cpFile.exists()) return@doLast
|
||||
|
||||
val jars = fileTree(ideLibDir.get()) { include("*.jar") }.files.sortedBy { it.name }
|
||||
if (jars.isEmpty()) return@doLast
|
||||
|
||||
// Parse DOM
|
||||
val dbf = DocumentBuilderFactory.newInstance()
|
||||
val doc = dbf.newDocumentBuilder().parse(cpFile)
|
||||
val root = doc.documentElement
|
||||
|
||||
// Helper to see if an entry already exists
|
||||
fun exists(path: String): Boolean =
|
||||
root.getElementsByTagName("classpathentry").let { list ->
|
||||
(0 until list.length).any { i ->
|
||||
val n = list.item(i)
|
||||
val kind = n.attributes?.getNamedItem("kind")?.nodeValue
|
||||
val p = n.attributes?.getNamedItem("path")?.nodeValue
|
||||
kind == "lib" && p == path
|
||||
}
|
||||
}
|
||||
|
||||
// Remove any entry that points to ide-libs dir (folder or jars) to avoid dupes
|
||||
val toRemove = mutableListOf<org.w3c.dom.Node>()
|
||||
val list = root.getElementsByTagName("classpathentry")
|
||||
val dirPath = ideLibDir.get().asFile.absolutePath
|
||||
for (i in 0 until list.length) {
|
||||
val n = list.item(i)
|
||||
val kind = n.attributes?.getNamedItem("kind")?.nodeValue
|
||||
val p = n.attributes?.getNamedItem("path")?.nodeValue ?: ""
|
||||
if (kind == "lib" && (p == dirPath || p.startsWith("$dirPath/"))) {
|
||||
toRemove += n
|
||||
}
|
||||
}
|
||||
toRemove.forEach { root.removeChild(it) }
|
||||
|
||||
// Append our jar entries LAST
|
||||
jars.forEach { f ->
|
||||
val abs = f.absolutePath
|
||||
if (!exists(abs)) {
|
||||
val entry = doc.createElement("classpathentry")
|
||||
entry.setAttribute("kind", "lib")
|
||||
entry.setAttribute("path", abs)
|
||||
root.appendChild(entry)
|
||||
}
|
||||
}
|
||||
|
||||
// Write back pretty
|
||||
val tf =
|
||||
TransformerFactory.newInstance().newTransformer().apply {
|
||||
setOutputProperty(OutputKeys.INDENT, "yes")
|
||||
setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "1")
|
||||
setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no")
|
||||
setOutputProperty(OutputKeys.ENCODING, "UTF-8")
|
||||
}
|
||||
Files.newBufferedWriter(cpFile.toPath()).use { w -> tf.transform(DOMSource(doc), StreamResult(w)) }
|
||||
}
|
||||
}
|
||||
|
||||
tasks.named("eclipse").configure { finalizedBy(injectIdeLibs) }
|
||||
|
||||
val eclipseModel = extensions.getByType<EclipseModel>()
|
||||
|
||||
fun Project.addResolvableEclipseConfigs() {
|
||||
val jarAttr =
|
||||
objects.named(org.gradle.api.attributes.LibraryElements::class, org.gradle.api.attributes.LibraryElements.JAR)
|
||||
val apiAttr = objects.named(org.gradle.api.attributes.Usage::class, org.gradle.api.attributes.Usage.JAVA_API)
|
||||
|
||||
val compileOnlyRes =
|
||||
configurations.create("eclipseCompileOnly") {
|
||||
extendsFrom(configurations.getByName("compileOnly"))
|
||||
isCanBeResolved = true
|
||||
isCanBeConsumed = false
|
||||
attributes.attribute(org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE, apiAttr)
|
||||
attributes.attribute(org.gradle.api.attributes.LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, jarAttr)
|
||||
}
|
||||
val compileOnlyApiRes =
|
||||
configurations.create("eclipseCompileOnlyApi") {
|
||||
extendsFrom(configurations.getByName("compileOnlyApi"))
|
||||
isCanBeResolved = true
|
||||
isCanBeConsumed = false
|
||||
attributes.attribute(org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE, apiAttr)
|
||||
attributes.attribute(org.gradle.api.attributes.LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, jarAttr)
|
||||
}
|
||||
eclipseModel.classpath.plusConfigurations.addAll(listOf(compileOnlyRes, compileOnlyApiRes))
|
||||
}
|
||||
|
||||
addResolvableEclipseConfigs()
|
||||
@@ -1,2 +0,0 @@
|
||||
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=1024m -Dfile.encoding=UTF-8
|
||||
|
||||
Vendored
BIN
Binary file not shown.
-7
@@ -1,7 +0,0 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
@@ -1,251 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Gradle start up script for POSIX generated by Gradle.
|
||||
#
|
||||
# Important for running:
|
||||
#
|
||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
||||
# noncompliant, but you have some other compliant shell such as ksh or
|
||||
# bash, then to run this script, type that shell name before the whole
|
||||
# command line, like:
|
||||
#
|
||||
# ksh Gradle
|
||||
#
|
||||
# Busybox and similar reduced shells will NOT work, because this script
|
||||
# requires all of these POSIX shell features:
|
||||
# * functions;
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
#
|
||||
# Important for patching:
|
||||
#
|
||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
||||
#
|
||||
# The "traditional" practice of packing multiple parameters into a
|
||||
# space-separated string is a well documented source of bugs and security
|
||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
||||
# options in "$@", and eventually passing that to Java.
|
||||
#
|
||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
||||
# see the in-line comments for details.
|
||||
#
|
||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
|
||||
# Resolve links: $0 may be a link
|
||||
app_path=$0
|
||||
|
||||
# Need this for daisy-chained symlinks.
|
||||
while
|
||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
||||
[ -h "$app_path" ]
|
||||
do
|
||||
ls=$( ls -ld "$app_path" )
|
||||
link=${ls#*' -> '}
|
||||
case $link in #(
|
||||
/*) app_path=$link ;; #(
|
||||
*) app_path=$APP_HOME$link ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# This is normally unused
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
} >&2
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
} >&2
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "$( uname )" in #(
|
||||
CYGWIN* ) cygwin=true ;; #(
|
||||
Darwin* ) darwin=true ;; #(
|
||||
MSYS* | MINGW* ) msys=true ;; #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
CLASSPATH="\\\"\\\""
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD=$JAVA_HOME/jre/sh/java
|
||||
else
|
||||
JAVACMD=$JAVA_HOME/bin/java
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD=java
|
||||
if ! command -v java >/dev/null 2>&1
|
||||
then
|
||||
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||
case $MAX_FD in #(
|
||||
max*)
|
||||
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
fi
|
||||
|
||||
# Collect all arguments for the java command, stacking in reverse order:
|
||||
# * args from the command line
|
||||
# * the main class name
|
||||
# * -classpath
|
||||
# * -D...appname settings
|
||||
# * --module-path (only if needed)
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
for arg do
|
||||
if
|
||||
case $arg in #(
|
||||
-*) false ;; # don't mess with options #(
|
||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
||||
[ -e "$t" ] ;; #(
|
||||
*) false ;;
|
||||
esac
|
||||
then
|
||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
||||
fi
|
||||
# Roll the args list around exactly as many times as the number of
|
||||
# args, so each arg winds up back in the position where it started, but
|
||||
# possibly modified.
|
||||
#
|
||||
# NB: a `for` loop captures its iteration list before it begins, so
|
||||
# changing the positional parameters here affects neither the number of
|
||||
# iterations, nor the values presented in `arg`.
|
||||
shift # remove old arg
|
||||
set -- "$@" "$arg" # push replacement arg
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Collect all arguments for the java command:
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||
# and any embedded shellness will be escaped.
|
||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||
# treated as '${Hostname}' itself on the command line.
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
|
||||
"$@"
|
||||
|
||||
# Stop when "xargs" is not available.
|
||||
if ! command -v xargs >/dev/null 2>&1
|
||||
then
|
||||
die "xargs is not available"
|
||||
fi
|
||||
|
||||
# Use "xargs" to parse quoted args.
|
||||
#
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||
#
|
||||
# In Bash we could simply go:
|
||||
#
|
||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
||||
# set -- "${ARGS[@]}" "$@"
|
||||
#
|
||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
||||
# character that might be a shell metacharacter, then use eval to reverse
|
||||
# that process (while maintaining the separation between arguments), and wrap
|
||||
# the whole thing up as a single "set" statement.
|
||||
#
|
||||
# This will of course break if any of these variables contains a newline or
|
||||
# an unmatched quote.
|
||||
#
|
||||
|
||||
eval "set -- $(
|
||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
||||
xargs -n1 |
|
||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
||||
tr '\n' ' '
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
Vendored
-94
@@ -1,94 +0,0 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
@rem SPDX-License-Identifier: Apache-2.0
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%"=="" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%"=="" set DIRNAME=.
|
||||
@rem This is normally unused
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if %ERRORLEVEL% equ 0 goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
set EXIT_CODE=%ERRORLEVEL%
|
||||
if %EXIT_CODE% equ 0 set EXIT_CODE=1
|
||||
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
|
||||
exit /b %EXIT_CODE%
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
Submodule libs/DiamondBank-OG deleted from 39d5a2b936.
Submodule libs/Utilities-OG deleted from 8b5c86cc9c.
@@ -1,194 +0,0 @@
|
||||
Unions-OG Placeholder Reference
|
||||
===============================
|
||||
|
||||
Unions-OG registers legacy PlaceholderAPI placeholders when PlaceholderAPI is installed.
|
||||
It also registers MiniPlaceholders through the Utilities-OG API when Utilities-OG is installed.
|
||||
|
||||
Identifiers
|
||||
-----------
|
||||
|
||||
All placeholders use both identifiers:
|
||||
|
||||
- simpleclans
|
||||
- simpleunions
|
||||
|
||||
In the syntax patterns below, replace {id} with either identifier.
|
||||
|
||||
Legacy PlaceholderAPI syntax:
|
||||
|
||||
- Player placeholder: %{id}_{player-placeholder}%
|
||||
- Union placeholder: %{id}_clan_{union-placeholder}%
|
||||
- Union compatibility alias: %{id}_union_{union-placeholder}%
|
||||
- Relational color placeholder: %rel_{id}_color%
|
||||
|
||||
MiniPlaceholders syntax:
|
||||
|
||||
- Player placeholder: <{id}_{player-placeholder}>
|
||||
- Union placeholder: <{id}_clan_{union-placeholder}>
|
||||
- Union compatibility alias: <{id}_union_{union-placeholder}>
|
||||
- Relational color placeholder: <{id}_rel_color>
|
||||
|
||||
MiniPlaceholders are audience placeholders unless marked relational. They require a player audience.
|
||||
Relational MiniPlaceholders require a relational MiniPlaceholders context.
|
||||
|
||||
Boolean output follows PlaceholderAPI's boolean.true and boolean.false config values when PlaceholderAPI is loaded.
|
||||
Without PlaceholderAPI, boolean placeholders return yes or no.
|
||||
|
||||
Player Placeholders
|
||||
-------------------
|
||||
|
||||
These resolve against the requested player:
|
||||
|
||||
- name
|
||||
- clean_name
|
||||
- lastseendays
|
||||
- total_kills
|
||||
- rival_kills
|
||||
- civilian_kills
|
||||
- neutral_kills
|
||||
- ally_kills
|
||||
- is_friendlyfire_on
|
||||
- deaths
|
||||
- weighted_kills
|
||||
- kdr
|
||||
- topplayers_position
|
||||
- join_date
|
||||
- lastseen
|
||||
- inactive_days
|
||||
- in_clan
|
||||
- tag
|
||||
- tag_label
|
||||
- is_trusted
|
||||
- is_member
|
||||
- clanchat_player_color
|
||||
- allychat_player_color
|
||||
- is_bb_enabled
|
||||
- is_invite_enabled
|
||||
- is_tag_enabled
|
||||
- is_muted
|
||||
- is_mutedally
|
||||
|
||||
Player compatibility aliases:
|
||||
|
||||
- in_union maps to in_clan
|
||||
- unionchat_player_color maps to clanchat_player_color
|
||||
|
||||
Examples:
|
||||
|
||||
- %simpleclans_name%
|
||||
- %simpleunions_in_union%
|
||||
- <simpleclans_name>
|
||||
- <simpleunions_in_union>
|
||||
|
||||
Union Placeholders
|
||||
------------------
|
||||
|
||||
These resolve against the requested player's union:
|
||||
|
||||
- name
|
||||
- balance
|
||||
- balance_formatted
|
||||
- tag
|
||||
- color
|
||||
- inactivedays
|
||||
- friendly_fire
|
||||
- allies_count
|
||||
- founded
|
||||
- color_tag
|
||||
- size
|
||||
- rivals_count
|
||||
- is_permanent
|
||||
- onlinemembers_count
|
||||
- total_kdr
|
||||
- topclans_position
|
||||
- total_deaths
|
||||
- average_wk
|
||||
- total_kills
|
||||
- total_rival
|
||||
- total_neutral
|
||||
- total_civilian
|
||||
- total_ally
|
||||
- is_anyonline
|
||||
- is_unrivable
|
||||
- allow_withdraw
|
||||
- allow_deposit
|
||||
|
||||
Union compatibility aliases:
|
||||
|
||||
- Use union_ instead of clan_ for any union placeholder.
|
||||
- topunions_position maps to topclans_position.
|
||||
|
||||
Examples:
|
||||
|
||||
- %simpleclans_clan_name%
|
||||
- %simpleclans_union_name%
|
||||
- %simpleunions_clan_color_tag%
|
||||
- %simpleunions_union_topunions_position%
|
||||
- <simpleclans_clan_name>
|
||||
- <simpleclans_union_name>
|
||||
- <simpleunions_clan_color_tag>
|
||||
- <simpleunions_union_topunions_position>
|
||||
|
||||
Top Player Placeholders
|
||||
-----------------------
|
||||
|
||||
Legacy PlaceholderAPI syntax:
|
||||
|
||||
- %{id}_topplayers_{position}_{player-placeholder}%
|
||||
|
||||
MiniPlaceholders syntax:
|
||||
|
||||
- <{id}_topplayers_{player-placeholder}:{position}>
|
||||
|
||||
The {position} value is 1-based. The {player-placeholder} value can be any player placeholder or player compatibility alias listed above.
|
||||
|
||||
Examples:
|
||||
|
||||
- %simpleclans_topplayers_1_name%
|
||||
- %simpleunions_topplayers_3_kdr%
|
||||
- <simpleclans_topplayers_name:1>
|
||||
- <simpleunions_topplayers_kdr:3>
|
||||
|
||||
Top Union Placeholders
|
||||
----------------------
|
||||
|
||||
Legacy PlaceholderAPI syntax:
|
||||
|
||||
- %{id}_topclans_{position}_clan_{union-placeholder}%
|
||||
- %{id}_topunions_{position}_union_{union-placeholder}%
|
||||
|
||||
MiniPlaceholders syntax:
|
||||
|
||||
- <{id}_topclans_clan_{union-placeholder}:{position}>
|
||||
- <{id}_topunions_union_{union-placeholder}:{position}>
|
||||
|
||||
The {position} value is 1-based. The {union-placeholder} value can be any union placeholder or union compatibility alias listed above.
|
||||
|
||||
Examples:
|
||||
|
||||
- %simpleclans_topclans_1_clan_name%
|
||||
- %simpleclans_topunions_1_union_name%
|
||||
- %simpleunions_topclans_5_clan_total_kdr%
|
||||
- <simpleclans_topclans_clan_name:1>
|
||||
- <simpleclans_topunions_union_name:1>
|
||||
- <simpleunions_topclans_clan_total_kdr:5>
|
||||
|
||||
Relational Color Placeholder
|
||||
----------------------------
|
||||
|
||||
The relational color placeholder returns a color code based on the relationship between two players:
|
||||
|
||||
- same union: &a
|
||||
- ally: &b
|
||||
- rival: &c
|
||||
- unrelated: empty string
|
||||
|
||||
Legacy PlaceholderAPI syntax:
|
||||
|
||||
- %rel_simpleclans_color%
|
||||
- %rel_simpleunions_color%
|
||||
|
||||
MiniPlaceholders syntax:
|
||||
|
||||
- <simpleclans_rel_color>
|
||||
- <simpleunions_rel_color>
|
||||
@@ -0,0 +1,309 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>net.sacredlabyrinth.phaed.simpleclans</groupId>
|
||||
<artifactId>SimpleClans</artifactId>
|
||||
<version>2.18.1-SNAPSHOT</version>
|
||||
<name>SimpleClans</name>
|
||||
<url>https://www.spigotmc.org/resources/simpleclans.71242/</url>
|
||||
|
||||
<build>
|
||||
<finalName>${project.name}</finalName>
|
||||
|
||||
<!-- Resources -->
|
||||
<resources>
|
||||
<resource>
|
||||
<targetPath>.</targetPath>
|
||||
<filtering>true</filtering>
|
||||
<directory>${basedir}/src/main/resources</directory>
|
||||
<includes>
|
||||
<include>plugin.yml</include>
|
||||
<include>config.yml</include>
|
||||
<include>*.properties</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
|
||||
<!-- Plugins -->
|
||||
<plugins>
|
||||
<!-- Compilation plugin -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
<showDeprecation>true</showDeprecation>
|
||||
<showWarnings>true</showWarnings>
|
||||
<compilerArgs>
|
||||
<arg>-parameters</arg>
|
||||
</compilerArgs>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- JAR creation plugin -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
</plugin>
|
||||
|
||||
<!-- Release plugin -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-release-plugin</artifactId>
|
||||
<version>2.3.2</version>
|
||||
</plugin>
|
||||
|
||||
<!-- Shade plugin -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<configuration>
|
||||
<relocations>
|
||||
<relocation>
|
||||
<pattern>org.bstats</pattern>
|
||||
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.metrics</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>io.papermc.lib</pattern>
|
||||
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.paperlib</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>co.aikar.commands</pattern>
|
||||
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.acf</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>co.aikar.locales</pattern>
|
||||
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.locales</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>com.cryptomorin.xseries</pattern>
|
||||
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.xseries</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>com.google.gson</pattern>
|
||||
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.gson</shadedPattern>
|
||||
</relocation>
|
||||
</relocations>
|
||||
<artifactSet>
|
||||
<excludes>
|
||||
<exclude>org.jetbrains:annotations</exclude>
|
||||
</excludes>
|
||||
</artifactSet>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>shade</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<!-- Dependency plugin -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-installed</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>copy</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>${project.artifactId}</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<type>${project.packaging}</type>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
<outputDirectory>${env.TEST_SERVER}\plugins</outputDirectory>
|
||||
<silent>true</silent>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>pl.project13.maven</groupId>
|
||||
<artifactId>git-commit-id-plugin</artifactId>
|
||||
<version>3.0.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>revision</goal>
|
||||
</goals>
|
||||
<phase>validate</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>3.3.2</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>javadoc</goal>
|
||||
</goals>
|
||||
<phase>package</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<source>8</source>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<!-- Dependencies -->
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.16.4-R0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.MilkBowl</groupId>
|
||||
<artifactId>VaultAPI</artifactId>
|
||||
<version>1.7</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.bstats</groupId>
|
||||
<artifactId>bstats-bukkit</artifactId>
|
||||
<version>2.2.1</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>me.clip</groupId>
|
||||
<artifactId>placeholderapi</artifactId>
|
||||
<version>2.10.9</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains</groupId>
|
||||
<artifactId>annotations</artifactId>
|
||||
<version>22.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.papermc</groupId>
|
||||
<artifactId>paperlib</artifactId>
|
||||
<version>1.0.8-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>co.aikar</groupId>
|
||||
<artifactId>acf-paper</artifactId>
|
||||
<version>0.5.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.cryptomorin</groupId>
|
||||
<artifactId>XSeries</artifactId>
|
||||
<version>8.3.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-api</artifactId>
|
||||
<version>5.7.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sk89q.worldguard</groupId>
|
||||
<artifactId>worldguard-bukkit</artifactId>
|
||||
<version>7.0.4</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.TechFortress</groupId>
|
||||
<artifactId>GriefPrevention</artifactId>
|
||||
<version>16.17.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.discordsrv</groupId>
|
||||
<artifactId>discordsrv</artifactId>
|
||||
<version>1.24.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>biz.princeps</groupId>
|
||||
<artifactId>landlord-latest</artifactId>
|
||||
<version>4.351</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.9.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<!-- Repositories -->
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>spigot-repo</id>
|
||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>placeholderapi-repo</id>
|
||||
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>bstats-repo</id>
|
||||
<url>https://repo.codemc.org/repository/maven-public</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>papermc</id>
|
||||
<url>https://papermc.io/repo/repository/maven-public/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>aikar</id>
|
||||
<url>https://repo.aikar.co/content/groups/aikar/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>sk89q-repo</id>
|
||||
<url>https://maven.enginehub.org/repo/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>Scarsz-Nexus</id>
|
||||
<url>https://nexus.scarsz.me/content/groups/public/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>eldonexus</id>
|
||||
<url>https://eldonexus.de/repository/maven-public</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>jitpack.io</id>
|
||||
<url>https://jitpack.io</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<!-- Upstream Distribution -->
|
||||
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>reposilite</id>
|
||||
<url>https://repo.roinujnosde.me/releases/</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>reposilite</id>
|
||||
<url>https://repo.roinujnosde.me/snapshots/</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
</project>
|
||||
@@ -1,13 +0,0 @@
|
||||
rootProject.name = "Unions-OG"
|
||||
|
||||
ProcessBuilder("sh", "bootstrap.sh").directory(rootDir).inheritIO().start().let {
|
||||
if (it.waitFor() != 0) throw GradleException("bootstrap.sh failed")
|
||||
}
|
||||
|
||||
file("libs")
|
||||
.listFiles()
|
||||
?.filter { it.isDirectory && !it.name.startsWith(".") }
|
||||
?.forEach { dir ->
|
||||
include(":libs:${dir.name}")
|
||||
project(":libs:${dir.name}").projectDir = dir
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Main-Class: net.sacredlabyrinth.phaed.simpleclans.SimpleClans
|
||||
|
||||
+18
-275
@@ -1,6 +1,6 @@
|
||||
package net.trueog.unionsog;
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
import net.trueog.unionsog.utils.ChatUtils;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -11,13 +11,12 @@ import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import static net.trueog.unionsog.UnionsOG.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
/**
|
||||
* @author phaed
|
||||
*/
|
||||
public class ChatBlock {
|
||||
|
||||
private static final int LINE_LENGTH = 319;
|
||||
private final ArrayList<Boolean> columnFlexes = new ArrayList<>();
|
||||
private final ArrayList<Integer> columnSizes = new ArrayList<>();
|
||||
@@ -29,124 +28,86 @@ public class ChatBlock {
|
||||
|
||||
@Deprecated
|
||||
public void setCropRight(boolean cropRight) {
|
||||
|
||||
this.cropRight = cropRight;
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setPadRight(boolean padRight) {
|
||||
|
||||
this.padRight = padRight;
|
||||
|
||||
}
|
||||
|
||||
public void setAlignment(String... columnAlignment) {
|
||||
|
||||
columnAlignments.addAll(Arrays.asList(columnAlignment));
|
||||
|
||||
}
|
||||
|
||||
public void setFlexibility(boolean... columnFlex) {
|
||||
|
||||
for (boolean flex : columnFlex) {
|
||||
|
||||
columnFlexes.add(flex);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setColumnSizes(String prefix, double... columnPercentages) {
|
||||
|
||||
int ll = LINE_LENGTH;
|
||||
|
||||
if (prefix != null) {
|
||||
|
||||
ll = LINE_LENGTH - (int) msgLength(prefix);
|
||||
|
||||
}
|
||||
|
||||
for (double percentage : columnPercentages) {
|
||||
|
||||
columnSizes.add((int) Math.floor((percentage / 100) * ll));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public boolean hasContent() {
|
||||
|
||||
return !rows.isEmpty();
|
||||
|
||||
}
|
||||
|
||||
public void addRow(String... contents) {
|
||||
|
||||
rows.add(contents);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public int size() {
|
||||
|
||||
return rows.size();
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public boolean isEmpty() {
|
||||
|
||||
return rows.isEmpty();
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void clear() {
|
||||
|
||||
rows.clear();
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public boolean sendBlock(CommandSender player) {
|
||||
|
||||
return sendBlock(player, null, 0);
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public boolean sendBlock(CommandSender player, String prefix) {
|
||||
|
||||
return sendBlock(player, prefix, 0);
|
||||
|
||||
}
|
||||
|
||||
public boolean sendBlock(CommandSender player, int amount) {
|
||||
|
||||
return sendBlock(player, null, amount);
|
||||
|
||||
}
|
||||
|
||||
boolean sendBlock(CommandSender player, String prefix, int amount) {
|
||||
|
||||
if (player == null) {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
if (rows.isEmpty()) {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
if (amount == 0) {
|
||||
|
||||
amount = rows.size();
|
||||
|
||||
}
|
||||
|
||||
boolean prefix_used = prefix == null;
|
||||
@@ -162,106 +123,65 @@ public class ChatBlock {
|
||||
int colCount = rows.get(0).length;
|
||||
|
||||
if (colCount > 1) {
|
||||
|
||||
for (int i = 0; i < colCount; i++) {
|
||||
|
||||
columnSizes.add(getMaxWidth(i) + 4);
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
columnSizes.add(LINE_LENGTH);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
List<String> messages = new ArrayList<>();
|
||||
// size up all sections
|
||||
|
||||
for (int i = 0; i < amount; i++) {
|
||||
|
||||
if (rows.isEmpty()) {
|
||||
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
List<String> measuredCols = new ArrayList<>();
|
||||
String row[] = rows.pollFirst();
|
||||
|
||||
for (int sid = 0; sid < row.length; sid++) {
|
||||
|
||||
String col = "";
|
||||
String section = row[sid];
|
||||
double colsize = (columnSizes.size() >= (sid + 1)) ? columnSizes.get(sid) : 0;
|
||||
String align = (columnAlignments.size() >= (sid + 1)) ? columnAlignments.get(sid) : "l";
|
||||
|
||||
if (align.equalsIgnoreCase("r")) {
|
||||
|
||||
if (msgLength(section) > colsize) {
|
||||
|
||||
col = cropLeftToFit(section, colsize);
|
||||
|
||||
} else if (msgLength(section) < colsize) {
|
||||
|
||||
col = paddLeftToFit(section, colsize);
|
||||
|
||||
}
|
||||
|
||||
} else if (align.equalsIgnoreCase("l")) {
|
||||
|
||||
if (msgLength(section) > colsize) {
|
||||
|
||||
if (cropRight) {
|
||||
|
||||
col = cropRightToFit(section, colsize);
|
||||
|
||||
} else {
|
||||
|
||||
col = section;
|
||||
|
||||
}
|
||||
|
||||
} else if (msgLength(section) < colsize) {
|
||||
|
||||
if (padRight) {
|
||||
|
||||
col = paddRightToFit(section, colsize);
|
||||
|
||||
} else {
|
||||
|
||||
col = section;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else if (align.equalsIgnoreCase("c")) {
|
||||
|
||||
if (msgLength(section) > colsize) {
|
||||
|
||||
if (cropRight) {
|
||||
|
||||
col = cropRightToFit(section, colsize);
|
||||
|
||||
} else {
|
||||
|
||||
col = section;
|
||||
|
||||
}
|
||||
|
||||
} else if (msgLength(section) < colsize) {
|
||||
|
||||
col = centerInLineOf(section, colsize);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
measuredCols.add(col);
|
||||
|
||||
}
|
||||
|
||||
// add in spacings
|
||||
@@ -269,65 +189,46 @@ public class ChatBlock {
|
||||
int availableSpacing = 12;
|
||||
|
||||
while (calculatedRowSize(measuredCols) < LINE_LENGTH && availableSpacing > 0) {
|
||||
|
||||
for (int j = 0; j < measuredCols.size(); j++) {
|
||||
|
||||
String col = measuredCols.get(j);
|
||||
measuredCols.set(j, col + " ");
|
||||
|
||||
if (calculatedRowSize(measuredCols) >= LINE_LENGTH) {
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
availableSpacing -= 4;
|
||||
|
||||
}
|
||||
|
||||
// cut off from flexible columns if too big
|
||||
|
||||
if (columnFlexes.size() == measuredCols.size()) {
|
||||
|
||||
while (calculatedRowSize(measuredCols) > LINE_LENGTH) {
|
||||
|
||||
boolean didFlex = false;
|
||||
|
||||
for (int j = 0; j < measuredCols.size(); j++) {
|
||||
|
||||
boolean flex = columnFlexes.get(j);
|
||||
|
||||
if (flex) {
|
||||
|
||||
String col = measuredCols.get(j);
|
||||
|
||||
if (col.length() > 0) {
|
||||
|
||||
measuredCols.set(j, col.substring(0, col.length() - 1));
|
||||
didFlex = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (calculatedRowSize(measuredCols) <= LINE_LENGTH) {
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!didFlex) {
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// concatenate final strings
|
||||
@@ -335,82 +236,60 @@ public class ChatBlock {
|
||||
String finalString = "";
|
||||
|
||||
for (String measured : measuredCols) {
|
||||
|
||||
finalString += measured;
|
||||
|
||||
}
|
||||
|
||||
// crop and print out
|
||||
String msg = (prefix_used ? empty_prefix : prefix + " ") + finalString;
|
||||
if (cropRight) {
|
||||
|
||||
msg = cropRightToFit(msg, LINE_LENGTH);
|
||||
|
||||
}
|
||||
|
||||
if (color.length() > 0) {
|
||||
|
||||
msg = color + msg;
|
||||
|
||||
}
|
||||
|
||||
messages.add(msg);
|
||||
|
||||
prefix_used = true;
|
||||
|
||||
}
|
||||
|
||||
player.sendMessage(messages.toArray(new String[0]));
|
||||
return !rows.isEmpty();
|
||||
|
||||
}
|
||||
|
||||
private int calculatedRowSize(List<String> cols) {
|
||||
|
||||
int out = 0;
|
||||
|
||||
for (String col : cols) {
|
||||
|
||||
out += msgLength(col);
|
||||
|
||||
}
|
||||
|
||||
return out;
|
||||
|
||||
}
|
||||
|
||||
int getMaxWidth(int col) {
|
||||
|
||||
double maxWidth = 0;
|
||||
|
||||
for (String[] row : rows) {
|
||||
|
||||
maxWidth = Math.max(maxWidth, msgLength(row[col]));
|
||||
|
||||
}
|
||||
|
||||
return (int) maxWidth;
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static String centerInLine(String msg) {
|
||||
|
||||
return centerInLineOf(msg, LINE_LENGTH);
|
||||
|
||||
}
|
||||
|
||||
private static String centerInLineOf(String msg, double lineLength) {
|
||||
|
||||
double length = msgLength(msg);
|
||||
double diff = lineLength - length;
|
||||
|
||||
// if too big for line return it as is
|
||||
|
||||
if (diff < 0) {
|
||||
|
||||
return msg;
|
||||
|
||||
}
|
||||
|
||||
double sideSpace = diff / 2;
|
||||
@@ -423,56 +302,40 @@ public class ChatBlock {
|
||||
|
||||
msg = paddRightToFit(msg, lineLength);
|
||||
|
||||
return msg;
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
||||
public static String makeEmpty(String str) {
|
||||
|
||||
if (str == null) {
|
||||
|
||||
return "";
|
||||
|
||||
}
|
||||
|
||||
return paddLeftToFit("", msgLength(str));
|
||||
|
||||
}
|
||||
|
||||
private static String cropRightToFit(String msg, double length) {
|
||||
|
||||
if (msg == null || msg.length() == 0 || length == 0) {
|
||||
|
||||
return "";
|
||||
|
||||
}
|
||||
|
||||
while (msgLength(msg) > length) {
|
||||
|
||||
msg = msg.substring(0, msg.length() - 2);
|
||||
|
||||
}
|
||||
|
||||
return msg;
|
||||
|
||||
}
|
||||
|
||||
private static String cropLeftToFit(String msg, double length) {
|
||||
|
||||
if (msg == null || msg.length() == 0 || length == 0) {
|
||||
|
||||
return "";
|
||||
|
||||
}
|
||||
|
||||
while (msgLength(msg) >= length) {
|
||||
|
||||
msg = msg.substring(1);
|
||||
|
||||
}
|
||||
|
||||
return msg;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -483,21 +346,15 @@ public class ChatBlock {
|
||||
* @return the padded message
|
||||
*/
|
||||
private static String paddLeftToFit(String msg, double length) {
|
||||
|
||||
if (msgLength(msg) >= length) {
|
||||
|
||||
return msg;
|
||||
|
||||
}
|
||||
|
||||
while (msgLength(msg) < length) {
|
||||
|
||||
msg = " " + msg;
|
||||
|
||||
}
|
||||
|
||||
return msg;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -508,94 +365,60 @@ public class ChatBlock {
|
||||
* @return the padded message
|
||||
*/
|
||||
private static String paddRightToFit(String msg, double length) {
|
||||
|
||||
if (msgLength(msg) >= length) {
|
||||
|
||||
return msg;
|
||||
|
||||
}
|
||||
|
||||
while (msgLength(msg) < length) {
|
||||
|
||||
msg += " ";
|
||||
|
||||
}
|
||||
|
||||
return msg;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the length on the screen of a string. Ignores colors.
|
||||
*/
|
||||
private static double msgLength(String str) {
|
||||
|
||||
double length = 0;
|
||||
str = ChatColor.stripColor(str);
|
||||
|
||||
// Loop through all the characters, skipping any color characters and their
|
||||
// following color codes
|
||||
// Loop through all the characters, skipping any color characters and their following color codes
|
||||
|
||||
for (int x = 0; x < str.length(); x++) {
|
||||
|
||||
int len = charLength(str.charAt(x));
|
||||
if (len > 0) {
|
||||
|
||||
length += len;
|
||||
|
||||
} else {
|
||||
|
||||
x++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return length;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the visual length of the character on the screen.
|
||||
*/
|
||||
private static int charLength(char x) {
|
||||
|
||||
String normalized = StringSimplifier.simplifiedString(x + "");
|
||||
|
||||
if ("i.:,;|!".contains(normalized)) {
|
||||
|
||||
return 2;
|
||||
|
||||
} else if ("l'".contains(normalized)) {
|
||||
|
||||
return 3;
|
||||
|
||||
} else if ("tI[]".contains(normalized)) {
|
||||
|
||||
return 4;
|
||||
|
||||
} else if ("fk{}<>\"*()".contains(normalized)) {
|
||||
|
||||
return 5;
|
||||
|
||||
} else if ("abcdeghjmnopqrsuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ1234567890\\/#?$%-=_+&^".contains(normalized)) {
|
||||
|
||||
return 6;
|
||||
|
||||
} else if ("@~".contains(normalized)) {
|
||||
|
||||
return 7;
|
||||
|
||||
} else if (normalized.equals(" ")) {
|
||||
|
||||
return 4;
|
||||
|
||||
} else {
|
||||
|
||||
return 7;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -613,29 +436,24 @@ public class ChatBlock {
|
||||
// While i is less than the length of the array of words
|
||||
|
||||
while (!split.isEmpty()) {
|
||||
|
||||
int len = 0;
|
||||
|
||||
// Create an array list to hold individual words
|
||||
|
||||
ArrayList<String> words = new ArrayList<>();
|
||||
|
||||
// go through the split array containing all the words, and adding them to the
|
||||
// words array
|
||||
// go through the split array containing all the words, and adding them to the words array
|
||||
// until reaching the point where their width no longer fits on a chat line
|
||||
|
||||
while (!split.isEmpty() && split.get(0) != null && len <= LINE_LENGTH) {
|
||||
|
||||
double wordLength = msgLength(split.get(0)) + 4;
|
||||
|
||||
// If a word is too long for a line
|
||||
|
||||
if (wordLength > LINE_LENGTH) {
|
||||
|
||||
String[] tempArray = wordCut(len, split.remove(0));
|
||||
words.add(tempArray[0]);
|
||||
split.add(tempArray[1]);
|
||||
|
||||
}
|
||||
|
||||
// If the word is not too long to fit
|
||||
@@ -643,76 +461,53 @@ public class ChatBlock {
|
||||
len += wordLength;
|
||||
|
||||
if (len < LINE_LENGTH) {
|
||||
|
||||
words.add(split.remove(0));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Merge the words into a sentence (that now fits into a single chat line) and
|
||||
// add them to the output array.
|
||||
// Merge the words into a sentence (that now fits into a single chat line) and add them to the output array.
|
||||
|
||||
String merged = combineSplit(words.toArray(new String[0]));
|
||||
out.add(merged);
|
||||
|
||||
}
|
||||
|
||||
// Convert to an array and return
|
||||
|
||||
return out.toArray(new String[0]);
|
||||
|
||||
}
|
||||
|
||||
private static String combineSplit(String[] string) {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for (String aString : string) {
|
||||
|
||||
builder.append(aString);
|
||||
builder.append(" ");
|
||||
|
||||
}
|
||||
|
||||
builder.deleteCharAt(builder.length() - " ".length());
|
||||
|
||||
return builder.toString();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Cuts apart a word that is too long to fit on one line
|
||||
*/
|
||||
private static String[] wordCut(int lengthBefore, String str) {
|
||||
|
||||
int length = lengthBefore;
|
||||
|
||||
// Loop through all the characters, skipping any color characters and their
|
||||
// following color codes
|
||||
// Loop through all the characters, skipping any color characters and their following color codes
|
||||
|
||||
String[] output = new String[2];
|
||||
int x = 0;
|
||||
while (length < LINE_LENGTH && x < str.length()) {
|
||||
|
||||
int len = charLength(str.charAt(x));
|
||||
if (len > 0) {
|
||||
|
||||
length += len;
|
||||
|
||||
} else {
|
||||
|
||||
x++;
|
||||
|
||||
}
|
||||
|
||||
x++;
|
||||
|
||||
}
|
||||
|
||||
if (x > str.length()) {
|
||||
|
||||
x = str.length();
|
||||
|
||||
}
|
||||
|
||||
// Add the substring to the output after cutting it
|
||||
@@ -723,76 +518,52 @@ public class ChatBlock {
|
||||
|
||||
output[1] = str.substring(x);
|
||||
return output;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs a single line out, crops overflow
|
||||
*
|
||||
* @param receiver the receiver
|
||||
* @param msg the message
|
||||
* @param msg the message
|
||||
*/
|
||||
public static void saySingle(CommandSender receiver, String msg) {
|
||||
|
||||
if (receiver == null) {
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
receiver.sendMessage(colorize(new String[] { cropRightToFit(msg, LINE_LENGTH) })[0]);
|
||||
|
||||
receiver.sendMessage(colorize(new String[]{cropRightToFit(msg, LINE_LENGTH)})[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs a message to a user
|
||||
*
|
||||
* @param receiver the receiver
|
||||
* @param msg the message
|
||||
* @param msg the message
|
||||
*/
|
||||
public static void sendMessage(@Nullable CommandSender receiver, @NotNull String msg) {
|
||||
|
||||
if (receiver == null) {
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
receiver.sendMessage(ChatUtils.parseColors(msg));
|
||||
|
||||
}
|
||||
|
||||
public static void sendMessage(@Nullable UnionPlayer receiver, @NotNull String msg) {
|
||||
|
||||
public static void sendMessage(@Nullable ClanPlayer receiver, @NotNull String msg) {
|
||||
if (receiver == null) {
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
UnionsOG.getInstance().getProxyManager().sendMessage(receiver.getName(), ChatUtils.parseColors(msg));
|
||||
|
||||
SimpleClans.getInstance().getProxyManager().sendMessage(receiver.getName(), ChatUtils.parseColors(msg));
|
||||
}
|
||||
|
||||
// UnionCommands#setbanner, LandCommands#Allow/BlockCommand/verify,
|
||||
// StaffCommands#kick, etc
|
||||
// ClanCommands#setbanner, LandCommands#Allow/BlockCommand/verify, StaffCommands#kick, etc
|
||||
public static void sendMessageKey(@Nullable CommandSender receiver, @NotNull String key, @NotNull Object... args) {
|
||||
|
||||
sendMessage(receiver, lang(key, receiver, args));
|
||||
|
||||
}
|
||||
|
||||
public static void sendMessageKey(@NotNull UnionPlayer unionPlayer, @NotNull String key, @NotNull Object... args) {
|
||||
|
||||
sendMessageKey(unionPlayer.toPlayer(), key, args);
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void startColor(String color) {
|
||||
|
||||
this.color = color;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -801,15 +572,11 @@ public class ChatBlock {
|
||||
* @param receiver the receiver
|
||||
*/
|
||||
public static void sendBlank(CommandSender receiver) {
|
||||
|
||||
if (receiver == null) {
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
receiver.sendMessage(" ");
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -817,41 +584,28 @@ public class ChatBlock {
|
||||
*/
|
||||
@Deprecated
|
||||
public static String[] say(String message) {
|
||||
|
||||
return colorize(wordWrap(message));
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static String[] getColorizedMessage(String msg) {
|
||||
|
||||
return colorize(wordWrap(msg));
|
||||
|
||||
}
|
||||
|
||||
private static String[] colorize(String[] message) {
|
||||
|
||||
try {
|
||||
|
||||
return colorizeBase(message);
|
||||
|
||||
} catch (Exception ex) {
|
||||
|
||||
return message;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static @Nullable String colorize(String message) {
|
||||
|
||||
return colorizeBase(new String[] { message })[0];
|
||||
|
||||
return colorizeBase(new String[]{message})[0];
|
||||
}
|
||||
|
||||
private static @Nullable String[] colorizeBase(String[] message) {
|
||||
|
||||
if (message != null && message[0] != null && !message[0].isEmpty()) {
|
||||
// Go through each line
|
||||
|
||||
@@ -860,38 +614,27 @@ public class ChatBlock {
|
||||
|
||||
int counter = 0;
|
||||
for (String msg : message) {
|
||||
|
||||
// Loop through looking for a color code
|
||||
for (int x = 0; x < msg.length(); x++) {
|
||||
|
||||
// If the char is color code
|
||||
if (msg.codePointAt(x) == 167) {
|
||||
|
||||
// advance x to the next character
|
||||
x += 1;
|
||||
|
||||
if (x < msg.length()) {
|
||||
|
||||
lastColor = ChatColor.COLOR_CHAR + "" + msg.charAt(x);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// Replace the message with the colorful message
|
||||
|
||||
message[counter] = prevColor + msg;
|
||||
prevColor = lastColor;
|
||||
counter++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// noinspection ConstantConditions
|
||||
//noinspection ConstantConditions
|
||||
return message;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
+163
-356
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,10 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
/**
|
||||
* Clan Requests
|
||||
* @author phaed
|
||||
*/
|
||||
public enum ClanRequest
|
||||
{
|
||||
DEMOTE, PROMOTE, DISBAND, INVITE, CREATE_ALLY, BREAK_RIVALRY, START_WAR, END_WAR
|
||||
}
|
||||
+5
-76
@@ -1,10 +1,10 @@
|
||||
package net.trueog.unionsog;
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
import static net.trueog.unionsog.UnionsOG.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
/**
|
||||
* @author phaed
|
||||
@@ -13,190 +13,119 @@ import static net.trueog.unionsog.UnionsOG.lang;
|
||||
public class Dates {
|
||||
|
||||
private Dates() {
|
||||
|
||||
}
|
||||
|
||||
public static double differenceInMonths(Timestamp date1, Timestamp date2) {
|
||||
|
||||
return differenceInMonths(new Date(date1.getTime()), new Date(date2.getTime()));
|
||||
|
||||
}
|
||||
|
||||
public static double differenceInYears(Timestamp date1, Timestamp date2) {
|
||||
|
||||
return differenceInYears(new Date(date1.getTime()), new Date(date2.getTime()));
|
||||
|
||||
}
|
||||
|
||||
public static double differenceInDays(Timestamp date1, Timestamp date2) {
|
||||
|
||||
return differenceInDays(new Date(date1.getTime()), new Date(date2.getTime()));
|
||||
|
||||
}
|
||||
|
||||
public static double differenceInHours(Timestamp date1, Timestamp date2) {
|
||||
|
||||
return differenceInHours(new Date(date1.getTime()), new Date(date2.getTime()));
|
||||
|
||||
}
|
||||
|
||||
public static double differenceInMinutes(Timestamp date1, Timestamp date2) {
|
||||
|
||||
return differenceInMinutes(new Date(date1.getTime()), new Date(date2.getTime()));
|
||||
|
||||
}
|
||||
|
||||
public static double differenceInSeconds(Timestamp date1, Timestamp date2) {
|
||||
|
||||
return differenceInSeconds(new Date(date1.getTime()), new Date(date2.getTime()));
|
||||
|
||||
}
|
||||
|
||||
public static double differenceInMonths(Date date1, Date date2) {
|
||||
|
||||
return differenceInYears(date1, date2) * 12;
|
||||
|
||||
}
|
||||
|
||||
public static double differenceInYears(Date date1, Date date2) {
|
||||
|
||||
double days = differenceInDays(date1, date2);
|
||||
return days / 365.2425;
|
||||
|
||||
}
|
||||
|
||||
public static double differenceInDays(Date date1, Date date2) {
|
||||
|
||||
return differenceInHours(date1, date2) / 24.0;
|
||||
|
||||
}
|
||||
|
||||
public static double differenceInHours(Date date1, Date date2) {
|
||||
|
||||
return differenceInMinutes(date1, date2) / 60.0;
|
||||
|
||||
}
|
||||
|
||||
public static double differenceInMinutes(Date date1, Date date2) {
|
||||
|
||||
return differenceInSeconds(date1, date2) / 60.0;
|
||||
|
||||
}
|
||||
|
||||
public static double differenceInSeconds(Date date1, Date date2) {
|
||||
|
||||
return differenceInMilliseconds(date1, date2) / 1000.0;
|
||||
|
||||
}
|
||||
|
||||
private static double differenceInMilliseconds(Date date1, Date date2) {
|
||||
|
||||
return Math.abs(getTimeInMilliseconds(date1) - getTimeInMilliseconds(date2));
|
||||
|
||||
}
|
||||
|
||||
private static long getTimeInMilliseconds(Date date) {
|
||||
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(date);
|
||||
return cal.getTimeInMillis() + cal.getTimeZone().getOffset(cal.getTimeInMillis());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* authors: RoboMWM, LaxWasHere
|
||||
* </p>
|
||||
*
|
||||
* @author RoboMWM, LaxWasHere
|
||||
* @param seconds the time in seconds
|
||||
* @param depth Max amount of detail (e.g. only display days and hours if set
|
||||
* to 1 and seconds {@literal >} 1 day)
|
||||
* @return the string representation of the amount of time labeled as days,
|
||||
* hours, minutes, seconds
|
||||
* @param depth Max amount of detail (e.g. only display days and hours if set to 1 and seconds {@literal >} 1 day)
|
||||
* @return the string representation of the amount of time labeled as days, hours, minutes, seconds
|
||||
*/
|
||||
public static String formatTime(Long seconds, int depth) {
|
||||
|
||||
if (seconds == null || seconds < 1) {
|
||||
|
||||
return lang("bb.moments");
|
||||
|
||||
}
|
||||
|
||||
if (seconds < 60) {
|
||||
|
||||
return seconds + lang("bb.seconds");
|
||||
|
||||
}
|
||||
|
||||
if (seconds < 3600) {
|
||||
|
||||
long count = (long) Math.ceil(seconds / 60f);
|
||||
String res;
|
||||
if (count > 1) {
|
||||
|
||||
res = count + lang("bb.minutes");
|
||||
|
||||
} else {
|
||||
|
||||
res = lang("bb.one.minute");
|
||||
|
||||
}
|
||||
|
||||
long remaining = seconds % 60;
|
||||
if (depth > 0 && remaining >= 5) {
|
||||
|
||||
return res + ", " + formatTime(remaining, --depth);
|
||||
|
||||
}
|
||||
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
if (seconds < 86400) {
|
||||
|
||||
long count = (long) Math.ceil(seconds / 3600f);
|
||||
String res;
|
||||
if (count > 1) {
|
||||
|
||||
res = count + lang("bb.hours");
|
||||
|
||||
} else {
|
||||
|
||||
res = lang("bb.one.hour");
|
||||
|
||||
}
|
||||
|
||||
if (depth > 0) {
|
||||
|
||||
return res + ", " + formatTime(seconds % 3600, --depth);
|
||||
|
||||
}
|
||||
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
long count = (long) Math.ceil(seconds / 86400f);
|
||||
String res;
|
||||
if (count > 1) {
|
||||
|
||||
res = count + lang("bb.days");
|
||||
|
||||
} else {
|
||||
|
||||
res = lang("bb.one.day");
|
||||
|
||||
}
|
||||
|
||||
if (depth > 0) {
|
||||
|
||||
return res + ", " + formatTime(seconds % 86400, --depth);
|
||||
|
||||
}
|
||||
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package net.trueog.unionsog;
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
public enum EconomyResponse {
|
||||
SUCCESS, NEGATIVE_VALUE, NOT_ENOUGH_BALANCE, CANCELLED
|
||||
+1
-43
@@ -1,4 +1,4 @@
|
||||
package net.trueog.unionsog;
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonElement;
|
||||
@@ -15,115 +15,73 @@ public class Flags {
|
||||
private final JsonObject flags;
|
||||
|
||||
public Flags(@Nullable String json) {
|
||||
|
||||
if (json != null && !json.isEmpty()) {
|
||||
|
||||
flags = gson.fromJson(json, JsonObject.class);
|
||||
|
||||
} else {
|
||||
|
||||
flags = new JsonObject();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<String> getStringList(@NotNull String key) {
|
||||
|
||||
JsonElement object = flags.get(key);
|
||||
ArrayList<String> list = new ArrayList<>();
|
||||
if (object != null && object.isJsonArray()) {
|
||||
|
||||
for (JsonElement element : object.getAsJsonArray()) {
|
||||
|
||||
list.add(element.getAsString());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getString(@NotNull String key) {
|
||||
|
||||
JsonElement element = flags.get(key);
|
||||
if (element == null || element.isJsonNull()) {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
return element.getAsString();
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getString(@NotNull String key, @NotNull String def) {
|
||||
|
||||
String string = getString(key);
|
||||
if (string == null) {
|
||||
|
||||
return def;
|
||||
|
||||
}
|
||||
|
||||
return string;
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Number getNumber(@NotNull String key) {
|
||||
|
||||
JsonElement element = flags.get(key);
|
||||
if (element == null || element.isJsonNull()) {
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
return element.getAsNumber();
|
||||
|
||||
}
|
||||
|
||||
public boolean getBoolean(@NotNull String key) {
|
||||
|
||||
return getBoolean(key, false);
|
||||
|
||||
}
|
||||
|
||||
public boolean getBoolean(@NotNull String key, boolean def) {
|
||||
|
||||
JsonElement element = flags.get(key);
|
||||
if (element == null || element.isJsonNull()) {
|
||||
|
||||
return def;
|
||||
|
||||
}
|
||||
|
||||
return element.getAsBoolean();
|
||||
|
||||
}
|
||||
|
||||
public void put(@NotNull String key, @NotNull List<?> value) {
|
||||
|
||||
flags.add(key, gson.toJsonTree(value));
|
||||
|
||||
}
|
||||
|
||||
public void put(@NotNull String key, @NotNull Object object) {
|
||||
|
||||
flags.add(key, gson.toJsonTree(object));
|
||||
|
||||
}
|
||||
|
||||
public String toJSONString() {
|
||||
|
||||
return flags.toString();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+109
-106
@@ -1,8 +1,10 @@
|
||||
package net.trueog.unionsog;
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import net.trueog.unionsog.managers.PermissionsManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -27,8 +29,8 @@ import java.util.function.Predicate;
|
||||
import java.util.logging.Level;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static net.trueog.unionsog.UnionsOG.lang;
|
||||
import static net.trueog.unionsog.utils.ChatUtils.stripColors;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils.stripColors;
|
||||
|
||||
/**
|
||||
* @author phaed
|
||||
@@ -37,104 +39,129 @@ import static net.trueog.unionsog.utils.ChatUtils.stripColors;
|
||||
public final class Helper {
|
||||
|
||||
private static final Gson GSON = new Gson();
|
||||
private static final Type RANKS_TYPE = TypeToken.getParameterized(List.class, Rank.class).getType();
|
||||
private static final Type RESIGN_TYPE = TypeToken.getParameterized(Map.class, String.class, Long.class).getType();
|
||||
|
||||
private Helper() {
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Locale forLanguageTag(@Nullable String languageTag) {
|
||||
|
||||
Locale defaultLanguage = UnionsOG.getInstance().getSettingsManager().getLanguage();
|
||||
Locale defaultLanguage = SimpleClans.getInstance().getSettingsManager().getLanguage();
|
||||
if (languageTag == null) {
|
||||
|
||||
return defaultLanguage;
|
||||
|
||||
}
|
||||
|
||||
return Locale.forLanguageTag(languageTag);
|
||||
|
||||
}
|
||||
|
||||
@Contract("null -> null")
|
||||
@Nullable
|
||||
public static String toLanguageTag(@Nullable Locale locale) {
|
||||
|
||||
return locale != null ? locale.toLanguageTag() : null;
|
||||
|
||||
}
|
||||
|
||||
public static Set<Path> getPathsIn(String path, Predicate<? super Path> filter) {
|
||||
|
||||
Set<Path> files = new LinkedHashSet<>();
|
||||
String packagePath = path.replace(".", "/");
|
||||
|
||||
try {
|
||||
|
||||
URI uri = UnionsOG.class.getProtectionDomain().getCodeSource().getLocation().toURI();
|
||||
URI uri = SimpleClans.class.getProtectionDomain().getCodeSource().getLocation().toURI();
|
||||
FileSystem fileSystem = FileSystems.newFileSystem(URI.create("jar:" + uri), Collections.emptyMap());
|
||||
files = Files.walk(fileSystem.getPath(packagePath)).filter(Objects::nonNull).filter(filter)
|
||||
.collect(Collectors.toSet());
|
||||
files = Files.walk(fileSystem.getPath(packagePath)).
|
||||
filter(Objects::nonNull).
|
||||
filter(filter).
|
||||
collect(Collectors.toSet());
|
||||
fileSystem.close();
|
||||
|
||||
} catch (URISyntaxException | IOException ex) {
|
||||
|
||||
UnionsOG.getInstance().getLogger().log(Level.WARNING,
|
||||
"An error occurred while trying to load files: " + ex.getMessage(), ex);
|
||||
|
||||
SimpleClans.getInstance().getLogger().
|
||||
log(Level.WARNING, "An error occurred while trying to load files: " + ex.getMessage(), ex);
|
||||
}
|
||||
|
||||
return files;
|
||||
|
||||
}
|
||||
|
||||
public static Set<Class<?>> getClasses(String packageName) {
|
||||
|
||||
Set<Class<?>> classes = new LinkedHashSet<>();
|
||||
|
||||
Predicate<? super Path> filter = entry -> {
|
||||
|
||||
String path = entry.getFileName().toString();
|
||||
return !path.contains("$") && path.endsWith(".class");
|
||||
|
||||
};
|
||||
|
||||
for (Path filesPath : getPathsIn(packageName, filter)) {
|
||||
|
||||
// Compatibility with different Java versions
|
||||
String path = filesPath.toString();
|
||||
if (path.charAt(0) == '/') {
|
||||
|
||||
path = path.substring(1);
|
||||
|
||||
}
|
||||
|
||||
String fileName = path.replace("/", ".").split(".class")[0];
|
||||
|
||||
try {
|
||||
|
||||
Class<?> clazz = Class.forName(fileName);
|
||||
classes.add(clazz);
|
||||
|
||||
} catch (ClassNotFoundException e) {
|
||||
|
||||
e.printStackTrace();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return classes;
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> Set<Class<? extends T>> getSubTypesOf(String packageName, Class<?> type) {
|
||||
return getClasses(packageName).stream().
|
||||
filter(type::isAssignableFrom).
|
||||
map(aClass -> ((Class<? extends T>) aClass)).
|
||||
collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
return getClasses(packageName).stream().filter(type::isAssignableFrom)
|
||||
.map(aClass -> ((Class<? extends T>) aClass)).collect(Collectors.toSet());
|
||||
/**
|
||||
* Parses a list of ranks from the specified Json String
|
||||
*
|
||||
* @param json the Json String
|
||||
* @return a list of ranks or null if the JSON String is null/empty
|
||||
*/
|
||||
public static @Nullable List<Rank> ranksFromJson(@Nullable String json) {
|
||||
if (json != null && !json.isEmpty()) {
|
||||
JsonObject object = GSON.fromJson(json, JsonObject.class);
|
||||
JsonElement ranks = object.get("ranks");
|
||||
return GSON.fromJson(ranks, RANKS_TYPE);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the default rank from the specified Json String
|
||||
*
|
||||
* @param json the Json String
|
||||
* @return the default rank or null if not found and/or it does not exist
|
||||
*/
|
||||
public static @Nullable String defaultRankFromJson(@Nullable String json) {
|
||||
if (json != null && !json.isEmpty()) {
|
||||
JsonObject object = GSON.fromJson(json, JsonObject.class);
|
||||
JsonElement defaultRank = object.get("defaultRank");
|
||||
if (defaultRank != null && !defaultRank.isJsonNull()) {
|
||||
return defaultRank.getAsString();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a list of ranks and the default rank to a JSON String
|
||||
*
|
||||
* @param ranks the ranks
|
||||
* @param defaultRank the default rank
|
||||
* @return a JSON String
|
||||
*/
|
||||
public static String ranksToJson(List<Rank> ranks, @Nullable String defaultRank) {
|
||||
if (ranks == null)
|
||||
ranks = new ArrayList<>();
|
||||
|
||||
JsonObject object = new JsonObject();
|
||||
object.add("ranks", GSON.toJsonTree(ranks));
|
||||
object.addProperty("defaultRank", defaultRank);
|
||||
return object.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -144,9 +171,7 @@ public final class Helper {
|
||||
* @return a JSON String
|
||||
*/
|
||||
public static String resignTimesToJson(Map<String, Long> resignTimes) {
|
||||
|
||||
return GSON.toJson(resignTimes);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -156,15 +181,10 @@ public final class Helper {
|
||||
* @return a map
|
||||
*/
|
||||
public static @Nullable Map<String, Long> resignTimesFromJson(String json) {
|
||||
|
||||
if (json != null && !json.isEmpty()) {
|
||||
|
||||
return GSON.fromJson(json, RESIGN_TYPE);
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -175,26 +195,17 @@ public final class Helper {
|
||||
* @return the delay in seconds
|
||||
*/
|
||||
public static long getDelayTo(int hour, int minute) {
|
||||
|
||||
if (hour < 0 || hour > 23)
|
||||
hour = 1;
|
||||
if (minute < 0 || minute > 59)
|
||||
minute = 0;
|
||||
if (hour < 0 || hour > 23) hour = 1;
|
||||
if (minute < 0 || minute > 59) minute = 0;
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
LocalDateTime d = LocalDateTime.of(now.toLocalDate(), LocalTime.of(hour, minute));
|
||||
long delay;
|
||||
if (now.isAfter(d)) {
|
||||
|
||||
delay = now.until(d.plusDays(1), ChronoUnit.SECONDS);
|
||||
|
||||
} else {
|
||||
|
||||
delay = now.until(d, ChronoUnit.SECONDS);
|
||||
|
||||
}
|
||||
|
||||
return delay;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -204,18 +215,14 @@ public final class Helper {
|
||||
* @return
|
||||
*/
|
||||
public static String getColorName(String playerName) {
|
||||
|
||||
List<Player> players = UnionsOG.getInstance().getServer().matchPlayer(playerName);
|
||||
List<Player> players = SimpleClans.getInstance().getServer().matchPlayer(playerName);
|
||||
|
||||
if (players.size() == 1) {
|
||||
|
||||
PermissionsManager pm = UnionsOG.getInstance().getPermissionsManager();
|
||||
PermissionsManager pm = SimpleClans.getInstance().getPermissionsManager();
|
||||
return pm.getPrefix(players.get(0)) + players.get(0).getName() + pm.getSuffix(players.get(0));
|
||||
|
||||
}
|
||||
|
||||
return playerName;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -225,12 +232,10 @@ public final class Helper {
|
||||
* @return
|
||||
*/
|
||||
public static List<String> fromArrayToList(String... values) {
|
||||
|
||||
List<String> results = new ArrayList<>();
|
||||
Collections.addAll(results, values);
|
||||
results.remove("");
|
||||
return results;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -241,24 +246,34 @@ public final class Helper {
|
||||
*/
|
||||
@Deprecated
|
||||
public static Set<String> fromArrayToSet(String... values) {
|
||||
|
||||
HashSet<String> results = new HashSet<>();
|
||||
Collections.addAll(results, values);
|
||||
results.remove("");
|
||||
return results;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts {@literal ArrayList<String>} to string array
|
||||
* Converts {@literal ArrayList<String>} to string array
|
||||
*
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
public static String[] toArray(List<String> list) {
|
||||
|
||||
return list.toArray(new String[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the Permission values array to a String array
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static String[] fromPermissionArray() {
|
||||
RankPermission[] permissions = RankPermission.values();
|
||||
String[] sa = new String[permissions.length];
|
||||
for (int i = 0; i < permissions.length; i++) {
|
||||
sa[i] = permissions[i].toString();
|
||||
}
|
||||
return sa;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -268,9 +283,7 @@ public final class Helper {
|
||||
* @return
|
||||
*/
|
||||
public static String cleanTag(String tag) {
|
||||
|
||||
return stripColors(tag).toLowerCase();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -280,41 +293,30 @@ public final class Helper {
|
||||
* @return
|
||||
*/
|
||||
public static String generatePageSeparator(String sep) {
|
||||
|
||||
String out = "";
|
||||
|
||||
for (int i = 0; i < 320; i++) {
|
||||
|
||||
out += sep;
|
||||
|
||||
}
|
||||
|
||||
return out;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove offline players from a UnionPlayer array
|
||||
* Remove offline players from a ClanPlayer array
|
||||
*
|
||||
* @param in
|
||||
* @return
|
||||
*/
|
||||
public static List<UnionPlayer> stripOffLinePlayers(List<UnionPlayer> in) {
|
||||
|
||||
List<UnionPlayer> out = new ArrayList<>();
|
||||
|
||||
for (UnionPlayer cp : in) {
|
||||
public static List<ClanPlayer> stripOffLinePlayers(List<ClanPlayer> in) {
|
||||
List<ClanPlayer> out = new ArrayList<>();
|
||||
|
||||
for (ClanPlayer cp : in) {
|
||||
if (cp.toPlayer() != null) {
|
||||
|
||||
out.add(cp);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return out;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -324,15 +326,10 @@ public final class Helper {
|
||||
* @return
|
||||
*/
|
||||
public static String escapeQuotes(@Nullable String str) {
|
||||
|
||||
if (str == null) {
|
||||
|
||||
return "";
|
||||
|
||||
}
|
||||
|
||||
return str.replace("'", "''");
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -342,9 +339,7 @@ public final class Helper {
|
||||
* @return
|
||||
*/
|
||||
public static String toLocationString(Location loc) {
|
||||
|
||||
return loc.getBlockX() + " " + loc.getBlockY() + " " + loc.getBlockZ() + " " + loc.getWorld().getName();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -354,33 +349,41 @@ public final class Helper {
|
||||
* @return the Map sorted
|
||||
*/
|
||||
public static <K, V extends Comparable<V>> Map<K, V> sortByValue(Map<K, V> map) {
|
||||
|
||||
LinkedList<Map.Entry<K, V>> entryList = new LinkedList<>(map.entrySet());
|
||||
entryList.sort(Entry.comparingByValue());
|
||||
|
||||
Map<K, V> result = new LinkedHashMap<>();
|
||||
for (Entry<K, V> entry : entryList) {
|
||||
|
||||
result.put(entry.getKey(), entry.getValue());
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats max inactive days to an infinity symbol if it's negative or 0
|
||||
*
|
||||
* @param max inactive days
|
||||
* @return formatted message
|
||||
*/
|
||||
public static String formatMaxInactiveDays(int max) {
|
||||
if (max <= 0) {
|
||||
return "∞";
|
||||
} else {
|
||||
return String.valueOf(max);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String getFormattedUnionStatus(Union union, CommandSender sender) {
|
||||
|
||||
public static String getFormattedClanStatus(Clan clan, CommandSender sender) {
|
||||
ArrayList<String> statuses = new ArrayList<>();
|
||||
if (union.isPermanent()) {
|
||||
|
||||
if (clan.isPermanent()) {
|
||||
statuses.add(lang("permanent", sender));
|
||||
|
||||
}
|
||||
|
||||
return statuses.isEmpty() ? lang("none", sender) : String.join(", ", statuses);
|
||||
|
||||
if (clan.isVerified()) {
|
||||
statuses.add(lang("verified", sender));
|
||||
} else {
|
||||
statuses.add(lang("unverified", sender));
|
||||
}
|
||||
return String.join(", ", statuses);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
public class Kill {
|
||||
|
||||
private final ClanPlayer killer;
|
||||
private final ClanPlayer victim;
|
||||
private final LocalDateTime time;
|
||||
|
||||
public Kill(ClanPlayer killer, ClanPlayer victim, LocalDateTime time) {
|
||||
this.killer = killer;
|
||||
this.victim = victim;
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
public ClanPlayer getKiller() {
|
||||
return killer;
|
||||
}
|
||||
|
||||
public ClanPlayer getVictim() {
|
||||
return victim;
|
||||
}
|
||||
|
||||
public LocalDateTime getTime() {
|
||||
return time;
|
||||
}
|
||||
|
||||
public enum Type {
|
||||
CIVILIAN("c"), RIVAL("r"), NEUTRAL("n"), ALLY("a");
|
||||
|
||||
Type(String shortName) {
|
||||
this.shortName = shortName;
|
||||
}
|
||||
|
||||
private final String shortName;
|
||||
|
||||
public String getShortname() {
|
||||
return shortName;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
public enum PermissionLevel {
|
||||
LEADER, TRUSTED
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author RoinujNosde
|
||||
*/
|
||||
public class Rank implements Comparable<Rank> {
|
||||
|
||||
private String name;
|
||||
private String displayName;
|
||||
private Set<String> permissions;
|
||||
|
||||
public Rank(String name) {
|
||||
setName(name);
|
||||
permissions = new HashSet<>();
|
||||
setDisplayName(displayName);
|
||||
}
|
||||
|
||||
public Rank(String name, @Nullable String displayName, Set<String> permissions) {
|
||||
setName(name);
|
||||
setDisplayName(displayName);
|
||||
setPermissions(permissions);
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
if (name == null || name.isEmpty()) {
|
||||
throw new IllegalArgumentException("name cannot be null or empty");
|
||||
}
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public void setDisplayName(@Nullable String displayName) {
|
||||
if (displayName == null || displayName.isEmpty()) {
|
||||
displayName = name;
|
||||
}
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
public void setPermissions(Set<String> permissions) {
|
||||
if (permissions == null) {
|
||||
permissions = new HashSet<>();
|
||||
}
|
||||
this.permissions = permissions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((name == null) ? 0 : name.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
Rank other = (Rank) obj;
|
||||
if (name == null) {
|
||||
if (other.name != null)
|
||||
return false;
|
||||
} else if (!name.equals(other.name))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the rank's permissions
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Set<String> getPermissions() {
|
||||
return permissions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the rank's display name
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getDisplayName() {
|
||||
return displayName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the rank's name
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Rank other) {
|
||||
return Integer.compare(permissions.size(), other.permissions.size());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author RoinujNosde
|
||||
*
|
||||
*/
|
||||
public enum RankPermission {
|
||||
|
||||
ALLY_ADD("simpleclans.leader.ally", PermissionLevel.LEADER),
|
||||
ALLY_CHAT("simpleclans.member.ally", PermissionLevel.TRUSTED),
|
||||
ALLY_REMOVE("simpleclans.leader.ally", PermissionLevel.LEADER),
|
||||
BANK_BALANCE("simpleclans.member.bank", PermissionLevel.TRUSTED),
|
||||
BANK_DEPOSIT("simpleclans.member.bank", PermissionLevel.LEADER),
|
||||
BANK_WITHDRAW("simpleclans.member.bank", PermissionLevel.LEADER),
|
||||
BB_ADD("simpleclans.member.bb-add", PermissionLevel.TRUSTED),
|
||||
BB_CLEAR("simpleclans.leader.bb-clear", PermissionLevel.LEADER),
|
||||
COORDS("simpleclans.member.coords", PermissionLevel.TRUSTED),
|
||||
FEE_ENABLE("simpleclans.leader.fee", PermissionLevel.LEADER),
|
||||
FEE_SET("simpleclans.leader.fee", PermissionLevel.LEADER),
|
||||
FEE_BYPASS("", PermissionLevel.LEADER),
|
||||
REGROUP_HOME("simpleclans.leader.regroup.home", PermissionLevel.LEADER),
|
||||
REGROUP_ME("simpleclans.leader.regroup.me", PermissionLevel.LEADER),
|
||||
HOME_SET("simpleclans.leader.home-set", PermissionLevel.LEADER),
|
||||
HOME_TP("simpleclans.member.home", PermissionLevel.TRUSTED),
|
||||
INVITE("simpleclans.leader.invite", PermissionLevel.LEADER),
|
||||
KICK("simpleclans.leader.kick", PermissionLevel.LEADER),
|
||||
MODTAG("simpleclans.leader.modtag", PermissionLevel.LEADER),
|
||||
RANK_DISPLAYNAME("simpleclans.leader.rank.setdisplayname", PermissionLevel.LEADER),
|
||||
RANK_LIST("simpleclans.leader.rank.list", PermissionLevel.LEADER),
|
||||
RIVAL_ADD("simpleclans.leader.rival", PermissionLevel.LEADER),
|
||||
RIVAL_REMOVE("simpleclans.leader.rival", PermissionLevel.LEADER),
|
||||
WAR_END("simpleclans.leader.war", PermissionLevel.LEADER),
|
||||
WAR_START("simpleclans.leader.war", PermissionLevel.LEADER),
|
||||
STATS("simpleclans.member.stats", PermissionLevel.TRUSTED),
|
||||
VITALS("simpleclans.member.vitals", PermissionLevel.TRUSTED),
|
||||
KILLS("simpleclans.member.kills", PermissionLevel.TRUSTED),
|
||||
DESCRIPTION("simpleclans.leader.description", PermissionLevel.LEADER),
|
||||
MOSTKILLED("simpleclans.mod.mostkilled", PermissionLevel.TRUSTED),
|
||||
FRIENDLYFIRE("simpleclans.leader.ff", PermissionLevel.LEADER),
|
||||
SETBANNER("simpleclans.leader.setbanner", PermissionLevel.LEADER);
|
||||
|
||||
private final String bukkitPermission;
|
||||
private final PermissionLevel permissionLevel;
|
||||
|
||||
RankPermission(String bukkitPermission, PermissionLevel permissionLevel) {
|
||||
this.bukkitPermission = bukkitPermission;
|
||||
this.permissionLevel = permissionLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the Bukkit equivalent to this rank permission
|
||||
*/
|
||||
public String getBukkitPermission() {
|
||||
return bukkitPermission;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the PermissionLevel
|
||||
*
|
||||
*/
|
||||
public PermissionLevel getPermissionLevel() {
|
||||
return permissionLevel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString().replace("_", ".").toLowerCase();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param permission the permission
|
||||
* @return true if this is a valid rank permission
|
||||
*/
|
||||
@Contract("null -> false")
|
||||
public static boolean isValid(@Nullable String permission) {
|
||||
for (RankPermission p : values()) {
|
||||
if (p.toString().equalsIgnoreCase(permission)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
+185
-267
@@ -1,267 +1,185 @@
|
||||
package net.trueog.unionsog;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static net.trueog.unionsog.managers.SettingsManager.ConfigField.REQUEST_MAX;
|
||||
|
||||
/**
|
||||
* @author phaed
|
||||
*/
|
||||
public final class Request {
|
||||
|
||||
private List<UnionPlayer> acceptors = new ArrayList<>();
|
||||
private Union union;
|
||||
private String msg;
|
||||
private String target;
|
||||
private UnionRequest type;
|
||||
private UnionPlayer requester;
|
||||
private int askCount;
|
||||
private Location destination;
|
||||
|
||||
public Request(UnionRequest type, @Nullable List<UnionPlayer> acceptors, UnionPlayer requester, String target,
|
||||
Union union, String msg)
|
||||
{
|
||||
|
||||
this.type = type;
|
||||
this.target = target;
|
||||
this.union = union;
|
||||
this.msg = msg;
|
||||
if (acceptors != null) {
|
||||
|
||||
this.acceptors = acceptors;
|
||||
|
||||
}
|
||||
|
||||
this.requester = requester;
|
||||
|
||||
cleanVotes();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Where a {@link UnionRequest#REGROUP} would put the player it is asking, so
|
||||
* that the teleport can wait for their answer.
|
||||
*
|
||||
* @return the destination, null for requests that do not teleport anybody
|
||||
*/
|
||||
public @Nullable Location getDestination() {
|
||||
|
||||
return destination;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param destination the destination to set
|
||||
*/
|
||||
public void setDestination(@Nullable Location destination) {
|
||||
|
||||
this.destination = destination;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the type
|
||||
*/
|
||||
public UnionRequest getType() {
|
||||
|
||||
return type;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type the type to set
|
||||
*/
|
||||
public void setType(UnionRequest type) {
|
||||
|
||||
this.type = type;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the acceptors
|
||||
*/
|
||||
public List<UnionPlayer> getAcceptors() {
|
||||
|
||||
return Collections.unmodifiableList(acceptors);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param acceptors the acceptors to set
|
||||
*/
|
||||
public void setAcceptors(List<UnionPlayer> acceptors) {
|
||||
|
||||
this.acceptors = acceptors;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the union
|
||||
*/
|
||||
public Union getUnion() {
|
||||
|
||||
return union;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param union the union to set
|
||||
*/
|
||||
public void setUnion(Union union) {
|
||||
|
||||
this.union = union;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the msg
|
||||
*/
|
||||
public String getMsg() {
|
||||
|
||||
return msg;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg the msg to set
|
||||
*/
|
||||
public void setMsg(String msg) {
|
||||
|
||||
this.msg = msg;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the target
|
||||
*/
|
||||
public String getTarget() {
|
||||
|
||||
return target;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param target the target to set
|
||||
*/
|
||||
public void setTarget(String target) {
|
||||
|
||||
this.target = target;
|
||||
|
||||
}
|
||||
|
||||
public void vote(String playerName, VoteResult vote) {
|
||||
|
||||
for (UnionPlayer cp : acceptors) {
|
||||
|
||||
if (cp.getName().equalsIgnoreCase(playerName)) {
|
||||
|
||||
cp.setVote(vote);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
|
||||
public boolean votingFinished() {
|
||||
|
||||
for (UnionPlayer cp : acceptors) {
|
||||
|
||||
if (cp.getVote() == null) {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
public List<String> getDenies() {
|
||||
|
||||
List<String> out = new ArrayList<>();
|
||||
|
||||
for (UnionPlayer cp : acceptors) {
|
||||
|
||||
if (cp.getVote() != null && cp.getVote().equals(VoteResult.DENY)) {
|
||||
|
||||
out.add(cp.getName());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return out;
|
||||
|
||||
}
|
||||
|
||||
public List<String> getAccepts() {
|
||||
|
||||
List<String> out = new ArrayList<>();
|
||||
|
||||
for (UnionPlayer cp : acceptors) {
|
||||
|
||||
if (cp.getVote() != null && cp.getVote().equals(VoteResult.ACCEPT)) {
|
||||
|
||||
out.add(cp.getName());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return out;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleans votes
|
||||
*/
|
||||
public void cleanVotes() {
|
||||
|
||||
for (UnionPlayer cp : acceptors) {
|
||||
|
||||
cp.setVote(null);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the requester
|
||||
*/
|
||||
public UnionPlayer getRequester() {
|
||||
|
||||
return requester;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param requester the requester to set
|
||||
*/
|
||||
public void setRequester(UnionPlayer requester) {
|
||||
|
||||
this.requester = requester;
|
||||
|
||||
}
|
||||
|
||||
public void incrementAskCount() {
|
||||
|
||||
askCount += 1;
|
||||
|
||||
}
|
||||
|
||||
public boolean reachedRequestLimit() {
|
||||
|
||||
return askCount > UnionsOG.getInstance().getSettingsManager().getInt(REQUEST_MAX);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.REQUEST_MAX;
|
||||
|
||||
/**
|
||||
* @author phaed
|
||||
*/
|
||||
public final class Request {
|
||||
private List<ClanPlayer> acceptors = new ArrayList<>();
|
||||
private Clan clan;
|
||||
private String msg;
|
||||
private String target;
|
||||
private ClanRequest type;
|
||||
private ClanPlayer requester;
|
||||
private int askCount;
|
||||
|
||||
public Request(SimpleClans plugin,
|
||||
ClanRequest type,
|
||||
@Nullable List<ClanPlayer> acceptors,
|
||||
ClanPlayer requester,
|
||||
String target,
|
||||
Clan clan,
|
||||
String msg) {
|
||||
this.type = type;
|
||||
this.target = target;
|
||||
this.clan = clan;
|
||||
this.msg = msg;
|
||||
if (acceptors != null) {
|
||||
this.acceptors = acceptors;
|
||||
}
|
||||
this.requester = requester;
|
||||
|
||||
cleanVotes();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the type
|
||||
*/
|
||||
public ClanRequest getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type the type to set
|
||||
*/
|
||||
public void setType(ClanRequest type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the acceptors
|
||||
*/
|
||||
public List<ClanPlayer> getAcceptors() {
|
||||
return Collections.unmodifiableList(acceptors);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param acceptors the acceptors to set
|
||||
*/
|
||||
public void setAcceptors(List<ClanPlayer> acceptors) {
|
||||
this.acceptors = acceptors;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the clan
|
||||
*/
|
||||
public Clan getClan() {
|
||||
return clan;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param clan the clan to set
|
||||
*/
|
||||
public void setClan(Clan clan) {
|
||||
this.clan = clan;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the msg
|
||||
*/
|
||||
public String getMsg() {
|
||||
return msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg the msg to set
|
||||
*/
|
||||
public void setMsg(String msg) {
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the target
|
||||
*/
|
||||
public String getTarget() {
|
||||
return target;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param target the target to set
|
||||
*/
|
||||
public void setTarget(String target) {
|
||||
this.target = target;
|
||||
}
|
||||
|
||||
public void vote(String playerName, VoteResult vote) {
|
||||
for (ClanPlayer cp : acceptors) {
|
||||
if (cp.getName().equalsIgnoreCase(playerName)) {
|
||||
cp.setVote(vote);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
|
||||
public boolean votingFinished() {
|
||||
for (ClanPlayer cp : acceptors) {
|
||||
if (cp.getVote() == null) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<String> getDenies() {
|
||||
List<String> out = new ArrayList<>();
|
||||
|
||||
for (ClanPlayer cp : acceptors) {
|
||||
if (cp.getVote() != null && cp.getVote().equals(VoteResult.DENY)) {
|
||||
out.add(cp.getName());
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
public List<String> getAccepts() {
|
||||
List<String> out = new ArrayList<>();
|
||||
|
||||
for (ClanPlayer cp : acceptors) {
|
||||
if (cp.getVote() != null && cp.getVote().equals(VoteResult.ACCEPT)) {
|
||||
out.add(cp.getName());
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleans votes
|
||||
*/
|
||||
public void cleanVotes() {
|
||||
for (ClanPlayer cp : acceptors) {
|
||||
cp.setVote(null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the requester
|
||||
*/
|
||||
public ClanPlayer getRequester() {
|
||||
return requester;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param requester the requester to set
|
||||
*/
|
||||
public void setRequester(ClanPlayer requester) {
|
||||
this.requester = requester;
|
||||
}
|
||||
|
||||
public void incrementAskCount() {
|
||||
askCount += 1;
|
||||
}
|
||||
|
||||
public boolean reachedRequestLimit() {
|
||||
return askCount > SimpleClans.getInstance().getSettingsManager().getInt(REQUEST_MAX);
|
||||
}
|
||||
}
|
||||
+357
-510
@@ -1,510 +1,357 @@
|
||||
package net.trueog.unionsog;
|
||||
|
||||
import co.aikar.commands.BukkitCommandIssuer;
|
||||
import net.trueog.unionsog.commands.GroupAliasCommand;
|
||||
import net.trueog.unionsog.commands.SCCommandManager;
|
||||
import net.trueog.unionsog.hooks.papi.UnionsOGExpansion;
|
||||
import net.trueog.unionsog.hooks.papi.UnionsOGMiniPlaceholders;
|
||||
import net.trueog.unionsog.language.LanguageResource;
|
||||
import net.trueog.unionsog.listeners.*;
|
||||
import net.trueog.unionsog.loggers.BankLogger;
|
||||
import net.trueog.unionsog.loggers.CSVBankLogger;
|
||||
import net.trueog.unionsog.managers.*;
|
||||
import net.trueog.unionsog.migrations.BbMigration;
|
||||
import net.trueog.unionsog.migrations.ChatFormatMigration;
|
||||
import net.trueog.unionsog.migrations.LanguageMigration;
|
||||
import net.trueog.unionsog.migrations.UnionBankZeroMigration;
|
||||
import net.trueog.unionsog.migrations.legacy.LegacyUnionsDatabaseMigrationRunner.MigrationStartupException;
|
||||
import net.trueog.unionsog.proxy.BungeeManager;
|
||||
import net.trueog.unionsog.proxy.ProxyManager;
|
||||
import net.trueog.unionsog.tasks.*;
|
||||
import net.trueog.unionsog.ui.InventoryController;
|
||||
import net.trueog.unionsog.utils.ChatUtils;
|
||||
import net.trueog.unionsog.utils.TagValidator;
|
||||
import net.trueog.unionsog.uuid.UUIDMigration;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static net.trueog.unionsog.managers.SettingsManager.ConfigField.*;
|
||||
import static org.bukkit.Bukkit.getPluginManager;
|
||||
|
||||
/**
|
||||
* @author Phaed
|
||||
*/
|
||||
public class UnionsOG extends JavaPlugin {
|
||||
|
||||
private final ArrayList<String> messages = new ArrayList<>();
|
||||
|
||||
private static UnionsOG instance;
|
||||
private static LanguageResource languageResource;
|
||||
private static final Logger logger = Logger.getLogger("Unions-OG");
|
||||
private SCCommandManager commandManager;
|
||||
private UnionManager unionManager;
|
||||
private RequestManager requestManager;
|
||||
private ProposalManager proposalManager;
|
||||
private StorageManager storageManager;
|
||||
private SettingsManager settingsManager;
|
||||
private PermissionsManager permissionsManager;
|
||||
private TeleportManager teleportManager;
|
||||
private ProtectionManager protectionManager;
|
||||
private ChatManager chatManager;
|
||||
private ProxyManager proxyManager;
|
||||
private boolean hasUUID;
|
||||
private boolean startupComplete;
|
||||
private static final Pattern ACF_PLACEHOLDER_PATTERN = Pattern.compile("\\{(?<key>[a-zA-Z]+?)}");
|
||||
|
||||
private BankLogger bankLogger;
|
||||
private TagValidator tagValidator;
|
||||
|
||||
/**
|
||||
* @return the logger
|
||||
*/
|
||||
@Deprecated
|
||||
public static Logger getLog() {
|
||||
|
||||
return logger;
|
||||
|
||||
}
|
||||
|
||||
public static void debug(String msg) {
|
||||
|
||||
// instance may be null during tests
|
||||
if (getInstance() == null || getInstance().getSettingsManager().is(DEBUG)) {
|
||||
|
||||
logger.log(Level.INFO, msg);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the instance
|
||||
*/
|
||||
public static UnionsOG getInstance() {
|
||||
|
||||
return instance;
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static void log(String msg, Object... arg) {
|
||||
|
||||
if (arg == null || arg.length == 0) {
|
||||
|
||||
logger.log(Level.INFO, msg);
|
||||
|
||||
} else {
|
||||
|
||||
logger.log(Level.INFO, MessageFormat.format(msg, arg));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
|
||||
instance = this;
|
||||
new LanguageMigration(this).migrate();
|
||||
settingsManager = new SettingsManager(this);
|
||||
new BbMigration(settingsManager);
|
||||
new ChatFormatMigration(settingsManager);
|
||||
languageResource = new LanguageResource();
|
||||
this.hasUUID = UUIDMigration.canReturnUUID();
|
||||
|
||||
permissionsManager = new PermissionsManager();
|
||||
requestManager = new RequestManager();
|
||||
unionManager = new UnionManager();
|
||||
proxyManager = new BungeeManager(this);
|
||||
try {
|
||||
|
||||
storageManager = new StorageManager();
|
||||
|
||||
} catch (MigrationStartupException ex) {
|
||||
|
||||
getLogger().log(Level.SEVERE, ex.getMessage(), ex);
|
||||
getServer().getPluginManager().disablePlugin(this);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
proposalManager = new ProposalManager();
|
||||
teleportManager = new TeleportManager();
|
||||
protectionManager = new ProtectionManager();
|
||||
protectionManager.registerListeners();
|
||||
chatManager = new ChatManager(this);
|
||||
registerEvents();
|
||||
permissionsManager.loadPermissions();
|
||||
commandManager = new SCCommandManager(this);
|
||||
bankLogger = new CSVBankLogger(this);
|
||||
// TODO: start - remove with UnionBankZeroMigration once union bank accounts
|
||||
// exist.
|
||||
new UnionBankZeroMigration(this).migrate();
|
||||
// TODO: end
|
||||
|
||||
registerGroupAliases();
|
||||
|
||||
tagValidator = new TagValidator(settingsManager, permissionsManager);
|
||||
|
||||
logStatus();
|
||||
startTasks();
|
||||
hookIntoPAPI();
|
||||
hookIntoMiniPlaceholders();
|
||||
startupComplete = true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Points other group plugins' command words at {@code /union}.
|
||||
*/
|
||||
private void registerGroupAliases() {
|
||||
|
||||
GroupAliasCommand executor = new GroupAliasCommand();
|
||||
for (String alias : GroupAliasCommand.ALIASES) {
|
||||
|
||||
PluginCommand command = getCommand(alias);
|
||||
if (command == null) {
|
||||
|
||||
getLogger().warning("Group alias /" + alias + " is not registered in plugin.yml, skipping it.");
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
command.setExecutor(executor);
|
||||
command.setTabCompleter(executor);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void logStatus() {
|
||||
|
||||
getLogger().info("Multithreading: " + settingsManager.is(PERFORMANCE_USE_THREADS));
|
||||
getLogger().info("BungeeCord: " + settingsManager.is(PERFORMANCE_USE_BUNGEECORD));
|
||||
getLogger().info("HEX support: " + ChatUtils.HEX_COLOR_SUPPORT);
|
||||
|
||||
}
|
||||
|
||||
private void registerEvents() {
|
||||
|
||||
PluginManager pm = getServer().getPluginManager();
|
||||
pm.registerEvents(new PlayerDeath(this), this);
|
||||
pm.registerEvents(new SCPlayerListener(this), this);
|
||||
pm.registerEvents(new InventoryController(), this);
|
||||
pm.registerEvents(new TamableMobsSharing(this), this);
|
||||
pm.registerEvents(new PvPOnlyInWar(this), this);
|
||||
pm.registerEvents(new FriendlyFire(this), this);
|
||||
|
||||
}
|
||||
|
||||
private void hookIntoPAPI() {
|
||||
|
||||
if (getPluginManager().getPlugin("PlaceholderAPI") != null) {
|
||||
|
||||
getLogger().info("PlaceholderAPI found. Registering hook...");
|
||||
new UnionsOGExpansion(this).register();
|
||||
new UnionsOGExpansion(this, "simpleunions").register();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void hookIntoMiniPlaceholders() {
|
||||
|
||||
if (getPluginManager().getPlugin("Utilities-OG") != null) {
|
||||
|
||||
getLogger().info("Utilities-OG found. Registering MiniPlaceholders...");
|
||||
new UnionsOGMiniPlaceholders(this).register();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void startTasks() {
|
||||
|
||||
if (getSettingsManager().is(PERFORMANCE_SAVE_PERIODICALLY)) {
|
||||
|
||||
new SaveDataTask().start();
|
||||
|
||||
}
|
||||
|
||||
if (getSettingsManager().is(PERFORMANCE_HEAD_CACHING)) {
|
||||
|
||||
new PlayerHeadCacheTask(this).start();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
|
||||
if (storageManager != null) {
|
||||
|
||||
if (startupComplete && settingsManager != null && settingsManager.is(PERFORMANCE_SAVE_PERIODICALLY)) {
|
||||
|
||||
storageManager.saveModified();
|
||||
|
||||
}
|
||||
|
||||
storageManager.closeConnection();
|
||||
|
||||
}
|
||||
|
||||
if (!startupComplete) {
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
permissionsManager.savePermissions();
|
||||
settingsManager.loadAndSave();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the unionManager
|
||||
*/
|
||||
public UnionManager getUnionManager() {
|
||||
|
||||
return unionManager;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the requestManager
|
||||
*/
|
||||
public RequestManager getRequestManager() {
|
||||
|
||||
return requestManager;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the proposalManager
|
||||
*/
|
||||
public ProposalManager getProposalManager() {
|
||||
|
||||
return proposalManager;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the storageManager
|
||||
*/
|
||||
public StorageManager getStorageManager() {
|
||||
|
||||
return storageManager;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the settingsManager
|
||||
*/
|
||||
public SettingsManager getSettingsManager() {
|
||||
|
||||
return settingsManager;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the permissionsManager
|
||||
*/
|
||||
@NotNull
|
||||
public PermissionsManager getPermissionsManager() {
|
||||
|
||||
return permissionsManager;
|
||||
|
||||
}
|
||||
|
||||
public SCCommandManager getCommandManager() {
|
||||
|
||||
return commandManager;
|
||||
|
||||
}
|
||||
|
||||
public ProtectionManager getProtectionManager() {
|
||||
|
||||
return protectionManager;
|
||||
|
||||
}
|
||||
|
||||
public ChatManager getChatManager() {
|
||||
|
||||
return chatManager;
|
||||
|
||||
}
|
||||
|
||||
public ProxyManager getProxyManager() {
|
||||
|
||||
return proxyManager;
|
||||
|
||||
}
|
||||
|
||||
public BankLogger getBankLogger() {
|
||||
|
||||
return bankLogger;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param key the path within the language file
|
||||
* @return the lang
|
||||
*/
|
||||
@Deprecated
|
||||
public String getLang(@NotNull String key) {
|
||||
|
||||
return getLang(key, null);
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public String getLang(@NotNull String key, @Nullable Player player) {
|
||||
|
||||
return lang(key, player);
|
||||
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String optionalLang(@NotNull String key, @Nullable UnionPlayer unionPlayer, Object... arguments) {
|
||||
|
||||
Locale locale = instance.getSettingsManager().getLanguage();
|
||||
if (unionPlayer != null && unionPlayer.getLocale() != null
|
||||
&& instance.getSettingsManager().is(LANGUAGE_SELECTOR))
|
||||
{
|
||||
|
||||
locale = unionPlayer.getLocale();
|
||||
|
||||
}
|
||||
|
||||
String lang = languageResource.getLang(key, locale);
|
||||
if (lang == null) {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
String message = ChatUtils.parseColors(lang);
|
||||
// contains acf placeholders like {commandprefix}
|
||||
if (ACF_PLACEHOLDER_PATTERN.matcher(message).find()) {
|
||||
|
||||
return message;
|
||||
|
||||
}
|
||||
|
||||
return MessageFormat.format(message, arguments);
|
||||
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String optionalLang(@NotNull String key, @Nullable Player player, Object... arguments) {
|
||||
|
||||
UnionPlayer unionPlayer = null;
|
||||
if (player != null) {
|
||||
|
||||
unionPlayer = instance.getUnionManager().getAnyUnionPlayer(player.getUniqueId());
|
||||
|
||||
}
|
||||
|
||||
return optionalLang(key, unionPlayer, arguments);
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String lang(@NotNull String key, @Nullable Player player, Object... arguments) {
|
||||
|
||||
String lang = optionalLang(key, player, arguments);
|
||||
return (lang == null) ? key : lang;
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String lang(@NotNull String key, @Nullable UnionPlayer unionPlayer, Object... arguments) {
|
||||
|
||||
String lang = optionalLang(key, unionPlayer, arguments);
|
||||
return (lang == null) ? key : lang;
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String lang(@NotNull String key, @Nullable CommandSender sender, Object... arguments) {
|
||||
|
||||
if (sender instanceof Player) {
|
||||
|
||||
return lang(key, (Player) sender, arguments);
|
||||
|
||||
} else {
|
||||
|
||||
return lang(key, (Player) null, arguments);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String lang(@NotNull String key, @Nullable BukkitCommandIssuer issuer, Object... arguments) {
|
||||
|
||||
if (issuer != null) {
|
||||
|
||||
return lang(key, issuer.getIssuer(), arguments);
|
||||
|
||||
}
|
||||
|
||||
return lang(key, arguments);
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String lang(@NotNull String key, Object... arguments) {
|
||||
|
||||
return lang(key, (Player) null, arguments);
|
||||
|
||||
}
|
||||
|
||||
public TeleportManager getTeleportManager() {
|
||||
|
||||
return teleportManager;
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public List<String> getMessages() {
|
||||
|
||||
return messages;
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public boolean hasUUID() {
|
||||
|
||||
return this.hasUUID;
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setUUID(boolean trueOrFalse) {
|
||||
|
||||
this.hasUUID = trueOrFalse;
|
||||
|
||||
}
|
||||
|
||||
public TagValidator getTagValidator() {
|
||||
|
||||
return tagValidator;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
import co.aikar.commands.BukkitCommandIssuer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.SCCommandManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.hooks.papi.SimpleClansExpansion;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageMigration;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.listeners.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.loggers.CSVBankLogger;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.proxy.BungeeManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.proxy.ProxyManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.tasks.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatFormatMigration;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.UpdateChecker;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
|
||||
import org.bstats.bukkit.Metrics;
|
||||
import org.bstats.charts.SimplePie;
|
||||
import org.bstats.charts.SingleLineChart;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
|
||||
import static org.bukkit.Bukkit.getPluginManager;
|
||||
|
||||
/**
|
||||
* @author Phaed
|
||||
*/
|
||||
public class SimpleClans extends JavaPlugin {
|
||||
|
||||
private final ArrayList<String> messages = new ArrayList<>();
|
||||
|
||||
private static SimpleClans instance;
|
||||
private static LanguageResource languageResource;
|
||||
private static final Logger logger = Logger.getLogger("SimpleClans");
|
||||
private SCCommandManager commandManager;
|
||||
private ClanManager clanManager;
|
||||
private RequestManager requestManager;
|
||||
private StorageManager storageManager;
|
||||
private SettingsManager settingsManager;
|
||||
private PermissionsManager permissionsManager;
|
||||
private TeleportManager teleportManager;
|
||||
private ProtectionManager protectionManager;
|
||||
private ChatManager chatManager;
|
||||
private ProxyManager proxyManager;
|
||||
private boolean hasUUID;
|
||||
private static final Pattern ACF_PLACEHOLDER_PATTERN = Pattern.compile("\\{(?<key>[a-zA-Z]+?)}");
|
||||
|
||||
private BankLogger bankLogger;
|
||||
|
||||
/**
|
||||
* @return the logger
|
||||
*/
|
||||
@Deprecated
|
||||
public static Logger getLog() {
|
||||
return logger;
|
||||
}
|
||||
|
||||
public static void debug(String msg) {
|
||||
if (getInstance().getSettingsManager().is(DEBUG)) {
|
||||
logger.log(Level.INFO, msg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the instance
|
||||
*/
|
||||
public static SimpleClans getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static void log(String msg, Object... arg) {
|
||||
if (arg == null || arg.length == 0) {
|
||||
logger.log(Level.INFO, msg);
|
||||
} else {
|
||||
logger.log(Level.INFO, MessageFormat.format(msg, arg));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
instance = this;
|
||||
new LanguageMigration(this).migrate();
|
||||
settingsManager = new SettingsManager(this);
|
||||
languageResource = new LanguageResource();
|
||||
this.hasUUID = UUIDMigration.canReturnUUID();
|
||||
|
||||
permissionsManager = new PermissionsManager();
|
||||
requestManager = new RequestManager();
|
||||
clanManager = new ClanManager();
|
||||
proxyManager = new BungeeManager(this);
|
||||
storageManager = new StorageManager();
|
||||
teleportManager = new TeleportManager();
|
||||
protectionManager = new ProtectionManager();
|
||||
protectionManager.registerListeners();
|
||||
chatManager = new ChatManager(this);
|
||||
migrateChatFormat();
|
||||
registerEvents();
|
||||
permissionsManager.loadPermissions();
|
||||
commandManager = new SCCommandManager(this);
|
||||
bankLogger = new CSVBankLogger(this);
|
||||
|
||||
logStatus();
|
||||
startTasks();
|
||||
startMetrics();
|
||||
hookIntoPAPI();
|
||||
new UpdateChecker(this).check();
|
||||
}
|
||||
|
||||
private void logStatus() {
|
||||
getLogger().info("Multithreading: " + settingsManager.is(PERFORMANCE_USE_THREADS));
|
||||
getLogger().info("BungeeCord: " + settingsManager.is(PERFORMANCE_USE_BUNGEECORD));
|
||||
getLogger().info("HEX support: " + ChatUtils.HEX_COLOR_SUPPORT);
|
||||
getLogger().info("Help us translate SimpleClans to your language! " +
|
||||
"Access https://crowdin.com/project/simpleclans/");
|
||||
}
|
||||
|
||||
private void registerEvents() {
|
||||
PluginManager pm = getServer().getPluginManager();
|
||||
pm.registerEvents(new PlayerDeath(this), this);
|
||||
pm.registerEvents(new SCPlayerListener(this), this);
|
||||
pm.registerEvents(new InventoryController(), this);
|
||||
pm.registerEvents(new TamableMobsSharing(this), this);
|
||||
pm.registerEvents(new PvPOnlyInWar(this), this);
|
||||
pm.registerEvents(new FriendlyFire(this), this);
|
||||
}
|
||||
|
||||
private void migrateChatFormat() {
|
||||
ChatFormatMigration chatFormatMigration = new ChatFormatMigration();
|
||||
chatFormatMigration.migrateAllyChat();
|
||||
chatFormatMigration.migrateClanChat();
|
||||
}
|
||||
|
||||
private void hookIntoPAPI() {
|
||||
if (getPluginManager().getPlugin("PlaceholderAPI") != null) {
|
||||
getLogger().info("PlaceholderAPI found. Registering hook...");
|
||||
new SimpleClansExpansion(this).register();
|
||||
}
|
||||
}
|
||||
|
||||
private void startMetrics() {
|
||||
Metrics metrics = new Metrics(this, 7131);
|
||||
SettingsManager sm = getSettingsManager();
|
||||
ClanManager cm = getClanManager();
|
||||
String on = "enabled";
|
||||
String off = "disabled";
|
||||
metrics.addCustomChart(new SingleLineChart("clans", () -> cm.getClans().size()));
|
||||
metrics.addCustomChart(new SingleLineChart("clan_players", () -> cm.getAllClanPlayers().size()));
|
||||
metrics.addCustomChart(new SimplePie("language", () -> sm.getLanguage().toString()));
|
||||
metrics.addCustomChart(new SimplePie("machine_language", () -> Locale.getDefault().toString()));
|
||||
metrics.addCustomChart(new SimplePie("language_chooser", () -> sm.is(LANGUAGE_SELECTOR) ? on : off));
|
||||
metrics.addCustomChart(new SimplePie("database", () -> sm.is(MYSQL_ENABLE) ? "MySQL" : "SQLite"));
|
||||
metrics.addCustomChart(new SimplePie("save_periodically", () -> sm.is(PERFORMANCE_SAVE_PERIODICALLY) ? on : off));
|
||||
metrics.addCustomChart(new SimplePie("save_interval", () -> sm.getString(PERFORMANCE_SAVE_INTERVAL)));
|
||||
metrics.addCustomChart(new SimplePie("upkeep", () -> sm.is(ECONOMY_UPKEEP_ENABLED) ? on : off));
|
||||
metrics.addCustomChart(new SimplePie("member_fee", () -> sm.is(ECONOMY_MEMBER_FEE_ENABLED) ? on : off));
|
||||
metrics.addCustomChart(new SimplePie("rejoin_cooldown", () -> sm.is(ENABLE_REJOIN_COOLDOWN) ? on : off));
|
||||
metrics.addCustomChart(new SimplePie("clan_verification", () -> sm.is(REQUIRE_VERIFICATION) ? on : off));
|
||||
metrics.addCustomChart(new SimplePie("money_per_kill", () -> sm.is(ECONOMY_MONEY_PER_KILL) ? on : off));
|
||||
metrics.addCustomChart(new SimplePie("threads", () -> sm.is(PERFORMANCE_USE_THREADS) ? on : off));
|
||||
metrics.addCustomChart(new SimplePie("bungeecord", () -> sm.is(PERFORMANCE_USE_BUNGEECORD) ? on : off));
|
||||
metrics.addCustomChart(new SimplePie("discord_chat", () -> sm.is(DISCORDCHAT_ENABLE) ? on : off));
|
||||
}
|
||||
|
||||
private void startTasks() {
|
||||
if (getSettingsManager().is(PERFORMANCE_SAVE_PERIODICALLY)) {
|
||||
new SaveDataTask().start();
|
||||
}
|
||||
if (getSettingsManager().is(ECONOMY_MEMBER_FEE_ENABLED)) {
|
||||
new CollectFeeTask().start();
|
||||
}
|
||||
if (getSettingsManager().is(ECONOMY_UPKEEP_ENABLED)) {
|
||||
new CollectUpkeepTask().start();
|
||||
new UpkeepWarningTask().start();
|
||||
}
|
||||
if (getSettingsManager().is(PERFORMANCE_HEAD_CACHING)) {
|
||||
new PlayerHeadCacheTask(this).start();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
if (getSettingsManager().is(PERFORMANCE_SAVE_PERIODICALLY)) {
|
||||
getStorageManager().saveModified();
|
||||
}
|
||||
getStorageManager().closeConnection();
|
||||
getPermissionsManager().savePermissions();
|
||||
getSettingsManager().loadAndSave();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the clanManager
|
||||
*/
|
||||
public ClanManager getClanManager() {
|
||||
return clanManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the requestManager
|
||||
*/
|
||||
public RequestManager getRequestManager() {
|
||||
return requestManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the storageManager
|
||||
*/
|
||||
public StorageManager getStorageManager() {
|
||||
return storageManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the settingsManager
|
||||
*/
|
||||
public SettingsManager getSettingsManager() {
|
||||
return settingsManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the permissionsManager
|
||||
*/
|
||||
@NotNull
|
||||
public PermissionsManager getPermissionsManager() {
|
||||
return permissionsManager;
|
||||
}
|
||||
|
||||
public SCCommandManager getCommandManager() {
|
||||
return commandManager;
|
||||
}
|
||||
|
||||
public ProtectionManager getProtectionManager() {
|
||||
return protectionManager;
|
||||
}
|
||||
|
||||
public ChatManager getChatManager() {
|
||||
return chatManager;
|
||||
}
|
||||
|
||||
public ProxyManager getProxyManager() {
|
||||
return proxyManager;
|
||||
}
|
||||
|
||||
public BankLogger getBankLogger() {
|
||||
return bankLogger;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param key the path within the language file
|
||||
* @return the lang
|
||||
*/
|
||||
@Deprecated
|
||||
public String getLang(@NotNull String key) {
|
||||
return getLang(key, null);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public String getLang(@NotNull String key, @Nullable Player player) {
|
||||
return lang(key, player);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String optionalLang(@NotNull String key, @Nullable ClanPlayer clanPlayer, Object... arguments) {
|
||||
Locale locale = instance.getSettingsManager().getLanguage();
|
||||
if (clanPlayer != null && clanPlayer.getLocale() != null && instance.getSettingsManager().is(LANGUAGE_SELECTOR)) {
|
||||
locale = clanPlayer.getLocale();
|
||||
}
|
||||
|
||||
String lang = languageResource.getLang(key, locale);
|
||||
if (lang == null) {
|
||||
return null;
|
||||
}
|
||||
String message = ChatUtils.parseColors(lang);
|
||||
// contains acf placeholders like {commandprefix}
|
||||
if (ACF_PLACEHOLDER_PATTERN.matcher(message).find()) {
|
||||
return message;
|
||||
}
|
||||
return MessageFormat.format(message, arguments);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String optionalLang(@NotNull String key, @Nullable Player player, Object... arguments) {
|
||||
ClanPlayer clanPlayer = null;
|
||||
if (player != null) {
|
||||
clanPlayer = instance.getClanManager().getAnyClanPlayer(player.getUniqueId());
|
||||
}
|
||||
return optionalLang(key, clanPlayer, arguments);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String lang(@NotNull String key, @Nullable Player player, Object... arguments) {
|
||||
String lang = optionalLang(key, player, arguments);
|
||||
return (lang == null) ? key : lang;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String lang(@NotNull String key, @Nullable ClanPlayer clanPlayer, Object... arguments) {
|
||||
String lang = optionalLang(key, clanPlayer, arguments);
|
||||
return (lang == null) ? key : lang;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String lang(@NotNull String key, @Nullable CommandSender sender, Object... arguments) {
|
||||
if (sender instanceof Player) {
|
||||
return lang(key, (Player) sender, arguments);
|
||||
} else {
|
||||
return lang(key, (Player) null, arguments);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String lang(@NotNull String key, @Nullable BukkitCommandIssuer issuer, Object... arguments) {
|
||||
if (issuer != null) {
|
||||
return lang(key, issuer.getIssuer(), arguments);
|
||||
}
|
||||
return lang(key, arguments);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String lang(@NotNull String key, Object... arguments) {
|
||||
return lang(key, (Player) null, arguments);
|
||||
}
|
||||
|
||||
public TeleportManager getTeleportManager() {
|
||||
return teleportManager;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public List<String> getMessages() {
|
||||
return messages;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public boolean hasUUID() {
|
||||
return this.hasUUID;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setUUID(boolean trueOrFalse) {
|
||||
this.hasUUID = trueOrFalse;
|
||||
}
|
||||
}
|
||||
+15
-48
@@ -1,4 +1,4 @@
|
||||
package net.trueog.unionsog;
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
||||
@@ -8,109 +8,76 @@ import java.util.regex.Pattern;
|
||||
public class StringSimplifier {
|
||||
|
||||
private StringSimplifier() {
|
||||
|
||||
}
|
||||
|
||||
public static final char DEFAULT_REPLACE_CHAR = '-';
|
||||
public static final String DEFAULT_REPLACE = String.valueOf(DEFAULT_REPLACE_CHAR);
|
||||
private static final ImmutableMap<String, String> NONDIACRITICS = ImmutableMap.<String, String>builder()
|
||||
|
||||
// Remove crap strings with no sematics
|
||||
//Remove crap strings with no sematics
|
||||
.put(".", "").put("\"", "").put("'", "")
|
||||
|
||||
// Keep relevant characters as seperation
|
||||
.put(" ", DEFAULT_REPLACE).put("]", DEFAULT_REPLACE).put("[", DEFAULT_REPLACE).put(")", DEFAULT_REPLACE)
|
||||
.put("(", DEFAULT_REPLACE).put("=", DEFAULT_REPLACE).put("!", DEFAULT_REPLACE).put("/", DEFAULT_REPLACE)
|
||||
.put("\\", DEFAULT_REPLACE).put("&", DEFAULT_REPLACE).put(",", DEFAULT_REPLACE).put("?", DEFAULT_REPLACE)
|
||||
.put("°", DEFAULT_REPLACE) // Remove ?? is diacritic?
|
||||
.put("|", DEFAULT_REPLACE).put("<", DEFAULT_REPLACE).put(">", DEFAULT_REPLACE).put(";", DEFAULT_REPLACE)
|
||||
.put(":", DEFAULT_REPLACE).put("_", DEFAULT_REPLACE).put("#", DEFAULT_REPLACE).put("~", DEFAULT_REPLACE)
|
||||
.put("+", DEFAULT_REPLACE).put("*", DEFAULT_REPLACE)
|
||||
//Keep relevant characters as seperation
|
||||
.put(" ", DEFAULT_REPLACE).put("]", DEFAULT_REPLACE).put("[", DEFAULT_REPLACE).put(")", DEFAULT_REPLACE).put("(", DEFAULT_REPLACE).put("=", DEFAULT_REPLACE).put("!", DEFAULT_REPLACE).put("/", DEFAULT_REPLACE).put("\\", DEFAULT_REPLACE).put("&", DEFAULT_REPLACE).put(",", DEFAULT_REPLACE).put("?", DEFAULT_REPLACE).put("°", DEFAULT_REPLACE) //Remove ?? is diacritic?
|
||||
.put("|", DEFAULT_REPLACE).put("<", DEFAULT_REPLACE).put(">", DEFAULT_REPLACE).put(";", DEFAULT_REPLACE).put(":", DEFAULT_REPLACE).put("_", DEFAULT_REPLACE).put("#", DEFAULT_REPLACE).put("~", DEFAULT_REPLACE).put("+", DEFAULT_REPLACE).put("*", DEFAULT_REPLACE)
|
||||
|
||||
// Replace non-diacritics as their equivalent characters
|
||||
//Replace non-diacritics as their equivalent characters
|
||||
.put("\u0141", "l") // BiaLystock
|
||||
.put("\u0142", "l") // Bialystock
|
||||
.put("ß", "ss").put("æ", "ae").put("ø", "o").put("©", "c").put("\u00D0", "d") // All Ð ð from
|
||||
// http://de.wikipedia.org/wiki/%C3%90
|
||||
.put("\u00F0", "d").put("\u0110", "d").put("\u0111", "d").put("\u0189", "d").put("\u0256", "d")
|
||||
.put("\u00DE", "th") // thorn Þ
|
||||
.put("ß", "ss").put("æ", "ae").put("ø", "o").put("©", "c").put("\u00D0", "d") // All Ð ð from http://de.wikipedia.org/wiki/%C3%90
|
||||
.put("\u00F0", "d").put("\u0110", "d").put("\u0111", "d").put("\u0189", "d").put("\u0256", "d").put("\u00DE", "th") // thorn Þ
|
||||
.put("\u00FE", "th") // thorn þ
|
||||
.build();
|
||||
|
||||
public static String simplifiedString(String orig) {
|
||||
|
||||
public static String simplifiedString(String orig) {
|
||||
String str = orig;
|
||||
if (str == null) {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
str = stripDiacritics(str);
|
||||
str = stripNonDiacritics(str);
|
||||
if (str.length() == 0) {
|
||||
|
||||
// Ugly special case to work around non-existing empty strings
|
||||
// in Oracle. Store original crapstring as simplified.
|
||||
// It would return an empty string if Oracle could store it.
|
||||
return orig;
|
||||
|
||||
}
|
||||
|
||||
return str.toLowerCase();
|
||||
|
||||
}
|
||||
|
||||
private static String stripNonDiacritics(String orig) {
|
||||
|
||||
StringBuffer ret = new StringBuffer();
|
||||
String lastchar = null;
|
||||
for (int i = 0; i < orig.length(); i++) {
|
||||
|
||||
String source = orig.substring(i, i + 1);
|
||||
String replace = NONDIACRITICS.get(source);
|
||||
String toReplace = replace == null ? String.valueOf(source) : replace;
|
||||
if (DEFAULT_REPLACE.equals(lastchar) && DEFAULT_REPLACE.equals(toReplace)) {
|
||||
|
||||
toReplace = "";
|
||||
|
||||
} else {
|
||||
|
||||
lastchar = toReplace;
|
||||
|
||||
}
|
||||
|
||||
ret.append(toReplace);
|
||||
|
||||
}
|
||||
|
||||
if (ret.length() > 0 && DEFAULT_REPLACE_CHAR == ret.charAt(ret.length() - 1)) {
|
||||
|
||||
ret.deleteCharAt(ret.length() - 1);
|
||||
|
||||
}
|
||||
|
||||
return ret.toString();
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Special regular expression character ranges relevant for simplification ->
|
||||
* see http://docstore.mik.ua/orelly/perl/prog3/ch05_04.htm
|
||||
* InCombiningDiacriticalMarks: special marks that are part of "normal" ä, ö, î
|
||||
* etc.. IsSk: Symbol, Modifier see
|
||||
* http://www.fileformat.info/info/unicode/category/Sk/list.htm IsLm: Letter,
|
||||
* Modifier see http://www.fileformat.info/info/unicode/category/Lm/list.htm
|
||||
Special regular expression character ranges relevant for simplification -> see http://docstore.mik.ua/orelly/perl/prog3/ch05_04.htm
|
||||
InCombiningDiacriticalMarks: special marks that are part of "normal" ä, ö, î etc..
|
||||
IsSk: Symbol, Modifier see http://www.fileformat.info/info/unicode/category/Sk/list.htm
|
||||
IsLm: Letter, Modifier see http://www.fileformat.info/info/unicode/category/Lm/list.htm
|
||||
*/
|
||||
public static final Pattern DIACRITICS_AND_FRIENDS = Pattern
|
||||
.compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+");
|
||||
public static final Pattern DIACRITICS_AND_FRIENDS = Pattern.compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+");
|
||||
|
||||
|
||||
private static String stripDiacritics(String str) {
|
||||
|
||||
str = Normalizer.normalize(str, Normalizer.Form.NFD);
|
||||
str = DIACRITICS_AND_FRIENDS.matcher(str).replaceAll("");
|
||||
return str;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+9
-29
@@ -1,46 +1,40 @@
|
||||
package net.trueog.unionsog;
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
|
||||
public class TeleportState {
|
||||
|
||||
private final OfflinePlayer offlinePlayer;
|
||||
private final Location origin;
|
||||
private final Location destination;
|
||||
private int counter;
|
||||
private final String unionName;
|
||||
private final String clanName;
|
||||
private boolean processing;
|
||||
|
||||
public TeleportState(Player player, Location destination, String unionName, int counter) {
|
||||
|
||||
public TeleportState(Player player, Location destination, String clanName, int counter) {
|
||||
this.offlinePlayer = player;
|
||||
this.destination = destination;
|
||||
this.origin = player.getLocation();
|
||||
this.unionName = unionName;
|
||||
this.clanName = clanName;
|
||||
this.counter = counter;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public Location getLocation() {
|
||||
|
||||
return this.origin;
|
||||
|
||||
}
|
||||
|
||||
public boolean isTeleportTime() {
|
||||
|
||||
if (this.counter > 1) {
|
||||
|
||||
this.counter--;
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -49,9 +43,7 @@ public class TeleportState {
|
||||
* @return the player
|
||||
*/
|
||||
public @Nullable Player getPlayer() {
|
||||
|
||||
return offlinePlayer.getPlayer();
|
||||
|
||||
return offlinePlayer.getPlayer();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -60,39 +52,27 @@ public class TeleportState {
|
||||
* @return the counter
|
||||
*/
|
||||
public int getCounter() {
|
||||
|
||||
return this.counter;
|
||||
|
||||
}
|
||||
|
||||
public void setCounter(int counter) {
|
||||
|
||||
this.counter = counter;
|
||||
|
||||
}
|
||||
|
||||
public String getUnionName() {
|
||||
|
||||
return this.unionName;
|
||||
|
||||
public String getClanName() {
|
||||
return this.clanName;
|
||||
}
|
||||
|
||||
public Location getDestination() {
|
||||
|
||||
return this.destination;
|
||||
|
||||
}
|
||||
|
||||
public boolean isProcessing() {
|
||||
|
||||
return this.processing;
|
||||
|
||||
}
|
||||
|
||||
public void setProcessing(boolean processing) {
|
||||
|
||||
this.processing = processing;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+10
-10
@@ -1,10 +1,10 @@
|
||||
package net.trueog.unionsog;
|
||||
|
||||
/**
|
||||
* Possible vote values
|
||||
*
|
||||
* @author cc_madelg
|
||||
*/
|
||||
public enum VoteResult {
|
||||
ACCEPT, DENY
|
||||
}
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
/**
|
||||
* Possible vote values
|
||||
*
|
||||
* @author cc_madelg
|
||||
*/
|
||||
public enum VoteResult {
|
||||
ACCEPT, DENY
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class War {
|
||||
private final Map<Clan, Integer> clans = new HashMap<>();
|
||||
|
||||
public War(@NotNull Clan clan1, @NotNull Clan clan2) {
|
||||
clans.put(clan1, 0);
|
||||
clans.put(clan2, 0);
|
||||
}
|
||||
|
||||
public List<Clan> getClans() {
|
||||
return new ArrayList<>(clans.keySet());
|
||||
}
|
||||
|
||||
public int getTotalCasualties() {
|
||||
return clans.values().stream().mapToInt(value -> value).sum();
|
||||
}
|
||||
|
||||
public int getCasualties(@NotNull Clan clan) {
|
||||
return clans.getOrDefault(clan, 0);
|
||||
}
|
||||
|
||||
public void increaseCasualties(@NotNull Clan clan) {
|
||||
clans.computeIfPresent(clan, (c, i) -> i + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj instanceof War) {
|
||||
return clans.equals(((War) obj).clans);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return clans.hashCode();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.chat;
|
||||
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
|
||||
|
||||
public interface ChatHandler {
|
||||
|
||||
SimpleClans plugin = SimpleClans.getInstance();
|
||||
|
||||
SettingsManager settingsManager = plugin.getSettingsManager();
|
||||
|
||||
ChatManager chatManager = plugin.getChatManager();
|
||||
|
||||
void sendMessage(SCMessage message);
|
||||
|
||||
boolean canHandle(SCMessage.Source source);
|
||||
}
|
||||
+19
-48
@@ -1,6 +1,6 @@
|
||||
package net.trueog.unionsog.chat;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.chat;
|
||||
|
||||
import net.trueog.unionsog.UnionPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -9,111 +9,82 @@ import java.util.List;
|
||||
public class SCMessage implements Cloneable {
|
||||
|
||||
private final Source source;
|
||||
private final UnionPlayer.Channel channel;
|
||||
private final UnionPlayer sender;
|
||||
private List<UnionPlayer> receivers;
|
||||
private final ClanPlayer.Channel channel;
|
||||
private final ClanPlayer sender;
|
||||
private List<ClanPlayer> receivers;
|
||||
private String content;
|
||||
|
||||
/**
|
||||
* Creates a message with initial parameters
|
||||
*
|
||||
* @param source The source of message
|
||||
* @param channel The channel of union player
|
||||
* @param sender The union player sender
|
||||
* @param channel The channel of clan player
|
||||
* @param sender The clan player sender
|
||||
* @param content The content of message
|
||||
* @param receivers The union players, who will receive the content
|
||||
* @param receivers The clan players, who will receive the content
|
||||
*/
|
||||
public SCMessage(@NotNull Source source, @NotNull UnionPlayer.Channel channel, @NotNull UnionPlayer sender,
|
||||
String content, @NotNull List<UnionPlayer> receivers)
|
||||
{
|
||||
|
||||
public SCMessage(@NotNull Source source, @NotNull ClanPlayer.Channel channel,
|
||||
@NotNull ClanPlayer sender, String content, @NotNull List<ClanPlayer> receivers) {
|
||||
this.source = source;
|
||||
this.channel = channel;
|
||||
this.sender = sender;
|
||||
this.content = content;
|
||||
this.receivers = receivers;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new SCMessage without receivers
|
||||
*
|
||||
* @see SCMessage#SCMessage(Source, UnionPlayer.Channel, UnionPlayer, String,
|
||||
* List) instantiate with initial receievers
|
||||
* @see SCMessage#SCMessage(Source, ClanPlayer.Channel, ClanPlayer, String, List) instantiate with initial receievers
|
||||
*/
|
||||
public SCMessage(@NotNull Source source, @NotNull UnionPlayer.Channel channel, @NotNull UnionPlayer sender,
|
||||
String content)
|
||||
{
|
||||
|
||||
public SCMessage(@NotNull Source source, @NotNull ClanPlayer.Channel channel, @NotNull ClanPlayer sender, String content) {
|
||||
this(source, channel, sender, content, new ArrayList<>());
|
||||
|
||||
}
|
||||
|
||||
public UnionPlayer.Channel getChannel() {
|
||||
|
||||
public ClanPlayer.Channel getChannel() {
|
||||
return channel;
|
||||
|
||||
}
|
||||
|
||||
public UnionPlayer getSender() {
|
||||
|
||||
public ClanPlayer getSender() {
|
||||
return sender;
|
||||
|
||||
}
|
||||
|
||||
public String getContent() {
|
||||
|
||||
return content;
|
||||
|
||||
}
|
||||
|
||||
public Source getSource() {
|
||||
|
||||
return source;
|
||||
|
||||
}
|
||||
|
||||
public List<UnionPlayer> getReceivers() {
|
||||
|
||||
public List<ClanPlayer> getReceivers() {
|
||||
return receivers;
|
||||
|
||||
}
|
||||
|
||||
public void setContent(@NotNull String content) {
|
||||
|
||||
this.content = content;
|
||||
|
||||
}
|
||||
|
||||
public void setReceivers(@NotNull List<UnionPlayer> receivers) {
|
||||
|
||||
public void setReceivers(@NotNull List<ClanPlayer> receivers) {
|
||||
this.receivers = receivers;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public SCMessage clone() {
|
||||
|
||||
try {
|
||||
|
||||
return (SCMessage) super.clone();
|
||||
|
||||
} catch (CloneNotSupportedException e) {
|
||||
|
||||
throw new Error(); // never thrown
|
||||
|
||||
throw new Error(); //never thrown
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* The place where the message came from. Used by ChatHandlers to know which
|
||||
* SCMessages they can handle.
|
||||
* The place where the message came from.
|
||||
* Used by ChatHandlers to know which SCMessages they can handle.
|
||||
*
|
||||
* @see ChatHandler initiate the handler
|
||||
*/
|
||||
public enum Source {
|
||||
SPIGOT, DISCORD, PROXY
|
||||
}
|
||||
|
||||
}
|
||||
+15
-25
@@ -1,58 +1,48 @@
|
||||
package net.trueog.unionsog.chat.handlers;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.chat.handlers;
|
||||
|
||||
import github.scarsz.discordsrv.dependencies.jda.api.entities.TextChannel;
|
||||
import github.scarsz.discordsrv.util.DiscordUtil;
|
||||
import net.trueog.unionsog.Union;
|
||||
import net.trueog.unionsog.chat.ChatHandler;
|
||||
import net.trueog.unionsog.chat.SCMessage;
|
||||
import net.trueog.unionsog.hooks.discord.DiscordHook;
|
||||
import net.trueog.unionsog.utils.ChatUtils;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.chat.ChatHandler;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.hooks.discord.DiscordHook;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
import static net.trueog.unionsog.UnionPlayer.Channel.UNION;
|
||||
import static net.trueog.unionsog.chat.SCMessage.Source;
|
||||
import static net.trueog.unionsog.chat.SCMessage.Source.SPIGOT;
|
||||
import static net.trueog.unionsog.managers.SettingsManager.ConfigField.DISCORDCHAT_FORMAT_TO;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.CLAN;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DISCORDCHAT_FORMAT_TO;
|
||||
|
||||
/**
|
||||
* Handles delivering messages from {@link Source#SPIGOT} to
|
||||
* {@link Source#DISCORD}.
|
||||
* Handles delivering messages from {@link Source#SPIGOT} to {@link Source#DISCORD}.
|
||||
*/
|
||||
public class DiscordChatHandler implements ChatHandler {
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull SCMessage message) {
|
||||
|
||||
if (message.getChannel() != UNION) {
|
||||
|
||||
if (message.getChannel() != CLAN) {
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
String format = settingsManager.getString(DISCORDCHAT_FORMAT_TO);
|
||||
String formattedMessage = ChatUtils.stripColors(chatManager.parseChatFormat(format, message));
|
||||
|
||||
Union union = message.getSender().getUnion();
|
||||
if (union == null) {
|
||||
|
||||
Clan clan = message.getSender().getClan();
|
||||
if (clan == null) {
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
DiscordHook discordHook = Objects.requireNonNull(chatManager.getDiscordHook(), "DiscordHook cannot be null");
|
||||
Optional<TextChannel> channel = discordHook.getCachedChannel(union.getTag());
|
||||
Optional<TextChannel> channel = discordHook.getCachedChannel(clan.getTag());
|
||||
channel.ifPresent(textChannel -> DiscordUtil.sendMessage(textChannel, formattedMessage));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canHandle(SCMessage.Source source) {
|
||||
|
||||
return source == SPIGOT && chatManager.isDiscordHookEnabled();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.chat.handlers;
|
||||
|
||||
import net.sacredlabyrinth.phaed.simpleclans.chat.ChatHandler;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PERFORMANCE_USE_BUNGEECORD;
|
||||
|
||||
public class ProxyChatHandler implements ChatHandler {
|
||||
|
||||
@Override
|
||||
public void sendMessage(SCMessage message) {
|
||||
plugin.getProxyManager().sendMessage(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canHandle(Source source) {
|
||||
return source == Source.SPIGOT && settingsManager.is(PERFORMANCE_USE_BUNGEECORD);
|
||||
}
|
||||
}
|
||||
+14
-59
@@ -1,43 +1,36 @@
|
||||
package net.trueog.unionsog.chat.handlers;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.chat.handlers;
|
||||
|
||||
import net.trueog.unionsog.ChatBlock;
|
||||
import net.trueog.unionsog.UnionPlayer;
|
||||
import net.trueog.unionsog.chat.ChatHandler;
|
||||
import net.trueog.unionsog.chat.SCMessage;
|
||||
import net.trueog.unionsog.events.ChatEvent;
|
||||
import net.trueog.unionsog.utils.ChatUtils;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.chat.ChatHandler;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.events.ChatEvent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import static net.trueog.unionsog.chat.SCMessage.Source.*;
|
||||
import static net.trueog.unionsog.managers.SettingsManager.ConfigField;
|
||||
import static net.trueog.unionsog.managers.SettingsManager.ConfigField.PERFORMANCE_USE_BUNGEECORD;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.*;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PERFORMANCE_USE_BUNGEECORD;
|
||||
import static org.bukkit.Bukkit.getPluginManager;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class SpigotChatHandler implements ChatHandler {
|
||||
|
||||
@Override
|
||||
public void sendMessage(SCMessage message) {
|
||||
|
||||
/*
|
||||
* TODO: Make it async, change Type to Channel in 3.0
|
||||
*/
|
||||
TODO: Make it async, change Type to Channel in 3.0
|
||||
*/
|
||||
new BukkitRunnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
ChatEvent event = new ChatEvent(message.getContent(), message.getSender(), message.getReceivers(),
|
||||
ChatEvent.Type.valueOf(message.getChannel().name()));
|
||||
|
||||
getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
message.setContent(stripColorsAndFormatsPerPermission(message.getSender(), event.getMessage()));
|
||||
message.setContent(event.getMessage());
|
||||
|
||||
ConfigField configField = ConfigField.valueOf(String.format("%sCHAT_FORMAT",
|
||||
message.getSource() == DISCORD ? "DISCORD" : message.getChannel()));
|
||||
@@ -47,54 +40,16 @@ public class SpigotChatHandler implements ChatHandler {
|
||||
|
||||
plugin.getLogger().info(ChatUtils.stripColors(formattedMessage));
|
||||
|
||||
for (UnionPlayer cp : message.getReceivers()) {
|
||||
|
||||
for (ClanPlayer cp : message.getReceivers()) {
|
||||
ChatBlock.sendMessage(cp, formattedMessage);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}.runTask(plugin);
|
||||
|
||||
}
|
||||
|
||||
private String stripColorsAndFormatsPerPermission(UnionPlayer sender, String message) {
|
||||
|
||||
if (!permissionsManager.has(sender.toPlayer(), "unionsog.member.chat.color")) {
|
||||
|
||||
message = stripColors(message);
|
||||
|
||||
}
|
||||
|
||||
if (!permissionsManager.has(sender.toPlayer(), "unionsog.member.chat.format")) {
|
||||
|
||||
message = stripFormats(message);
|
||||
|
||||
}
|
||||
|
||||
return message;
|
||||
|
||||
}
|
||||
|
||||
private String stripColors(String message) {
|
||||
|
||||
return message.replaceAll("[§&][0-9a-fA-FxX]", "");
|
||||
|
||||
}
|
||||
|
||||
private String stripFormats(String message) {
|
||||
|
||||
return message.replaceAll("[§&][k-orK-OR]", "");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canHandle(SCMessage.Source source) {
|
||||
|
||||
return source == SPIGOT || (source == PROXY && settingsManager.is(PERFORMANCE_USE_BUNGEECORD))
|
||||
|| (source == DISCORD && chatManager.isDiscordHookEnabled());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.chat.handlers;
|
||||
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.chat.ChatHandler;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.*;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PERFORMANCE_USE_BUNGEECORD;
|
||||
|
||||
/**
|
||||
* Handles delivering messages from {@link Source#SPIGOT} or {@link Source#DISCORD} to internal spy chat.
|
||||
*/
|
||||
public class SpyChatHandler implements ChatHandler {
|
||||
|
||||
@Override
|
||||
public void sendMessage(SCMessage message) {
|
||||
ConfigField formatField = ConfigField.valueOf(String.format("%sCHAT_SPYFORMAT",
|
||||
message.getSource() == DISCORD ? "DISCORD" : message.getChannel()));
|
||||
String format = settingsManager.getString(formatField);
|
||||
message.setContent(ChatUtils.stripColors(message.getContent()));
|
||||
String formattedMessage = chatManager.parseChatFormat(format, message);
|
||||
|
||||
List<ClanPlayer> onlineSpies = getOnlineSpies();
|
||||
|
||||
// Don't send a duplicate message if a spy is inside the clan
|
||||
onlineSpies.removeAll(message.getReceivers());
|
||||
onlineSpies.forEach(receiver -> ChatBlock.sendMessage(receiver, formattedMessage));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canHandle(SCMessage.Source source) {
|
||||
return source == SPIGOT || (source == PROXY && settingsManager.is(PERFORMANCE_USE_BUNGEECORD))
|
||||
|| (source == DISCORD && chatManager.isDiscordHookEnabled());
|
||||
}
|
||||
|
||||
private List<ClanPlayer> getOnlineSpies() {
|
||||
return Bukkit.getOnlinePlayers().stream().
|
||||
filter(Objects::nonNull).
|
||||
filter(player -> plugin.getPermissionsManager().has(player, "simpleclans.admin.all-seeing-eye")).
|
||||
map(player -> plugin.getClanManager().getCreateClanPlayer(player.getUniqueId())).
|
||||
filter(Objects::nonNull).
|
||||
filter(clanPlayer -> !clanPlayer.isMuted()).
|
||||
collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands;
|
||||
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class ClanInput {
|
||||
|
||||
private final Clan clan;
|
||||
|
||||
public ClanInput(@NotNull Clan clan) {
|
||||
this.clan = clan;
|
||||
}
|
||||
|
||||
public Clan getClan() {
|
||||
return clan;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
ClanInput clanInput = (ClanInput) o;
|
||||
return clan.equals(clanInput.clan);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(clan);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands;
|
||||
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class ClanPlayerInput {
|
||||
|
||||
private final ClanPlayer clanPlayer;
|
||||
|
||||
public ClanPlayerInput(@NotNull ClanPlayer clanPlayer) {
|
||||
this.clanPlayer = clanPlayer;
|
||||
}
|
||||
|
||||
public ClanPlayer getClanPlayer() {
|
||||
return clanPlayer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
ClanPlayerInput that = (ClanPlayerInput) o;
|
||||
return clanPlayer.equals(that.clanPlayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(clanPlayer);
|
||||
}
|
||||
}
|
||||
+71
-195
@@ -1,4 +1,4 @@
|
||||
package net.trueog.unionsog.commands;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.BukkitLocales;
|
||||
@@ -6,20 +6,20 @@ import co.aikar.commands.CommandIssuer;
|
||||
import co.aikar.commands.PaperCommandManager;
|
||||
import co.aikar.locales.MessageKey;
|
||||
import co.aikar.locales.MessageKeyProvider;
|
||||
import net.trueog.unionsog.UnionPlayer;
|
||||
import net.trueog.unionsog.Helper;
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.trueog.unionsog.commands.completions.AbstractAsyncCompletion;
|
||||
import net.trueog.unionsog.commands.completions.AbstractCompletion;
|
||||
import net.trueog.unionsog.commands.completions.AbstractStaticCompletion;
|
||||
import net.trueog.unionsog.commands.completions.AbstractSyncCompletion;
|
||||
import net.trueog.unionsog.commands.conditions.AbstractCommandCondition;
|
||||
import net.trueog.unionsog.commands.conditions.AbstractCondition;
|
||||
import net.trueog.unionsog.commands.conditions.AbstractParameterCondition;
|
||||
import net.trueog.unionsog.commands.contexts.AbstractContextResolver;
|
||||
import net.trueog.unionsog.commands.contexts.AbstractInputOnlyContextResolver;
|
||||
import net.trueog.unionsog.commands.contexts.AbstractIssuerOnlyContextResolver;
|
||||
import net.trueog.unionsog.managers.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Helper;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.completions.AbstractAsyncCompletion;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.completions.AbstractCompletion;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.completions.AbstractStaticCompletion;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.completions.AbstractSyncCompletion;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.conditions.AbstractCommandCondition;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.conditions.AbstractCondition;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.conditions.AbstractParameterCondition;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.contexts.AbstractContextResolver;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.contexts.AbstractInputOnlyContextResolver;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.contexts.AbstractIssuerOnlyContextResolver;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -27,327 +27,203 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import static net.trueog.unionsog.UnionsOG.lang;
|
||||
import static net.trueog.unionsog.UnionsOG.optionalLang;
|
||||
import static net.trueog.unionsog.managers.SettingsManager.ConfigField.*;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.optionalLang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
|
||||
|
||||
public class SCCommandManager extends PaperCommandManager {
|
||||
|
||||
private final UnionsOG plugin;
|
||||
private final SimpleClans plugin;
|
||||
private static final List<String> SUBCOMMANDS;
|
||||
private static final List<String> COMPLETIONS;
|
||||
|
||||
public SCCommandManager(@NotNull UnionsOG plugin) {
|
||||
|
||||
public SCCommandManager(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
this.plugin = plugin;
|
||||
configure();
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void configure() {
|
||||
|
||||
enableUnstableAPI("help");
|
||||
registerDependencies();
|
||||
addReplacements();
|
||||
addCommandReplacements();
|
||||
registerContexts();
|
||||
registerCommands();
|
||||
registerConditions();
|
||||
registerCompletions();
|
||||
defaultHelpPerPage = plugin.getSettingsManager().getInt(HELP_SIZE);
|
||||
|
||||
}
|
||||
|
||||
private void registerDependencies() {
|
||||
|
||||
registerDependency(UnionManager.class, plugin.getUnionManager());
|
||||
registerDependency(ClanManager.class, plugin.getClanManager());
|
||||
registerDependency(SettingsManager.class, plugin.getSettingsManager());
|
||||
registerDependency(StorageManager.class, plugin.getStorageManager());
|
||||
registerDependency(PermissionsManager.class, plugin.getPermissionsManager());
|
||||
registerDependency(RequestManager.class, plugin.getRequestManager());
|
||||
registerDependency(ProtectionManager.class, plugin.getProtectionManager());
|
||||
registerDependency(ChatManager.class, plugin.getChatManager());
|
||||
registerDependency(ProposalManager.class, plugin.getProposalManager());
|
||||
|
||||
}
|
||||
|
||||
private void registerCompletions() {
|
||||
|
||||
Set<Class<? extends AbstractCompletion>> completions = Helper
|
||||
.getSubTypesOf("net.trueog.unionsog.commands.completions", AbstractCompletion.class);
|
||||
Set<Class<? extends AbstractCompletion>> completions =
|
||||
Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.commands.completions",
|
||||
AbstractCompletion.class);
|
||||
plugin.getLogger().info(String.format("Registering %d command completions...", completions.size()));
|
||||
for (Class<? extends AbstractCompletion> c : completions) {
|
||||
|
||||
if (Modifier.isAbstract(c.getModifiers())) {
|
||||
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
AbstractCompletion obj = c.getConstructor(UnionsOG.class).newInstance(plugin);
|
||||
AbstractCompletion obj = c.getConstructor(SimpleClans.class).newInstance(plugin);
|
||||
if (obj instanceof AbstractStaticCompletion) {
|
||||
|
||||
getCommandCompletions().registerStaticCompletion(obj.getId(),
|
||||
((AbstractStaticCompletion) obj).getCompletions());
|
||||
|
||||
}
|
||||
|
||||
if (obj instanceof AbstractAsyncCompletion) {
|
||||
|
||||
getCommandCompletions().registerAsyncCompletion(obj.getId(), (AbstractAsyncCompletion) obj);
|
||||
|
||||
}
|
||||
|
||||
if (obj instanceof AbstractSyncCompletion) {
|
||||
|
||||
getCommandCompletions().registerCompletion(obj.getId(), ((AbstractSyncCompletion) obj));
|
||||
|
||||
}
|
||||
|
||||
} catch (Exception ex) {
|
||||
|
||||
plugin.getLogger().log(Level.SEVERE, "Error registering completion", ex);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void registerConditions() {
|
||||
|
||||
Set<Class<? extends AbstractCondition>> conditions = Helper
|
||||
.getSubTypesOf("net.trueog.unionsog.commands.conditions", AbstractCondition.class);
|
||||
Set<Class<? extends AbstractCondition>> conditions =
|
||||
Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.commands.conditions",
|
||||
AbstractCondition.class);
|
||||
plugin.getLogger().info(String.format("Registering %d command conditions...", conditions.size()));
|
||||
for (Class<? extends AbstractCondition> c : conditions) {
|
||||
|
||||
if (Modifier.isAbstract(c.getModifiers())) {
|
||||
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
AbstractCondition obj = c.getConstructor(UnionsOG.class).newInstance(plugin);
|
||||
AbstractCondition obj = c.getConstructor(SimpleClans.class).newInstance(plugin);
|
||||
if (obj instanceof AbstractParameterCondition) {
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
AbstractParameterCondition condition = ((AbstractParameterCondition<?>) obj);
|
||||
AbstractParameterCondition condition = (AbstractParameterCondition) obj;
|
||||
getCommandConditions().addCondition(condition.getType(), condition.getId(), condition);
|
||||
|
||||
}
|
||||
|
||||
if (obj instanceof AbstractCommandCondition) {
|
||||
|
||||
AbstractCommandCondition condition = ((AbstractCommandCondition) obj);
|
||||
AbstractCommandCondition condition = (AbstractCommandCondition) obj;
|
||||
getCommandConditions().addCondition(condition.getId(), condition);
|
||||
|
||||
}
|
||||
|
||||
} catch (Exception ex) {
|
||||
|
||||
plugin.getLogger().log(Level.SEVERE, "Error registering condition", ex);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||
private void registerContexts() {
|
||||
|
||||
Set<Class<? extends AbstractContextResolver>> resolvers = Helper
|
||||
.getSubTypesOf("net.trueog.unionsog.commands.contexts", AbstractContextResolver.class);
|
||||
Set<Class<? extends AbstractContextResolver>> resolvers =
|
||||
Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.commands.contexts",
|
||||
AbstractContextResolver.class);
|
||||
plugin.getLogger().info(String.format("Registering %d command contexts...", resolvers.size()));
|
||||
for (Class<? extends AbstractContextResolver> cr : resolvers) {
|
||||
|
||||
if (Modifier.isAbstract(cr.getModifiers())) {
|
||||
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
AbstractContextResolver obj = cr.getConstructor(UnionsOG.class).newInstance(plugin);
|
||||
AbstractContextResolver obj = cr.getConstructor(SimpleClans.class).newInstance(plugin);
|
||||
if (obj instanceof AbstractIssuerOnlyContextResolver) {
|
||||
|
||||
getCommandContexts().registerIssuerOnlyContext(obj.getType(),
|
||||
((AbstractIssuerOnlyContextResolver) obj));
|
||||
|
||||
getCommandContexts().registerIssuerOnlyContext(obj.getType(), ((AbstractIssuerOnlyContextResolver) obj));
|
||||
}
|
||||
|
||||
if (obj instanceof AbstractInputOnlyContextResolver) {
|
||||
|
||||
getCommandContexts().registerContext(obj.getType(), ((AbstractInputOnlyContextResolver<?>) obj));
|
||||
|
||||
}
|
||||
|
||||
} catch (Exception ex) {
|
||||
|
||||
plugin.getLogger().log(Level.SEVERE, "Error registering context", ex);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void registerCommands() {
|
||||
|
||||
boolean forceCommandPriority = plugin.getSettingsManager().is(COMMANDS_FORCE_PRIORITY);
|
||||
Set<Class<? extends BaseCommand>> commands = Helper.getSubTypesOf("net.trueog.unionsog.commands",
|
||||
BaseCommand.class);
|
||||
Set<Class<? extends BaseCommand>> commands = Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.commands", BaseCommand.class);
|
||||
plugin.getLogger().info(String.format("Registering %d base commands...", commands.size()));
|
||||
for (Class<? extends BaseCommand> c : commands) {
|
||||
|
||||
// ACF already registers nested classes
|
||||
//ACF already registers nested classes
|
||||
if (c.isMemberClass() || Modifier.isStatic(c.getModifiers())) {
|
||||
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
// TODO: start - remove with UnionBankZeroMigration once union bank accounts
|
||||
// exist. Union banks hold no real value yet, so their commands stay
|
||||
// unregistered.
|
||||
if (c == net.trueog.unionsog.commands.union.BankCommand.class
|
||||
|| c == net.trueog.unionsog.commands.staff.BankCommand.class)
|
||||
{
|
||||
|
||||
continue;
|
||||
|
||||
}
|
||||
// TODO: end
|
||||
|
||||
try {
|
||||
|
||||
BaseCommand baseCommand = c.getConstructor().newInstance();
|
||||
registerCommand(baseCommand, forceCommandPriority);
|
||||
|
||||
} catch (Exception ex) {
|
||||
|
||||
// A failure here drops every subcommand of the class, so name it.
|
||||
plugin.getLogger().log(Level.SEVERE, "Error registering command class " + c.getName(), ex);
|
||||
|
||||
plugin.getLogger().log(Level.SEVERE, "Error registering command", ex);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void addReplacements() {
|
||||
|
||||
private void addCommandReplacements() {
|
||||
SettingsManager sm = plugin.getSettingsManager();
|
||||
getCommandReplacements().addReplacements("basic_conditions", "not_blacklisted|not_banned", "union",
|
||||
getUnionCommandAliases(sm), "deny", sm.getString(COMMANDS_DENY) + "|deny", "more",
|
||||
sm.getString(COMMANDS_MORE), "ally_chat", sm.getString(COMMANDS_ALLY), "accept",
|
||||
sm.getString(COMMANDS_ACCEPT) + "|accept", "union_chat", sm.getString(COMMANDS_UNION_CHAT));
|
||||
|
||||
SUBCOMMANDS.forEach(s -> processReplacement(s, "", ".command", true));
|
||||
COMPLETIONS.forEach(s -> processReplacement(s, "compl:", ".completion", false));
|
||||
getCommandReplacements().addReplacements(
|
||||
"basic_conditions", "not_blacklisted|not_banned",
|
||||
"clan", sm.getString(COMMANDS_CLAN),
|
||||
"deny", sm.getString(COMMANDS_DENY) + "|deny",
|
||||
"more", sm.getString(COMMANDS_MORE),
|
||||
"ally_chat", sm.getString(COMMANDS_ALLY),
|
||||
"accept", sm.getString(COMMANDS_ACCEPT) + "|accept",
|
||||
"clan_chat", sm.getString(COMMANDS_CLAN_CHAT)
|
||||
);
|
||||
|
||||
SUBCOMMANDS.forEach(s -> {
|
||||
String command = optionalLang(s + ".command", (ClanPlayer) null);
|
||||
if (command == null) {
|
||||
command = s;
|
||||
}
|
||||
command = command.replace(" ", "");
|
||||
String replacement = command.equals(s) ? s : command + "|" + s;
|
||||
getCommandReplacements().addReplacement(s, replacement);
|
||||
});
|
||||
}
|
||||
|
||||
private String getUnionCommandAliases(SettingsManager sm) {
|
||||
|
||||
Set<String> aliases = new LinkedHashSet<>();
|
||||
aliases.add(sm.getString(COMMANDS_UNION));
|
||||
aliases.add("union");
|
||||
aliases.add("unions");
|
||||
// clan and clans are not aliases; GroupAliasCommand redirects them.
|
||||
return String.join("|", aliases);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public BukkitLocales getLocales() {
|
||||
|
||||
if (this.locales == null) {
|
||||
|
||||
this.locales = new BukkitLocales(this) {
|
||||
|
||||
@Nullable
|
||||
private Player getPlayer(CommandIssuer issuer) {
|
||||
|
||||
if (issuer != null) {
|
||||
|
||||
return Bukkit.getPlayer(issuer.getUniqueId());
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String getOptionalMessage(CommandIssuer issuer, MessageKey key) {
|
||||
|
||||
return optionalLang(key.getKey(), getPlayer(issuer));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public String getMessage(CommandIssuer issuer, MessageKeyProvider key) {
|
||||
|
||||
return lang(key.getMessageKey().getKey(), getPlayer(issuer));
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// this.locales.loadLanguages();
|
||||
//this.locales.loadLanguages();
|
||||
}
|
||||
|
||||
return this.locales;
|
||||
|
||||
}
|
||||
|
||||
private void processReplacement(String key, String prefix, String suffix, boolean hasFallback) {
|
||||
|
||||
String replacement = optionalLang(key + suffix, (UnionPlayer) null);
|
||||
if (replacement == null) {
|
||||
|
||||
replacement = key;
|
||||
|
||||
}
|
||||
|
||||
replacement = replacement.replace(" ", "");
|
||||
if (hasFallback) {
|
||||
|
||||
replacement = replacement + "|" + key;
|
||||
|
||||
}
|
||||
|
||||
getCommandReplacements().addReplacement(prefix + key, replacement);
|
||||
|
||||
}
|
||||
|
||||
static {
|
||||
|
||||
SUBCOMMANDS = Arrays.asList("setbanner", "resetkdr", "place", "home", "war", "regroup", "mostkilled", "kills",
|
||||
"globalff", "reload", "unban", "ban", "disband", "resign", "unionff", "pvp", "on", "off", "vote", "yes",
|
||||
"no", "purge", "bank", "kick", "invite", "toggle", "modtag", "bb", "display", "clear", "rival", "ally",
|
||||
"add", "remove", "stats", "coords", "vitals", "rivalries", "alliances", "leaderboard", "allow", "block",
|
||||
"auto", "check", "delete", "me", "tag", "deposit", "withdraw", "set", "status", "tp", "all", "everyone",
|
||||
SUBCOMMANDS = Arrays.asList("setbanner", "resetkdr", "place", "rank", "home", "war", "regroup",
|
||||
"mostkilled", "kills", "globalff", "reload", "unban", "ban", "verify", "disband", "resign", "ff",
|
||||
"clanff", "demote", "promote", "untrust", "trust", "purge", "fee", "bank", "kick", "invite", "toggle",
|
||||
"modtag", "bb", "clear", "rival", "ally", "add", "remove", "stats", "coords", "vitals", "rivalries",
|
||||
"alliances", "leaderboard", "allow", "block", "auto", "check", "assign", "unassign", "delete", "me",
|
||||
"setdisplayname", "permissions", "tag", "deposit", "withdraw", "set", "status", "tp", "all", "everyone",
|
||||
"lookup", "roster", "profile", "list", "create", "description", "start", "end", "admin", "help", "mod",
|
||||
"land", "break", "interact", "place_block", "damage", "interact_entity", "container", "permanent",
|
||||
"take", "give", "join", "leave", "mute", "confirm", "balance", "discord", "rename", "locale", "color");
|
||||
|
||||
COMPLETIONS = Arrays.asList("tag", "name");
|
||||
|
||||
"setdefault", "removedefault", "land", "break", "interact", "place_block", "damage", "interact_entity",
|
||||
"container", "permanent", "take", "give", "join", "leave", "mute", "confirm", "balance", "discord");
|
||||
}
|
||||
|
||||
}
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.ALLY;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.NONE;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT;
|
||||
|
||||
@CommandAlias("%ally_chat")
|
||||
@Description("{@@command.description.ally}")
|
||||
@CommandPermission("simpleclans.member.ally")
|
||||
@Conditions("%basic_conditions|clan_member|can_chat:type=ALLY|rank:name=ALLY_CHAT")
|
||||
public class AllyChatCommand extends BaseCommand {
|
||||
|
||||
@Dependency
|
||||
private ChatManager chatManager;
|
||||
@Dependency
|
||||
private SettingsManager settingsManager;
|
||||
@Dependency
|
||||
private StorageManager storageManager;
|
||||
|
||||
@Default
|
||||
@HelpSearchTags("chat")
|
||||
public void sendMessage(ClanPlayer cp, @Name("message") String message) {
|
||||
chatManager.processChat(SPIGOT, ALLY, cp, message);
|
||||
}
|
||||
|
||||
@Subcommand("%join")
|
||||
public void join(ClanPlayer clanPlayer) {
|
||||
if (clanPlayer.getChannel() == ALLY) {
|
||||
ChatBlock.sendMessage(clanPlayer, lang("already.joined.ally.chat"));
|
||||
return;
|
||||
}
|
||||
|
||||
clanPlayer.setChannel(ALLY);
|
||||
storageManager.updateClanPlayer(clanPlayer);
|
||||
ChatBlock.sendMessage(clanPlayer, lang("joined.ally.chat"));
|
||||
}
|
||||
|
||||
@Subcommand("%leave")
|
||||
public void leave(ClanPlayer clanPlayer) {
|
||||
if (clanPlayer.getChannel() == ALLY) {
|
||||
clanPlayer.setChannel(NONE);
|
||||
storageManager.updateClanPlayer(clanPlayer);
|
||||
ChatBlock.sendMessage(clanPlayer, lang("left.ally.chat", clanPlayer));
|
||||
} else {
|
||||
ChatBlock.sendMessage(clanPlayer, lang("chat.didnt.join", clanPlayer));
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%mute")
|
||||
public void mute(ClanPlayer clanPlayer) {
|
||||
if (!clanPlayer.isMutedAlly()) {
|
||||
clanPlayer.mute(ALLY, true);
|
||||
ChatBlock.sendMessage(clanPlayer, lang("muted.ally.chat", clanPlayer));
|
||||
} else {
|
||||
clanPlayer.mute(ALLY, false);
|
||||
ChatBlock.sendMessage(clanPlayer, lang("unmuted.ally.chat", clanPlayer));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.EconomyResponse;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.events.BankDepositEvent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.events.BankWithdrawEvent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankOperator;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent.Cause.REVERT;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent.Cause.COMMAND;
|
||||
import static org.bukkit.ChatColor.AQUA;
|
||||
import static org.bukkit.ChatColor.RED;
|
||||
|
||||
@CommandAlias("%clan")
|
||||
@Subcommand("%bank")
|
||||
@Conditions("%basic_conditions|economy|verified")
|
||||
public class BankCommand extends BaseCommand {
|
||||
@Dependency
|
||||
private PermissionsManager permissions;
|
||||
|
||||
@Subcommand("%status")
|
||||
@CommandPermission("simpleclans.member.bank")
|
||||
@Conditions("rank:name=BANK_BALANCE")
|
||||
@Description("{@@command.description.bank.status}")
|
||||
public void bankStatus(Player player, Clan clan) {
|
||||
player.sendMessage(AQUA + lang("clan.balance", player, clan.getBalance()));
|
||||
}
|
||||
|
||||
@Subcommand("%withdraw %all")
|
||||
@CommandPermission("simpleclans.member.bank")
|
||||
@Conditions("rank:name=BANK_WITHDRAW")
|
||||
@Description("{@@command.description.bank.withdraw.all}")
|
||||
public void bankWithdraw(Player player, Clan clan) {
|
||||
processWithdraw(player, clan, clan.getBalance());
|
||||
}
|
||||
|
||||
@Subcommand("%withdraw")
|
||||
@CommandPermission("simpleclans.member.bank")
|
||||
@Conditions("rank:name=BANK_WITHDRAW")
|
||||
@Description("{@@command.description.bank.withdraw.amount}")
|
||||
public void bankWithdraw(Player player, Clan clan, double amount) {
|
||||
processWithdraw(player, clan, amount);
|
||||
}
|
||||
|
||||
private void processWithdraw(Player player, Clan clan, double amount) {
|
||||
if (!clan.isAllowWithdraw()) {
|
||||
String message = getCurrentCommandManager().getCommandReplacements()
|
||||
.replace(lang("withdraw.not.allowed", player));
|
||||
ChatBlock.sendMessage(player, RED + message);
|
||||
return;
|
||||
}
|
||||
amount = Math.abs(amount);
|
||||
/*
|
||||
TODO: Remove at SimpleClans 3.0
|
||||
*/
|
||||
BankWithdrawEvent event = new BankWithdrawEvent(player, clan, amount);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* ——————————————————————————————————
|
||||
*/
|
||||
BankOperator operator = new BankOperator(player, permissions.playerGetMoney(player));
|
||||
switch (clan.withdraw(operator, COMMAND, amount)) {
|
||||
case SUCCESS:
|
||||
if (permissions.playerGrantMoney(player, amount)) {
|
||||
player.sendMessage(AQUA + lang("player.clan.withdraw", player, amount));
|
||||
clan.addBb(player.getName(), AQUA + lang("bb.clan.withdraw", amount, player.getName()));
|
||||
} else {
|
||||
clan.setBalance(operator, REVERT, BankLogger.Operation.WITHDRAW, clan.getBalance() + amount);
|
||||
}
|
||||
break;
|
||||
case NOT_ENOUGH_BALANCE:
|
||||
player.sendMessage(lang("clan.bank.not.enough.money", player));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%deposit %all")
|
||||
@CommandPermission("simpleclans.member.bank")
|
||||
@Conditions("rank:name=BANK_DEPOSIT")
|
||||
@Description("{@@command.description.bank.deposit.all}")
|
||||
public void bankDeposit(Player player, Clan clan) {
|
||||
processDeposit(player, clan, permissions.playerGetMoney(player));
|
||||
}
|
||||
|
||||
@Subcommand("%deposit")
|
||||
@CommandPermission("simpleclans.member.bank")
|
||||
@Conditions("rank:name=BANK_DEPOSIT")
|
||||
@Description("{@@command.description.bank.deposit.amount}")
|
||||
public void bankDeposit(Player player, Clan clan, double amount) {
|
||||
processDeposit(player, clan, amount);
|
||||
}
|
||||
|
||||
private void processDeposit(Player player, Clan clan, double amount) {
|
||||
if (!clan.isAllowDeposit()) {
|
||||
String message = getCurrentCommandManager().getCommandReplacements()
|
||||
.replace(lang("deposit.not.allowed", player));
|
||||
ChatBlock.sendMessage(player, RED + message);
|
||||
return;
|
||||
}
|
||||
amount = Math.abs(amount);
|
||||
|
||||
/*
|
||||
TODO: Remove at SimpleClans 3.0
|
||||
*/
|
||||
BankDepositEvent event = new BankDepositEvent(player, clan, amount);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* ——————————————————————————————————
|
||||
*/
|
||||
|
||||
if (!permissions.playerHasMoney(player, amount)) {
|
||||
player.sendMessage(AQUA + lang("not.sufficient.money", player, amount));
|
||||
return;
|
||||
}
|
||||
BankOperator operator = new BankOperator(player, permissions.playerGetMoney(player));
|
||||
EconomyResponse response = clan.deposit(operator, COMMAND, amount);
|
||||
if (response == EconomyResponse.SUCCESS) {
|
||||
if (permissions.playerChargeMoney(player, amount)) {
|
||||
player.sendMessage(AQUA + lang("player.clan.deposit", player, amount));
|
||||
clan.addBb(player.getName(), AQUA + lang("bb.clan.deposit", amount, player.getName()));
|
||||
} else {
|
||||
//Reverts the deposit if something went wrong with Vault
|
||||
clan.setBalance(operator, REVERT, BankLogger.Operation.DEPOSIT, clan.getBalance() - amount);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static org.bukkit.ChatColor.*;
|
||||
|
||||
@CommandAlias("%clan")
|
||||
@Conditions("%basic_conditions|verified")
|
||||
public class BbCommand extends BaseCommand {
|
||||
|
||||
@Dependency
|
||||
private ClanManager cm;
|
||||
@Dependency
|
||||
private StorageManager storage;
|
||||
|
||||
@Subcommand("%bb")
|
||||
@CommandPermission("simpleclans.member.bb")
|
||||
@Description("{@@command.description.bb.display}")
|
||||
public void display(Player sender) {
|
||||
Clan clan = Objects.requireNonNull(cm.getClanByPlayerUniqueId(sender.getUniqueId()));
|
||||
clan.displayBb(sender);
|
||||
}
|
||||
|
||||
@Subcommand("%bb %clear")
|
||||
@CommandPermission("simpleclans.leader.bb-clear")
|
||||
@Conditions("rank:name=BB_CLEAR")
|
||||
@Description("{@@command.description.bb.clear}")
|
||||
public void clear(Player player) {
|
||||
Clan clan = Objects.requireNonNull(cm.getClanByPlayerUniqueId(player.getUniqueId()));
|
||||
clan.clearBb();
|
||||
ChatBlock.sendMessage(player, RED + lang("cleared.bb", player));
|
||||
}
|
||||
|
||||
@Subcommand("%bb %add")
|
||||
@CommandPermission("simpleclans.member.bb-add")
|
||||
@Conditions("rank:name=BB_ADD")
|
||||
@Description("{@@command.description.bb.post}")
|
||||
public void postMessage(Player player, @Name("message") String msg) {
|
||||
Clan clan = Objects.requireNonNull(cm.getClanByPlayerUniqueId(player.getUniqueId()));
|
||||
clan.addBb(player.getName(), AQUA + player.getName() + ": " + WHITE + msg);
|
||||
storage.updateClan(clan);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.CLAN;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.NONE;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT;
|
||||
|
||||
@CommandAlias("%clan_chat")
|
||||
@Conditions("%basic_conditions|clan_member|can_chat:type=CLAN")
|
||||
@CommandPermission("simpleclans.member.chat")
|
||||
@Description("{@@command.description.chat}")
|
||||
public class ChatCommand extends BaseCommand {
|
||||
|
||||
@Dependency
|
||||
private ChatManager chatManager;
|
||||
@Dependency
|
||||
private StorageManager storageManager;
|
||||
|
||||
@Default
|
||||
@HelpSearchTags("chat")
|
||||
public void sendMessage(ClanPlayer cp, @Name("message") String message) {
|
||||
chatManager.processChat(SPIGOT, CLAN, cp, message);
|
||||
}
|
||||
|
||||
@Subcommand("%join")
|
||||
public void join(ClanPlayer clanPlayer) {
|
||||
if (clanPlayer.getChannel() == CLAN) {
|
||||
ChatBlock.sendMessage(clanPlayer, lang("already.joined.clan.chat"));
|
||||
return;
|
||||
}
|
||||
|
||||
clanPlayer.setChannel(CLAN);
|
||||
storageManager.updateClanPlayer(clanPlayer);
|
||||
ChatBlock.sendMessage(clanPlayer, lang("joined.clan.chat"));
|
||||
}
|
||||
|
||||
@Subcommand("%leave")
|
||||
public void leave(ClanPlayer clanPlayer) {
|
||||
if (clanPlayer.getChannel() == CLAN) {
|
||||
clanPlayer.setChannel(NONE);
|
||||
storageManager.updateClanPlayer(clanPlayer);
|
||||
ChatBlock.sendMessage(clanPlayer, lang("left.clan.chat", clanPlayer));
|
||||
} else {
|
||||
ChatBlock.sendMessage(clanPlayer, lang("chat.didnt.join", clanPlayer));
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%mute")
|
||||
public void mute(ClanPlayer clanPlayer) {
|
||||
if (!clanPlayer.isMuted()) {
|
||||
clanPlayer.mute(CLAN, true);
|
||||
ChatBlock.sendMessage(clanPlayer, lang("muted.clan.chat", clanPlayer));
|
||||
} else {
|
||||
clanPlayer.mute(CLAN, false);
|
||||
ChatBlock.sendMessage(clanPlayer, lang("unmuted.clan.chat", clanPlayer));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,389 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanInput;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.conversation.ResignPrompt;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.conversation.SCConversation;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.events.TagChangeEvent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.TagValidator;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
|
||||
import static org.bukkit.ChatColor.AQUA;
|
||||
import static org.bukkit.ChatColor.RED;
|
||||
|
||||
@CommandAlias("%clan")
|
||||
@Conditions("%basic_conditions")
|
||||
public class ClanCommands extends BaseCommand {
|
||||
@Dependency
|
||||
private SimpleClans plugin;
|
||||
@Dependency
|
||||
private SettingsManager settings;
|
||||
@Dependency
|
||||
private ClanManager cm;
|
||||
@Dependency
|
||||
private StorageManager storage;
|
||||
@Dependency
|
||||
private PermissionsManager permissions;
|
||||
@Dependency
|
||||
private RequestManager requestManager;
|
||||
@Dependency
|
||||
private ProtectionManager protectionManager;
|
||||
|
||||
@Subcommand("%war %start")
|
||||
@CommandPermission("simpleclans.leader.war")
|
||||
@Conditions("verified|rank:name=WAR_START")
|
||||
@Description("{@@command.description.war.start}")
|
||||
@CommandCompletion("@rivals")
|
||||
public void startWar(Player player, ClanPlayer requester, Clan requestClan, @Conditions("can_war_target") @Name("clan") ClanInput targetClanInput) {
|
||||
Clan targetClan = targetClanInput.getClan();
|
||||
|
||||
List<ClanPlayer> onlineLeaders = Helper.stripOffLinePlayers(requestClan.getLeaders());
|
||||
|
||||
if (settings.is(WAR_START_REQUEST_ENABLED)) {
|
||||
if (!onlineLeaders.isEmpty()) {
|
||||
requestManager.addWarStartRequest(requester, targetClan, requestClan);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("leaders.have.been.asked.to.accept.the.war.request",
|
||||
player, targetClan.getName()));
|
||||
} else {
|
||||
ChatBlock.sendMessage(player, RED + lang("at.least.one.leader.accept.the.alliance", player));
|
||||
}
|
||||
} else {
|
||||
protectionManager.addWar(requester, requestClan, targetClan);
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%war %end")
|
||||
@CommandPermission("simpleclans.leader.war")
|
||||
@Conditions("verified|rank:name=WAR_END")
|
||||
@Description("{@@command.description.war.end}")
|
||||
@CommandCompletion("@warring_clans")
|
||||
public void endWar(ClanPlayer cp, Clan issuerClan, @Name("clan") ClanInput other) {
|
||||
Clan war = other.getClan();
|
||||
if (issuerClan.isWarring(war.getTag())) {
|
||||
requestManager.addWarEndRequest(cp, war, issuerClan);
|
||||
ChatBlock.sendMessage(cp, AQUA + lang("leaders.asked.to.end.rivalry", cp, war.getName()));
|
||||
} else {
|
||||
ChatBlock.sendMessage(cp, RED + lang("clans.not.at.war", cp));
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%modtag")
|
||||
@CommandPermission("simpleclans.leader.modtag")
|
||||
@Conditions("verified|rank:name=MODTAG")
|
||||
@Description("{@@command.description.modtag}")
|
||||
public void modtag(Player player, Clan clan, @Single @Name("tag") String tag) {
|
||||
TagChangeEvent event = new TagChangeEvent(player, clan, tag);
|
||||
plugin.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
tag = event.getNewTag();
|
||||
String cleanTag = Helper.cleanTag(tag);
|
||||
|
||||
TagValidator validator = new TagValidator(plugin, player, tag);
|
||||
if (validator.getErrorMessage() != null) {
|
||||
ChatBlock.sendMessage(player, validator.getErrorMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
if (!cleanTag.equals(clan.getTag())) {
|
||||
ChatBlock.sendMessage(player, RED + lang("you.can.only.modify.the.color.and.case.of.the.tag",
|
||||
player));
|
||||
return;
|
||||
}
|
||||
|
||||
clan.addBb(player.getName(), AQUA + lang("tag.changed.to.0", ChatUtils.parseColors(tag)));
|
||||
clan.changeClanTag(tag);
|
||||
cm.updateDisplayName(player);
|
||||
}
|
||||
|
||||
@Subcommand("%setbanner")
|
||||
@CommandPermission("simpleclans.leader.setbanner")
|
||||
@Conditions("verified|rank:name=SETBANNER")
|
||||
@Description("{@@command.description.setbanner}")
|
||||
public void setbanner(Player player, Clan clan) {
|
||||
@SuppressWarnings("deprecation")
|
||||
ItemStack hand = player.getItemInHand();
|
||||
if (!hand.getType().toString().contains("BANNER")) {
|
||||
ChatBlock.sendMessageKey(player, "you.must.hold.a.banner");
|
||||
return;
|
||||
}
|
||||
|
||||
clan.setBanner(hand);
|
||||
storage.updateClan(clan);
|
||||
ChatBlock.sendMessageKey(player, "you.changed.clan.banner");
|
||||
}
|
||||
|
||||
@Subcommand("%invite")
|
||||
@CommandPermission("simpleclans.leader.invite")
|
||||
@CommandCompletion("@non_members:ignore_vanished")
|
||||
@Conditions("rank:name=INVITE")
|
||||
@Description("{@@command.description.invite}")
|
||||
public void invite(Player sender, ClanPlayer cp, Clan clan,
|
||||
@Conditions("not_banned|not_in_clan|online:ignore_vanished") @Name("player") ClanPlayerInput invited) {
|
||||
if (!invited.getClanPlayer().isInviteEnabled()){
|
||||
ChatBlock.sendMessage(sender, RED + lang("invitedplayer.invite.off", sender));
|
||||
return;
|
||||
}
|
||||
Player invitedPlayer = invited.getClanPlayer().toPlayer();
|
||||
if (invitedPlayer == null) return;
|
||||
if (!permissions.has(invitedPlayer, "simpleclans.member.can-join")) {
|
||||
ChatBlock.sendMessage(sender, RED +
|
||||
lang("the.player.doesn.t.not.have.the.permissions.to.join.clans", sender));
|
||||
return;
|
||||
}
|
||||
if (invitedPlayer.getUniqueId().equals(sender.getUniqueId())) {
|
||||
ChatBlock.sendMessage(sender, RED + lang("you.cannot.invite.yourself", sender));
|
||||
return;
|
||||
}
|
||||
long minutesBeforeRejoin = cm.getMinutesBeforeRejoin(invited.getClanPlayer(), clan);
|
||||
if (minutesBeforeRejoin != 0) {
|
||||
ChatBlock.sendMessage(sender, RED +
|
||||
lang("the.player.must.wait.0.before.joining.your.clan.again", sender, minutesBeforeRejoin));
|
||||
return;
|
||||
}
|
||||
|
||||
if (clan.getSize() >= settings.getInt(CLAN_MAX_MEMBERS) && settings.getInt(CLAN_MAX_MEMBERS) > 0) {
|
||||
ChatBlock.sendMessage(sender, RED + lang("the.clan.members.reached.limit", sender));
|
||||
return;
|
||||
}
|
||||
if (!cm.purchaseInvite(sender)) {
|
||||
return;
|
||||
}
|
||||
|
||||
requestManager.addInviteRequest(cp, invitedPlayer.getName(), clan);
|
||||
ChatBlock.sendMessage(sender, AQUA + lang("has.been.asked.to.join",
|
||||
sender, invitedPlayer.getName(), clan.getName()));
|
||||
}
|
||||
|
||||
@Subcommand("%fee %check")
|
||||
@Conditions("member_fee_enabled|verified")
|
||||
@CommandPermission("simpleclans.member.fee-check")
|
||||
@Description("{@@command.description.fee.check}")
|
||||
public void checkFee(Player player, Clan clan) {
|
||||
ChatBlock.sendMessage(player, AQUA
|
||||
+ lang("the.fee.is.0.and.its.current.value.is.1", player, clan.isMemberFeeEnabled() ?
|
||||
lang("fee.enabled", player) : lang("fee.disabled", player),
|
||||
clan.getMemberFee()
|
||||
));
|
||||
}
|
||||
|
||||
@Subcommand("%fee %set")
|
||||
@CommandPermission("simpleclans.leader.fee")
|
||||
@Conditions("rank:name=FEE_SET|change_fee")
|
||||
@Description("{@@command.description.fee.set}")
|
||||
public void setFee(Player player, Clan clan, @Name("fee") double fee) {
|
||||
fee = Math.abs(fee);
|
||||
double maxFee = settings.getDouble(ECONOMY_MAX_MEMBER_FEE);
|
||||
if (fee > maxFee) {
|
||||
ChatBlock.sendMessage(player, RED
|
||||
+ lang("max.fee.allowed.is.0", player, maxFee));
|
||||
return;
|
||||
}
|
||||
if (cm.purchaseMemberFeeSet(player)) {
|
||||
clan.setMemberFee(fee);
|
||||
clan.addBb(player.getName(), AQUA + lang("bb.fee.set", fee));
|
||||
ChatBlock.sendMessage(player, AQUA + lang("fee.set", player));
|
||||
storage.updateClan(clan);
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%clanff %allow")
|
||||
@CommandPermission("simpleclans.leader.ff")
|
||||
@Conditions("rank:name=FRIENDLYFIRE")
|
||||
@Description("{@@command.description.clanff.allow}")
|
||||
public void allowClanFf(Player player, Clan clan) {
|
||||
clan.addBb(player.getName(), AQUA + lang("clan.wide.friendly.fire.is.allowed"));
|
||||
clan.setFriendlyFire(true);
|
||||
storage.updateClan(clan);
|
||||
}
|
||||
|
||||
@Subcommand("%clanff %block")
|
||||
@CommandPermission("simpleclans.leader.ff")
|
||||
@Description("{@@command.description.clanff.block}")
|
||||
public void blockClanFf(Player player, Clan clan) {
|
||||
clan.addBb(player.getName(), AQUA + lang("clan.wide.friendly.fire.blocked"));
|
||||
clan.setFriendlyFire(false);
|
||||
storage.updateClan(clan);
|
||||
}
|
||||
|
||||
@Subcommand("%description")
|
||||
@CommandPermission("simpleclans.leader.description")
|
||||
@Conditions("verified|rank:name=DESCRIPTION")
|
||||
@Description("{@@command.description.description}")
|
||||
public void setDescription(Player player, Clan clan, @Name("description") String description) {
|
||||
if (description.length() < settings.getInt(CLAN_MIN_DESCRIPTION_LENGTH)) {
|
||||
ChatBlock.sendMessage(player, RED + lang("your.clan.description.must.be.longer.than",
|
||||
player, settings.getInt(CLAN_MIN_DESCRIPTION_LENGTH)));
|
||||
return;
|
||||
}
|
||||
if (description.length() > settings.getInt(CLAN_MAX_DESCRIPTION_LENGTH)) {
|
||||
ChatBlock.sendMessage(player, RED + lang("your.clan.description.cannot.be.longer.than",
|
||||
player, settings.getInt(CLAN_MAX_DESCRIPTION_LENGTH)));
|
||||
return;
|
||||
}
|
||||
clan.setDescription(description);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("description.changed", player));
|
||||
storage.updateClan(clan);
|
||||
}
|
||||
|
||||
@Subcommand("%rival %add")
|
||||
@CommandPermission("simpleclans.leader.rival")
|
||||
@Conditions("verified|rivable|minimum_to_rival|rank:name=RIVAL_ADD")
|
||||
@CommandCompletion("@clans:hide_own")
|
||||
@Description("{@@command.description.rival.add}")
|
||||
public void addRival(Player player, Clan issuerClan, @Conditions("verified|different") @Name("clan") ClanInput rival) {
|
||||
Clan rivalInput = rival.getClan();
|
||||
if (settings.isUnrivable(rivalInput.getTag())) {
|
||||
ChatBlock.sendMessage(player, RED + lang("the.clan.cannot.be.rivaled", player));
|
||||
return;
|
||||
}
|
||||
if (!issuerClan.reachedRivalLimit()) {
|
||||
if (!issuerClan.isRival(rivalInput.getTag())) {
|
||||
issuerClan.addRival(rivalInput);
|
||||
rivalInput.addBb(player.getName(), AQUA + lang("has.initiated.a.rivalry", issuerClan.getName(),
|
||||
rivalInput.getName()), false);
|
||||
issuerClan.addBb(player.getName(), AQUA + lang("has.initiated.a.rivalry", player.getName(),
|
||||
rivalInput.getName()));
|
||||
} else {
|
||||
ChatBlock.sendMessage(player, RED + lang("your.clans.are.already.rivals", player));
|
||||
}
|
||||
} else {
|
||||
ChatBlock.sendMessage(player, RED + lang("rival.limit.reached", player));
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%rival %remove")
|
||||
@CommandPermission("simpleclans.leader.rival")
|
||||
@Conditions("verified|rank:name=RIVAL_REMOVE")
|
||||
@CommandCompletion("@rivals")
|
||||
@Description("{@@command.description.rival.remove}")
|
||||
public void removeRival(Player player,
|
||||
ClanPlayer cp,
|
||||
Clan issuerClan,
|
||||
@Conditions("different") @Name("clan") ClanInput rival) {
|
||||
Clan rivalInput = rival.getClan();
|
||||
if (issuerClan.isRival(rivalInput.getTag())) {
|
||||
requestManager.addRivalryBreakRequest(cp, rivalInput, issuerClan);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("leaders.asked.to.end.rivalry", player,
|
||||
rivalInput.getName()));
|
||||
} else {
|
||||
ChatBlock.sendMessage(player, RED + lang("your.clans.are.not.rivals", player));
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%ally %add")
|
||||
@CommandPermission("simpleclans.leader.ally")
|
||||
@Conditions("verified|rank:name=ALLY_ADD|minimum_to_ally")
|
||||
@CommandCompletion("@clans:hide_own")
|
||||
@Description("{@@command.description.ally.add}")
|
||||
public void addAlly(Player player,
|
||||
ClanPlayer cp,
|
||||
Clan issuerClan,
|
||||
@Conditions("verified|different") @Name("clan") ClanInput other) {
|
||||
Clan input = other.getClan();
|
||||
if (issuerClan.isAlly(input.getTag())) {
|
||||
ChatBlock.sendMessage(player, RED + lang("your.clans.are.already.allies", player));
|
||||
return;
|
||||
}
|
||||
int maxAlliances = settings.getInt(CLAN_MAX_ALLIANCES);
|
||||
if (maxAlliances != -1) {
|
||||
if (issuerClan.getAllies().size() >= maxAlliances) {
|
||||
ChatBlock.sendMessage(player, lang("your.clan.reached.max.alliances", player));
|
||||
return;
|
||||
}
|
||||
if (input.getAllies().size() >= maxAlliances) {
|
||||
ChatBlock.sendMessage(player, lang("other.clan.reached.max.alliances", player));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
List<ClanPlayer> onlineLeaders = Helper.stripOffLinePlayers(issuerClan.getLeaders());
|
||||
if (onlineLeaders.isEmpty()) {
|
||||
ChatBlock.sendMessage(player, RED + lang("at.least.one.leader.accept.the.alliance",
|
||||
player));
|
||||
return;
|
||||
}
|
||||
|
||||
requestManager.addAllyRequest(cp, input, issuerClan);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("leaders.have.been.asked.for.an.alliance",
|
||||
player, input.getName()));
|
||||
}
|
||||
|
||||
@Subcommand("%ally %remove")
|
||||
@Conditions("verified|rank:name=ALLY_REMOVE")
|
||||
@CommandPermission("simpleclans.leader.ally")
|
||||
@Description("{@@command.description.ally.remove}")
|
||||
@CommandCompletion("@allied_clans")
|
||||
public void removeAlly(Player player, Clan issuerClan, @Conditions("different|allied_clan") @Name("clan") ClanInput ally) {
|
||||
Clan allyInput = ally.getClan();
|
||||
issuerClan.removeAlly(allyInput);
|
||||
allyInput.addBb(player.getName(), AQUA + lang("has.broken.the.alliance", issuerClan.getName(),
|
||||
allyInput.getName()), false);
|
||||
issuerClan.addBb(player.getName(), AQUA + lang("has.broken.the.alliance", player.getName(),
|
||||
allyInput.getName()));
|
||||
}
|
||||
|
||||
@Subcommand("%kick")
|
||||
@CommandPermission("simpleclans.leader.kick")
|
||||
@CommandCompletion("@clan_members:hide_own")
|
||||
@Conditions("rank:name=KICK")
|
||||
@Description("{@@command.description.kick}")
|
||||
public void kick(@Conditions("clan_member") Player sender,
|
||||
@Conditions("same_clan") @Name("member") ClanPlayerInput other) {
|
||||
ClanPlayer clanPlayer = other.getClanPlayer();
|
||||
if (sender.getUniqueId().equals(clanPlayer.getUniqueId())) {
|
||||
ChatBlock.sendMessage(sender, RED + lang("you.cannot.kick.yourself", sender));
|
||||
return;
|
||||
}
|
||||
|
||||
Clan clan = cm.getClanByPlayerUniqueId(sender.getUniqueId());
|
||||
if (Objects.requireNonNull(clan).isLeader(clanPlayer.getUniqueId())) {
|
||||
ChatBlock.sendMessage(sender, RED + lang("you.cannot.kick.another.leader", sender));
|
||||
return;
|
||||
}
|
||||
|
||||
clan.addBb(sender.getName(), AQUA + lang("has.been.kicked.by", clanPlayer.getName(),
|
||||
sender.getName(), sender));
|
||||
clan.removePlayerFromClan(clanPlayer.getUniqueId());
|
||||
}
|
||||
|
||||
@Subcommand("%resign %confirm")
|
||||
@CommandPermission("simpleclans.member.resign")
|
||||
@Description("{@@command.description.resign}")
|
||||
@HelpSearchTags("leave")
|
||||
public void resignConfirm(Player player, ClanPlayer cp, Clan clan) {
|
||||
if (clan.isPermanent() || !clan.isLeader(player) || clan.getLeaders().size() > 1) {
|
||||
clan.addBb(player.getName(), AQUA + lang("0.has.resigned", player.getName()));
|
||||
cp.addResignTime(clan.getTag());
|
||||
clan.removePlayerFromClan(player.getUniqueId());
|
||||
|
||||
ChatBlock.sendMessage(cp,AQUA + lang("resign.success", player));
|
||||
} else if (clan.isLeader(player) && clan.getLeaders().size() == 1) {
|
||||
clan.disband(player, true, false);
|
||||
ChatBlock.sendMessage(cp, RED + lang("clan.has.been.disbanded", player, clan.getName()));
|
||||
} else {
|
||||
ChatBlock.sendMessage(cp, RED +
|
||||
lang("last.leader.cannot.resign.you.must.appoint.another.leader.or.disband.the.clan", player));
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%resign")
|
||||
@CommandPermission("simpleclans.member.resign")
|
||||
@Description("{@@command.description.resign}")
|
||||
@HelpSearchTags("leave")
|
||||
public void resign(@Conditions("clan_member") Player player) {
|
||||
new SCConversation(plugin, player, new ResignPrompt()).begin();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.data.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.CoordsFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.RosterFrame;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
|
||||
import static org.bukkit.ChatColor.RED;
|
||||
|
||||
@CommandAlias("%clan")
|
||||
@Conditions("%basic_conditions|verified")
|
||||
public class DataCommands extends BaseCommand {
|
||||
@Dependency
|
||||
private SimpleClans plugin;
|
||||
@Dependency
|
||||
private SettingsManager settings;
|
||||
|
||||
@Subcommand("%vitals")
|
||||
@CommandPermission("simpleclans.member.vitals")
|
||||
@Conditions("rank:name=VITALS")
|
||||
@Description("{@@command.description.vitals}")
|
||||
public void vitals(CommandSender sender, Clan clan) {
|
||||
Vitals vitals = new Vitals(plugin, sender, clan);
|
||||
vitals.send();
|
||||
}
|
||||
|
||||
@Subcommand("%stats")
|
||||
@CommandPermission("simpleclans.member.stats")
|
||||
@Conditions("rank:name=STATS")
|
||||
@Description("{@@command.description.stats}")
|
||||
public void stats(Player player, Clan clan) {
|
||||
ClanStats stats = new ClanStats(plugin, player, clan);
|
||||
stats.send();
|
||||
}
|
||||
|
||||
@Subcommand("%profile")
|
||||
@CommandPermission("simpleclans.member.profile")
|
||||
@Description("{@@command.description.profile}")
|
||||
public void profile(CommandSender sender, Clan clan) {
|
||||
ClanProfile p = new ClanProfile(plugin, sender, clan);
|
||||
p.send();
|
||||
}
|
||||
|
||||
@Subcommand("%roster")
|
||||
@CommandPermission("simpleclans.member.roster")
|
||||
@Description("{@@command.description.roster}")
|
||||
public void roster(Player player, Clan clan) {
|
||||
if (settings.is(ENABLE_GUI)) {
|
||||
InventoryDrawer.open(new RosterFrame(player, null, clan));
|
||||
return;
|
||||
}
|
||||
ClanRoster r = new ClanRoster(plugin, player, clan);
|
||||
r.send();
|
||||
}
|
||||
|
||||
@Subcommand("%coords")
|
||||
@CommandPermission("simpleclans.member.coords")
|
||||
@Conditions("rank:name=COORDS")
|
||||
@HelpSearchTags("local location")
|
||||
@Description("{@@command.description.coords}")
|
||||
public void coords(Player player, Clan clan) {
|
||||
if (settings.is(ENABLE_GUI)) {
|
||||
InventoryDrawer.open(new CoordsFrame(player, null, clan));
|
||||
return;
|
||||
}
|
||||
if (VanishUtils.getNonVanished(player, clan).size() == 1) {
|
||||
ChatBlock.sendMessage(player, RED + lang("you.are.the.only.member.online", player));
|
||||
return;
|
||||
}
|
||||
ClanCoords c = new ClanCoords(plugin, player, clan);
|
||||
c.send();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.events.HomeRegroupEvent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.events.PlayerHomeClearEvent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.events.PlayerHomeSetEvent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.ProtectionManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
|
||||
import static org.bukkit.ChatColor.*;
|
||||
|
||||
@CommandAlias("%clan")
|
||||
@Conditions("%basic_conditions|verified")
|
||||
public class HomeCommands extends BaseCommand {
|
||||
@Dependency
|
||||
private SimpleClans plugin;
|
||||
@Dependency
|
||||
private PermissionsManager permissions;
|
||||
@Dependency
|
||||
private SettingsManager settings;
|
||||
@Dependency
|
||||
private ProtectionManager protection;
|
||||
@Dependency
|
||||
private ClanManager cm;
|
||||
|
||||
@Subcommand("%regroup %me")
|
||||
@CommandPermission("simpleclans.leader.regroup.me")
|
||||
@Conditions("rank:name=REGROUP_ME")
|
||||
@Description("{@@command.description.regroup.me}")
|
||||
public void regroupMe(Player player, ClanPlayer cp, Clan clan) {
|
||||
if (!settings.is(ALLOW_REGROUP)) {
|
||||
ChatBlock.sendMessage(player, RED + lang("insufficient.permissions", player));
|
||||
return;
|
||||
}
|
||||
|
||||
processRegroup(player, cp, clan, player.getLocation());
|
||||
}
|
||||
|
||||
private void processRegroup(Player player, ClanPlayer cp, Clan clan, Location location) {
|
||||
HomeRegroupEvent homeRegroupEvent = new HomeRegroupEvent(clan, cp, VanishUtils.getNonVanished(player, clan), location);
|
||||
plugin.getServer().getPluginManager().callEvent(homeRegroupEvent);
|
||||
|
||||
if (homeRegroupEvent.isCancelled() || !cm.purchaseHomeRegroup(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
plugin.getTeleportManager().teleport(player, clan, location);
|
||||
}
|
||||
|
||||
@Subcommand("%regroup %home")
|
||||
@CommandPermission("simpleclans.leader.regroup.home")
|
||||
@Conditions("rank:name=REGROUP_HOME")
|
||||
@Description("{@@command.description.regroup.home}")
|
||||
public void regroupHome(Player player, ClanPlayer cp, @Conditions("can_teleport") Clan clan) {
|
||||
if (!settings.is(ALLOW_REGROUP)) {
|
||||
ChatBlock.sendMessage(player, RED + lang("insufficient.permissions", player));
|
||||
return;
|
||||
}
|
||||
Location location = clan.getHomeLocation();
|
||||
processRegroup(player, cp, clan, location);
|
||||
}
|
||||
|
||||
@Subcommand("%home")
|
||||
@CommandPermission("simpleclans.member.home")
|
||||
@Conditions("rank:name=HOME_TP")
|
||||
@Description("{@@command.description.home.tp}")
|
||||
public void teleport(Player player, @Conditions("can_teleport") Clan clan, ClanPlayer cp) {
|
||||
Location homeLocation = clan.getHomeLocation();
|
||||
|
||||
if (cm.purchaseHomeTeleport(player)) {
|
||||
plugin.getTeleportManager().addPlayer(player, homeLocation, clan.getName());
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%home %clear")
|
||||
@CommandPermission("simpleclans.leader.home-set")
|
||||
@Conditions("rank:name=HOME_SET")
|
||||
@Description("{@@command.description.home.clear}")
|
||||
public void clear(Player player, ClanPlayer cp, Clan clan) {
|
||||
if (settings.is(CLAN_HOMEBASE_CAN_BE_SET_ONLY_ONCE) && clan.getHomeLocation() != null &&
|
||||
!permissions.has(player, "simpleclans.mod.home")) {
|
||||
ChatBlock.sendMessage(player, RED + lang("home.base.only.once", player));
|
||||
return;
|
||||
}
|
||||
|
||||
PlayerHomeClearEvent event = new PlayerHomeClearEvent(clan, cp);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
clan.setHomeLocation(null);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("hombase.cleared", player));
|
||||
}
|
||||
|
||||
@Subcommand("%home %set")
|
||||
@Conditions("rank:name=HOME_SET")
|
||||
@CommandPermission("simpleclans.leader.home-set")
|
||||
@Description("{@@command.description.home.set}")
|
||||
public void set(Player player, ClanPlayer cp, Clan clan) {
|
||||
if (settings.is(CLAN_HOMEBASE_CAN_BE_SET_ONLY_ONCE) && clan.getHomeLocation() != null &&
|
||||
!permissions.has(player, "simpleclans.mod.home")) {
|
||||
ChatBlock.sendMessage(player, RED + lang("home.base.only.once", player));
|
||||
return;
|
||||
}
|
||||
if (settings.is(LAND_SET_BASE_ONLY_IN_LAND)) {
|
||||
if (!protection.isOwner(player, player.getLocation())) {
|
||||
ChatBlock.sendMessageKey(player, "you.can.only.set.base.in.your.land");
|
||||
return;
|
||||
}
|
||||
}
|
||||
PlayerHomeSetEvent homeSetEvent = new PlayerHomeSetEvent(clan, cp, player.getLocation());
|
||||
plugin.getServer().getPluginManager().callEvent(homeSetEvent);
|
||||
|
||||
if (homeSetEvent.isCancelled() || !cm.purchaseHomeTeleportSet(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
clan.setHomeLocation(player.getLocation());
|
||||
ChatBlock.sendMessage(player, AQUA + lang("hombase.set", player, YELLOW +
|
||||
Helper.toLocationString(player.getLocation())));
|
||||
}
|
||||
}
|
||||
+45
-106
@@ -1,12 +1,12 @@
|
||||
package net.trueog.unionsog.commands.union;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import net.trueog.unionsog.ChatBlock;
|
||||
import net.trueog.unionsog.UnionPlayer;
|
||||
import net.trueog.unionsog.hooks.protection.Land;
|
||||
import net.trueog.unionsog.managers.ProtectionManager;
|
||||
import net.trueog.unionsog.managers.SettingsManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.hooks.protection.Land;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.ProtectionManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@@ -14,12 +14,12 @@ import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static net.trueog.unionsog.managers.SettingsManager.ConfigField.LAND_EDIT_ALL_LANDS;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.LAND_EDIT_ALL_LANDS;
|
||||
|
||||
@CommandAlias("%union")
|
||||
@CommandAlias("%clan")
|
||||
@Subcommand("%land")
|
||||
@Conditions("%basic_conditions|union_member|land_sharing|own_land")
|
||||
@CommandPermission("unionsog.member.land")
|
||||
@Conditions("%basic_conditions|clan_member|land_sharing|own_land")
|
||||
@CommandPermission("simpleclans.member.land")
|
||||
public class LandCommand extends BaseCommand {
|
||||
|
||||
@Dependency
|
||||
@@ -27,213 +27,152 @@ public class LandCommand extends BaseCommand {
|
||||
@Dependency
|
||||
private SettingsManager settings;
|
||||
|
||||
private Set<Land> getLands(UnionPlayer cp, Location location) {
|
||||
|
||||
private Set<Land> getLands(ClanPlayer cp, Location location) {
|
||||
Player player = Objects.requireNonNull(cp.toPlayer());
|
||||
if (settings.is(LAND_EDIT_ALL_LANDS)) {
|
||||
|
||||
return protection.getLands(player, location);
|
||||
|
||||
} else {
|
||||
|
||||
return protection.getLandsAt(location).stream().filter(l -> l.getOwners().contains(player.getUniqueId()))
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%allow")
|
||||
public class AllowCommand extends BaseCommand {
|
||||
|
||||
private void allow(UnionPlayer cp, ProtectionManager.Action action, Location location) {
|
||||
|
||||
private void allow(ClanPlayer cp, ProtectionManager.Action action, Location location) {
|
||||
allow(cp, action, location, true);
|
||||
|
||||
}
|
||||
|
||||
private void allow(UnionPlayer cp, ProtectionManager.Action action, Location location, boolean notify) {
|
||||
|
||||
private void allow(ClanPlayer cp, ProtectionManager.Action action, Location location, boolean notify) {
|
||||
for (Land land : getLands(cp, location)) {
|
||||
|
||||
cp.allow(action, land.getId());
|
||||
|
||||
}
|
||||
|
||||
if (notify) {
|
||||
|
||||
ChatBlock.sendMessageKey(cp, "land.allowed.action");
|
||||
|
||||
ChatBlock.sendMessageKey(cp.toPlayer(), "land.allowed.action");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%container")
|
||||
@Description("{@@command.description.land.allow.container}")
|
||||
@CommandPermission("unionsog.member.land.allow.container")
|
||||
public void container(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.allow.container")
|
||||
public void container(Player player, ClanPlayer cp) {
|
||||
allow(cp, ProtectionManager.Action.CONTAINER, player.getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%place")
|
||||
@Description("{@@command.description.land.allow.place}")
|
||||
@CommandPermission("unionsog.member.land.allow.place")
|
||||
public void place(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.allow.place")
|
||||
public void place(Player player, ClanPlayer cp) {
|
||||
allow(cp, ProtectionManager.Action.PLACE, player.getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%damage")
|
||||
@Description("{@@command.description.land.allow.damage}")
|
||||
@CommandPermission("unionsog.member.land.allow.damage")
|
||||
public void damage(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.allow.damage")
|
||||
public void damage(Player player, ClanPlayer cp) {
|
||||
allow(cp, ProtectionManager.Action.DAMAGE, player.getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%interact_entity")
|
||||
@Description("{@@command.description.land.allow.interact_entity}")
|
||||
@CommandPermission("unionsog.member.land.allow.interact_entity")
|
||||
public void interactEntity(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.allow.interact_entity")
|
||||
public void interactEntity(Player player, ClanPlayer cp) {
|
||||
allow(cp, ProtectionManager.Action.INTERACT_ENTITY, player.getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%interact")
|
||||
@Description("{@@command.description.land.allow.interact}")
|
||||
@CommandPermission("unionsog.member.land.allow.interact")
|
||||
public void interact(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.allow.interact")
|
||||
public void interact(Player player, ClanPlayer cp) {
|
||||
allow(cp, ProtectionManager.Action.INTERACT, player.getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%break")
|
||||
@Description("{@@command.description.land.allow.break}")
|
||||
@CommandPermission("unionsog.member.land.allow.break")
|
||||
public void allowBreak(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.allow.break")
|
||||
public void allowBreak(Player player, ClanPlayer cp) {
|
||||
allow(cp, ProtectionManager.Action.BREAK, player.getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%all")
|
||||
@Description("{@@command.description.land.allow.all}")
|
||||
@CommandPermission("unionsog.member.land.allow.all")
|
||||
public void all(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.allow.all")
|
||||
public void all(Player player, ClanPlayer cp) {
|
||||
for (ProtectionManager.Action action : ProtectionManager.Action.values()) {
|
||||
|
||||
allow(cp, action, player.getLocation(), false);
|
||||
|
||||
}
|
||||
|
||||
ChatBlock.sendMessageKey(player, "land.allowed.all.actions");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%block")
|
||||
public class BlockCommand extends BaseCommand {
|
||||
|
||||
private void block(UnionPlayer cp, ProtectionManager.Action action, Location location) {
|
||||
|
||||
private void block(ClanPlayer cp, ProtectionManager.Action action, Location location) {
|
||||
block(cp, action, location, true);
|
||||
|
||||
}
|
||||
|
||||
private void block(UnionPlayer cp, ProtectionManager.Action action, Location location, boolean notify) {
|
||||
|
||||
private void block(ClanPlayer cp, ProtectionManager.Action action, Location location, boolean notify) {
|
||||
for (Land land : getLands(cp, location)) {
|
||||
|
||||
cp.disallow(action, land.getId());
|
||||
|
||||
}
|
||||
|
||||
if (notify) {
|
||||
|
||||
ChatBlock.sendMessageKey(cp, "land.blocked.action");
|
||||
|
||||
ChatBlock.sendMessageKey(cp.toPlayer(), "land.blocked.action");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%container")
|
||||
@Description("{@@command.description.land.block.container}")
|
||||
@CommandPermission("unionsog.member.land.block.container")
|
||||
public void container(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.block.container")
|
||||
public void container(Player player, ClanPlayer cp) {
|
||||
block(cp, ProtectionManager.Action.CONTAINER, player.getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%place")
|
||||
@Description("{@@command.description.land.block.place}")
|
||||
@CommandPermission("unionsog.member.land.block.place")
|
||||
public void place(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.block.place")
|
||||
public void place(Player player, ClanPlayer cp) {
|
||||
block(cp, ProtectionManager.Action.PLACE, player.getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%damage")
|
||||
@Description("{@@command.description.land.block.damage}")
|
||||
@CommandPermission("unionsog.member.land.block.damage")
|
||||
public void damage(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.block.damage")
|
||||
public void damage(Player player, ClanPlayer cp) {
|
||||
block(cp, ProtectionManager.Action.DAMAGE, player.getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%interact_entity")
|
||||
@Description("{@@command.description.land.block.interact_entity}")
|
||||
@CommandPermission("unionsog.member.land.block.interact_entity")
|
||||
public void interactEntity(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.block.interact_entity")
|
||||
public void interactEntity(Player player, ClanPlayer cp) {
|
||||
block(cp, ProtectionManager.Action.INTERACT_ENTITY, player.getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%interact")
|
||||
@Description("{@@command.description.land.block.interact}")
|
||||
@CommandPermission("unionsog.member.land.block.interact")
|
||||
public void interact(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.block.interact")
|
||||
public void interact(Player player, ClanPlayer cp) {
|
||||
block(cp, ProtectionManager.Action.INTERACT, player.getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%break")
|
||||
@Description("{@@command.description.land.block.break}")
|
||||
@CommandPermission("unionsog.member.land.block.break")
|
||||
public void blockBreak(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.block.break")
|
||||
public void blockBreak(Player player, ClanPlayer cp) {
|
||||
block(cp, ProtectionManager.Action.BREAK, player.getLocation());
|
||||
|
||||
}
|
||||
|
||||
@Subcommand("%all")
|
||||
@Description("{@@command.description.land.block.all}")
|
||||
@CommandPermission("unionsog.member.land.block.all")
|
||||
public void all(Player player, UnionPlayer cp) {
|
||||
|
||||
@CommandPermission("simpleclans.member.land.block.all")
|
||||
public void all(Player player, ClanPlayer cp) {
|
||||
protection.getLandsAt(player.getLocation());
|
||||
for (ProtectionManager.Action action : ProtectionManager.Action.values()) {
|
||||
|
||||
block(cp, action, player.getLocation(), false);
|
||||
|
||||
}
|
||||
|
||||
ChatBlock.sendMessageKey(player, "land.blocked.all.actions");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+227
@@ -0,0 +1,227 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.conversation.DisbandPrompt;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.conversation.SCConversation;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.hooks.discord.DiscordHook;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.hooks.discord.exceptions.DiscordHookException;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.*;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
|
||||
import static org.bukkit.ChatColor.*;
|
||||
|
||||
@CommandAlias("%clan")
|
||||
@Conditions("%basic_conditions|leader")
|
||||
public class LeaderCommands extends BaseCommand {
|
||||
|
||||
@Dependency
|
||||
private SimpleClans plugin;
|
||||
@Dependency
|
||||
private StorageManager storage;
|
||||
@Dependency
|
||||
private PermissionsManager permissions;
|
||||
@Dependency
|
||||
private SettingsManager settings;
|
||||
@Dependency
|
||||
private RequestManager requestManager;
|
||||
@Dependency
|
||||
private ClanManager cm;
|
||||
@Dependency
|
||||
private ChatManager chatManager;
|
||||
|
||||
@Subcommand("%demote")
|
||||
@CommandCompletion("@clan_leaders")
|
||||
@CommandPermission("simpleclans.leader.demote")
|
||||
@Description("{@@command.description.demote}")
|
||||
public void demote(Player player,
|
||||
ClanPlayer cp,
|
||||
Clan clan,
|
||||
@Conditions("same_clan") @Name("leader") ClanPlayerInput other) {
|
||||
ClanPlayer otherCp = other.getClanPlayer();
|
||||
if (!clan.enoughLeadersOnlineToDemote(otherCp)) {
|
||||
ChatBlock.sendMessage(player, RED + lang("not.enough.leaders.online.to.vote.on.demotion", player));
|
||||
return;
|
||||
}
|
||||
if (!clan.isLeader(otherCp.getUniqueId())) {
|
||||
ChatBlock.sendMessage(player, RED + lang("player.is.not.a.leader.of.your.clan", player));
|
||||
return;
|
||||
}
|
||||
if (clan.getLeaders().size() > 2 && settings.is(CLAN_CONFIRMATION_FOR_DEMOTE)) {
|
||||
requestManager.addDemoteRequest(cp, otherCp.getName(), clan);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("demotion.vote.has.been.requested.from.all.leaders",
|
||||
player));
|
||||
return;
|
||||
}
|
||||
clan.addBb(player.getName(), AQUA + lang("demoted.back.to.member", otherCp.getName()));
|
||||
clan.demote(otherCp.getUniqueId());
|
||||
}
|
||||
|
||||
@Subcommand("%promote")
|
||||
@CommandPermission("simpleclans.leader.promote")
|
||||
@CommandCompletion("@clan_non_leaders")
|
||||
@Description("{@@command.description.promote}")
|
||||
public void promote(Player player,
|
||||
Clan clan,
|
||||
ClanPlayer cp,
|
||||
@Conditions("online|same_clan") @Name("member") ClanPlayerInput other) {
|
||||
Player otherPl = Objects.requireNonNull(other.getClanPlayer().toPlayer());
|
||||
if (!permissions.has(otherPl, "simpleclans.leader.promotable")) {
|
||||
ChatBlock.sendMessage(player, RED + lang("the.player.does.not.have.the.permissions.to.lead.a.clan",
|
||||
player));
|
||||
return;
|
||||
}
|
||||
if (otherPl.getUniqueId().equals(player.getUniqueId())) {
|
||||
ChatBlock.sendMessage(player, RED + lang("you.cannot.promote.yourself", player));
|
||||
return;
|
||||
}
|
||||
if (clan.isLeader(otherPl.getUniqueId())) {
|
||||
ChatBlock.sendMessage(player, RED + lang("the.player.is.already.a.leader", player));
|
||||
return;
|
||||
}
|
||||
if (settings.is(CLAN_CONFIRMATION_FOR_PROMOTE) && clan.getLeaders().size() > 1) {
|
||||
requestManager.addPromoteRequest(cp, otherPl.getName(), clan);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("promotion.vote.has.been.requested.from.all.leaders",
|
||||
player));
|
||||
return;
|
||||
}
|
||||
|
||||
clan.addBb(player.getName(), AQUA + lang("promoted.to.leader", otherPl.getName()));
|
||||
clan.promote(otherPl.getUniqueId());
|
||||
}
|
||||
|
||||
@Subcommand("%disband")
|
||||
@CommandPermission("simpleclans.leader.disband")
|
||||
@Description("{@@command.description.disband}")
|
||||
public void disband(Player player, ClanPlayer cp, Clan clan) {
|
||||
if (clan.getLeaders().size() != 1) {
|
||||
requestManager.addDisbandRequest(cp, clan);
|
||||
ChatBlock.sendMessage(player, AQUA +
|
||||
lang("clan.disband.vote.has.been.requested.from.all.leaders", player));
|
||||
return;
|
||||
}
|
||||
|
||||
new SCConversation(plugin, player, new DisbandPrompt()).begin();
|
||||
}
|
||||
|
||||
@Subcommand("%verify")
|
||||
@CommandPermission("simpleclans.leader.verify")
|
||||
@Description("{@@command.description.verify}")
|
||||
public void verify(Player player, Clan clan) {
|
||||
if (clan.isVerified()) {
|
||||
ChatBlock.sendMessageKey(player, "your.clan.already.verified");
|
||||
return;
|
||||
}
|
||||
if (!settings.is(ECONOMY_PURCHASE_CLAN_VERIFY)) {
|
||||
ChatBlock.sendMessageKey(player, "staff.member.verify.clan");
|
||||
return;
|
||||
}
|
||||
int minToVerify = settings.getInt(CLAN_MIN_TO_VERIFY);
|
||||
if (minToVerify > clan.getMembers().size()) {
|
||||
ChatBlock.sendMessage(player, lang("your.clan.must.have.members.to.verify", player, minToVerify));
|
||||
return;
|
||||
}
|
||||
if (cm.purchaseVerification(player)) {
|
||||
clan.verifyClan();
|
||||
clan.addBb(player.getName(), AQUA + lang("clan.0.has.been.verified", clan.getName()));
|
||||
ChatBlock.sendMessage(player, AQUA + lang("the.clan.has.been.verified", player));
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%trust")
|
||||
@CommandPermission("simpleclans.leader.settrust")
|
||||
@CommandCompletion("@clan_members")
|
||||
@Description("{@@command.description.trust}")
|
||||
public void trust(Player player, Clan clan, @Conditions("same_clan") @Name("member") ClanPlayerInput trusted) {
|
||||
ClanPlayer trustedInput = trusted.getClanPlayer();
|
||||
if (player.getUniqueId().equals(trustedInput.getUniqueId())) {
|
||||
ChatBlock.sendMessage(player, RED + lang("you.cannot.trust.yourself", player));
|
||||
return;
|
||||
}
|
||||
if (clan.isLeader(trustedInput.getUniqueId())) {
|
||||
ChatBlock.sendMessage(player, RED + lang("leaders.are.already.trusted", player));
|
||||
return;
|
||||
}
|
||||
if (trustedInput.isTrusted()) {
|
||||
ChatBlock.sendMessage(player, ChatColor.RED + lang("this.player.is.already.trusted", player));
|
||||
return;
|
||||
}
|
||||
clan.addBb(player.getName(), AQUA + lang("has.been.given.trusted.status.by", trustedInput.getName(),
|
||||
player.getName()));
|
||||
trustedInput.setTrusted(true);
|
||||
storage.updateClanPlayer(trustedInput);
|
||||
}
|
||||
|
||||
@Subcommand("%untrust")
|
||||
@CommandPermission("simpleclans.leader.settrust")
|
||||
@CommandCompletion("@clan_members")
|
||||
@Description("{@@command.description.untrust}")
|
||||
public void untrust(Player player, Clan clan, @Conditions("same_clan") @Name("member") ClanPlayerInput trusted) {
|
||||
ClanPlayer trustedInput = trusted.getClanPlayer();
|
||||
if (trustedInput.getUniqueId().equals(player.getUniqueId())) {
|
||||
ChatBlock.sendMessage(player, RED + lang("you.cannot.untrust.yourself", player));
|
||||
return;
|
||||
}
|
||||
if (clan.isLeader(trustedInput.getUniqueId())) {
|
||||
ChatBlock.sendMessage(player, RED + lang("leaders.cannot.be.untrusted", player));
|
||||
return;
|
||||
}
|
||||
if (!trustedInput.isTrusted()) {
|
||||
ChatBlock.sendMessage(player, RED + lang("this.player.is.already.untrusted", player));
|
||||
return;
|
||||
}
|
||||
|
||||
clan.addBb(player.getName(), AQUA + lang("has.been.given.untrusted.status.by", trustedInput.getName(),
|
||||
player.getName()));
|
||||
trustedInput.setTrusted(false);
|
||||
storage.updateClanPlayer(trustedInput);
|
||||
}
|
||||
|
||||
@Subcommand("%discord %create")
|
||||
@CommandPermission("simpleclans.leader.discord.create")
|
||||
@Description("{@@command.description.discord.create}")
|
||||
@Conditions("verified")
|
||||
public void discord(Player player, Clan clan) {
|
||||
DiscordHook discordHook = chatManager.getDiscordHook();
|
||||
if (discordHook == null) {
|
||||
ChatBlock.sendMessageKey(player, "discordhook.is.disabled");
|
||||
return;
|
||||
}
|
||||
|
||||
double amount = settings.getDouble(ECONOMY_DISCORD_CREATION_PRICE);
|
||||
if (settings.is(ECONOMY_PURCHASE_DISCORD_CREATE)) {
|
||||
if (!permissions.playerHasMoney(player, amount)) {
|
||||
player.sendMessage(AQUA + lang("not.sufficient.money", player, amount));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!permissions.playerChargeMoney(player, amount)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
discordHook.createChannel(clan.getTag());
|
||||
ChatBlock.sendMessageKey(player, "discord.created.successfully");
|
||||
} catch (DiscordHookException ex) {
|
||||
// Return player's money if clan creation went wrong
|
||||
if (settings.is(ECONOMY_PURCHASE_DISCORD_CREATE)) {
|
||||
permissions.playerGrantMoney(player, amount);
|
||||
}
|
||||
String messageKey = ex.getMessageKey();
|
||||
if (messageKey != null) {
|
||||
ChatBlock.sendMessage(player, RED + lang(messageKey));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,214 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.conversation.CreateRankNamePrompt;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.conversation.RequestCanceller;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.conversation.SCConversation;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.events.DeleteRankEvent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.events.PlayerRankUpdateEvent;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static org.bukkit.ChatColor.AQUA;
|
||||
import static org.bukkit.ChatColor.RED;
|
||||
|
||||
@CommandAlias("%clan")
|
||||
@Subcommand("%rank")
|
||||
@Conditions("%basic_conditions|verified|leader")
|
||||
public class RankCommand extends BaseCommand {
|
||||
|
||||
@Dependency
|
||||
private SimpleClans plugin;
|
||||
@Dependency
|
||||
private StorageManager storage;
|
||||
@Dependency
|
||||
private PermissionsManager permissions;
|
||||
|
||||
@Subcommand("%assign")
|
||||
@CommandPermission("simpleclans.leader.rank.assign")
|
||||
@CommandCompletion("@clan_members @ranks")
|
||||
@Description("{@@command.description.rank.assign}")
|
||||
public void assign(ClanPlayer player,
|
||||
Clan clan,
|
||||
@Name("member") @Conditions("same_clan") ClanPlayerInput member,
|
||||
@Name("rank") Rank rank) {
|
||||
ClanPlayer memberInput = member.getClanPlayer();
|
||||
|
||||
PlayerRankUpdateEvent event = new PlayerRankUpdateEvent(player, memberInput, clan, clan.getRank(memberInput.getRankId()), rank);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
|
||||
if (event.isCancelled()) return;
|
||||
|
||||
if (memberInput.getRankId().equals(rank.getName())) {
|
||||
ChatBlock.sendMessage(player, lang("player.already.has.that.rank", player));
|
||||
return;
|
||||
}
|
||||
|
||||
memberInput.setRank(rank.getName());
|
||||
storage.updateClanPlayer(memberInput);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("player.rank.changed", player));
|
||||
}
|
||||
|
||||
@Subcommand("%unassign")
|
||||
@CommandPermission("simpleclans.leader.rank.unassign")
|
||||
@CommandCompletion("@clan_members")
|
||||
@Description("{@@command.description.rank.unassign}")
|
||||
public void unassign(ClanPlayer player, Clan clan, @Conditions("same_clan") @Name("member") ClanPlayerInput cp) {
|
||||
ClanPlayer memberInput = cp.getClanPlayer();
|
||||
|
||||
PlayerRankUpdateEvent event = new PlayerRankUpdateEvent(player, memberInput, clan, clan.getRank(memberInput.getRankId()), null);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
|
||||
if (event.isCancelled()) return;
|
||||
|
||||
memberInput.setRank(null);
|
||||
storage.updateClanPlayer(memberInput);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("player.unassigned.from.rank", player));
|
||||
}
|
||||
|
||||
@Subcommand("%create")
|
||||
@CommandPermission("simpleclans.leader.rank.create")
|
||||
@Description("{@@command.description.rank.create}")
|
||||
public void create(Player player, Clan clan) {
|
||||
SCConversation conversation = new SCConversation(plugin, player, new CreateRankNamePrompt(), 60);
|
||||
conversation.addConversationCanceller(new RequestCanceller(player, RED + lang("rank.create.request.cancelled", player)));
|
||||
conversation.getContext().setSessionData("clan", clan);
|
||||
conversation.begin();
|
||||
}
|
||||
|
||||
@Subcommand("%delete")
|
||||
@CommandPermission("simpleclans.leader.rank.delete")
|
||||
@CommandCompletion("@ranks")
|
||||
@Description("{@@command.description.rank.delete}")
|
||||
public void delete(Player player, Clan clan, @Name("rank") Rank rank) {
|
||||
DeleteRankEvent event = new DeleteRankEvent(player, clan, rank);
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
clan.deleteRank(rank.getName());
|
||||
storage.updateClan(clan, true);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("rank.0.deleted", player, rank.getDisplayName()));
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%list")
|
||||
@CommandPermission("simpleclans.leader.rank.list")
|
||||
@Description("{@@command.description.rank.list}")
|
||||
public void list(Player player, Clan clan) {
|
||||
List<Rank> ranks = clan.getRanks();
|
||||
|
||||
if (ranks.isEmpty()) {
|
||||
ChatBlock.sendMessage(player, RED + lang("no.ranks", player));
|
||||
return;
|
||||
}
|
||||
|
||||
ranks.sort(Comparator.reverseOrder());
|
||||
ChatBlock.sendMessage(player, AQUA + lang("clans.ranks", player));
|
||||
int count = 1;
|
||||
for (Rank rank : ranks) {
|
||||
ChatBlock.sendMessage(player, AQUA + lang("ranks.list.item", player, count,
|
||||
ChatUtils.parseColors(rank.getDisplayName()) + AQUA, rank.getName()));
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%setdisplayname")
|
||||
@CommandPermission("simpleclans.leader.rank.setdisplayname")
|
||||
@CommandCompletion("@ranks @nothing")
|
||||
@Description("{@@command.description.rank.setdisplayname}")
|
||||
public void setDisplayName(Player player, Clan clan, @Name("rank") Rank rank, @Name("displayname") String displayName) {
|
||||
if (displayName.contains("&") && !permissions.has(player, "simpleclans.leader.coloredrank")) {
|
||||
ChatBlock.sendMessage(player, RED + lang("you.cannot.set.colored.ranks", player));
|
||||
return;
|
||||
}
|
||||
rank.setDisplayName(displayName);
|
||||
storage.updateClan(clan, true);
|
||||
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("rank.displayname.updated", player));
|
||||
}
|
||||
|
||||
@Subcommand("%setdefault")
|
||||
@CommandPermission("simpleclans.leader.rank.setdefault")
|
||||
@CommandCompletion("@ranks")
|
||||
@Description("{@@command.description.rank.setdefault}")
|
||||
public void setDefault(Player player, Clan clan, @Name("rank") Rank rank) {
|
||||
clan.setDefaultRank(rank.getName());
|
||||
ChatBlock.sendMessage(player, AQUA + lang("rank.setdefault", player, rank.getDisplayName()));
|
||||
}
|
||||
|
||||
@Subcommand("%removedefault")
|
||||
@CommandPermission("simpleclans.leader.rank.removedefault")
|
||||
@Description("{@@command.description.rank.removedefault}")
|
||||
public void removeDefault(Player player, Clan clan) {
|
||||
clan.setDefaultRank(null);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("rank.removedefault", player));
|
||||
}
|
||||
|
||||
@Subcommand("%permissions")
|
||||
public class PermissionsCommand extends BaseCommand {
|
||||
private final String validPermissionsToMessage = String.join(",", Helper.fromPermissionArray());
|
||||
|
||||
@Default
|
||||
@CommandPermission("simpleclans.leader.rank.permissions.available")
|
||||
@Description("{@@command.description.rank.permissions.available}")
|
||||
public void availablePermissions(Player player) {
|
||||
ChatBlock.sendMessage(player, AQUA + lang("available.rank.permissions", player));
|
||||
ChatBlock.sendMessage(player, AQUA + validPermissionsToMessage);
|
||||
}
|
||||
|
||||
@Default
|
||||
@CommandPermission("simpleclans.leader.rank.permissions.list")
|
||||
@CommandCompletion("@ranks")
|
||||
@Description("{@@command.description.rank.permissions.rank}")
|
||||
public void list(Player player, @Name("rank") Rank rank) {
|
||||
Set<String> permissions = rank.getPermissions();
|
||||
if (permissions.isEmpty()) {
|
||||
ChatBlock.sendMessage(player, RED + lang("rank.no.permissions", player));
|
||||
return;
|
||||
}
|
||||
ChatBlock.sendMessage(player, AQUA + lang("rank.0.permissions", player, rank.getDisplayName()));
|
||||
ChatBlock.sendMessage(player, AQUA + String.join(",", permissions));
|
||||
}
|
||||
|
||||
@Subcommand("%add")
|
||||
@CommandPermission("simpleclans.leader.rank.permissions.add")
|
||||
@CommandCompletion("@ranks @rank_permissions")
|
||||
@Description("{@@command.description.rank.permissions.add}")
|
||||
public void add(Player player,
|
||||
Clan clan,
|
||||
@Name("rank") Rank rank,
|
||||
@Values("@rank_permissions") @Name("permission") String permission) {
|
||||
Set<String> permissions = rank.getPermissions();
|
||||
permissions.add(permission);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("permission.0.added.to.rank.1", player, permission,
|
||||
rank.getDisplayName()));
|
||||
storage.updateClan(clan, true);
|
||||
}
|
||||
|
||||
@Subcommand("%remove")
|
||||
@CommandCompletion("@ranks @rank_permissions")
|
||||
@CommandPermission("simpleclans.leader.rank.permissions.remove")
|
||||
@Description("{@@command.description.rank.permissions.remove}")
|
||||
public void remove(Player player,
|
||||
Clan clan,
|
||||
@Name("rank") Rank rank,
|
||||
@Values("@rank_permissions") @Name("permission") String permission) {
|
||||
Set<String> permissions = rank.getPermissions();
|
||||
permissions.remove(permission);
|
||||
ChatBlock.sendMessage(player, AQUA + lang("permission.0.removed.from.rank.1", player,
|
||||
permission, rank.getDisplayName()));
|
||||
storage.updateClan(clan, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static org.bukkit.ChatColor.AQUA;
|
||||
|
||||
@CommandAlias("%clan")
|
||||
@Subcommand("%toggle")
|
||||
@Conditions("%basic_conditions")
|
||||
public class ToggleCommand extends BaseCommand {
|
||||
|
||||
@Dependency
|
||||
private StorageManager storage;
|
||||
|
||||
@Conditions("verified")
|
||||
public class Verified extends BaseCommand {
|
||||
|
||||
@Subcommand("%bb")
|
||||
@CommandPermission("simpleclans.member.bb-toggle")
|
||||
@Description("{@@command.description.toggle.bb}")
|
||||
public void bb(Player player, ClanPlayer cp) {
|
||||
toggle(player, "bbon", "bboff", cp.isBbEnabled(), cp::setBbEnabled);
|
||||
}
|
||||
|
||||
@Subcommand("%tag")
|
||||
@CommandPermission("simpleclans.member.tag-toggle")
|
||||
@Description("{@@command.description.toggle.tag}")
|
||||
public void tag(Player player, ClanPlayer cp) {
|
||||
toggle(player, "tagon", "tagoff", cp.isTagEnabled(), cp::setTagEnabled);
|
||||
}
|
||||
|
||||
@Subcommand("%deposit")
|
||||
@CommandPermission("simpleclans.leader.deposit-toggle")
|
||||
@Conditions("leader")
|
||||
@Description("{@@command.description.toggle.deposit}")
|
||||
public void deposit(Player player, Clan clan) {
|
||||
toggle(player, "depositon", "depositoff", clan.isAllowDeposit(),
|
||||
clan::setAllowDeposit);
|
||||
|
||||
storage.updateClan(clan);
|
||||
}
|
||||
|
||||
@Subcommand("%fee")
|
||||
@CommandPermission("simpleclans.leader.fee")
|
||||
@Conditions("rank:name=FEE_ENABLE|change_fee")
|
||||
@Description("{@@command.description.toggle.fee}")
|
||||
public void fee(Player player, Clan clan) {
|
||||
toggle(player, "feeon", "feeoff", clan.isMemberFeeEnabled(),
|
||||
clan::setMemberFeeEnabled);
|
||||
|
||||
storage.updateClan(clan);
|
||||
}
|
||||
|
||||
@Subcommand("%withdraw")
|
||||
@CommandPermission("simpleclans.leader.withdraw-toggle")
|
||||
@Conditions("leader")
|
||||
@Description("{@@command.description.toggle.withdraw}")
|
||||
public void withdraw(Player player, Clan clan) {
|
||||
toggle(player, "withdrawon", "withdrawoff", clan.isAllowWithdraw(),
|
||||
clan::setAllowWithdraw);
|
||||
|
||||
storage.updateClan(clan);
|
||||
}
|
||||
}
|
||||
|
||||
@Subcommand("%invite")
|
||||
@CommandPermission("simpleclans.anyone.invite-toggle")
|
||||
@Description("{@@command.description.toggle.invite}")
|
||||
public void invite(Player player, ClanPlayer cp) {
|
||||
toggle(player, "inviteon", "inviteoff", cp.isInviteEnabled(), cp::setInviteEnabled);
|
||||
}
|
||||
|
||||
private void toggle(CommandSender sender, String onMessageKey, String offMessageKey, boolean status,
|
||||
Consumer<Boolean> consumer) {
|
||||
String messageOn = AQUA + lang(onMessageKey, sender);
|
||||
String messageOff = AQUA + lang(offMessageKey, sender);
|
||||
|
||||
ChatBlock.sendMessage(sender, status ? messageOff : messageOn);
|
||||
consumer.accept(!status);
|
||||
}
|
||||
}
|
||||
+4
-9
@@ -1,18 +1,13 @@
|
||||
package net.trueog.unionsog.commands.completions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler;
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class AbstractAsyncCompletion extends AbstractCompletion
|
||||
implements AsyncCommandCompletionHandler<BukkitCommandCompletionContext>
|
||||
{
|
||||
|
||||
public AbstractAsyncCompletion(@NotNull UnionsOG plugin) {
|
||||
|
||||
implements AsyncCommandCompletionHandler<BukkitCommandCompletionContext> {
|
||||
public AbstractAsyncCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class AbstractCompletion implements IdentifiableCompletion {
|
||||
|
||||
protected final SimpleClans plugin;
|
||||
protected final ClanManager clanManager;
|
||||
|
||||
public AbstractCompletion(@NotNull SimpleClans plugin) {
|
||||
this.plugin = plugin;
|
||||
this.clanManager = plugin.getClanManager();
|
||||
}
|
||||
}
|
||||
+3
-5
@@ -1,16 +1,14 @@
|
||||
package net.trueog.unionsog.commands.completions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public abstract class AbstractStaticCompletion extends AbstractCompletion {
|
||||
|
||||
public AbstractStaticCompletion(@NotNull UnionsOG plugin) {
|
||||
|
||||
public AbstractStaticCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
+4
-9
@@ -1,18 +1,13 @@
|
||||
package net.trueog.unionsog.commands.completions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.CommandCompletions.CommandCompletionHandler;
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class AbstractSyncCompletion extends AbstractCompletion
|
||||
implements CommandCompletionHandler<BukkitCommandCompletionContext>
|
||||
{
|
||||
|
||||
public AbstractSyncCompletion(@NotNull UnionsOG plugin) {
|
||||
|
||||
implements CommandCompletionHandler<BukkitCommandCompletionContext> {
|
||||
public AbstractSyncCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+8
-15
@@ -1,36 +1,29 @@
|
||||
package net.trueog.unionsog.commands.completions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.trueog.unionsog.UnionPlayer;
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class AllMembersCompletion extends AbstractSyncCompletion {
|
||||
|
||||
public AllMembersCompletion(@NotNull UnionsOG plugin) {
|
||||
|
||||
public class AllLeadersCompletion extends AbstractSyncCompletion {
|
||||
public AllLeadersCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getCompletions(BukkitCommandCompletionContext context) throws InvalidCommandArgument {
|
||||
|
||||
return unionManager.getAllUnionPlayers().stream().filter(cp -> cp.getUnion() != null).map(UnionPlayer::getName)
|
||||
return clanManager
|
||||
.getAllClanPlayers().stream().filter(ClanPlayer::isLeader).map(ClanPlayer::getName)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
|
||||
return "all_members";
|
||||
|
||||
return "all_leaders";
|
||||
}
|
||||
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class AllNonLeadersCompletion extends AbstractSyncCompletion {
|
||||
public AllNonLeadersCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getCompletions(BukkitCommandCompletionContext context) throws InvalidCommandArgument {
|
||||
return clanManager
|
||||
.getAllClanPlayers().stream().filter(cp -> !cp.isLeader() && cp.getClan() != null)
|
||||
.map(ClanPlayer::getName).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
return "all_non_leaders";
|
||||
}
|
||||
}
|
||||
+9
-22
@@ -1,9 +1,9 @@
|
||||
package net.trueog.unionsog.commands.completions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.trueog.unionsog.Union;
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -11,38 +11,25 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class AlliedUnionsCompletion extends AbstractSyncCompletion {
|
||||
|
||||
public AlliedUnionsCompletion(@NotNull UnionsOG plugin) {
|
||||
|
||||
public class AlliedClansCompletion extends AbstractSyncCompletion {
|
||||
public AlliedClansCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getCompletions(BukkitCommandCompletionContext context) throws InvalidCommandArgument {
|
||||
|
||||
Player player = context.getPlayer();
|
||||
if (player != null) {
|
||||
|
||||
Union union = unionManager.getUnionByPlayerUniqueId(player.getUniqueId());
|
||||
if (union != null) {
|
||||
|
||||
return union.getAllies();
|
||||
|
||||
Clan clan = clanManager.getClanByPlayerUniqueId(player.getUniqueId());
|
||||
if (clan != null) {
|
||||
return clan.getAllies();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return Collections.emptyList();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
|
||||
return "allied_unions";
|
||||
|
||||
return "allied_clans";
|
||||
}
|
||||
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class ClanLeadersCompletion extends AbstractSyncCompletion {
|
||||
public ClanLeadersCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getCompletions(BukkitCommandCompletionContext c) throws InvalidCommandArgument {
|
||||
Player player = c.getPlayer();
|
||||
if (player != null) {
|
||||
Clan clan = clanManager.getClanByPlayerUniqueId(player.getUniqueId());
|
||||
if (clan != null) {
|
||||
return clan.getLeaders().stream().map(ClanPlayer::getName).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
return "clan_leaders";
|
||||
}
|
||||
}
|
||||
+10
-26
@@ -1,10 +1,10 @@
|
||||
package net.trueog.unionsog.commands.completions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.trueog.unionsog.Union;
|
||||
import net.trueog.unionsog.UnionPlayer;
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -14,45 +14,29 @@ import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class UnionMembersCompletion extends AbstractSyncCompletion {
|
||||
|
||||
public UnionMembersCompletion(@NotNull UnionsOG plugin) {
|
||||
|
||||
public class ClanMembersCompletion extends AbstractSyncCompletion {
|
||||
public ClanMembersCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getCompletions(BukkitCommandCompletionContext c) throws InvalidCommandArgument {
|
||||
|
||||
Player player = c.getPlayer();
|
||||
if (player != null) {
|
||||
|
||||
Union union = unionManager.getUnionByPlayerUniqueId(player.getUniqueId());
|
||||
if (union != null) {
|
||||
|
||||
List<String> list = union.getMembers().stream().map(UnionPlayer::getName).collect(Collectors.toList());
|
||||
Clan clan = clanManager.getClanByPlayerUniqueId(player.getUniqueId());
|
||||
if (clan != null) {
|
||||
List<String> list = clan.getMembers().stream().map(ClanPlayer::getName).collect(Collectors.toList());
|
||||
if (c.hasConfig("hide_own")) {
|
||||
|
||||
list.remove(player.getName());
|
||||
|
||||
}
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return Collections.emptyList();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
|
||||
return "union_members";
|
||||
|
||||
return "clan_members";
|
||||
}
|
||||
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ClanNonLeadersCompletion extends AbstractSyncCompletion {
|
||||
public ClanNonLeadersCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getCompletions(BukkitCommandCompletionContext c) throws InvalidCommandArgument {
|
||||
Player player = c.getPlayer();
|
||||
if (player != null) {
|
||||
Clan clan = clanManager.getClanByPlayerUniqueId(player.getUniqueId());
|
||||
if (clan != null) {
|
||||
return clan.getNonLeaders().stream().map(ClanPlayer::getName).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
return Collections.emptyList(); }
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
return "clan_non_leaders";
|
||||
}
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.CommandIssuer;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class ClansCompletion extends AbstractSyncCompletion {
|
||||
public ClansCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getCompletions(BukkitCommandCompletionContext c) throws InvalidCommandArgument {
|
||||
List<Clan> clans = clanManager.getClans();
|
||||
if (c.hasConfig("has_home")) {
|
||||
clans.removeIf(clan -> clan.getHomeLocation() == null);
|
||||
}
|
||||
if (c.hasConfig("unverified")) {
|
||||
clans.removeIf(Clan::isVerified);
|
||||
}
|
||||
if (c.hasConfig("hide_own")) {
|
||||
Clan clan = getClan(c.getIssuer());
|
||||
if (clan != null) {
|
||||
clans.remove(clan);
|
||||
}
|
||||
}
|
||||
return clans.stream().map(Clan::getTag).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
return "clans";
|
||||
}
|
||||
|
||||
private @Nullable Clan getClan(CommandIssuer issuer) {
|
||||
return clanManager.getClanByPlayerUniqueId(issuer.getUniqueId());
|
||||
}
|
||||
}
|
||||
+1
-2
@@ -1,4 +1,4 @@
|
||||
package net.trueog.unionsog.commands.completions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -6,5 +6,4 @@ public interface IdentifiableCompletion {
|
||||
|
||||
@NotNull
|
||||
String getId();
|
||||
|
||||
}
|
||||
+7
-14
@@ -1,35 +1,28 @@
|
||||
package net.trueog.unionsog.commands.completions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
import static net.trueog.unionsog.UnionsOG.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ListTypeCompletion extends AbstractStaticCompletion {
|
||||
|
||||
public ListTypeCompletion(@NotNull UnionsOG plugin) {
|
||||
|
||||
public ListTypeCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Collection<String> getCompletions() {
|
||||
|
||||
return Arrays.asList(lang("list.type.size"), lang("list.type.kdr"), lang("list.type.name"),
|
||||
return Arrays.asList(
|
||||
lang("list.type.size"), lang("list.type.kdr"), lang("list.type.name"),
|
||||
lang("list.type.founded"), lang("list.type.active"));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
|
||||
return "union_list_type";
|
||||
|
||||
return "clan_list_type";
|
||||
}
|
||||
|
||||
}
|
||||
+5
-20
@@ -1,9 +1,9 @@
|
||||
package net.trueog.unionsog.commands.completions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.trueog.unionsog.utils.VanishUtils;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -13,42 +13,27 @@ import java.util.Collection;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class NonMembersCompletion extends AbstractSyncCompletion {
|
||||
|
||||
public NonMembersCompletion(@NotNull UnionsOG plugin) {
|
||||
|
||||
public NonMembersCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
|
||||
return "non_members";
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getCompletions(BukkitCommandCompletionContext c) throws InvalidCommandArgument {
|
||||
|
||||
Collection<String> onlinePlayers = new ArrayList<>();
|
||||
|
||||
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
||||
|
||||
boolean vanished = VanishUtils.isVanished(c.getSender(), onlinePlayer);
|
||||
if (unionManager.getUnionByPlayerUniqueId(onlinePlayer.getUniqueId()) != null
|
||||
|| (c.hasConfig("ignore_vanished") && vanished))
|
||||
{
|
||||
|
||||
if (clanManager.getClanByPlayerUniqueId(onlinePlayer.getUniqueId()) != null || (c.hasConfig("ignore_vanished") && vanished)) {
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
onlinePlayers.add(onlinePlayer.getName());
|
||||
|
||||
}
|
||||
|
||||
return onlinePlayers;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+4
-12
@@ -1,34 +1,26 @@
|
||||
package net.trueog.unionsog.commands.completions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
import static net.trueog.unionsog.UnionsOG.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class OrderCompletion extends AbstractStaticCompletion {
|
||||
|
||||
public OrderCompletion(@NotNull UnionsOG plugin) {
|
||||
|
||||
public OrderCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Collection<String> getCompletions() {
|
||||
|
||||
return Arrays.asList(lang("list.order.asc"), lang("list.order.desc"));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
|
||||
return "order";
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Helper;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class RankPermissionsCompletion extends AbstractStaticCompletion {
|
||||
public RankPermissionsCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Collection<String> getCompletions() {
|
||||
return Arrays.asList(Helper.fromPermissionArray());
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
return "rank_permissions";
|
||||
}
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Rank;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class RanksCompletion extends AbstractSyncCompletion {
|
||||
public RanksCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getCompletions(BukkitCommandCompletionContext context) throws InvalidCommandArgument {
|
||||
Player player = context.getPlayer();
|
||||
if (player != null) {
|
||||
Clan clan = clanManager.getClanByPlayerUniqueId(player.getUniqueId());
|
||||
if (clan != null) {
|
||||
return clan.getRanks().stream().map(Rank::getName).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
return Collections.emptyList(); }
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
return "ranks";
|
||||
}
|
||||
}
|
||||
+7
-20
@@ -1,9 +1,9 @@
|
||||
package net.trueog.unionsog.commands.completions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.trueog.unionsog.Union;
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -12,37 +12,24 @@ import java.util.Collections;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class RivalsCompletion extends AbstractSyncCompletion {
|
||||
|
||||
public RivalsCompletion(@NotNull UnionsOG plugin) {
|
||||
|
||||
public RivalsCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getCompletions(BukkitCommandCompletionContext c) throws InvalidCommandArgument {
|
||||
|
||||
Player player = c.getPlayer();
|
||||
if (player != null) {
|
||||
|
||||
Union union = unionManager.getUnionByPlayerUniqueId(player.getUniqueId());
|
||||
if (union != null) {
|
||||
|
||||
return union.getRivals();
|
||||
|
||||
Clan clan = clanManager.getClanByPlayerUniqueId(player.getUniqueId());
|
||||
if (clan != null) {
|
||||
return clan.getRivals();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return Collections.emptyList();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
|
||||
return "rivals";
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+9
-22
@@ -1,9 +1,9 @@
|
||||
package net.trueog.unionsog.commands.completions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandCompletionContext;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.trueog.unionsog.Union;
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -12,38 +12,25 @@ import java.util.Collections;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class WarringUnionsCompletion extends AbstractSyncCompletion {
|
||||
|
||||
public WarringUnionsCompletion(@NotNull UnionsOG plugin) {
|
||||
|
||||
public class WarringClansCompletion extends AbstractSyncCompletion {
|
||||
public WarringClansCompletion(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getCompletions(BukkitCommandCompletionContext c) throws InvalidCommandArgument {
|
||||
|
||||
if (c.getIssuer().isPlayer()) {
|
||||
|
||||
Player player = c.getPlayer();
|
||||
Union union = unionManager.getUnionByPlayerUniqueId(player.getUniqueId());
|
||||
if (union != null) {
|
||||
|
||||
return union.getWarringUnions().stream().map(Union::getTag).collect(Collectors.toList());
|
||||
|
||||
Clan clan = clanManager.getClanByPlayerUniqueId(player.getUniqueId());
|
||||
if (clan != null) {
|
||||
return clan.getWarringClans().stream().map(Clan::getTag).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return Collections.emptyList();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
|
||||
return "warring_unions";
|
||||
|
||||
return "warring_clans";
|
||||
}
|
||||
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandIssuer;
|
||||
import co.aikar.commands.CommandConditions;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class AbstractCommandCondition extends AbstractCondition implements CommandConditions.Condition<BukkitCommandIssuer> {
|
||||
public AbstractCommandCondition(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
}
|
||||
+7
-10
@@ -1,27 +1,24 @@
|
||||
package net.trueog.unionsog.commands.conditions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
|
||||
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.trueog.unionsog.managers.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.managers.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class AbstractCondition implements IdentifiableCondition {
|
||||
|
||||
protected final UnionsOG plugin;
|
||||
protected final SimpleClans plugin;
|
||||
protected final PermissionsManager permissionsManager;
|
||||
protected final UnionManager unionManager;
|
||||
protected final ClanManager clanManager;
|
||||
protected final RequestManager requestManager;
|
||||
protected final SettingsManager settingsManager;
|
||||
protected final ProtectionManager protectionManager;
|
||||
|
||||
public AbstractCondition(@NotNull UnionsOG plugin) {
|
||||
|
||||
public AbstractCondition(@NotNull SimpleClans plugin) {
|
||||
this.plugin = plugin;
|
||||
permissionsManager = plugin.getPermissionsManager();
|
||||
unionManager = plugin.getUnionManager();
|
||||
clanManager = plugin.getClanManager();
|
||||
requestManager = plugin.getRequestManager();
|
||||
settingsManager = plugin.getSettingsManager();
|
||||
protectionManager = plugin.getProtectionManager();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+5
-10
@@ -1,21 +1,16 @@
|
||||
package net.trueog.unionsog.commands.conditions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandExecutionContext;
|
||||
import co.aikar.commands.BukkitCommandIssuer;
|
||||
import co.aikar.commands.CommandConditions;
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class AbstractParameterCondition<T> extends AbstractCondition
|
||||
implements CommandConditions.ParameterCondition<T, BukkitCommandExecutionContext, BukkitCommandIssuer>
|
||||
{
|
||||
|
||||
public AbstractParameterCondition(@NotNull UnionsOG plugin) {
|
||||
|
||||
public abstract class AbstractParameterCondition<T> extends AbstractCondition implements CommandConditions.ParameterCondition<T,
|
||||
BukkitCommandExecutionContext, BukkitCommandIssuer> {
|
||||
public AbstractParameterCondition(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
public abstract Class<T> getType();
|
||||
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
|
||||
|
||||
import co.aikar.commands.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanInput;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static org.bukkit.ChatColor.RED;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class AlliedClanCondition extends AbstractParameterCondition<ClanInput> {
|
||||
public AlliedClanCondition(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<ClanInput> getType() {
|
||||
return ClanInput.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateCondition(ConditionContext<BukkitCommandIssuer> context,
|
||||
BukkitCommandExecutionContext execContext,
|
||||
ClanInput value) throws InvalidCommandArgument {
|
||||
BukkitCommandIssuer issuer = context.getIssuer();
|
||||
Clan clan = Conditions.assertClanMember(clanManager, issuer);
|
||||
if (!clan.isAlly(value.getClan().getTag())) {
|
||||
throw new ConditionFailedException(RED + lang("your.clans.are.not.allies", issuer));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
return "allied_clan";
|
||||
}
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandIssuer;
|
||||
import co.aikar.commands.ConditionContext;
|
||||
import co.aikar.commands.ConditionFailedException;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static java.time.temporal.ChronoUnit.MINUTES;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class CanChangeFeeCondition extends AbstractCommandCondition {
|
||||
|
||||
private static final float HOUR_IN_MINUTES = 60;
|
||||
|
||||
public CanChangeFeeCondition(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateCondition(ConditionContext<BukkitCommandIssuer> context) throws InvalidCommandArgument {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
LocalDateTime collectTime = getCollectTime();
|
||||
long interval = now.until(collectTime, MINUTES);
|
||||
if (interval <= settingsManager.getInt(ECONOMY_MEMBER_FEE_LAST_MINUTE_CHANGE_INTERVAL) * HOUR_IN_MINUTES) {
|
||||
BukkitCommandIssuer issuer = context.getIssuer();
|
||||
String error = lang("cannot.change.member.fee.now", issuer);
|
||||
if (interval <= 60) {
|
||||
error += lang("cannot.change.member.fee.minutes", issuer, interval);
|
||||
} else {
|
||||
error += lang("cannot.change.member.fee.hours", issuer, Math.ceil(interval / HOUR_IN_MINUTES));
|
||||
}
|
||||
throw new ConditionFailedException(error);
|
||||
}
|
||||
}
|
||||
|
||||
private LocalDateTime getCollectTime() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
LocalDateTime collectTime = now.withHour(settingsManager.getInt(TASKS_COLLECT_FEE_HOUR))
|
||||
.withMinute(settingsManager.getInt(TASKS_COLLECT_FEE_MINUTE));
|
||||
if (collectTime.isBefore(now)) {
|
||||
collectTime = collectTime.plusDays(1);
|
||||
}
|
||||
return collectTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
return "change_fee";
|
||||
}
|
||||
}
|
||||
+5
-15
@@ -1,41 +1,31 @@
|
||||
package net.trueog.unionsog.commands.conditions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandIssuer;
|
||||
import co.aikar.commands.ConditionContext;
|
||||
import co.aikar.commands.ConditionFailedException;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static net.trueog.unionsog.UnionsOG.lang;
|
||||
import static net.trueog.unionsog.managers.SettingsManager.ConfigField;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField;
|
||||
|
||||
public class CanChatCondition extends AbstractCommandCondition {
|
||||
|
||||
public CanChatCondition(@NotNull UnionsOG plugin) {
|
||||
|
||||
public CanChatCondition(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateCondition(ConditionContext<BukkitCommandIssuer> context) throws InvalidCommandArgument {
|
||||
|
||||
String type = context.getConfigValue("type", (String) null).toUpperCase();
|
||||
ConfigField chatEnabled = ConfigField.valueOf(type + "CHAT_ENABLE");
|
||||
if (!settingsManager.is(chatEnabled)) {
|
||||
|
||||
throw new ConditionFailedException(lang(type.toLowerCase() + ".chat.disabled", context.getIssuer()));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
|
||||
return "can_chat";
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+14
-32
@@ -1,64 +1,46 @@
|
||||
package net.trueog.unionsog.commands.conditions;
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandIssuer;
|
||||
import co.aikar.commands.ConditionContext;
|
||||
import co.aikar.commands.ConditionFailedException;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.trueog.unionsog.Union;
|
||||
import net.trueog.unionsog.UnionPlayer;
|
||||
import net.trueog.unionsog.UnionsOG;
|
||||
import co.aikar.commands.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static net.trueog.unionsog.UnionsOG.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static org.bukkit.ChatColor.RED;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class CanVoteCondition extends AbstractCommandCondition {
|
||||
|
||||
public CanVoteCondition(@NotNull UnionsOG plugin) {
|
||||
|
||||
public CanVoteCondition(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateCondition(ConditionContext<BukkitCommandIssuer> context) throws InvalidCommandArgument {
|
||||
|
||||
Player player = Conditions.assertPlayer(context.getIssuer());
|
||||
UnionPlayer cp = unionManager.getCreateUnionPlayer(player.getUniqueId());
|
||||
Union union = cp.getUnion();
|
||||
if (union != null) {
|
||||
|
||||
if (!requestManager.hasRequest(union.getTag())) {
|
||||
|
||||
ClanPlayer cp = clanManager.getCreateClanPlayer(player.getUniqueId());
|
||||
Clan clan = cp.getClan();
|
||||
if (clan != null) {
|
||||
if (!requestManager.hasRequest(clan.getTag())) {
|
||||
throw new ConditionFailedException(lang("nothing.to.vote", player));
|
||||
|
||||
}
|
||||
|
||||
if (!clan.isLeader(player)) {
|
||||
throw new ConditionFailedException(RED + lang("no.leader.permissions", player));
|
||||
}
|
||||
if (cp.getVote() != null) {
|
||||
|
||||
throw new ConditionFailedException(RED + lang("you.have.already.voted", player));
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if (!requestManager.hasRequest(player.getName().toLowerCase())) {
|
||||
|
||||
throw new ConditionFailedException(lang("nothing.to.vote", player));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
|
||||
return "can_vote";
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
|
||||
|
||||
import co.aikar.commands.*;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.Clan;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanInput;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.WAR_MAX_MEMBERS_DIFFERENCE;
|
||||
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.WAR_START_REQUEST_ENABLED;
|
||||
|
||||
public class CanWarTargetCondition extends AbstractParameterCondition<ClanInput> {
|
||||
public CanWarTargetCondition(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<ClanInput> getType() {
|
||||
return ClanInput.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateCondition(ConditionContext<BukkitCommandIssuer> context, BukkitCommandExecutionContext execContext, ClanInput target) throws InvalidCommandArgument {
|
||||
BukkitCommandIssuer issuer = execContext.getIssuer();
|
||||
Clan issuerClan = Conditions.assertClanMember(clanManager, issuer);
|
||||
Clan targetClan = target.getClan();
|
||||
|
||||
if (!issuerClan.isRival(targetClan.getTag())) {
|
||||
throw new ConditionFailedException(lang("you.can.only.start.war.with.rivals", issuer));
|
||||
}
|
||||
|
||||
if (issuerClan.isWarring(targetClan)) {
|
||||
throw new ConditionFailedException(lang("clans.already.at.war", issuer));
|
||||
}
|
||||
|
||||
boolean isWarRequestEnabled = settingsManager.is(WAR_START_REQUEST_ENABLED);
|
||||
int maxDifference = settingsManager.getInt(WAR_MAX_MEMBERS_DIFFERENCE);
|
||||
|
||||
if (!isWarRequestEnabled && maxDifference >= 0) {
|
||||
int difference = Math.abs(issuerClan.getOnlineMembers().size() - targetClan.getOnlineMembers().size());
|
||||
if (difference > maxDifference)
|
||||
throw new ConditionFailedException(lang("you.cant.start.war.online.members.difference", issuer));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
return "can_war_target";
|
||||
}
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
|
||||
|
||||
import co.aikar.commands.BukkitCommandExecutionContext;
|
||||
import co.aikar.commands.BukkitCommandIssuer;
|
||||
import co.aikar.commands.ConditionContext;
|
||||
import co.aikar.commands.InvalidCommandArgument;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
|
||||
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ClanMemberCondition extends AbstractParameterCondition<ClanPlayer> {
|
||||
public ClanMemberCondition(@NotNull SimpleClans plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<ClanPlayer> getType() {
|
||||
return ClanPlayer.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateCondition(ConditionContext<BukkitCommandIssuer> context,
|
||||
BukkitCommandExecutionContext execContext, ClanPlayer value)
|
||||
throws InvalidCommandArgument {
|
||||
Conditions.assertClanMember(clanManager, context.getIssuer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
return "clan_member";
|
||||
}
|
||||
}
|
||||
Loaded 100 of 505 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user