From 49b6b1214cecc38f34e77fabe1e46aa45a596221 Mon Sep 17 00:00:00 2001 From: crashdemons Date: Fri, 20 Dec 2019 06:35:00 -0600 Subject: [PATCH] make ignoring external heads configurable --- .../plugins/HeadPluginCompatibility.java | 20 +++---- .../plugins/heads/ExternalHeadType.java | 57 ------------------ .../plugins/heads/ExternalHeads.java | 58 +++++++++++++++++++ .../shininet/bukkit/playerheads/Config.java | 4 ++ .../src/main/resources/config.yml | 5 ++ 5 files changed, 75 insertions(+), 69 deletions(-) delete mode 100644 PlayerHeads-core/src/main/java/com/github/crashdemons/playerheads/compatibility/plugins/heads/ExternalHeadType.java create mode 100644 PlayerHeads-core/src/main/java/com/github/crashdemons/playerheads/compatibility/plugins/heads/ExternalHeads.java diff --git a/PlayerHeads-core/src/main/java/com/github/crashdemons/playerheads/compatibility/plugins/HeadPluginCompatibility.java b/PlayerHeads-core/src/main/java/com/github/crashdemons/playerheads/compatibility/plugins/HeadPluginCompatibility.java index bff39150..1f1e30ea 100644 --- a/PlayerHeads-core/src/main/java/com/github/crashdemons/playerheads/compatibility/plugins/HeadPluginCompatibility.java +++ b/PlayerHeads-core/src/main/java/com/github/crashdemons/playerheads/compatibility/plugins/HeadPluginCompatibility.java @@ -7,7 +7,7 @@ import com.github.crashdemons.playerheads.compatibility.Compatibility; import com.github.crashdemons.playerheads.compatibility.plugins.heads.ExternalHeadHandling; -import com.github.crashdemons.playerheads.compatibility.plugins.heads.ExternalHeadType; +import com.github.crashdemons.playerheads.compatibility.plugins.heads.ExternalHeads; import java.util.UUID; import org.bukkit.OfflinePlayer; import org.bukkit.block.BlockState; @@ -17,7 +17,6 @@ import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @@ -26,21 +25,18 @@ public class HeadPluginCompatibility extends CompatiblePlugin { public HeadPluginCompatibility(Plugin parentPlugin){ super(parentPlugin,""); + ExternalHeads.loadNamesFromConfig(parentPlugin.getConfig(), "ignoredheadnames", ExternalHeadHandling.NO_INTERACTION); + ExternalHeads.loadIdsFromConfig(parentPlugin.getConfig(), "ignoredheaduuids", ExternalHeadHandling.NO_INTERACTION); } - @Nullable - public ExternalHeadType getExternalHead(String ownerName, UUID ownerID){ - ExternalHeadType result = ExternalHeadType.get(ownerID); - if(result!=null) return result; - result = ExternalHeadType.get(ownerName); - return result; - } + @NotNull public ExternalHeadHandling getExternalHeadHandling(String ownerName, UUID ownerID){ - ExternalHeadType head = getExternalHead(ownerName,ownerID); - if(head==null) return ExternalHeadHandling.NORMAL; - return head.getHandling(); + ExternalHeadHandling handling = ExternalHeads.getHandling(ownerName); + if(handling==null) handling=ExternalHeads.getHandling(ownerID); + if(handling==null) return ExternalHeadHandling.NORMAL; + return handling; } @NotNull diff --git a/PlayerHeads-core/src/main/java/com/github/crashdemons/playerheads/compatibility/plugins/heads/ExternalHeadType.java b/PlayerHeads-core/src/main/java/com/github/crashdemons/playerheads/compatibility/plugins/heads/ExternalHeadType.java deleted file mode 100644 index 064a603a..00000000 --- a/PlayerHeads-core/src/main/java/com/github/crashdemons/playerheads/compatibility/plugins/heads/ExternalHeadType.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/ . - */ -package com.github.crashdemons.playerheads.compatibility.plugins.heads; - -import java.util.HashMap; -import java.util.UUID; -import org.jetbrains.annotations.Nullable; - -/** - * - * @author crashdemons (crashenator at gmail.com) - */ -public enum ExternalHeadType { - SLIMEFUN_HEAD("CSCoreLib",null,ExternalHeadHandling.NO_INTERACTION), - - - ; - - private final String ownerName; - private final UUID ownerID; - private final ExternalHeadHandling handling; - - private static class Mapping{ - public static final HashMap nameToHead = new HashMap<>(); - public static final HashMap idToHead = new HashMap<>(); - } - - ExternalHeadType(String username, UUID uuid, ExternalHeadHandling handling){ - ownerName = username; - ownerID = uuid; - this.handling=handling; - if(ownerName!=null) Mapping.nameToHead.put(username, this); - if(ownerID!=null) Mapping.idToHead.put(uuid, this); - } - - public ExternalHeadHandling getHandling(){ - return handling; - } - - @Nullable - public static ExternalHeadType get(String username){ - if(username==null) return null; - return Mapping.nameToHead.get(username); - } - - @Nullable - public static ExternalHeadType get(UUID id){ - if(id==null) return null; - return Mapping.idToHead.get(id); - } - - - -} diff --git a/PlayerHeads-core/src/main/java/com/github/crashdemons/playerheads/compatibility/plugins/heads/ExternalHeads.java b/PlayerHeads-core/src/main/java/com/github/crashdemons/playerheads/compatibility/plugins/heads/ExternalHeads.java new file mode 100644 index 00000000..116aab84 --- /dev/null +++ b/PlayerHeads-core/src/main/java/com/github/crashdemons/playerheads/compatibility/plugins/heads/ExternalHeads.java @@ -0,0 +1,58 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/ . + */ +package com.github.crashdemons.playerheads.compatibility.plugins.heads; + +import java.util.HashMap; +import java.util.List; +import java.util.UUID; +import org.bukkit.configuration.ConfigurationSection; +import org.jetbrains.annotations.Nullable; + +/** + * + * @author crashdemons (crashenator at gmail.com) + */ +public class ExternalHeads { + private ExternalHeads(){} + + private static final HashMap nameToHandling = new HashMap<>(); + private static final HashMap idToHandling = new HashMap<>(); + + public static void loadNamesFromConfig(ConfigurationSection section, String key, ExternalHeadHandling handling){ + List names = section.getStringList(key); + if(names==null) return; + for(String name : names) + nameToHandling.put(name,handling); + } + + public static void loadIdsFromConfig(ConfigurationSection section, String key, ExternalHeadHandling handling){ + List ids = section.getStringList(key); + if(ids==null) return; + for(String id : ids){ + UUID uuid = null; + try{ + uuid = UUID.fromString(id); + idToHandling.put(uuid,handling); + }catch(IllegalArgumentException e){ + //do nothing - invalid UUID String, no logging facility for this internal class. + } + } + } + + @Nullable + public static ExternalHeadHandling getHandling(String username){ + if(username==null) return null; + return nameToHandling.get(username); + } + + @Nullable + public static ExternalHeadHandling getHandling(UUID id){ + if(id==null) return null; + return idToHandling.get(id); + } + + +} diff --git a/PlayerHeads-core/src/main/java/org/shininet/bukkit/playerheads/Config.java b/PlayerHeads-core/src/main/java/org/shininet/bukkit/playerheads/Config.java index c23bcf2a..d48357c8 100644 --- a/PlayerHeads-core/src/main/java/org/shininet/bukkit/playerheads/Config.java +++ b/PlayerHeads-core/src/main/java/org/shininet/bukkit/playerheads/Config.java @@ -86,6 +86,10 @@ public enum configType { put("delaywitherdrop", configType.BOOLEAN); put("delaywitherdropms", configType.INT); + + + put("ignoredheadnames", configType.STRINGLIST); + put("ignoredheaduuids", configType.STRINGLIST); } }; /** diff --git a/PlayerHeads-core/src/main/resources/config.yml b/PlayerHeads-core/src/main/resources/config.yml index 7c526130..b8e18ce5 100644 --- a/PlayerHeads-core/src/main/resources/config.yml +++ b/PlayerHeads-core/src/main/resources/config.yml @@ -125,6 +125,11 @@ requireditems: [wooden_axe,stone_axe,golden_axe,iron_axe,diamond_axe] considermobkillers: false considertameowner: false +#prevent PlayerHeads from interacting/modifying third-party heads with these names or UUIDs +ignoredheadnames: [CSCoreLib] +ignoredheaduuids: [] + + #modifier for the rate of drops from different sizes of slime/magma cubes. #for instance, 1.0 means that the slime drops 100% of the slimedroprate. #so, with a slimedroprate of 0.75 and a size modifier of 0.5, the effective drop rate is 0.375