Search in sources :

Example 6 with PlotFlag

use of com.plotsquared.core.plot.flag.PlotFlag in project PlotSquared by IntellectualSites.

the class PlotListener method plotEntry.

public boolean plotEntry(final PlotPlayer<?> player, final Plot plot) {
    if (plot.isDenied(player.getUUID()) && !Permissions.hasPermission(player, "plots.admin.entry.denied")) {
        player.sendMessage(TranslatableCaption.of("deny.no_enter"), Template.of("plot", plot.toString()));
        return false;
    }
    try (final MetaDataAccess<Plot> lastPlot = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) {
        Plot last = lastPlot.get().orElse(null);
        if ((last != null) && !last.getId().equals(plot.getId())) {
            plotExit(player, last);
        }
        if (ExpireManager.IMP != null) {
            ExpireManager.IMP.handleEntry(player, plot);
        }
        lastPlot.set(plot);
    }
    this.eventDispatcher.callEntry(player, plot);
    if (plot.hasOwner()) {
        // This will inherit values from PlotArea
        final TitlesFlag.TitlesFlagValue titlesFlag = plot.getFlag(TitlesFlag.class);
        final boolean titles;
        if (titlesFlag == TitlesFlag.TitlesFlagValue.NONE) {
            titles = Settings.Titles.DISPLAY_TITLES;
        } else {
            titles = titlesFlag == TitlesFlag.TitlesFlagValue.TRUE;
        }
        String greeting = plot.getFlag(GreetingFlag.class);
        if (!greeting.isEmpty()) {
            if (!Settings.Chat.NOTIFICATION_AS_ACTIONBAR) {
                plot.format(StaticCaption.of(greeting), player, false).thenAcceptAsync(player::sendMessage);
            } else {
                plot.format(StaticCaption.of(greeting), player, false).thenAcceptAsync(player::sendActionBar);
            }
        }
        if (plot.getFlag(NotifyEnterFlag.class)) {
            if (!Permissions.hasPermission(player, "plots.flag.notify-enter.bypass")) {
                for (UUID uuid : plot.getOwners()) {
                    final PlotPlayer<?> owner = PlotSquared.platform().playerManager().getPlayerIfExists(uuid);
                    if (owner != null && !owner.getUUID().equals(player.getUUID()) && owner.canSee(player)) {
                        Caption caption = TranslatableCaption.of("notification.notify_enter");
                        notifyPlotOwner(player, plot, owner, caption);
                    }
                }
            }
        }
        final FlyFlag.FlyStatus flyStatus = plot.getFlag(FlyFlag.class);
        if (!Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_FLIGHT)) {
            if (flyStatus != FlyFlag.FlyStatus.DEFAULT) {
                boolean flight = player.getFlight();
                GameMode gamemode = player.getGameMode();
                if (flight != (gamemode == GameModes.CREATIVE || gamemode == GameModes.SPECTATOR)) {
                    try (final MetaDataAccess<Boolean> metaDataAccess = player.accessPersistentMetaData(PlayerMetaDataKeys.PERSISTENT_FLIGHT)) {
                        metaDataAccess.set(player.getFlight());
                    }
                }
                player.setFlight(flyStatus == FlyFlag.FlyStatus.ENABLED);
            }
        }
        final GameMode gameMode = plot.getFlag(GamemodeFlag.class);
        if (!gameMode.equals(GamemodeFlag.DEFAULT)) {
            if (player.getGameMode() != gameMode) {
                if (!Permissions.hasPermission(player, "plots.gamemode.bypass")) {
                    player.setGameMode(gameMode);
                } else {
                    player.sendMessage(TranslatableCaption.of("gamemode.gamemode_was_bypassed"), Template.of("gamemode", String.valueOf(gameMode)), Template.of("plot", plot.getId().toString()));
                }
            }
        }
        final GameMode guestGameMode = plot.getFlag(GuestGamemodeFlag.class);
        if (!guestGameMode.equals(GamemodeFlag.DEFAULT)) {
            if (player.getGameMode() != guestGameMode && !plot.isAdded(player.getUUID())) {
                if (!Permissions.hasPermission(player, "plots.gamemode.bypass")) {
                    player.setGameMode(guestGameMode);
                } else {
                    player.sendMessage(TranslatableCaption.of("gamemode.gamemode_was_bypassed"), Template.of("gamemode", String.valueOf(guestGameMode)), Template.of("plot", plot.getId().toString()));
                }
            }
        }
        long time = plot.getFlag(TimeFlag.class);
        if (time != TimeFlag.TIME_DISABLED.getValue() && !player.getAttribute("disabletime")) {
            try {
                player.setTime(time);
            } catch (Exception ignored) {
                PlotFlag<?, ?> plotFlag = GlobalFlagContainer.getInstance().getFlag(TimeFlag.class);
                PlotFlagRemoveEvent event = this.eventDispatcher.callFlagRemove(plotFlag, plot);
                if (event.getEventResult() != Result.DENY) {
                    plot.removeFlag(event.getFlag());
                }
            }
        }
        player.setWeather(plot.getFlag(WeatherFlag.class));
        ItemType musicFlag = plot.getFlag(MusicFlag.class);
        try (final MetaDataAccess<Location> musicMeta = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_MUSIC)) {
            if (musicFlag != null) {
                final String rawId = musicFlag.getId();
                if (rawId.contains("disc") || musicFlag == ItemTypes.AIR) {
                    Location location = player.getLocation();
                    Location lastLocation = musicMeta.get().orElse(null);
                    if (lastLocation != null) {
                        plot.getCenter(center -> player.playMusic(center.add(0, Short.MAX_VALUE, 0), musicFlag));
                        if (musicFlag == ItemTypes.AIR) {
                            musicMeta.remove();
                        }
                    }
                    if (musicFlag != ItemTypes.AIR) {
                        try {
                            musicMeta.set(location);
                            plot.getCenter(center -> player.playMusic(center.add(0, Short.MAX_VALUE, 0), musicFlag));
                        } catch (Exception ignored) {
                        }
                    }
                }
            } else {
                musicMeta.get().ifPresent(lastLoc -> {
                    musicMeta.remove();
                    player.playMusic(lastLoc, ItemTypes.AIR);
                });
            }
        }
        CommentManager.sendTitle(player, plot);
        if (titles && !player.getAttribute("disabletitles")) {
            String title;
            String subtitle;
            PlotTitle titleFlag = plot.getFlag(PlotTitleFlag.class);
            boolean fromFlag;
            if (titleFlag.title() != null && titleFlag.subtitle() != null) {
                title = titleFlag.title();
                subtitle = titleFlag.subtitle();
                fromFlag = true;
            } else {
                title = "";
                subtitle = "";
                fromFlag = false;
            }
            if (fromFlag || !plot.getFlag(ServerPlotFlag.class) || Settings.Titles.DISPLAY_DEFAULT_ON_SERVER_PLOT) {
                TaskManager.runTaskLaterAsync(() -> {
                    Plot lastPlot;
                    try (final MetaDataAccess<Plot> lastPlotAccess = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) {
                        lastPlot = lastPlotAccess.get().orElse(null);
                    }
                    if ((lastPlot != null) && plot.getId().equals(lastPlot.getId()) && plot.hasOwner()) {
                        final UUID plotOwner = plot.getOwnerAbs();
                        String owner = PlayerManager.resolveName(plotOwner, true).getComponent(player);
                        Caption header = fromFlag ? StaticCaption.of(title) : TranslatableCaption.of("titles" + ".title_entered_plot");
                        Caption subHeader = fromFlag ? StaticCaption.of(subtitle) : TranslatableCaption.of("titles" + ".title_entered_plot_sub");
                        Template plotTemplate = Template.of("plot", lastPlot.getId().toString());
                        Template worldTemplate = Template.of("world", player.getLocation().getWorldName());
                        Template ownerTemplate = Template.of("owner", owner);
                        Template aliasTemplate = Template.of("alias", plot.getAlias());
                        final Consumer<String> userConsumer = user -> {
                            if (Settings.Titles.TITLES_AS_ACTIONBAR) {
                                player.sendActionBar(header, aliasTemplate, plotTemplate, worldTemplate, ownerTemplate);
                            } else {
                                player.sendTitle(header, subHeader, aliasTemplate, plotTemplate, worldTemplate, ownerTemplate);
                            }
                        };
                        UUID uuid = plot.getOwner();
                        if (uuid == null) {
                            userConsumer.accept("Unknown");
                        } else if (uuid.equals(DBFunc.SERVER)) {
                            userConsumer.accept(MINI_MESSAGE.stripTokens(TranslatableCaption.of("info.server").getComponent(player)));
                        } else {
                            PlotSquared.get().getImpromptuUUIDPipeline().getSingle(plot.getOwner(), (user, throwable) -> {
                                if (throwable != null) {
                                    userConsumer.accept("Unknown");
                                } else {
                                    userConsumer.accept(user);
                                }
                            });
                        }
                    }
                }, TaskTime.seconds(1L));
            }
        }
        TimedFlag.Timed<Integer> feed = plot.getFlag(FeedFlag.class);
        if (feed.getInterval() != 0 && feed.getValue() != 0) {
            feedRunnable.put(player.getUUID(), new Interval(feed.getInterval(), feed.getValue(), 20));
        }
        TimedFlag.Timed<Integer> heal = plot.getFlag(HealFlag.class);
        if (heal.getInterval() != 0 && heal.getValue() != 0) {
            healRunnable.put(player.getUUID(), new Interval(heal.getInterval(), heal.getValue(), 20));
        }
        return true;
    }
    return true;
}
Also used : NotifyEnterFlag(com.plotsquared.core.plot.flag.implementations.NotifyEnterFlag) FeedFlag(com.plotsquared.core.plot.flag.implementations.FeedFlag) Permission(com.plotsquared.core.permissions.Permission) StaticCaption(com.plotsquared.core.configuration.caption.StaticCaption) TimedFlag(com.plotsquared.core.plot.flag.types.TimedFlag) Map(java.util.Map) DenyExitFlag(com.plotsquared.core.plot.flag.implementations.DenyExitFlag) Template(net.kyori.adventure.text.minimessage.Template) EventDispatcher(com.plotsquared.core.util.EventDispatcher) FlyFlag(com.plotsquared.core.plot.flag.implementations.FlyFlag) Caption(com.plotsquared.core.configuration.caption.Caption) DBFunc(com.plotsquared.core.database.DBFunc) ServerPlotFlag(com.plotsquared.core.plot.flag.implementations.ServerPlotFlag) MiniMessage(net.kyori.adventure.text.minimessage.MiniMessage) TimeFlag(com.plotsquared.core.plot.flag.implementations.TimeFlag) UUID(java.util.UUID) Result(com.plotsquared.core.events.Result) HealFlag(com.plotsquared.core.plot.flag.implementations.HealFlag) GameModes(com.sk89q.worldedit.world.gamemode.GameModes) TranslatableCaption(com.plotsquared.core.configuration.caption.TranslatableCaption) GreetingFlag(com.plotsquared.core.plot.flag.implementations.GreetingFlag) GamemodeFlag(com.plotsquared.core.plot.flag.implementations.GamemodeFlag) Optional(java.util.Optional) PlayerMetaDataKeys(com.plotsquared.core.player.PlayerMetaDataKeys) FarewellFlag(com.plotsquared.core.plot.flag.implementations.FarewellFlag) PlotTitleFlag(com.plotsquared.core.plot.flag.implementations.PlotTitleFlag) WeatherFlag(com.plotsquared.core.plot.flag.implementations.WeatherFlag) TaskTime(com.plotsquared.core.util.task.TaskTime) MetaDataAccess(com.plotsquared.core.player.MetaDataAccess) HashMap(java.util.HashMap) PlotFlag(com.plotsquared.core.plot.flag.PlotFlag) PlotWeather(com.plotsquared.core.plot.PlotWeather) CommentManager(com.plotsquared.core.plot.comment.CommentManager) ExpireManager(com.plotsquared.core.plot.expiration.ExpireManager) GuestGamemodeFlag(com.plotsquared.core.plot.flag.implementations.GuestGamemodeFlag) Nullable(org.checkerframework.checker.nullness.qual.Nullable) Location(com.plotsquared.core.location.Location) GlobalFlagContainer(com.plotsquared.core.plot.flag.GlobalFlagContainer) TitlesFlag(com.plotsquared.core.plot.flag.implementations.TitlesFlag) PlotFlagRemoveEvent(com.plotsquared.core.events.PlotFlagRemoveEvent) Permissions(com.plotsquared.core.util.Permissions) Plot(com.plotsquared.core.plot.Plot) Iterator(java.util.Iterator) TaskManager(com.plotsquared.core.util.task.TaskManager) ItemTypes(com.sk89q.worldedit.world.item.ItemTypes) GameMode(com.sk89q.worldedit.world.gamemode.GameMode) Consumer(java.util.function.Consumer) PlotSquared(com.plotsquared.core.PlotSquared) PlayerManager(com.plotsquared.core.util.PlayerManager) PlotPlayer(com.plotsquared.core.player.PlotPlayer) NotifyLeaveFlag(com.plotsquared.core.plot.flag.implementations.NotifyLeaveFlag) PlotTitle(com.plotsquared.core.plot.PlotTitle) Settings(com.plotsquared.core.configuration.Settings) PlotArea(com.plotsquared.core.plot.PlotArea) ItemType(com.sk89q.worldedit.world.item.ItemType) MusicFlag(com.plotsquared.core.plot.flag.implementations.MusicFlag) ItemType(com.sk89q.worldedit.world.item.ItemType) Template(net.kyori.adventure.text.minimessage.Template) WeatherFlag(com.plotsquared.core.plot.flag.implementations.WeatherFlag) FlyFlag(com.plotsquared.core.plot.flag.implementations.FlyFlag) UUID(java.util.UUID) PlotFlagRemoveEvent(com.plotsquared.core.events.PlotFlagRemoveEvent) ServerPlotFlag(com.plotsquared.core.plot.flag.implementations.ServerPlotFlag) PlotFlag(com.plotsquared.core.plot.flag.PlotFlag) TitlesFlag(com.plotsquared.core.plot.flag.implementations.TitlesFlag) Plot(com.plotsquared.core.plot.Plot) StaticCaption(com.plotsquared.core.configuration.caption.StaticCaption) Caption(com.plotsquared.core.configuration.caption.Caption) TranslatableCaption(com.plotsquared.core.configuration.caption.TranslatableCaption) PlotTitle(com.plotsquared.core.plot.PlotTitle) ServerPlotFlag(com.plotsquared.core.plot.flag.implementations.ServerPlotFlag) TimedFlag(com.plotsquared.core.plot.flag.types.TimedFlag) GameMode(com.sk89q.worldedit.world.gamemode.GameMode) TimeFlag(com.plotsquared.core.plot.flag.implementations.TimeFlag) Location(com.plotsquared.core.location.Location)

