diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..242f7f8 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,106 @@ +name: Build & Release + +on: + push: + branches: + - master + +permissions: + contents: write + +jobs: + build: + name: Build JAR + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Java 21 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: '21' + cache: maven + + - name: Build with Maven + run: mvn clean package + + - name: Prepare release JAR + run: | + mkdir -p release + VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) + SHADED_JAR=$(find target -maxdepth 1 -type f -name "*.jar" \ + ! -name "original-*" \ + ! -name "*sources.jar" \ + ! -name "*javadoc.jar" \ + | head -n 1) + + cp "$SHADED_JAR" "release/OneWayElytra-${VERSION}.jar" + echo "VERSION=$VERSION" >> $GITHUB_ENV + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: OneWayElytra-Artifact + path: release/ + + release: + name: Create GitHub Release + runs-on: ubuntu-latest + needs: build + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: OneWayElytra-Artifact + path: release + + - name: Read changelog + run: | + if [ -f changelog.md ]; then + { + echo "CHANGELOG<> $GITHUB_ENV + else + { + echo "CHANGELOG<> $GITHUB_ENV + fi + + - name: Read version from pom.xml + run: | + VERSION=$(grep -m1 '' pom.xml | sed -E 's/.*(.*)<\/version>.*/\1/') + echo "VERSION=$VERSION" >> $GITHUB_ENV + + - name: Delete existing release and tag if present + continue-on-error: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release delete "${{ env.VERSION }}" --yes --cleanup-tag + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + name: Release ${{ env.VERSION }} + tag_name: ${{ env.VERSION }} + target_commitish: master + body: | + Automated release notes for version ${{ env.VERSION }} + + ## Changelog + ${{ env.CHANGELOG }} + files: | + release/*.jar + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/changelog.md b/changelog.md deleted file mode 100644 index 76019e1..0000000 --- a/changelog.md +++ /dev/null @@ -1,6 +0,0 @@ -## Version: 1.1.2 - -- Added changelog-system -- Fixed an error occurring when worldguard is not installed -- Changed how the worldguard hook is working -- added an indicator, showing if worldguard is installed \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2dbe470..ab04224 100644 --- a/pom.xml +++ b/pom.xml @@ -81,13 +81,13 @@ org.spigotmc spigot-api - 26.1.2-R0.1-SNAPSHOT + 26.1-R0.1-SNAPSHOT provided com.sk89q.worldguard worldguard-bukkit - 7.0.16 + 7.0.15 provided diff --git a/src/main/java/de/jugglegaming/oneWayElytra/OneWayElytra.java b/src/main/java/de/jugglegaming/oneWayElytra/OneWayElytra.java index f30b0fb..28d8032 100644 --- a/src/main/java/de/jugglegaming/oneWayElytra/OneWayElytra.java +++ b/src/main/java/de/jugglegaming/oneWayElytra/OneWayElytra.java @@ -6,7 +6,6 @@ import de.jugglegaming.oneWayElytra.managers.RadiusManager; import de.jugglegaming.oneWayElytra.utils.Tools; import de.jugglegaming.oneWayElytra.utils.WorldguardFlags; -import de.jugglegaming.oneWayElytra.utils.WorldguardHook; import de.jugglegaming.oneWayElytra.utils.WorldguardUtils; import org.bukkit.Bukkit; import org.bukkit.command.ConsoleCommandSender; @@ -30,9 +29,6 @@ public final class OneWayElytra extends JavaPlugin { private OneWayElytraListener oneWayElytraListener; private WorldguardFlags wgFlag; - private WorldguardHook worldguardHook; - - private boolean isWorldguardInstalled; @Override public void onLoad() { @@ -55,12 +51,7 @@ public void onEnable() { ccs.sendMessage(prefix + "Listeners successfully registered!"); registerCommands(); ccs.sendMessage(prefix + "Commands successfully registered!"); - isWorldguardInstalled = WorldguardUtils.isWorldGuardInstalled(); - if(isWorldguardInstalled) { - ccs.sendMessage(prefix + "WorldGuard: connected"); - } else { - ccs.sendMessage(prefix + "WorldGuard: not found"); - } + ccs.sendMessage(prefix + "*~*~*~*~*~*~*~* <> *~*~*~*~*~*~*~*"); ccs.sendMessage(prefix + "Plugin successfully loaded!"); ccs.sendMessage(prefix + "Version: " + getDescription().getVersion()); @@ -88,7 +79,7 @@ public FileManager getFileManager() { @EventHandler public void registerListener() { - oneWayElytraListener = new OneWayElytraListener(this, worldguardHook); + oneWayElytraListener = new OneWayElytraListener(this); pluginManager.registerEvents(oneWayElytraListener, this); } @@ -102,7 +93,6 @@ public void connectToWorldguard(){ Plugin worldGuard = pluginManager.getPlugin("WorldGuard"); if(WorldguardUtils.isWorldGuardInstalled()){ WorldguardFlags.load(); - worldguardHook = new WorldguardHook(); ccs.sendMessage("[OneWayElytra] Successfully connected to WorldGuard!"); } else { ccs.sendMessage("[OneWayElytra] Worldguard not found."); diff --git a/src/main/java/de/jugglegaming/oneWayElytra/listeners/OneWayElytraListener.java b/src/main/java/de/jugglegaming/oneWayElytra/listeners/OneWayElytraListener.java index 3008eb3..f86a248 100644 --- a/src/main/java/de/jugglegaming/oneWayElytra/listeners/OneWayElytraListener.java +++ b/src/main/java/de/jugglegaming/oneWayElytra/listeners/OneWayElytraListener.java @@ -1,8 +1,16 @@ package de.jugglegaming.oneWayElytra.listeners; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.regions.RegionContainer; +import com.sk89q.worldguard.protection.regions.RegionQuery; import de.jugglegaming.oneWayElytra.OneWayElytra; import de.jugglegaming.oneWayElytra.utils.ActionBar; -import de.jugglegaming.oneWayElytra.utils.WorldguardHook; +import de.jugglegaming.oneWayElytra.utils.WorldguardFlags; +import de.jugglegaming.oneWayElytra.utils.WorldguardUtils; import org.bukkit.*; import org.bukkit.block.BlockFace; import org.bukkit.entity.EntityType; @@ -27,69 +35,46 @@ public class OneWayElytraListener implements Listener { private List positions = new ArrayList<>(); private OneWayElytra oneWayElytra; - private WorldguardHook worldguardHook; - public OneWayElytraListener(OneWayElytra oneWayElytra, WorldguardHook worldguardHook) { + public OneWayElytraListener(OneWayElytra oneWayElytra){ this.oneWayElytra = oneWayElytra; - this.worldguardHook = worldguardHook; this.radius = oneWayElytra.getFileManager().getConfig().getInt("radius"); Bukkit.getScheduler().runTaskTimer(oneWayElytra, () -> { for (Player player : Bukkit.getOnlinePlayers()) { + if(WorldguardUtils.isWorldGuardInstalled()){ - boolean wgAllowed = false; + com.sk89q.worldedit.util.Location loc = BukkitAdapter.adapt(player.getLocation()); + RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); + RegionQuery query = container.createQuery(); + ApplicableRegionSet set = query.getApplicableRegions(loc); + LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); - if (worldguardHook != null) { - wgAllowed = worldguardHook.canFly(player); - } - - boolean inRadiusArea = - oneWayElytra.getRadiusManager() - .isInAnyArea(player.getLocation()); - - if ((wgAllowed || inRadiusArea) - && !playersFlying.contains(player) - && player.isOnGround()) { + boolean wgAllowed = set.testState(localPlayer, WorldguardFlags.ONEWAYELYTRA); + boolean inRadiusArea = oneWayElytra.getRadiusManager().isInAnyArea(player.getLocation()); - if (player.getGameMode() == GameMode.SURVIVAL - || (player.getGameMode() == GameMode.ADVENTURE - && oneWayElytra.getFileManager() - .getConfig() - .getBoolean("adventure"))) { - - player.setAllowFlight(true); + if ((wgAllowed || inRadiusArea) && !playersFlying.contains(player) && player.isOnGround()) { + if(player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE && oneWayElytra.getFileManager().getConfig().getBoolean("adventure")) { + player.setAllowFlight(true); + } } - } - if (!(wgAllowed || inRadiusArea) && !playersFlying.contains(player)) { - player.setAllowFlight(false); } - if (player.getGameMode() == GameMode.SURVIVAL - || player.getGameMode() == GameMode.ADVENTURE) { - + if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { if (playersFlying.contains(player) - && !player.getLocation() - .getBlock() - .getRelative(BlockFace.DOWN) - .getType() - .isAir()) { + && !player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType().isAir()) { player.setGliding(false); playersBoosted.remove(player); - Bukkit.getScheduler().runTaskLater( - oneWayElytra, - () -> { - playersFlying.remove(player); - player.setAllowFlight(false); - }, - 5 - ); + Bukkit.getScheduler().runTaskLater(oneWayElytra, () -> { + playersFlying.remove(player); + player.setAllowFlight(false); + }, 5); } } } - }, 0, 3); } @@ -114,17 +99,21 @@ public void onToggleFlight(PlayerToggleFlightEvent event){ public boolean isAllowedToFly(Player player) { boolean wgAllowed = false; - if (worldguardHook != null) { - wgAllowed = worldguardHook.canFly(player); + if (WorldguardUtils.isWorldGuardInstalled()) { + com.sk89q.worldedit.util.Location loc = BukkitAdapter.adapt(player.getLocation()); + RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); + RegionQuery query = container.createQuery(); + ApplicableRegionSet set = query.getApplicableRegions(loc); + LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); + + wgAllowed = set.testState(localPlayer, WorldguardFlags.ONEWAYELYTRA); } - boolean inRadiusArea = - oneWayElytra.getRadiusManager() - .isInAnyArea(player.getLocation()); + boolean inRadiusArea = oneWayElytra.getRadiusManager().isInAnyArea(player.getLocation()); + return wgAllowed || inRadiusArea; } - @EventHandler public void onEntityDamage(EntityDamageEvent event){ if(event.getEntityType() == EntityType.PLAYER){ diff --git a/src/main/java/de/jugglegaming/oneWayElytra/utils/WorldguardHook.java b/src/main/java/de/jugglegaming/oneWayElytra/utils/WorldguardHook.java deleted file mode 100644 index 269f0f2..0000000 --- a/src/main/java/de/jugglegaming/oneWayElytra/utils/WorldguardHook.java +++ /dev/null @@ -1,38 +0,0 @@ -package de.jugglegaming.oneWayElytra.utils; - -import com.sk89q.worldedit.bukkit.BukkitAdapter; -import com.sk89q.worldguard.LocalPlayer; -import com.sk89q.worldguard.WorldGuard; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.regions.RegionContainer; -import com.sk89q.worldguard.protection.regions.RegionQuery; -import org.bukkit.entity.Player; - -public class WorldguardHook { - - public boolean canFly(Player player) { - - com.sk89q.worldedit.util.Location loc = - BukkitAdapter.adapt(player.getLocation()); - - RegionContainer container = - WorldGuard.getInstance() - .getPlatform() - .getRegionContainer(); - - RegionQuery query = container.createQuery(); - - ApplicableRegionSet set = - query.getApplicableRegions(loc); - - LocalPlayer localPlayer = - WorldGuardPlugin.inst().wrapPlayer(player); - - return set.testState( - localPlayer, - WorldguardFlags.ONEWAYELYTRA - ); - } - -}