Compare commits

...

99 Commits

Author SHA1 Message Date
renovate[bot] 689d4a4fe9
chore(deps): Update dependency io.netty:netty-all to v4.1.87.Final 2023-01-14 03:18:36 +00:00
renovate[bot] f0671fb8b8
chore(deps): Update dependency com.google.code.gson:gson to v2.10.1 2023-01-07 02:41:15 +00:00
renovate[bot] 9cf6d9e991
chore(deps): Update dependency io.netty:netty-all to v4.1.86.Final 2022-12-17 01:14:35 +00:00
Tad Hunt b0a93c2c35
feat: make the portal reload command usable from the console and rcon (#338) 2022-12-15 11:40:15 +00:00
renovate[bot] 5229339a8c
chore(deps): Update dependency com.sk89q.worldedit:worldedit-bukkit to v7.2.13 2022-12-11 06:44:06 +00:00
renovate[bot] 1a759dcc76
chore(deps): Update Deps to v4.5.14 2022-12-04 13:32:31 +00:00
renovate[bot] 93a6aface2
chore(deps): Update dependency gradle to v7.6 2022-11-26 01:53:29 +00:00
renovate[bot] 0b64f47b8a
chore(deps): Update dependency io.netty:netty-all to v4.1.85.Final 2022-11-12 02:01:15 +00:00
renovate[bot] 617ccfd66a
chore(deps): Update dependency com.google.code.gson:gson to v2.10 2022-10-29 01:42:02 +00:00
Osiris-Team e808668fce
fix: updated author name, fixes #334 and #326 (#335)
* Update bungee.yml

* Update plugin.yml

* Update AdvancedPortalsPlugin.java
2022-10-24 12:11:57 +01:00
renovate[bot] 91d52b8c1b
chore(deps): Update dependency io.netty:netty-all to v4.1.84.Final 2022-10-15 00:12:25 +00:00
renovate[bot] eb71f1c1d1
chore(deps): Update Deps 2022-09-17 00:16:56 +00:00
renovate[bot] 15956b4844
chore(deps): Update dependency io.netty:netty-all to v4.1.81.Final 2022-09-10 01:14:53 +00:00
renovate[bot] 4f60d8e319
chore(deps): Update dependency io.netty:netty-all to v4.1.80.Final 2022-08-27 01:30:51 +00:00
renovate[bot] f5f06167db
chore(deps): Update dependency com.sk89q.worldedit:worldedit-bukkit to v7.2.12 2022-08-07 11:15:02 +00:00
renovate[bot] 0f595fac7d
chore(deps): Update Deps 2022-08-06 00:44:07 +00:00
renovate[bot] 051fc6c92e
chore(deps): Update dependency com.sk89q.worldedit:worldedit-bukkit to v7.2.11 2022-07-30 10:40:54 +00:00
renovate[bot] 22483ac052
chore(deps): Update Deps to v10.37.4 2022-07-30 01:35:48 +00:00
renovate[bot] 51aa6dac47
chore(deps): Update Deps 2022-07-16 00:48:28 +00:00
renovate[bot] 029f117fc1
chore(deps): Update dependency io.netty:netty-all to v4.1.78.Final 2022-06-18 00:46:05 +00:00
Renovate Bot 87cd76cdeb
chore(deps): Update Deps to v10.37.1 2022-05-28 02:31:30 +00:00
Renovate Bot 34b0127f99
chore(deps): Update Deps to v10.37.0 2022-05-21 00:59:11 +00:00
Renovate Bot 7d3597faad
chore(deps): Update dependency io.netty:netty-all to v4.1.77.Final 2022-05-07 02:28:47 +00:00
Renovate Bot 58e7e3ad78
chore(deps): Update dependency io.netty:netty-all to v4.1.76.Final 2022-04-16 00:05:08 +00:00
Renovate Bot 6906772138
chore(deps): Update dependency gradle to v7.4.2 2022-04-02 00:10:40 +00:00
Renovate Bot 080aae4a9e
chore(deps): Update Deps to v10.36.5 2022-03-26 00:40:54 +00:00
Renovate Bot f6620ef2eb
chore(deps): Update Deps 2022-03-19 02:07:09 +00:00
Renovate Bot 05359480a3
chore(deps): Update Deps 2022-03-12 00:38:13 +00:00
Renovate Bot a317acce3d
chore(deps): Update Deps to v10.34.1 2022-03-05 21:00:38 +00:00
Renovate Bot 9b7c09955e
chore(deps): Update Deps to v10.34.0 2022-03-05 08:57:24 +00:00
Renovate Bot 8eb3a2926b
chore(deps): Update Deps to v10.33.1 2022-03-05 00:51:36 +00:00
Renovate Bot 71e67f2010 chore(deps): update actions/setup-java action to v3 2022-02-25 12:56:33 +00:00
Sekwah 5df74aae28 release version: 0.9.2 [skip ci] 2022-02-24 00:31:25 +00:00
Sekwah 4904d806be Update CHANGELOG.md [skip ci] 2022-02-24 00:31:21 +00:00
Sekwah 9a64ae58c7 fix: Removes the false positive warning from McAntiMalware
Fixes #300
2022-02-24 00:30:23 +00:00
Renovate Bot c504909668
chore(deps): Update Deps 2022-02-12 01:12:00 +00:00
Renovate Bot 5b79228be7
chore(deps): Update dependency com.sk89q.worldedit:worldedit-bukkit to v7.2.9 2022-02-05 02:05:11 +00:00
Renovate Bot 6ab4c363ac chore(deps): Update Deps 2022-01-20 20:01:53 +00:00
Renovate Bot 5751879abd
chore(deps): Update dependency gradle to v7.3.3 2021-12-25 00:30:32 +00:00
Renovate Bot 7d82fa3879
chore(deps): Update Deps 2021-12-18 01:19:17 +00:00
Sekwah 1bad72bbc2 release version: 0.9.1 [skip ci] 2021-12-17 02:09:11 +00:00
Sekwah f8bec4c1ee Update CHANGELOG.md [skip ci] 2021-12-17 02:09:07 +00:00
Sekwah 75d2be30fe fix: Error in position checks for portal creation 2021-12-17 02:08:24 +00:00
Sekwah 787c1d09b4
chore(ci): Update release support flags 2021-12-15 00:29:37 +00:00
Sekwah 20c56219f9 release version: 0.9.0 [skip ci] 2021-12-15 00:14:44 +00:00
Sekwah 778ad2ab31 Update CHANGELOG.md [skip ci] 2021-12-15 00:14:40 +00:00
JOO200 e3021367ab feat: WorldEdit Integration, fix logic error 2021-12-15 00:13:30 +00:00
JOO200 fdb22ab8b5 feat: Added WorldEdit Integration
* New config option to enable WorldEdit integration
* New command "/portal we-selection <name>" to select the Portal as WorldEdit selection
* When enabled: Create portals with WorldEdit selections, disable AdvancedPortal's Wand
2021-12-15 00:13:30 +00:00
JOO200 d16ccb7717 chore(deps): Update Velocity to 3.1.0 2021-12-15 00:13:30 +00:00
Renovate Bot 2207324598
chore(deps): Update Deps 2021-12-11 00:17:25 +00:00
Renovate Bot d916deb3a9
chore(deps): Update dependency gradle to v7.3.1 2021-12-04 00:03:50 +00:00
Sekwah 659fcca7ee docs: Update changelog
I assume the merge type messed up who was responsible for the pr. Try to use rebase and not squash.
2021-11-29 12:11:33 +00:00
Mohammed Al-Dahleh 3928922de3 feat: Adds ability to configure warp message 2021-11-29 12:00:25 +00:00
Sekwah a9e660db65
chore(ci): Allow manual triggering 2021-11-29 11:55:03 +00:00
Renovate Bot 486cff7e09
chore(deps): Update Deps to v10.32.3 2021-11-27 01:42:09 +00:00
Renovate Bot d09ad72491
chore(deps): Update dependency gradle to v7.3 2021-11-13 00:07:40 +00:00
Renovate Bot 7d5e96f291
chore(deps): Update dependency io.netty:netty-all to v4.1.70.Final 2021-11-06 02:18:42 +00:00
Sekwah 393ad01d45
chore(ci): Update to list 1.17 as supported automatically 2021-10-31 01:30:59 +01:00
Renovate Bot 71d08da9dc
chore(deps): Update Deps 2021-10-30 02:03:28 +00:00
Renovate Bot f225363e67
chore(deps): Update dependency io.netty:netty-all to v4.1.69.Final 2021-10-16 01:40:06 +00:00
Renovate Bot 162505553f
chore(deps): Update Deps to v10.32.1 2021-10-02 01:33:11 +00:00
Renovate Bot 812f4c78dc
chore(deps): Update Deps to v10.32.0 2021-09-18 01:11:04 +00:00
Renovate Bot 0ab32790eb
chore(deps): Update Deps 2021-09-11 00:37:54 +00:00
Renovate Bot 0be605fe3a
chore(deps): Update dependency com.velocitypowered:velocity-api to v1.1.9 2021-09-04 01:24:55 +00:00
Sekwah 64f0f5113e release version: 0.8.0 [skip ci] 2021-09-01 16:48:06 +00:00
Sekwah fb80fbb515 Update CHANGELOG.md [skip ci] 2021-09-01 16:48:03 +00:00
Sekwah 81d64ecc5a feat: Allow the ability to disable the proxy warning message 2021-09-01 17:46:58 +01:00
Renovate Bot aacf626635
chore(deps): Update Deps 2021-08-21 00:15:54 +00:00
Renovate Bot 12ab00f004
chore(deps): Update Deps 2021-08-14 01:05:18 +00:00
Renovate Bot 065fa22852
chore(deps): Update Deps 2021-07-25 15:07:59 +00:00
Sekwah 012ddf6e36
chore(ci): Update rennovate config 2021-07-25 16:04:48 +01:00
Sekwah 9b3adf7ba4 release version: 0.7.2 [skip ci] 2021-07-14 08:35:41 +00:00
Sekwah ab9dbe027e Update CHANGELOG.md [skip ci] 2021-07-14 08:35:38 +00:00
Sekwah 62307c6bcf fix: Issue where portal events activate too early in survival
Fixes #228
2021-07-14 09:34:36 +01:00
Renovate Bot e2b0723d24 chore(deps): update dependency com.velocitypowered:velocity-api to v1.1.9 2021-07-06 23:46:12 +01:00
Renovate Bot 1a57a509e6 chore(deps): update dependency gradle to v7.1.1 2021-07-04 12:18:30 +01:00
Sekwah ee8f0ff3d0 release version: 0.7.1 [skip ci] 2021-06-30 09:23:07 +00:00
Sekwah 05d2a51fbf Update CHANGELOG.md [skip ci] 2021-06-30 09:23:04 +00:00
Sekwah e73d84afa3 fix: Access to portal warp command locked behind wrong perm
Fixes #272
2021-06-30 10:22:12 +01:00
Renovate Bot d4b642ec23 chore(deps): update dependency gradle to v7 2021-06-29 13:26:03 +01:00
Sekwah bc683183f6 release version: 0.7.0 [skip ci] 2021-06-27 20:28:53 +00:00
Sekwah 3a5460cff3 Update CHANGELOG.md [skip ci] 2021-06-27 20:28:50 +00:00
Sekwah f364828176 feat: Added missing commands from tab complete 2021-06-27 21:28:11 +01:00
Renovate Bot dfe5cfc26d chore(deps): update dependency net.md-5:bungeecord-api to v1.16-r0.4 2021-06-27 21:11:27 +01:00
Sekwah ebd94fd081
chore(ci): removed verbose mode for release 2021-06-27 21:09:41 +01:00
Renovate Bot ffee4fbbbe chore(deps): update dependency com.google.code.gson:gson to v2.8.7 2021-06-27 21:07:20 +01:00
Renovate Bot dcf8456511 chore(deps): update dependency gradle to v6.9 2021-06-27 21:07:00 +01:00
Renovate Bot 1ac1fe7e2e chore(deps): update dependency com.velocitypowered:velocity-api to v1.1.8 2021-06-27 21:06:23 +01:00
Sekwah c51a556ac7 release version: 0.6.1 [skip ci] 2021-06-27 18:20:59 +00:00
Sekwah eafe7f1d9c Update CHANGELOG.md [skip ci] 2021-06-27 18:20:53 +00:00
Sekwah ff95908bf2 chore(ci): Remove isDevBranch remains 2021-06-27 19:18:51 +01:00
Sekwah d2e69771c5 chore(ci): Fix forgotten sha in build gradle 2021-06-27 19:14:04 +01:00
Sekwah 17a81dede7 chore(ci): Update version-bumping task order 2021-06-27 19:08:46 +01:00
Renovate Bot efc9ad4715 chore(deps): pin dependencies 2021-06-27 18:56:46 +01:00
Sekwah 7c78f414ac
fix: Spigot 1.17 error message (#260)
* chore(ci): Add renovate

* fix: 1.17 launch non-critical error

Fixes #259
2021-06-27 18:53:43 +01:00
Sekwah bfea4b2836
chore(ci): Swapping build pipeline 2021-06-27 18:31:52 +01:00
Sekwah b1be39b908
ci: Fixed java version 2021-05-21 00:23:06 +01:00
Sekwah 68ba7dc76b
ci: Fix changelog reference 2021-05-21 00:03:44 +01:00
Sekwah cd96c0d2c0
ci: Updated build pipelines to newer module 2021-05-21 00:03:31 +01:00
31 changed files with 3975 additions and 749 deletions

32
.autorc Normal file
View File

@ -0,0 +1,32 @@
{
"baseBranch": "spigot-1.13-1.16",
"plugins": [
[
"gradle",
{
"gradleCommand": "./gradlew",
"gradleOptions": [""]
}
],
[
"exec",
{
"canary": "./gradlew build discord"
}
],
["conventional-commits", { "preset": "angular" }],
"released",
["upload-assets", ["./build/libs/*.jar"]]
],
"owner": "sekwah41",
"repo": "Advanced-Portals",
"name": "Sekwah",
"email": "contact@sekwah.com",
"onlyPublishWithReleaseLabel": true,
"shipit": {
"onlyGraduateWithReleaseLabel": true
},
"canary": {
"message": "📦 Published PR to [discord](https://discord.sekwah.com/) as canary version: %v"
}
}

View File

@ -0,0 +1,8 @@
# What Changed
Whatever changed here
## Release Notes
If anything should be commented in the changelog release notes.
**NOTE:** Please remove this unless something important needs to be shared.
It's just to save time looking up what is needed in the event we need to.

View File

@ -1,12 +1,6 @@
name: Build Project
name: Release
on:
push:
branches:
- '**'
tags:
- '*'
pull_request:
on: [push, workflow_dispatch]
jobs:
build:
@ -15,25 +9,39 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Cache Gradle packages
uses: actions/cache@v2
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: ${{ runner.os }}-gradle
- name: Cache Node packages
uses: actions/cache@v2
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }}
restore-keys: ${{ runner.os }}-node
- name: Set up JDK 8
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: 8
- name: Use Node.js 12.x
uses: actions/setup-node@v2
with:
node-version: 12.x
- name: Prepare repository
run: |
git fetch --unshallow --tags
yarn install --frozen-lockfile
echo $(yarn bin) >> $GITHUB_PATH
- name: Build with Gradle
run: ./gradlew build
- name: Upload to Discord (If pre-release tag)
if: "startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '-')"
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
run: ./gradlew discordupload
- name: Publish to Curseforge (If release tag)
if: "startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, '-')"
- name: Create Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CURSE_API: ${{ secrets.CURSE_API }}
run: ./gradlew curseforge
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
run: |
auto shipit

