mirror of
https://github.com/AtlasMediaGroup/TotalFreedomMod.git
synced 2025-07-06 22:13:05 +00:00
Part 1 / 2
Only thing left is to fix all the code issues from moving out the discord and shop implementations.
This commit is contained in:
@ -0,0 +1,177 @@
|
||||
package me.totalfreedom.totalfreedommod.bridge;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import me.totalfreedom.bukkittelnet.BukkitTelnet;
|
||||
import me.totalfreedom.bukkittelnet.api.TelnetCommandEvent;
|
||||
import me.totalfreedom.bukkittelnet.api.TelnetPreLoginEvent;
|
||||
import me.totalfreedom.bukkittelnet.api.TelnetRequestDataTagsEvent;
|
||||
import me.totalfreedom.bukkittelnet.session.ClientSession;
|
||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public class BukkitTelnetBridge extends FreedomService
|
||||
{
|
||||
|
||||
private BukkitTelnet bukkitTelnetPlugin = null;
|
||||
|
||||
@Override
|
||||
public void onStart()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop()
|
||||
{
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL)
|
||||
public void onTelnetPreLogin(TelnetPreLoginEvent event)
|
||||
{
|
||||
|
||||
final String ip = event.getIp();
|
||||
if (ip == null || ip.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Admin admin = plugin.al.getEntryByIp(ip);
|
||||
|
||||
if (admin == null || !admin.isActive() || !admin.getRank().hasConsoleVariant())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.setBypassPassword(true);
|
||||
event.setName(admin.getName());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL)
|
||||
public void onTelnetCommand(TelnetCommandEvent event)
|
||||
{
|
||||
if (plugin.cb.isCommandBlocked(event.getCommand(), event.getSender()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL)
|
||||
public void onTelnetRequestDataTags(TelnetRequestDataTagsEvent event)
|
||||
{
|
||||
for (Map.Entry<Player, Map<String, Object>> entry : event.getDataTags().entrySet())
|
||||
{
|
||||
final Player player = entry.getKey();
|
||||
final Map<String, Object> playerTags = entry.getValue();
|
||||
|
||||
boolean isAdmin = false;
|
||||
boolean isTelnetAdmin = false;
|
||||
boolean isSeniorAdmin = false;
|
||||
|
||||
final Admin admin = plugin.al.getAdmin(player);
|
||||
if (admin != null)
|
||||
{
|
||||
boolean active = admin.isActive();
|
||||
|
||||
isAdmin = active;
|
||||
isSeniorAdmin = active && admin.getRank() == Rank.SENIOR_ADMIN;
|
||||
isTelnetAdmin = active && (isSeniorAdmin || admin.getRank() == Rank.ADMIN);
|
||||
}
|
||||
|
||||
playerTags.put("tfm.admin.isAdmin", isAdmin);
|
||||
playerTags.put("tfm.admin.isTelnetAdmin", isTelnetAdmin);
|
||||
playerTags.put("tfm.admin.isSeniorAdmin", isSeniorAdmin);
|
||||
|
||||
playerTags.put("tfm.playerdata.getTag", plugin.pl.getPlayer(player).getTag());
|
||||
|
||||
if (server.getPluginManager().isPluginEnabled("Essentials"))
|
||||
{
|
||||
playerTags.put("tfm.essentialsBridge.getNickname", plugin.esb.getNickname(player.getName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public BukkitTelnet getBukkitTelnetPlugin()
|
||||
{
|
||||
if (bukkitTelnetPlugin == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
final Plugin bukkitTelnet = server.getPluginManager().getPlugin("BukkitTelnet");
|
||||
if (bukkitTelnet instanceof BukkitTelnet)
|
||||
{
|
||||
bukkitTelnetPlugin = (BukkitTelnet)bukkitTelnet;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
}
|
||||
|
||||
return bukkitTelnetPlugin;
|
||||
}
|
||||
|
||||
public List<Admin> getConnectedAdmins()
|
||||
{
|
||||
List<Admin> admins = new ArrayList<>();
|
||||
final BukkitTelnet telnet = getBukkitTelnetPlugin();
|
||||
if (telnet != null)
|
||||
{
|
||||
for (ClientSession session : telnet.appender.getSessions())
|
||||
{
|
||||
Admin admin = plugin.al.getEntryByName(session.getUserName().toLowerCase());
|
||||
if (admin != null && !admins.contains(admin))
|
||||
{
|
||||
admins.add(admin);
|
||||
}
|
||||
}
|
||||
}
|
||||
return admins;
|
||||
}
|
||||
|
||||
public void killTelnetSessions(final String name)
|
||||
{
|
||||
try
|
||||
{
|
||||
final List<ClientSession> sessionsToRemove = new ArrayList<>();
|
||||
|
||||
final BukkitTelnet telnet = getBukkitTelnetPlugin();
|
||||
if (telnet != null)
|
||||
{
|
||||
for (ClientSession session : telnet.appender.getSessions())
|
||||
{
|
||||
if (name != null && name.equalsIgnoreCase(session.getUserName()))
|
||||
{
|
||||
sessionsToRemove.add(session);
|
||||
}
|
||||
}
|
||||
|
||||
for (final ClientSession session : sessionsToRemove)
|
||||
{
|
||||
try
|
||||
{
|
||||
telnet.appender.removeSession(session);
|
||||
session.syncTerminateSession();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe("Error removing single telnet session: " + ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
FLog.info(sessionsToRemove.size() + " telnet session(s) removed.");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe("Error removing telnet sessions: " + ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,338 @@
|
||||
package me.totalfreedom.totalfreedommod.bridge;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||
import net.coreprotect.CoreProtect;
|
||||
import net.coreprotect.CoreProtectAPI;
|
||||
import net.coreprotect.utility.Util;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.event.ClickEvent;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class CoreProtectBridge extends FreedomService
|
||||
{
|
||||
//-- Block Inspector --//
|
||||
private static final Component name = Component.text("Block Inspector").color(TextColor.color(0x30ade4));
|
||||
private static final Component header = Component.text("---- ").append(name)
|
||||
.append(Component.text(" ---- ")).colorIfAbsent(NamedTextColor.WHITE);
|
||||
private static final Component prefix = name.append(Component.text(" - ").color(NamedTextColor.WHITE))
|
||||
.colorIfAbsent(NamedTextColor.WHITE);
|
||||
//--
|
||||
private final HashMap<UUID, Long> cooldownMap = new HashMap<>();
|
||||
private HashMap<UUID, FUtil.PaginationList<CoreProtectAPI.ParseResult>> historyMap;
|
||||
|
||||
//---------------------//
|
||||
private CoreProtectAPI coreProtectAPI = null;
|
||||
|
||||
public static Long getSecondsLeft(long prevTime, int timeAdd)
|
||||
{
|
||||
return prevTime / 1000L + timeAdd - System.currentTimeMillis() / 1000L;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart()
|
||||
{
|
||||
if (isEnabled())
|
||||
{
|
||||
historyMap = new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop()
|
||||
{
|
||||
}
|
||||
|
||||
public CoreProtect getCoreProtect()
|
||||
{
|
||||
CoreProtect coreProtect = null;
|
||||
try
|
||||
{
|
||||
final Plugin coreProtectPlugin = server.getPluginManager().getPlugin("CoreProtect");
|
||||
assert coreProtectPlugin != null;
|
||||
if (coreProtectPlugin instanceof CoreProtect)
|
||||
{
|
||||
coreProtect = (CoreProtect)coreProtectPlugin;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
return coreProtect;
|
||||
}
|
||||
|
||||
public CoreProtectAPI getCoreProtectAPI()
|
||||
{
|
||||
if (coreProtectAPI == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
final CoreProtect coreProtect = getCoreProtect();
|
||||
|
||||
coreProtectAPI = coreProtect.getAPI();
|
||||
|
||||
// Check if the plugin or api is not enabled, if so, return null
|
||||
if (!coreProtect.isEnabled() || !coreProtectAPI.isEnabled())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
}
|
||||
|
||||
return coreProtectAPI;
|
||||
}
|
||||
|
||||
public boolean isEnabled()
|
||||
{
|
||||
if (!server.getPluginManager().isPluginEnabled("CoreProtect"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
final CoreProtect coreProtect = getCoreProtect();
|
||||
|
||||
return coreProtect != null && coreProtect.isEnabled();
|
||||
}
|
||||
|
||||
// Rollback the specified player's edits that were in the last 24 hours.
|
||||
public void rollback(final String name)
|
||||
{
|
||||
if (!isEnabled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final CoreProtectAPI coreProtect = getCoreProtectAPI();
|
||||
|
||||
new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
coreProtect.performRollback(86400, Collections.singletonList(name), null, null, null, null, 0, null);
|
||||
}
|
||||
}.runTaskAsynchronously(plugin);
|
||||
}
|
||||
|
||||
// Reverts a rollback for the specified player's edits that were in the last 24 hours.
|
||||
public void restore(final String name)
|
||||
{
|
||||
if (!isEnabled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final CoreProtectAPI coreProtect = getCoreProtectAPI();
|
||||
|
||||
new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
coreProtect.performRestore(86400, Collections.singletonList(name), null, null, null, null, 0, null);
|
||||
}
|
||||
}.runTaskAsynchronously(plugin);
|
||||
}
|
||||
|
||||
public boolean hasHistory(Player player)
|
||||
{
|
||||
return historyMap.containsKey(player.getUniqueId());
|
||||
}
|
||||
|
||||
public FUtil.PaginationList<CoreProtectAPI.ParseResult> getHistoryForPlayer(Player player)
|
||||
{
|
||||
return historyMap.get(player.getUniqueId());
|
||||
}
|
||||
|
||||
public void showPageToPlayer(Player player, FUtil.PaginationList<CoreProtectAPI.ParseResult> results, int pageNum)
|
||||
{
|
||||
if (player == null || !player.isOnline())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
List<CoreProtectAPI.ParseResult> page = results.getPage(pageNum);
|
||||
|
||||
if (page == null || page.isEmpty())
|
||||
{
|
||||
player.sendMessage(prefix.append(Component.text("No results were found.", NamedTextColor.WHITE)));
|
||||
}
|
||||
else
|
||||
{
|
||||
// This shouldn't change at all in any of the other entries, so this should be safe
|
||||
Component location = Component.text(String.format("(%s, %s, %s)", results.get(0).getX(),
|
||||
results.get(0).getY(), results.get(0).getZ()));
|
||||
final long time = System.currentTimeMillis() / 1000;
|
||||
|
||||
player.sendMessage(header.append(location.color(NamedTextColor.GRAY).decorate(TextDecoration.ITALIC)));
|
||||
page.forEach(entry ->
|
||||
{
|
||||
TextComponent.Builder line = Component.text();
|
||||
|
||||
// Time
|
||||
line.append(Component.text(Util.getTimeSince(entry.getTime(), time, false))
|
||||
.color(NamedTextColor.GRAY));
|
||||
|
||||
// Action
|
||||
Component action = Component.text(" interacted with ");
|
||||
Component symbol = Component.text(" - ", NamedTextColor.WHITE);
|
||||
switch (entry.getActionId())
|
||||
{
|
||||
case 0 ->
|
||||
{
|
||||
action = Component.text(" broke ");
|
||||
symbol = Component.text(" - ", NamedTextColor.RED);
|
||||
}
|
||||
case 1 ->
|
||||
{
|
||||
action = Component.text(" placed ");
|
||||
symbol = Component.text(" + ", NamedTextColor.GREEN);
|
||||
}
|
||||
case 2 -> action = Component.text(" clicked ");
|
||||
default ->
|
||||
{
|
||||
// Do nothing (shuts Codacy up)
|
||||
}
|
||||
}
|
||||
// Symbol, player, action, block
|
||||
line.append(symbol).append(Component.text(entry.getPlayer()).color(TextColor.color(0x30ade4)))
|
||||
.append(action.color(NamedTextColor.WHITE)).append(
|
||||
Component.text(entry.getBlockData().getMaterial().name().toLowerCase())
|
||||
.color(TextColor.color(0x30ade4)));
|
||||
|
||||
// Rolled back?
|
||||
if (entry.isRolledBack())
|
||||
{
|
||||
line.decorate(TextDecoration.STRIKETHROUGH);
|
||||
}
|
||||
|
||||
player.sendMessage(line.append(Component.text(".", NamedTextColor.WHITE)).build());
|
||||
});
|
||||
|
||||
if (results.getPageCount() > 1)
|
||||
{
|
||||
player.sendMessage(Component.text("-----", NamedTextColor.WHITE));
|
||||
|
||||
// Page indicator
|
||||
TextComponent.Builder indicator = Component.text();
|
||||
|
||||
// <-
|
||||
if (pageNum > 1)
|
||||
{
|
||||
indicator.append(Component.text("◀ ", NamedTextColor.WHITE).clickEvent(
|
||||
ClickEvent.runCommand("/ins history " + (pageNum - 1))));
|
||||
}
|
||||
|
||||
// Page <current>/<total>
|
||||
indicator.append(Component.text("Page ", TextColor.color(0x30ade4)).append(Component.text(pageNum + "/"
|
||||
+ results.getPageCount(), NamedTextColor.WHITE)));
|
||||
|
||||
// ->
|
||||
if (pageNum < results.getPageCount())
|
||||
{
|
||||
indicator.append(Component.text(" ▶", NamedTextColor.WHITE).clickEvent(
|
||||
ClickEvent.runCommand("/ins history " + (pageNum + 1))));
|
||||
}
|
||||
|
||||
// | Use /ins history <page> for advanced navigation
|
||||
indicator.append(Component.text(" | ", NamedTextColor.GRAY).append(Component.text("Use ", NamedTextColor.WHITE)
|
||||
.append(Component.text("/ins history <page>", TextColor.color(0x30ade4))
|
||||
.clickEvent(ClickEvent.suggestCommand("/ins history ")))
|
||||
.append(Component.text(" for advanced navigation", NamedTextColor.WHITE))));
|
||||
|
||||
player.sendMessage(indicator.build());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public CompletableFuture<FUtil.PaginationList<CoreProtectAPI.ParseResult>> lookupForPlayer(Block block, Player player)
|
||||
{
|
||||
cooldownMap.put(player.getUniqueId(), System.currentTimeMillis());
|
||||
CoreProtectAPI api = getCoreProtectAPI();
|
||||
|
||||
return CompletableFuture.supplyAsync(() ->
|
||||
{
|
||||
historyMap.remove(player.getUniqueId());
|
||||
FUtil.PaginationList<CoreProtectAPI.ParseResult> pages = new FUtil.PaginationList<>(10);
|
||||
api.blockLookup(block, -1).forEach(stringArray -> pages.add(api.parseResult(stringArray)));
|
||||
historyMap.put(player.getUniqueId(), pages);
|
||||
return pages;
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onInteract(PlayerInteractEvent event)
|
||||
{
|
||||
// The inspector only works if we have CoreProtect installed
|
||||
if (!isEnabled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if ((event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK)
|
||||
&& plugin.pl.getData(player.getUniqueId()).hasInspection())
|
||||
{
|
||||
event.setCancelled(true);
|
||||
Block block = event.getClickedBlock();
|
||||
Optional<Long> cooldown = Optional.ofNullable(cooldownMap.get(player.getUniqueId()));
|
||||
|
||||
if (cooldown.isPresent() && getSecondsLeft(cooldown.get(), 3) > 0L)
|
||||
{
|
||||
player.sendMessage(prefix.append(Component.text("You need to wait ")
|
||||
.append(Component.text(getSecondsLeft(cooldown.get(), 3)))
|
||||
.append(Component.text(" seconds before you can make another query."))
|
||||
.color(NamedTextColor.WHITE)));
|
||||
return;
|
||||
}
|
||||
|
||||
// Time to do a look-up.
|
||||
if (block != null)
|
||||
{
|
||||
/* This is a hack to make it so that when you right-click, the coordinates that get used depend on
|
||||
* what's in your hand. Non-blocks use the block you clicked directly, but blocks use wherever the
|
||||
* block was supposed to be placed. */
|
||||
ItemStack hand = player.getInventory().getItemInMainHand();
|
||||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK && hand.getType().isBlock() && hand.getType() != Material.AIR)
|
||||
{
|
||||
block = block.getRelative(event.getBlockFace()).getState().getBlock();
|
||||
}
|
||||
|
||||
lookupForPlayer(block, player).thenAccept(results ->
|
||||
{
|
||||
if (results.isEmpty())
|
||||
{
|
||||
player.sendMessage(prefix.append(Component.text("No results were found.").color(NamedTextColor.WHITE)));
|
||||
}
|
||||
else
|
||||
{
|
||||
showPageToPlayer(player, results, 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,215 @@
|
||||
package me.totalfreedom.totalfreedommod.bridge;
|
||||
|
||||
import com.earth2me.essentials.Essentials;
|
||||
import com.earth2me.essentials.User;
|
||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class EssentialsBridge extends FreedomService
|
||||
{
|
||||
|
||||
private Essentials essentialsPlugin = null;
|
||||
|
||||
@Override
|
||||
public void onStart()
|
||||
{
|
||||
// This is completely useless, but it's here to make sure the service is loaded.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop()
|
||||
{
|
||||
essentialsPlugin = null;
|
||||
}
|
||||
|
||||
public Essentials getEssentialsPlugin()
|
||||
{
|
||||
if (essentialsPlugin == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
final Plugin essentials = server.getPluginManager().getPlugin("Essentials");
|
||||
assert essentials != null;
|
||||
if (essentials instanceof Essentials e)
|
||||
{
|
||||
essentialsPlugin = e;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
}
|
||||
return essentialsPlugin;
|
||||
}
|
||||
|
||||
public User getEssentialsUser(String username)
|
||||
{
|
||||
try
|
||||
{
|
||||
Essentials essentials = getEssentialsPlugin();
|
||||
if (essentials != null)
|
||||
{
|
||||
return essentials.getUserMap().getUser(username);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setNickname(String username, String nickname)
|
||||
{
|
||||
try
|
||||
{
|
||||
User user = getEssentialsUser(username);
|
||||
if (user != null)
|
||||
{
|
||||
user.setNickname(nickname);
|
||||
user.setDisplayNick();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
}
|
||||
|
||||
public String getNickname(String username)
|
||||
{
|
||||
try
|
||||
{
|
||||
User user = getEssentialsUser(username);
|
||||
if (user != null)
|
||||
{
|
||||
return user.getNickname();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public long getLastActivity(String username)
|
||||
{
|
||||
try
|
||||
{
|
||||
User user = getEssentialsUser(username);
|
||||
if (user != null)
|
||||
{
|
||||
return user.getLastOnlineActivity();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public void setVanished(String username, boolean vanished)
|
||||
{
|
||||
try
|
||||
{
|
||||
User user = getEssentialsUser(username);
|
||||
if (user != null)
|
||||
{
|
||||
user.setVanished(vanished);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onInventoryClick(InventoryClickEvent event)
|
||||
{
|
||||
Player refreshPlayer = null;
|
||||
Inventory inventory = event.getView().getTopInventory();
|
||||
InventoryType inventoryType = inventory.getType();
|
||||
Player player = (Player)event.getWhoClicked();
|
||||
FPlayer fPlayer = plugin.pl.getPlayer(player);
|
||||
if (inventoryType == InventoryType.PLAYER && fPlayer.isInvSee())
|
||||
{
|
||||
final InventoryHolder inventoryHolder = inventory.getHolder();
|
||||
if (inventoryHolder instanceof HumanEntity)
|
||||
{
|
||||
Player invOwner = (Player)inventoryHolder;
|
||||
Rank recieverRank = plugin.rm.getRank(player);
|
||||
Rank playerRank = plugin.rm.getRank(invOwner);
|
||||
if (playerRank.ordinal() >= recieverRank.ordinal() || !invOwner.isOnline())
|
||||
{
|
||||
event.setCancelled(true);
|
||||
refreshPlayer = player;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (refreshPlayer != null)
|
||||
{
|
||||
final Player p = refreshPlayer;
|
||||
new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
p.updateInventory();
|
||||
}
|
||||
}.runTaskLater(plugin, 20L);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onInventoryClose(InventoryCloseEvent event)
|
||||
{
|
||||
Player refreshPlayer = null;
|
||||
Inventory inventory = event.getView().getTopInventory();
|
||||
InventoryType inventoryType = inventory.getType();
|
||||
Player player = (Player)event.getPlayer();
|
||||
FPlayer fPlayer = plugin.pl.getPlayer(player);
|
||||
if (inventoryType == InventoryType.PLAYER && fPlayer.isInvSee())
|
||||
{
|
||||
fPlayer.setInvSee(false);
|
||||
refreshPlayer = player;
|
||||
}
|
||||
if (refreshPlayer != null)
|
||||
{
|
||||
final Player p = refreshPlayer;
|
||||
new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
p.updateInventory();
|
||||
}
|
||||
}.runTaskLater(plugin, 20L);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isEnabled()
|
||||
{
|
||||
final Essentials ess = getEssentialsPlugin();
|
||||
|
||||
return ess != null && ess.isEnabled();
|
||||
}
|
||||
}
|
@ -0,0 +1,101 @@
|
||||
package me.totalfreedom.totalfreedommod.bridge;
|
||||
|
||||
import me.libraryaddict.disguise.BlockedDisguises;
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.LibsDisguises;
|
||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public class LibsDisguisesBridge extends FreedomService
|
||||
{
|
||||
private LibsDisguises libsDisguisesPlugin = null;
|
||||
|
||||
@Override
|
||||
public void onStart()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop()
|
||||
{
|
||||
}
|
||||
|
||||
public LibsDisguises getLibsDisguisesPlugin()
|
||||
{
|
||||
if (libsDisguisesPlugin == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
final Plugin libsDisguises = server.getPluginManager().getPlugin("LibsDisguises");
|
||||
if (libsDisguises != null)
|
||||
{
|
||||
if (libsDisguises instanceof LibsDisguises)
|
||||
{
|
||||
libsDisguisesPlugin = (LibsDisguises)libsDisguises;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
}
|
||||
|
||||
return libsDisguisesPlugin;
|
||||
}
|
||||
|
||||
public void undisguiseAll(boolean admin)
|
||||
{
|
||||
try
|
||||
{
|
||||
final LibsDisguises libsDisguises = getLibsDisguisesPlugin();
|
||||
|
||||
if (libsDisguises == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : server.getOnlinePlayers())
|
||||
{
|
||||
if (DisguiseAPI.isDisguised(player))
|
||||
{
|
||||
if (!admin && plugin.al.isAdmin(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
DisguiseAPI.undisguiseToAll(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isDisguisesEnabled()
|
||||
{
|
||||
return !BlockedDisguises.disabled;
|
||||
}
|
||||
|
||||
public void setDisguisesEnabled(boolean state)
|
||||
{
|
||||
final LibsDisguises libsDisguises = getLibsDisguisesPlugin();
|
||||
|
||||
if (libsDisguises == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BlockedDisguises.disabled = !state;
|
||||
}
|
||||
|
||||
public boolean isEnabled()
|
||||
{
|
||||
final LibsDisguises libsDisguises = getLibsDisguisesPlugin();
|
||||
|
||||
return libsDisguises != null;
|
||||
}
|
||||
}
|
@ -0,0 +1,110 @@
|
||||
package me.totalfreedom.totalfreedommod.bridge;
|
||||
|
||||
import com.sk89q.worldedit.LocalSession;
|
||||
import com.sk89q.worldedit.bukkit.BukkitPlayer;
|
||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public class WorldEditBridge extends FreedomService
|
||||
{
|
||||
|
||||
//
|
||||
private WorldEditPlugin worldeditPlugin = null;
|
||||
|
||||
@Override
|
||||
public void onStart()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop()
|
||||
{
|
||||
}
|
||||
|
||||
public WorldEditPlugin getWorldEditPlugin()
|
||||
{
|
||||
if (worldeditPlugin == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
Plugin we = server.getPluginManager().getPlugin("WorldEdit");
|
||||
if (we != null)
|
||||
{
|
||||
if (we instanceof WorldEditPlugin)
|
||||
{
|
||||
worldeditPlugin = (WorldEditPlugin)we;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
}
|
||||
|
||||
return worldeditPlugin;
|
||||
}
|
||||
|
||||
public void setLimit(Player player, int limit)
|
||||
{
|
||||
try
|
||||
{
|
||||
final LocalSession session = getPlayerSession(player);
|
||||
if (session != null)
|
||||
{
|
||||
session.setBlockChangeLimit(limit);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public int getDefaultLimit()
|
||||
{
|
||||
final WorldEditPlugin wep = getWorldEditPlugin();
|
||||
if (wep == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return wep.getLocalConfiguration().defaultChangeLimit;
|
||||
|
||||
}
|
||||
|
||||
public int getMaxLimit()
|
||||
{
|
||||
final WorldEditPlugin wep = getWorldEditPlugin();
|
||||
if (wep == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return wep.getLocalConfiguration().maxChangeLimit;
|
||||
|
||||
}
|
||||
|
||||
private LocalSession getPlayerSession(Player player)
|
||||
{
|
||||
final WorldEditPlugin wep = getWorldEditPlugin();
|
||||
if (wep == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return wep.getSession(player);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FLog.severe(ex);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package me.totalfreedom.totalfreedommod.bridge;
|
||||
|
||||
import com.sk89q.worldguard.LocalPlayer;
|
||||
import com.sk89q.worldguard.WorldGuard;
|
||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
||||
|
||||
import com.sk89q.worldguard.protection.regions.RegionQuery;
|
||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public class WorldGuardBridge extends FreedomService
|
||||
{
|
||||
@Override
|
||||
public void onStart()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop()
|
||||
{
|
||||
}
|
||||
|
||||
public boolean canEditCurrentWorld(Player player)
|
||||
{
|
||||
// If WorldGuard integration is enabled, do a check with it.
|
||||
if (isEnabled())
|
||||
{
|
||||
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
|
||||
|
||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||
RegionQuery query = container.createQuery();
|
||||
|
||||
return query.testBuild(localPlayer.getLocation(), localPlayer);
|
||||
}
|
||||
|
||||
// If the plugin isn't present, return true.
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isEnabled()
|
||||
{
|
||||
Plugin plugin = server.getPluginManager().getPlugin("WorldGuard");
|
||||
|
||||
return plugin != null && plugin.isEnabled();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user