Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions .github/workflows/modrinth-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Publish

on:
release:
types: [published]

jobs:
publish:
name: Publish
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 21
distribution: adopt
cache: maven

# This step will take the version tag from the release and replace it in `pom.xml` before building.
#- name: Set version from release tag
# run: mvn -B versions:set -DnewVersion=${{ github.event.release.tag_name }} -DgenerateBackupPoms=false

- name: Build and package with Maven
run: mvn -B clean package -DskipTests -DgenerateBackupPoms=false -Pmaster --file pom.xml

- name: Upload to Modrinth
uses: cloudnode-pro/modrinth-publish@v2
with:
token: ${{ secrets.MODRINTH_TOKEN }}
project: wvEhk1hC
name: ${{ github.event.release.name }}
version: ${{ github.event.release.tag_name }}
changelog: ${{ github.event.release.body }}
loaders: |-
paper
spigot
game-versions: |-
1.21.4
1.21.5
files: /home/runner/work/BentoBox/Border/target/Border-${{ github.event.release.tag_name }}.jar
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
<!-- Revision variable removes warning about dynamic version -->
<revision>${build.version}-SNAPSHOT</revision>
<!-- This allows to change between versions and snapshots. -->
<build.version>4.4.2</build.version>
<build.version>4.5.0</build.version>
<build.number>-LOCAL</build.number>
<!-- Sonar Cloud -->
<sonar.projectKey>BentoBoxWorld_Border</sonar.projectKey>
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/world/bentobox/border/BorderPladdon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package world.bentobox.border;


import world.bentobox.bentobox.api.addons.Addon;
import world.bentobox.bentobox.api.addons.Pladdon;


public class BorderPladdon extends Pladdon {

private Border addon;

@Override
public Addon getAddon() {
if (addon == null) {
addon = new Border();
}
return addon;
}

}
10 changes: 10 additions & 0 deletions src/main/java/world/bentobox/border/PerPlayerBorderProxy.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,14 @@ private BorderType getBorderType(User user) {
private BorderType getDefaultBorderType() {
return addon.getSettings().getType();
}

@Override
public void teleportPlayer(Player player) {
if (getBorderType(User.getInstance(player)) == BorderType.BARRIER) {
customBorder.teleportPlayer(player);
} else {
vanillaBorder.teleportPlayer(player);
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,10 @@ public default void refreshView(User user, Island island){
// Do nothing
}

/**
* Teleports player back within the island space they are in
* @param player player
*/
public void teleportPlayer(Player player);

}
20 changes: 18 additions & 2 deletions src/main/java/world/bentobox/border/listeners/PlayerListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityDismountEvent;
import org.bukkit.event.entity.EntityMountEvent;
import org.bukkit.event.player.PlayerJoinEvent;
Expand All @@ -32,12 +34,14 @@
import org.bukkit.util.RayTraceResult;
import org.bukkit.util.Vector;

import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.events.island.IslandProtectionRangeChangeEvent;
import world.bentobox.bentobox.api.flags.Flag;
import world.bentobox.bentobox.api.metadata.MetaDataValue;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.util.Util;
import world.bentobox.border.Border;
import world.bentobox.border.BorderType;
import world.bentobox.border.PerPlayerBorderProxy;
import world.bentobox.border.commands.IslandBorderCommand;

Expand Down Expand Up @@ -98,6 +102,20 @@ protected void processEvent(PlayerJoinEvent e) {
show.showBorder(e.getPlayer(), i)));
}

@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerDamage(EntityDamageEvent e) {
// Only deal with fall damage in the right world if the barrier is on
if (e.getCause() != DamageCause.FALL || addon.getSettings().getType() != BorderType.BARRIER
|| !(e.getEntity() instanceof Player p) || !isOn(p) || !addon.inGameWorld(e.getEntity().getWorld())) {
return;
}
Material type = p.getLocation().getBlock().getRelative(BlockFace.DOWN).getType();
if (type == Material.AIR) {
((BorderShower) show).teleportPlayer(p);
e.setCancelled(true);
}
}

@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerQuit(PlayerQuitEvent e) {
show.clearUser(User.getInstance(e.getPlayer()));
Expand Down Expand Up @@ -331,8 +349,6 @@ public void onVehicleMove(VehicleMoveEvent e) {
*/
@EventHandler(priority = EventPriority.NORMAL)
public void onProtectionRangeChange(IslandProtectionRangeChangeEvent e) {
// Get default game mode
GameMode gm = this.addon.getPlugin().getIWM().getDefaultGameMode(e.getIsland().getWorld());
// Hide and show again
e.getIsland().getPlayersOnIsland().forEach(player -> {
if (isOn(player)) {
Expand Down
19 changes: 14 additions & 5 deletions src/main/java/world/bentobox/border/listeners/ShowBarrier.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import com.google.common.base.Enums;

import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.metadata.MetaDataValue;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
Expand Down Expand Up @@ -123,13 +124,19 @@ private void showWalls(Player player, Location loc, int xMin, int xMax, int zMin

}

/**
* @param player player
* @param i
* @param j
* @param k
* @param max
*/
private void showPlayer(Player player, int i, int j, int k, boolean max) {
// Get if on or in border
if (addon.getSettings().isUseBarrierBlocks()
&& player.getLocation().getBlockX() == i
&& player.getLocation().getBlockZ() == k) {
teleportPlayer(player);
return;
}

Location l = new Location(player.getWorld(), i, j, k);
Expand All @@ -148,13 +155,15 @@ private void showPlayer(Player player, int i, int j, int k, boolean max) {
});
}

private void teleportPlayer(Player p) {
/**
* Teleport player back within the island space they are in
* @param p player
*/
public void teleportPlayer(Player p) {
addon.getIslands().getIslandAt(p.getLocation()).ifPresent(i -> {
Vector unitVector = i.getCenter().toVector().subtract(p.getLocation().toVector()).normalize()
.multiply(new Vector(1,0,1));
p.setVelocity(new Vector (0,0,0));
.multiply(new Vector(1, 0, 1));
// Get distance from border

Location to = p.getLocation().toVector().add(unitVector).toLocation(p.getWorld());
to.setPitch(p.getLocation().getPitch());
to.setYaw(p.getLocation().getYaw());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.WorldBorder;
import org.bukkit.World.Environment;
import org.bukkit.WorldBorder;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.util.Vector;

import world.bentobox.bentobox.api.metadata.MetaDataValue;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
import world.bentobox.bentobox.util.Util;
import world.bentobox.border.Border;

/**
Expand Down Expand Up @@ -49,4 +52,20 @@ public void hideBorder(User user) {
user.getPlayer().setWorldBorder(null);
}

/**
* Teleport player back within the island space they are in
* @param p player
*/
public void teleportPlayer(Player p) {
addon.getIslands().getIslandAt(p.getLocation()).ifPresent(i -> {
Vector unitVector = i.getCenter().toVector().subtract(p.getLocation().toVector()).normalize()
.multiply(new Vector(1, 0, 1));
// Get distance from border
Location to = p.getLocation().toVector().add(unitVector).toLocation(p.getWorld());
to.setPitch(p.getLocation().getPitch());
to.setYaw(p.getLocation().getYaw());
Util.teleportAsync(p, to, TeleportCause.PLUGIN);
});
}

}
9 changes: 9 additions & 0 deletions src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
name: BentoBox-Border
main: world.bentobox.border.BorderPladdon
version: ${project.version}${build.number}
api-version: "1.21"

authors: [tastybento]
contributors: ["The BentoBoxWorld Community"]
website: https://bentobox.world
description: ${project.description}