Aggregations

PlotFlag (com.plotsquared.core.plot.flag.PlotFlag)6 Location (com.plotsquared.core.location.Location)4 Plot (com.plotsquared.core.plot.Plot)4 TranslatableCaption (com.plotsquared.core.configuration.caption.TranslatableCaption)3 PlotFlagRemoveEvent (com.plotsquared.core.events.PlotFlagRemoveEvent)3 UUID (java.util.UUID)3 CompletableFuture (java.util.concurrent.CompletableFuture)3 Settings (com.plotsquared.core.configuration.Settings)2 Caption (com.plotsquared.core.configuration.caption.Caption)2 StaticCaption (com.plotsquared.core.configuration.caption.StaticCaption)2 Result (com.plotsquared.core.events.Result)2 PlotPlayer (com.plotsquared.core.player.PlotPlayer)2 MusicFlag (com.plotsquared.core.plot.flag.implementations.MusicFlag)2 ItemType (com.sk89q.worldedit.world.item.ItemType)2 HashMap (java.util.HashMap)2 Template (net.kyori.adventure.text.minimessage.Template)2 Inject (com.google.inject.Inject)1 PlotSquared (com.plotsquared.core.PlotSquared)1 BackupManager (com.plotsquared.core.backup.BackupManager)1 DBFunc (com.plotsquared.core.database.DBFunc)1