3
.gitignore vendored
View File

@ -7,10 +7,11 @@
*.war
*.ear
node_modules/
*.iml
*.iws
*.ipr
.env
out/
logs/
classes/

View File

@ -1,51 +0,0 @@
let versionRegex = /(\nversion:\s)([0-9.-]+)/;
let velocityVersionRegex = /(\sversion\s=\s")([0-9.-]+)("\))/;
const ymlUpdater = {
updater: {
'readVersion': (contents) => {
return versionRegex.exec(contents)[2];
},
'writeVersion': (contents, version) => {
return contents.replace(versionRegex, `$1${version}`);
}
}
}
const bungee = {
filename: 'src/main/resources/bungee.yml',
...ymlUpdater,
}
const plugin = {
filename: 'src/main/resources/plugin.yml',
...ymlUpdater,
}
const velocity_plugin = {
filename: 'src/main/java/com/sekwah/advancedportals/velocity/AdvancedPortalsPlugin.java',
updater: {
'readVersion': (contents) => {
return velocityVersionRegex.exec(contents)[2];
},
'writeVersion': (contents, version) => {
return contents.replace(velocityVersionRegex, `$1${version}$3`);
}
}
}
const files = [plugin, velocity_plugin, bungee];
module.exports = {
bumpFiles: files,
packageFiles: files,
// In case you need to force a version change (mostly due to change of scope of the update e.g. major now instead of patch)
//releaseAs: '0.16.0',
header:"# Changelog\n" +
"\n" +
"All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.\n" +
"\n" +
"For the release changelogs see [CHANGELOG.md](CHANGELOG.md) \n" +
"For the snapshot changelogs see [SNAPSHOT_CHANGELOG.md](SNAPSHOT_CHANGELOG.md)\n",
}

240
CHANGELOG.md Normal file
View File

