Skip to content

Commit

Permalink
Implementer les conditions du portalteleportevent
Browse files Browse the repository at this point in the history
L'utilisation de ses portails fonctionnent seulement sur paper et ses forks SAUF Folia
  • Loading branch information
Euphillya committed Jan 31, 2024
1 parent 975f2b2 commit 94659ed
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 24 deletions.
4 changes: 3 additions & 1 deletion .idea/sonarlint/issuestore/index.pb

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion .idea/sonarlint/securityhotspotstore/index.pb

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ plugins {
}

group = "fr.euphyllia";
version = "1.0-RC2";
version = "1.0-RC3-SNAPSHOT";
description = "Plugin Skyblock pour Folia / PaperMC";

val paperRepo = "https://repo.papermc.io/repository/maven-public/";
Expand Down
6 changes: 2 additions & 4 deletions plugin/src/main/java/fr/euphyllia/skyllia/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@
import fr.euphyllia.skyllia.listeners.bukkitevents.BlockEvent;
import fr.euphyllia.skyllia.listeners.bukkitevents.PortailAlternativeFoliaEvent;
import fr.euphyllia.skyllia.listeners.bukkitevents.entity.DamageEvent;
import fr.euphyllia.skyllia.listeners.bukkitevents.player.InteractEvent;
import fr.euphyllia.skyllia.listeners.bukkitevents.player.InventoryEvent;
import fr.euphyllia.skyllia.listeners.bukkitevents.player.JoinEvent;
import fr.euphyllia.skyllia.listeners.bukkitevents.player.PlayerEvent;
import fr.euphyllia.skyllia.listeners.bukkitevents.player.*;
import fr.euphyllia.skyllia.listeners.skyblockevents.SkyblockEvent;
import fr.euphyllia.skyllia.managers.Managers;
import org.apache.logging.log4j.Level;
Expand Down Expand Up @@ -115,6 +112,7 @@ private void loadListener() {
pluginManager.registerEvents(new PlayerEvent(this.interneAPI), this);
pluginManager.registerEvents(new DamageEvent(this.interneAPI), this);
pluginManager.registerEvents(new InteractEvent(this.interneAPI), this);
pluginManager.registerEvents(new TeleportEvent(this.interneAPI), this); // Todo Don't work with folia 1.19.4-1.20.2
if (this.interneAPI.isFolia()) {
pluginManager.registerEvents(new PortailAlternativeFoliaEvent(this.interneAPI), this);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package fr.euphyllia.skyllia.listeners;

import fr.euphyllia.skyllia.api.configuration.WorldConfig;
import fr.euphyllia.skyllia.api.event.PlayerPrepareChangeWorldSkyblockEvent;
import fr.euphyllia.skyllia.api.skyblock.Island;
import fr.euphyllia.skyllia.api.skyblock.Players;
import fr.euphyllia.skyllia.api.skyblock.model.PermissionRoleIsland;
Expand All @@ -12,6 +14,7 @@
import fr.euphyllia.skyllia.managers.skyblock.PermissionManager;
import fr.euphyllia.skyllia.utils.RegionUtils;
import fr.euphyllia.skyllia.utils.WorldUtils;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -56,4 +59,14 @@ public class ListenersUtils {
}
return island;
}


public static void callPlayerPrepareChangeWorldSkyblockEvent(Player player, PlayerPrepareChangeWorldSkyblockEvent.PortalType portalType, String worldName) {
if (Boolean.FALSE.equals(WorldUtils.isWorldSkyblock(worldName))) {
return;
}
WorldConfig worldConfig = WorldUtils.getWorldConfig(worldName);
if (worldConfig == null) return;
Bukkit.getPluginManager().callEvent(new PlayerPrepareChangeWorldSkyblockEvent(player, worldConfig, portalType));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import fr.euphyllia.skyllia.api.InterneAPI;
import fr.euphyllia.skyllia.api.configuration.WorldConfig;
import fr.euphyllia.skyllia.api.event.PlayerPrepareChangeWorldSkyblockEvent;
import fr.euphyllia.skyllia.listeners.ListenersUtils;
import fr.euphyllia.skyllia.utils.WorldUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Expand Down Expand Up @@ -64,21 +65,12 @@ public void onPlayerTouchPortal(final PlayerMoveEvent event) {
// Obtenez le bloc sur lequel le joueur se tient
Executors.newSingleThreadScheduledExecutor().execute(() -> {
if (blockType == Material.NETHER_PORTAL) {
callPlayerPrepareChangeWorldSkyblockEvent(player, PlayerPrepareChangeWorldSkyblockEvent.PortalType.NETHER, world.getName());
ListenersUtils.callPlayerPrepareChangeWorldSkyblockEvent(player, PlayerPrepareChangeWorldSkyblockEvent.PortalType.NETHER, world.getName());
}
if (blockType == Material.END_PORTAL_FRAME) {
callPlayerPrepareChangeWorldSkyblockEvent(player, PlayerPrepareChangeWorldSkyblockEvent.PortalType.END, world.getName());
ListenersUtils.callPlayerPrepareChangeWorldSkyblockEvent(player, PlayerPrepareChangeWorldSkyblockEvent.PortalType.END, world.getName());
}
});

}

private void callPlayerPrepareChangeWorldSkyblockEvent(Player player, PlayerPrepareChangeWorldSkyblockEvent.PortalType portalType, String worldName) {
if (Boolean.FALSE.equals(WorldUtils.isWorldSkyblock(worldName))) {
return;
}
WorldConfig worldConfig = WorldUtils.getWorldConfig(worldName);
if (worldConfig == null) return;
Bukkit.getPluginManager().callEvent(new PlayerPrepareChangeWorldSkyblockEvent(player, worldConfig, portalType));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,4 @@ public void onPickUpItemDropped(final EntityPickupItemEvent event) {
}
}

// Todo a dev sur paper
public void onPlayerUsePortal(final PlayerPortalEvent event) {
if (event.isCancelled()) return;
event.setCanCreatePortal(false);
ListenersUtils.checkPermission(event.getPlayer().getLocation(), event.getPlayer(), PermissionsIsland.USE_NETHER_PORTAL, event);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package fr.euphyllia.skyllia.listeners.bukkitevents.player;

import fr.euphyllia.skyllia.api.InterneAPI;
import fr.euphyllia.skyllia.api.event.PlayerPrepareChangeWorldSkyblockEvent;
import fr.euphyllia.skyllia.api.skyblock.Island;
import fr.euphyllia.skyllia.api.skyblock.model.permissions.PermissionsIsland;
import fr.euphyllia.skyllia.listeners.ListenersUtils;
import fr.euphyllia.skyllia.managers.skyblock.SkyblockManager;
import fr.euphyllia.skyllia.utils.PlayerUtils;
import fr.euphyllia.skyllia.utils.RegionUtils;
import fr.euphyllia.skyllia.utils.WorldUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerPortalEvent;
import org.bukkit.event.player.PlayerTeleportEvent;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

public class TeleportEvent implements Listener {
private final InterneAPI api;
private final Logger logger = LogManager.getLogger(TeleportEvent.class);

public TeleportEvent(InterneAPI interneAPI) {
this.api = interneAPI;
}

@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerTeleportOnIsland(final PlayerTeleportEvent event) {
if (event.isCancelled()) {
return;
}
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
try {
executor.execute(() -> {
Location destination = event.getTo();
PlayerTeleportEvent.TeleportCause teleportCause = event.getCause();
if (teleportCause.equals(PlayerTeleportEvent.TeleportCause.END_PORTAL)) {
ListenersUtils.callPlayerPrepareChangeWorldSkyblockEvent(event.getPlayer(),
PlayerPrepareChangeWorldSkyblockEvent.PortalType.END, destination.getWorld().getName());
} else if (teleportCause.equals(PlayerTeleportEvent.TeleportCause.NETHER_PORTAL)) {
ListenersUtils.callPlayerPrepareChangeWorldSkyblockEvent(event.getPlayer(),
PlayerPrepareChangeWorldSkyblockEvent.PortalType.NETHER, destination.getWorld().getName());
}
});
} finally {
executor.shutdown();
}
}

@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerUsePortal(final PlayerPortalEvent event) {
if (event.isCancelled()) return;
event.setCanCreatePortal(false);
PlayerTeleportEvent.TeleportCause teleportCause = event.getCause();
if (teleportCause.equals(PlayerTeleportEvent.TeleportCause.END_PORTAL)) {
ListenersUtils.checkPermission(event.getPlayer().getLocation(), event.getPlayer(), PermissionsIsland.USE_END_PORTAL, event);
} else if (teleportCause.equals(PlayerTeleportEvent.TeleportCause.NETHER_PORTAL)) {
ListenersUtils.checkPermission(event.getPlayer().getLocation(), event.getPlayer(), PermissionsIsland.USE_NETHER_PORTAL, event);
}

}
}

0 comments on commit 94659ed

Please sign in to comment.