mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-25 06:36:45 +01:00
Merge branch 'configurable' into gradlelize
This commit is contained in:
commit
ba5c24fa3c
@ -261,6 +261,8 @@ public final class ConfigManager {
|
|||||||
customSerializers.registerType(new TypeToken<FormulaType>() {}, new CustomEnumValueSerializer());
|
customSerializers.registerType(new TypeToken<FormulaType>() {}, new CustomEnumValueSerializer());
|
||||||
customSerializers.registerType(new TypeToken<MMOItem<?>>() {}, new ItemStackSerializer());
|
customSerializers.registerType(new TypeToken<MMOItem<?>>() {}, new ItemStackSerializer());
|
||||||
customSerializers.registerType(new TypeToken<Set<?>>() {}, new SetSerializer());
|
customSerializers.registerType(new TypeToken<Set<?>>() {}, new SetSerializer());
|
||||||
|
|
||||||
|
customSerializers.registerType(new TypeToken<ItemMatch<?>>() {}, new CustomItemTargetSerializer());
|
||||||
customSerializers.registerType(new TypeToken<SimpleRepairCost>() {}, new SimpleRepairCostSerializer());
|
customSerializers.registerType(new TypeToken<SimpleRepairCost>() {}, new SimpleRepairCostSerializer());
|
||||||
|
|
||||||
customSerializers.registerType(TypeToken.of(TamingSummon.class), new TamingSummonSerializer());
|
customSerializers.registerType(TypeToken.of(TamingSummon.class), new TamingSummonSerializer());
|
||||||
@ -274,7 +276,6 @@ public final class ConfigManager {
|
|||||||
customSerializers.registerType(TypeToken.of(PlayerNotificationSettings.class), new PlayerNotificationSerializer());
|
customSerializers.registerType(TypeToken.of(PlayerNotificationSettings.class), new PlayerNotificationSerializer());
|
||||||
customSerializers.registerType(TypeToken.of(SoundSetting.class), new SoundSettingSerializer());
|
customSerializers.registerType(TypeToken.of(SoundSetting.class), new SoundSettingSerializer());
|
||||||
customSerializers.registerType(TypeToken.of(ItemWildcards.class), new ItemWildcardSerializer());
|
customSerializers.registerType(TypeToken.of(ItemWildcards.class), new ItemWildcardSerializer());
|
||||||
customSerializers.registerType(TypeToken.of(ItemMatch.class), new CustomItemTargetSerializer());
|
|
||||||
customSerializers.registerType(TypeToken.of(RepairTransaction.class), new RepairTransactionSerializer());
|
customSerializers.registerType(TypeToken.of(RepairTransaction.class), new RepairTransactionSerializer());
|
||||||
customSerializers.registerType(TypeToken.of(RawNBT.class), new RawNBTSerializer());
|
customSerializers.registerType(TypeToken.of(RawNBT.class), new RawNBTSerializer());
|
||||||
}
|
}
|
||||||
|
@ -13,9 +13,9 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
||||||
public class CustomItemTargetSerializer implements TypeSerializer<ItemMatch> {
|
public class CustomItemTargetSerializer implements TypeSerializer<ItemMatch<?>> {
|
||||||
|
|
||||||
private static final String ITEM_CONSUMED_FOR_REPAIR = "Item-Consumed-For-Repair";
|
private static final String ITEM_CONSUMED_FOR_REPAIR = "Target-Item";
|
||||||
private static final String NBT_REQUIREMENTS = "NBT-Requirements";
|
private static final String NBT_REQUIREMENTS = "NBT-Requirements";
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@ -32,7 +32,7 @@ public class CustomItemTargetSerializer implements TypeSerializer<ItemMatch> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void serialize(@NonNull TypeToken<?> type, @Nullable ItemMatch obj, @NonNull ConfigurationNode value) throws ObjectMappingException {
|
public void serialize(@NonNull TypeToken<?> type, @Nullable ItemMatch<?> obj, @NonNull ConfigurationNode value) throws ObjectMappingException {
|
||||||
value.getNode(ITEM_CONSUMED_FOR_REPAIR).setValue(obj.getItem());
|
value.getNode(ITEM_CONSUMED_FOR_REPAIR).setValue(obj.getItem());
|
||||||
|
|
||||||
if(obj.getItemMatchProperties().size() > 0) {
|
if(obj.getItemMatchProperties().size() > 0) {
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package com.gmail.nossr50.config.hocon.skills.archery;
|
package com.gmail.nossr50.config.hocon.skills.archery;
|
||||||
|
|
||||||
import ninja.leaping.configurate.objectmapping.Setting;
|
import ninja.leaping.configurate.objectmapping.Setting;
|
||||||
|
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
|
||||||
|
|
||||||
|
@ConfigSerializable
|
||||||
public class ConfigArcheryLimitBreak {
|
public class ConfigArcheryLimitBreak {
|
||||||
|
|
||||||
private static final boolean DEFAULT_PVE = false;
|
private static final boolean DEFAULT_PVE = false;
|
||||||
|
@ -118,6 +118,7 @@ public final class LocaleManager {
|
|||||||
pluginRef.getLogger().log(Level.WARNING, "Failed to load locale from " + localePath, e);
|
pluginRef.getLogger().log(Level.WARNING, "Failed to load locale from " + localePath, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bundle = ResourceBundle.getBundle(BUNDLE_ROOT, locale);
|
bundle = ResourceBundle.getBundle(BUNDLE_ROOT, locale);
|
||||||
enBundle = ResourceBundle.getBundle(BUNDLE_ROOT, java.util.Locale.US);
|
enBundle = ResourceBundle.getBundle(BUNDLE_ROOT, java.util.Locale.US);
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,6 @@ public class mcMMO extends JavaPlugin {
|
|||||||
private NotificationManager notificationManager;
|
private NotificationManager notificationManager;
|
||||||
private CommandRegistrationManager commandRegistrationManager;
|
private CommandRegistrationManager commandRegistrationManager;
|
||||||
// private NBTManager nbtManager;
|
// private NBTManager nbtManager;
|
||||||
private WorldGuardManager worldGuardManager;
|
|
||||||
private PartyManager partyManager;
|
private PartyManager partyManager;
|
||||||
private LocaleManager localeManager;
|
private LocaleManager localeManager;
|
||||||
private ChatManager chatManager;
|
private ChatManager chatManager;
|
||||||
@ -139,9 +138,6 @@ public class mcMMO extends JavaPlugin {
|
|||||||
PluginManager pluginManager = getServer().getPluginManager();
|
PluginManager pluginManager = getServer().getPluginManager();
|
||||||
healthBarPluginEnabled = pluginManager.getPlugin("HealthBar") != null;
|
healthBarPluginEnabled = pluginManager.getPlugin("HealthBar") != null;
|
||||||
|
|
||||||
//Init Locale Manager
|
|
||||||
localeManager = new LocaleManager(this);
|
|
||||||
|
|
||||||
//Init Permission Tools
|
//Init Permission Tools
|
||||||
permissionTools = new PermissionTools(this);
|
permissionTools = new PermissionTools(this);
|
||||||
|
|
||||||
@ -149,9 +145,16 @@ public class mcMMO extends JavaPlugin {
|
|||||||
|
|
||||||
setupFilePaths();
|
setupFilePaths();
|
||||||
|
|
||||||
//modManager = new ModManager();
|
//Init config manager etc
|
||||||
|
|
||||||
loadConfigFiles();
|
loadConfigFiles();
|
||||||
|
|
||||||
|
//Init Locale Manager
|
||||||
|
localeManager = new LocaleManager(this);
|
||||||
|
|
||||||
|
//Init Skill Tools
|
||||||
|
skillTools = new SkillTools(this);
|
||||||
|
|
||||||
|
//Init DST
|
||||||
registerDynamicSettings(); //Do this after configs are loaded
|
registerDynamicSettings(); //Do this after configs are loaded
|
||||||
|
|
||||||
//Init TextComponentFactory
|
//Init TextComponentFactory
|
||||||
@ -269,9 +272,6 @@ public class mcMMO extends JavaPlugin {
|
|||||||
//Init Scoreboard Manager
|
//Init Scoreboard Manager
|
||||||
scoreboardManager = new ScoreboardManager(this);
|
scoreboardManager = new ScoreboardManager(this);
|
||||||
|
|
||||||
//Init Skill Tools
|
|
||||||
skillTools = new SkillTools(this);
|
|
||||||
|
|
||||||
//Init Combat Tools
|
//Init Combat Tools
|
||||||
combatTools = new CombatTools(this);
|
combatTools = new CombatTools(this);
|
||||||
|
|
||||||
@ -284,9 +284,6 @@ public class mcMMO extends JavaPlugin {
|
|||||||
//Init Item Tools
|
//Init Item Tools
|
||||||
itemTools = new ItemTools(this);
|
itemTools = new ItemTools(this);
|
||||||
|
|
||||||
//Init World Guard Utils (Not sure about the order of this one, might need to be loaded earlier)
|
|
||||||
worldGuardUtils = new WorldGuardUtils(this);
|
|
||||||
|
|
||||||
//Init MOTD Utils
|
//Init MOTD Utils
|
||||||
messageOfTheDayUtils = new MessageOfTheDayUtils(this);
|
messageOfTheDayUtils = new MessageOfTheDayUtils(this);
|
||||||
|
|
||||||
@ -306,10 +303,14 @@ public class mcMMO extends JavaPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void onLoad()
|
public void onLoad()
|
||||||
{
|
{
|
||||||
worldGuardManager = new WorldGuardManager();
|
|
||||||
|
|
||||||
if(getServer().getPluginManager().getPlugin("WorldGuard") != null) {
|
if(getServer().getPluginManager().getPlugin("WorldGuard") != null) {
|
||||||
worldGuardManager.registerFlags();
|
worldGuardUtils = new WorldGuardUtils(); //Init WGU
|
||||||
|
|
||||||
|
if(worldGuardUtils.isWorldGuardLoaded()) {
|
||||||
|
//Register flags
|
||||||
|
System.out.println("[mcMMO - Registering World Guard Flags...]");
|
||||||
|
worldGuardUtils.getWorldGuardManager().registerFlags();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -755,7 +756,7 @@ public class mcMMO extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public WorldGuardManager getWorldGuardManager() {
|
public WorldGuardManager getWorldGuardManager() {
|
||||||
return worldGuardManager;
|
return worldGuardUtils.getWorldGuardManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
public PartyManager getPartyManager() {
|
public PartyManager getPartyManager() {
|
||||||
|
@ -21,8 +21,8 @@ import com.gmail.nossr50.events.hardcore.McMMOPlayerVampirismEvent;
|
|||||||
import com.gmail.nossr50.events.party.McMMOPartyLevelUpEvent;
|
import com.gmail.nossr50.events.party.McMMOPartyLevelUpEvent;
|
||||||
import com.gmail.nossr50.events.party.McMMOPartyTeleportEvent;
|
import com.gmail.nossr50.events.party.McMMOPartyTeleportEvent;
|
||||||
import com.gmail.nossr50.events.party.McMMOPartyXpGainEvent;
|
import com.gmail.nossr50.events.party.McMMOPartyXpGainEvent;
|
||||||
import com.gmail.nossr50.events.skills.McMMOPlayerNotificationEvent;
|
|
||||||
import com.gmail.nossr50.events.players.McMMOPlayerProfileLoadEvent;
|
import com.gmail.nossr50.events.players.McMMOPlayerProfileLoadEvent;
|
||||||
|
import com.gmail.nossr50.events.skills.McMMOPlayerNotificationEvent;
|
||||||
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityActivateEvent;
|
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityActivateEvent;
|
||||||
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityDeactivateEvent;
|
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityDeactivateEvent;
|
||||||
import com.gmail.nossr50.events.skills.fishing.McMMOPlayerFishingTreasureEvent;
|
import com.gmail.nossr50.events.skills.fishing.McMMOPlayerFishingTreasureEvent;
|
||||||
|
@ -8,7 +8,6 @@ import com.gmail.nossr50.events.scoreboard.McMMOScoreboardMakeboardEvent;
|
|||||||
import com.gmail.nossr50.events.scoreboard.ScoreboardEventReason;
|
import com.gmail.nossr50.events.scoreboard.ScoreboardEventReason;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scoreboard.DisplaySlot;
|
import org.bukkit.scoreboard.DisplaySlot;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.gmail.nossr50.worldguard;
|
package com.gmail.nossr50.worldguard;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitPlayer;
|
import com.sk89q.worldedit.bukkit.BukkitPlayer;
|
||||||
import com.sk89q.worldguard.WorldGuard;
|
import com.sk89q.worldguard.WorldGuard;
|
||||||
@ -9,12 +8,8 @@ import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
|
|||||||
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
||||||
import com.sk89q.worldguard.protection.regions.RegionQuery;
|
import com.sk89q.worldguard.protection.regions.RegionQuery;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
import static org.bukkit.Bukkit.getServer;
|
|
||||||
|
|
||||||
public class WorldGuardManager {
|
public class WorldGuardManager {
|
||||||
private WorldGuardPlugin worldGuardPluginRef;
|
|
||||||
|
|
||||||
public boolean hasMainFlag(Player player)
|
public boolean hasMainFlag(Player player)
|
||||||
{
|
{
|
||||||
@ -63,18 +58,6 @@ public class WorldGuardManager {
|
|||||||
return query.testState(loc, WorldGuardPlugin.inst().wrapPlayer(player), WorldGuardFlags.MCMMO_HARDCORE_WG_FLAG);
|
return query.testState(loc, WorldGuardPlugin.inst().wrapPlayer(player), WorldGuardFlags.MCMMO_HARDCORE_WG_FLAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
private WorldGuardPlugin getWorldGuard() {
|
|
||||||
Plugin plugin = getServer().getPluginManager().getPlugin("WorldGuard");
|
|
||||||
|
|
||||||
// WorldGuard may not be loaded
|
|
||||||
if (!(plugin instanceof WorldGuardPlugin)) {
|
|
||||||
return null; // Maybe you want throw an exception instead
|
|
||||||
}
|
|
||||||
|
|
||||||
worldGuardPluginRef = (WorldGuardPlugin) plugin;
|
|
||||||
return worldGuardPluginRef;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerFlags()
|
public void registerFlags()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package com.gmail.nossr50.worldguard;
|
package com.gmail.nossr50.worldguard;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
|
||||||
import com.sk89q.worldguard.WorldGuard;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
import com.sk89q.worldguard.protection.flags.registry.SimpleFlagRegistry;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -15,10 +12,9 @@ public class WorldGuardUtils {
|
|||||||
private boolean isLoaded = false;
|
private boolean isLoaded = false;
|
||||||
private boolean detectedIncompatibleWG = false;
|
private boolean detectedIncompatibleWG = false;
|
||||||
private static final ArrayList<String> WGClassList;
|
private static final ArrayList<String> WGClassList;
|
||||||
private final mcMMO pluginRef;
|
private WorldGuardManager worldGuardManager;
|
||||||
|
|
||||||
public WorldGuardUtils(mcMMO pluginRef) {
|
public WorldGuardUtils() {
|
||||||
this.pluginRef = pluginRef;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@ -72,7 +68,7 @@ public class WorldGuardUtils {
|
|||||||
if(plugin == null) {
|
if(plugin == null) {
|
||||||
//WG is not present
|
//WG is not present
|
||||||
detectedIncompatibleWG = true;
|
detectedIncompatibleWG = true;
|
||||||
pluginRef.getLogger().info("WorldGuard was not detected.");
|
System.out.println("[mcMMO WorldGuardUtils Debug] WorldGuard was not detected.");
|
||||||
} else {
|
} else {
|
||||||
//Check that its actually of class WorldGuardPlugin
|
//Check that its actually of class WorldGuardPlugin
|
||||||
if(plugin instanceof WorldGuardPlugin)
|
if(plugin instanceof WorldGuardPlugin)
|
||||||
@ -81,6 +77,9 @@ public class WorldGuardUtils {
|
|||||||
{
|
{
|
||||||
worldGuardPluginRef = (WorldGuardPlugin) plugin;
|
worldGuardPluginRef = (WorldGuardPlugin) plugin;
|
||||||
isLoaded = true;
|
isLoaded = true;
|
||||||
|
|
||||||
|
//Init WG Manager
|
||||||
|
worldGuardManager = new WorldGuardManager();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//Plugin is not of the expected type
|
//Plugin is not of the expected type
|
||||||
@ -88,7 +87,6 @@ public class WorldGuardUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return worldGuardPluginRef;
|
return worldGuardPluginRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,7 +98,7 @@ public class WorldGuardUtils {
|
|||||||
*/
|
*/
|
||||||
private boolean isCompatibleVersion(Plugin plugin) {
|
private boolean isCompatibleVersion(Plugin plugin) {
|
||||||
//Check that the version of WG is at least version 7.xx
|
//Check that the version of WG is at least version 7.xx
|
||||||
boolean allClassesFound = true;
|
// boolean allClassesFound = true;
|
||||||
|
|
||||||
if (!plugin.getDescription().getVersion().startsWith("7")) {
|
if (!plugin.getDescription().getVersion().startsWith("7")) {
|
||||||
markWGIncompatible();
|
markWGIncompatible();
|
||||||
@ -111,8 +109,8 @@ public class WorldGuardUtils {
|
|||||||
Class<?> checkForClass = Class.forName(classString);
|
Class<?> checkForClass = Class.forName(classString);
|
||||||
detectedIncompatibleWG = false; //In case this was set to true previously
|
detectedIncompatibleWG = false; //In case this was set to true previously
|
||||||
} catch (ClassNotFoundException | NoClassDefFoundError e) {
|
} catch (ClassNotFoundException | NoClassDefFoundError e) {
|
||||||
allClassesFound = false;
|
// allClassesFound = false;
|
||||||
pluginRef.getLogger().severe("Missing WorldGuard class - "+classString);
|
System.out.println("[mcMMO WorldGuardUtils Debug] Missing WorldGuard class - "+classString);
|
||||||
markWGIncompatible();
|
markWGIncompatible();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -120,17 +118,17 @@ public class WorldGuardUtils {
|
|||||||
/*
|
/*
|
||||||
* If WG appears to have all of its classes we can then check to see if its been initialized properly
|
* If WG appears to have all of its classes we can then check to see if its been initialized properly
|
||||||
*/
|
*/
|
||||||
try {
|
// try {
|
||||||
if(allClassesFound) {
|
// if(allClassesFound) {
|
||||||
if(!((SimpleFlagRegistry) WorldGuard.getInstance().getFlagRegistry()).isInitialized()) {
|
// if(!((SimpleFlagRegistry) WorldGuard.getInstance().getFlagRegistry()).isInitialized()) {
|
||||||
markWGIncompatible();
|
// markWGIncompatible();
|
||||||
pluginRef.getLogger().severe("WG did not initialize properly, this can cause errors with mcMMO so mcMMO is disabling certain features.");
|
// System.out.println("[mcMMO WorldGuardUtils Debug] WG did not initialize properly, this can cause errors with mcMMO so mcMMO is disabling certain features.");
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
markWGIncompatible();
|
// markWGIncompatible();
|
||||||
e.printStackTrace();
|
// e.printStackTrace();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
return !detectedIncompatibleWG;
|
return !detectedIncompatibleWG;
|
||||||
@ -140,10 +138,14 @@ public class WorldGuardUtils {
|
|||||||
* Mark WG as being incompatible to avoid unnecessary operations
|
* Mark WG as being incompatible to avoid unnecessary operations
|
||||||
*/
|
*/
|
||||||
private void markWGIncompatible() {
|
private void markWGIncompatible() {
|
||||||
pluginRef.getLogger().severe("You are using a version of WG that is not compatible with mcMMO, " +
|
System.out.println("[mcMMO WorldGuardUtils Debug] You are using a version of WG that is not compatible with mcMMO, " +
|
||||||
"WG features for mcMMO will be disabled. mcMMO requires you to be using a new version of WG7 " +
|
"WG features for mcMMO will be disabled. mcMMO requires you to be using a new version of WG7 " +
|
||||||
"in order for it to use WG features. Not all versions of WG7 are compatible.");
|
"in order for it to use WG features. Not all versions of WG7 are compatible.");
|
||||||
pluginRef.getLogger().severe("mcMMO will continue to function normally, but if you wish to use WG support you must use a compatible version.");
|
System.out.println("[mcMMO WorldGuardUtils Debug] mcMMO will continue to function normally, but if you wish to use WG support you must use a compatible version.");
|
||||||
detectedIncompatibleWG = true;
|
detectedIncompatibleWG = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public WorldGuardManager getWorldGuardManager() {
|
||||||
|
return worldGuardManager;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ author: nossr50
|
|||||||
authors: [GJ, NuclearW, bm01, Glitchfinder, TfT_02, t00thpick1, Riking, electronicboy, kashike]
|
authors: [GJ, NuclearW, bm01, Glitchfinder, TfT_02, t00thpick1, Riking, electronicboy, kashike]
|
||||||
website: https://www.mcmmo.org
|
website: https://www.mcmmo.org
|
||||||
main: com.gmail.nossr50.mcMMO
|
main: com.gmail.nossr50.mcMMO
|
||||||
softdepend: [WorldGuard, CombatTag, HealthBar]
|
softdepend: [WorldGuard, WorldEdit, CombatTag, HealthBar]
|
||||||
load: POSTWORLD
|
load: POSTWORLD
|
||||||
api-version: 1.13
|
api-version: 1.13
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user