diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c771fd5..825b18d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,21 +11,22 @@ jobs: name: Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Set up JDK 17 - uses: actions/setup-java@v1 + uses: actions/setup-java@v3 with: + distribution: 'adopt' java-version: 17 - name: Cache SonarCloud packages - uses: actions/cache@v1 + uses: actions/cache@v3 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar - name: Cache Maven packages - uses: actions/cache@v1 + uses: actions/cache@v3 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} diff --git a/pom.xml b/pom.xml index eaeb901..130ec45 100644 --- a/pom.xml +++ b/pom.xml @@ -49,12 +49,12 @@ <java.version>17</java.version> <powermock.version>2.0.9</powermock.version> <!-- More visible way how to change dependency versions --> - <spigot.version>1.19.3-R0.1-SNAPSHOT</spigot.version> - <bentobox.version>1.22.1-SNAPSHOT</bentobox.version> + <spigot.version>1.20.3-R0.1-SNAPSHOT</spigot.version> + <bentobox.version>2.0.0-SNAPSHOT</bentobox.version> <!-- Revision variable removes warning about dynamic version --> <revision>${build.version}-SNAPSHOT</revision> <!-- This allows to change between versions and snapshots. --> - <build.version>4.1.1</build.version> + <build.version>4.2</build.version> <build.number>-LOCAL</build.number> <!-- Sonar Cloud --> <sonar.projectKey>BentoBoxWorld_Border</sonar.projectKey> @@ -120,21 +120,14 @@ </repositories> <dependencies> - <!-- Spigot API --> - <dependency> - <groupId>org.spigotmc</groupId> - <artifactId>spigot-api</artifactId> - <version>${spigot.version}</version> - <scope>provided</scope> - </dependency> - <!-- Mockito (Unit testing) --> - <dependency> - <groupId>org.mockito</groupId> - <artifactId>mockito-core</artifactId> - <version>3.11.1</version> - <scope>test</scope> - </dependency> + <!-- Mockito (Unit testing) This goes at the top to ensure the dependencies are accurate. --> + <!-- This is required for PowerMockito to work and must be placed before it --> <dependency> + <groupId>org.javassist</groupId> + <artifactId>javassist</artifactId> + <version>3.30.2-GA</version> + </dependency> + <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>${powermock.version}</version> @@ -146,12 +139,25 @@ <version>${powermock.version}</version> <scope>test</scope> </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <version>3.11.1</version> + <scope>test</scope> + </dependency> <dependency> <groupId>world.bentobox</groupId> <artifactId>bentobox</artifactId> <version>${bentobox.version}</version> <scope>provided</scope> </dependency> + <!-- Spigot API --> + <dependency> + <groupId>org.spigotmc</groupId> + <artifactId>spigot-api</artifactId> + <version>${spigot.version}</version> + <scope>provided</scope> + </dependency> </dependencies> <build> @@ -263,13 +269,15 @@ <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> - <version>0.8.7</version> + <version>0.8.10</version> <configuration> <append>true</append> <excludes> <!-- This is required to prevent Jacoco from adding synthetic fields to a JavaBean class (causes errors in testing) --> <exclude>**/*Names*</exclude> + <!-- Prevents the Material is too large to mock error --> + <exclude>org/bukkit/Material*</exclude> </excludes> </configuration> <executions> diff --git a/src/main/java/world/bentobox/border/Settings.java b/src/main/java/world/bentobox/border/Settings.java index 83b0cf6..5fd7ed8 100644 --- a/src/main/java/world/bentobox/border/Settings.java +++ b/src/main/java/world/bentobox/border/Settings.java @@ -35,6 +35,11 @@ public class Settings implements ConfigObject { @ConfigEntry(path = "return-teleport") private boolean returnTeleport = true; + @ConfigComment("") + @ConfigComment("Place a safety block under the player if they get teleported back into a non-safe spot.") + @ConfigEntry(path = "return-teleport-safety-block") + private boolean returnTeleportBlock = true; + @ConfigComment("") @ConfigComment("Barrier blocks on/off. Only applies if the border type is BARRIER.") @ConfigComment("If false, the border is indicated by particles only.") @@ -173,4 +178,18 @@ public void setBarrierOffset(int barrierOffset) { this.barrierOffset = barrierOffset; getBarrierOffset(); } + + /** + * @return the returnTeleportBlock + */ + public boolean isReturnTeleportBlock() { + return returnTeleportBlock; + } + + /** + * @param returnTeleportBlock the returnTeleportBlock to set + */ + public void setReturnTeleportBlock(boolean returnTeleportBlock) { + this.returnTeleportBlock = returnTeleportBlock; + } } diff --git a/src/main/java/world/bentobox/border/listeners/PlayerListener.java b/src/main/java/world/bentobox/border/listeners/PlayerListener.java index 9bc361d..0cb89a3 100644 --- a/src/main/java/world/bentobox/border/listeners/PlayerListener.java +++ b/src/main/java/world/bentobox/border/listeners/PlayerListener.java @@ -155,7 +155,7 @@ public void onPlayerLeaveIsland(PlayerMoveEvent e) { if (r != null) { inTeleport.add(p.getUniqueId()); Location targetPos = r.getHitPosition().toLocation(p.getWorld(), p.getLocation().getYaw(), p.getLocation().getPitch()); - if (!addon.getIslands().isSafeLocation(targetPos)) { + if (addon.getSettings().isReturnTeleportBlock() && !addon.getIslands().isSafeLocation(targetPos)) { switch (targetPos.getWorld().getEnvironment()) { case NETHER: targetPos.getBlock().getRelative(BlockFace.DOWN).setType(Material.NETHERRACK); diff --git a/src/main/java/world/bentobox/border/listeners/ShowBarrier.java b/src/main/java/world/bentobox/border/listeners/ShowBarrier.java index c866890..7cc0150 100644 --- a/src/main/java/world/bentobox/border/listeners/ShowBarrier.java +++ b/src/main/java/world/bentobox/border/listeners/ShowBarrier.java @@ -133,7 +133,7 @@ private void showPlayer(Player player, int i, int j, int k, boolean max) { Location l = new Location(player.getWorld(), i, j, k); Util.getChunkAtAsync(l).thenAccept(c -> { if (addon.getSettings().isShowParticles()) { - if (j < 0 || j > player.getWorld().getMaxHeight()) { + if (j < player.getWorld().getMinHeight() || j > player.getWorld().getMaxHeight()) { User.getInstance(player).spawnParticle(max ? MAX_PARTICLE : PARTICLE, PARTICLE_DUST_RED, i + 0.5D, j + 0.0D, k + 0.5D); } else { User.getInstance(player).spawnParticle(max ? MAX_PARTICLE : PARTICLE, PARTICLE_DUST_BLUE, i + 0.5D, j + 0.0D, k + 0.5D); diff --git a/src/main/resources/addon.yml b/src/main/resources/addon.yml index f63fd3e..ef18ae2 100644 --- a/src/main/resources/addon.yml +++ b/src/main/resources/addon.yml @@ -10,8 +10,8 @@ authors: [tastybento] permissions: '[gamemode].border.toggle': - description: Player can use border toggle command + description: Player can use border command default: op - '[gamemode].border.set-type': + '[gamemode].border.type': description: Player can use border type setting command default: true \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c821a87..b19ac3b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,30 +1,43 @@ -# Border addon configuration file +# Border addon configuration file {$version} # See the documentation at https://docs.bentobox.world/en/latest/addons/Border/ -# +# # This list stores GameModes in which Border addon should not work. # To disable addon it is necessary to write its name in new line that starts with -. Example: # disabled-gamemodes: # - BSkyBlock disabled-gamemodes: [] -# -# Use vanilla world border. -use-vanilla: true -# +# +# Border type. Options are VANILLA, which uses the vanillia-style board or BARRIER, +# which uses particles and barrier blocks. If players have permission to use the barrier type +# they may override this option. If they do not have permission or lose the permission +# then this setting will be used. +type: VANILLA +# # Teleport players back inside the border if they somehow get outside. # This will teleport players back inside if they toggle the border with a command. return-teleport: true -# -# Only applies if vanilla isn't used. -# Use barrier blocks. If false, the border is indicated by particles only. +# +# Place a safety block under the player if they get teleported back into a non-safe spot. +return-teleport-safety-block: true +# +# Barrier blocks on/off. Only applies if the border type is BARRIER. +# If false, the border is indicated by particles only. use-barrier-blocks: true -# -# Default border behavior +# +# Turn on barrier by default. show-by-default: true -# -# Only applies if vanilla isn't used. +# +# Only applies if VANILLA type isn't used. # Show max-protection range border. This is a visual border only and not a barrier. +# This setting is useful for game modes where the protection range can move around, like Boxed show-max-border: true -# -# Only applies if vanilla isn't used. +# +# Only applies if VANILLA type isn't used. # Enables/disables all types of wall particles shown by the addon show-particles: true +# +# Barrier offset. +# The barrier normally occurs at the protection range limit but this value extends it outwards. +# This does not extend the protection range, but will enable players to go outside their protected area. +# The barrier will not go further than the island distance. Minimum and default value is 0. +barrier-offset: 0 diff --git a/src/main/resources/locales/cs.yml b/src/main/resources/locales/cs.yml index ab5dd5b..2300c97 100644 --- a/src/main/resources/locales/cs.yml +++ b/src/main/resources/locales/cs.yml @@ -1,7 +1,10 @@ -# Translation by: CZghost - +--- border: toggle: - description: "přepíná hranice ostrova zapnuto/vypnuto" + description: přepíná hranice ostrova zapnuto/vypnuto border-on: "&a Hranice zapnuta." border-off: "&a Hranice vypnuta." + set-type: + description: změní typ ohraničení + changed: "&a Typ ohraničení změněn na &b[type]&a." + error-unavailable-type: "&c Tento typ je nedostupný nebo neexistuje." diff --git a/src/main/resources/locales/hr.yml b/src/main/resources/locales/hr.yml new file mode 100644 index 0000000..bbc64e3 --- /dev/null +++ b/src/main/resources/locales/hr.yml @@ -0,0 +1,10 @@ +--- +border: + toggle: + description: uključuje/isključuje obrub + border-on: "&a Border omogućen." + border-off: "&a Border onemogućen." + set-type: + description: mijenja vrstu obruba + changed: "&a Vrsta obruba promijenjena je u &b[type]&a." + error-unavailable-type: "&c Ova vrsta je nedostupna ili ne postoji." diff --git a/src/main/resources/locales/it.yml b/src/main/resources/locales/it.yml index 352ee21..0d7a85a 100644 --- a/src/main/resources/locales/it.yml +++ b/src/main/resources/locales/it.yml @@ -4,3 +4,7 @@ border: description: attiva o disattiva il bordo border-on: "&a Bordo attivato." border-off: "&c Bordo disattivato." + set-type: + description: cambia il tipo di bordo + changed: "&a Il tipo di bordo è stato modificato in &b[type]&a." + error-unavailable-type: "&c Questo tipo non è disponibile o non esiste." diff --git a/src/main/resources/locales/ja.yml b/src/main/resources/locales/ja.yml new file mode 100644 index 0000000..4655856 --- /dev/null +++ b/src/main/resources/locales/ja.yml @@ -0,0 +1,10 @@ +--- +border: + toggle: + description: 境界線のオン/オフを切り替えます + border-on: "&a 境界線が有効です。" + border-off: "&a 境界線が無効になっています。" + set-type: + description: 境界線の種類を変更します + changed: "&a 枠線のタイプが &b[type]&a に変更されました。" + error-unavailable-type: "&c このタイプは使用できないか、存在しません。" diff --git a/src/main/resources/locales/ko.yml b/src/main/resources/locales/ko.yml index 55b802b..c55c503 100644 --- a/src/main/resources/locales/ko.yml +++ b/src/main/resources/locales/ko.yml @@ -4,3 +4,7 @@ border: description: 월드보더를 키거나 끕니다 border-on: "&a 월드 보더를 활성화 했습니다" border-off: "&a 월드 보더를 비활성화 했습니다" + set-type: + description: 테두리 유형을 변경합니다. + changed: "&a 테두리 유형이 &b[type]&a로 변경되었습니다." + error-unavailable-type: "&c 이 유형은 사용할 수 없거나 존재하지 않습니다." diff --git a/src/main/resources/locales/nl.yml b/src/main/resources/locales/nl.yml new file mode 100644 index 0000000..87993ca --- /dev/null +++ b/src/main/resources/locales/nl.yml @@ -0,0 +1,10 @@ +--- +border: + toggle: + description: schakelt de rand in/uit + border-on: "&a Rand ingeschakeld." + border-off: "&a Grens uitgeschakeld." + set-type: + description: verandert het type rand + changed: "&a Randtype gewijzigd in &b[type]&a." + error-unavailable-type: "&c Dit type is niet beschikbaar of bestaat niet." diff --git a/src/main/resources/locales/pt.yml b/src/main/resources/locales/pt.yml index c1d7185..3a69801 100644 --- a/src/main/resources/locales/pt.yml +++ b/src/main/resources/locales/pt.yml @@ -4,3 +4,7 @@ border: description: Ativa/Desativa a borda border-on: "&a Borda ativada." border-off: "&a Borda desativada." + set-type: + description: muda o tipo da borda + changed: "&a Tipo de borda alterado para &b[type]&a." + error-unavailable-type: "&c Este tipo não está disponível ou não existe." diff --git a/src/main/resources/locales/ro.yml b/src/main/resources/locales/ro.yml new file mode 100644 index 0000000..8371592 --- /dev/null +++ b/src/main/resources/locales/ro.yml @@ -0,0 +1,10 @@ +--- +border: + toggle: + description: activează/dezactivează chenarul + border-on: "&a Chenar activat." + border-off: "&a Chenar este dezactivată." + set-type: + description: modifică tipul de chenar + changed: "&a Tipul de chenar s-a schimbat în &b[type]&a." + error-unavailable-type: "&c Acest tip este indisponibil sau nu există." diff --git a/src/main/resources/locales/tr.yml b/src/main/resources/locales/tr.yml new file mode 100644 index 0000000..547392e --- /dev/null +++ b/src/main/resources/locales/tr.yml @@ -0,0 +1,10 @@ +--- +border: + toggle: + description: kenarlığı açar/kapatır + border-on: "&a Sınır etkin." + border-off: "&a Kenarlık devre dışı." + set-type: + description: kenarlığın türünü değiştirir + changed: "&a Kenarlık türü &b[type]&a olarak değiştirildi." + error-unavailable-type: "&c Bu tür kullanılamıyor veya mevcut değil." diff --git a/src/main/resources/locales/uk.yml b/src/main/resources/locales/uk.yml new file mode 100644 index 0000000..913549e --- /dev/null +++ b/src/main/resources/locales/uk.yml @@ -0,0 +1,10 @@ +--- +border: + toggle: + description: вмикає/вимикає рамку + border-on: "& Межа ввімкнена." + border-off: "& Межа вимкнена." + set-type: + description: змінює тип рамки + changed: Тип рамки &a змінено на &b[type]&a. + error-unavailable-type: "&c Цей тип недоступний або не існує." diff --git a/src/main/resources/locales/vi.yml b/src/main/resources/locales/vi.yml index e12d921..d7bdaf6 100644 --- a/src/main/resources/locales/vi.yml +++ b/src/main/resources/locales/vi.yml @@ -1,5 +1,10 @@ +--- border: toggle: description: bật/tắt hiệu ứng rìa đảo - border-on: '&aĐã bật rìa đảo.' - border-off: '&aĐã tắt rìa đảo.' + border-on: "&aĐã bật rìa đảo." + border-off: "&aĐã tắt rìa đảo." + set-type: + description: thay đổi loại đường viền đảo + changed: "&a Loại đường viền đảo đã thay đổi thành &b[type]&a." + error-unavailable-type: "&c Loại này không có sẵn hoặc không tồn tại." diff --git a/src/main/resources/locales/zh-CN.yml b/src/main/resources/locales/zh-CN.yml new file mode 100644 index 0000000..ecf0f69 --- /dev/null +++ b/src/main/resources/locales/zh-CN.yml @@ -0,0 +1,10 @@ +--- +border: + toggle: + description: 打开/关闭边框 + border-on: "&a 启用边框。" + border-off: "&a 边框已禁用。" + set-type: + description: 更改边框的类型 + changed: "&a 边框类型更改为 &b[type]&a。" + error-unavailable-type: "&c 此类型不可用或不存在。" diff --git a/src/main/resources/locales/zh-TW.yml b/src/main/resources/locales/zh-TW.yml index 00f8f96..0ffd8e6 100644 --- a/src/main/resources/locales/zh-TW.yml +++ b/src/main/resources/locales/zh-TW.yml @@ -4,4 +4,7 @@ border: description: 開啟/關閉 顯示邊界 border-on: "&a開啟 顯示邊界" border-off: "&a關閉 顯示邊界" - + set-type: + description: 更改邊框的類型 + changed: "&a 邊框類型更改為 &b[type]&a。" + error-unavailable-type: "&c 此類型不可用或不存在。"