Compare commits
	
		
			39 Commits
		
	
	
		
			0.9.3.5
			...
			vertical-s
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2dcf7b7af0 | |||
| af9142bb05 | |||
| 116e816a18 | |||
| 0f0b8b7087 | |||
| e4539c3623 | |||
| e1ca1fe8b0 | |||
| 9ac3c11345 | |||
| 13cdccfc1d | |||
| 6954d46af4 | |||
| a1f25a794e | |||
| 31b3423246 | |||
| a35c07dc9c | |||
| 5aed252181 | |||
| ef97da9177 | |||
| a26cc30092 | |||
| 4fda4c3905 | |||
| 2b23e6fc56 | |||
| c09063c49e | |||
| b5e2565626 | |||
| fbabe7b117 | |||
| 5e456a1326 | |||
| 11d3dc7a92 | |||
| 1c87d803ff | |||
| 2076fda4d1 | |||
| 524130c4e0 | |||
| ce5f3ef52f | |||
| cae34d395b | |||
| 643a48392b | |||
| 92c3eadf8f | |||
| 92f452df00 | |||
| 6eb7649e0d | |||
| 5c2cbaae58 | |||
| 0c69dc8991 | |||
| 68bed24137 | |||
| 5c1f9036c2 | |||
| 8488c5abdb | |||
| e3189e9ab2 | |||
| 8c334ff5f0 | |||
| 99ee5c6978 | 
							
								
								
									
										19
									
								
								HEADER
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								HEADER
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					Stargate - A portal plugin for Bukkit
 | 
				
			||||||
 | 
					Copyright (C) 2011 Shaun (sturmeh)
 | 
				
			||||||
 | 
					Copyright (C) 2011 Dinnerbone
 | 
				
			||||||
 | 
					Copyright (C) 2011-2013 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
				
			||||||
 | 
					Copyright (C) 2015-2020 Michael Smith (PseudoKnight)
 | 
				
			||||||
 | 
					Copyright (C) 2021-2022 Kristian Knarvik (EpicKnarvik97)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					it under the terms of the GNU Lesser General Public License as published by
 | 
				
			||||||
 | 
					the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					(at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					GNU Lesser General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You should have received a copy of the GNU Lesser General Public License
 | 
				
			||||||
 | 
					along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
							
								
								
									
										10
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							@@ -1,7 +1,7 @@
 | 
				
			|||||||
pipeline {
 | 
					pipeline {
 | 
				
			||||||
    agent any
 | 
					    agent any
 | 
				
			||||||
    tools {
 | 
					    tools {
 | 
				
			||||||
        jdk 'JDK16'
 | 
					        jdk 'JDK17'
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    stages {
 | 
					    stages {
 | 
				
			||||||
        stage('Build') {
 | 
					        stage('Build') {
 | 
				
			||||||
@@ -16,10 +16,16 @@ pipeline {
 | 
				
			|||||||
                sh 'mvn test'
 | 
					                sh 'mvn test'
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        stage('Verify') {
 | 
				
			||||||
 | 
					            steps {
 | 
				
			||||||
 | 
					                echo 'Verifying...'
 | 
				
			||||||
 | 
					                sh 'mvn verify -Dmaven.test.skip=true'
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        stage('Deploy') {
 | 
					        stage('Deploy') {
 | 
				
			||||||
             steps {
 | 
					             steps {
 | 
				
			||||||
                echo 'Deploying...'
 | 
					                echo 'Deploying...'
 | 
				
			||||||
                sh 'mvn verify -Dmaven.test.skip=true'
 | 
					                sh 'mvn deploy -Dmaven.install.skip=true -Dmaven.test.skip=true'
 | 
				
			||||||
                archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
 | 
					                archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										36
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								README.md
									
									
									
									
									
								
							@@ -7,7 +7,7 @@ can share a network or be split into clusters; they can be hidden on a network o
 | 
				
			|||||||
- **Vault economy support** -- can add costs for create, destroy and use.
 | 
					- **Vault economy support** -- can add costs for create, destroy and use.
 | 
				
			||||||
- **Ability to create custom gate configurations**. Four different default gate configurations are available.
 | 
					- **Ability to create custom gate configurations**. Four different default gate configurations are available.
 | 
				
			||||||
- **Message customization**
 | 
					- **Message customization**
 | 
				
			||||||
- **Multiple built-in languages** (de, en, es, fr, hu, it, nb-no, nl, nn-no, pt-br, ru)
 | 
					- **Multiple built-in languages** (de, en, es, fr, hu, it, ja, nb-no, nl, nn-no, pt-br, ru, zh_cn)
 | 
				
			||||||
- **Teleport across worlds or servers** (BungeeCord supported)
 | 
					- **Teleport across worlds or servers** (BungeeCord supported)
 | 
				
			||||||
- **Vehicle teleportation** -- teleport minecarts, boats, horses, pigs and striders
 | 
					- **Vehicle teleportation** -- teleport minecarts, boats, horses, pigs and striders
 | 
				
			||||||
- **Leashed teleportation** -- teleport any creature in a leash with the player
 | 
					- **Leashed teleportation** -- teleport any creature in a leash with the player
 | 
				
			||||||
@@ -26,6 +26,11 @@ This was originally TheDgtl's Bukkit port of the Stargate plugin for hMod by Din
 | 
				
			|||||||
of [PseudoKnight's fork](https://github.com/PseudoKnight/Stargate-Bukkit). This fork's main purpose is to create a clean
 | 
					of [PseudoKnight's fork](https://github.com/PseudoKnight/Stargate-Bukkit). This fork's main purpose is to create a clean
 | 
				
			||||||
version of Stargate compliant with Spigot 1.17, even if it means changing the entire project's previous structure.
 | 
					version of Stargate compliant with Spigot 1.17, even if it means changing the entire project's previous structure.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Stargate is licensed under the GNU Lesser General Public License Version 3.0. This includes every source and resource
 | 
				
			||||||
 | 
					file. See the HEADER file for a more detailed license description.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Migration
 | 
					## Migration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This plugin should be compatible with configurations from the Stargate plugin all the way back. The nethergate.gate
 | 
					This plugin should be compatible with configurations from the Stargate plugin all the way back. The nethergate.gate
 | 
				
			||||||
@@ -298,7 +303,7 @@ while the per-gate costs re defined in the .gate files. To define a certain cost
 | 
				
			|||||||
# Configuration
 | 
					# Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
language - The language to use (Included languages: en, de, es, fr, hu, it, nb-no, nl, nn-no, pt-br, ru)
 | 
					language - The language to use (Included languages: en, de, es, fr, hu, it, ja, nb-no, nl, nn-no, pt-br, ru, zh_cn)
 | 
				
			||||||
adminUpdateAlert - Whether to alert admins about an available update when joining the server
 | 
					adminUpdateAlert - Whether to alert admins about an available update when joining the server
 | 
				
			||||||
folders:
 | 
					folders:
 | 
				
			||||||
  portalFolder - The folder your portal databases are saved in
 | 
					  portalFolder - The folder your portal databases are saved in
 | 
				
			||||||
@@ -343,7 +348,7 @@ advanced:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Message Customization
 | 
					# Message Customization
 | 
				
			||||||
 | 
					
 | 
				
			||||||
It is possible to customize all the messages Stargate displays, including the [Stargate] prefix. You can find the
 | 
					It is possible to customize all the messages Stargate displays, including the \[Stargate] prefix. You can find the
 | 
				
			||||||
strings in plugins/Stargate/lang/chosenLanguage.txt.
 | 
					strings in plugins/Stargate/lang/chosenLanguage.txt.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If a string is removed, or left blank, it will default to the default english string. There are some special cases
 | 
					If a string is removed, or left blank, it will default to the default english string. There are some special cases
 | 
				
			||||||
@@ -400,6 +405,31 @@ portalInfoServer=Server: %server%
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Changes
 | 
					# Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### \[Version 0.9.4.2] EpicKnarvik97 fork
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Avoids a NullPointerException if Dynmap is present, but isn't properly loaded.
 | 
				
			||||||
 | 
					- Avoids some potential NullPointerExceptions related to Dynmap integration
 | 
				
			||||||
 | 
					- Fixes end portals hijacking BungeeCord teleportation
 | 
				
			||||||
 | 
					- Fixes a problem where a player might not be properly teleported from an end portal Stargate in the end to the
 | 
				
			||||||
 | 
					  over-world.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### \[Version 0.9.4.1] EpicKnarvik97 fork
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Reverts to Spigot API 1.18
 | 
				
			||||||
 | 
					- Adds Dynmap integration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### \[Version 0.9.4.0] EpicKnarvik97 fork
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Updates Stargate to 1.19
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### \[Version 0.9.3.7] EpicKnarvik97 fork
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Adds the Japanese language file provided by spigot user furplag
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### \[Version 0.9.3.6] EpicKnarvik97 fork
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Adds the simplified Chinese language file provided by spigot user YKDZ
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### \[Version 0.9.3.5] EpicKnarvik97 fork
 | 
					#### \[Version 0.9.3.5] EpicKnarvik97 fork
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Fixes the wait for player delay being too low by default
 | 
					- Fixes the wait for player delay being too low by default
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										96
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										96
									
								
								pom.xml
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <groupId>net.knarcraft</groupId>
 | 
					    <groupId>net.knarcraft</groupId>
 | 
				
			||||||
    <artifactId>Stargate</artifactId>
 | 
					    <artifactId>Stargate</artifactId>
 | 
				
			||||||
    <version>0.9.3.5</version>
 | 
					    <version>0.9.4.3-SNAPSHOT</version>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <licenses>
 | 
					    <licenses>
 | 
				
			||||||
        <license>
 | 
					        <license>
 | 
				
			||||||
@@ -15,49 +15,72 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <properties>
 | 
					    <properties>
 | 
				
			||||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
					        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
				
			||||||
        <maven.compiler.source>17</maven.compiler.source>
 | 
					        <java.version>16</java.version>
 | 
				
			||||||
        <maven.compiler.target>17</maven.compiler.target>
 | 
					 | 
				
			||||||
    </properties>
 | 
					    </properties>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <repositories>
 | 
					    <repositories>
 | 
				
			||||||
 | 
					        <repository>
 | 
				
			||||||
 | 
					            <id>knarcraft-repo</id>
 | 
				
			||||||
 | 
					            <url>https://git.knarcraft.net/api/packages/EpicKnarvik97/maven</url>
 | 
				
			||||||
 | 
					        </repository>
 | 
				
			||||||
        <repository>
 | 
					        <repository>
 | 
				
			||||||
            <id>spigot-repo</id>
 | 
					            <id>spigot-repo</id>
 | 
				
			||||||
            <url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
 | 
					            <url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
 | 
				
			||||||
        </repository>
 | 
					        </repository>
 | 
				
			||||||
        <repository>
 | 
					        <repository>
 | 
				
			||||||
            <id>vault-repo</id>
 | 
					            <id>vault-repo</id>
 | 
				
			||||||
            <url>http://nexus.hc.to/content/repositories/pub_releases</url>
 | 
					            <url>https://nexus.hc.to/content/repositories/pub_releases</url>
 | 
				
			||||||
 | 
					        </repository>
 | 
				
			||||||
 | 
					        <repository>
 | 
				
			||||||
 | 
					            <id>dynmap</id>
 | 
				
			||||||
 | 
					            <url>https://repo.mikeprimm.com/</url>
 | 
				
			||||||
 | 
					        </repository>
 | 
				
			||||||
 | 
					        <repository>
 | 
				
			||||||
 | 
					            <id>papermc</id>
 | 
				
			||||||
 | 
					            <url>https://repo.papermc.io/repository/maven-public/</url>
 | 
				
			||||||
        </repository>
 | 
					        </repository>
 | 
				
			||||||
    </repositories>
 | 
					    </repositories>
 | 
				
			||||||
 | 
					    <distributionManagement>
 | 
				
			||||||
 | 
					        <repository>
 | 
				
			||||||
 | 
					            <id>knarcraft-repo</id>
 | 
				
			||||||
 | 
					            <url>https://git.knarcraft.net/api/packages/EpicKnarvik97/maven</url>
 | 
				
			||||||
 | 
					        </repository>
 | 
				
			||||||
 | 
					        <snapshotRepository>
 | 
				
			||||||
 | 
					            <id>knarcraft-repo</id>
 | 
				
			||||||
 | 
					            <url>https://git.knarcraft.net/api/packages/EpicKnarvik97/maven</url>
 | 
				
			||||||
 | 
					        </snapshotRepository>
 | 
				
			||||||
 | 
					    </distributionManagement>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <dependencies>
 | 
					    <dependencies>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.spigotmc</groupId>
 | 
					            <groupId>org.spigotmc</groupId>
 | 
				
			||||||
            <artifactId>spigot-api</artifactId>
 | 
					            <artifactId>spigot-api</artifactId>
 | 
				
			||||||
            <version>1.18.1-R0.1-SNAPSHOT</version>
 | 
					            <version>1.19.3-R0.1-SNAPSHOT</version>
 | 
				
			||||||
 | 
					            <scope>provided</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>net.milkbowl.vault</groupId>
 | 
					            <groupId>net.milkbowl.vault</groupId>
 | 
				
			||||||
            <artifactId>VaultAPI</artifactId>
 | 
					            <artifactId>VaultAPI</artifactId>
 | 
				
			||||||
            <version>1.7</version>
 | 
					            <version>1.7</version>
 | 
				
			||||||
 | 
					            <scope>provided</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.junit.jupiter</groupId>
 | 
					            <groupId>org.junit.jupiter</groupId>
 | 
				
			||||||
            <artifactId>junit-jupiter-api</artifactId>
 | 
					            <artifactId>junit-jupiter-api</artifactId>
 | 
				
			||||||
            <version>5.8.2</version>
 | 
					            <version>5.9.0</version>
 | 
				
			||||||
            <scope>test</scope>
 | 
					            <scope>test</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>com.github.seeseemelk</groupId>
 | 
					            <groupId>com.github.seeseemelk</groupId>
 | 
				
			||||||
            <artifactId>MockBukkit-v1.18</artifactId>
 | 
					            <artifactId>MockBukkit-v1.18</artifactId>
 | 
				
			||||||
            <version>1.15.5</version>
 | 
					            <version>2.85.2</version>
 | 
				
			||||||
            <scope>test</scope>
 | 
					            <scope>test</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.jetbrains</groupId>
 | 
					            <groupId>org.jetbrains</groupId>
 | 
				
			||||||
            <artifactId>annotations</artifactId>
 | 
					            <artifactId>annotations</artifactId>
 | 
				
			||||||
            <version>22.0.0</version>
 | 
					            <version>23.0.0</version>
 | 
				
			||||||
            <scope>compile</scope>
 | 
					            <scope>provided</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>junit</groupId>
 | 
					            <groupId>junit</groupId>
 | 
				
			||||||
@@ -65,20 +88,67 @@
 | 
				
			|||||||
            <version>4.13.2</version>
 | 
					            <version>4.13.2</version>
 | 
				
			||||||
            <scope>test</scope>
 | 
					            <scope>test</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>us.dynmap</groupId>
 | 
				
			||||||
 | 
					            <artifactId>dynmap-api</artifactId>
 | 
				
			||||||
 | 
					            <version>3.1-beta-2</version>
 | 
				
			||||||
 | 
					            <scope>provided</scope>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>net.knarcraft</groupId>
 | 
				
			||||||
 | 
					            <artifactId>knarlib</artifactId>
 | 
				
			||||||
 | 
					            <version>1.0-SNAPSHOT</version>
 | 
				
			||||||
 | 
					            <scope>compile</scope>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <build>
 | 
					    <build>
 | 
				
			||||||
        <sourceDirectory>src/main/java</sourceDirectory>
 | 
					 | 
				
			||||||
        <plugins>
 | 
					        <plugins>
 | 
				
			||||||
            <plugin>
 | 
					            <plugin>
 | 
				
			||||||
                <groupId>org.apache.maven.plugins</groupId>
 | 
					                <groupId>org.apache.maven.plugins</groupId>
 | 
				
			||||||
                <artifactId>maven-compiler-plugin</artifactId>
 | 
					                <artifactId>maven-compiler-plugin</artifactId>
 | 
				
			||||||
                <version>3.6.1</version>
 | 
					                <version>3.8.1</version>
 | 
				
			||||||
                <configuration>
 | 
					                <configuration>
 | 
				
			||||||
                    <source>17</source>
 | 
					                    <source>${java.version}</source>
 | 
				
			||||||
                    <target>17</target>
 | 
					                    <target>${java.version}</target>
 | 
				
			||||||
                </configuration>
 | 
					                </configuration>
 | 
				
			||||||
            </plugin>
 | 
					            </plugin>
 | 
				
			||||||
 | 
					            <plugin>
 | 
				
			||||||
 | 
					                <groupId>org.apache.maven.plugins</groupId>
 | 
				
			||||||
 | 
					                <artifactId>maven-shade-plugin</artifactId>
 | 
				
			||||||
 | 
					                <version>3.2.4</version>
 | 
				
			||||||
 | 
					                <executions>
 | 
				
			||||||
 | 
					                    <execution>
 | 
				
			||||||
 | 
					                        <phase>package</phase>
 | 
				
			||||||
 | 
					                        <goals>
 | 
				
			||||||
 | 
					                            <goal>shade</goal>
 | 
				
			||||||
 | 
					                        </goals>
 | 
				
			||||||
 | 
					                        <configuration>
 | 
				
			||||||
 | 
					                            <createDependencyReducedPom>false</createDependencyReducedPom>
 | 
				
			||||||
 | 
					                            <filters>
 | 
				
			||||||
 | 
					                                <filter>
 | 
				
			||||||
 | 
					                                    <artifact>net.knarcraft:knarlib</artifact>
 | 
				
			||||||
 | 
					                                    <includes>
 | 
				
			||||||
 | 
					                                        <include>net/knarcraft/knarlib/**</include>
 | 
				
			||||||
 | 
					                                    </includes>
 | 
				
			||||||
 | 
					                                </filter>
 | 
				
			||||||
 | 
					                                <filter>
 | 
				
			||||||
 | 
					                                    <excludes>
 | 
				
			||||||
 | 
					                                        <exclude>*.MF</exclude>
 | 
				
			||||||
 | 
					                                        <exclude>*.yml</exclude>
 | 
				
			||||||
 | 
					                                    </excludes>
 | 
				
			||||||
 | 
					                                </filter>
 | 
				
			||||||
 | 
					                            </filters>
 | 
				
			||||||
 | 
					                        </configuration>
 | 
				
			||||||
 | 
					                    </execution>
 | 
				
			||||||
 | 
					                </executions>
 | 
				
			||||||
 | 
					            </plugin>
 | 
				
			||||||
        </plugins>
 | 
					        </plugins>
 | 
				
			||||||
 | 
					        <resources>
 | 
				
			||||||
 | 
					            <resource>
 | 
				
			||||||
 | 
					                <directory>src/main/resources</directory>
 | 
				
			||||||
 | 
					                <filtering>true</filtering>
 | 
				
			||||||
 | 
					            </resource>
 | 
				
			||||||
 | 
					        </resources>
 | 
				
			||||||
    </build>
 | 
					    </build>
 | 
				
			||||||
</project>
 | 
					</project>
 | 
				
			||||||
							
								
								
									
										180
									
								
								src/main/java/net/knarcraft/stargate/SimpleVectorOperation.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										180
									
								
								src/main/java/net/knarcraft/stargate/SimpleVectorOperation.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,180 @@
 | 
				
			|||||||
 | 
					package net.knarcraft.stargate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.Axis;
 | 
				
			||||||
 | 
					import org.bukkit.block.BlockFace;
 | 
				
			||||||
 | 
					import org.bukkit.util.BlockVector;
 | 
				
			||||||
 | 
					import org.bukkit.util.Vector;
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A class for performing rotational operations on vectors
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Kristian Knarvik
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@SuppressWarnings("unused")
 | 
				
			||||||
 | 
					public class SimpleVectorOperation {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static final Map<BlockFace, Double> rotationAngles = new HashMap<>();
 | 
				
			||||||
 | 
					    private static final Map<BlockFace, Vector> rotationAxes = new HashMap<>();
 | 
				
			||||||
 | 
					    private static final Map<BlockFace, Axis> normalAxes = new HashMap<>();
 | 
				
			||||||
 | 
					    private static final BlockFace defaultDirection = BlockFace.SOUTH;
 | 
				
			||||||
 | 
					    private static final Axis defaultVerticalAxis = Axis.Y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final Axis normalAxis;
 | 
				
			||||||
 | 
					    private boolean flipZAxis = false;
 | 
				
			||||||
 | 
					    private final BlockFace facing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Instantiates a vector operation to rotate vectors in the direction of a sign face
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param signFace <p>The sign face of a gate's sign</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public SimpleVectorOperation(BlockFace signFace) {
 | 
				
			||||||
 | 
					        if (normalAxes.isEmpty()) {
 | 
				
			||||||
 | 
					            initializeIrisNormalAxes();
 | 
				
			||||||
 | 
					            initializeOperations();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.facing = signFace;
 | 
				
			||||||
 | 
					        this.normalAxis = normalAxes.get(signFace);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets the block face of a sign given upon instantiation
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return <p>The block face of a sign given upon instantiation</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public BlockFace getFacing() {
 | 
				
			||||||
 | 
					        return facing;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets the normal axis orthogonal to the opening plane
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * <p>Said another way, get the axis going directly towards or away from a stargate's entrance.</p>
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return <p>The normal axis orthogonal to the opening plane</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Axis getNormalAxis() {
 | 
				
			||||||
 | 
					        return normalAxis;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Sets whether to flip the Z- axis
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param flipZAxis <p>Whether to flip the z-axis</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void setFlipZAxis(boolean flipZAxis) {
 | 
				
			||||||
 | 
					        this.flipZAxis = flipZAxis;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Performs an operation from the real space to the vector space
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param vector <p>The vector to perform the operation on</p>
 | 
				
			||||||
 | 
					     * @return vector <p>A new vector with the operation applied</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Vector performToAbstractSpaceOperation(@NotNull Vector vector) {
 | 
				
			||||||
 | 
					        Vector clone = vector.clone();
 | 
				
			||||||
 | 
					        clone.rotateAroundAxis(rotationAxes.get(facing), rotationAngles.get(facing));
 | 
				
			||||||
 | 
					        if (flipZAxis) {
 | 
				
			||||||
 | 
					            clone.setZ(-clone.getZ());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return clone;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Performs an operation from the vector space to the real space
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param vector <p>The vector to perform the inverse operation on</p>
 | 
				
			||||||
 | 
					     * @return vector <p>A new vector with the operation applied</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Vector performToRealSpaceOperation(@NotNull Vector vector) {
 | 
				
			||||||
 | 
					        Vector clone = vector.clone();
 | 
				
			||||||
 | 
					        if (flipZAxis) {
 | 
				
			||||||
 | 
					            clone.setZ(-clone.getZ());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return clone.rotateAroundAxis(rotationAxes.get(facing), -rotationAngles.get(facing));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Performs an operation from the vector space to the real space
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param vector <p>The vector to perform the inverse operation on</p>
 | 
				
			||||||
 | 
					     * @return vector <p>A new vector with the operation applied</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public BlockVector performToRealSpaceOperation(@NotNull BlockVector vector) {
 | 
				
			||||||
 | 
					        return performToRealSpaceOperation((Vector) vector).toBlockVector();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Initializes the operations used for rotating to each block-face
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static void initializeOperations() {
 | 
				
			||||||
 | 
					        Map<Axis, Vector> axisVectors = new HashMap<>();
 | 
				
			||||||
 | 
					        axisVectors.put(Axis.Y, new Vector(0, 1, 0));
 | 
				
			||||||
 | 
					        axisVectors.put(Axis.X, new Vector(1, 0, 0));
 | 
				
			||||||
 | 
					        axisVectors.put(Axis.Z, new Vector(0, 0, 1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Use the cross product to find the correct axis
 | 
				
			||||||
 | 
					        for (BlockFace face : normalAxes.keySet()) {
 | 
				
			||||||
 | 
					            Vector crossProduct = face.getDirection().crossProduct(defaultDirection.getDirection());
 | 
				
			||||||
 | 
					            if (face == defaultDirection || face == defaultDirection.getOppositeFace()) {
 | 
				
			||||||
 | 
					                rotationAxes.put(face, axisVectors.get(defaultVerticalAxis));
 | 
				
			||||||
 | 
					            } else if (Math.abs(crossProduct.getZ()) > 0) {
 | 
				
			||||||
 | 
					                rotationAxes.put(face, axisVectors.get(Axis.Z));
 | 
				
			||||||
 | 
					            } else if (Math.abs(crossProduct.getY()) > 0) {
 | 
				
			||||||
 | 
					                rotationAxes.put(face, axisVectors.get(Axis.Y));
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                rotationAxes.put(face, axisVectors.get(Axis.X));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        calculateRotations();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Calculates the required rotations based on the default rotation
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static void calculateRotations() {
 | 
				
			||||||
 | 
					        double halfRotation = Math.PI;
 | 
				
			||||||
 | 
					        double quarterRotation = halfRotation / 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Vector defaultDirectionVector = defaultDirection.getDirection();
 | 
				
			||||||
 | 
					        boolean defaultDirectionPositive = defaultDirectionVector.getX() + defaultDirectionVector.getY() +
 | 
				
			||||||
 | 
					                defaultDirectionVector.getZ() > 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (BlockFace blockFace : normalAxes.keySet()) {
 | 
				
			||||||
 | 
					            if (defaultDirection == blockFace) {
 | 
				
			||||||
 | 
					                //The default direction requires no rotation
 | 
				
			||||||
 | 
					                rotationAngles.put(blockFace, 0d);
 | 
				
			||||||
 | 
					            } else if (defaultDirection.getOppositeFace() == blockFace) {
 | 
				
			||||||
 | 
					                //The opposite direction requires a half rotation
 | 
				
			||||||
 | 
					                rotationAngles.put(blockFace, halfRotation);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                //All the other used directions require a quarter rotation
 | 
				
			||||||
 | 
					                Vector faceDirectionVector = blockFace.getDirection();
 | 
				
			||||||
 | 
					                boolean faceDirectionPositive = faceDirectionVector.getX() + faceDirectionVector.getY() +
 | 
				
			||||||
 | 
					                        faceDirectionVector.getZ() > 0;
 | 
				
			||||||
 | 
					                double rotation = defaultDirectionPositive && faceDirectionPositive ? quarterRotation : -quarterRotation;
 | 
				
			||||||
 | 
					                rotationAngles.put(blockFace, rotation);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Initializes the iris normal axes corresponding to each block face
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static void initializeIrisNormalAxes() {
 | 
				
			||||||
 | 
					        normalAxes.put(BlockFace.EAST, Axis.Z);
 | 
				
			||||||
 | 
					        normalAxes.put(BlockFace.WEST, Axis.Z);
 | 
				
			||||||
 | 
					        normalAxes.put(BlockFace.NORTH, Axis.X);
 | 
				
			||||||
 | 
					        normalAxes.put(BlockFace.SOUTH, Axis.X);
 | 
				
			||||||
 | 
					        normalAxes.put(BlockFace.UP, Axis.Y);
 | 
				
			||||||
 | 
					        normalAxes.put(BlockFace.DOWN, Axis.Y);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
package net.knarcraft.stargate;
 | 
					package net.knarcraft.stargate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.knarlib.util.UpdateChecker;
 | 
				
			||||||
import net.knarcraft.stargate.command.CommandStarGate;
 | 
					import net.knarcraft.stargate.command.CommandStarGate;
 | 
				
			||||||
import net.knarcraft.stargate.command.StarGateTabCompleter;
 | 
					import net.knarcraft.stargate.command.StarGateTabCompleter;
 | 
				
			||||||
import net.knarcraft.stargate.config.EconomyConfig;
 | 
					import net.knarcraft.stargate.config.EconomyConfig;
 | 
				
			||||||
@@ -22,7 +23,6 @@ import net.knarcraft.stargate.portal.PortalRegistry;
 | 
				
			|||||||
import net.knarcraft.stargate.thread.BlockChangeThread;
 | 
					import net.knarcraft.stargate.thread.BlockChangeThread;
 | 
				
			||||||
import net.knarcraft.stargate.thread.ChunkUnloadThread;
 | 
					import net.knarcraft.stargate.thread.ChunkUnloadThread;
 | 
				
			||||||
import net.knarcraft.stargate.thread.StarGateThread;
 | 
					import net.knarcraft.stargate.thread.StarGateThread;
 | 
				
			||||||
import net.knarcraft.stargate.utility.UpdateChecker;
 | 
					 | 
				
			||||||
import org.bukkit.Server;
 | 
					import org.bukkit.Server;
 | 
				
			||||||
import org.bukkit.command.PluginCommand;
 | 
					import org.bukkit.command.PluginCommand;
 | 
				
			||||||
import org.bukkit.configuration.file.FileConfiguration;
 | 
					import org.bukkit.configuration.file.FileConfiguration;
 | 
				
			||||||
@@ -39,6 +39,30 @@ import java.util.Queue;
 | 
				
			|||||||
import java.util.logging.Level;
 | 
					import java.util.logging.Level;
 | 
				
			||||||
import java.util.logging.Logger;
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Stargate - A portal plugin for Bukkit
 | 
				
			||||||
 | 
					Copyright (C) 2011 Shaun (sturmeh)
 | 
				
			||||||
 | 
					Copyright (C) 2011 Dinnerbone
 | 
				
			||||||
 | 
					Copyright (C) 2011-2013 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
				
			||||||
 | 
					Copyright (C) 2015-2020 Michael Smith (PseudoKnight)
 | 
				
			||||||
 | 
					Copyright (C) 2021-2022 Kristian Knarvik (EpicKnarvik97)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following license notice applies to all source and resource files in the Stargate project:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					it under the terms of the GNU Lesser General Public License as published by
 | 
				
			||||||
 | 
					the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					(at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					GNU Lesser General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You should have received a copy of the GNU Lesser General Public License
 | 
				
			||||||
 | 
					along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * The main class of the Stargate plugin
 | 
					 * The main class of the Stargate plugin
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -275,24 +299,6 @@ public class Stargate extends JavaPlugin {
 | 
				
			|||||||
        return stargateConfig.getLanguageLoader().getBackupString(name);
 | 
					        return stargateConfig.getLanguageLoader().getBackupString(name);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Replaces a list of variables in a string in the order they are given
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param input  <p>The input containing the variables</p>
 | 
					 | 
				
			||||||
     * @param search <p>The variables to replace</p>
 | 
					 | 
				
			||||||
     * @param values <p>The replacement values</p>
 | 
					 | 
				
			||||||
     * @return <p>The input string with the search values replaced with the given values</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static String replaceVars(String input, String[] search, String[] values) {
 | 
					 | 
				
			||||||
        if (search.length != values.length) {
 | 
					 | 
				
			||||||
            throw new IllegalArgumentException("The number of search values and replace values do not match.");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        for (int i = 0; i < search.length; i++) {
 | 
					 | 
				
			||||||
            input = replaceVars(input, search[i], values[i]);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return input;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Replaces a variable in a string
 | 
					     * Replaces a variable in a string
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -359,7 +365,8 @@ public class Stargate extends JavaPlugin {
 | 
				
			|||||||
        this.registerCommands();
 | 
					        this.registerCommands();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Check for any available updates
 | 
					        //Check for any available updates
 | 
				
			||||||
        UpdateChecker.checkForUpdate();
 | 
					        UpdateChecker.checkForUpdate(this, "https://api.spigotmc.org/legacy/update.php?resource=97784",
 | 
				
			||||||
 | 
					                Stargate::getPluginVersion, Stargate::setUpdateAvailable);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,12 +3,12 @@ package net.knarcraft.stargate.command;
 | 
				
			|||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
import net.knarcraft.stargate.config.ConfigOption;
 | 
					import net.knarcraft.stargate.config.ConfigOption;
 | 
				
			||||||
import net.knarcraft.stargate.config.ConfigTag;
 | 
					import net.knarcraft.stargate.config.ConfigTag;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.config.DynmapManager;
 | 
				
			||||||
import net.knarcraft.stargate.config.OptionDataType;
 | 
					import net.knarcraft.stargate.config.OptionDataType;
 | 
				
			||||||
import net.knarcraft.stargate.portal.Portal;
 | 
					import net.knarcraft.stargate.portal.Portal;
 | 
				
			||||||
import net.knarcraft.stargate.portal.PortalRegistry;
 | 
					import net.knarcraft.stargate.portal.PortalRegistry;
 | 
				
			||||||
import net.knarcraft.stargate.portal.PortalSignDrawer;
 | 
					import net.knarcraft.stargate.portal.PortalSignDrawer;
 | 
				
			||||||
import net.md_5.bungee.api.ChatColor;
 | 
					import net.md_5.bungee.api.ChatColor;
 | 
				
			||||||
import org.apache.commons.lang.StringUtils;
 | 
					 | 
				
			||||||
import org.bukkit.Material;
 | 
					import org.bukkit.Material;
 | 
				
			||||||
import org.bukkit.command.Command;
 | 
					import org.bukkit.command.Command;
 | 
				
			||||||
import org.bukkit.command.CommandExecutor;
 | 
					import org.bukkit.command.CommandExecutor;
 | 
				
			||||||
@@ -378,6 +378,10 @@ public class CommandConfig implements CommandExecutor {
 | 
				
			|||||||
                //Load or unload Vault and Economy as necessary
 | 
					                //Load or unload Vault and Economy as necessary
 | 
				
			||||||
                Stargate.getStargateConfig().reloadEconomy();
 | 
					                Stargate.getStargateConfig().reloadEconomy();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            if (ConfigTag.requiresDynmapReload(configOption)) {
 | 
				
			||||||
 | 
					                //Regenerate all Dynmap markers
 | 
				
			||||||
 | 
					                DynmapManager.addAllPortalMarkers();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -416,7 +420,7 @@ public class CommandConfig implements CommandExecutor {
 | 
				
			|||||||
        Object defaultValue = option.getDefaultValue();
 | 
					        Object defaultValue = option.getDefaultValue();
 | 
				
			||||||
        String stringValue = String.valueOf(defaultValue);
 | 
					        String stringValue = String.valueOf(defaultValue);
 | 
				
			||||||
        if (option.getDataType() == OptionDataType.STRING_LIST) {
 | 
					        if (option.getDataType() == OptionDataType.STRING_LIST) {
 | 
				
			||||||
            stringValue = "[" + StringUtils.join((String[]) defaultValue, ",") + "]";
 | 
					            stringValue = "[" + String.join(",", (String[]) defaultValue) + "]";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return ChatColor.GOLD + option.getName() + ChatColor.WHITE + " - " + ChatColor.GREEN + option.getDescription() +
 | 
					        return ChatColor.GOLD + option.getName() + ChatColor.WHITE + " - " + ChatColor.GREEN + option.getDescription() +
 | 
				
			||||||
                ChatColor.DARK_GRAY + " (Default: " + ChatColor.GRAY + stringValue + ChatColor.DARK_GRAY + ")";
 | 
					                ChatColor.DARK_GRAY + " (Default: " + ChatColor.GRAY + stringValue + ChatColor.DARK_GRAY + ")";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,12 +2,13 @@ package net.knarcraft.stargate.command;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
import net.md_5.bungee.api.ChatColor;
 | 
					import net.md_5.bungee.api.ChatColor;
 | 
				
			||||||
import org.apache.commons.lang.ArrayUtils;
 | 
					 | 
				
			||||||
import org.bukkit.command.Command;
 | 
					import org.bukkit.command.Command;
 | 
				
			||||||
import org.bukkit.command.CommandExecutor;
 | 
					import org.bukkit.command.CommandExecutor;
 | 
				
			||||||
import org.bukkit.command.CommandSender;
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
import org.jetbrains.annotations.NotNull;
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Arrays;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * This command represents any command which starts with stargate
 | 
					 * This command represents any command which starts with stargate
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
@@ -25,7 +26,7 @@ public class CommandStarGate implements CommandExecutor {
 | 
				
			|||||||
            } else if (args[0].equalsIgnoreCase("reload")) {
 | 
					            } else if (args[0].equalsIgnoreCase("reload")) {
 | 
				
			||||||
                return new CommandReload().onCommand(commandSender, command, s, args);
 | 
					                return new CommandReload().onCommand(commandSender, command, s, args);
 | 
				
			||||||
            } else if (args[0].equalsIgnoreCase("config")) {
 | 
					            } else if (args[0].equalsIgnoreCase("config")) {
 | 
				
			||||||
                String[] subArgs = (String[]) ArrayUtils.remove(args, 0);
 | 
					                String[] subArgs = Arrays.copyOfRange(args, 1, args.length);
 | 
				
			||||||
                return new CommandConfig().onCommand(commandSender, command, s, subArgs);
 | 
					                return new CommandConfig().onCommand(commandSender, command, s, subArgs);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,8 @@ import org.jetbrains.annotations.Nullable;
 | 
				
			|||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static net.knarcraft.knarlib.util.TabCompletionHelper.filterMatchingStartsWith;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * This is the completer for stargates config sub-command (/sg config)
 | 
					 * This is the completer for stargates config sub-command (/sg config)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -48,27 +50,10 @@ public class ConfigTabCompleter implements TabCompleter {
 | 
				
			|||||||
            for (ConfigOption option : ConfigOption.values()) {
 | 
					            for (ConfigOption option : ConfigOption.values()) {
 | 
				
			||||||
                configOptionNames.add(option.getName());
 | 
					                configOptionNames.add(option.getName());
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            return filterMatching(configOptionNames, args[0]);
 | 
					            return filterMatchingStartsWith(configOptionNames, args[0]);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Find completable strings which match the text typed by the command's sender
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param values    <p>The values to filter</p>
 | 
					 | 
				
			||||||
     * @param typedText <p>The text the player has started typing</p>
 | 
					 | 
				
			||||||
     * @return <p>The given string values which start with the player's typed text</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    private List<String> filterMatching(List<String> values, String typedText) {
 | 
					 | 
				
			||||||
        List<String> configValues = new ArrayList<>();
 | 
					 | 
				
			||||||
        for (String value : values) {
 | 
					 | 
				
			||||||
            if (value.toLowerCase().startsWith(typedText.toLowerCase())) {
 | 
					 | 
				
			||||||
                configValues.add(value);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return configValues;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get possible values for the selected option
 | 
					     * Get possible values for the selected option
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -80,7 +65,7 @@ public class ConfigTabCompleter implements TabCompleter {
 | 
				
			|||||||
        switch (selectedOption) {
 | 
					        switch (selectedOption) {
 | 
				
			||||||
            case LANGUAGE:
 | 
					            case LANGUAGE:
 | 
				
			||||||
                //Return available languages
 | 
					                //Return available languages
 | 
				
			||||||
                return filterMatching(languages, typedText);
 | 
					                return filterMatchingStartsWith(languages, typedText);
 | 
				
			||||||
            case GATE_FOLDER:
 | 
					            case GATE_FOLDER:
 | 
				
			||||||
            case PORTAL_FOLDER:
 | 
					            case PORTAL_FOLDER:
 | 
				
			||||||
            case DEFAULT_GATE_NETWORK:
 | 
					            case DEFAULT_GATE_NETWORK:
 | 
				
			||||||
@@ -94,12 +79,12 @@ public class ConfigTabCompleter implements TabCompleter {
 | 
				
			|||||||
            case HIGHLIGHT_SIGN_COLOR:
 | 
					            case HIGHLIGHT_SIGN_COLOR:
 | 
				
			||||||
            case FREE_GATES_COLOR:
 | 
					            case FREE_GATES_COLOR:
 | 
				
			||||||
                //Return all colors
 | 
					                //Return all colors
 | 
				
			||||||
                return filterMatching(chatColors, typedText);
 | 
					                return filterMatchingStartsWith(chatColors, typedText);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //If the config value is a boolean, show the two boolean values
 | 
					        //If the config value is a boolean, show the two boolean values
 | 
				
			||||||
        if (selectedOption.getDataType() == OptionDataType.BOOLEAN) {
 | 
					        if (selectedOption.getDataType() == OptionDataType.BOOLEAN) {
 | 
				
			||||||
            return filterMatching(booleans, typedText);
 | 
					            return filterMatchingStartsWith(booleans, typedText);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //If the config value is an integer, display some valid numbers
 | 
					        //If the config value is an integer, display some valid numbers
 | 
				
			||||||
@@ -145,11 +130,11 @@ public class ConfigTabCompleter implements TabCompleter {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    private List<String> getPerSignColorCompletion(String[] args) {
 | 
					    private List<String> getPerSignColorCompletion(String[] args) {
 | 
				
			||||||
        if (args.length < 3) {
 | 
					        if (args.length < 3) {
 | 
				
			||||||
            return filterMatching(signTypes, args[1]);
 | 
					            return filterMatchingStartsWith(signTypes, args[1]);
 | 
				
			||||||
        } else if (args.length < 4) {
 | 
					        } else if (args.length < 4) {
 | 
				
			||||||
            return filterMatching(extendedColors, args[2]);
 | 
					            return filterMatchingStartsWith(extendedColors, args[2]);
 | 
				
			||||||
        } else if (args.length < 5) {
 | 
					        } else if (args.length < 5) {
 | 
				
			||||||
            return filterMatching(extendedColors, args[3]);
 | 
					            return filterMatchingStartsWith(extendedColors, args[3]);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return new ArrayList<>();
 | 
					        return new ArrayList<>();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -237,11 +222,13 @@ public class ConfigTabCompleter implements TabCompleter {
 | 
				
			|||||||
        languages.add("fr");
 | 
					        languages.add("fr");
 | 
				
			||||||
        languages.add("hu");
 | 
					        languages.add("hu");
 | 
				
			||||||
        languages.add("it");
 | 
					        languages.add("it");
 | 
				
			||||||
 | 
					        languages.add("ja");
 | 
				
			||||||
        languages.add("nb-no");
 | 
					        languages.add("nb-no");
 | 
				
			||||||
        languages.add("nl");
 | 
					        languages.add("nl");
 | 
				
			||||||
        languages.add("nn-no");
 | 
					        languages.add("nn-no");
 | 
				
			||||||
        languages.add("pt-br");
 | 
					        languages.add("pt-br");
 | 
				
			||||||
        languages.add("ru");
 | 
					        languages.add("ru");
 | 
				
			||||||
 | 
					        languages.add("zh_cn");
 | 
				
			||||||
        //TODO: Generate this list dynamically by listing the language files in the jar and adding the user's custom 
 | 
					        //TODO: Generate this list dynamically by listing the language files in the jar and adding the user's custom 
 | 
				
			||||||
        // language files
 | 
					        // language files
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
package net.knarcraft.stargate.command;
 | 
					package net.knarcraft.stargate.command;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.apache.commons.lang.ArrayUtils;
 | 
					 | 
				
			||||||
import org.bukkit.command.Command;
 | 
					import org.bukkit.command.Command;
 | 
				
			||||||
import org.bukkit.command.CommandSender;
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
import org.bukkit.command.TabCompleter;
 | 
					import org.bukkit.command.TabCompleter;
 | 
				
			||||||
@@ -9,6 +8,7 @@ import org.jetbrains.annotations.NotNull;
 | 
				
			|||||||
import org.jetbrains.annotations.Nullable;
 | 
					import org.jetbrains.annotations.Nullable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.Arrays;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -29,7 +29,7 @@ public class StarGateTabCompleter implements TabCompleter {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            return matchingCommands;
 | 
					            return matchingCommands;
 | 
				
			||||||
        } else if (args.length > 1 && args[0].equalsIgnoreCase("config")) {
 | 
					        } else if (args.length > 1 && args[0].equalsIgnoreCase("config")) {
 | 
				
			||||||
            String[] subArgs = (String[]) ArrayUtils.remove(args, 0);
 | 
					            String[] subArgs = Arrays.copyOfRange(args, 1, args.length);
 | 
				
			||||||
            return new ConfigTabCompleter().onTabComplete(commandSender, command, s, subArgs);
 | 
					            return new ConfigTabCompleter().onTabComplete(commandSender, command, s, subArgs);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            return new ArrayList<>();
 | 
					            return new ArrayList<>();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -178,7 +178,18 @@ public enum ConfigOption {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The velocity of players exiting a stargate, relative to the entry velocity
 | 
					     * The velocity of players exiting a stargate, relative to the entry velocity
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    EXIT_VELOCITY("gates.exitVelocity", "The velocity of players exiting stargates, relative to the entry velocity", 0.1D);
 | 
					    EXIT_VELOCITY("gates.exitVelocity", "The velocity of players exiting stargates, relative to the entry velocity", 0.1D),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Whether to enable showing Stargates in Dynmap
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    ENABLE_DYNMAP("dynmap.enableDynmap", "Whether to display Stargates in Dynmap's map", true),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Whether to hide Dynmap icons by default
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    DYNMAP_ICONS_DEFAULT_HIDDEN("dynmap.dynmapIconsHiddenByDefault",
 | 
				
			||||||
 | 
					            "Whether to hide Stargate's Dynmap icons by default, requiring the user to enable them.", true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final String configNode;
 | 
					    private final String configNode;
 | 
				
			||||||
    private final String description;
 | 
					    private final String description;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@ public enum ConfigTag {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    COLOR(new ConfigOption[]{ConfigOption.FREE_GATES_COLOR, ConfigOption.MAIN_SIGN_COLOR,
 | 
					    COLOR(new ConfigOption[]{ConfigOption.FREE_GATES_COLOR, ConfigOption.MAIN_SIGN_COLOR,
 | 
				
			||||||
            ConfigOption.HIGHLIGHT_SIGN_COLOR, ConfigOption.PER_SIGN_COLORS}),
 | 
					            ConfigOption.HIGHLIGHT_SIGN_COLOR, ConfigOption.PER_SIGN_COLORS}),
 | 
				
			||||||
    FOLDER(new ConfigOption[]{ConfigOption.GATE_FOLDER, ConfigOption.PORTAL_FOLDER});
 | 
					    FOLDER(new ConfigOption[]{ConfigOption.GATE_FOLDER, ConfigOption.PORTAL_FOLDER}),
 | 
				
			||||||
 | 
					    DYNMAP(new ConfigOption[]{ConfigOption.ENABLE_DYNMAP, ConfigOption.DYNMAP_ICONS_DEFAULT_HIDDEN});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final ConfigOption[] taggedOptions;
 | 
					    private final ConfigOption[] taggedOptions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -52,6 +53,16 @@ public enum ConfigTag {
 | 
				
			|||||||
        return FOLDER.isTagged(option);
 | 
					        return FOLDER.isTagged(option);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Checks whether a given config option requires a re-load of all Dynmap markers
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param configOption <p>The config option to check</p>
 | 
				
			||||||
 | 
					     * @return <p>True if changing the config option requires a reload of all dynmap markers</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static boolean requiresDynmapReload(ConfigOption configOption) {
 | 
				
			||||||
 | 
					        return DYNMAP.isTagged(configOption);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Checks whether a given config option requires a portal reload to take effect
 | 
					     * Checks whether a given config option requires a portal reload to take effect
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										134
									
								
								src/main/java/net/knarcraft/stargate/config/DynmapManager.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								src/main/java/net/knarcraft/stargate/config/DynmapManager.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,134 @@
 | 
				
			|||||||
 | 
					package net.knarcraft.stargate.config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.portal.Portal;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.portal.PortalRegistry;
 | 
				
			||||||
 | 
					import org.bukkit.Location;
 | 
				
			||||||
 | 
					import org.bukkit.World;
 | 
				
			||||||
 | 
					import org.dynmap.DynmapAPI;
 | 
				
			||||||
 | 
					import org.dynmap.markers.GenericMarker;
 | 
				
			||||||
 | 
					import org.dynmap.markers.Marker;
 | 
				
			||||||
 | 
					import org.dynmap.markers.MarkerIcon;
 | 
				
			||||||
 | 
					import org.dynmap.markers.MarkerSet;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A manager for dealing with everything Dynmap
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public final class DynmapManager {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static MarkerSet markerSet;
 | 
				
			||||||
 | 
					    private static MarkerIcon portalIcon;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private DynmapManager() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Initializes the dynmap manager
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param dynmapAPI <p>A reference</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static void initialize(DynmapAPI dynmapAPI) {
 | 
				
			||||||
 | 
					        if (dynmapAPI == null || dynmapAPI.getMarkerAPI() == null) {
 | 
				
			||||||
 | 
					            markerSet = null;
 | 
				
			||||||
 | 
					            portalIcon = null;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            markerSet = dynmapAPI.getMarkerAPI().createMarkerSet("stargate", "Stargate", null, false);
 | 
				
			||||||
 | 
					            if (markerSet != null) {
 | 
				
			||||||
 | 
					                markerSet.setHideByDefault(Stargate.getStargateConfig().hideDynmapIcons());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            portalIcon = dynmapAPI.getMarkerAPI().getMarkerIcon("portal");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Adds all portal markers for all current portals
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static void addAllPortalMarkers() {
 | 
				
			||||||
 | 
					        if (markerSet == null || Stargate.getStargateConfig().isDynmapDisabled()) {
 | 
				
			||||||
 | 
					            //Remove any existing markers if dynmap has been disabled after startup
 | 
				
			||||||
 | 
					            if (markerSet != null) {
 | 
				
			||||||
 | 
					                markerSet.getMarkers().forEach(GenericMarker::deleteMarker);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        markerSet.setHideByDefault(Stargate.getStargateConfig().hideDynmapIcons());
 | 
				
			||||||
 | 
					        //Remove all existing markers for a clean start
 | 
				
			||||||
 | 
					        markerSet.getMarkers().forEach(GenericMarker::deleteMarker);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (Portal portal : PortalRegistry.getAllPortals()) {
 | 
				
			||||||
 | 
					            addPortalMarker(portal);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Adds a portal marker for the given portal
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param portal <p>The portal to add a marker for</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static void addPortalMarker(Portal portal) {
 | 
				
			||||||
 | 
					        if (markerSet == null || Stargate.getStargateConfig().isDynmapDisabled()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        World world = portal.getWorld();
 | 
				
			||||||
 | 
					        if (portal.getOptions().isHidden() || world == null) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Location location = portal.getBlockAt(portal.getGate().getLayout().getExit());
 | 
				
			||||||
 | 
					        Marker marker = markerSet.createMarker(getPortalMarkerId(portal), portal.getName(), world.getName(),
 | 
				
			||||||
 | 
					                location.getX(), location.getY(), location.getZ(), portalIcon, false);
 | 
				
			||||||
 | 
					        if (marker == null) {
 | 
				
			||||||
 | 
					            Stargate.logWarning(String.format(
 | 
				
			||||||
 | 
					                    """
 | 
				
			||||||
 | 
					                            Unable to create marker for portal
 | 
				
			||||||
 | 
					                            Portal marker id: %s
 | 
				
			||||||
 | 
					                            Portal name: %s
 | 
				
			||||||
 | 
					                            Portal world: %s
 | 
				
			||||||
 | 
					                            Portal location: %s,%s,%s""",
 | 
				
			||||||
 | 
					                    getPortalMarkerId(portal), portal.getName(), world.getName(), location.getX(), location.getY(),
 | 
				
			||||||
 | 
					                    location.getZ()));
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        String networkPrompt;
 | 
				
			||||||
 | 
					        if (portal.getOptions().isBungee()) {
 | 
				
			||||||
 | 
					            networkPrompt = "Server";
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            networkPrompt = "Network";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        String markerDescription = String.format("<b>Name:</b> %s<br /><b>%s:</b> %s<br /><b>Destination:</b> " +
 | 
				
			||||||
 | 
					                        "%s<br /><b>Owner:</b> %s<br />", portal.getName(), networkPrompt, portal.getNetwork(),
 | 
				
			||||||
 | 
					                portal.getDestinationName(), portal.getOwner().getName());
 | 
				
			||||||
 | 
					        marker.setDescription(markerDescription);
 | 
				
			||||||
 | 
					        marker.setLabel(portal.getName(), true);
 | 
				
			||||||
 | 
					        if (portalIcon != null) {
 | 
				
			||||||
 | 
					            marker.setMarkerIcon(portalIcon);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Removes the portal marker for the given portal
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param portal <p>The portal to remove the marker for</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static void removePortalMarker(Portal portal) {
 | 
				
			||||||
 | 
					        if (markerSet == null || Stargate.getStargateConfig().isDynmapDisabled()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        Marker marker = markerSet.findMarker(getPortalMarkerId(portal));
 | 
				
			||||||
 | 
					        if (marker != null) {
 | 
				
			||||||
 | 
					            marker.deleteMarker();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets the id used for the given portal's marker
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param portal <p>The portal to get a marker id for</p>
 | 
				
			||||||
 | 
					     * @return <p></p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static String getPortalMarkerId(Portal portal) {
 | 
				
			||||||
 | 
					        return portal.getNetwork() + "-:-" + portal.getName();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,7 +1,8 @@
 | 
				
			|||||||
package net.knarcraft.stargate.config;
 | 
					package net.knarcraft.stargate.config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.knarlib.property.ColorConversion;
 | 
				
			||||||
 | 
					import net.knarcraft.knarlib.util.FileHelper;
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
import net.knarcraft.stargate.utility.FileHelper;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.BufferedReader;
 | 
					import java.io.BufferedReader;
 | 
				
			||||||
import java.io.BufferedWriter;
 | 
					import java.io.BufferedWriter;
 | 
				
			||||||
@@ -136,7 +137,8 @@ public final class LanguageLoader {
 | 
				
			|||||||
            String> currentLanguageValues) throws IOException {
 | 
					            String> currentLanguageValues) throws IOException {
 | 
				
			||||||
        //Get language values
 | 
					        //Get language values
 | 
				
			||||||
        BufferedReader bufferedReader = FileHelper.getBufferedReaderFromInputStream(inputStream);
 | 
					        BufferedReader bufferedReader = FileHelper.getBufferedReaderFromInputStream(inputStream);
 | 
				
			||||||
        Map<String, String> internalLanguageValues = FileHelper.readKeyValuePairs(bufferedReader);
 | 
					        Map<String, String> internalLanguageValues = FileHelper.readKeyValuePairs(bufferedReader, "=",
 | 
				
			||||||
 | 
					                ColorConversion.NORMAL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //If currentLanguageValues is null; the chosen language has not been used before
 | 
					        //If currentLanguageValues is null; the chosen language has not been used before
 | 
				
			||||||
        if (currentLanguageValues == null) {
 | 
					        if (currentLanguageValues == null) {
 | 
				
			||||||
@@ -221,7 +223,7 @@ public final class LanguageLoader {
 | 
				
			|||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                bufferedReader = FileHelper.getBufferedReaderFromInputStream(inputStream);
 | 
					                bufferedReader = FileHelper.getBufferedReaderFromInputStream(inputStream);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            strings = FileHelper.readKeyValuePairs(bufferedReader);
 | 
					            strings = FileHelper.readKeyValuePairs(bufferedReader, "=", ColorConversion.NORMAL);
 | 
				
			||||||
        } catch (Exception e) {
 | 
					        } catch (Exception e) {
 | 
				
			||||||
            if (Stargate.getStargateConfig().isDebuggingEnabled()) {
 | 
					            if (Stargate.getStargateConfig().isDebuggingEnabled()) {
 | 
				
			||||||
                Stargate.getConsoleLogger().info("[Stargate] Unable to load language " + lang);
 | 
					                Stargate.getConsoleLogger().info("[Stargate] Unable to load language " + lang);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
package net.knarcraft.stargate.config;
 | 
					package net.knarcraft.stargate.config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.knarlib.property.ColorConversion;
 | 
				
			||||||
 | 
					import net.knarcraft.knarlib.util.FileHelper;
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
import net.knarcraft.stargate.container.BlockChangeRequest;
 | 
					import net.knarcraft.stargate.container.BlockChangeRequest;
 | 
				
			||||||
import net.knarcraft.stargate.listener.BungeeCordListener;
 | 
					import net.knarcraft.stargate.listener.BungeeCordListener;
 | 
				
			||||||
@@ -8,13 +10,13 @@ import net.knarcraft.stargate.portal.PortalHandler;
 | 
				
			|||||||
import net.knarcraft.stargate.portal.PortalRegistry;
 | 
					import net.knarcraft.stargate.portal.PortalRegistry;
 | 
				
			||||||
import net.knarcraft.stargate.portal.property.gate.GateHandler;
 | 
					import net.knarcraft.stargate.portal.property.gate.GateHandler;
 | 
				
			||||||
import net.knarcraft.stargate.thread.BlockChangeThread;
 | 
					import net.knarcraft.stargate.thread.BlockChangeThread;
 | 
				
			||||||
import net.knarcraft.stargate.utility.FileHelper;
 | 
					 | 
				
			||||||
import net.knarcraft.stargate.utility.PortalFileHelper;
 | 
					import net.knarcraft.stargate.utility.PortalFileHelper;
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.World;
 | 
					import org.bukkit.World;
 | 
				
			||||||
import org.bukkit.command.CommandSender;
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
import org.bukkit.configuration.file.FileConfiguration;
 | 
					import org.bukkit.configuration.file.FileConfiguration;
 | 
				
			||||||
import org.bukkit.plugin.messaging.Messenger;
 | 
					import org.bukkit.plugin.messaging.Messenger;
 | 
				
			||||||
 | 
					import org.dynmap.DynmapAPI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
@@ -101,6 +103,11 @@ public final class StargateConfig {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        //Set up vault economy if vault has been loaded
 | 
					        //Set up vault economy if vault has been loaded
 | 
				
			||||||
        setupVaultEconomy();
 | 
					        setupVaultEconomy();
 | 
				
			||||||
 | 
					        DynmapAPI dynmapAPI = (DynmapAPI) Bukkit.getPluginManager().getPlugin("dynmap");
 | 
				
			||||||
 | 
					        if (dynmapAPI != null) {
 | 
				
			||||||
 | 
					            DynmapManager.initialize(dynmapAPI);
 | 
				
			||||||
 | 
					            DynmapManager.addAllPortalMarkers();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -152,6 +159,24 @@ public final class StargateConfig {
 | 
				
			|||||||
        return (boolean) configOptions.get(ConfigOption.PERMISSION_DEBUG);
 | 
					        return (boolean) configOptions.get(ConfigOption.PERMISSION_DEBUG);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets whether Dynmap integration is disabled
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return <p>Whether Dynmap integration is disabled</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public boolean isDynmapDisabled() {
 | 
				
			||||||
 | 
					        return !((boolean) configOptions.get(ConfigOption.ENABLE_DYNMAP));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets whether Dynmap icons should be hidden by default
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return <p>Whether Dynmap icons should be hidden by default</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public boolean hideDynmapIcons() {
 | 
				
			||||||
 | 
					        return (boolean) configOptions.get(ConfigOption.DYNMAP_ICONS_DEFAULT_HIDDEN);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Gets the object containing economy config values
 | 
					     * Gets the object containing economy config values
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -189,6 +214,9 @@ public final class StargateConfig {
 | 
				
			|||||||
            startStopBungeeListener(stargateGateConfig.enableBungee());
 | 
					            startStopBungeeListener(stargateGateConfig.enableBungee());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Reload portal markers
 | 
				
			||||||
 | 
					        DynmapManager.addAllPortalMarkers();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        messageSender.sendErrorMessage(sender, languageLoader.getString("reloaded"));
 | 
					        messageSender.sendErrorMessage(sender, languageLoader.getString("reloaded"));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -421,7 +449,8 @@ public final class StargateConfig {
 | 
				
			|||||||
        Map<String, String> migrationFields;
 | 
					        Map<String, String> migrationFields;
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            migrationFields = FileHelper.readKeyValuePairs(FileHelper.getBufferedReaderFromInputStream(
 | 
					            migrationFields = FileHelper.readKeyValuePairs(FileHelper.getBufferedReaderFromInputStream(
 | 
				
			||||||
                    FileHelper.getInputStreamForInternalFile("/config-migrations.txt")));
 | 
					                            FileHelper.getInputStreamForInternalFile("/config-migrations.txt")), "=",
 | 
				
			||||||
 | 
					                    ColorConversion.NORMAL);
 | 
				
			||||||
        } catch (IOException e) {
 | 
					        } catch (IOException e) {
 | 
				
			||||||
            Stargate.debug("Stargate::migrateConfig", "Unable to load config migration file");
 | 
					            Stargate.debug("Stargate::migrateConfig", "Unable to load config migration file");
 | 
				
			||||||
            e.printStackTrace();
 | 
					            e.printStackTrace();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
package net.knarcraft.stargate.config;
 | 
					package net.knarcraft.stargate.config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.knarlib.util.ColorHelper;
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
import net.knarcraft.stargate.portal.PortalSignDrawer;
 | 
					import net.knarcraft.stargate.portal.PortalSignDrawer;
 | 
				
			||||||
import net.knarcraft.stargate.utility.ColorHelper;
 | 
					 | 
				
			||||||
import net.md_5.bungee.api.ChatColor;
 | 
					import net.md_5.bungee.api.ChatColor;
 | 
				
			||||||
import org.bukkit.Color;
 | 
					import org.bukkit.Color;
 | 
				
			||||||
import org.bukkit.Material;
 | 
					import org.bukkit.Material;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
package net.knarcraft.stargate.container;
 | 
					package net.knarcraft.stargate.container;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.util.Vector;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * This stores a block location as a vector relative to a position
 | 
					 * This stores a block location as a vector relative to a position
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
@@ -65,6 +67,15 @@ public class RelativeBlockVector {
 | 
				
			|||||||
        };
 | 
					        };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets a relative vector in the real space representing this relative block vector
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return <p>A vector representing this relative block vector</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Vector toVector() {
 | 
				
			||||||
 | 
					        return new Vector(this.right, -this.down, this.out);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Gets a relative block vector which is this inverted (pointing in the opposite direction)
 | 
					     * Gets a relative block vector which is this inverted (pointing in the opposite direction)
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
package net.knarcraft.stargate.container;
 | 
					package net.knarcraft.stargate.container;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import net.knarcraft.stargate.utility.ColorHelper;
 | 
					import net.knarcraft.knarlib.util.ColorHelper;
 | 
				
			||||||
import net.md_5.bungee.api.ChatColor;
 | 
					import net.md_5.bungee.api.ChatColor;
 | 
				
			||||||
import org.bukkit.DyeColor;
 | 
					import org.bukkit.DyeColor;
 | 
				
			||||||
import org.bukkit.block.Sign;
 | 
					import org.bukkit.block.Sign;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
package net.knarcraft.stargate.listener;
 | 
					package net.knarcraft.stargate.listener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.knarlib.util.UpdateChecker;
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
import net.knarcraft.stargate.config.MessageSender;
 | 
					import net.knarcraft.stargate.config.MessageSender;
 | 
				
			||||||
import net.knarcraft.stargate.container.BlockLocation;
 | 
					import net.knarcraft.stargate.container.BlockLocation;
 | 
				
			||||||
@@ -13,10 +14,10 @@ import net.knarcraft.stargate.utility.MaterialHelper;
 | 
				
			|||||||
import net.knarcraft.stargate.utility.PermissionHelper;
 | 
					import net.knarcraft.stargate.utility.PermissionHelper;
 | 
				
			||||||
import net.knarcraft.stargate.utility.TeleportHelper;
 | 
					import net.knarcraft.stargate.utility.TeleportHelper;
 | 
				
			||||||
import net.knarcraft.stargate.utility.UUIDMigrationHelper;
 | 
					import net.knarcraft.stargate.utility.UUIDMigrationHelper;
 | 
				
			||||||
import net.knarcraft.stargate.utility.UpdateChecker;
 | 
					 | 
				
			||||||
import net.md_5.bungee.api.ChatColor;
 | 
					import net.md_5.bungee.api.ChatColor;
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.GameMode;
 | 
					import org.bukkit.GameMode;
 | 
				
			||||||
 | 
					import org.bukkit.Material;
 | 
				
			||||||
import org.bukkit.block.Block;
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
import org.bukkit.block.data.type.WallSign;
 | 
					import org.bukkit.block.data.type.WallSign;
 | 
				
			||||||
import org.bukkit.entity.AbstractHorse;
 | 
					import org.bukkit.entity.AbstractHorse;
 | 
				
			||||||
@@ -104,6 +105,11 @@ public class PlayerEventListener implements Listener {
 | 
				
			|||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        Portal entrancePortal = PortalHandler.getByEntrance(toLocation);
 | 
					        Portal entrancePortal = PortalHandler.getByEntrance(toLocation);
 | 
				
			||||||
 | 
					        //Check an additional block away in case the portal is a bungee portal using END_PORTAL
 | 
				
			||||||
 | 
					        if (entrancePortal == null) {
 | 
				
			||||||
 | 
					            entrancePortal = PortalHandler.getByAdjacentEntrance(toLocation);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Portal destination = entrancePortal.getPortalActivator().getDestination(player);
 | 
					        Portal destination = entrancePortal.getPortalActivator().getDestination(player);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Entity playerVehicle = player.getVehicle();
 | 
					        Entity playerVehicle = player.getVehicle();
 | 
				
			||||||
@@ -163,7 +169,12 @@ public class PlayerEventListener implements Listener {
 | 
				
			|||||||
        //Check if the player moved from a portal
 | 
					        //Check if the player moved from a portal
 | 
				
			||||||
        Portal entrancePortal = PortalHandler.getByEntrance(toLocation);
 | 
					        Portal entrancePortal = PortalHandler.getByEntrance(toLocation);
 | 
				
			||||||
        if (entrancePortal == null) {
 | 
					        if (entrancePortal == null) {
 | 
				
			||||||
            return false;
 | 
					            //Check an additional block away for BungeeCord portals using END_PORTAL as its material
 | 
				
			||||||
 | 
					            entrancePortal = PortalHandler.getByAdjacentEntrance(toLocation);
 | 
				
			||||||
 | 
					            if (entrancePortal == null || !entrancePortal.getOptions().isBungee() ||
 | 
				
			||||||
 | 
					                    entrancePortal.getGate().getPortalOpenBlock() != Material.END_PORTAL) {
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Portal destination = entrancePortal.getPortalActivator().getDestination(player);
 | 
					        Portal destination = entrancePortal.getPortalActivator().getDestination(player);
 | 
				
			||||||
@@ -230,11 +241,14 @@ public class PlayerEventListener implements Listener {
 | 
				
			|||||||
        EquipmentSlot hand = event.getHand();
 | 
					        EquipmentSlot hand = event.getHand();
 | 
				
			||||||
        if (hand != null && (PermissionHelper.hasPermission(player, "stargate.admin.dye") ||
 | 
					        if (hand != null && (PermissionHelper.hasPermission(player, "stargate.admin.dye") ||
 | 
				
			||||||
                portal.isOwner(player))) {
 | 
					                portal.isOwner(player))) {
 | 
				
			||||||
            String itemName = player.getInventory().getItem(hand).getType().toString();
 | 
					            ItemStack item = player.getInventory().getItem(hand);
 | 
				
			||||||
            if (itemName.endsWith("DYE") || itemName.endsWith("INK_SAC")) {
 | 
					            if (item != null) {
 | 
				
			||||||
                event.setUseInteractedBlock(Event.Result.ALLOW);
 | 
					                String itemName = item.getType().toString();
 | 
				
			||||||
                Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), portal::drawSign, 1);
 | 
					                if (itemName.endsWith("DYE") || itemName.endsWith("INK_SAC")) {
 | 
				
			||||||
                return;
 | 
					                    event.setUseInteractedBlock(Event.Result.ALLOW);
 | 
				
			||||||
 | 
					                    Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), portal::drawSign, 1);
 | 
				
			||||||
 | 
					                    return;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -325,7 +339,7 @@ public class PlayerEventListener implements Listener {
 | 
				
			|||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            //Display information about the portal if it has no sign
 | 
					            //Display information about the portal if it has no sign
 | 
				
			||||||
            ItemStack heldItem = player.getInventory().getItem(hand);
 | 
					            ItemStack heldItem = player.getInventory().getItem(hand);
 | 
				
			||||||
            if (heldItem.getType().isAir() || !heldItem.getType().isBlock()) {
 | 
					            if (heldItem != null && (heldItem.getType().isAir() || !heldItem.getType().isBlock())) {
 | 
				
			||||||
                displayPortalInfo(block, player);
 | 
					                displayPortalInfo(block, player);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@ import net.knarcraft.stargate.portal.Portal;
 | 
				
			|||||||
import net.knarcraft.stargate.portal.PortalHandler;
 | 
					import net.knarcraft.stargate.portal.PortalHandler;
 | 
				
			||||||
import net.knarcraft.stargate.portal.teleporter.PlayerTeleporter;
 | 
					import net.knarcraft.stargate.portal.teleporter.PlayerTeleporter;
 | 
				
			||||||
import net.knarcraft.stargate.utility.PermissionHelper;
 | 
					import net.knarcraft.stargate.utility.PermissionHelper;
 | 
				
			||||||
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.Location;
 | 
					import org.bukkit.Location;
 | 
				
			||||||
import org.bukkit.Material;
 | 
					import org.bukkit.Material;
 | 
				
			||||||
import org.bukkit.World;
 | 
					import org.bukkit.World;
 | 
				
			||||||
@@ -67,14 +68,23 @@ public class PortalEventListener implements Listener {
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Stargate.debug("PortalEventListener::onEntityPortalEnter",
 | 
				
			||||||
 | 
					                    "Found player " + player + " entering END_PORTAL " + portal);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //Remove any old player teleportations in case weird things happen
 | 
					            //Remove any old player teleportations in case weird things happen
 | 
				
			||||||
            playersFromTheEnd.removeIf((teleportation -> teleportation.getPlayer() == player));
 | 
					            playersFromTheEnd.removeIf((teleportation -> teleportation.getPlayer() == player));
 | 
				
			||||||
            //Decide if the anything stops the player from teleporting
 | 
					            //Decide if the anything stops the player from teleporting
 | 
				
			||||||
            if (PermissionHelper.playerCannotTeleport(portal, portal.getPortalActivator().getDestination(), player, null)) {
 | 
					            if (PermissionHelper.playerCannotTeleport(portal, portal.getPortalActivator().getDestination(), player, null) ||
 | 
				
			||||||
 | 
					                    portal.getOptions().isBungee()) {
 | 
				
			||||||
                //Teleport the player back to the portal they came in, just in case
 | 
					                //Teleport the player back to the portal they came in, just in case
 | 
				
			||||||
                playersFromTheEnd.add(new FromTheEndTeleportation(player, portal));
 | 
					                playersFromTheEnd.add(new FromTheEndTeleportation(player, portal));
 | 
				
			||||||
 | 
					                Stargate.debug("PortalEventListener::onEntityPortalEnter",
 | 
				
			||||||
 | 
					                        "Sending player back to the entrance");
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                playersFromTheEnd.add(new FromTheEndTeleportation(player, portal.getPortalActivator().getDestination()));
 | 
				
			||||||
 | 
					                Stargate.debug("PortalEventListener::onEntityPortalEnter",
 | 
				
			||||||
 | 
					                        "Sending player to destination");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            playersFromTheEnd.add(new FromTheEndTeleportation(player, portal.getPortalActivator().getDestination()));
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -95,9 +105,18 @@ public class PortalEventListener implements Listener {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        Portal exitPortal = teleportation.getExit();
 | 
					        Portal exitPortal = teleportation.getExit();
 | 
				
			||||||
        //Overwrite respawn location to respawn in front of the portal
 | 
					        //Overwrite respawn location to respawn in front of the portal
 | 
				
			||||||
        event.setRespawnLocation(new PlayerTeleporter(exitPortal, respawningPlayer).getExit());
 | 
					        PlayerTeleporter teleporter = new PlayerTeleporter(exitPortal, respawningPlayer);
 | 
				
			||||||
 | 
					        Location respawnLocation = teleporter.getExit();
 | 
				
			||||||
 | 
					        event.setRespawnLocation(respawnLocation);
 | 
				
			||||||
 | 
					        //Try and force the player if for some reason the changing of respawn location isn't properly handled
 | 
				
			||||||
 | 
					        Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () ->
 | 
				
			||||||
 | 
					                respawningPlayer.teleport(respawnLocation), 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Properly close the portal to prevent it from staying in a locked state until it times out
 | 
					        //Properly close the portal to prevent it from staying in a locked state until it times out
 | 
				
			||||||
        exitPortal.getPortalOpener().closePortal(false);
 | 
					        exitPortal.getPortalOpener().closePortal(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Stargate.debug("PortalEventListener::onRespawn", "Overwriting respawn for " + respawningPlayer +
 | 
				
			||||||
 | 
					                " to " + respawnLocation.getWorld() + ":" + respawnLocation);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
package net.knarcraft.stargate.portal;
 | 
					package net.knarcraft.stargate.portal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.SimpleVectorOperation;
 | 
				
			||||||
import net.knarcraft.stargate.container.BlockLocation;
 | 
					import net.knarcraft.stargate.container.BlockLocation;
 | 
				
			||||||
import net.knarcraft.stargate.container.RelativeBlockVector;
 | 
					import net.knarcraft.stargate.container.RelativeBlockVector;
 | 
				
			||||||
import net.knarcraft.stargate.portal.property.PortalLocation;
 | 
					import net.knarcraft.stargate.portal.property.PortalLocation;
 | 
				
			||||||
@@ -8,6 +9,7 @@ import net.knarcraft.stargate.portal.property.PortalOptions;
 | 
				
			|||||||
import net.knarcraft.stargate.portal.property.PortalOwner;
 | 
					import net.knarcraft.stargate.portal.property.PortalOwner;
 | 
				
			||||||
import net.knarcraft.stargate.portal.property.PortalStructure;
 | 
					import net.knarcraft.stargate.portal.property.PortalStructure;
 | 
				
			||||||
import net.knarcraft.stargate.portal.property.gate.Gate;
 | 
					import net.knarcraft.stargate.portal.property.gate.Gate;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.utility.DirectionHelper;
 | 
				
			||||||
import net.md_5.bungee.api.ChatColor;
 | 
					import net.md_5.bungee.api.ChatColor;
 | 
				
			||||||
import org.bukkit.World;
 | 
					import org.bukkit.World;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
@@ -23,6 +25,7 @@ public class Portal {
 | 
				
			|||||||
    private final String cleanName;
 | 
					    private final String cleanName;
 | 
				
			||||||
    private final String network;
 | 
					    private final String network;
 | 
				
			||||||
    private final String cleanNetwork;
 | 
					    private final String cleanNetwork;
 | 
				
			||||||
 | 
					    private final SimpleVectorOperation vectorOperation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final PortalOwner portalOwner;
 | 
					    private final PortalOwner portalOwner;
 | 
				
			||||||
    private boolean isRegistered;
 | 
					    private boolean isRegistered;
 | 
				
			||||||
@@ -59,6 +62,7 @@ public class Portal {
 | 
				
			|||||||
        this.portalActivator = portalOpener.getPortalActivator();
 | 
					        this.portalActivator = portalOpener.getPortalActivator();
 | 
				
			||||||
        this.cleanName = cleanString(name);
 | 
					        this.cleanName = cleanString(name);
 | 
				
			||||||
        this.cleanNetwork = cleanString(network);
 | 
					        this.cleanNetwork = cleanString(network);
 | 
				
			||||||
 | 
					        this.vectorOperation = new SimpleVectorOperation(DirectionHelper.getBlockFaceFromYaw(portalLocation.getYaw()));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -294,7 +298,7 @@ public class Portal {
 | 
				
			|||||||
     * @return <p>The block at the given relative position</p>
 | 
					     * @return <p>The block at the given relative position</p>
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public BlockLocation getBlockAt(RelativeBlockVector vector) {
 | 
					    public BlockLocation getBlockAt(RelativeBlockVector vector) {
 | 
				
			||||||
        return getTopLeft().getRelativeLocation(vector, getYaw());
 | 
					        return (BlockLocation) getTopLeft().clone().add(vectorOperation.performToRealSpaceOperation(vector.toVector()));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package net.knarcraft.stargate.portal;
 | 
					package net.knarcraft.stargate.portal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.config.DynmapManager;
 | 
				
			||||||
import net.knarcraft.stargate.container.BlockLocation;
 | 
					import net.knarcraft.stargate.container.BlockLocation;
 | 
				
			||||||
import net.knarcraft.stargate.utility.PortalFileHelper;
 | 
					import net.knarcraft.stargate.utility.PortalFileHelper;
 | 
				
			||||||
import org.bukkit.World;
 | 
					import org.bukkit.World;
 | 
				
			||||||
@@ -224,6 +225,7 @@ public class PortalRegistry {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        PortalFileHelper.saveAllPortals(portal.getWorld());
 | 
					        PortalFileHelper.saveAllPortals(portal.getWorld());
 | 
				
			||||||
        portal.setRegistered(false);
 | 
					        portal.setRegistered(false);
 | 
				
			||||||
 | 
					        DynmapManager.removePortalMarker(portal);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -289,6 +291,7 @@ public class PortalRegistry {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        allPortals.add(portal);
 | 
					        allPortals.add(portal);
 | 
				
			||||||
        portal.setRegistered(true);
 | 
					        portal.setRegistered(true);
 | 
				
			||||||
 | 
					        DynmapManager.addPortalMarker(portal);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
package net.knarcraft.stargate.portal;
 | 
					package net.knarcraft.stargate.portal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.knarlib.property.ColorConversion;
 | 
				
			||||||
 | 
					import net.knarcraft.knarlib.util.ColorHelper;
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
import net.knarcraft.stargate.container.SignData;
 | 
					import net.knarcraft.stargate.container.SignData;
 | 
				
			||||||
import net.knarcraft.stargate.portal.property.PortalLocation;
 | 
					import net.knarcraft.stargate.portal.property.PortalLocation;
 | 
				
			||||||
@@ -12,8 +14,6 @@ import org.bukkit.block.Sign;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static net.knarcraft.stargate.utility.ColorHelper.translateAllColorCodes;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * The portal sign drawer draws the sing of a given portal
 | 
					 * The portal sign drawer draws the sing of a given portal
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -393,4 +393,14 @@ public class PortalSignDrawer {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Translates all normal and RGB color codes in the given input
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param input <p>The input to translate color codes for</p>
 | 
				
			||||||
 | 
					     * @return <p>The input with color codes converted translated from & to §</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private String translateAllColorCodes(String input) {
 | 
				
			||||||
 | 
					        return ColorHelper.translateColorCodes(input, ColorConversion.RGB);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -169,7 +169,7 @@ public class VehicleTeleporter extends EntityTeleporter {
 | 
				
			|||||||
        //Spawn a new vehicle
 | 
					        //Spawn a new vehicle
 | 
				
			||||||
        Vehicle newVehicle = vehicleWorld.spawn(exit, teleportingVehicle.getClass());
 | 
					        Vehicle newVehicle = vehicleWorld.spawn(exit, teleportingVehicle.getClass());
 | 
				
			||||||
        if (teleportingVehicle instanceof Boat boat) {
 | 
					        if (teleportingVehicle instanceof Boat boat) {
 | 
				
			||||||
            ((Boat) newVehicle).setWoodType(boat.getWoodType());
 | 
					            ((Boat) newVehicle).setBoatType(boat.getBoatType());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        //Remove the old vehicle
 | 
					        //Remove the old vehicle
 | 
				
			||||||
        if (teleportingVehicle.eject()) {
 | 
					        if (teleportingVehicle.eject()) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,54 +0,0 @@
 | 
				
			|||||||
package net.knarcraft.stargate.utility;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import net.md_5.bungee.api.ChatColor;
 | 
					 | 
				
			||||||
import org.bukkit.Color;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.regex.Matcher;
 | 
					 | 
				
			||||||
import java.util.regex.Pattern;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * A helper class for dealing with colors
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
public final class ColorHelper {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private ColorHelper() {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Inverts the given color
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param color <p>The color to invert</p>
 | 
					 | 
				
			||||||
     * @return <p>The inverted color</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static Color invert(Color color) {
 | 
					 | 
				
			||||||
        return color.setRed(255 - color.getRed()).setGreen(255 - color.getGreen()).setBlue(255 - color.getBlue());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Gets the chat color corresponding to the given color
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param color <p>The color to convert into a chat color</p>
 | 
					 | 
				
			||||||
     * @return <p>The resulting chat color</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static ChatColor fromColor(Color color) {
 | 
					 | 
				
			||||||
        return ChatColor.of(String.format("#%02X%02X%02X", color.getRed(), color.getGreen(), color.getBlue()));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Translates all found color codes to formatting in a string
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param message <p>The string to search for color codes</p>
 | 
					 | 
				
			||||||
     * @return <p>The message with color codes translated</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static String translateAllColorCodes(String message) {
 | 
					 | 
				
			||||||
        message = ChatColor.translateAlternateColorCodes('&', message);
 | 
					 | 
				
			||||||
        Pattern pattern = Pattern.compile("(#[a-fA-F0-9]{6})");
 | 
					 | 
				
			||||||
        Matcher matcher = pattern.matcher(message);
 | 
					 | 
				
			||||||
        while (matcher.find()) {
 | 
					 | 
				
			||||||
            message = message.replace(matcher.group(), "" + ChatColor.of(matcher.group()));
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return message;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
package net.knarcraft.stargate.utility;
 | 
					package net.knarcraft.stargate.utility;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.knarlib.formatting.StringFormatter;
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
import net.knarcraft.stargate.config.EconomyConfig;
 | 
					import net.knarcraft.stargate.config.EconomyConfig;
 | 
				
			||||||
import net.knarcraft.stargate.portal.Portal;
 | 
					import net.knarcraft.stargate.portal.Portal;
 | 
				
			||||||
@@ -78,7 +79,7 @@ public final class EconomyHelper {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public static void sendObtainMessage(String portalName, Player portalOwner, int earnings) {
 | 
					    public static void sendObtainMessage(String portalName, Player portalOwner, int earnings) {
 | 
				
			||||||
        String obtainedMsg = Stargate.getString("ecoObtain");
 | 
					        String obtainedMsg = Stargate.getString("ecoObtain");
 | 
				
			||||||
        obtainedMsg = replaceVars(obtainedMsg, portalName, earnings);
 | 
					        obtainedMsg = replacePlaceholders(obtainedMsg, portalName, earnings);
 | 
				
			||||||
        Stargate.getMessageSender().sendSuccessMessage(portalOwner, obtainedMsg);
 | 
					        Stargate.getMessageSender().sendSuccessMessage(portalOwner, obtainedMsg);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -91,7 +92,7 @@ public final class EconomyHelper {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public static void sendDeductMessage(String portalName, Player player, int cost) {
 | 
					    public static void sendDeductMessage(String portalName, Player player, int cost) {
 | 
				
			||||||
        String deductMsg = Stargate.getString("ecoDeduct");
 | 
					        String deductMsg = Stargate.getString("ecoDeduct");
 | 
				
			||||||
        deductMsg = replaceVars(deductMsg, portalName, cost);
 | 
					        deductMsg = replacePlaceholders(deductMsg, portalName, cost);
 | 
				
			||||||
        Stargate.getMessageSender().sendSuccessMessage(player, deductMsg);
 | 
					        Stargate.getMessageSender().sendSuccessMessage(player, deductMsg);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -104,7 +105,7 @@ public final class EconomyHelper {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public static void sendInsufficientFundsMessage(String portalName, Player player, int cost) {
 | 
					    public static void sendInsufficientFundsMessage(String portalName, Player player, int cost) {
 | 
				
			||||||
        String inFundMsg = Stargate.getString("ecoInFunds");
 | 
					        String inFundMsg = Stargate.getString("ecoInFunds");
 | 
				
			||||||
        inFundMsg = replaceVars(inFundMsg, portalName, cost);
 | 
					        inFundMsg = replacePlaceholders(inFundMsg, portalName, cost);
 | 
				
			||||||
        Stargate.getMessageSender().sendErrorMessage(player, inFundMsg);
 | 
					        Stargate.getMessageSender().sendErrorMessage(player, inFundMsg);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -117,7 +118,7 @@ public final class EconomyHelper {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public static void sendRefundMessage(String portalName, Player player, int cost) {
 | 
					    public static void sendRefundMessage(String portalName, Player player, int cost) {
 | 
				
			||||||
        String refundMsg = Stargate.getString("ecoRefund");
 | 
					        String refundMsg = Stargate.getString("ecoRefund");
 | 
				
			||||||
        refundMsg = replaceVars(refundMsg, portalName, -cost);
 | 
					        refundMsg = replacePlaceholders(refundMsg, portalName, -cost);
 | 
				
			||||||
        Stargate.getMessageSender().sendSuccessMessage(player, refundMsg);
 | 
					        Stargate.getMessageSender().sendSuccessMessage(player, refundMsg);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -239,8 +240,8 @@ public final class EconomyHelper {
 | 
				
			|||||||
     * @param cost       <p>The cost for a given interaction</p>
 | 
					     * @param cost       <p>The cost for a given interaction</p>
 | 
				
			||||||
     * @return <p>The same string with cost and portal variables replaced</p>
 | 
					     * @return <p>The same string with cost and portal variables replaced</p>
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private static String replaceVars(String message, String portalName, int cost) {
 | 
					    private static String replacePlaceholders(String message, String portalName, int cost) {
 | 
				
			||||||
        return Stargate.replaceVars(message, new String[]{"%cost%", "%portal%"},
 | 
					        return StringFormatter.replacePlaceholders(message, new String[]{"%cost%", "%portal%"},
 | 
				
			||||||
                new String[]{Stargate.getEconomyConfig().format(cost), portalName});
 | 
					                new String[]{Stargate.getEconomyConfig().format(cost), portalName});
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,127 +0,0 @@
 | 
				
			|||||||
package net.knarcraft.stargate.utility;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import net.md_5.bungee.api.ChatColor;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.io.BufferedReader;
 | 
					 | 
				
			||||||
import java.io.BufferedWriter;
 | 
					 | 
				
			||||||
import java.io.FileInputStream;
 | 
					 | 
				
			||||||
import java.io.FileNotFoundException;
 | 
					 | 
				
			||||||
import java.io.FileOutputStream;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					 | 
				
			||||||
import java.io.InputStream;
 | 
					 | 
				
			||||||
import java.io.InputStreamReader;
 | 
					 | 
				
			||||||
import java.io.OutputStreamWriter;
 | 
					 | 
				
			||||||
import java.nio.charset.StandardCharsets;
 | 
					 | 
				
			||||||
import java.util.HashMap;
 | 
					 | 
				
			||||||
import java.util.Map;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Helper class for reading files
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
public final class FileHelper {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private FileHelper() {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Gets an input stream from a string pointing to an internal file
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * <p>This is used for getting an input stream for reading a file contained within the compiled .jar file. The file
 | 
					 | 
				
			||||||
     * should be in the resources directory, and the file path should start with a forward slash ("/") character.</p>
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param file <p>The file to read</p>
 | 
					 | 
				
			||||||
     * @return <p>An input stream for the file</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static InputStream getInputStreamForInternalFile(String file) {
 | 
					 | 
				
			||||||
        return FileHelper.class.getResourceAsStream(file);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Gets a buffered reader from a string pointing to a file
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param file <p>The file to read</p>
 | 
					 | 
				
			||||||
     * @return <p>A buffered reader reading the file</p>
 | 
					 | 
				
			||||||
     * @throws FileNotFoundException <p>If the given file does not exist</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static BufferedReader getBufferedReaderFromString(String file) throws FileNotFoundException {
 | 
					 | 
				
			||||||
        FileInputStream fileInputStream = new FileInputStream(file);
 | 
					 | 
				
			||||||
        return getBufferedReaderFromInputStream(fileInputStream);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Gets a buffered reader given an input stream
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param inputStream <p>The input stream to read</p>
 | 
					 | 
				
			||||||
     * @return <p>A buffered reader reading the input stream</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static BufferedReader getBufferedReaderFromInputStream(InputStream inputStream) {
 | 
					 | 
				
			||||||
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
 | 
					 | 
				
			||||||
        return new BufferedReader(inputStreamReader);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Gets a buffered writer from a string pointing to a file
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param file <p>The file to write to</p>
 | 
					 | 
				
			||||||
     * @return <p>A buffered writer writing to the file</p>
 | 
					 | 
				
			||||||
     * @throws FileNotFoundException <p>If the file does not exist</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static BufferedWriter getBufferedWriterFromString(String file) throws FileNotFoundException {
 | 
					 | 
				
			||||||
        FileOutputStream fileOutputStream = new FileOutputStream(file);
 | 
					 | 
				
			||||||
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8);
 | 
					 | 
				
			||||||
        return new BufferedWriter(outputStreamWriter);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Reads key/value pairs from an input stream
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param bufferedReader <p>The buffered reader to read</p>
 | 
					 | 
				
			||||||
     * @return <p>A map containing the read pairs</p>
 | 
					 | 
				
			||||||
     * @throws IOException <p>If unable to read from the stream</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static Map<String, String> readKeyValuePairs(BufferedReader bufferedReader) throws IOException {
 | 
					 | 
				
			||||||
        Map<String, String> readPairs = new HashMap<>();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        String line = bufferedReader.readLine();
 | 
					 | 
				
			||||||
        boolean firstLine = true;
 | 
					 | 
				
			||||||
        while (line != null) {
 | 
					 | 
				
			||||||
            //Strip UTF BOM from the first line
 | 
					 | 
				
			||||||
            if (firstLine) {
 | 
					 | 
				
			||||||
                line = removeUTF8BOM(line);
 | 
					 | 
				
			||||||
                firstLine = false;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            //Split at first "="
 | 
					 | 
				
			||||||
            int equalSignIndex = line.indexOf('=');
 | 
					 | 
				
			||||||
            if (equalSignIndex == -1) {
 | 
					 | 
				
			||||||
                line = bufferedReader.readLine();
 | 
					 | 
				
			||||||
                continue;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //Read the line
 | 
					 | 
				
			||||||
            String key = line.substring(0, equalSignIndex);
 | 
					 | 
				
			||||||
            String value = ChatColor.translateAlternateColorCodes('&', line.substring(equalSignIndex + 1));
 | 
					 | 
				
			||||||
            readPairs.put(key, value);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            line = bufferedReader.readLine();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        bufferedReader.close();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return readPairs;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Removes the UTF-8 Byte Order Mark if present
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param string <p>The string to remove the BOM from</p>
 | 
					 | 
				
			||||||
     * @return <p>A string guaranteed without a BOM</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    private static String removeUTF8BOM(String string) {
 | 
					 | 
				
			||||||
        String UTF8_BOM = "\uFEFF";
 | 
					 | 
				
			||||||
        if (string.startsWith(UTF8_BOM)) {
 | 
					 | 
				
			||||||
            string = string.substring(1);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return string;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,87 +0,0 @@
 | 
				
			|||||||
package net.knarcraft.stargate.utility;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					 | 
				
			||||||
import org.bukkit.scheduler.BukkitScheduler;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.io.BufferedReader;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					 | 
				
			||||||
import java.io.InputStream;
 | 
					 | 
				
			||||||
import java.net.URL;
 | 
					 | 
				
			||||||
import java.util.logging.Level;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * The update checker is responsible for looking for new updates
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
public final class UpdateChecker {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private final static String APIResourceURL = "https://api.spigotmc.org/legacy/update.php?resource=97784";
 | 
					 | 
				
			||||||
    private final static String updateNotice = "A new update is available: %s (You are still on %s)";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private UpdateChecker() {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Checks if there's a new update available, and alerts the user if necessary
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static void checkForUpdate() {
 | 
					 | 
				
			||||||
        BukkitScheduler scheduler = Stargate.getInstance().getServer().getScheduler();
 | 
					 | 
				
			||||||
        scheduler.runTaskAsynchronously(Stargate.getInstance(), UpdateChecker::queryAPI);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Queries the spigot API to check for a newer version, and informs the user
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    private static void queryAPI() {
 | 
					 | 
				
			||||||
        try {
 | 
					 | 
				
			||||||
            InputStream inputStream = new URL(APIResourceURL).openStream();
 | 
					 | 
				
			||||||
            BufferedReader reader = FileHelper.getBufferedReaderFromInputStream(inputStream);
 | 
					 | 
				
			||||||
            //There should only be one line of output
 | 
					 | 
				
			||||||
            String newVersion = reader.readLine();
 | 
					 | 
				
			||||||
            reader.close();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            String oldVersion = Stargate.getPluginVersion();
 | 
					 | 
				
			||||||
            //If there is a newer version, notify the user
 | 
					 | 
				
			||||||
            if (isVersionHigher(oldVersion, newVersion)) {
 | 
					 | 
				
			||||||
                Stargate.getConsoleLogger().log(Level.INFO, Stargate.getBackupString("prefix") +
 | 
					 | 
				
			||||||
                        getUpdateAvailableString(newVersion, oldVersion));
 | 
					 | 
				
			||||||
                Stargate.setUpdateAvailable(newVersion);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        } catch (IOException e) {
 | 
					 | 
				
			||||||
            Stargate.debug("UpdateChecker", "Unable to get newest version.");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Gets the string to display to a user to alert about a new update
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param newVersion <p>The new available plugin version</p>
 | 
					 | 
				
			||||||
     * @param oldVersion <p>The old (current) plugin version</p>
 | 
					 | 
				
			||||||
     * @return <p>The string to display</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static String getUpdateAvailableString(String newVersion, String oldVersion) {
 | 
					 | 
				
			||||||
        return String.format(updateNotice, newVersion, oldVersion);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Decides whether one version number is higher than another
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param oldVersion <p>The old version to check</p>
 | 
					 | 
				
			||||||
     * @param newVersion <p>The new version to check</p>
 | 
					 | 
				
			||||||
     * @return <p>True if the new version is higher than the old one</p>
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static boolean isVersionHigher(String oldVersion, String newVersion) {
 | 
					 | 
				
			||||||
        String[] oldVersionParts = oldVersion.split("\\.");
 | 
					 | 
				
			||||||
        String[] newVersionParts = newVersion.split("\\.");
 | 
					 | 
				
			||||||
        int versionLength = Math.max(oldVersionParts.length, newVersionParts.length);
 | 
					 | 
				
			||||||
        for (int i = 0; i < versionLength; i++) {
 | 
					 | 
				
			||||||
            int oldVersionNumber = oldVersionParts.length > i ? Integer.parseInt(oldVersionParts[i]) : 0;
 | 
					 | 
				
			||||||
            int newVersionNumber = newVersionParts.length > i ? Integer.parseInt(newVersionParts[i]) : 0;
 | 
					 | 
				
			||||||
            if (newVersionNumber != oldVersionNumber) {
 | 
					 | 
				
			||||||
                return newVersionNumber > oldVersionNumber;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,4 +1,8 @@
 | 
				
			|||||||
lang=language
 | 
					lang=language
 | 
				
			||||||
 | 
					defaultNetwork=defaultGateNetwork
 | 
				
			||||||
 | 
					use-mysql=
 | 
				
			||||||
 | 
					ignoreEntrance=
 | 
				
			||||||
 | 
					portal-save-location=folders.portalFolder
 | 
				
			||||||
portal-folder=folders.portalFolder
 | 
					portal-folder=folders.portalFolder
 | 
				
			||||||
gate-folder=folders.gateFolder
 | 
					gate-folder=folders.gateFolder
 | 
				
			||||||
default-gate-network=gates.defaultGateNetwork
 | 
					default-gate-network=gates.defaultGateNetwork
 | 
				
			||||||
@@ -18,11 +22,28 @@ debug=debugging.debug
 | 
				
			|||||||
permdebug=debugging.permissionDebug
 | 
					permdebug=debugging.permissionDebug
 | 
				
			||||||
useiconomy=economy.useEconomy
 | 
					useiconomy=economy.useEconomy
 | 
				
			||||||
useeconomy=economy.useEconomy
 | 
					useeconomy=economy.useEconomy
 | 
				
			||||||
 | 
					cost-to-use=economy.useCost
 | 
				
			||||||
 | 
					cost-to-create=economy.createCost
 | 
				
			||||||
createcost=economy.createCost
 | 
					createcost=economy.createCost
 | 
				
			||||||
destroycost=economy.destroyCost
 | 
					destroycost=economy.destroyCost
 | 
				
			||||||
usecost=economy.useCost
 | 
					usecost=economy.useCost
 | 
				
			||||||
toowner=economy.toOwner
 | 
					toowner=economy.toOwner
 | 
				
			||||||
 | 
					cost-destination=economy.chargeFreeDestination
 | 
				
			||||||
chargefreedestination=economy.chargeFreeDestination
 | 
					chargefreedestination=economy.chargeFreeDestination
 | 
				
			||||||
freegatesgreen=economy.freeGatesGreen
 | 
					freegatesgreen=economy.freeGatesGreen
 | 
				
			||||||
CheckUpdates=
 | 
					CheckUpdates=
 | 
				
			||||||
economy.freeGatesGreen=economy.freeGatesColored
 | 
					economy.freeGatesGreen=economy.freeGatesColored
 | 
				
			||||||
 | 
					teleportMessage=
 | 
				
			||||||
 | 
					registerMessage=
 | 
				
			||||||
 | 
					destroyzMessage=
 | 
				
			||||||
 | 
					noownersMessage=
 | 
				
			||||||
 | 
					unselectMessage=
 | 
				
			||||||
 | 
					collisinMessage=
 | 
				
			||||||
 | 
					cantAffordToUse=
 | 
				
			||||||
 | 
					cantAffordToNew=
 | 
				
			||||||
 | 
					portal-open=
 | 
				
			||||||
 | 
					portal-closed=
 | 
				
			||||||
 | 
					cost-type=
 | 
				
			||||||
 | 
					cost-to-activate=
 | 
				
			||||||
 | 
					taxaccount=taxAccount
 | 
				
			||||||
 | 
					usevault=
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
# stargate Configuration File
 | 
					# stargate Configuration File
 | 
				
			||||||
# Main stargate config
 | 
					# Main stargate config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# language - The language file to load for messages
 | 
					# language - The language file to load for messages (de,en,es,fr,hu,it,ja,nb-no,nl,nn-no,pt-br,ru,zh_cn)
 | 
				
			||||||
language: en
 | 
					language: en
 | 
				
			||||||
# adminUpdateAlert - Whether to alert admins about new plugin updates
 | 
					# adminUpdateAlert - Whether to alert admins about new plugin updates
 | 
				
			||||||
adminUpdateAlert: true
 | 
					adminUpdateAlert: true
 | 
				
			||||||
@@ -40,7 +40,8 @@ gates:
 | 
				
			|||||||
    destroyedByExplosion: false
 | 
					    destroyedByExplosion: false
 | 
				
			||||||
    # verifyPortals - Whether all the non-sign blocks are checked to match the gate layout when a stargate is loaded.
 | 
					    # verifyPortals - Whether all the non-sign blocks are checked to match the gate layout when a stargate is loaded.
 | 
				
			||||||
    verifyPortals: false
 | 
					    verifyPortals: false
 | 
				
			||||||
    # protectEntrance - Whether to protect gate entrance material (More resource intensive. Only enable if using destroyable open/closed material)
 | 
					    # protectEntrance - Whether to protect gate entrance material (More resource intensive. Only enable if using 
 | 
				
			||||||
 | 
					    #  destroyable open/closed material)
 | 
				
			||||||
    protectEntrance: false
 | 
					    protectEntrance: false
 | 
				
			||||||
  functionality:
 | 
					  functionality:
 | 
				
			||||||
    enableBungee: false
 | 
					    enableBungee: false
 | 
				
			||||||
@@ -48,18 +49,21 @@ gates:
 | 
				
			|||||||
    handleVehicles: true
 | 
					    handleVehicles: true
 | 
				
			||||||
    # handleEmptyVehicles - Whether to allow empty vehicles through gates (chest/hopper/tnt/furnace minecarts included)
 | 
					    # handleEmptyVehicles - Whether to allow empty vehicles through gates (chest/hopper/tnt/furnace minecarts included)
 | 
				
			||||||
    handleEmptyVehicles: true
 | 
					    handleEmptyVehicles: true
 | 
				
			||||||
    # handleCreatureTransportation - Whether to allow players to transport creatures by sending vehicles (minecarts, boats) through gates
 | 
					    # handleCreatureTransportation - Whether to allow players to transport creatures by sending vehicles (minecarts, 
 | 
				
			||||||
 | 
					    #  boats) through gates
 | 
				
			||||||
    handleCreatureTransportation: true
 | 
					    handleCreatureTransportation: true
 | 
				
			||||||
    # handleNonPlayerVehicles - Whether to allow vehicles with a passenger which is not a player through gates. handleCreatureTransportation must be enabled
 | 
					    # handleNonPlayerVehicles - Whether to allow vehicles with a passenger which is not a player through gates. 
 | 
				
			||||||
 | 
					    #  handleCreatureTransportation must be enabled
 | 
				
			||||||
    handleNonPlayerVehicles: true
 | 
					    handleNonPlayerVehicles: true
 | 
				
			||||||
    # handleLeashedCreatures - Whether to allow creatures lead by a player to teleport with the player
 | 
					    # handleLeashedCreatures - Whether to allow creatures lead by a player to teleport with the player
 | 
				
			||||||
    handleLeashedCreatures: true
 | 
					    handleLeashedCreatures: true
 | 
				
			||||||
    # enableCraftBookRemoveOnEjectFix - Whether to enable a fix that causes loss of NBT data, but allows vehicle teleportation to work when CraftBook's remove minecart/boat on eject setting is enabled
 | 
					    # enableCraftBookRemoveOnEjectFix - Whether to enable a fix that causes loss of NBT data, but allows vehicle 
 | 
				
			||||||
 | 
					    #  teleportation to work when CraftBook's remove minecart/boat on eject setting is enabled
 | 
				
			||||||
    enableCraftBookRemoveOnEjectFix: false
 | 
					    enableCraftBookRemoveOnEjectFix: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# I------------I-------------I #
 | 
					# ######################## #
 | 
				
			||||||
# stargate economy options #
 | 
					# stargate economy options #
 | 
				
			||||||
# I------------I-------------I #
 | 
					# ######################## #
 | 
				
			||||||
economy:
 | 
					economy:
 | 
				
			||||||
  # useEconomy - Whether to use an economy plugin
 | 
					  # useEconomy - Whether to use an economy plugin
 | 
				
			||||||
  useEconomy: false
 | 
					  useEconomy: false
 | 
				
			||||||
@@ -78,14 +82,26 @@ economy:
 | 
				
			|||||||
  # freeGatesColor - The color to use for marking free gates
 | 
					  # freeGatesColor - The color to use for marking free gates
 | 
				
			||||||
  freeGatesColor: DARK_GREEN
 | 
					  freeGatesColor: DARK_GREEN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# I-------I-------I #
 | 
					# ############# #
 | 
				
			||||||
# Debug options #
 | 
					# Debug options #
 | 
				
			||||||
# I-------I-------I #
 | 
					# ############# #
 | 
				
			||||||
debugging:
 | 
					debugging:
 | 
				
			||||||
  # debug - Debug -- Only enable if you have issues, massive console output
 | 
					  # debug - Debug -- Only enable if you have issues, massive console output
 | 
				
			||||||
  debug: false
 | 
					  debug: false
 | 
				
			||||||
  # permissionDebug - This will output any and all Permissions checks to console, used for permissions debugging (Requires debug: true)
 | 
					  # permissionDebug - This will output any and all Permissions checks to console, used for permissions debugging 
 | 
				
			||||||
 | 
					  #  (Requires debug: true)
 | 
				
			||||||
  permissionDebug: false
 | 
					  permissionDebug: false
 | 
				
			||||||
advanced:
 | 
					advanced:
 | 
				
			||||||
  # waitForPlayerAfterTeleportDelay - The amount of ticks to wait before adding a player as passenger of a vehicle. On slow servers, a value of 6 is required to avoid client glitches after teleporting on a vehicle.
 | 
					  # waitForPlayerAfterTeleportDelay - The amount of ticks to wait before adding a player as passenger of a vehicle. 
 | 
				
			||||||
  waitForPlayerAfterTeleportDelay: 6
 | 
					  #  On slow servers, a value of 6 is required to avoid client glitches after teleporting on a vehicle.
 | 
				
			||||||
 | 
					  waitForPlayerAfterTeleportDelay: 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ############## #
 | 
				
			||||||
 | 
					# Dynmap options #
 | 
				
			||||||
 | 
					# ############## #
 | 
				
			||||||
 | 
					dynmap:
 | 
				
			||||||
 | 
					  # enableDynmap - Whether to display Stargates in Dynmap's map
 | 
				
			||||||
 | 
					  enableDynmap: true
 | 
				
			||||||
 | 
					  # dynmapIconsHiddenByDefault - Whether to hide the set of Stargate icons by default, requiring users to 
 | 
				
			||||||
 | 
					  #  manually enable them with a checkbox.
 | 
				
			||||||
 | 
					  dynmapIconsHiddenByDefault: true
 | 
				
			||||||
							
								
								
									
										44
									
								
								src/main/resources/lang/ja.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/main/resources/lang/ja.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					author=furplag
 | 
				
			||||||
 | 
					prefix=[Stargate]
 | 
				
			||||||
 | 
					teleportMsg=テレポート
 | 
				
			||||||
 | 
					destroyMsg=ゲートが破壊されました
 | 
				
			||||||
 | 
					invalidMsg=無効な行き先
 | 
				
			||||||
 | 
					blockMsg=ブロックされた行き先
 | 
				
			||||||
 | 
					destEmpty=行き先リストが空です
 | 
				
			||||||
 | 
					denyMsg=アクセスが拒否されました
 | 
				
			||||||
 | 
					reloaded= Stargate をリロードしました
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ecoDeduct=%cost% の値引き
 | 
				
			||||||
 | 
					ecoRefund=%cost% の返金
 | 
				
			||||||
 | 
					ecoObtain= Stargate %portal% から %cost% を得ました
 | 
				
			||||||
 | 
					ecoInFunds=資金の不足
 | 
				
			||||||
 | 
					ecoLoadError= Vault が読み込まれましたが、Economy プラグインをフックできませんでした
 | 
				
			||||||
 | 
					vaultLoadError=Economy は有効になっていますが、Vault をロードできないため Economy は無効化されました
 | 
				
			||||||
 | 
					vaultLoaded= Vault v%version% が見つかりました
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					createMsg=ゲートが作成されました
 | 
				
			||||||
 | 
					createNetDeny=対象のネットワークにアクセスできません
 | 
				
			||||||
 | 
					createGateDeny=対象のゲートレイアウトにアクセスできません
 | 
				
			||||||
 | 
					createPersonal=パーソナルネットワーク上にゲートを作成する
 | 
				
			||||||
 | 
					createNameLength=ゲート名が短すぎるか長すぎます
 | 
				
			||||||
 | 
					createExists=すでに存在するゲート名です
 | 
				
			||||||
 | 
					createFull=対象のネットワークはいっぱいです
 | 
				
			||||||
 | 
					createWorldDeny=あなたはその世界にアクセスできません
 | 
				
			||||||
 | 
					createConflict=ゲートが既存のゲートと競合しています
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					signRightClick=右クリック
 | 
				
			||||||
 | 
					signToUse=ゲートを使用する
 | 
				
			||||||
 | 
					signRandom=ランダム
 | 
				
			||||||
 | 
					signDisconnected=切断
 | 
				
			||||||
 | 
					signInvalidGate=無効なゲート
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bungeeDisabled=BungeeCord サポートは無効になっています
 | 
				
			||||||
 | 
					bungeeDeny=BungeeCord ゲートを作成する権限がありません
 | 
				
			||||||
 | 
					bungeeEmpty=BungeeCord ゲートには、行き先とネットワークの両方が必要です
 | 
				
			||||||
 | 
					bungeeSign=テレポート先:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					portalInfoTitle=[STARGATE INFO]
 | 
				
			||||||
 | 
					portalInfoName=ゲート名: %name%
 | 
				
			||||||
 | 
					portalInfoDestination=行き先: %destination%
 | 
				
			||||||
 | 
					portalInfoNetwork=ネットワーク: %network%
 | 
				
			||||||
 | 
					portalInfoServer=サーバー: %server%
 | 
				
			||||||
							
								
								
									
										39
									
								
								src/main/resources/lang/zh_cn.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/main/resources/lang/zh_cn.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					author=YKDZ
 | 
				
			||||||
 | 
					signRightClick=右键
 | 
				
			||||||
 | 
					ecoLoadError=Vault 已加载, 但未检测到合适的经济插件
 | 
				
			||||||
 | 
					createConflict=星门与现有星门冲突
 | 
				
			||||||
 | 
					invalidMsg=无效的目的地
 | 
				
			||||||
 | 
					prefix=[星门] 
 | 
				
			||||||
 | 
					ecoObtain=从星门 %portal% 收取了 %cost%
 | 
				
			||||||
 | 
					vaultLoaded=检测到 Vault v%version%
 | 
				
			||||||
 | 
					reloaded=星门插件已重载
 | 
				
			||||||
 | 
					bungeeDeny=你没有创建跨服星门的权限.
 | 
				
			||||||
 | 
					signToUse=以使用星门
 | 
				
			||||||
 | 
					signInvalidGate=未知星门
 | 
				
			||||||
 | 
					bungeeEmpty=跨服星门需要提供目的地和网络.
 | 
				
			||||||
 | 
					createMsg=星门已创建
 | 
				
			||||||
 | 
					bungeeDisabled=跨服功能已被禁用.
 | 
				
			||||||
 | 
					blockMsg=目的地被阻挡
 | 
				
			||||||
 | 
					ecoInFunds=余额不足
 | 
				
			||||||
 | 
					createNameLength=名称过短或过长.
 | 
				
			||||||
 | 
					vaultLoadError=未检测到Vault. 经济模块已禁用
 | 
				
			||||||
 | 
					denyMsg=访问被拒
 | 
				
			||||||
 | 
					ecoDeduct=花费 %cost%
 | 
				
			||||||
 | 
					signDisconnected=已取消链接
 | 
				
			||||||
 | 
					createNetDeny=你没有这个星门网络的许可
 | 
				
			||||||
 | 
					bungeeSign=传送到
 | 
				
			||||||
 | 
					portalInfoName=名称: %name%
 | 
				
			||||||
 | 
					destroyMsg=星门已被破坏
 | 
				
			||||||
 | 
					portalInfoTitle=[星门信息]
 | 
				
			||||||
 | 
					createExists=与已有星门重名
 | 
				
			||||||
 | 
					teleportMsg=已传送
 | 
				
			||||||
 | 
					createGateDeny=你没有使用这个星门结构的权限
 | 
				
			||||||
 | 
					signRandom=随机
 | 
				
			||||||
 | 
					portalInfoServer=服务器: %server%
 | 
				
			||||||
 | 
					createWorldDeny=你没有链接这个世界的权限
 | 
				
			||||||
 | 
					portalInfoDestination=目的地: %destination%
 | 
				
			||||||
 | 
					portalInfoNetwork=星门网络: %network%
 | 
				
			||||||
 | 
					destEmpty=目的地列表为空
 | 
				
			||||||
 | 
					createPersonal=在私人网络中创建星门
 | 
				
			||||||
 | 
					ecoRefund=退款 %cost%
 | 
				
			||||||
 | 
					createFull=此星门网络已满
 | 
				
			||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
name: Stargate
 | 
					name: Stargate
 | 
				
			||||||
main: net.knarcraft.stargate.Stargate
 | 
					main: net.knarcraft.stargate.Stargate
 | 
				
			||||||
version: 0.9.3.5
 | 
					version: '${project.version}'
 | 
				
			||||||
description: Stargate mod for Bukkit Revived
 | 
					description: Stargate mod for Bukkit Revived
 | 
				
			||||||
author: EpicKnarvik97
 | 
					author: EpicKnarvik97
 | 
				
			||||||
authors: [ Drakia, PseudoKnight, EpicKnarvik97 ]
 | 
					authors: [ Drakia, PseudoKnight, EpicKnarvik97 ]
 | 
				
			||||||
website: https://git.knarcraft.net/EpicKnarvik97/Stargate
 | 
					website: https://git.knarcraft.net/EpicKnarvik97/Stargate
 | 
				
			||||||
api-version: 1.18
 | 
					api-version: 1.18
 | 
				
			||||||
softdepend: [ Vault ]
 | 
					softdepend: [ Vault, dynmap ]
 | 
				
			||||||
commands:
 | 
					commands:
 | 
				
			||||||
  stargate:
 | 
					  stargate:
 | 
				
			||||||
    aliases:
 | 
					    aliases:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user