bentobox/src/main/java/world/bentobox/bentobox/listeners/flags/worldsettings/PetTeleportListener.java

41 lines
1.3 KiB
Java

package world.bentobox.bentobox.listeners.flags.worldsettings;
import org.bukkit.entity.Tameable;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityTeleportEvent;
import world.bentobox.bentobox.api.flags.FlagListener;
import world.bentobox.bentobox.lists.Flags;
/**
* Prevents pets from teleporting to islands unless
* the owner is a member of the island.
* @author tastybento
* @since 1.16.0
*/
public class PetTeleportListener extends FlagListener {
/**
* Prevents pets teleporting
* @param e - event
*/
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPetTeleport(final EntityTeleportEvent e) {
if (e.getTo() == null
|| !getIWM().inWorld(e.getFrom())
|| !Flags.PETS_STAY_AT_HOME.isSetForWorld(e.getFrom().getWorld())
|| !(e.getEntity() instanceof Tameable t)
) return;
if (t.isTamed() && t.getOwner() != null) {
// Get where the pet is going
e.setCancelled(getIslands().getProtectedIslandAt(e.getTo())
// Not home island
.map(i -> !i.inTeam(t.getOwner().getUniqueId()))
// Not any island
.orElse(true));
}
}
}