Skip to content

Commit

Permalink
Merge pull request Frostcast#2 from rlf/master
Browse files Browse the repository at this point in the history
Many Fixes
  • Loading branch information
swan201 committed Feb 1, 2016
2 parents b9d4b42 + 0bba14c commit 737d6af
Show file tree
Hide file tree
Showing 33 changed files with 778 additions and 116 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,14 @@ public static String getBasename(String file) {
}
return file;
}

public static String getExtension(String fileName) {
if (fileName != null && !fileName.isEmpty()) {
return fileName.substring(getBasename(fileName).length());
}
return "";
}

private static File getDataFolder() {
return dataFolder != null ? dataFolder : new File(".");
}
Expand Down
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,11 @@
<id>titlemananager-repo</id>
<url>http://repo.puha.io/nexus/content/repositories/releases/</url>
</repository>
<repository>
<id>mvdw-software</id>
<name>MVdW Public Repositories</name>
<url>http://repo.mvdw-software.be/content/groups/public/</url>
</repository>
<repository>
<!-- Our repo is last - so we can put in fallback artifacts when the other repos are down -->
<id>uSkyBlock-mvn-repo</id>
Expand Down
5 changes: 5 additions & 0 deletions uSkyBlock-Core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -475,6 +475,11 @@
<artifactId>TitleManager</artifactId>
<version>1.5.11</version>
</dependency>
<dependency>
<groupId>be.maximvdw</groupId>
<artifactId>MVdWPlaceholderAPI</artifactId>
<version>1.0.1-SNAPSHOT</version>
</dependency>

