41 lines
1.3 KiB
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));
|
|
}
|
|
}
|
|
|
|
}
|