@ -0,0 +1,240 @@
# v0.9.2 (Thu Feb 24 2022)
#### 🐛 Bug Fix
- fix: Removes the false positive warning from McAntiMalware [#318](https://github.com/sekwah41/Advanced-Portals/pull/318) ([@sekwah41](https://github.com/sekwah41))
- chore(deps): Update Deps ([@renovate-bot](https://github.com/renovate-bot))
- chore(deps): Update dependency com.sk89q.worldedit:worldedit-bukkit to v7.2.9 ([@renovate-bot](https://github.com/renovate-bot))
- chore(deps): Update Deps [#316](https://github.com/sekwah41/Advanced-Portals/pull/316) ([@renovate-bot](https://github.com/renovate-bot))
- chore(deps): Update dependency gradle to v7.3.3 ([@renovate-bot](https://github.com/renovate-bot))
#### Authors: 2
- Sekwah ([@sekwah41](https://github.com/sekwah41))
- WhiteSource Renovate ([@renovate-bot](https://github.com/renovate-bot))
---
# v0.9.1 (Fri Dec 17 2021)
#### 🐛 Bug Fix
- fix: Error in position checks for portal creation [#310](https://github.com/sekwah41/Advanced-Portals/pull/310) ([@sekwah41](https://github.com/sekwah41))
- chore(ci): Update release support flags ([@sekwah41](https://github.com/sekwah41))
#### Authors: 1
- Sekwah ([@sekwah41](https://github.com/sekwah41))
---
# v0.9.0 (Wed Dec 15 2021)
#### 🚀 Enhancement
- feat: WorldEdit Integration, fix logic error [#307](https://github.com/sekwah41/Advanced-Portals/pull/307) ([@JOO200](https://github.com/JOO200))
- feat: Added WorldEdit Integration [#307](https://github.com/sekwah41/Advanced-Portals/pull/307) ([@JOO200](https://github.com/JOO200))
- feat: Adds ability to configure warp message [#302](https://github.com/sekwah41/Advanced-Portals/pull/302) ([@maldahleh](https://github.com/maldahleh))
#### 🐛 Bug Fix
- chore(deps): Update Velocity to 3.1.0 [#307](https://github.com/sekwah41/Advanced-Portals/pull/307) ([@JOO200](https://github.com/JOO200))
- chore(deps): Update Deps ([@renovate-bot](https://github.com/renovate-bot))
- chore(deps): Update dependency gradle to v7.3.1 ([@renovate-bot](https://github.com/renovate-bot))
- docs: Update changelog ([@sekwah41](https://github.com/sekwah41))
- chore(ci): Allow manual triggering ([@sekwah41](https://github.com/sekwah41))
- chore(deps): Update Deps to v10.32.3 ([@renovate-bot](https://github.com/renovate-bot))
- chore(deps): Update dependency gradle to v7.3 ([@renovate-bot](https://github.com/renovate-bot))
- chore(deps): Update dependency io.netty:netty-all to v4.1.70.Final ([@renovate-bot](https://github.com/renovate-bot))
- chore(ci): Update to list 1.17 as supported automatically ([@sekwah41](https://github.com/sekwah41))
- chore(deps): Update dependency io.netty:netty-all to v4.1.69.Final ([@renovate-bot](https://github.com/renovate-bot))
- chore(deps): Update Deps to v10.32.1 ([@renovate-bot](https://github.com/renovate-bot))
- chore(deps): Update Deps to v10.32.0 ([@renovate-bot](https://github.com/renovate-bot))
- chore(deps): Update dependency com.velocitypowered:velocity-api to v1.1.9 ([@renovate-bot](https://github.com/renovate-bot))
#### Authors: 4
- [@JOO200](https://github.com/JOO200)
- Mohammed Al-Dahleh ([@maldahleh](https://github.com/maldahleh))
- Sekwah ([@sekwah41](https://github.com/sekwah41))
- WhiteSource Renovate ([@renovate-bot](https://github.com/renovate-bot))
---
# v0.8.0 (Wed Sep 01 2021)
#### 🚀 Enhancement
- feat: Allow the ability to disable the proxy warning message [#292](https://github.com/sekwah41/Advanced-Portals/pull/292) ([@maldahleh](https://github.com/maldahleh))
#### 🐛 Bug Fix
- chore(deps): Update Deps ([@renovate-bot](https://github.com/renovate-bot))
- chore(ci): Update rennovate config ([@sekwah41](https://github.com/sekwah41))
#### Authors: 2
- Mohammed Al-Dahleh ([@maldahleh](https://github.com/maldahleh))
- WhiteSource Renovate ([@renovate-bot](https://github.com/renovate-bot))
---
# v0.7.2 (Wed Jul 14 2021)
#### 🐛 Bug Fix
- fix: Issue where portal events activate too early in survival [#280](https://github.com/sekwah41/Advanced-Portals/pull/280) ([@sekwah41](https://github.com/sekwah41))
- chore(deps): update dependency com.velocitypowered:velocity-api to v1.1.9 [#278](https://github.com/sekwah41/Advanced-Portals/pull/278) ([@renovate-bot](https://github.com/renovate-bot))
- chore(deps): update dependency gradle to v7.1.1 [#277](https://github.com/sekwah41/Advanced-Portals/pull/277) ([@renovate-bot](https://github.com/renovate-bot))
#### Authors: 2
- Sekwah ([@sekwah41](https://github.com/sekwah41))
- WhiteSource Renovate ([@renovate-bot](https://github.com/renovate-bot))
---
# v0.7.1 (Wed Jun 30 2021)
#### 🐛 Bug Fix
- fix: Access to portal warp command locked behind wrong perm [#275](https://github.com/sekwah41/Advanced-Portals/pull/275) ([@sekwah41](https://github.com/sekwah41))
- chore(deps): update dependency gradle to v7 [#271](https://github.com/sekwah41/Advanced-Portals/pull/271) ([@renovate-bot](https://github.com/renovate-bot))
#### Authors: 2
- Sekwah ([@sekwah41](https://github.com/sekwah41))
- WhiteSource Renovate ([@renovate-bot](https://github.com/renovate-bot))
---
# v0.7.0 (Sun Jun 27 2021)
#### 🚀 Enhancement
- feat: Added missing commands from tab complete [#270](https://github.com/sekwah41/Advanced-Portals/pull/270) ([@sekwah41](https://github.com/sekwah41))
#### 🐛 Bug Fix
- chore(deps): update dependency net.md-5:bungeecord-api to v1.16-r0.4 [#269](https://github.com/sekwah41/Advanced-Portals/pull/269) ([@renovate-bot](https://github.com/renovate-bot))
- chore(ci): removed verbose mode for release ([@sekwah41](https://github.com/sekwah41))
- chore(deps): update dependency com.google.code.gson:gson to v2.8.7 [#262](https://github.com/sekwah41/Advanced-Portals/pull/262) ([@renovate-bot](https://github.com/renovate-bot))
- chore(deps): update dependency gradle to v6.9 [#267](https://github.com/sekwah41/Advanced-Portals/pull/267) ([@renovate-bot](https://github.com/renovate-bot))
- chore(deps): update dependency com.velocitypowered:velocity-api to v1.1.8 [#266](https://github.com/sekwah41/Advanced-Portals/pull/266) ([@renovate-bot](https://github.com/renovate-bot))
#### Authors: 2
- Sekwah ([@sekwah41](https://github.com/sekwah41))
- WhiteSource Renovate ([@renovate-bot](https://github.com/renovate-bot))
---
# v0.6.1 (Sun Jun 27 2021)
#### 🐛 Bug Fix
- chore(ci): Remove isDevBranch remains [#265](https://github.com/sekwah41/Advanced-Portals/pull/265) ([@sekwah41](https://github.com/sekwah41))
- chore(ci): Fix forgotten sha in build gradle [#264](https://github.com/sekwah41/Advanced-Portals/pull/264) ([@sekwah41](https://github.com/sekwah41))
- chore(ci): Update version-bumping task order [#263](https://github.com/sekwah41/Advanced-Portals/pull/263) ([@sekwah41](https://github.com/sekwah41))
- chore(deps): pin dependencies [#261](https://github.com/sekwah41/Advanced-Portals/pull/261) ([@renovate-bot](https://github.com/renovate-bot))
- fix: Spigot 1.17 error message [#260](https://github.com/sekwah41/Advanced-Portals/pull/260) ([@sekwah41](https://github.com/sekwah41))
- chore(ci): Swapping build pipeline ([@sekwah41](https://github.com/sekwah41))
- ci: Fixed java version ([@sekwah41](https://github.com/sekwah41))
- ci: Fix changelog reference ([@sekwah41](https://github.com/sekwah41))
- ci: Updated build pipelines to newer module ([@sekwah41](https://github.com/sekwah41))
#### Authors: 2
- Sekwah ([@sekwah41](https://github.com/sekwah41))
- WhiteSource Renovate ([@renovate-bot](https://github.com/renovate-bot))
---
# Changelog
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
For the release changelogs see [CHANGELOG.md](CHANGELOG.md)
For the snapshot changelogs see [SNAPSHOT_CHANGELOG.md](SNAPSHOT_CHANGELOG.md)
## 0.6.0 (2021-05-19)
### Features
* **proxy:** Added a ForceEnableProxySupport config option ([99c810e](https://github.com/sekwah41/Advanced-Portals/commit/99c810e1beeee743734ec451ffe5df312eec8726))
* **proxy:** Added Velocity support ([b243b4d](https://github.com/sekwah41/Advanced-Portals/commit/b243b4d889b8039cb800d981d44d85da06ff62d5))
* **proxy:** Modern forwarding will be automatically detected. ([f3c8f73](https://github.com/sekwah41/Advanced-Portals/commit/f3c8f73975857a4e5d31a6a21111eee8b7888bdd))
* Added configurable proxy teleport delay ([a1121ad](https://github.com/sekwah41/Advanced-Portals/commit/a1121adc10addfcce515d1358d1274232109fdfd))
### 0.5.12
* Added support for Velocity.
* Also fixed some issues with entity teleporting.
### 0.5.11
* Missing changelogs
### 0.5.10
* Missing changelogs
### 0.5.10
* Added fix for command portals spam triggering if they didn't teleport you out.
* Made portals not activate if you were teleported into them by another portal (to allow linking zones like a star trek warp pad)
### 0.5.9
* Missing changelogs
### 0.5.8
* Missing changelogs
### 0.5.7
* Extra checks added by @tmantti to fix slow connections to new servers from activating the destination location too quick.
### 0.5.6
* Fixed packet exploit affecting destinations (only effecting versions 0.5.0 to 0.5.5).
### 0.5.5
* Added support for 1.16
* Reworked chat menus to better use Spigot API
* Changed edit menu to have Activate instead of Teleport to destination
* Compat code changed. You must now use Spigot rather than CraftBukkit.
### 0.5.4
* Added bungee backup methods to ensure bungee and desti work correctly together
* Fixed protection region issue
* Reworked the warp command and fixed the surrounding permissions
* Disabling gateway beams is now enabled for placing the blocks as well as by a few other means
### 0.5.3
* Fixed destination bug.
### 0.5.2
* Fixed issue with bungee destinations.
### 0.5.1
* Fixed warp permission info
### 0.5.0
* Added command:
* Fix for bungee warps
### 0.4.0
* Individual portal cooldown added
* Bungee improvements
### Earlier
* See github releases and spigot pages for more info.

View File

@ -33,6 +33,10 @@ Usage stats can be found here https://bstats.org/plugin/bukkit/AdvancedPortals
The api isn't implemented in this version, sorry for any inconvenience. Check the recode tree for possibly a working recode at some point.
# Contributing
Don't worry about updating the file numbers in `bungee.yml`, `plugin.yml` and `AdvancedPortalsPlugin.java`.
They will be updated automatically before builds.
Please ensure that your commits are in the following style for PR's
https://www.conventionalcommits.org/en/v1.0.0/

View File

@ -1,3 +1,4 @@
import com.google.gson.Gson
import org.apache.commons.codec.Charsets
import org.apache.http.HttpEntity
import org.apache.http.HttpResponse
@ -5,40 +6,45 @@ import org.apache.http.client.HttpClient
import org.apache.http.client.config.CookieSpecs
import org.apache.http.client.config.RequestConfig
import org.apache.http.client.methods.CloseableHttpResponse
import org.apache.http.client.methods.HttpGet
import org.apache.http.client.methods.HttpPost
import org.apache.http.entity.ContentType
import org.apache.http.entity.mime.MultipartEntityBuilder
import org.apache.http.impl.client.CloseableHttpClient
import org.apache.http.impl.client.HttpClientBuilder
import org.apache.http.impl.client.HttpClients
import org.apache.http.client.methods.HttpGet
import com.google.gson.Gson
apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'idea'
import java.util.regex.Matcher
import java.util.regex.Pattern
buildscript {
repositories {
maven {url "https://plugins.gradle.org/m2/"}
maven { url "https://plugins.gradle.org/m2/" }
mavenCentral()
mavenLocal()
jcenter()
}
dependencies {
classpath "org.apache.httpcomponents:httpmime:4.5.13"
classpath "com.google.code.gson:gson:2.8.6"
classpath "org.apache.httpcomponents:httpclient:4.5.13"
classpath "org.apache.httpcomponents:httpmime:4.5.14"
classpath "com.google.code.gson:gson:2.10.1"
classpath "org.apache.httpcomponents:httpclient:4.5.14"
}
}
plugins {
id 'net.researchgate.release' version '2.8.1'
}
apply plugin: 'java'
apply plugin: 'idea'
def branch = System.getenv("GITHUB_REF");
def sha = System.getenv("GITHUB_SHA");
def isDevBranch = branch == null || !(branch.startsWith("refs/tags/") && !branch.contains("-"))
if (branch != null) {
branch = branch.replace('refs/heads/', '')
}
def isCanary = version.toString().contains('canary')
group = 'com.sekwah.advancedportals'
version = getPluginData("version") + (isDevBranch ? '-SNAPSHOT' : '')
description = ""
@ -52,9 +58,9 @@ tasks.withType(JavaCompile) {
String getPluginData(String tag) {
File file = file("src/main/resources/plugin.yml")
String version = "notfound"
file.readLines("UTF-8").each {String line ->
file.readLines("UTF-8").each { String line ->
line = line.trim()
if(line.startsWith(tag)) {
if (line.startsWith(tag)) {
version = line.substring(tag.length() + 2, line.length())
}
}
@ -73,6 +79,7 @@ repositories {
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
maven { url "https://nexus.velocitypowered.com/repository/maven-public/" }
maven { url 'https://papermc.io/repo/repository/maven-public/' }
maven { url 'https://maven.enginehub.org/repo/' } // WorldEdit
}
// includeLibs just says to include the library in the final jar
@ -80,14 +87,15 @@ dependencies {
//implementation "org.bukkit:bukkit:1.16.1-R0.1-SNAPSHOT"
implementation "org.spigotmc:spigot-api:1.16.1-R0.1-SNAPSHOT"
implementation "net.md-5:bungeecord-api:1.15-SNAPSHOT"
implementation "net.md-5:bungeecord-api:1.16-R0.4"
implementation "com.velocitypowered:velocity-api:1.1.0-SNAPSHOT"
annotationProcessor "com.velocitypowered:velocity-api:1.1.0-SNAPSHOT"
implementation "com.velocitypowered:velocity-api:3.1.1"
annotationProcessor "com.velocitypowered:velocity-api:3.1.1"
implementation "io.netty:netty-all:4.0.4.Final"
implementation "io.netty:netty-all:4.1.87.Final"
compileOnly 'com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT'
implementation "com.sk89q.worldedit:worldedit-bukkit:7.2.13"
//compile fileTree(dir: 'libs', include: ['*.jar'])
}
@ -101,15 +109,20 @@ task discordupload {
doLast {
String discordWebhook = System.getenv("DISCORD_WEBHOOK")
if(discordWebhook != null) {
if (discordWebhook != null) {
println("Logging Into Discord")
CloseableHttpClient httpClient = HttpClients.createDefault()
HttpPost uploadFile = new HttpPost(discordWebhook)
MultipartEntityBuilder builder = MultipartEntityBuilder.create()
builder.addTextBody("content", "New automated dev build\n\n" +
"Current Features: <${project.github}/blob/${sha}/docs/CHANGELOG.md>")
if (isCanary) {
builder.addTextBody("content", "New canary Build")
} else {
builder.addTextBody("content", "New release build\n\n" +
"Current Features: <${project.github}/blob/${branch}/CHANGELOG.md>")
}
builder.addBinaryBody("file", file(jar.archiveFile).newInputStream(), ContentType.APPLICATION_OCTET_STREAM, jar.archiveName)
@ -204,7 +217,7 @@ class GameVersion {
/**
* As described here https://support.curseforge.com/en/support/solutions/articles/9000197321-curseforge-api
*/
*/
class Metadata {
String changelog
String changelogType
@ -227,9 +240,9 @@ task curseforge {
apiKey = System.getenv("CURSE_API")
}
if(apiKey != null) {
if (apiKey != null) {
Gson gson = new Gson()
Gson gson = new Gson()
//String VERSION_TYPES_URL = "/api/game/version-types"
int gameVersionTypeID = 1
@ -239,25 +252,27 @@ task curseforge {
// Get game versions
String gameVersionsString = getValueFromCurseAPI(apiKey, VERSION_URL)
GameVersion[] gameVersions = gson.fromJson(gameVersionsString, GameVersion[].class)
def versions = gameVersions.findAll {it.gameVersionTypeID == gameVersionTypeID}
def versions = gameVersions.findAll { it.gameVersionTypeID == gameVersionTypeID }
String[] supportedVersions = [
"1.16",
"1.15",
"1.14",
"1.13"
"1.18",
"1.17",
"1.16",
"1.15",
"1.14",
"1.13"
]
def supportedGameVersions = versions.findAll {supportedVersions.contains(it.name)}
int[] supportedGameVersionIds = supportedGameVersions.collect {it.id}.toArray()
def supportedGameVersions = versions.findAll { supportedVersions.contains(it.name) }
int[] supportedGameVersionIds = supportedGameVersions.collect { it.id }.toArray()
println("Supported Version Id's ${supportedGameVersionIds}")
Metadata uploadMetadata = new Metadata();
uploadMetadata.changelog = "${project.github}/blob/${sha}/docs/CHANGELOG.md"
uploadMetadata.changelog = "${project.github}/blob/${branch}/CHANGELOG.md"
uploadMetadata.changelogType = "markdown"
uploadMetadata.releaseType = isDevBranch ? "beta" : "release"
uploadMetadata.releaseType = "release"
uploadMetadata.gameVersions = supportedGameVersionIds
def uploadId = uploadFile(uploadMetadata, file(jar.archiveFile), apiKey, gson)
@ -272,7 +287,6 @@ task curseforge {
}
// id = project.curse_project_id
// // TODO add code to reference this but also cut the latest change logs in for the files
// changelog = "${project.github}/blob/${sha}/CHANGELOG.md"
// changelogType = 'markdown'
// releaseType = 'release'
}
@ -280,7 +294,7 @@ task curseforge {
task copyPlugin {
doLast {
copy {
if(System.env.MC_SERVER_LOC == null) {
if (System.env.MC_SERVER_LOC == null) {
throw new Exception('You must set the server location and jar to use')
}
println "$buildDir/libs/Advanced-Portals-${version}.jar"
@ -290,7 +304,7 @@ task copyPlugin {
include "*.jar"
}
}
catch(RuntimeException e) {
catch (RuntimeException e) {
println e.getLocalizedMessage()
}
from file("$buildDir/libs/Advanced-Portals-${version}.jar")
@ -303,7 +317,7 @@ task copyPlugin {
// DIReallyKnowWhatIAmDoingISwear is to remove the stupid pause spigot has at the start
task runJar() {
doLast {
if(System.env.MC_SERVER_LOC == null || System.env.MC_SERVER_JAR == null) {
if (System.env.MC_SERVER_LOC == null || System.env.MC_SERVER_JAR == null) {
throw new Exception('You must set the server location and jar to use MC_SERVER_LOC and MC_SERVER_JAR')
}
javaexec {
@ -315,42 +329,77 @@ task runJar() {
}
}
/**
* These are needed as standard-version doesnt allow for the ability to skip tag versions for the changelog.
* Well it does but not on purpose and it breaks things.
*
* Tagging is skipped so that the release can be merged and confirmed (A little long winded but just to stop mistakes)
*/
task updateChangelog {
doLast{
exec {
commandLine 'cmd', '/c', 'npx standard-version@9.3.0 -i docs/CHANGELOG.md -t (v)[0-9]+.[0-0]+.[0-0]+(?!-) --skip.tag'
ext.output = {
return standardOutput.toString()
}
}
exec {
commandLine 'cmd', '/c', 'npx standard-version@9.3.0 --skip.changelog --skip.bump --skip.tag'
ext.output = {
return standardOutput.toString()
}
}
task publish {
doLast {
println "This is a dummy task to run others for version: ${version}"
}
}
task updateChangelogPreRelease(type: Exec) {
commandLine 'cmd', '/c', 'npx standard-version@9.3.0 --prerelease -i docs/SNAPSHOT_CHANGELOG.md --skip.tag'
ext.output = {
return standardOutput.toString()
// https://github.com/researchgate/gradle-release
// Only other plugin I can find using auto & gradle https://github.com/intuit/hooks
release {
failOnPublishNeeded = false
failOnSnapshotDependencies = false
git {
requireBranch = ''
}
// Disable tasks because something we have is causing -x to be ignored
createReleaseTag.enabled = false
preTagCommit.enabled = false
commitNewVersion.enabled = false
}
task cleanbuildfolder {
doFirst {
println "Cleaning up previous builds (to stop publishing old ones by mistake)"
project.delete(files("${buildDir}/libs"))
}
}
/**
* Just to stop having to manually tagging. Probably could do this easier but meh stops typos or other issues.
*/
task tagRelease(type: Exec) {
commandLine 'cmd', '/c', 'npx standard-version@9.3.0 --prerelease -i docs/SNAPSHOT_CHANGELOG.md --skip.changelog --skip.bump'
ext.output = {
return standardOutput.toString()
void updateFileVersion(String fileLoc, Pattern pattern, Closure<String> stringClosure) {
File file = new File(projectDir, fileLoc)
Matcher m = pattern.matcher(file.text)
if (m.find()) {
def newVersion = stringClosure.call(m)
println "Replacing ${pattern.toString()} in ${fileLoc} with '${newVersion}'"
file.text = file.text.replaceAll(pattern, newVersion)
}
}
// Just to keep all numbers the same (as they are dotted all over the place)
task updateVersionNumbers {
doFirst {
def versionRegex = ~/(\nversion:\s)([0-9.-]+)/
def velocityVersionRegex = ~/(\sversion\s=\s")([0-9.-]+)("\))/
updateFileVersion("src/main/resources/bungee.yml", versionRegex,
{ Matcher m ->
return "${m.group(1)}${getVersion()}"
})
updateFileVersion("src/main/resources/plugin.yml", versionRegex,
{ Matcher m ->
return "${m.group(1)}${getVersion()}"
})
updateFileVersion("src/main/java/com/sekwah/advancedportals/velocity/AdvancedPortalsPlugin.java",
velocityVersionRegex,
{ Matcher m ->
return "${m.group(1)}${getVersion()}${m.group(3)}"
})
}
}
updateVersion.finalizedBy 'updateVersionNumbers'
compileJava.dependsOn 'cleanbuildfolder'
// Publish rules
// Current behavior seems to be canary or release. Though pre-releases may break this pattern.
publish.dependsOn 'build'
publish.finalizedBy 'discordupload'
if (!isCanary) {
publish.finalizedBy 'curseforge'
}

View File

@ -1,88 +0,0 @@
# Changelog
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
For the release changelogs see [CHANGELOG.md](CHANGELOG.md)
For the snapshot changelogs see [SNAPSHOT_CHANGELOG.md](SNAPSHOT_CHANGELOG.md)
## 0.6.0 (2021-05-19)
### Features
* **proxy:** Added a ForceEnableProxySupport config option ([99c810e](https://github.com/sekwah41/Advanced-Portals/commit/99c810e1beeee743734ec451ffe5df312eec8726))
* **proxy:** Added Velocity support ([b243b4d](https://github.com/sekwah41/Advanced-Portals/commit/b243b4d889b8039cb800d981d44d85da06ff62d5))
* **proxy:** Modern forwarding will be automatically detected. ([f3c8f73](https://github.com/sekwah41/Advanced-Portals/commit/f3c8f73975857a4e5d31a6a21111eee8b7888bdd))
* Added configurable proxy teleport delay ([a1121ad](https://github.com/sekwah41/Advanced-Portals/commit/a1121adc10addfcce515d1358d1274232109fdfd))
### 0.5.12
* Added support for Velocity.
* Also fixed some issues with entity teleporting.
### 0.5.11
* Missing changelogs
### 0.5.10
* Missing changelogs
### 0.5.10
* Added fix for command portals spam triggering if they didn't teleport you out.
* Made portals not activate if you were teleported into them by another portal (to allow linking zones like a star trek warp pad)
### 0.5.9
* Missing changelogs
### 0.5.8
* Missing changelogs
### 0.5.7
* Extra checks added by @tmantti to fix slow connections to new servers from activating the destination location too quick.
### 0.5.6
* Fixed packet exploit affecting destinations (only effecting versions 0.5.0 to 0.5.5).
### 0.5.5
* Added support for 1.16
* Reworked chat menus to better use Spigot API
* Changed edit menu to have Activate instead of Teleport to destination
* Compat code changed. You must now use Spigot rather than CraftBukkit.
### 0.5.4
* Added bungee backup methods to ensure bungee and desti work correctly together
* Fixed protection region issue
* Reworked the warp command and fixed the surrounding permissions
* Disabling gateway beams is now enabled for placing the blocks as well as by a few other means
### 0.5.3
* Fixed destination bug.
### 0.5.2
* Fixed issue with bungee destinations.
### 0.5.1
* Fixed warp permission info
### 0.5.0
* Added command:
* Fix for bungee warps
### 0.4.0
* Individual portal cooldown added
* Bungee improvements
### Earlier
* See github releases and spigot pages for more info.

View File

@ -1,26 +0,0 @@
# Changelog
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
For the release changelogs see [CHANGELOG.md](CHANGELOG.md)
For the snapshot changelogs see [SNAPSHOT_CHANGELOG.md](SNAPSHOT_CHANGELOG.md)
### [0.5.13-2](https://github.com/sekwah41/Advanced-Portals/compare/v0.5.13-1...v0.5.13-2) (2021-05-14)
* No code changes, just updated the changelog generation.
### 0.5.13-1 (2021-05-12)
### Features
* Added configurable proxy teleport delay ([a1121ad](https://github.com/sekwah41/Advanced-Portals/commit/a1121adc10addfcce515d1358d1274232109fdfd))
### 0.5.13-0 (2021-05-12)
* Build Tool Change: Updated versioning and changelog tooling and standards.
* Added improved support for Velocity (You can now add it directly to Velocity as a plugin)
* Added a ForceEnableProxySupport config option in case any are not detected
* Modern forwarding will be automatically detected. You will no longer need to manually set ForceEnableProxySupport

View File

@ -4,3 +4,4 @@ org.gradle.caching=true
github=https://github.com/sekwah41/Advanced-Portals
curse_project_id=86001
version=0.9.2

Binary file not shown.

View File

@ -1,6 +1,6 @@
#Sun Jan 19 19:02:36 KST 2020
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

285
gradlew vendored
View File

@ -1,7 +1,7 @@
#!/usr/bin/env sh
#!/bin/sh
#
# Copyright 2015 the original author or authors.
# 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.
@ -17,78 +17,113 @@
#
##############################################################################
##
## Gradle start up script for UN*X
##
#
# 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/subprojects/plugins/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
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# 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##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# 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"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
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
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# 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"
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
JAVACMD=java
which java >/dev/null 2>&1 || 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
@ -105,79 +140,105 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
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=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=SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# 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.
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# 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
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# 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" "$@"

192
gradlew.bat vendored
View File

@ -1,100 +1,92 @@
@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
@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=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@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%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="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!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
@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
@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.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
: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

12
package.json Normal file
View File

@ -0,0 +1,12 @@
{
"devDependencies": {
"conventional-changelog-angular": "5.0.13",
"@auto-it/conventional-commits": "10.37.6",
"@auto-it/exec": "10.37.6",
"@auto-it/first-time-contributor": "10.37.6",
"@auto-it/gradle": "10.37.6",
"@auto-it/released": "10.37.6",
"@auto-it/upload-assets": "10.37.6",
"auto": "10.37.6"
}
}

15
renovate.json Normal file
View File

@ -0,0 +1,15 @@
{
"extends": [
"config:base"
],
"packageRules": [
{
"commitMessagePrefix": "chore(deps):",
"matchUpdateTypes": ["minor", "patch"],
"automerge": true,
"automergeType": "branch",
"groupName": "Deps",
"schedule": ["every weekend"]
}
]
}

View File

@ -6,6 +6,7 @@ import com.sekwah.advancedportals.bukkit.config.ConfigAccessor;
import com.sekwah.advancedportals.bukkit.listeners.Listeners;
import com.sekwah.advancedportals.bukkit.portals.AdvancedPortal;
import com.sekwah.advancedportals.bukkit.portals.Portal;
import com.sekwah.advancedportals.bukkit.util.WorldEditIntegration;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.*;
import org.bukkit.*;
@ -54,6 +55,15 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
ConfigAccessor config = new ConfigAccessor(plugin, "config.yml");
ConfigAccessor portalConfig = new ConfigAccessor(plugin, "portals.yml");
if (!(sender instanceof Player)) {
if(args.length == 1) {
if(args[0].equalsIgnoreCase("reload")) {
Listeners.reloadValues(plugin);
Portal.loadPortals();
sender.sendMessage("portal reloaded.");
return true;
}
}
sender.sendMessage(PluginMessages.customPrefixFail + " You cannot use commands with the console.");
return true;
}
@ -120,6 +130,11 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
break;
case "wand":
case "selector":
if (plugin.isWorldEditActive()) {
sender.sendMessage(PluginMessages.customPrefix
+ " Use the WorldEdit wand to select stuff. Checkout //wand.");
return true;
}
String ItemID = config.getConfig().getString("AxeItemId");
Material WandMaterial = Material.getMaterial(ItemID);
@ -187,244 +202,7 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
PluginMessages.customPrefix + " You have been given a \u00A7ePortal Block\u00A7a!");
break;
case "create":
if (player.hasMetadata("Pos1World") && player.hasMetadata("Pos2World")) {
if (player.getMetadata("Pos1World").get(0).asString()
.equals(player.getMetadata("Pos2World").get(0).asString())
&& player.getMetadata("Pos1World").get(0).asString()
.equals(player.getLocation().getWorld().getName())) {
if (args.length >= 2) { // may make this next piece of code more efficient, maybe check
// against a list of available variables or something
// TODO change system to use arrays and hashmaps
boolean hasName = false;
boolean hasTriggerBlock = false;
boolean hasDestination = false;
boolean isBungeePortal = false;
boolean needsPermission = false;
boolean executesCommand = false;
String destination = null;
String portalName = null;
String triggerBlock = null;
String serverName = null;
String permission = null;
String portalCommand = null;
ArrayList<PortalArg> extraData = new ArrayList<>();
// Is completely changed in the recode but for now im leaving it as this
// horrible mess...
for (int i = 1; i < args.length; i++) {
if (startsWithPortalArg("name:", args[i])) {
portalName = args[i].replaceFirst("name:", "");
if (portalName.equals("")) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You must include a name for the portal that isnt nothing!");
return true;
}
hasName = true;
portalName = args[i].replaceFirst("name:", "");
} else if (startsWithPortalArg("destination:", args[i])) {
hasDestination = true;
destination = args[i].toLowerCase().replaceFirst("destination:", "");
} else if (startsWithPortalArg("desti:", args[i])) {
hasDestination = true;
destination = args[i].toLowerCase().replaceFirst("desti:", "");
} else if (startsWithPortalArg("triggerblock:", args[i])) {
hasTriggerBlock = true;
triggerBlock = args[i].toLowerCase().replaceFirst("triggerblock:", "");
} else if (this.startsWithPortalArg("bungee:", args[i])) {
isBungeePortal = true;
serverName = args[i].substring("bungee:".length());
} else if (startsWithPortalArg("permission:", args[i])) {
needsPermission = true;
permission = args[i].toLowerCase().replaceFirst("permission:", "");
extraData.add(new PortalArg("permission", permission));
} else if (startsWithPortalArg("delayed:", args[i])) {
boolean delayed = Boolean
.parseBoolean(args[i].toLowerCase().replaceFirst("delayed:", ""));
extraData.add(new PortalArg("delayed", Boolean.toString(delayed)));
} else if (startsWithPortalArg("message:", args[i])) {
String message = parseArgVariable(args, i, "message:");
if (message == null) {
player.sendMessage(
PluginMessages.customPrefixFail + " Message quotes not closed!");
return true;
}
extraData.add(new PortalArg("message", message));
} else if (startsWithPortalArg("command:", args[i])) {
executesCommand = true;
portalCommand = parseArgVariable(args, i, "command:");
if (portalCommand == null) {
player.sendMessage(
PluginMessages.customPrefixFail + " Command quotes not closed!");
return true;
}
i += this.portalArgsStringLength - 1;
if (portalCommand.startsWith("#")
&& !(this.plugin.getSettings().enabledCommandLevel("c")
&& (sender.hasPermission(
"advancedportals.createportal.commandlevel.console")
|| sender.isOp()))) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You need permission to make a console command portal!");
return true;
} else if (portalCommand.startsWith("!")
&& !(this.plugin.getSettings().enabledCommandLevel("o")
&& (sender.hasPermission(
"advancedportals.createportal.commandlevel.op")
|| sender.isOp()))) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You need permission to make a op command portal!");
return true;
} else if (portalCommand.startsWith("%")
&& !(this.plugin.getSettings().enabledCommandLevel("b")
&& (sender.hasPermission(
"advancedportals.createportal.commandlevel.bungee")
|| sender.isOp()))) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You need permission to make a bungee command portal!");
return true;
} else if (portalCommand.startsWith("^")
&& !(this.plugin.getSettings().enabledCommandLevel("p")
&& (sender.hasPermission(
"advancedportals.createportal.commandlevel.perms")
|| sender.isOp()))) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You need permission to make a all perms command portal!");
return true;
}
extraData.add(new PortalArg("command.1", portalCommand));
} else if (startsWithPortalArg("cooldowndelay:", args[i])) {
String cooldownDelay = parseArgVariable(args, i, "cooldowndelay:");
extraData.add(new PortalArg("cooldowndelay", cooldownDelay));
} else if (startsWithPortalArg("leavedesti:", args[i])) {
String leaveDesti = parseArgVariable(args, i, "leavedesti:");
extraData.add(new PortalArg("leavedesti", leaveDesti));
} else if (startsWithPortalArg("particlein:", args[i])) {
String value = parseArgVariable(args, i, "particlein:");
extraData.add(new PortalArg("particlein", value));
} else if (startsWithPortalArg("particleout:", args[i])) {
String value = parseArgVariable(args, i, "particleout:");
extraData.add(new PortalArg("particleout", value));
}
}
if (!hasName) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You must include a name for the portal that you are creating in the variables!");
return true;
}
World world = org.bukkit.Bukkit
.getWorld(player.getMetadata("Pos1World").get(0).asString());
Location pos1 = new Location(world, player.getMetadata("Pos1X").get(0).asInt(),
player.getMetadata("Pos1Y").get(0).asInt(),
player.getMetadata("Pos1Z").get(0).asInt());
Location pos2 = new Location(world, player.getMetadata("Pos2X").get(0).asInt(),
player.getMetadata("Pos2Y").get(0).asInt(),
player.getMetadata("Pos2Z").get(0).asInt());
ConfigAccessor desticonfig = new ConfigAccessor(plugin, "destinations.yml");
String destiPosX = desticonfig.getConfig().getString(destination + ".pos.X");
if (!Portal.portalExists(portalName)) {
player.sendMessage("");
player.sendMessage(PluginMessages.customPrefix
+ "\u00A7e You have created a new portal with the following details:");
player.sendMessage("\u00A7aname: \u00A7e" + portalName);
if (hasDestination) {
if (!isBungeePortal && destiPosX == null) {
player.sendMessage("\u00A7cdestination: \u00A7e" + destination
+ " (destination does not exist)");
return true;
} else {
player.sendMessage("\u00A7adestination: \u00A7e" + destination);
}
} else {
player.sendMessage(
"\u00A7cdestination: \u00A7eN/A (will not teleport to a location)");
}
if (isBungeePortal) {
player.sendMessage("\u00A7abungee: \u00A7e" + serverName);
}
if (needsPermission) {
player.sendMessage("\u00A7apermission: \u00A7e" + permission);
} else {
player.sendMessage("\u00A7apermission: \u00A7e(none needed)");
}
for (PortalArg portalArg : extraData) {
if (!ignoreExtras.contains(portalArg.argName)) {
player.sendMessage(
"\u00A7a" + portalArg.argName + ": \u00A7e" + portalArg.value);
}
}
if (executesCommand) {
player.sendMessage("\u00A7acommand: \u00A7e" + portalCommand);
}
if (hasTriggerBlock) {
Set<Material> materialSet = Portal
.getMaterialSet(triggerBlock.toUpperCase().split(","));
if (materialSet.size() != 0) {
player.sendMessage(
"\u00A7atriggerBlock: \u00A7e" + triggerBlock.toUpperCase());
PortalArg[] portalArgs = new PortalArg[extraData.size()];
portalArgs = extraData.toArray(portalArgs);
player.sendMessage(Portal.create(pos1, pos2, portalName, destination,
materialSet, serverName, portalArgs));
if(materialSet.contains(Material.END_GATEWAY)) {
AdvancedPortal portal = Portal.getPortal(portalName);
if(portal != null) {
disableBeacons(portal);
}
}
} else {
ConfigAccessor Config = new ConfigAccessor(plugin, "config.yml");
player.sendMessage("\u00A7ctriggerBlock: \u00A7edefault("
+ Config.getConfig().getString("DefaultPortalTriggerBlock") + ")");
player.sendMessage("\u00A7c" + triggerBlock.toUpperCase()
+ " no valid blocks were listed so the default has been set.");
PortalArg[] portalArgs = new PortalArg[extraData.size()];
portalArgs = extraData.toArray(portalArgs);
player.sendMessage(Portal.create(pos1, pos2, portalName, destination,
serverName, portalArgs));
}
} else {
ConfigAccessor Config = new ConfigAccessor(plugin, "config.yml");
player.sendMessage("\u00A7atriggerBlock: \u00A7edefault("
+ Config.getConfig().getString("DefaultPortalTriggerBlock") + ")");
PortalArg[] portalArgs = new PortalArg[extraData.size()];
portalArgs = extraData.toArray(portalArgs);
player.sendMessage(Portal.create(pos1, pos2, portalName, destination,
serverName, portalArgs));
}
} else {
sender.sendMessage(
PluginMessages.customPrefixFail + " A portal by that name already exists!");
}
// add code to save the portal to the portal config and reload the portals
player.sendMessage("");
} else {
player.sendMessage(PluginMessages.customPrefixFail
+ " You need to at least add the name of the portal as a variable, \u00A7cType \u00A7e/portal variables\u00A7c"
+ " for a full list of currently available variables and an example command!");
}
} else {
player.sendMessage(PluginMessages.customPrefixFail
+ " The points you have selected need to be in the same world!");
}
} else {
player.sendMessage(PluginMessages.customPrefixFail
+ " You need to have two points selected to make a portal!");
}
break;
return createPortalRequest(player, args);
case "variables":
sender.sendMessage(
PluginMessages.customPrefix +
@ -631,6 +409,14 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
case "help":
helpCommand(sender, command, args);
break;
case "bukkitpage":
sender.sendMessage(
PluginMessages.customPrefix + " Bukkit Page: http://dev.bukkit.org/bukkit-plugins/advanced-portals/");
break;
case "helppage":
sender.sendMessage(
PluginMessages.customPrefix + " Help Page: https://www.guilded.gg/Sekwah/groups/MDqAZyrD/channels/72ffdaa3-9273-4722-bf47-b75408b371af/docs/1090356006");
break;
case "show":
if (args.length > 1) {
String posX = portalConfig.getConfig().getString(args[1] + ".pos1.X");
@ -658,6 +444,24 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
}
}
break;
case "we-selection":
if (!Bukkit.getPluginManager().isPluginEnabled("WorldEdit")) {
player.sendMessage(PluginMessages.customPrefixFail + " WorldEdit is not enabled.");
return true;
}
if (args.length <= 1) {
player.sendMessage(PluginMessages.customPrefixFail + " Specify a portal name!");
return true;
}
AdvancedPortal wePortal = Portal.getPortal(args[1]);
if (wePortal == null) {
sender.sendMessage(PluginMessages.customPrefixFail + " No portal by that name exists!");
return true;
}
WorldEditIntegration.explainRegion(player, wePortal.getPos1(), wePortal.getPos2());
player.sendMessage(PluginMessages.customPrefix
+ " The portal has been selected with worldedit!");
break;
case "reload":
sender.sendMessage(PluginMessages.customPrefix + " Reloaded values!");
Listeners.reloadValues(plugin);
@ -711,6 +515,272 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
}
}
private boolean checkValidSelection(Player player) {
if (plugin.isWorldEditActive()) {
if (!WorldEditIntegration.validateSelection(player)) {
player.sendMessage(PluginMessages.customPrefixFail
+ " Your WorldEdit selection is invalid!");
return false;
}
} else {
if (!player.hasMetadata("Pos1World") || !player.hasMetadata("Pos2World")) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You need to have two points selected to make a portal!");
return false;
}
if (!player.getMetadata("Pos1World").get(0).asString()
.equals(player.getMetadata("Pos2World").get(0).asString())
|| !player.getMetadata("Pos1World").get(0).asString()
.equals(player.getLocation().getWorld().getName())) {
player.sendMessage(PluginMessages.customPrefixFail
+ " The points you have selected need to be in the same world as each other and yourself!");
return false;
}
}
return true;
}
private boolean createPortalRequest(Player player, String[] args) {
if (!checkValidSelection(player)) {
return true;
}
if (args.length < 2) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You need to at least add the name of the portal as a variable, \u00A7cType \u00A7e/portal variables\u00A7c"
+ " for a full list of currently available variables and an example command!");
return true;
}
// may make this next piece of code more efficient, maybe check
// against a list of available variables or something
// TODO change system to use arrays and hashmaps
boolean hasName = false;
boolean hasTriggerBlock = false;
boolean hasDestination = false;
boolean isBungeePortal = false;
boolean needsPermission = false;
boolean executesCommand = false;
String destination = null;
String portalName = null;
String triggerBlock = null;
String serverName = null;
String permission = null;
String portalCommand = null;
ArrayList<PortalArg> extraData = new ArrayList<>();
// Is completely changed in the recode but for now im leaving it as this
// horrible mess...
for (int i = 1; i < args.length; i++) {
if (startsWithPortalArg("name:", args[i])) {
portalName = args[i].replaceFirst("name:", "");
if (portalName.equals("")) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You must include a name for the portal that isnt nothing!");
return true;
}
hasName = true;
portalName = args[i].replaceFirst("name:", "");
} else if (startsWithPortalArg("destination:", args[i])) {
hasDestination = true;
destination = args[i].toLowerCase().replaceFirst("destination:", "");
} else if (startsWithPortalArg("desti:", args[i])) {
hasDestination = true;
destination = args[i].toLowerCase().replaceFirst("desti:", "");
} else if (startsWithPortalArg("triggerblock:", args[i])) {
hasTriggerBlock = true;
triggerBlock = args[i].toLowerCase().replaceFirst("triggerblock:", "");
} else if (this.startsWithPortalArg("bungee:", args[i])) {
isBungeePortal = true;
serverName = args[i].substring("bungee:".length());
} else if (startsWithPortalArg("permission:", args[i])) {
needsPermission = true;
permission = args[i].toLowerCase().replaceFirst("permission:", "");
extraData.add(new PortalArg("permission", permission));
} else if (startsWithPortalArg("delayed:", args[i])) {
boolean delayed = Boolean
.parseBoolean(args[i].toLowerCase().replaceFirst("delayed:", ""));
extraData.add(new PortalArg("delayed", Boolean.toString(delayed)));
} else if (startsWithPortalArg("message:", args[i])) {
String message = parseArgVariable(args, i, "message:");
if (message == null) {
player.sendMessage(
PluginMessages.customPrefixFail + " Message quotes not closed!");
return true;
}
extraData.add(new PortalArg("message", message));
} else if (startsWithPortalArg("command:", args[i])) {
executesCommand = true;
portalCommand = parseArgVariable(args, i, "command:");
if (portalCommand == null) {
player.sendMessage(
PluginMessages.customPrefixFail + " Command quotes not closed!");
return true;
}
i += this.portalArgsStringLength - 1;
if (portalCommand.startsWith("#")
&& !(this.plugin.getSettings().enabledCommandLevel("c")
&& (player.hasPermission(
"advancedportals.createportal.commandlevel.console")
|| player.isOp()))) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You need permission to make a console command portal!");
return true;
} else if (portalCommand.startsWith("!")
&& !(this.plugin.getSettings().enabledCommandLevel("o")
&& (player.hasPermission(
"advancedportals.createportal.commandlevel.op")
|| player.isOp()))) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You need permission to make a op command portal!");
return true;
} else if (portalCommand.startsWith("%")
&& !(this.plugin.getSettings().enabledCommandLevel("b")
&& (player.hasPermission(
"advancedportals.createportal.commandlevel.bungee")
|| player.isOp()))) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You need permission to make a bungee command portal!");
return true;
} else if (portalCommand.startsWith("^")
&& !(this.plugin.getSettings().enabledCommandLevel("p")
&& (player.hasPermission(
"advancedportals.createportal.commandlevel.perms")
|| player.isOp()))) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You need permission to make a all perms command portal!");
return true;
}
extraData.add(new PortalArg("command.1", portalCommand));
} else if (startsWithPortalArg("cooldowndelay:", args[i])) {
String cooldownDelay = parseArgVariable(args, i, "cooldowndelay:");
extraData.add(new PortalArg("cooldowndelay", cooldownDelay));
} else if (startsWithPortalArg("leavedesti:", args[i])) {
String leaveDesti = parseArgVariable(args, i, "leavedesti:");
extraData.add(new PortalArg("leavedesti", leaveDesti));
} else if (startsWithPortalArg("particlein:", args[i])) {
String value = parseArgVariable(args, i, "particlein:");
extraData.add(new PortalArg("particlein", value));
} else if (startsWithPortalArg("particleout:", args[i])) {
String value = parseArgVariable(args, i, "particleout:");
extraData.add(new PortalArg("particleout", value));
}
}
if (!hasName) {
player.sendMessage(PluginMessages.customPrefixFail
+ " You must include a name for the portal that you are creating in the variables!");
return true;
}
Location pos1, pos2;
if (plugin.isWorldEditActive()) {
pos1 = WorldEditIntegration.getPos1(player);
pos2 = WorldEditIntegration.getPos2(player);
} else {
World world = Bukkit
.getWorld(player.getMetadata("Pos1World").get(0).asString());
pos1 = new Location(world, player.getMetadata("Pos1X").get(0).asInt(),
player.getMetadata("Pos1Y").get(0).asInt(),
player.getMetadata("Pos1Z").get(0).asInt());
pos2 = new Location(world, player.getMetadata("Pos2X").get(0).asInt(),
player.getMetadata("Pos2Y").get(0).asInt(),
player.getMetadata("Pos2Z").get(0).asInt());
}
ConfigAccessor desticonfig = new ConfigAccessor(plugin, "destinations.yml");
String destiPosX = desticonfig.getConfig().getString(destination + ".pos.X");
if (!Portal.portalExists(portalName)) {
player.sendMessage("");
player.sendMessage(PluginMessages.customPrefix
+ "\u00A7e You have created a new portal with the following details:");
player.sendMessage("\u00A7aname: \u00A7e" + portalName);
if (hasDestination) {
if (!isBungeePortal && destiPosX == null) {
player.sendMessage("\u00A7cdestination: \u00A7e" + destination
+ " (destination does not exist)");
return true;
} else {
player.sendMessage("\u00A7adestination: \u00A7e" + destination);
}
} else {
player.sendMessage(
"\u00A7cdestination: \u00A7eN/A (will not teleport to a location)");
}
if (isBungeePortal) {
player.sendMessage("\u00A7abungee: \u00A7e" + serverName);
}
if (needsPermission) {
player.sendMessage("\u00A7apermission: \u00A7e" + permission);
} else {
player.sendMessage("\u00A7apermission: \u00A7e(none needed)");
}
for (PortalArg portalArg : extraData) {
if (!ignoreExtras.contains(portalArg.argName)) {
player.sendMessage(
"\u00A7a" + portalArg.argName + ": \u00A7e" + portalArg.value);
}
}
if (executesCommand) {
player.sendMessage("\u00A7acommand: \u00A7e" + portalCommand);
}
if (hasTriggerBlock) {
Set<Material> materialSet = Portal
.getMaterialSet(triggerBlock.toUpperCase().split(","));
if (materialSet.size() != 0) {
player.sendMessage(
"\u00A7atriggerBlock: \u00A7e" + triggerBlock.toUpperCase());
PortalArg[] portalArgs = new PortalArg[extraData.size()];
portalArgs = extraData.toArray(portalArgs);
player.sendMessage(Portal.create(pos1, pos2, portalName, destination,
materialSet, serverName, portalArgs));
if(materialSet.contains(Material.END_GATEWAY)) {
AdvancedPortal portal = Portal.getPortal(portalName);
if(portal != null) {
disableBeacons(portal);
}
}
} else {
ConfigAccessor Config = new ConfigAccessor(plugin, "config.yml");
player.sendMessage("\u00A7ctriggerBlock: \u00A7edefault("
+ Config.getConfig().getString("DefaultPortalTriggerBlock") + ")");
player.sendMessage("\u00A7c" + triggerBlock.toUpperCase()
+ " no valid blocks were listed so the default has been set.");
PortalArg[] portalArgs = new PortalArg[extraData.size()];
portalArgs = extraData.toArray(portalArgs);
player.sendMessage(Portal.create(pos1, pos2, portalName, destination,
serverName, portalArgs));
}
} else {
ConfigAccessor Config = new ConfigAccessor(plugin, "config.yml");
player.sendMessage("\u00A7atriggerBlock: \u00A7edefault("
+ Config.getConfig().getString("DefaultPortalTriggerBlock") + ")");
PortalArg[] portalArgs = new PortalArg[extraData.size()];
portalArgs = extraData.toArray(portalArgs);
player.sendMessage(Portal.create(pos1, pos2, portalName, destination,
serverName, portalArgs));
}
} else {
player.sendMessage(
PluginMessages.customPrefixFail + " A portal by that name already exists!");
}
// add code to save the portal to the portal config and reload the portals
player.sendMessage("");
return true;
}
private boolean startsWithPortalArg(String portalArg, String arg) {
return arg.toLowerCase().startsWith(portalArg) && arg.length() > portalArg.length();
}
@ -718,7 +788,8 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
private void helpCommand(CommandSender sender, String command, String[] args) {
// Add pages if there starts to become too many
if (args.length == 1) {
sendMenu(sender, "Help Menu", "\u00A76/" + command + " selector \u00A7a- gives you a region selector",
sendMenu(sender, "Help Menu",
"\u00A76/" + command + " selector \u00A7a- gives you a region selector",
"\u00A76/" + command + " create \u00A7c[tags] \u00A7a- creates a portal with a selection ",
"\u00A76/" + command + " portalblock \u00A7a- gives you a portal block",
"\u00A76/" + command + " endportalblock \u00A7a- gives you an end portal block",
@ -889,8 +960,14 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
if (sender.hasPermission("advancedportals.createportal")) {
if (args.length == 1 || (args.length == 2 && args[0].equalsIgnoreCase("help"))) {
autoComplete.addAll(Arrays.asList("create", "list", "portalblock", "select", "unselect", "command",
"selector", "show", "gatewayblock", "endportalblock", "variables", "wand", "disablebeacon", "remove", "rename",
"show", "gatewayblock", "endportalblock", "variables", "disablebeacon", "remove", "rename",
"help", "bukkitpage", "helppage"));
if (Bukkit.getPluginManager().isPluginEnabled("WorldEdit")) {
autoComplete.add("we-selection");
}
if (!plugin.isWorldEditActive()) {
autoComplete.addAll(Arrays.asList("selector", "wand"));
}
} else if (args[0].equalsIgnoreCase("create")) {
boolean hasName = false;
@ -996,8 +1073,10 @@ public class AdvancedPortalsCommand implements CommandExecutor, TabCompleter {
}
}
}
else if (args.length == 2 && (args[0].equalsIgnoreCase("remove")
|| args[0].equalsIgnoreCase("disablebeacon"))) {
else if (args.length == 2 &&
(args[0].equalsIgnoreCase("remove")
|| args[0].equalsIgnoreCase("disablebeacon")
|| args[0].equalsIgnoreCase("we-selection"))) {
for (AdvancedPortal portal : Portal.portals) {
autoComplete.add(portal.getName());
}

View File

@ -9,6 +9,7 @@ import com.sekwah.advancedportals.bukkit.listeners.*;
import com.sekwah.advancedportals.bukkit.metrics.Metrics;
import com.sekwah.advancedportals.bukkit.portals.Portal;
import com.sekwah.advancedportals.bungee.BungeeMessages;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
@ -24,6 +25,9 @@ public class AdvancedPortalsPlugin extends JavaPlugin {
protected boolean isProxyPluginEnabled = false;
protected boolean forceRegisterProxyChannels = false;
protected boolean disableProxyWarning = false;
private boolean worldEditActive = false;
protected static final Map<String, String> PLAYER_DESTI_MAP = new HashMap<>();
@ -45,6 +49,7 @@ public class AdvancedPortalsPlugin extends JavaPlugin {
FileConfiguration pluginConfig = config.getConfig();
forceRegisterProxyChannels = pluginConfig.getBoolean(ConfigHelper.FORCE_ENABLE_PROXY_SUPPORT, false);
disableProxyWarning = pluginConfig.getBoolean(ConfigHelper.DISABLE_PROXY_WARNING, false);
ConfigAccessor portalConfig = new ConfigAccessor(this, "portals.yml");
portalConfig.saveDefaultConfig();
@ -73,8 +78,12 @@ public class AdvancedPortalsPlugin extends JavaPlugin {
for (Player player:
this.getServer().getOnlinePlayers()) {
player.removeMetadata("hasWarped", this);
player.removeMetadata("lavaWarped", this);
player.removeMetadata(Listeners.HAS_WARPED, this);
player.removeMetadata(Listeners.LAVA_WARPED, this);
}
if (settings.enabledWorldEditIntegration() && Bukkit.getPluginManager().isPluginEnabled("WorldEdit")) {
worldEditActive = true;
}
// thanks to the new config accessor code the config.saveDefaultConfig(); will now
@ -139,7 +148,8 @@ public class AdvancedPortalsPlugin extends JavaPlugin {
getLogger().info( "Bungee detected. Enabling proxy features." );
return true;
}
} catch(NullPointerException e) {
} catch(NoSuchMethodError | NullPointerException e) {
if(!disableProxyWarning) getLogger().info("BungeeCord config not detected, ignoring settings");
}
// Will be valid if paperspigot is being used. Otherwise catch.
@ -150,10 +160,11 @@ public class AdvancedPortalsPlugin extends JavaPlugin {
getLogger().info( "Modern forwarding detected. Enabling proxy features." );
return true;
}
} catch(NullPointerException e) {
} catch(NoSuchMethodError | NullPointerException e) {
if(!disableProxyWarning) getLogger().info("Paper config not detected, ignoring paper settings");
}
getLogger().warning( "Proxy features disabled for Advanced Portals as bungee isn't enabled on the server (spigot.yml) " +
if(!disableProxyWarning) getLogger().warning( "Proxy features disabled for Advanced Portals as bungee isn't enabled on the server (spigot.yml) " +
"or if you are using Paper settings.velocity-support.enabled may not be enabled (paper.yml)" );
return false;
}
@ -168,4 +179,8 @@ public class AdvancedPortalsPlugin extends JavaPlugin {
public Settings getSettings() {
return settings;
}
public boolean isWorldEditActive() {
return worldEditActive;
}
}

View File

@ -1,27 +1,34 @@
package com.sekwah.advancedportals.bukkit;
import com.sekwah.advancedportals.bukkit.config.ConfigAccessor;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
public class PluginMessages {
private final AdvancedPortalsPlugin plugin;
private static String WARP_MESSAGE;
public boolean useCustomPrefix = false;
public static String customPrefix = "\u00A7a[\u00A7eAdvancedPortals\u00A7a]";
public static String customPrefixFail = "\u00A7c[\u00A77AdvancedPortals\u00A7c]";
public PluginMessages (AdvancedPortalsPlugin plugin) {
this.plugin = plugin;
ConfigAccessor config = new ConfigAccessor(this.plugin, "config.yml");
ConfigAccessor config = new ConfigAccessor(plugin, "config.yml");
this.useCustomPrefix = config.getConfig().getBoolean("UseCustomPrefix");
if (useCustomPrefix) {
PluginMessages.customPrefix = config.getConfig().getString("CustomPrefix").replaceAll("&(?=[0-9a-fk-or])", "\u00A7");
PluginMessages.customPrefixFail = config.getConfig().getString("CustomPrefixFail").replaceAll("&(?=[0-9a-fk-or])", "\u00A7");
}
WARP_MESSAGE = ChatColor.translateAlternateColorCodes('&', config.getConfig().getString("WarpMessage", "&aYou have warped to &e<warp>&a"));
}
// This class is so then the common messages in commands or just messages over the commands are the same and can be
// easily changed.
public static String getWarpMessage(String warp) {
String cleanedWarp = warp.replace("_", " ");
return WARP_MESSAGE.replace("<warp>", cleanedWarp);
}
public static void UnknownCommand(CommandSender sender, String command) {
sender.sendMessage(customPrefixFail + " You need to type something after /" + command + "\n");
sender.sendMessage("\u00A7cIf you do not know what you can put or would like some help with the commands please type \u00A7e" + '"' + "\u00A7e/" + command + " help" + '"' + "\u00A7c\n");

View File

@ -15,10 +15,13 @@ public class Settings {
private String commandLevels = "n";
private boolean worldEditEnabled = false;
public enum PortalConfigOption {
COMMAND_LEVELS("CommandLevels"),
WARP_PARTICLES("WarpParticles"),
WARP_SOUND("WarpSound");
WARP_SOUND("WarpSound"),
WORLDEDIT_INTEGRATION("WorldEditIntegration");
private final String target;
@ -38,6 +41,8 @@ public class Settings {
commandLevels = config.getConfig().getString(COMMAND_LEVELS.value(), "opcb");
worldEditEnabled = config.getConfig().getBoolean(WORLDEDIT_INTEGRATION.value(), false);
assert commandLevels != null;
if(commandLevels.equals("opchek")) {
commandLevels = "opcb";
@ -63,4 +68,8 @@ public class Settings {
public int getCurrentWarpParticles() {
return currentWarpParticles;
}
public boolean enabledWorldEditIntegration() {
return worldEditEnabled;
}
}

View File

@ -9,6 +9,7 @@ public class ConfigHelper {
public static final String COMMAND_LOGS = "CommandLogs";
public static final String FORCE_ENABLE_PROXY_SUPPORT = "ForceEnableProxySupport";
public static final String DISABLE_PROXY_WARNING = "DisableProxyWarning";
public static final String PROXY_TELEPORT_DELAY = "ProxyTeleportDelay";
@ -34,6 +35,7 @@ public class ConfigHelper {
} else if(configVersion.equals("0.5.4")) {
config.set(ConfigHelper.CONFIG_VERSION, "0.5.11");
config.set(ConfigHelper.COMMAND_LOGS, true);
update();
} else if(configVersion.equals("0.5.10") || configVersion.equals("0.5.11")) {
config.set(ConfigHelper.CONFIG_VERSION, "0.5.13");
config.set(ConfigHelper.FORCE_ENABLE_PROXY_SUPPORT, false);

View File

@ -164,10 +164,10 @@ public class Destination {
if (PORTAL_MESSAGE_DISPLAY == 1) {
player.sendMessage("");
player.sendMessage(PluginMessages.customPrefix + "\u00A7a You have been warped to \u00A7e" + dest.replaceAll("_", " ") + "\u00A7a.");
player.sendMessage(PluginMessages.customPrefix + PluginMessages.getWarpMessage(dest));
player.sendMessage("");
} else if (PORTAL_MESSAGE_DISPLAY == 2 && !hideActionbar) {
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("\u00A7aYou have warped to \u00A7e" + dest.replaceAll("_", " ") + "\u00A7a."));
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(PluginMessages.getWarpMessage(dest)));
}
Location newLoc = player.getLocation();

View File

@ -34,6 +34,9 @@ public class Listeners implements Listener {
private final AdvancedPortalsPlugin plugin;
public static String HAS_WARPED = "hasWarped";
public static String LAVA_WARPED = "lavaWarped";
@SuppressWarnings("deprecation")
public Listeners(AdvancedPortalsPlugin plugin) {
this.plugin = plugin;
@ -133,14 +136,11 @@ public class Listeners implements Listener {
for (Location loc : locations) {
if (delayed ? Portal.locationInPortal(portal, loc, 1)
: Portal.locationInPortalTrigger(portal, loc)) {
if (portal.getTriggers().contains(Material.NETHER_PORTAL)) {
if (player.getGameMode().equals(GameMode.CREATIVE)) {
player.setMetadata("hasWarped", new FixedMetadataValue(plugin, true));
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new RemoveWarpData(player), 10);
}
}
player.setMetadata(HAS_WARPED, new FixedMetadataValue(plugin, true));
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new RemoveWarpData(player), 10);
if (portal.getTriggers().contains(Material.LAVA)) {
player.setMetadata("lavaWarped", new FixedMetadataValue(plugin, true));
player.setMetadata(LAVA_WARPED, new FixedMetadataValue(plugin, true));
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new RemoveLavaData(player), 10);
}
if (portal.inPortal.contains(player.getUniqueId()))
@ -231,7 +231,7 @@ public class Listeners implements Listener {
@Override
public void run() {
player.removeMetadata("lavaWarped", plugin);
player.removeMetadata(LAVA_WARPED, plugin);
player.setFireTicks(0);
}
}
@ -247,7 +247,7 @@ public class Listeners implements Listener {
@Override
public void run() {
if (player != null && player.isOnline()) {
player.removeMetadata("hasWarped", plugin);
player.removeMetadata(HAS_WARPED, plugin);
}
}
}
@ -263,7 +263,7 @@ public class Listeners implements Listener {
if (event.getEntity() instanceof Player && (event.getCause() == EntityDamageEvent.DamageCause.LAVA
|| event.getCause() == EntityDamageEvent.DamageCause.FIRE
|| event.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)) {
if (event.getEntity().hasMetadata("lavaWarped")
if (event.getEntity().hasMetadata(LAVA_WARPED)
| Portal.inPortalTriggerRegion(event.getEntity().getLocation()))
event.setCancelled(true);
}
@ -276,14 +276,14 @@ public class Listeners implements Listener {
}
Player player = event.getPlayer();
if (!player.hasMetadata("hasWarped")) {
if (!player.hasMetadata(HAS_WARPED)) {
Location loc = event.getFrom();
Location eyeLoc = new Location(loc.getWorld(), loc.getX(), loc.getY() + player.getEyeHeight(), loc.getZ());
checkTriggerLocations(player, true, loc, eyeLoc);
}
if (player.hasMetadata("hasWarped") | Portal.inPortalRegion(event.getFrom(), 1))
if (player.hasMetadata(HAS_WARPED) | Portal.inPortalRegion(event.getFrom(), 1))
event.setCancelled(true);
}
@ -329,8 +329,8 @@ public class Listeners implements Listener {
}
if (player.hasPermission("advancedportals.createportal")) {
if (event.getItem() != null && event.getItem().getType() == WandMaterial // was type id
if (!plugin.getSettings().enabledWorldEditIntegration()
&& event.getItem() != null && event.getItem().getType() == WandMaterial // was type id
&& (!UseOnlyServerAxe || (checkItemForName(event.getItem()) && event.getItem().getItemMeta()
.getDisplayName().equals("\u00A7ePortal Region Selector")))) {
@ -371,7 +371,6 @@ public class Listeners implements Listener {
// Returns the event so no more code is executed(stops unnecessary code being
// executed)
}
} else if (checkItemForName(event.getItem())
&& event.getItem().getItemMeta().getDisplayName().equals("\u00A75Portal Block Placer")
&& event.getAction() == Action.LEFT_CLICK_BLOCK

View File

@ -577,12 +577,15 @@ public class Portal {
} else if (command.startsWith("!") && plugin.getSettings().enabledCommandLevel("o")) {
command = command.substring(1);
boolean wasOp = player.isOp();
try {
player.setOp(true);
if(!wasOp) {
try {
player.setOp(true);
player.chat("/" + command);
} finally {
player.setOp(false);
}
} else {
player.chat("/" + command);
// player.performCommand(command);
} finally {
player.setOp(wasOp);
}
} else if (command.startsWith("^") && plugin.getSettings().enabledCommandLevel("p")) {
command = command.substring(1);

View File

@ -0,0 +1,47 @@
package com.sekwah.advancedportals.bukkit.util;
import com.sk89q.worldedit.IncompleteRegionException;
import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.regions.RegionSelector;
import com.sk89q.worldedit.regions.selector.CuboidRegionSelector;
import org.bukkit.Location;
import org.bukkit.entity.Player;
public class WorldEditIntegration {
private static Region getCurrentSelection(Player player) {
LocalSession localSession = WorldEdit.getInstance().getSessionManager().get(BukkitAdapter.adapt(player));
try {
return localSession.getSelection(BukkitAdapter.adapt(player.getWorld()));
} catch (IncompleteRegionException e) {
return null;
}
}
public static boolean validateSelection(Player player) {
return getCurrentSelection(player) instanceof CuboidRegion;
}
public static Location getPos1(Player player) {
Region currentSelection = getCurrentSelection(player);
if (!(currentSelection instanceof CuboidRegion)) return null;
return BukkitAdapter.adapt(player.getWorld(), ((CuboidRegion) currentSelection).getPos1());
}
public static Location getPos2(Player player) {
Region currentSelection = getCurrentSelection(player);
if (currentSelection == null) return null;;
return BukkitAdapter.adapt(player.getWorld(), ((CuboidRegion) currentSelection).getPos2());
}
public static void explainRegion(Player player, Location pos1, Location pos2) {
LocalSession localSession = WorldEdit.getInstance().getSessionManager().get(BukkitAdapter.adapt(player));
RegionSelector selector = new CuboidRegionSelector(BukkitAdapter.adapt(player.getWorld()), BukkitAdapter.asBlockVector(pos1), BukkitAdapter.asBlockVector(pos2));
localSession.setRegionSelector(BukkitAdapter.adapt(player.getWorld()), selector);
selector.explainRegionAdjust(BukkitAdapter.adapt(player), localSession);
}
}

View File

@ -23,7 +23,8 @@ import java.util.concurrent.TimeUnit;
*/
@Plugin(id = "advancedportals", name = "Advanced Portals",
url = "https://www.spigotmc.org/resources/advanced-portals.14356/",
version = "0.6.0")
authors = {"sekwah"},
version = "0.9.2")
public class AdvancedPortalsPlugin {
public HashMap<String, String[]> PlayerDestiMap = new HashMap<>();

View File

@ -1,4 +1,4 @@
main: com.sekwah.advancedportals.bungee.AdvancedPortalsPlugin
name: AdvancedPortals
version: 0.6.0
author: sekwah41
version: 0.9.2
author: sekwah

View File

@ -65,6 +65,9 @@ CustomPrefix: '&a[&eAdvancedPortals&a]'
CustomPrefixFail: '&c[&7AdvancedPortals&c]'
# Message sent to player in chat/action bar on warp
WarpMessage: '&aYou have warped to &e<warp>&a.'
BlockSpectatorMode: false
PortalCooldown: 5 # How long after trying to enter a portal until the player can try to enter another. 0 or lower to deactivate.
@ -95,3 +98,10 @@ ForceEnableProxySupport: false
# How many seconds after the proxy event fires should the player be teleported (should help with on spawn plugins and such)
# 0 is disabled and anything higher causes a delay.
ProxyTeleportDelay: 0
# Just in case you are not using the proxy and dont want the warning message
DisableProxyWarning: false
# Whether the integration with worldedit should be enabled.
# This will force AdvancedPortals to use WorldEdit selections.
WorldEditIntegration: false

View File

@ -1,15 +1,19 @@
main: com.sekwah.advancedportals.bukkit.AdvancedPortalsPlugin
name: AdvancedPortals
version: 0.6.0
author: sekwah41
version: 0.9.2
author: sekwah
description: An advanced portals plugin for bukkit.
api-version: 1.13
softdepend:
- WorldEdit
commands:
advancedportals:
description: The main command for the advanced portals
aliases: [portals, aportals, portal, ap]
usage: /<command>
permission: advancedportals.portal
permission: advancedportals.portalcommand
destination:
description: Can be used to access portal destinations.
aliases: [desti]
@ -50,6 +54,9 @@ permissions:
advancedportals.portal:
description: Allows use of portal commands
default: op
advancedportals.portalcommand:
description: Access to the portal command. This is seperate to allow access to portal warps without the rest.
default: true
advancedportals.build:
description: Allows you to build in the portal regions
default: op

2789
yarn.lock Normal file

File diff suppressed because it is too large Load Diff