<!-- TESTING -->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ protected boolean doExecute(String alias, Player player, PlayerInfo pi, IslandIn
}
if (!island.isBanned(name)) {
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(name);
if (offlinePlayer.isOnline() && hasPermission(offlinePlayer.getPlayer(), "usb.island.ban.exempt")) {
if (offlinePlayer.isOnline() && hasPermission(offlinePlayer.getPlayer(), "usb.exempt.ban")) {
offlinePlayer.getPlayer().sendMessage(I18nUtil.tr("\u00a74{0} tried to ban you from their island!", player.getName()));
player.sendMessage(I18nUtil.tr("\u00a74{0} is exempt from being banned.", name));
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ protected boolean doExecute(String alias, final Player player, PlayerInfo pi, fi
&& (plugin.locationIsOnIsland(player, onlineTargetPlayer.getLocation())
|| plugin.locationIsOnNetherIsland(player, onlineTargetPlayer.getLocation()))
) {
if (hasPermission(onlineTargetPlayer, "usb.party.kick.exempt")) {
if (hasPermission(onlineTargetPlayer, "usb.exempt.kick")) {
onlineTargetPlayer.sendMessage(I18nUtil.tr("\u00a74{0} tried to kick you from their island!", player.getName()));
player.sendMessage(I18nUtil.tr("\u00a74{0} is exempt from being kicked.", targetPlayerName));
return true;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package us.talabrek.ultimateskyblock.event;

import dk.lockfuglsang.minecraft.po.I18nUtil;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
Expand All @@ -18,55 +17,37 @@
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.projectiles.ProjectileSource;
import us.talabrek.ultimateskyblock.Settings;
import us.talabrek.ultimateskyblock.api.IslandRank;
import us.talabrek.ultimateskyblock.handler.VaultHandler;
import us.talabrek.ultimateskyblock.handler.WorldGuardHandler;
import us.talabrek.ultimateskyblock.island.IslandInfo;
import us.talabrek.ultimateskyblock.player.Perk;
import us.talabrek.ultimateskyblock.player.PlayerInfo;
import us.talabrek.ultimateskyblock.uSkyBlock;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.UUID;
import java.util.WeakHashMap;
import java.util.logging.Logger;
import java.util.regex.Pattern;

import static dk.lockfuglsang.minecraft.perm.PermissionUtil.hasPermission;
import static dk.lockfuglsang.minecraft.po.I18nUtil.tr;

public class PlayerEvents implements Listener {
private static final String CN = PlayerEvents.class.getName();
private static final Logger log = Logger.getLogger(CN);
private static final Set<EntityDamageEvent.DamageCause> FIRE_TRAP = new HashSet<>(
Arrays.asList(EntityDamageEvent.DamageCause.LAVA, EntityDamageEvent.DamageCause.FIRE, EntityDamageEvent.DamageCause.FIRE_TICK));
private static final Random RANDOM = new Random();
private static final int OBSIDIAN_SPAM = 10000; // Max once every 10 seconds.

private static final List<String> LEVEL_PLACEHOLDER = Arrays.asList("{uskyblock_island_level}", "{usb_level}");
private static final List<String> RANK_PLACEHOLDER = Arrays.asList("{uskyblock_island_rank}", "{usb_rank}");
private static final List<String> PLACEHOLDERS = new ArrayList<>();
static {
PLACEHOLDERS.addAll(LEVEL_PLACEHOLDER);
PLACEHOLDERS.addAll(RANK_PLACEHOLDER);
}

private final uSkyBlock plugin;
private final boolean visitorFallProtected;
private final boolean visitorFireProtected;
Expand Down Expand Up @@ -261,52 +242,6 @@ public void run() {
}
}

// We want to run LAST!
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onChat(AsyncPlayerChatEvent event) {
String format = event.getFormat();
Player player = event.getPlayer();
if (player == null) {
return;
}
if (hasPlaceholder(format)) {
IslandRank rank = plugin.getIslandRank(player);
String levelValue = "?";
String rankValue = "?";
if (rank != null) {
levelValue = String.format("%.0f", rank.getScore());
rankValue = String.format("%d", rank.getRank());
} else {
IslandInfo islandInfo = plugin.getIslandInfo(player);
levelValue = islandInfo != null ? String.format("%.0f", islandInfo.getLevel()) : "?";
}
format = replaceValues(format, levelValue, rankValue);
event.setFormat(format);
}
}

private String replaceValues(String source, String levelValue, String rankValue) {
String result = source;
for (String placeholder : LEVEL_PLACEHOLDER) {
result = result.replaceAll(Pattern.quote(placeholder), levelValue);
}
for (String placeholder : RANK_PLACEHOLDER) {
result = result.replaceAll(Pattern.quote(placeholder), rankValue);
}
return result;
}

private boolean hasPlaceholder(String... strs) {
for (String str : strs) {
for (String placeholder : PLACEHOLDERS) {
if (str.contains(placeholder)) {
return true;
}
}
}
return false;
}

@EventHandler(priority = EventPriority.LOW)
public void onLeafBreak(BlockBreakEvent event) {
if (event == null || event.isCancelled() || event.getPlayer() == null || !plugin.isSkyWorld(event.getPlayer().getWorld())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public CooldownHandler(uSkyBlock plugin) {
* @return
*/
public int getCooldown(org.bukkit.entity.Player player, String cmd) {
if (hasPermission(player, "usb.mod.bypasscooldowns") || hasPermission(player, "usb.exempt." + cmd + "Cooldown")) {
if (hasPermission(player, "usb.mod.bypasscooldowns") || hasPermission(player, "usb.exempt.cooldown." + cmd)) {
return 0;
}
Map<String, Long> map = cooldowns.get(player.getUniqueId());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package us.talabrek.ultimateskyblock.handler.placeholder;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import us.talabrek.ultimateskyblock.uSkyBlock;

/**
* Our native chat-placeholder handler.
*/
public class ChatPlaceholder extends TextPlaceholder implements Listener {
@Override
public boolean registerPlaceholder(uSkyBlock plugin, PlaceholderReplacer replacer) {
Bukkit.getPluginManager().registerEvents(this, plugin);
return super.registerPlaceholder(plugin, replacer);
}

@EventHandler
public void onChatEvent(AsyncPlayerChatEvent e) {
Player player = e.getPlayer();
String result = replacePlaceholders(player, e.getFormat());
if (result != null) {
e.setFormat(result);
}
result = replacePlaceholders(player, e.getMessage());
if (result != null) {
e.setMessage(result);
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package us.talabrek.ultimateskyblock.handler.placeholder;

import be.maximvdw.placeholderapi.PlaceholderReplaceEvent;
import org.bukkit.Bukkit;
import us.talabrek.ultimateskyblock.uSkyBlock;

/**
* MVdWPlaceholder proxy
*/
public class MVdWPlaceholderAPI implements PlaceholderAPI {
public boolean isAvailable() {
// Might not be enabled yet...
return Bukkit.getPluginManager().getPlugin("MVdWPlaceholderAPI") != null;
}

@Override
public boolean registerPlaceholder(uSkyBlock plugin, final PlaceholderReplacer replacer) {
if (isAvailable()) {
be.maximvdw.placeholderapi.PlaceholderReplacer proxy = new be.maximvdw.placeholderapi.PlaceholderReplacer() {
@Override
public String onPlaceholderReplace(PlaceholderReplaceEvent e) {
if (replacer.getPlaceholders().contains(e.getPlaceholder())) {
return replacer.replace(e.getOfflinePlayer(), e.getPlayer(), e.getPlaceholder());
}
return null;
}
};
for (String placeholder : replacer.getPlaceholders()) {
be.maximvdw.placeholderapi.PlaceholderAPI.registerPlaceholder(plugin, placeholder, proxy);
}
return true;
}
return false;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package us.talabrek.ultimateskyblock.handler.placeholder;

import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import us.talabrek.ultimateskyblock.uSkyBlock;

import java.util.Set;

/**
*/
public interface PlaceholderAPI {
interface PlaceholderReplacer {
Set<String> getPlaceholders();
String replace(OfflinePlayer offlinePlayer, Player player, String placeholder);
}
boolean registerPlaceholder(uSkyBlock plugin, PlaceholderReplacer replacer);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package us.talabrek.ultimateskyblock.handler.placeholder;

import dk.lockfuglsang.minecraft.file.FileUtil;
import us.talabrek.ultimateskyblock.uSkyBlock;

public class PlaceholderHandler {
private static final String[] ADAPTORS = {
ChatPlaceholder.class.getName(),
ServerCommandPlaceholder.class.getName(),
"us.talabrek.ultimateskyblock.handler.placeholder.MVdWPlaceholder"
};

public static void register(uSkyBlock plugin) {
PlaceholderReplacerImpl placeholderReplacer = new PlaceholderReplacerImpl(plugin);
for (String className : ADAPTORS) {
String baseName = FileUtil.getExtension(className);
if (plugin.getConfig().getBoolean("placeholder." + baseName.toLowerCase() + ".enabled", false)) {
try {
Class<?> aClass = Class.forName(className);
Object o = aClass.newInstance();
if (o instanceof PlaceholderAPI) {
if (((PlaceholderAPI) o).registerPlaceholder(plugin, placeholderReplacer)) {
plugin.getLogger().info("uSkyBlock hooked into " + baseName);
} else {
plugin.getLogger().info("uSkyBlock failed to hook into " + baseName);
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
// Ignore
plugin.getLogger().info("uSkyBlock failed to hook into " + baseName);
}
}
}
}
}
Loading

0 comments on commit 737d6af

Please sign in to comment.