mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2026-02-18 17:53:00 +01:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
13e7788b14 |
@@ -20,10 +20,6 @@ Version 1.4.08-dev
|
||||
+ Added new experience bonus perk 'mcmmo.perks.xp.10percentboost.<skillname>' multiplies incoming XP by 1.1
|
||||
+ Added new experience bonus perk 'mcmmo.perks.xp.customboost.<skillname>' multiplies incoming XP by the boost amount defined in the experience config
|
||||
+ Added Ender Dragon, Wither, and Witch to combat experience multipliers - they do not give XP by default
|
||||
+ Added support for multiple mod config files, naming can be done as either armor.<modname>.yml or <modname>.armor.yml
|
||||
= Fixed bug with updating (very) old user data.
|
||||
= Fixed bug with checking maximum durability of mod items.
|
||||
= Fixed exploit involving Call of The Wild.
|
||||
= Fixed bug where LeafBlower permissions were ignored
|
||||
= Fixed bug with toggle commands not properly displaying the success message.
|
||||
= Fixed IllegalArgumentException caused by an empty Fishing treasure category
|
||||
|
||||
@@ -47,6 +47,5 @@ Required Libraries:
|
||||
* JUnit
|
||||
* EMetrics
|
||||
* Bukkit
|
||||
* TagAPI
|
||||
|
||||
http://dev.bukkit.org/server-mods/mcmmo for more up to date information.
|
||||
|
||||
12
pom.xml
12
pom.xml
@@ -116,16 +116,12 @@
|
||||
<id>Plugin MetricsExtension</id>
|
||||
<url>http://repo.turt2live.com</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>TagAPI</id>
|
||||
<url>http://repo.kitteh.org/content/repositories/public/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.bukkit</groupId>
|
||||
<artifactId>bukkit</artifactId>
|
||||
<version>1.6.4-R2.0</version>
|
||||
<version>RELEASE</version>
|
||||
<type>jar</type>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
@@ -140,12 +136,6 @@
|
||||
<artifactId>MetricsExtension</artifactId>
|
||||
<version>0.0.5-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.kitteh</groupId>
|
||||
<artifactId>tagapi</artifactId>
|
||||
<version>RELEASE</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
|
||||
@@ -30,10 +30,7 @@ public class McmmoCommand implements CommandExecutor {
|
||||
sender.sendMessage(ChatColor.GOLD + " - " + ChatColor.GREEN + "gjmcferrin@gmail.com" + ChatColor.GOLD + " Paypal");
|
||||
}
|
||||
|
||||
if (Permissions.showversion(sender)) {
|
||||
sender.sendMessage(LocaleLoader.getString("MOTD.Version", mcMMO.p.getDescription().getVersion()));
|
||||
}
|
||||
|
||||
sender.sendMessage(LocaleLoader.getString("MOTD.Version", mcMMO.p.getDescription().getVersion()));
|
||||
mcMMO.getHolidayManager().anniversaryCheck(sender);
|
||||
return true;
|
||||
|
||||
|
||||
@@ -4,10 +4,8 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.chat.PartyChatManager;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.datatypes.chat.ChatMode;
|
||||
import com.gmail.nossr50.datatypes.party.Party;
|
||||
import com.gmail.nossr50.datatypes.party.PartyFeature;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.party.PartyManager;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
@@ -30,11 +28,6 @@ public class PartyChatCommand extends ChatCommand {
|
||||
return;
|
||||
}
|
||||
|
||||
if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.CHAT)) {
|
||||
sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.1"));
|
||||
return;
|
||||
}
|
||||
|
||||
message = buildChatMessage(args, 0);
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -217,7 +217,7 @@ public class PartyCommand implements TabExecutor {
|
||||
}
|
||||
|
||||
private String[] extractArgs(String[] args) {
|
||||
return Arrays.copyOfRange(args, 1, args.length);
|
||||
return Arrays.copyOfRange(args, 1, args.length - 1);
|
||||
}
|
||||
|
||||
private boolean isItemShareCategory(String category) {
|
||||
|
||||
@@ -20,7 +20,7 @@ public class PartyHelpCommand implements CommandExecutor {
|
||||
sender.sendMessage(LocaleLoader.getString("Party.Help.7", "/party leader"));
|
||||
sender.sendMessage(LocaleLoader.getString("Party.Help.8", "/party disband"));
|
||||
sender.sendMessage(LocaleLoader.getString("Party.Help.9", "/party itemshare"));
|
||||
sender.sendMessage(LocaleLoader.getString("Party.Help.10", "/party xpshare"));
|
||||
sender.sendMessage(LocaleLoader.getString("Party.Help.10", "/party expshare"));
|
||||
return true;
|
||||
|
||||
default:
|
||||
|
||||
@@ -23,11 +23,6 @@ public class PartyAllianceAcceptCommand implements CommandExecutor {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mcMMOPlayer.getParty().getAlly() != null) {
|
||||
player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.AlreadyAllies"));
|
||||
return true;
|
||||
}
|
||||
|
||||
PartyManager.acceptAllianceInvite(mcMMOPlayer);
|
||||
return true;
|
||||
|
||||
|
||||
@@ -33,8 +33,8 @@ public class AlchemyCommand extends SkillCommand {
|
||||
AlchemyManager alchemyManager = UserManager.getPlayer(player).getAlchemyManager();
|
||||
String[] displayValues = new String[2];
|
||||
|
||||
displayValues[0] = decimal.format(alchemyManager.calculateBrewSpeed(false)) + "x";
|
||||
displayValues[1] = isLucky ? decimal.format(alchemyManager.calculateBrewSpeed(true)) + "x" : null;
|
||||
displayValues[0] = decimal.format(alchemyManager.getBrewSpeed()) + "x";
|
||||
displayValues[1] = isLucky ? decimal.format(alchemyManager.getBrewSpeedLucky()) + "x" : null;
|
||||
|
||||
return displayValues;
|
||||
}
|
||||
|
||||
@@ -376,7 +376,7 @@ public class Config extends AutoUpdateConfigLoader {
|
||||
public int getPTPCommandWarmup() { return config.getInt("Commands.ptp.Warmup", 5); }
|
||||
public int getPTPCommandRecentlyHurtCooldown() { return config.getInt("Commands.ptp.RecentlyHurt_Cooldown", 60); }
|
||||
public int getPTPCommandTimeout() { return config.getInt("Commands.ptp.Request_Timeout", 300); }
|
||||
public boolean getPTPCommandConfirmRequired() { return config.getBoolean("Commands.ptp.Accept_Required", true); }
|
||||
public boolean getPTPCommandConfirmRequired() { return config.getBoolean("Commands.ptp.Confirm_Required", true); }
|
||||
public boolean getPTPCommandWorldPermissions() { return config.getBoolean("Commands.ptp.World_Based_Permissions", false); }
|
||||
|
||||
/* Inspect command distance */
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
package com.gmail.nossr50.config.mods;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.ModManager;
|
||||
|
||||
public class ArmorConfigManager {
|
||||
public ArmorConfigManager(mcMMO plugin) {
|
||||
Pattern middlePattern = Pattern.compile("armor\\.(?:.+)\\.yml");
|
||||
Pattern startPattern = Pattern.compile("(?:.+)\\.armor\\.yml");
|
||||
File dataFolder = new File(mcMMO.getModDirectory());
|
||||
File vanilla = new File(dataFolder, "armor.default.yml");
|
||||
ModManager modManager = mcMMO.getModManager();
|
||||
|
||||
if (!vanilla.exists()) {
|
||||
plugin.saveResource(vanilla.getParentFile().getName() + File.separator + "armor.default.yml", false);
|
||||
}
|
||||
|
||||
for (String fileName : dataFolder.list()) {
|
||||
if (!middlePattern.matcher(fileName).matches() && !startPattern.matcher(fileName).matches()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
File file = new File(dataFolder, fileName);
|
||||
|
||||
if (file.isDirectory()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
modManager.registerCustomArmor(new CustomArmorConfig(fileName));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
package com.gmail.nossr50.config.mods;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.ModManager;
|
||||
|
||||
public class BlockConfigManager {
|
||||
public BlockConfigManager(mcMMO plugin) {
|
||||
Pattern middlePattern = Pattern.compile("blocks\\.(?:.+)\\.yml");
|
||||
Pattern startPattern = Pattern.compile("(?:.+)\\.blocks\\.yml");
|
||||
File dataFolder = new File(mcMMO.getModDirectory());
|
||||
File vanilla = new File(dataFolder, "blocks.default.yml");
|
||||
ModManager modManager = mcMMO.getModManager();
|
||||
|
||||
if (!vanilla.exists()) {
|
||||
plugin.saveResource(vanilla.getParentFile().getName() + File.separator + "blocks.default.yml", false);
|
||||
}
|
||||
|
||||
for (String fileName : dataFolder.list()) {
|
||||
if (!middlePattern.matcher(fileName).matches() && !startPattern.matcher(fileName).matches()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
File file = new File(dataFolder, fileName);
|
||||
|
||||
if (file.isDirectory()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
modManager.registerCustomBlocks(new CustomBlockConfig(fileName));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,22 +16,42 @@ import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
||||
import com.gmail.nossr50.skills.repair.repairables.RepairableFactory;
|
||||
|
||||
public class CustomArmorConfig extends ConfigLoader {
|
||||
private static CustomArmorConfig instance;
|
||||
|
||||
private boolean needsUpdate = false;
|
||||
|
||||
public List<Material> customBoots = new ArrayList<Material>();
|
||||
public List<Material> customChestplates = new ArrayList<Material>();
|
||||
public List<Material> customHelmets = new ArrayList<Material>();
|
||||
public List<Material> customLeggings = new ArrayList<Material>();
|
||||
private List<Repairable> repairables;
|
||||
|
||||
public List<Repairable> repairables = new ArrayList<Repairable>();
|
||||
private List<Material> customBoots = new ArrayList<Material>();
|
||||
private List<Material> customChestplates = new ArrayList<Material>();
|
||||
private List<Material> customHelmets = new ArrayList<Material>();
|
||||
private List<Material> customLeggings = new ArrayList<Material>();
|
||||
|
||||
protected CustomArmorConfig(String fileName) {
|
||||
super("mods", fileName);
|
||||
public CustomArmorConfig() {
|
||||
super("mods", "armor.yml");
|
||||
loadKeys();
|
||||
}
|
||||
|
||||
public static CustomArmorConfig getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new CustomArmorConfig();
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
public List<Repairable> getLoadedRepairables() {
|
||||
if (repairables == null) {
|
||||
return new ArrayList<Repairable>();
|
||||
}
|
||||
|
||||
return repairables;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadKeys() {
|
||||
repairables = new ArrayList<Repairable>();
|
||||
|
||||
loadArmor("Boots", customBoots);
|
||||
loadArmor("Chestplates", customChestplates);
|
||||
loadArmor("Helmets", customHelmets);
|
||||
@@ -97,4 +117,20 @@ public class CustomArmorConfig extends ConfigLoader {
|
||||
materialList.add(armorMaterial);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isCustomBoots(Material material) {
|
||||
return customBoots.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomChestplate(Material material) {
|
||||
return customChestplates.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomHelmet(Material material) {
|
||||
return customHelmets.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomLeggings(Material material) {
|
||||
return customLeggings.contains(material);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,29 +13,40 @@ import com.gmail.nossr50.config.ConfigLoader;
|
||||
import com.gmail.nossr50.datatypes.mods.CustomBlock;
|
||||
|
||||
public class CustomBlockConfig extends ConfigLoader {
|
||||
private static CustomBlockConfig instance;
|
||||
|
||||
private boolean needsUpdate = false;
|
||||
|
||||
public List<MaterialData> customExcavationBlocks = new ArrayList<MaterialData>();
|
||||
public List<MaterialData> customHerbalismBlocks = new ArrayList<MaterialData>();
|
||||
public List<MaterialData> customMiningBlocks = new ArrayList<MaterialData>();
|
||||
public List<MaterialData> customOres = new ArrayList<MaterialData>();
|
||||
public List<MaterialData> customLogs = new ArrayList<MaterialData>();
|
||||
public List<MaterialData> customLeaves = new ArrayList<MaterialData>();
|
||||
public List<MaterialData> customAbilityBlocks = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customExcavationBlocks = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customHerbalismBlocks = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customMiningBlocks = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customWoodcuttingBlocks = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customOres = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customLogs = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customLeaves = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customAbilityBlocks = new ArrayList<MaterialData>();
|
||||
|
||||
public HashMap<MaterialData, CustomBlock> customBlockMap = new HashMap<MaterialData, CustomBlock>();
|
||||
private HashMap<MaterialData, CustomBlock> customBlockMap = new HashMap<MaterialData, CustomBlock>();
|
||||
|
||||
protected CustomBlockConfig(String fileName) {
|
||||
super("mods", fileName);
|
||||
public CustomBlockConfig() {
|
||||
super("mods", "blocks.yml");
|
||||
loadKeys();
|
||||
}
|
||||
|
||||
public static CustomBlockConfig getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new CustomBlockConfig();
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadKeys() {
|
||||
loadBlocks("Excavation", customExcavationBlocks);
|
||||
loadBlocks("Herbalism", customHerbalismBlocks);
|
||||
loadBlocks("Mining", customMiningBlocks);
|
||||
loadBlocks("Woodcutting", null);
|
||||
loadBlocks("Woodcutting", customWoodcuttingBlocks);
|
||||
loadBlocks("Ability_Blocks", customAbilityBlocks);
|
||||
|
||||
if (needsUpdate) {
|
||||
@@ -74,10 +85,7 @@ public class CustomBlockConfig extends ConfigLoader {
|
||||
|
||||
byte blockData = (blockInfo.length == 2) ? Byte.valueOf(blockInfo[1]) : 0;
|
||||
MaterialData blockMaterialData = new MaterialData(blockMaterial, blockData);
|
||||
|
||||
if (blockList != null) {
|
||||
blockList.add(blockMaterialData);
|
||||
}
|
||||
blockList.add(blockMaterialData);
|
||||
|
||||
if (skillType.equals("Ability_Blocks")) {
|
||||
continue;
|
||||
@@ -103,4 +111,40 @@ public class CustomBlockConfig extends ConfigLoader {
|
||||
customBlockMap.put(blockMaterialData, new CustomBlock(xp, config.getBoolean(skillType + "." + blockName + ".Double_Drops_Enabled"), smeltingXp));
|
||||
}
|
||||
}
|
||||
|
||||
public CustomBlock getCustomBlock(MaterialData data) {
|
||||
return customBlockMap.get(data);
|
||||
}
|
||||
|
||||
public boolean isCustomOre(MaterialData data) {
|
||||
return customOres.contains(data);
|
||||
}
|
||||
|
||||
public boolean isCustomLog(MaterialData data) {
|
||||
return customLogs.contains(data);
|
||||
}
|
||||
|
||||
public boolean isCustomLeaf(MaterialData data) {
|
||||
return customLeaves.contains(data);
|
||||
}
|
||||
|
||||
public boolean isCustomAbilityBlock(MaterialData data) {
|
||||
return customAbilityBlocks.contains(data);
|
||||
}
|
||||
|
||||
public boolean isCustomExcavationBlock(MaterialData data) {
|
||||
return customExcavationBlocks.contains(data);
|
||||
}
|
||||
|
||||
public boolean isCustomHerbalismBlock(MaterialData data) {
|
||||
return customHerbalismBlocks.contains(data);
|
||||
}
|
||||
|
||||
public boolean isCustomMiningBlock(MaterialData data) {
|
||||
return customMiningBlocks.contains(data);
|
||||
}
|
||||
|
||||
public boolean isCustomWoodcuttingBlock(MaterialData data) {
|
||||
return customWoodcuttingBlocks.contains(data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.gmail.nossr50.config.mods;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.material.MaterialData;
|
||||
|
||||
import com.gmail.nossr50.config.ConfigLoader;
|
||||
@@ -11,14 +12,24 @@ import com.gmail.nossr50.datatypes.mods.CustomEntity;
|
||||
import org.apache.commons.lang.ClassUtils;
|
||||
|
||||
public class CustomEntityConfig extends ConfigLoader {
|
||||
public HashMap<String, CustomEntity> customEntityClassMap = new HashMap<String, CustomEntity>();
|
||||
public HashMap<String, CustomEntity> customEntityTypeMap = new HashMap<String, CustomEntity>();
|
||||
private static CustomEntityConfig instance;
|
||||
|
||||
protected CustomEntityConfig(String fileName) {
|
||||
super("mods", fileName);
|
||||
private HashMap<String, CustomEntity> customEntityClassMap = new HashMap<String, CustomEntity>();
|
||||
private HashMap<String, CustomEntity> customEntityTypeMap = new HashMap<String, CustomEntity>();
|
||||
|
||||
public CustomEntityConfig() {
|
||||
super("mods", "entities.yml");
|
||||
loadKeys();
|
||||
}
|
||||
|
||||
public static CustomEntityConfig getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new CustomEntityConfig();
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadKeys() {
|
||||
if (config.getConfigurationSection("Hostile") != null) {
|
||||
@@ -60,4 +71,47 @@ public class CustomEntityConfig extends ConfigLoader {
|
||||
customEntityClassMap.put(clazz == null ? null : clazz.getName(), entity);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isCustomEntity(Entity entity) {
|
||||
if (customEntityTypeMap.containsKey(entity.getType().toString())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
return customEntityClassMap.containsKey(((Class<?>) entity.getClass().getDeclaredField("entityClass").get(entity)).getName());
|
||||
}
|
||||
catch (Exception e) {
|
||||
if (e instanceof NoSuchFieldException || e instanceof IllegalArgumentException || e instanceof IllegalAccessException) {
|
||||
return customEntityClassMap.containsKey(entity.getClass().getName());
|
||||
}
|
||||
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public CustomEntity getCustomEntity(Entity entity) {
|
||||
CustomEntity customEntity = customEntityTypeMap.get(entity.getType().toString());
|
||||
|
||||
if (customEntity == null) {
|
||||
try {
|
||||
customEntity = customEntityClassMap.get(((Class<?>) entity.getClass().getDeclaredField("entityClass").get(entity)).getName());
|
||||
}
|
||||
catch (Exception e) {
|
||||
if (e instanceof NoSuchFieldException || e instanceof IllegalArgumentException || e instanceof IllegalAccessException) {
|
||||
customEntity = customEntityClassMap.get(entity.getClass().getName());
|
||||
}
|
||||
else {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return customEntity;
|
||||
}
|
||||
|
||||
public void addEntity(CustomEntity customEntity, String className, String entityName) {
|
||||
customEntityTypeMap.put(entityName, customEntity);
|
||||
customEntityClassMap.put(className, customEntity);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,26 +18,46 @@ import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
||||
import com.gmail.nossr50.skills.repair.repairables.RepairableFactory;
|
||||
|
||||
public class CustomToolConfig extends ConfigLoader {
|
||||
private static CustomToolConfig instance;
|
||||
|
||||
private boolean needsUpdate = false;
|
||||
|
||||
public List<Material> customAxes = new ArrayList<Material>();
|
||||
public List<Material> customBows = new ArrayList<Material>();
|
||||
public List<Material> customHoes = new ArrayList<Material>();
|
||||
public List<Material> customPickaxes = new ArrayList<Material>();
|
||||
public List<Material> customShovels = new ArrayList<Material>();
|
||||
public List<Material> customSwords = new ArrayList<Material>();
|
||||
private List<Repairable> repairables;
|
||||
|
||||
public HashMap<Material, CustomTool> customToolMap = new HashMap<Material, CustomTool>();
|
||||
private List<Material> customAxes = new ArrayList<Material>();
|
||||
private List<Material> customBows = new ArrayList<Material>();
|
||||
private List<Material> customHoes = new ArrayList<Material>();
|
||||
private List<Material> customPickaxes = new ArrayList<Material>();
|
||||
private List<Material> customShovels = new ArrayList<Material>();
|
||||
private List<Material> customSwords = new ArrayList<Material>();
|
||||
|
||||
public List<Repairable> repairables = new ArrayList<Repairable>();
|
||||
private HashMap<Material, CustomTool> customToolMap = new HashMap<Material, CustomTool>();
|
||||
|
||||
protected CustomToolConfig(String fileName) {
|
||||
super("mods", fileName);
|
||||
private CustomToolConfig() {
|
||||
super("mods", "tools.yml");
|
||||
loadKeys();
|
||||
}
|
||||
|
||||
public static CustomToolConfig getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new CustomToolConfig();
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
public List<Repairable> getLoadedRepairables() {
|
||||
if (repairables == null) {
|
||||
return new ArrayList<Repairable>();
|
||||
}
|
||||
|
||||
return repairables;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadKeys() {
|
||||
repairables = new ArrayList<Repairable>();
|
||||
|
||||
loadTool("Axes", customAxes);
|
||||
loadTool("Bows", customBows);
|
||||
loadTool("Hoes", customHoes);
|
||||
@@ -112,4 +132,36 @@ public class CustomToolConfig extends ConfigLoader {
|
||||
customToolMap.put(toolMaterial, tool);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isCustomAxe(Material material) {
|
||||
return customAxes.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomBow(Material material) {
|
||||
return customBows.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomHoe(Material material) {
|
||||
return customHoes.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomPickaxe(Material material) {
|
||||
return customPickaxes.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomShovel(Material material) {
|
||||
return customShovels.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomSword(Material material) {
|
||||
return customSwords.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomTool(Material material) {
|
||||
return customToolMap.containsKey(material);
|
||||
}
|
||||
|
||||
public CustomTool getCustomTool(Material material) {
|
||||
return customToolMap.get(material);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
package com.gmail.nossr50.config.mods;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.ModManager;
|
||||
|
||||
public class EntityConfigManager {
|
||||
public EntityConfigManager(mcMMO plugin) {
|
||||
Pattern middlePattern = Pattern.compile("entities\\.(?:.+)\\.yml");
|
||||
Pattern startPattern = Pattern.compile("(?:.+)\\.entities\\.yml");
|
||||
File dataFolder = new File(mcMMO.getModDirectory());
|
||||
File vanilla = new File(dataFolder, "entities.default.yml");
|
||||
ModManager modManager = mcMMO.getModManager();
|
||||
|
||||
if (!vanilla.exists()) {
|
||||
plugin.saveResource(vanilla.getParentFile().getName() + File.separator + "entities.default.yml", false);
|
||||
}
|
||||
|
||||
for (String fileName : dataFolder.list()) {
|
||||
if (!middlePattern.matcher(fileName).matches() && !startPattern.matcher(fileName).matches()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
File file = new File(dataFolder, fileName);
|
||||
|
||||
if (file.isDirectory()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
modManager.registerCustomEntities(new CustomEntityConfig(fileName));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
package com.gmail.nossr50.config.mods;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.ModManager;
|
||||
|
||||
public class ToolConfigManager {
|
||||
public ToolConfigManager(mcMMO plugin) {
|
||||
Pattern middlePattern = Pattern.compile("tools\\.(?:.+)\\.yml");
|
||||
Pattern startPattern = Pattern.compile("(?:.+)\\.tools\\.yml");
|
||||
File dataFolder = new File(mcMMO.getModDirectory());
|
||||
File vanilla = new File(dataFolder, "tools.default.yml");
|
||||
ModManager modManager = mcMMO.getModManager();
|
||||
|
||||
if (!vanilla.exists()) {
|
||||
plugin.saveResource(vanilla.getParentFile().getName() + File.separator + "tools.default.yml", false);
|
||||
}
|
||||
|
||||
for (String fileName : dataFolder.list()) {
|
||||
if (!middlePattern.matcher(fileName).matches() && !startPattern.matcher(fileName).matches()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
File file = new File(dataFolder, fileName);
|
||||
|
||||
if (file.isDirectory()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
modManager.registerCustomTools(new CustomToolConfig(fileName));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,10 @@
|
||||
package com.gmail.nossr50.config.skills.alchemy;
|
||||
package com.gmail.nossr50.config.potion;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.gmail.nossr50.skills.alchemy.Alchemy;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@@ -14,21 +13,21 @@ import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.ConfigLoader;
|
||||
import com.gmail.nossr50.datatypes.skills.alchemy.AlchemyPotion;
|
||||
import com.gmail.nossr50.datatypes.AlchemyPotion;
|
||||
|
||||
public class PotionConfig extends ConfigLoader {
|
||||
private static PotionConfig instance;
|
||||
|
||||
private List<ItemStack> concoctionsIngredientsTierOne = new ArrayList<ItemStack>();
|
||||
private List<ItemStack> concoctionsIngredientsTierTwo = new ArrayList<ItemStack>();
|
||||
private List<ItemStack> concoctionsIngredientsTierThree = new ArrayList<ItemStack>();
|
||||
private List<ItemStack> concoctionsIngredientsTierFour = new ArrayList<ItemStack>();
|
||||
private List<ItemStack> concoctionsIngredientsTierFive = new ArrayList<ItemStack>();
|
||||
private List<ItemStack> concoctionsIngredientsTierSix = new ArrayList<ItemStack>();
|
||||
private List<ItemStack> concoctionsIngredientsTierSeven = new ArrayList<ItemStack>();
|
||||
private List<ItemStack> concoctionsIngredientsTierEight = new ArrayList<ItemStack>();
|
||||
public List<ItemStack> concoctionsIngredientsTierOne = new ArrayList<ItemStack>();
|
||||
public List<ItemStack> concoctionsIngredientsTierTwo = new ArrayList<ItemStack>();
|
||||
public List<ItemStack> concoctionsIngredientsTierThree = new ArrayList<ItemStack>();
|
||||
public List<ItemStack> concoctionsIngredientsTierFour = new ArrayList<ItemStack>();
|
||||
public List<ItemStack> concoctionsIngredientsTierFive = new ArrayList<ItemStack>();
|
||||
public List<ItemStack> concoctionsIngredientsTierSix = new ArrayList<ItemStack>();
|
||||
public List<ItemStack> concoctionsIngredientsTierSeven = new ArrayList<ItemStack>();
|
||||
public List<ItemStack> concoctionsIngredientsTierEight = new ArrayList<ItemStack>();
|
||||
|
||||
private Map<Short, AlchemyPotion> potionMap = new HashMap<Short, AlchemyPotion>();
|
||||
public Map<Short, AlchemyPotion> potionMap = new HashMap<Short, AlchemyPotion>();
|
||||
|
||||
private PotionConfig() {
|
||||
super("potions.yml");
|
||||
@@ -190,34 +189,4 @@ public class PotionConfig extends ConfigLoader {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<ItemStack> getIngredients(int tier) {
|
||||
switch (tier) {
|
||||
case 8:
|
||||
return concoctionsIngredientsTierEight;
|
||||
case 7:
|
||||
return concoctionsIngredientsTierSeven;
|
||||
case 6:
|
||||
return concoctionsIngredientsTierSix;
|
||||
case 5:
|
||||
return concoctionsIngredientsTierFive;
|
||||
case 4:
|
||||
return concoctionsIngredientsTierFour;
|
||||
case 3:
|
||||
return concoctionsIngredientsTierThree;
|
||||
case 2:
|
||||
return concoctionsIngredientsTierTwo;
|
||||
case 1:
|
||||
default:
|
||||
return concoctionsIngredientsTierOne;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isValidPotion(ItemStack item) {
|
||||
return potionMap.containsKey(item.getDurability());
|
||||
}
|
||||
|
||||
public AlchemyPotion getPotion(short durability) {
|
||||
return potionMap.get(durability);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.gmail.nossr50.config.skills.repair;
|
||||
package com.gmail.nossr50.config.repair;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -96,10 +96,6 @@ public class RepairConfig extends ConfigLoader {
|
||||
// Maximum Durability
|
||||
short maximumDurability = (itemMaterial != null ? itemMaterial.getMaxDurability() : (short) config.getInt("Repairables." + key + ".MaximumDurability"));
|
||||
|
||||
if (maximumDurability <= 0) {
|
||||
maximumDurability = (short) config.getInt("Repairables." + key + ".MaximumDurability");
|
||||
}
|
||||
|
||||
if (maximumDurability <= 0) {
|
||||
reason.add("Maximum durability of " + key + " must be greater than 0!");
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.gmail.nossr50.config.skills.repair;
|
||||
package com.gmail.nossr50.config.repair;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
@@ -9,9 +9,11 @@ import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
||||
|
||||
public class RepairConfigManager {
|
||||
private final List<Repairable> repairables = new ArrayList<Repairable>();
|
||||
private List<Repairable> repairables;
|
||||
|
||||
public RepairConfigManager(mcMMO plugin) {
|
||||
repairables = new ArrayList<Repairable>();
|
||||
|
||||
Pattern pattern = Pattern.compile("repair\\.(?:.+)\\.yml");
|
||||
File dataFolder = plugin.getDataFolder();
|
||||
File vanilla = new File(dataFolder, "repair.vanilla.yml");
|
||||
@@ -32,11 +34,19 @@ public class RepairConfigManager {
|
||||
}
|
||||
|
||||
RepairConfig rConfig = new RepairConfig(fileName);
|
||||
repairables.addAll(rConfig.getLoadedRepairables());
|
||||
List<Repairable> rConfigRepairables = rConfig.getLoadedRepairables();
|
||||
|
||||
if (rConfigRepairables != null) {
|
||||
repairables.addAll(rConfigRepairables);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<Repairable> getLoadedRepairables() {
|
||||
if (repairables == null) {
|
||||
return new ArrayList<Repairable>();
|
||||
}
|
||||
|
||||
return repairables;
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,6 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
@@ -28,7 +26,6 @@ import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
|
||||
public final class FlatfileDatabaseManager implements DatabaseManager {
|
||||
private final HashMap<SkillType, List<PlayerStat>> playerStatHash = new HashMap<SkillType, List<PlayerStat>>();
|
||||
@@ -607,7 +604,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
||||
|
||||
// Length checks depend on last character being ':'
|
||||
if (line.charAt(line.length() - 1) != ':') {
|
||||
line = line.concat(":");
|
||||
line = line + ":";
|
||||
}
|
||||
String[] character = line.split(":");
|
||||
|
||||
@@ -624,33 +621,29 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
||||
|
||||
String oldVersion = null;
|
||||
|
||||
if (character.length <= 33) {
|
||||
// Introduction of HUDType
|
||||
// Version 1.1.06
|
||||
// commit 78f79213cdd7190cd11ae54526f3b4ea42078e8a
|
||||
line = line.concat(" :");
|
||||
character = line.split(":");
|
||||
oldVersion = "1.1.06";
|
||||
}
|
||||
|
||||
if (!character[33].isEmpty()) {
|
||||
// Removal of Spout Support
|
||||
// Version 1.4.07-dev2
|
||||
// commit 7bac0e2ca5143bce84dc160617fed97f0b1cb968
|
||||
line = line.replace(character[33], "");
|
||||
if (oldVersion == null) {
|
||||
oldVersion = "1.4.07";
|
||||
}
|
||||
oldVersion = "1.4.07";
|
||||
}
|
||||
|
||||
// If they're valid, rewrite them to the file.
|
||||
if (character.length == 41) {
|
||||
if (character.length > 40) {
|
||||
writer.append(line).append("\r\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
StringBuilder newLine = new StringBuilder(line);
|
||||
|
||||
if (character.length <= 33) {
|
||||
// Introduction of HUDType
|
||||
// Version 1.1.06
|
||||
// commit 78f79213cdd7190cd11ae54526f3b4ea42078e8a
|
||||
newLine.append(":");
|
||||
oldVersion = "1.1.06";
|
||||
}
|
||||
if (character.length <= 35) {
|
||||
// Introduction of Fishing
|
||||
// Version 1.2.00
|
||||
@@ -689,7 +682,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
||||
oldVersion = "1.4.06";
|
||||
}
|
||||
}
|
||||
if (character.length <= 39) {
|
||||
if (character.length <= 40) {
|
||||
// Addition of Alchemy
|
||||
// Version 1.4.08
|
||||
newLine.append("0").append(":");
|
||||
@@ -699,46 +692,6 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
||||
}
|
||||
}
|
||||
|
||||
// Remove any blanks that shouldn't be there, and validate the other fields
|
||||
String[] newCharacter = newLine.toString().split(":");
|
||||
boolean corrupted = false;
|
||||
|
||||
for (int i = 0; i < newCharacter.length; i++) {
|
||||
if (newCharacter[i].isEmpty() && !(i == 2 || i == 3 || i == 23 || i == 33)) {
|
||||
corrupted = true;
|
||||
|
||||
if (newCharacter.length != 41) {
|
||||
newCharacter = (String[]) ArrayUtils.remove(newCharacter, i);
|
||||
}
|
||||
else {
|
||||
if (i == 37) {
|
||||
newCharacter[i] = String.valueOf(System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
|
||||
}
|
||||
else if (i == 38) {
|
||||
newCharacter[i] = Config.getInstance().getMobHealthbarDefault().toString();
|
||||
}
|
||||
else {
|
||||
newCharacter[i] = "0";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isInt(newCharacter[i]) && i == 38) {
|
||||
corrupted = true;
|
||||
newCharacter[i] = Config.getInstance().getMobHealthbarDefault().toString();
|
||||
}
|
||||
|
||||
if (!StringUtils.isInt(newCharacter[i]) && !(i == 0 || i == 2 || i == 3 || i == 23 || i == 33 || i == 38)) {
|
||||
corrupted = true;
|
||||
newCharacter[i] = "0";
|
||||
}
|
||||
}
|
||||
|
||||
if (corrupted) {
|
||||
mcMMO.p.debug("Updating corrupted database line for player " + newCharacter[0]);
|
||||
newLine = new StringBuilder(org.apache.commons.lang.StringUtils.join(newCharacter, ":"));
|
||||
}
|
||||
|
||||
if (oldVersion != null) {
|
||||
mcMMO.p.debug("Updating database line for player " + character[0] + " from before version " + oldVersion);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.gmail.nossr50.datatypes.skills.alchemy;
|
||||
package com.gmail.nossr50.datatypes;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -25,27 +25,25 @@ public class AlchemyPotion {
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "AlchemyPotion{" + dataValue + ", " + name + ", Effects[" + effects.size() + "], Children[" + children.size() + "]}";
|
||||
return "AlchemyPotion{" + dataValue + "," + name + ",Effects[" + effects.size() + "], Children[" + children.size() + "]}";
|
||||
}
|
||||
|
||||
public ItemStack toItemStack() {
|
||||
return toItemStack(1);
|
||||
}
|
||||
|
||||
public ItemStack toItemStack(int amount) {
|
||||
ItemStack potion = new ItemStack(Material.POTION, amount, this.getDataValue());
|
||||
PotionMeta meta = (PotionMeta) potion.getItemMeta();
|
||||
|
||||
if (this.getName() != null) {
|
||||
meta.setDisplayName(this.getName());
|
||||
}
|
||||
|
||||
meta.setDisplayName(this.getName());
|
||||
if (this.getLore() != null && !this.getLore().isEmpty()) {
|
||||
meta.setLore(this.getLore());
|
||||
}
|
||||
|
||||
if (!this.getEffects().isEmpty()) {
|
||||
for (PotionEffect effect : this.getEffects()) {
|
||||
meta.addCustomEffect(effect, true);
|
||||
}
|
||||
}
|
||||
|
||||
potion.setItemMeta(meta);
|
||||
return potion;
|
||||
}
|
||||
@@ -47,6 +47,7 @@ import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
||||
import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
||||
import com.gmail.nossr50.util.EventUtils;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.ModUtils;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
||||
@@ -91,8 +92,6 @@ public class McMMOPlayer {
|
||||
private boolean isUsingUnarmed;
|
||||
private final FixedMetadataValue playerMetadata;
|
||||
|
||||
private String nameTag;
|
||||
|
||||
public McMMOPlayer(Player player) {
|
||||
String playerName = player.getName();
|
||||
|
||||
@@ -758,7 +757,7 @@ public class McMMOPlayer {
|
||||
xp = (float) (xp / skillType.getXpModifier() * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier());
|
||||
|
||||
if (Config.getInstance().getToolModsEnabled()) {
|
||||
CustomTool tool = mcMMO.getModManager().getTool(player.getItemInHand());
|
||||
CustomTool tool = ModUtils.getToolFromItemStack(player.getItemInHand());
|
||||
|
||||
if (tool != null) {
|
||||
xp *= tool.getXpMultiplier();
|
||||
@@ -844,7 +843,7 @@ public class McMMOPlayer {
|
||||
|
||||
ItemStack inHand = player.getItemInHand();
|
||||
|
||||
if (mcMMO.getModManager().isCustomTool(inHand) && !mcMMO.getModManager().getTool(inHand).isAbilityEnabled()) {
|
||||
if (ModUtils.isCustomTool(inHand) && !ModUtils.getToolFromItemStack(inHand).isAbilityEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -951,12 +950,4 @@ public class McMMOPlayer {
|
||||
public FixedMetadataValue getPlayerMetadata() {
|
||||
return playerMetadata;
|
||||
}
|
||||
|
||||
public String getNameTag() {
|
||||
return nameTag;
|
||||
}
|
||||
|
||||
public void setNameTag(String nameTag) {
|
||||
this.nameTag = nameTag;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ public class BlockListener implements Listener {
|
||||
public void onBlockPlace(BlockPlaceEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -144,7 +144,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||
if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -214,7 +214,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||
if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -261,7 +261,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -327,7 +327,7 @@ public class BlockListener implements Listener {
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -424,7 +424,7 @@ public class EntityListener implements Listener {
|
||||
// We can make this assumption because we (should) be the only ones using this exact metadata
|
||||
Player player = plugin.getServer().getPlayerExact(entity.getMetadata(mcMMO.tntMetadataKey).get(0).asString());
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -451,7 +451,7 @@ public class EntityListener implements Listener {
|
||||
// We can make this assumption because we (should) be the only ones using this exact metadata
|
||||
Player player = plugin.getServer().getPlayerExact(entity.getMetadata(mcMMO.tntMetadataKey).get(0).asString());
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -494,7 +494,7 @@ public class EntityListener implements Listener {
|
||||
|
||||
Player player = (Player) entity;
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -560,7 +560,7 @@ public class EntityListener implements Listener {
|
||||
Player player = (Player) event.getOwner();
|
||||
LivingEntity entity = event.getEntity();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player) || Misc.isNPCEntity(entity) || entity.hasMetadata(mcMMO.entityMetadataKey)) {
|
||||
if (Misc.isNPCEntity(player) || Misc.isNPCEntity(entity) || entity.hasMetadata(mcMMO.entityMetadataKey)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.CraftItemEvent;
|
||||
import org.bukkit.event.inventory.FurnaceBurnEvent;
|
||||
import org.bukkit.event.inventory.FurnaceExtractEvent;
|
||||
@@ -23,10 +22,8 @@ import org.bukkit.event.inventory.InventoryDragEvent;
|
||||
import org.bukkit.event.inventory.InventoryMoveItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryOpenEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.inventory.BrewerInventory;
|
||||
import org.bukkit.inventory.FurnaceInventory;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.metadata.MetadataValue;
|
||||
|
||||
@@ -35,9 +32,9 @@ import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.runnables.PlayerUpdateInventoryTask;
|
||||
import com.gmail.nossr50.skills.alchemy.Alchemy;
|
||||
import com.gmail.nossr50.skills.alchemy.AlchemyPotionBrewer;
|
||||
import com.gmail.nossr50.util.ItemUtils;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
@@ -59,7 +56,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
HumanEntity player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -76,7 +73,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
HumanEntity player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -95,7 +92,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
Player player = getPlayerFromFurnace(furnaceBlock);
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player) || !Permissions.secondaryAbilityEnabled(player, SecondaryAbility.FUEL_EFFICIENCY)) {
|
||||
if (Misc.isNPCEntity(player) || !Permissions.secondaryAbilityEnabled(player, SecondaryAbility.FUEL_EFFICIENCY)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -113,7 +110,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
Player player = getPlayerFromFurnace(furnaceBlock);
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player) || !SkillType.SMELTING.getPermissions(player)) {
|
||||
if (Misc.isNPCEntity(player) || !SkillType.SMELTING.getPermissions(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -132,7 +129,7 @@ public class InventoryListener implements Listener {
|
||||
|
||||
Player player = getPlayerFromFurnace(furnaceBlock);
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player) || !Permissions.vanillaXpBoost(player, SkillType.SMELTING)) {
|
||||
if (Misc.isNPCEntity(player) || !Permissions.vanillaXpBoost(player, SkillType.SMELTING)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -141,164 +138,43 @@ public class InventoryListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onInventoryClickEventNormal(InventoryClickEvent event) {
|
||||
Inventory inventory = event.getInventory();
|
||||
|
||||
if (!(inventory instanceof BrewerInventory)) {
|
||||
if (event.getInventory().getType() != InventoryType.BREWING || !(event.getInventory().getHolder() instanceof BrewingStand)) {
|
||||
return;
|
||||
}
|
||||
|
||||
InventoryHolder holder = inventory.getHolder();
|
||||
|
||||
if (!(holder instanceof BrewingStand)) {
|
||||
if (!(event.getWhoClicked() instanceof Player) || Misc.isNPCEntity(event.getWhoClicked()) || !Permissions.concoctions(event.getWhoClicked())) {
|
||||
return;
|
||||
}
|
||||
|
||||
HumanEntity whoClicked = event.getWhoClicked();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(event.getWhoClicked()) || !Permissions.secondaryAbilityEnabled(whoClicked, SecondaryAbility.CONCOCTIONS)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) whoClicked;
|
||||
BrewingStand stand = (BrewingStand) holder;
|
||||
ItemStack clicked = event.getCurrentItem();
|
||||
ItemStack cursor = event.getCursor();
|
||||
|
||||
if ((clicked != null && clicked.getType() == Material.POTION) || (cursor != null && cursor.getType() == Material.POTION)) {
|
||||
AlchemyPotionBrewer.scheduleCheck(player, stand);
|
||||
return;
|
||||
}
|
||||
|
||||
ClickType click = event.getClick();
|
||||
InventoryType.SlotType slot = event.getSlotType();
|
||||
|
||||
if (click.isShiftClick()) {
|
||||
switch (slot) {
|
||||
case FUEL:
|
||||
AlchemyPotionBrewer.scheduleCheck(player, stand);
|
||||
return;
|
||||
case CONTAINER:
|
||||
case QUICKBAR:
|
||||
if (!AlchemyPotionBrewer.isValidIngredient(player, clicked)) {
|
||||
return;
|
||||
}
|
||||
|
||||
AlchemyPotionBrewer.transferItems(event.getView(), event.getRawSlot(), Alchemy.INGREDIENT_SLOT, click);
|
||||
event.setCancelled(true);
|
||||
AlchemyPotionBrewer.scheduleUpdate(inventory);
|
||||
AlchemyPotionBrewer.scheduleCheck(player, stand);
|
||||
return;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (slot == InventoryType.SlotType.FUEL) {
|
||||
boolean emptyClicked = AlchemyPotionBrewer.isEmpty(clicked);
|
||||
|
||||
if (AlchemyPotionBrewer.isEmpty(cursor)) {
|
||||
if (emptyClicked && click == ClickType.NUMBER_KEY) {
|
||||
AlchemyPotionBrewer.scheduleCheck(player, stand);
|
||||
return;
|
||||
}
|
||||
|
||||
AlchemyPotionBrewer.scheduleCheck(player, stand);
|
||||
}
|
||||
else if (emptyClicked) {
|
||||
if (AlchemyPotionBrewer.isValidIngredient(player, cursor)) {
|
||||
int amount = cursor.getAmount();
|
||||
|
||||
if (click == ClickType.LEFT || (click == ClickType.RIGHT && amount == 1)) {
|
||||
event.setCancelled(true);
|
||||
event.setCurrentItem(cursor.clone());
|
||||
event.setCursor(null);
|
||||
|
||||
AlchemyPotionBrewer.scheduleUpdate(inventory);
|
||||
AlchemyPotionBrewer.scheduleCheck(player, stand);
|
||||
}
|
||||
else if (click == ClickType.RIGHT) {
|
||||
event.setCancelled(true);
|
||||
|
||||
ItemStack one = cursor.clone();
|
||||
one.setAmount(1);
|
||||
|
||||
ItemStack rest = cursor.clone();
|
||||
rest.setAmount(amount - 1);
|
||||
|
||||
event.setCurrentItem(one);
|
||||
event.setCursor(rest);
|
||||
|
||||
AlchemyPotionBrewer.scheduleUpdate(inventory);
|
||||
AlchemyPotionBrewer.scheduleCheck(player, stand);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
AlchemyPotionBrewer.handleInventoryClick(event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onInventoryDragEvent(InventoryDragEvent event) {
|
||||
Inventory inventory = event.getInventory();
|
||||
|
||||
if (!(inventory instanceof BrewerInventory)) {
|
||||
if (event.getInventory().getType() != InventoryType.BREWING || !(event.getInventory().getHolder() instanceof BrewingStand)) {
|
||||
return;
|
||||
}
|
||||
|
||||
InventoryHolder holder = inventory.getHolder();
|
||||
|
||||
if (!(holder instanceof BrewingStand)) {
|
||||
if (!(event.getWhoClicked() instanceof Player) || Misc.isNPCEntity(event.getWhoClicked()) || !Permissions.concoctions(event.getWhoClicked())) {
|
||||
return;
|
||||
}
|
||||
|
||||
HumanEntity whoClicked = event.getWhoClicked();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(event.getWhoClicked()) || !Permissions.secondaryAbilityEnabled(whoClicked, SecondaryAbility.CONCOCTIONS)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!event.getInventorySlots().contains(Alchemy.INGREDIENT_SLOT)) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack cursor = event.getCursor();
|
||||
ItemStack ingredient = ((BrewerInventory) inventory).getIngredient();
|
||||
|
||||
if (AlchemyPotionBrewer.isEmpty(ingredient) || ingredient.isSimilar(cursor)) {
|
||||
Player player = (Player) whoClicked;
|
||||
|
||||
if (AlchemyPotionBrewer.isValidIngredient(player, cursor)) {
|
||||
// Not handled: dragging custom ingredients over ingredient slot (does not trigger any event)
|
||||
AlchemyPotionBrewer.scheduleCheck(player, (BrewingStand) holder);
|
||||
return;
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
AlchemyPotionBrewer.scheduleUpdate(inventory);
|
||||
}
|
||||
AlchemyPotionBrewer.handleInventoryDrag(event);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onInventoryMoveItemEvent(InventoryMoveItemEvent event) {
|
||||
Inventory inventory = event.getDestination();
|
||||
|
||||
if (!(inventory instanceof BrewerInventory)) {
|
||||
if (event.getDestination().getType() != InventoryType.BREWING || !(event.getDestination().getHolder() instanceof BrewingStand)) {
|
||||
return;
|
||||
}
|
||||
|
||||
InventoryHolder holder = inventory.getHolder();
|
||||
|
||||
if (!(holder instanceof BrewingStand)) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack item = event.getItem();
|
||||
|
||||
if (Config.getInstance().getPreventHopperTransfer() && item.getType() != Material.POTION) {
|
||||
if (Config.getInstance().getPreventHopperTransfer() && event.getItem() != null && event.getItem().getType() != Material.POTION) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Config.getInstance().getEnabledForHoppers() && AlchemyPotionBrewer.isValidIngredient(null, item)) {
|
||||
AlchemyPotionBrewer.scheduleCheck(null, (BrewingStand) holder);
|
||||
if (Config.getInstance().getEnabledForHoppers()) {
|
||||
AlchemyPotionBrewer.handleInventoryMoveItem(event);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -311,7 +187,7 @@ public class InventoryListener implements Listener {
|
||||
public void onCraftItem(CraftItemEvent event) {
|
||||
final HumanEntity whoClicked = event.getWhoClicked();
|
||||
|
||||
if (!whoClicked.hasMetadata(mcMMO.playerDataKey)) {
|
||||
if (Misc.isNPCEntity(whoClicked) || !(whoClicked instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -58,7 +58,6 @@ import com.gmail.nossr50.util.MobHealthbarUtils;
|
||||
import com.gmail.nossr50.util.Motd;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
|
||||
public class PlayerListener implements Listener {
|
||||
@@ -81,7 +80,7 @@ public class PlayerListener implements Listener {
|
||||
public void onPlayerTeleport(PlayerTeleportEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player) || !Config.getInstance().getPreventXPAfterTeleport() || event.getFrom().equals(event.getTo())) {
|
||||
if (Misc.isNPCEntity(player) || !Config.getInstance().getPreventXPAfterTeleport() || event.getFrom().equals(event.getTo())) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -130,7 +129,7 @@ public class PlayerListener implements Listener {
|
||||
|
||||
Player killedPlayer = event.getEntity();
|
||||
|
||||
if (!killedPlayer.hasMetadata(mcMMO.playerDataKey) || Permissions.hardcoreBypass(killedPlayer)) {
|
||||
if (Misc.isNPCEntity(killedPlayer) || Permissions.hardcoreBypass(killedPlayer)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -165,7 +164,7 @@ public class PlayerListener implements Listener {
|
||||
public void onPlayerWorldChange(PlayerChangedWorldEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -208,7 +207,7 @@ public class PlayerListener implements Listener {
|
||||
public void onPlayerFishHighest(PlayerFishEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player) || !SkillType.FISHING.getPermissions(player)) {
|
||||
if (Misc.isNPCEntity(player) || !SkillType.FISHING.getPermissions(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -253,7 +252,7 @@ public class PlayerListener implements Listener {
|
||||
public void onPlayerFishMonitor(PlayerFishEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player) || !SkillType.FISHING.getPermissions(player)) {
|
||||
if (Misc.isNPCEntity(player) || !SkillType.FISHING.getPermissions(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -294,7 +293,7 @@ public class PlayerListener implements Listener {
|
||||
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -344,7 +343,7 @@ public class PlayerListener implements Listener {
|
||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -353,8 +352,7 @@ public class PlayerListener implements Listener {
|
||||
mcMMOPlayer.resetAbilityMode();
|
||||
BleedTimerTask.bleedOut(player);
|
||||
mcMMOPlayer.getProfile().save();
|
||||
UserManager.remove(player);
|
||||
ScoreboardManager.teardownPlayer(player);
|
||||
UserManager.remove(player.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -374,9 +372,7 @@ public class PlayerListener implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
McMMOPlayer mcMMOPlayer = UserManager.addUser(player);
|
||||
mcMMOPlayer.actualizeRespawnATS();
|
||||
ScoreboardManager.setupPlayer(player);
|
||||
UserManager.addUser(player).actualizeRespawnATS();
|
||||
|
||||
if (Config.getInstance().getMOTDEnabled() && Permissions.motd(player)) {
|
||||
Motd.displayAll(player);
|
||||
@@ -405,7 +401,7 @@ public class PlayerListener implements Listener {
|
||||
public void onPlayerRespawn(PlayerRespawnEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -421,7 +417,7 @@ public class PlayerListener implements Listener {
|
||||
public void onPlayerInteractLowest(PlayerInteractEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||
if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -512,7 +508,7 @@ public class PlayerListener implements Listener {
|
||||
public void onPlayerInteractMonitor(PlayerInteractEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||
if (Misc.isNPCEntity(player) || player.getGameMode() == GameMode.CREATIVE) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.gmail.nossr50.listeners;
|
||||
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
||||
import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent;
|
||||
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityActivateEvent;
|
||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||
|
||||
public class ScoreboardsListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
ScoreboardManager.setupPlayer(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||
ScoreboardManager.teardownPlayer(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerLevelUp(McMMOPlayerLevelUpEvent event) {
|
||||
ScoreboardManager.handleLevelUp(event.getPlayer(), event.getSkill());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerXp(McMMOPlayerXpGainEvent event) {
|
||||
ScoreboardManager.handleXp(event.getPlayer(), event.getSkill());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onAbility(McMMOPlayerAbilityActivateEvent event) {
|
||||
ScoreboardManager.cooldownUpdate(event.getPlayer(), event.getSkill());
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,5 @@
|
||||
package com.gmail.nossr50.listeners;
|
||||
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent;
|
||||
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityActivateEvent;
|
||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
@@ -15,27 +10,12 @@ import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
||||
public class SelfListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerLevelUp(McMMOPlayerLevelUpEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
SkillType skill = event.getSkill();
|
||||
|
||||
ScoreboardManager.handleLevelUp(player, skill);
|
||||
|
||||
if (!Config.getInstance().getLevelUpEffectsEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((event.getSkillLevel() % Config.getInstance().getLevelUpEffectsTier()) == 0) {
|
||||
skill.celebrateLevelUp(player);
|
||||
event.getSkill().celebrateLevelUp(event.getPlayer());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerXp(McMMOPlayerXpGainEvent event) {
|
||||
ScoreboardManager.handleXp(event.getPlayer(), event.getSkill());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onAbility(McMMOPlayerAbilityActivateEvent event) {
|
||||
ScoreboardManager.cooldownUpdate(event.getPlayer(), event.getSkill());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
package com.gmail.nossr50.listeners;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||
|
||||
import org.kitteh.tag.AsyncPlayerReceiveNameTagEvent;
|
||||
|
||||
public class TagListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onAsyncPlayerReceiveNameTag(AsyncPlayerReceiveNameTagEvent event) {
|
||||
Player player = event.getNamedPlayer();
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player, true);
|
||||
|
||||
if (mcMMOPlayer == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
String tag = event.getTag();
|
||||
String colorlessTag = ChatColor.stripColor(tag);
|
||||
|
||||
if (colorlessTag.equals(tag)) {
|
||||
mcMMOPlayer.setNameTag(null);
|
||||
return;
|
||||
}
|
||||
|
||||
if (colorlessTag.equals(player.getName()) && (mcMMOPlayer.getNameTag() == null || !mcMMOPlayer.getNameTag().equals(tag))) {
|
||||
mcMMOPlayer.setNameTag(tag);
|
||||
ScoreboardManager.tagUpdate(player);
|
||||
}
|
||||
|
||||
/*
|
||||
mbax:
|
||||
With TagAPI, you can set the name tag over anybody's head to any value.
|
||||
You can have five people with the name 'Notch' (And one named 'notch' for
|
||||
good measure). That makes it difficult to properly utilize the scoreboard
|
||||
feature to match a changed name to a score for below name objective display.
|
||||
|
||||
Additionally, every single player can be seeing a different username over
|
||||
the head of the same player. So even if you're just trying to detect colored usernames
|
||||
you could be encountering 16 different colors before a username (15, generally, who does white?)
|
||||
and maybe some format codes as well. The Scoreboard API doesn't support per-player setting of names,
|
||||
so you'd have to add an entry for each.
|
||||
|
||||
At best, what you could do is listen to TagAPI's event on MONITOR priority and track all the names.
|
||||
Check if a set name is the same as their actual name, sans colors. If yes, store that and each time
|
||||
you update a player's below-name objective, update an OfflinePlayer with that colored version as well.
|
||||
This is not a good idea if the objective will ever change DisplaySlot, particularly if it goes to the
|
||||
sidebar, since you'll then need to clear the color ones.
|
||||
*/
|
||||
}
|
||||
}
|
||||
@@ -14,12 +14,12 @@ import org.bukkit.plugin.java.JavaPlugin;
|
||||
import com.gmail.nossr50.config.AdvancedConfig;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.config.HiddenConfig;
|
||||
import com.gmail.nossr50.config.mods.ArmorConfigManager;
|
||||
import com.gmail.nossr50.config.mods.BlockConfigManager;
|
||||
import com.gmail.nossr50.config.mods.EntityConfigManager;
|
||||
import com.gmail.nossr50.config.mods.ToolConfigManager;
|
||||
import com.gmail.nossr50.config.skills.alchemy.PotionConfig;
|
||||
import com.gmail.nossr50.config.skills.repair.RepairConfigManager;
|
||||
import com.gmail.nossr50.config.mods.CustomArmorConfig;
|
||||
import com.gmail.nossr50.config.mods.CustomBlockConfig;
|
||||
import com.gmail.nossr50.config.mods.CustomEntityConfig;
|
||||
import com.gmail.nossr50.config.mods.CustomToolConfig;
|
||||
import com.gmail.nossr50.config.potion.PotionConfig;
|
||||
import com.gmail.nossr50.config.repair.RepairConfigManager;
|
||||
import com.gmail.nossr50.config.treasure.TreasureConfig;
|
||||
import com.gmail.nossr50.database.DatabaseManager;
|
||||
import com.gmail.nossr50.database.DatabaseManagerFactory;
|
||||
@@ -27,8 +27,8 @@ import com.gmail.nossr50.listeners.BlockListener;
|
||||
import com.gmail.nossr50.listeners.EntityListener;
|
||||
import com.gmail.nossr50.listeners.InventoryListener;
|
||||
import com.gmail.nossr50.listeners.PlayerListener;
|
||||
import com.gmail.nossr50.listeners.ScoreboardsListener;
|
||||
import com.gmail.nossr50.listeners.SelfListener;
|
||||
import com.gmail.nossr50.listeners.TagListener;
|
||||
import com.gmail.nossr50.listeners.WorldListener;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
import com.gmail.nossr50.metrics.MetricsManager;
|
||||
@@ -48,7 +48,6 @@ import com.gmail.nossr50.util.ChimaeraWing;
|
||||
import com.gmail.nossr50.util.HolidayManager;
|
||||
import com.gmail.nossr50.util.LogFilter;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.ModManager;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.blockmeta.chunkmeta.ChunkManager;
|
||||
import com.gmail.nossr50.util.blockmeta.chunkmeta.ChunkManagerFactory;
|
||||
@@ -66,7 +65,6 @@ public class mcMMO extends JavaPlugin {
|
||||
/* Managers */
|
||||
private static ChunkManager placeStore;
|
||||
private static RepairableManager repairableManager;
|
||||
private static ModManager modManager;
|
||||
private static DatabaseManager databaseManager;
|
||||
private static FormulaManager formulaManager;
|
||||
private static HolidayManager holidayManager;
|
||||
@@ -90,7 +88,6 @@ public class mcMMO extends JavaPlugin {
|
||||
private static boolean healthBarPluginEnabled;
|
||||
private static boolean noCheatPlusPluginEnabled;
|
||||
private static boolean compatNoCheatPlusPluginEnabled;
|
||||
private static boolean tagapiPluginEnabled;
|
||||
private static boolean mcpcEnabled;
|
||||
|
||||
// Config Validation Check
|
||||
@@ -113,7 +110,6 @@ public class mcMMO extends JavaPlugin {
|
||||
public final static String arrowDistanceKey = "mcMMO: Arrow Distance";
|
||||
public final static String customDamageKey = "mcMMO: Custom Damage";
|
||||
public final static String disarmedItemKey = "mcMMO: Disarmed Item";
|
||||
public final static String playerDataKey = "mcMMO: Player Data";
|
||||
|
||||
public static FixedMetadataValue metadataValue;
|
||||
|
||||
@@ -132,12 +128,9 @@ public class mcMMO extends JavaPlugin {
|
||||
healthBarPluginEnabled = getServer().getPluginManager().getPlugin("HealthBar") != null;
|
||||
noCheatPlusPluginEnabled = getServer().getPluginManager().getPlugin("NoCheatPlus") != null;
|
||||
compatNoCheatPlusPluginEnabled = getServer().getPluginManager().getPlugin("CompatNoCheatPlus") != null;
|
||||
tagapiPluginEnabled = getServer().getPluginManager().getPlugin("TagAPI") != null && checkTagVersion();
|
||||
|
||||
setupFilePaths();
|
||||
|
||||
modManager = new ModManager();
|
||||
|
||||
loadConfigFiles();
|
||||
|
||||
if (!noErrorsInConfigFiles) {
|
||||
@@ -301,10 +294,6 @@ public class mcMMO extends JavaPlugin {
|
||||
return databaseManager;
|
||||
}
|
||||
|
||||
public static ModManager getModManager() {
|
||||
return modManager;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static void setDatabaseManager(DatabaseManager databaseManager) {
|
||||
mcMMO.databaseManager = databaseManager;
|
||||
@@ -340,47 +329,15 @@ public class mcMMO extends JavaPlugin {
|
||||
|
||||
if (oldFlatfilePath.exists()) {
|
||||
if (!oldFlatfilePath.renameTo(new File(flatFileDirectory))) {
|
||||
getLogger().warning("Failed to rename FlatFileStuff to flatfile!");
|
||||
getLogger().warning("Failed to rename FlatFileStuff to flatfile !");
|
||||
}
|
||||
}
|
||||
|
||||
if (oldModPath.exists()) {
|
||||
if (!oldModPath.renameTo(new File(modDirectory))) {
|
||||
getLogger().warning("Failed to rename ModConfigs to mods!");
|
||||
getLogger().warning("Failed to rename ModConfigs to mods !");
|
||||
}
|
||||
}
|
||||
|
||||
File oldArmorFile = new File(modDirectory + "armor.yml");
|
||||
File oldBlocksFile = new File(modDirectory + "blocks.yml");
|
||||
File oldEntitiesFile = new File(modDirectory + "entities.yml");
|
||||
File oldToolsFile = new File(modDirectory + "tools.yml");
|
||||
|
||||
if (oldArmorFile.exists()) {
|
||||
if (!oldArmorFile.renameTo(new File(modDirectory + "armor.default.yml"))) {
|
||||
getLogger().warning("Failed to rename armor.yml to armor.default.yml!");
|
||||
}
|
||||
}
|
||||
|
||||
if (oldBlocksFile.exists()) {
|
||||
if (!oldBlocksFile.renameTo(new File(modDirectory + "blocks.default.yml"))) {
|
||||
getLogger().warning("Failed to rename blocks.yml to blocks.default.yml!");
|
||||
}
|
||||
}
|
||||
|
||||
if (oldEntitiesFile.exists()) {
|
||||
if (!oldEntitiesFile.renameTo(new File(modDirectory + "entities.default.yml"))) {
|
||||
getLogger().warning("Failed to rename entities.yml to entities.default.yml!");
|
||||
}
|
||||
}
|
||||
|
||||
if (oldToolsFile.exists()) {
|
||||
if (!oldToolsFile.renameTo(new File(modDirectory + "tools.default.yml"))) {
|
||||
getLogger().warning("Failed to rename tools.yml to tools.default.yml!");
|
||||
}
|
||||
}
|
||||
|
||||
File currentFlatfilePath = new File(flatFileDirectory);
|
||||
currentFlatfilePath.mkdirs();
|
||||
}
|
||||
|
||||
private void checkForUpdates() {
|
||||
@@ -416,24 +373,24 @@ public class mcMMO extends JavaPlugin {
|
||||
List<Repairable> repairables = new ArrayList<Repairable>();
|
||||
|
||||
if (Config.getInstance().getToolModsEnabled()) {
|
||||
new ToolConfigManager(this);
|
||||
repairables.addAll(CustomToolConfig.getInstance().getLoadedRepairables());
|
||||
}
|
||||
|
||||
if (Config.getInstance().getArmorModsEnabled()) {
|
||||
new ArmorConfigManager(this);
|
||||
repairables.addAll(CustomArmorConfig.getInstance().getLoadedRepairables());
|
||||
}
|
||||
|
||||
if (Config.getInstance().getBlockModsEnabled()) {
|
||||
new BlockConfigManager(this);
|
||||
CustomBlockConfig.getInstance();
|
||||
}
|
||||
|
||||
if (Config.getInstance().getEntityModsEnabled()) {
|
||||
new EntityConfigManager(this);
|
||||
CustomEntityConfig.getInstance();
|
||||
}
|
||||
|
||||
// Load repair configs, make manager, and register them at this time
|
||||
repairables.addAll(new RepairConfigManager(this).getLoadedRepairables());
|
||||
repairables.addAll(modManager.getLoadedRepairables());
|
||||
RepairConfigManager rManager = new RepairConfigManager(this);
|
||||
repairables.addAll(rManager.getLoadedRepairables());
|
||||
repairableManager = new SimpleRepairableManager(repairables.size());
|
||||
repairableManager.registerRepairables(repairables);
|
||||
}
|
||||
@@ -447,11 +404,8 @@ public class mcMMO extends JavaPlugin {
|
||||
pluginManager.registerEvents(new EntityListener(this), this);
|
||||
pluginManager.registerEvents(new InventoryListener(this), this);
|
||||
pluginManager.registerEvents(new SelfListener(), this);
|
||||
pluginManager.registerEvents(new ScoreboardsListener(), this);
|
||||
pluginManager.registerEvents(new WorldListener(this), this);
|
||||
|
||||
if (tagapiPluginEnabled) {
|
||||
pluginManager.registerEvents(new TagListener(), this);
|
||||
}
|
||||
}
|
||||
|
||||
private void registerCustomRecipes() {
|
||||
@@ -516,17 +470,4 @@ public class mcMMO extends JavaPlugin {
|
||||
getLogger().info("To enable, set Mods.Entity_Mods_Enabled to TRUE in config.yml.");
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkTagVersion() {
|
||||
try {
|
||||
Class.forName("org.kitteh.tag.AsyncPlayerReceiveNameTagEvent");
|
||||
}
|
||||
catch (final ClassNotFoundException e) {
|
||||
getLogger().info("This TagAPI version does not have AsyncPlayerReceiveNameTagEvent");
|
||||
getLogger().info("Please update TagAPI to ensure full compatibility with mcMMO");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,7 +170,7 @@ public final class PartyManager {
|
||||
*/
|
||||
public static Party getParty(String partyName) {
|
||||
for (Party party : parties) {
|
||||
if (party.getName().equalsIgnoreCase(partyName)) {
|
||||
if (party.getName().equals(partyName)) {
|
||||
return party;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.gmail.nossr50.runnables.skills;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BrewingStand;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@@ -12,6 +12,8 @@ import com.gmail.nossr50.skills.alchemy.Alchemy;
|
||||
import com.gmail.nossr50.skills.alchemy.AlchemyPotionBrewer;
|
||||
|
||||
public class AlchemyBrewCheckTask extends BukkitRunnable {
|
||||
private final static int INGREDIENT_SLOT = 3;
|
||||
|
||||
private Player player;
|
||||
private BrewingStand brewingStand;
|
||||
private ItemStack[] oldInventory;
|
||||
@@ -24,17 +26,18 @@ public class AlchemyBrewCheckTask extends BukkitRunnable {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Location location = brewingStand.getLocation();
|
||||
ItemStack[] newInventory = Arrays.copyOfRange(brewingStand.getInventory().getContents(), 0, 4);
|
||||
boolean validBrew = AlchemyPotionBrewer.isValidBrew(player, newInventory);
|
||||
Block block = brewingStand.getBlock();
|
||||
ItemStack[] newInventory = Arrays.copyOfRange(((BrewingStand) block.getState()).getInventory().getContents(), 0, 4);
|
||||
|
||||
if (Alchemy.brewingStandMap.containsKey(location)) {
|
||||
if (oldInventory[Alchemy.INGREDIENT_SLOT] == null || newInventory[Alchemy.INGREDIENT_SLOT] == null || !oldInventory[Alchemy.INGREDIENT_SLOT].isSimilar(newInventory[Alchemy.INGREDIENT_SLOT]) || !validBrew) {
|
||||
Alchemy.brewingStandMap.get(location).cancelBrew();
|
||||
if (Alchemy.brewingStandMap.containsKey(brewingStand)) {
|
||||
if (oldInventory[INGREDIENT_SLOT] == null || newInventory[INGREDIENT_SLOT] == null || !oldInventory[INGREDIENT_SLOT].isSimilar(newInventory[INGREDIENT_SLOT]) || !AlchemyPotionBrewer.isValidBrew(player, newInventory)) {
|
||||
Alchemy.brewingStandMap.get(brewingStand).cancelBrew();
|
||||
}
|
||||
}
|
||||
else if (validBrew) {
|
||||
Alchemy.brewingStandMap.put(location, new AlchemyBrewTask(brewingStand, player));
|
||||
|
||||
if (!Alchemy.brewingStandMap.containsKey(brewingStand) && AlchemyPotionBrewer.isValidBrew(player, newInventory)) {
|
||||
Alchemy.brewingStandMap.put(brewingStand, new AlchemyBrewTask(brewingStand, player));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.gmail.nossr50.runnables.skills;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.BrewingStand;
|
||||
@@ -23,43 +22,44 @@ public class AlchemyBrewTask extends BukkitRunnable {
|
||||
private static int DEFAULT_BREW_TICKS = 400;
|
||||
|
||||
private BlockState brewingStand;
|
||||
private Location location;
|
||||
private double brewSpeed;
|
||||
private double brewTimer;
|
||||
private Player player;
|
||||
|
||||
public AlchemyBrewTask(BlockState brewingStand, Player player) {
|
||||
this.brewingStand = brewingStand;
|
||||
this.location = brewingStand.getLocation();
|
||||
this.player = player;
|
||||
|
||||
brewSpeed = DEFAULT_BREW_SPEED;
|
||||
brewTimer = DEFAULT_BREW_TICKS;
|
||||
|
||||
if (player != null && !Misc.isNPCEntity(player) && Permissions.secondaryAbilityEnabled(player, SecondaryAbility.CATALYSIS)) {
|
||||
double catalysis = UserManager.getPlayer(player).getAlchemyManager().calculateBrewSpeed(Permissions.lucky(player, SkillType.ALCHEMY));
|
||||
double catalysis = UserManager.getPlayer(player).getAlchemyManager().getBrewSpeed();
|
||||
|
||||
if (Permissions.lucky(player, SkillType.ALCHEMY)) {
|
||||
catalysis = UserManager.getPlayer(player).getAlchemyManager().getBrewSpeedLucky();
|
||||
}
|
||||
|
||||
McMMOPlayerCatalysisEvent event = new McMMOPlayerCatalysisEvent(player, catalysis);
|
||||
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
brewSpeed = catalysis;
|
||||
}
|
||||
}
|
||||
|
||||
if (Alchemy.brewingStandMap.containsKey(location)) {
|
||||
Alchemy.brewingStandMap.get(location).cancel();
|
||||
if (Alchemy.brewingStandMap.containsKey(brewingStand)) {
|
||||
Alchemy.brewingStandMap.get(brewingStand).cancel();
|
||||
}
|
||||
|
||||
Alchemy.brewingStandMap.put(location, this);
|
||||
Alchemy.brewingStandMap.put(brewingStand, this);
|
||||
this.runTaskTimer(mcMMO.p, 1, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (player == null || !player.isValid() || brewingStand == null || brewingStand.getType() != Material.BREWING_STAND) {
|
||||
if (Alchemy.brewingStandMap.containsKey(location)) {
|
||||
Alchemy.brewingStandMap.remove(location);
|
||||
if (Alchemy.brewingStandMap.containsKey(brewingStand)) {
|
||||
Alchemy.brewingStandMap.remove(brewingStand);
|
||||
}
|
||||
|
||||
this.cancel();
|
||||
@@ -87,20 +87,20 @@ public class AlchemyBrewTask extends BukkitRunnable {
|
||||
AlchemyPotionBrewer.finishBrewing(brewingStand, player, false);
|
||||
}
|
||||
|
||||
Alchemy.brewingStandMap.remove(location);
|
||||
Alchemy.brewingStandMap.remove(brewingStand);
|
||||
}
|
||||
|
||||
public void finishImmediately() {
|
||||
this.cancel();
|
||||
|
||||
AlchemyPotionBrewer.finishBrewing(brewingStand, player, true);
|
||||
Alchemy.brewingStandMap.remove(location);
|
||||
Alchemy.brewingStandMap.remove(brewingStand);
|
||||
}
|
||||
|
||||
public void cancelBrew() {
|
||||
this.cancel();
|
||||
|
||||
((BrewingStand) brewingStand).setBrewingTime(-1);
|
||||
Alchemy.brewingStandMap.remove(location);
|
||||
Alchemy.brewingStandMap.remove(brewingStand);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
package com.gmail.nossr50.skills.alchemy;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.BlockState;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.AdvancedConfig;
|
||||
@@ -46,30 +44,36 @@ public final class Alchemy {
|
||||
}
|
||||
}
|
||||
|
||||
public static final int INGREDIENT_SLOT = 3;
|
||||
|
||||
public static int catalysisUnlockLevel = AdvancedConfig.getInstance().getCatalysisUnlockLevel();
|
||||
public static int catalysisMaxBonusLevel = AdvancedConfig.getInstance().getCatalysisMaxBonusLevel();
|
||||
public static double catalysisMinSpeed = AdvancedConfig.getInstance().getCatalysisMinSpeed();
|
||||
public static double catalysisMaxSpeed = AdvancedConfig.getInstance().getCatalysisMaxSpeed();
|
||||
|
||||
public static Map<Location, AlchemyBrewTask> brewingStandMap = new HashMap<Location, AlchemyBrewTask>();
|
||||
public static Map<BlockState, AlchemyBrewTask> brewingStandMap = new HashMap<BlockState, AlchemyBrewTask>();
|
||||
|
||||
private Alchemy() {}
|
||||
|
||||
/**
|
||||
* Calculate base brewing speed, given a skill level and ignoring all perks.
|
||||
*
|
||||
* @param skillLevel Skill level used for calculation.
|
||||
*
|
||||
* @return Base brewing speed for the level.
|
||||
*/
|
||||
public static double calculateBrewSpeed(int skillLevel) {
|
||||
if (skillLevel < catalysisUnlockLevel) {
|
||||
return catalysisMinSpeed;
|
||||
}
|
||||
|
||||
return Math.min(catalysisMaxSpeed, catalysisMinSpeed + (catalysisMaxSpeed - catalysisMinSpeed) * (skillLevel - catalysisUnlockLevel) / (catalysisMaxBonusLevel - catalysisUnlockLevel));
|
||||
}
|
||||
|
||||
/**
|
||||
* Finish all active brews. Used upon Disable to prevent vanilla potions from being brewed upon next Enable.
|
||||
*/
|
||||
public static void finishAllBrews() {
|
||||
mcMMO.p.debug("Completing " + brewingStandMap.size() + " unfinished Alchemy brews.");
|
||||
|
||||
List<AlchemyBrewTask> toFinish = new ArrayList<AlchemyBrewTask>();
|
||||
|
||||
for (AlchemyBrewTask alchemyBrewTask : brewingStandMap.values()) {
|
||||
toFinish.add(alchemyBrewTask);
|
||||
}
|
||||
|
||||
for (AlchemyBrewTask alchemyBrewTask : toFinish) {
|
||||
alchemyBrewTask.finishImmediately();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,15 @@ package com.gmail.nossr50.skills.alchemy;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.config.skills.alchemy.PotionConfig;
|
||||
import com.gmail.nossr50.config.potion.PotionConfig;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.skills.SkillManager;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
|
||||
public class AlchemyManager extends SkillManager {
|
||||
@@ -19,6 +20,23 @@ public class AlchemyManager extends SkillManager {
|
||||
super(mcMMOPlayer, SkillType.ALCHEMY);
|
||||
}
|
||||
|
||||
public boolean canCatalysis() {
|
||||
return Permissions.secondaryAbilityEnabled(getPlayer(), SecondaryAbility.CATALYSIS);
|
||||
}
|
||||
|
||||
public boolean canConcoctions() {
|
||||
return Permissions.secondaryAbilityEnabled(getPlayer(), SecondaryAbility.CONCOCTIONS);
|
||||
}
|
||||
|
||||
public boolean canUseIngredient(ItemStack item) {
|
||||
for (ItemStack ingredient : getIngredients()) {
|
||||
if (item.isSimilar(ingredient)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public int getTier() {
|
||||
for (Alchemy.Tier tier : Alchemy.Tier.values()) {
|
||||
if (getSkillLevel() >= tier.getLevel()) {
|
||||
@@ -30,17 +48,31 @@ public class AlchemyManager extends SkillManager {
|
||||
}
|
||||
|
||||
public List<ItemStack> getIngredients() {
|
||||
return PotionConfig.getInstance().getIngredients(getTier());
|
||||
switch (Alchemy.Tier.fromNumerical(getTier())) {
|
||||
case EIGHT:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierEight;
|
||||
case SEVEN:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierSeven;
|
||||
case SIX:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierSix;
|
||||
case FIVE:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierFive;
|
||||
case FOUR:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierFour;
|
||||
case THREE:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierThree;
|
||||
case TWO:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierTwo;
|
||||
default:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierOne;
|
||||
}
|
||||
}
|
||||
|
||||
public String getIngredientList() {
|
||||
StringBuilder list = new StringBuilder();
|
||||
|
||||
for (ItemStack ingredient : getIngredients()) {
|
||||
short durability = ingredient.getDurability();
|
||||
|
||||
String string = StringUtils.getPrettyItemString(ingredient.getType()) + (durability != 0 ? ":" + durability : "");
|
||||
|
||||
String string = StringUtils.getPrettyItemString(ingredient.getType()) + (ingredient.getDurability() != 0 ? ":" + ingredient.getDurability() : "");
|
||||
if (string.equals("Long Grass:2")) {
|
||||
string = "Fern";
|
||||
}
|
||||
@@ -48,20 +80,17 @@ public class AlchemyManager extends SkillManager {
|
||||
string = "Pufferfish";
|
||||
}
|
||||
|
||||
list.append(", ").append(string);
|
||||
list.append(", " + string);
|
||||
}
|
||||
|
||||
return list.substring(2);
|
||||
}
|
||||
|
||||
public double calculateBrewSpeed(boolean isLucky) {
|
||||
int skillLevel = getSkillLevel();
|
||||
public double getBrewSpeed() {
|
||||
return Alchemy.calculateBrewSpeed(getSkillLevel());
|
||||
}
|
||||
|
||||
if (skillLevel < Alchemy.catalysisUnlockLevel) {
|
||||
return Alchemy.catalysisMinSpeed;
|
||||
}
|
||||
|
||||
return Math.min(Alchemy.catalysisMaxSpeed, Alchemy.catalysisMinSpeed + (Alchemy.catalysisMaxSpeed - Alchemy.catalysisMinSpeed) * (skillLevel - Alchemy.catalysisUnlockLevel) / (Alchemy.catalysisMaxBonusLevel - Alchemy.catalysisUnlockLevel)) * (isLucky ? LUCKY_MODIFIER : 1.0);
|
||||
public double getBrewSpeedLucky() {
|
||||
return LUCKY_MODIFIER * Alchemy.calculateBrewSpeed(getSkillLevel());
|
||||
}
|
||||
|
||||
public void handlePotionBrewSuccesses(int amount) {
|
||||
|
||||
@@ -8,14 +8,18 @@ import org.bukkit.block.BrewingStand;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||
import org.bukkit.event.inventory.InventoryMoveItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryType.SlotType;
|
||||
import org.bukkit.inventory.BrewerInventory;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryView;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.skills.alchemy.PotionConfig;
|
||||
import com.gmail.nossr50.datatypes.skills.alchemy.AlchemyPotion;
|
||||
import com.gmail.nossr50.config.potion.PotionConfig;
|
||||
import com.gmail.nossr50.datatypes.AlchemyPotion;
|
||||
import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
||||
import com.gmail.nossr50.runnables.PlayerUpdateInventoryTask;
|
||||
import com.gmail.nossr50.runnables.skills.AlchemyBrewCheckTask;
|
||||
@@ -23,54 +27,60 @@ import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
public final class AlchemyPotionBrewer {
|
||||
private final static int[] BOTTLE_SLOTS = new int[]{0, 1, 2};
|
||||
private final static int INGREDIENT_SLOT = 3;
|
||||
|
||||
public static boolean isValidBrew(Player player, ItemStack[] contents) {
|
||||
if (!isValidIngredient(player, contents[Alchemy.INGREDIENT_SLOT])) {
|
||||
if (!isValidIngredient(player, contents[INGREDIENT_SLOT])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (contents[i] == null || contents[i].getType() != Material.POTION) {
|
||||
continue;
|
||||
}
|
||||
for (int bottle : BOTTLE_SLOTS) {
|
||||
if (contents[bottle] != null && contents[bottle].getType() == Material.POTION) {
|
||||
AlchemyPotion potion = PotionConfig.getInstance().potionMap.get(contents[bottle].getDurability());
|
||||
|
||||
if (getChildPotion(PotionConfig.getInstance().getPotion(contents[i].getDurability()), contents[Alchemy.INGREDIENT_SLOT]) != null) {
|
||||
return true;
|
||||
if (getChildPotion(potion, contents[INGREDIENT_SLOT]) != null) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
private static AlchemyPotion getChildPotion(AlchemyPotion potion, ItemStack ingredient) {
|
||||
if (potion != null && potion.getChildDataValue(ingredient) != -1) {
|
||||
return PotionConfig.getInstance().getPotion(potion.getChildDataValue(ingredient));
|
||||
return PotionConfig.getInstance().potionMap.get(potion.getChildDataValue(ingredient));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean isEmpty(ItemStack item) {
|
||||
private static boolean isEmpty(ItemStack item) {
|
||||
return item == null || item.getType() == Material.AIR || item.getAmount() == 0;
|
||||
}
|
||||
|
||||
private static boolean removeIngredient(BrewerInventory inventory, Player player) {
|
||||
ItemStack ingredient = inventory.getIngredient().clone();
|
||||
ItemStack ingredient = inventory.getIngredient();
|
||||
|
||||
if (isEmpty(ingredient) || !isValidIngredient(player, ingredient)) {
|
||||
return false;
|
||||
}
|
||||
else if (ingredient.getAmount() <= 1) {
|
||||
inventory.setIngredient(null);
|
||||
inventory.setItem(INGREDIENT_SLOT, null);
|
||||
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
ingredient.setAmount(ingredient.getAmount() - 1);
|
||||
inventory.setIngredient(ingredient);
|
||||
inventory.setItem(INGREDIENT_SLOT, ingredient);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isValidIngredient(Player player, ItemStack item) {
|
||||
private static boolean isValidIngredient(Player player, ItemStack item) {
|
||||
if (isEmpty(item)) {
|
||||
return false;
|
||||
}
|
||||
@@ -85,7 +95,28 @@ public final class AlchemyPotionBrewer {
|
||||
}
|
||||
|
||||
private static List<ItemStack> getValidIngredients(Player player) {
|
||||
return PotionConfig.getInstance().getIngredients((player == null || !Permissions.secondaryAbilityEnabled(player, SecondaryAbility.CONCOCTIONS)) ? 1 : UserManager.getPlayer(player).getAlchemyManager().getTier());
|
||||
if (player == null || !Permissions.secondaryAbilityEnabled(player, SecondaryAbility.CONCOCTIONS)) {
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierOne;
|
||||
}
|
||||
|
||||
switch (UserManager.getPlayer(player).getAlchemyManager().getTier()) {
|
||||
case 8:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierEight;
|
||||
case 7:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierSeven;
|
||||
case 6:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierSix;
|
||||
case 5:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierFive;
|
||||
case 4:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierFour;
|
||||
case 3:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierThree;
|
||||
case 2:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierTwo;
|
||||
default:
|
||||
return PotionConfig.getInstance().concoctionsIngredientsTierOne;
|
||||
}
|
||||
}
|
||||
|
||||
public static void finishBrewing(BlockState brewingStand, Player player, boolean forced) {
|
||||
@@ -100,21 +131,17 @@ public final class AlchemyPotionBrewer {
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
ItemStack item = inventory.getItem(i);
|
||||
for (int bottle : BOTTLE_SLOTS) {
|
||||
if (!isEmpty(inventory.getItem(bottle)) && PotionConfig.getInstance().potionMap.containsKey(inventory.getItem(bottle).getDurability())) {
|
||||
AlchemyPotion input = PotionConfig.getInstance().potionMap.get(inventory.getItem(bottle).getDurability());
|
||||
AlchemyPotion output = PotionConfig.getInstance().potionMap.get(input.getChildDataValue(ingredient));
|
||||
|
||||
if (isEmpty(item) || item.getType() == Material.GLASS_BOTTLE || !PotionConfig.getInstance().isValidPotion(item)) {
|
||||
continue;
|
||||
}
|
||||
if (output != null) {
|
||||
inventory.setItem(bottle, output.toItemStack(inventory.getItem(bottle).getAmount()).clone());
|
||||
|
||||
AlchemyPotion input = PotionConfig.getInstance().getPotion(item.getDurability());
|
||||
AlchemyPotion output = PotionConfig.getInstance().getPotion(input.getChildDataValue(ingredient));
|
||||
|
||||
if (output != null) {
|
||||
inventory.setItem(i, output.toItemStack(item.getAmount()).clone());
|
||||
|
||||
if (player != null) {
|
||||
UserManager.getPlayer(player).getAlchemyManager().handlePotionBrewSuccesses(1);
|
||||
if (player != null) {
|
||||
UserManager.getPlayer(player).getAlchemyManager().handlePotionBrewSuccesses(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -124,36 +151,18 @@ public final class AlchemyPotionBrewer {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean transferItems(InventoryView view, int fromSlot, int toSlot, ClickType click) {
|
||||
boolean success = false;
|
||||
|
||||
if (click.isLeftClick()) {
|
||||
success = transferItems(view, fromSlot, toSlot);
|
||||
}
|
||||
else if (click.isRightClick()) {
|
||||
success = transferOneItem(view, fromSlot, toSlot);
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
private static boolean transferOneItem(InventoryView view, int fromSlot, int toSlot) {
|
||||
ItemStack from = view.getItem(fromSlot).clone();
|
||||
ItemStack to = view.getItem(toSlot).clone();
|
||||
boolean emptyFrom = isEmpty(from);
|
||||
|
||||
if (emptyFrom) {
|
||||
if (isEmpty(from)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean emptyTo = isEmpty(to);
|
||||
int fromAmount = from.getAmount();
|
||||
|
||||
if (!emptyTo && fromAmount >= from.getType().getMaxStackSize()) {
|
||||
else if (!isEmpty(to) && from.getAmount() >= from.getType().getMaxStackSize()) {
|
||||
return false;
|
||||
}
|
||||
else if (emptyTo || from.isSimilar(to)) {
|
||||
if (emptyTo) {
|
||||
else if (isEmpty(to) || from.isSimilar(to)) {
|
||||
if (isEmpty(to)) {
|
||||
to = from.clone();
|
||||
to.setAmount(1);
|
||||
}
|
||||
@@ -161,9 +170,9 @@ public final class AlchemyPotionBrewer {
|
||||
to.setAmount(to.getAmount() + 1);
|
||||
}
|
||||
|
||||
from.setAmount(fromAmount - 1);
|
||||
view.setItem(toSlot, emptyTo ? null : to);
|
||||
view.setItem(fromSlot, emptyFrom ? null : from);
|
||||
from.setAmount(from.getAmount() - 1);
|
||||
view.setItem(toSlot, isEmpty(to) ? null : to);
|
||||
view.setItem(fromSlot, isEmpty(from) ? null : from);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -175,50 +184,166 @@ public final class AlchemyPotionBrewer {
|
||||
* Transfer items between two ItemStacks, returning the leftover status
|
||||
*/
|
||||
private static boolean transferItems(InventoryView view, int fromSlot, int toSlot) {
|
||||
ItemStack from = view.getItem(fromSlot).clone();
|
||||
ItemStack to = view.getItem(toSlot).clone();
|
||||
|
||||
if (isEmpty(from)) {
|
||||
if (isEmpty(view.getItem(fromSlot))) {
|
||||
return false;
|
||||
}
|
||||
else if (isEmpty(to)) {
|
||||
view.setItem(toSlot, from);
|
||||
else if (isEmpty(view.getItem(toSlot))) {
|
||||
view.setItem(toSlot, view.getItem(fromSlot).clone());
|
||||
view.setItem(fromSlot, null);
|
||||
|
||||
return true;
|
||||
}
|
||||
else if (from.isSimilar(to)) {
|
||||
int fromAmount = from.getAmount();
|
||||
int toAmount = to.getAmount();
|
||||
int maxSize = to.getType().getMaxStackSize();
|
||||
else if (view.getItem(fromSlot).isSimilar(view.getItem(toSlot))) {
|
||||
if (view.getItem(fromSlot).getAmount() + view.getItem(toSlot).getAmount() > view.getItem(toSlot).getType().getMaxStackSize()) {
|
||||
int left = view.getItem(fromSlot).getAmount() + view.getItem(toSlot).getAmount() - view.getItem(toSlot).getType().getMaxStackSize();
|
||||
|
||||
if (fromAmount + toAmount > maxSize) {
|
||||
int left = fromAmount + toAmount - maxSize;
|
||||
|
||||
to.setAmount(maxSize);
|
||||
ItemStack to = new ItemStack(view.getItem(toSlot));
|
||||
to.setAmount(to.getType().getMaxStackSize());
|
||||
view.setItem(toSlot, to);
|
||||
|
||||
ItemStack from = new ItemStack(view.getItem(fromSlot));
|
||||
from.setAmount(left);
|
||||
view.setItem(fromSlot, from);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
to.setAmount(fromAmount + toAmount);
|
||||
ItemStack to = new ItemStack(view.getItem(toSlot));
|
||||
to.setAmount(view.getItem(fromSlot).getAmount() + view.getItem(toSlot).getAmount());
|
||||
view.setItem(fromSlot, null);
|
||||
view.setItem(toSlot, to);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void scheduleCheck(Player player, BrewingStand brewingStand) {
|
||||
public static void handleInventoryClick(InventoryClickEvent event) {
|
||||
Player player = event.getWhoClicked() instanceof Player ? (Player) event.getWhoClicked() : null;
|
||||
BrewingStand brewingStand = (BrewingStand) event.getInventory().getHolder();
|
||||
|
||||
ItemStack cursor = event.getCursor();
|
||||
ItemStack clicked = event.getCurrentItem();
|
||||
|
||||
if (clicked != null && clicked.getType() == Material.POTION) {
|
||||
scheduleCheck(player, brewingStand);
|
||||
|
||||
return;
|
||||
}
|
||||
if (event.isShiftClick()) {
|
||||
if (event.getSlotType() == SlotType.FUEL) {
|
||||
scheduleCheck(player, brewingStand);
|
||||
|
||||
return;
|
||||
}
|
||||
else if (event.getSlotType() == SlotType.CONTAINER || event.getSlotType() == SlotType.QUICKBAR) {
|
||||
if (isValidIngredient(player, clicked)) {
|
||||
if (event.isLeftClick()) {
|
||||
transferItems(event.getView(), event.getRawSlot(), INGREDIENT_SLOT);
|
||||
}
|
||||
else if (event.isRightClick()) {
|
||||
transferOneItem(event.getView(), event.getRawSlot(), INGREDIENT_SLOT);
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
scheduleUpdate(brewingStand.getInventory());
|
||||
scheduleCheck(player, brewingStand);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (event.getRawSlot() == INGREDIENT_SLOT) {
|
||||
if (isEmpty(cursor) && isEmpty(clicked)) {
|
||||
return;
|
||||
}
|
||||
else if (isEmpty(cursor)) {
|
||||
scheduleCheck(player, brewingStand);
|
||||
|
||||
return;
|
||||
}
|
||||
else if (isEmpty(clicked)) {
|
||||
if (isValidIngredient(player, event.getCursor())) {
|
||||
if (event.getClick() == ClickType.LEFT || (event.getClick() == ClickType.RIGHT && event.getCursor().getAmount() == 1)) {
|
||||
event.setCancelled(true);
|
||||
|
||||
event.setCurrentItem(event.getCursor().clone());
|
||||
event.setCursor(null);
|
||||
|
||||
scheduleUpdate(brewingStand.getInventory());
|
||||
scheduleCheck(player, brewingStand);
|
||||
|
||||
return;
|
||||
}
|
||||
else if (event.getClick() == ClickType.RIGHT) {
|
||||
event.setCancelled(true);
|
||||
|
||||
ItemStack one = event.getCursor().clone();
|
||||
one.setAmount(1);
|
||||
|
||||
ItemStack rest = event.getCursor().clone();
|
||||
rest.setAmount(event.getCursor().getAmount() - 1);
|
||||
|
||||
event.setCurrentItem(one);
|
||||
event.setCursor(rest);
|
||||
|
||||
scheduleUpdate(brewingStand.getInventory());
|
||||
scheduleCheck(player, brewingStand);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void handleInventoryDrag(InventoryDragEvent event) {
|
||||
Player player = event.getWhoClicked() instanceof Player ? (Player) event.getWhoClicked() : null;
|
||||
BrewingStand brewingStand = (BrewingStand) event.getInventory().getHolder();
|
||||
|
||||
ItemStack cursor = event.getCursor();
|
||||
ItemStack ingredient = brewingStand.getInventory().getIngredient();
|
||||
|
||||
if (!event.getInventorySlots().contains(INGREDIENT_SLOT)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isEmpty(ingredient) || ingredient.isSimilar(cursor)) {
|
||||
if (isValidIngredient(player, cursor)) {
|
||||
// Not handled: dragging custom ingredients over ingredient slot (does not trigger any event)
|
||||
scheduleCheck(player, brewingStand);
|
||||
|
||||
return;
|
||||
}
|
||||
else {
|
||||
event.setCancelled(true);
|
||||
|
||||
scheduleUpdate(brewingStand.getInventory());
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void handleInventoryMoveItem(InventoryMoveItemEvent event) {
|
||||
Player player = null;
|
||||
BrewingStand brewingStand = (BrewingStand) event.getDestination().getHolder();
|
||||
|
||||
if (isValidIngredient(player, event.getItem())) {
|
||||
scheduleCheck(player, brewingStand);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private static void scheduleCheck(Player player, BrewingStand brewingStand) {
|
||||
new AlchemyBrewCheckTask(player, brewingStand).runTask(mcMMO.p);
|
||||
}
|
||||
|
||||
public static void scheduleUpdate(Inventory inventory) {
|
||||
private static void scheduleUpdate(Inventory inventory) {
|
||||
for (HumanEntity humanEntity : inventory.getViewers()) {
|
||||
if (humanEntity instanceof Player) {
|
||||
new PlayerUpdateInventoryTask((Player) humanEntity).runTask(mcMMO.p);
|
||||
|
||||
@@ -3,13 +3,13 @@ package com.gmail.nossr50.skills.excavation;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import org.bukkit.block.BlockState;
|
||||
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.config.treasure.TreasureConfig;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
|
||||
import com.gmail.nossr50.util.ModUtils;
|
||||
|
||||
public class Excavation {
|
||||
/**
|
||||
@@ -52,8 +52,8 @@ public class Excavation {
|
||||
protected static int getBlockXP(BlockState blockState) {
|
||||
int xp = ExperienceConfig.getInstance().getXp(SkillType.EXCAVATION, blockState.getType());
|
||||
|
||||
if (xp == 0 && mcMMO.getModManager().isCustomExcavationBlock(blockState)) {
|
||||
xp = mcMMO.getModManager().getBlock(blockState).getXpGain();
|
||||
if (xp == 0 && ModUtils.isCustomExcavationBlock(blockState)) {
|
||||
xp = ModUtils.getCustomBlock(blockState).getXpGain();
|
||||
}
|
||||
|
||||
return xp;
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.gmail.nossr50.skills.SkillManager;
|
||||
import com.gmail.nossr50.util.BlockUtils;
|
||||
import com.gmail.nossr50.util.EventUtils;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.ModUtils;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
@@ -135,8 +136,8 @@ public class HerbalismManager extends SkillManager {
|
||||
int xp;
|
||||
boolean greenTerra = mcMMOPlayer.getAbilityMode(skill.getAbility());
|
||||
|
||||
if (mcMMO.getModManager().isCustomHerbalismBlock(blockState)) {
|
||||
CustomBlock customBlock = mcMMO.getModManager().getBlock(blockState);
|
||||
if (ModUtils.isCustomHerbalismBlock(blockState)) {
|
||||
CustomBlock customBlock = ModUtils.getCustomBlock(blockState);
|
||||
xp = customBlock.getXpGain();
|
||||
|
||||
if (Permissions.secondaryAbilityEnabled(player, SecondaryAbility.HERBALISM_DOUBLE_DROPS) && customBlock.isDoubleDropEnabled()) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.gmail.nossr50.skills.mining;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@@ -9,6 +8,7 @@ import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.ModUtils;
|
||||
|
||||
public class Mining {
|
||||
|
||||
@@ -21,8 +21,8 @@ public class Mining {
|
||||
Material blockType = blockState.getType();
|
||||
int xp = ExperienceConfig.getInstance().getXp(SkillType.MINING, blockType != Material.GLOWING_REDSTONE_ORE ? blockType : Material.REDSTONE_ORE);
|
||||
|
||||
if (xp == 0 && mcMMO.getModManager().isCustomMiningBlock(blockState)) {
|
||||
xp = mcMMO.getModManager().getBlock(blockState).getXpGain();
|
||||
if (xp == 0 && ModUtils.isCustomMiningBlock(blockState)) {
|
||||
xp = ModUtils.getCustomBlock(blockState).getXpGain();
|
||||
}
|
||||
|
||||
return xp;
|
||||
@@ -65,7 +65,7 @@ public class Mining {
|
||||
return;
|
||||
|
||||
default:
|
||||
if (mcMMO.getModManager().isCustomMiningBlock(blockState)) {
|
||||
if (ModUtils.isCustomMiningBlock(blockState)) {
|
||||
Misc.dropItem(blockState.getLocation(), blockState.getData().toItemStack(1));
|
||||
}
|
||||
return;
|
||||
@@ -104,7 +104,7 @@ public class Mining {
|
||||
return;
|
||||
|
||||
default:
|
||||
if (mcMMO.getModManager().isCustomMiningBlock(blockState)) {
|
||||
if (ModUtils.isCustomMiningBlock(blockState)) {
|
||||
Misc.dropItems(blockState.getLocation(), blockState.getBlock().getDrops());
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.gmail.nossr50.skills.mining.BlastMining.Tier;
|
||||
import com.gmail.nossr50.util.BlockUtils;
|
||||
import com.gmail.nossr50.util.EventUtils;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.ModUtils;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
|
||||
@@ -69,7 +70,7 @@ public class MiningManager extends SkillManager {
|
||||
SkillUtils.handleDurabilityChange(getPlayer().getItemInHand(), Config.getInstance().getAbilityToolDamage());
|
||||
}
|
||||
|
||||
if ((mcMMO.getModManager().isCustomMiningBlock(blockState) && !mcMMO.getModManager().getBlock(blockState).isDoubleDropEnabled()) || material != Material.GLOWING_REDSTONE_ORE && !Config.getInstance().getDoubleDropsEnabled(skill, material)) {
|
||||
if ((ModUtils.isCustomMiningBlock(blockState) && !ModUtils.getCustomBlock(blockState).isDoubleDropEnabled()) || material != Material.GLOWING_REDSTONE_ORE && !Config.getInstance().getDoubleDropsEnabled(skill, material)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -90,15 +90,7 @@ public class RepairManager extends SkillManager {
|
||||
Material repairMaterial = repairable.getRepairMaterial();
|
||||
byte repairMaterialMetadata = repairable.getRepairMaterialMetadata();
|
||||
ItemStack toRemove = new MaterialData(repairMaterial, repairMaterialMetadata).toItemStack(1);
|
||||
|
||||
short startDurability = item.getDurability();
|
||||
|
||||
// Do not repair if at full durability
|
||||
if (startDurability <= 0) {
|
||||
player.sendMessage(LocaleLoader.getString("Repair.Skills.FullDurability"));
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if they have the proper material to repair with
|
||||
if (!inventory.contains(repairMaterial)) {
|
||||
String message = LocaleLoader.getString("Skills.NeedMore", StringUtils.getPrettyItemString(repairMaterial));
|
||||
@@ -111,6 +103,14 @@ public class RepairManager extends SkillManager {
|
||||
return;
|
||||
}
|
||||
|
||||
short startDurability = item.getDurability();
|
||||
|
||||
// Do not repair if at full durability
|
||||
if (startDurability <= 0) {
|
||||
player.sendMessage(LocaleLoader.getString("Repair.Skills.FullDurability"));
|
||||
return;
|
||||
}
|
||||
|
||||
// Do not repair stacked items
|
||||
if (item.getAmount() != 1) {
|
||||
player.sendMessage(LocaleLoader.getString("Repair.Skills.StackedItems"));
|
||||
|
||||
@@ -6,6 +6,7 @@ import java.util.List;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
|
||||
public class SimpleRepairableManager implements RepairableManager {
|
||||
private HashMap<Material, Repairable> repairables;
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.gmail.nossr50.skills.smelting;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.material.MaterialData;
|
||||
@@ -8,6 +7,7 @@ import org.bukkit.material.MaterialData;
|
||||
import com.gmail.nossr50.config.AdvancedConfig;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.util.ModUtils;
|
||||
|
||||
public class Smelting {
|
||||
// The order of the values is extremely important, a few methods depend on it to work properly
|
||||
@@ -50,6 +50,6 @@ public class Smelting {
|
||||
MaterialData data = smelting.getData();
|
||||
Material resourceType = smelting.getType();
|
||||
|
||||
return mcMMO.getModManager().isCustomOre(data) ? mcMMO.getModManager().getBlock(data).getSmeltingXpGain() : ExperienceConfig.getInstance().getXp(SkillType.SMELTING, resourceType != Material.GLOWING_REDSTONE_ORE ? resourceType : Material.REDSTONE_ORE);
|
||||
return ModUtils.isCustomOre(data) ? ModUtils.getCustomBlock(data).getSmeltingXpGain() : ExperienceConfig.getInstance().getXp(SkillType.SMELTING, resourceType != Material.GLOWING_REDSTONE_ORE ? resourceType : Material.REDSTONE_ORE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,7 +260,7 @@ public class TamingManager extends SkillManager {
|
||||
}
|
||||
}
|
||||
|
||||
player.setItemInHand(heldItemAmount == summonAmount ? null : new ItemStack(heldItem.getType(), heldItemAmount - summonAmount));
|
||||
player.setItemInHand(new ItemStack(heldItem.getType(), heldItemAmount - summonAmount));
|
||||
player.sendMessage(LocaleLoader.getString("Taming.Summon.Complete"));
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.util.BlockUtils;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.ModUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
|
||||
public final class Woodcutting {
|
||||
@@ -51,8 +52,8 @@ public final class Woodcutting {
|
||||
break;
|
||||
}
|
||||
|
||||
if (mcMMO.getModManager().isCustomLog(blockState)) {
|
||||
return mcMMO.getModManager().getBlock(blockState).getXpGain();
|
||||
if (ModUtils.isCustomLogBlock(blockState)) {
|
||||
return ModUtils.getCustomBlock(blockState).getXpGain();
|
||||
}
|
||||
|
||||
switch (((Tree) blockState.getData()).getSpecies()) {
|
||||
@@ -85,7 +86,7 @@ public final class Woodcutting {
|
||||
* @param blockState Block being broken
|
||||
*/
|
||||
protected static void checkForDoubleDrop(BlockState blockState) {
|
||||
if (mcMMO.getModManager().isCustomLog(blockState) && mcMMO.getModManager().getBlock(blockState).isDoubleDropEnabled()) {
|
||||
if (ModUtils.isCustomLogBlock(blockState) && ModUtils.getCustomBlock(blockState).isDoubleDropEnabled()) {
|
||||
Misc.dropItems(blockState.getLocation(), blockState.getBlock().getDrops());
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.gmail.nossr50.skills.woodcutting;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
@@ -23,6 +22,7 @@ import com.gmail.nossr50.skills.woodcutting.Woodcutting.ExperienceGainMethod;
|
||||
import com.gmail.nossr50.util.EventUtils;
|
||||
import com.gmail.nossr50.util.ItemUtils;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.ModUtils;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.skills.CombatUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
@@ -126,18 +126,18 @@ public class WoodcuttingManager extends SkillManager {
|
||||
xp += Woodcutting.getExperienceFromLog(blockState, ExperienceGainMethod.TREE_FELLER);
|
||||
Misc.dropItems(blockState.getLocation(), block.getDrops());
|
||||
}
|
||||
else if (mcMMO.getModManager().isCustomLog(blockState)) {
|
||||
else if (ModUtils.isCustomLogBlock(blockState)) {
|
||||
if (canGetDoubleDrops()) {
|
||||
Woodcutting.checkForDoubleDrop(blockState);
|
||||
}
|
||||
|
||||
CustomBlock customBlock = mcMMO.getModManager().getBlock(blockState);
|
||||
CustomBlock customBlock = ModUtils.getCustomBlock(blockState);
|
||||
xp = customBlock.getXpGain();
|
||||
|
||||
Misc.dropItems(blockState.getLocation(), block.getDrops());
|
||||
}
|
||||
else if (mcMMO.getModManager().isCustomLeaf(blockState)) {
|
||||
Misc.dropItems(blockState.getLocation(), block.getDrops());
|
||||
else if (ModUtils.isCustomLeafBlock(blockState)) {
|
||||
Misc.randomDropItems(blockState.getLocation(), block.getDrops(), 10.0);
|
||||
}
|
||||
else {
|
||||
Tree tree = (Tree) blockState.getData();
|
||||
|
||||
@@ -2,7 +2,6 @@ package com.gmail.nossr50.util;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import org.bukkit.CropState;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NetherWartsState;
|
||||
@@ -65,7 +64,7 @@ public final class BlockUtils {
|
||||
return false;
|
||||
|
||||
default:
|
||||
return !isMcMMOAnvil(blockState) && !mcMMO.getModManager().isCustomAbilityBlock(blockState);
|
||||
return !isMcMMOAnvil(blockState) && !ModUtils.isCustomAbilityBlock(blockState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,7 +135,7 @@ public final class BlockUtils {
|
||||
return ((CocoaPlant) blockState.getData()).getSize() == CocoaPlantSize.LARGE;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomHerbalismBlock(blockState);
|
||||
return ModUtils.isCustomHerbalismBlock(blockState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,7 +157,7 @@ public final class BlockUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return isOre(blockState) || mcMMO.getModManager().isCustomMiningBlock(blockState);
|
||||
return isOre(blockState) || ModUtils.isCustomMiningBlock(blockState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,7 +181,7 @@ public final class BlockUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomExcavationBlock(blockState);
|
||||
return ModUtils.isCustomExcavationBlock(blockState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,7 +199,7 @@ public final class BlockUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomLog(blockState);
|
||||
return ModUtils.isCustomLogBlock(blockState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,7 +215,7 @@ public final class BlockUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomLeaf(blockState);
|
||||
return ModUtils.isCustomLeafBlock(blockState);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,9 @@ import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.material.Dye;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.config.mods.CustomArmorConfig;
|
||||
import com.gmail.nossr50.config.mods.CustomToolConfig;
|
||||
import com.gmail.nossr50.config.party.ItemWeightConfig;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
|
||||
@@ -30,7 +33,7 @@ public final class ItemUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomBow(type);
|
||||
return (Config.getInstance().getToolModsEnabled() && CustomToolConfig.getInstance().isCustomBow(type));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,7 +55,7 @@ public final class ItemUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomSword(type);
|
||||
return (Config.getInstance().getToolModsEnabled() && CustomToolConfig.getInstance().isCustomSword(type));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +77,7 @@ public final class ItemUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomHoe(type);
|
||||
return (Config.getInstance().getToolModsEnabled() && CustomToolConfig.getInstance().isCustomHoe(type));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +99,7 @@ public final class ItemUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomShovel(type);
|
||||
return (Config.getInstance().getToolModsEnabled() && CustomToolConfig.getInstance().isCustomShovel(type));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +121,7 @@ public final class ItemUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomAxe(type);
|
||||
return (Config.getInstance().getToolModsEnabled() && CustomToolConfig.getInstance().isCustomAxe(type));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,7 +143,7 @@ public final class ItemUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomPickaxe(type);
|
||||
return (Config.getInstance().getToolModsEnabled() && CustomToolConfig.getInstance().isCustomPickaxe(type));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,7 +165,7 @@ public final class ItemUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomHelmet(type);
|
||||
return Config.getInstance().getArmorModsEnabled() && CustomArmorConfig.getInstance().isCustomHelmet(type);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -184,7 +187,7 @@ public final class ItemUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomChestplate(type);
|
||||
return Config.getInstance().getArmorModsEnabled() && CustomArmorConfig.getInstance().isCustomChestplate(type);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,7 +209,7 @@ public final class ItemUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomLeggings(type);
|
||||
return Config.getInstance().getArmorModsEnabled() && CustomArmorConfig.getInstance().isCustomLeggings(type);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -228,7 +231,7 @@ public final class ItemUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomBoots(type);
|
||||
return Config.getInstance().getArmorModsEnabled() && CustomArmorConfig.getInstance().isCustomBoots(type);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.gmail.nossr50.util;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import org.bukkit.material.MaterialData;
|
||||
|
||||
public final class MaterialUtils {
|
||||
@@ -20,7 +19,7 @@ public final class MaterialUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return mcMMO.getModManager().isCustomOre(data);
|
||||
return ModUtils.isCustomOre(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,10 +149,11 @@ public final class Misc {
|
||||
}
|
||||
|
||||
public static void profileCleanup(String playerName) {
|
||||
UserManager.remove(playerName);
|
||||
|
||||
Player player = mcMMO.p.getServer().getPlayerExact(playerName);
|
||||
|
||||
if (player != null) {
|
||||
UserManager.remove(player);
|
||||
UserManager.addUser(player);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ public final class MobHealthbarUtils {
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
return ModUtils.isCustomBossEntity(livingEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,283 +0,0 @@
|
||||
package com.gmail.nossr50.util;
|
||||
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.config.mods.CustomArmorConfig;
|
||||
import com.gmail.nossr50.config.mods.CustomBlockConfig;
|
||||
import com.gmail.nossr50.config.mods.CustomEntityConfig;
|
||||
import com.gmail.nossr50.config.mods.CustomToolConfig;
|
||||
import com.gmail.nossr50.datatypes.mods.CustomBlock;
|
||||
import com.gmail.nossr50.datatypes.mods.CustomEntity;
|
||||
import com.gmail.nossr50.datatypes.mods.CustomTool;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.material.MaterialData;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class ModManager {
|
||||
private List<Repairable> repairables = new ArrayList<Repairable>();
|
||||
|
||||
// Armor Mods
|
||||
private List<Material> customBoots = new ArrayList<Material>();
|
||||
private List<Material> customChestplates = new ArrayList<Material>();
|
||||
private List<Material> customHelmets = new ArrayList<Material>();
|
||||
private List<Material> customLeggings = new ArrayList<Material>();
|
||||
|
||||
// Block Mods
|
||||
private List<MaterialData> customExcavationBlocks = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customHerbalismBlocks = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customMiningBlocks = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customOres = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customLogs = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customLeaves = new ArrayList<MaterialData>();
|
||||
private List<MaterialData> customAbilityBlocks = new ArrayList<MaterialData>();
|
||||
private HashMap<MaterialData, CustomBlock> customBlockMap = new HashMap<MaterialData, CustomBlock>();
|
||||
|
||||
// Entity Mods
|
||||
private HashMap<String, CustomEntity> customEntityClassMap = new HashMap<String, CustomEntity>();
|
||||
private HashMap<String, CustomEntity> customEntityTypeMap = new HashMap<String, CustomEntity>();
|
||||
|
||||
// Tool Mods
|
||||
private List<Material> customAxes = new ArrayList<Material>();
|
||||
private List<Material> customBows = new ArrayList<Material>();
|
||||
private List<Material> customHoes = new ArrayList<Material>();
|
||||
private List<Material> customPickaxes = new ArrayList<Material>();
|
||||
private List<Material> customShovels = new ArrayList<Material>();
|
||||
private List<Material> customSwords = new ArrayList<Material>();
|
||||
private HashMap<Material, CustomTool> customToolMap = new HashMap<Material, CustomTool>();
|
||||
|
||||
public void registerCustomArmor(CustomArmorConfig config) {
|
||||
customBoots.addAll(config.customBoots);
|
||||
customChestplates.addAll(config.customChestplates);
|
||||
customHelmets.addAll(config.customHelmets);
|
||||
customLeggings.addAll(config.customLeggings);
|
||||
repairables.addAll(config.repairables);
|
||||
}
|
||||
|
||||
public void registerCustomBlocks(CustomBlockConfig config) {
|
||||
customExcavationBlocks.addAll(config.customExcavationBlocks);
|
||||
customHerbalismBlocks.addAll(config.customHerbalismBlocks);
|
||||
customMiningBlocks.addAll(config.customMiningBlocks);
|
||||
customOres.addAll(config.customOres);
|
||||
customLogs.addAll(config.customLogs);
|
||||
customLeaves.addAll(config.customLeaves);
|
||||
customAbilityBlocks.addAll(config.customAbilityBlocks);
|
||||
customBlockMap.putAll(config.customBlockMap);
|
||||
}
|
||||
|
||||
public void registerCustomEntities(CustomEntityConfig config) {
|
||||
customEntityClassMap.putAll(config.customEntityClassMap);
|
||||
customEntityTypeMap.putAll(config.customEntityTypeMap);
|
||||
}
|
||||
|
||||
public void registerCustomTools(CustomToolConfig config) {
|
||||
customAxes.addAll(config.customAxes);
|
||||
customBows.addAll(config.customBows);
|
||||
customHoes.addAll(config.customHoes);
|
||||
customPickaxes.addAll(config.customPickaxes);
|
||||
customShovels.addAll(config.customShovels);
|
||||
customSwords.addAll(config.customSwords);
|
||||
customToolMap.putAll(config.customToolMap);
|
||||
repairables.addAll(config.repairables);
|
||||
}
|
||||
|
||||
public boolean isCustomBoots(Material material) {
|
||||
return Config.getInstance().getArmorModsEnabled() && customBoots.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomChestplate(Material material) {
|
||||
return Config.getInstance().getArmorModsEnabled() && customChestplates.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomHelmet(Material material) {
|
||||
return Config.getInstance().getArmorModsEnabled() && customHelmets.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomLeggings(Material material) {
|
||||
return Config.getInstance().getArmorModsEnabled() && customLeggings.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomAxe(Material material) {
|
||||
return Config.getInstance().getToolModsEnabled() && customAxes.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomBow(Material material) {
|
||||
return Config.getInstance().getToolModsEnabled() && customBows.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomHoe(Material material) {
|
||||
return Config.getInstance().getToolModsEnabled() && customHoes.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomPickaxe(Material material) {
|
||||
return Config.getInstance().getToolModsEnabled() && customPickaxes.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomShovel(Material material) {
|
||||
return Config.getInstance().getToolModsEnabled() && customShovels.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomSword(Material material) {
|
||||
return Config.getInstance().getToolModsEnabled() && customSwords.contains(material);
|
||||
}
|
||||
|
||||
public boolean isCustomOre(MaterialData data) {
|
||||
return Config.getInstance().getBlockModsEnabled() && customOres.contains(data);
|
||||
}
|
||||
|
||||
public boolean isCustomLog(BlockState state) {
|
||||
return Config.getInstance().getBlockModsEnabled() && customLogs.contains(state.getData());
|
||||
}
|
||||
|
||||
public boolean isCustomLeaf(BlockState state) {
|
||||
return Config.getInstance().getBlockModsEnabled() && customLeaves.contains(state.getData());
|
||||
}
|
||||
|
||||
public boolean isCustomAbilityBlock(BlockState state) {
|
||||
return Config.getInstance().getBlockModsEnabled() && customAbilityBlocks.contains(state.getData());
|
||||
}
|
||||
|
||||
public boolean isCustomExcavationBlock(BlockState state) {
|
||||
return Config.getInstance().getBlockModsEnabled() && customExcavationBlocks.contains(state.getData());
|
||||
}
|
||||
|
||||
public boolean isCustomHerbalismBlock(BlockState state) {
|
||||
return Config.getInstance().getBlockModsEnabled() && customHerbalismBlocks.contains(state.getData());
|
||||
}
|
||||
|
||||
public boolean isCustomMiningBlock(BlockState state) {
|
||||
return Config.getInstance().getBlockModsEnabled() && customMiningBlocks.contains(state.getData());
|
||||
}
|
||||
|
||||
public CustomBlock getBlock(BlockState state) {
|
||||
return customBlockMap.get(state.getData());
|
||||
}
|
||||
|
||||
public CustomBlock getBlock(MaterialData data) {
|
||||
return customBlockMap.get(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to see if an item is a custom tool.
|
||||
*
|
||||
* @param item Item to check
|
||||
* @return true if the item is a custom tool, false otherwise
|
||||
*/
|
||||
public boolean isCustomTool(ItemStack item) {
|
||||
return Config.getInstance().getToolModsEnabled() && item != null && customToolMap.containsKey(item.getType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the custom tool associated with an item.
|
||||
*
|
||||
* @param item The item to check
|
||||
* @return the tool if it exists, null otherwise
|
||||
*/
|
||||
public CustomTool getTool(ItemStack item) {
|
||||
return item == null ? null : customToolMap.get(item.getType());
|
||||
}
|
||||
|
||||
public List<Repairable> getLoadedRepairables() {
|
||||
return repairables;
|
||||
}
|
||||
|
||||
public boolean isCustomEntity(Entity entity) {
|
||||
if (!Config.getInstance().getEntityModsEnabled()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (customEntityTypeMap.containsKey(entity.getType().toString())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
return customEntityClassMap.containsKey(((Class<?>) entity.getClass().getDeclaredField("entityClass").get(entity)).getName());
|
||||
}
|
||||
catch (Exception e) {
|
||||
if (e instanceof NoSuchFieldException || e instanceof IllegalArgumentException || e instanceof IllegalAccessException) {
|
||||
return customEntityClassMap.containsKey(entity.getClass().getName());
|
||||
}
|
||||
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public CustomEntity getEntity(Entity entity) {
|
||||
CustomEntity customEntity = customEntityTypeMap.get(entity.getType().toString());
|
||||
|
||||
if (customEntity == null) {
|
||||
try {
|
||||
customEntity = customEntityClassMap.get(((Class<?>) entity.getClass().getDeclaredField("entityClass").get(entity)).getName());
|
||||
}
|
||||
catch (Exception e) {
|
||||
if (e instanceof NoSuchFieldException || e instanceof IllegalArgumentException || e instanceof IllegalAccessException) {
|
||||
customEntity = customEntityClassMap.get(entity.getClass().getName());
|
||||
}
|
||||
else {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return customEntity;
|
||||
}
|
||||
|
||||
public void addCustomEntity(Entity entity) {
|
||||
if (!Config.getInstance().getEntityModsEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
File entityFile = new File(mcMMO.p.getDataFolder(), "mods" + File.separator + "entities.default.yml");
|
||||
YamlConfiguration entitiesFile = YamlConfiguration.loadConfiguration(entityFile);
|
||||
|
||||
String entityName = entity.getType().toString();
|
||||
String sanitizedEntityName = entityName.replace(".", "_");
|
||||
|
||||
if (entitiesFile.getKeys(false).contains(sanitizedEntityName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
entitiesFile.set(sanitizedEntityName + ".XP_Multiplier", 1.0D);
|
||||
entitiesFile.set(sanitizedEntityName + ".Tameable", false);
|
||||
entitiesFile.set(sanitizedEntityName + ".Taming_XP", 0);
|
||||
entitiesFile.set(sanitizedEntityName + ".CanBeSummoned", false);
|
||||
entitiesFile.set(sanitizedEntityName + ".COTW_Material", "");
|
||||
entitiesFile.set(sanitizedEntityName + ".COTW_Material_Data", 0);
|
||||
entitiesFile.set(sanitizedEntityName + ".COTW_Material_Amount", 0);
|
||||
|
||||
String className = "";
|
||||
|
||||
try {
|
||||
className = ((Class<?>) entity.getClass().getDeclaredField("entityClass").get(entity)).getName();
|
||||
}
|
||||
catch (Exception e) {
|
||||
if (e instanceof NoSuchFieldException || e instanceof IllegalArgumentException || e instanceof IllegalAccessException) {
|
||||
className = entity.getClass().getName();
|
||||
}
|
||||
else {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
CustomEntity customEntity = new CustomEntity(1.0D, false, 0, false, null, 0);
|
||||
customEntityTypeMap.put(entityName, customEntity);
|
||||
customEntityClassMap.put(className, customEntity);
|
||||
|
||||
try {
|
||||
entitiesFile.save(entityFile);
|
||||
mcMMO.p.debug(entity.getType().toString() + " was added to the custom entities file!");
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
213
src/main/java/com/gmail/nossr50/util/ModUtils.java
Normal file
213
src/main/java/com/gmail/nossr50/util/ModUtils.java
Normal file
@@ -0,0 +1,213 @@
|
||||
package com.gmail.nossr50.util;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.material.MaterialData;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.config.mods.CustomBlockConfig;
|
||||
import com.gmail.nossr50.config.mods.CustomEntityConfig;
|
||||
import com.gmail.nossr50.config.mods.CustomToolConfig;
|
||||
import com.gmail.nossr50.datatypes.mods.CustomBlock;
|
||||
import com.gmail.nossr50.datatypes.mods.CustomEntity;
|
||||
import com.gmail.nossr50.datatypes.mods.CustomTool;
|
||||
|
||||
public final class ModUtils {
|
||||
private static boolean customToolsEnabled = Config.getInstance().getToolModsEnabled();
|
||||
private static boolean customBlocksEnabled = Config.getInstance().getBlockModsEnabled();
|
||||
private static boolean customEntitiesEnabled = Config.getInstance().getEntityModsEnabled();
|
||||
|
||||
private ModUtils() {}
|
||||
|
||||
/**
|
||||
* Get the custom tool associated with an item.
|
||||
*
|
||||
* @param item The item to check
|
||||
* @return the tool if it exists, null otherwise
|
||||
*/
|
||||
public static CustomTool getToolFromItemStack(ItemStack item) {
|
||||
return CustomToolConfig.getInstance().getCustomTool(item.getType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the custom entity associated with an entity.
|
||||
*
|
||||
* @param entity The entity to check
|
||||
* @return the entity is if exists, null otherwise
|
||||
*/
|
||||
public static CustomEntity getCustomEntity(Entity entity) {
|
||||
return CustomEntityConfig.getInstance().getCustomEntity(entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the custom block associated with an block.
|
||||
*
|
||||
* @param blockState The BlockState of the bloc to check
|
||||
* @return the block if it exists, null otherwise
|
||||
*/
|
||||
public static CustomBlock getCustomBlock(BlockState blockState) {
|
||||
return CustomBlockConfig.getInstance().getCustomBlock(blockState.getData());
|
||||
}
|
||||
|
||||
public static CustomBlock getCustomBlock(MaterialData data) {
|
||||
return CustomBlockConfig.getInstance().getCustomBlock(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a custom block is a woodcutting block.
|
||||
*
|
||||
* @param blockState The BlockState of the block to check
|
||||
* @return true if the block represents a custom woodcutting block, false otherwise
|
||||
*/
|
||||
public static boolean isCustomWoodcuttingBlock(BlockState blockState) {
|
||||
return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomWoodcuttingBlock(blockState.getData());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a custom block should not activate abilites.
|
||||
*
|
||||
* @param blockState The BlockState of the block to check
|
||||
* @return true if the block represents an ability block, false otherwise
|
||||
*/
|
||||
public static boolean isCustomAbilityBlock(BlockState blockState) {
|
||||
return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomAbilityBlock(blockState.getData());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a custom block is a mining block.
|
||||
*
|
||||
* @param blockState The BlockState of the block to check
|
||||
* @return true if the block represents a custom mining block, false otherwise
|
||||
*/
|
||||
public static boolean isCustomMiningBlock(BlockState blockState) {
|
||||
return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomMiningBlock(blockState.getData());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a custom block is an excavation block.
|
||||
*
|
||||
* @param blockState The BlockState of the block to check
|
||||
* @return true if the block represents a custom excavation block, false otherwise
|
||||
*/
|
||||
public static boolean isCustomExcavationBlock(BlockState blockState) {
|
||||
return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomExcavationBlock(blockState.getData());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a custom block is an herbalism block.
|
||||
*
|
||||
* @param blockState The BlockState of the block to check
|
||||
* @return true if the block represents a custom herbalism block, false otherwise
|
||||
*/
|
||||
public static boolean isCustomHerbalismBlock(BlockState blockState) {
|
||||
return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomHerbalismBlock(blockState.getData());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a custom block is a leaf block.
|
||||
*
|
||||
* @param blockState The BlockState of the block to check
|
||||
* @return true if the block represents leaves, false otherwise
|
||||
*/
|
||||
public static boolean isCustomLeafBlock(BlockState blockState) {
|
||||
return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomLeaf(blockState.getData());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a custom block is a log block.
|
||||
*
|
||||
* @param blockState The BlockState of the block to check
|
||||
* @return true if the block represents a log, false otherwise
|
||||
*/
|
||||
public static boolean isCustomLogBlock(BlockState blockState) {
|
||||
return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomLog(blockState.getData());
|
||||
}
|
||||
|
||||
public static boolean isCustomOre(MaterialData data) {
|
||||
return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomOre(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to see if an item is a custom tool.
|
||||
*
|
||||
* @param item Item to check
|
||||
* @return true if the item is a custom tool, false otherwise
|
||||
*/
|
||||
public static boolean isCustomTool(ItemStack item) {
|
||||
return customToolsEnabled && CustomToolConfig.getInstance().isCustomTool(item.getType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to see if an entity is a custom entity.
|
||||
*
|
||||
* @param entity Entity to check
|
||||
* @return true if the entity is a custom entity, false otherwise
|
||||
*/
|
||||
public static boolean isCustomEntity(Entity entity) {
|
||||
return customEntitiesEnabled && CustomEntityConfig.getInstance().isCustomEntity(entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a custom entity is a boss.
|
||||
*
|
||||
* @param entity The entity to check
|
||||
* @return true if the entity represents a boss, false otherwise
|
||||
*/
|
||||
public static boolean isCustomBossEntity(Entity entity) {
|
||||
//TODO: Finish this method
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void addCustomEntity(Entity entity) {
|
||||
if (!customEntitiesEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
File entityFile = CustomEntityConfig.getInstance().getFile();
|
||||
YamlConfiguration entitiesFile = YamlConfiguration.loadConfiguration(entityFile);
|
||||
|
||||
String entityName = entity.getType().toString();
|
||||
String sanitizedEntityName = entityName.replace(".", "_");
|
||||
|
||||
if (entitiesFile.getKeys(false).contains(sanitizedEntityName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
entitiesFile.set(sanitizedEntityName + ".XP_Multiplier", 1.0D);
|
||||
entitiesFile.set(sanitizedEntityName + ".Tameable", false);
|
||||
entitiesFile.set(sanitizedEntityName + ".Taming_XP", 0);
|
||||
entitiesFile.set(sanitizedEntityName + ".CanBeSummoned", false);
|
||||
entitiesFile.set(sanitizedEntityName + ".COTW_Material", "");
|
||||
entitiesFile.set(sanitizedEntityName + ".COTW_Material_Data", 0);
|
||||
entitiesFile.set(sanitizedEntityName + ".COTW_Material_Amount", 0);
|
||||
|
||||
String className = "";
|
||||
|
||||
try {
|
||||
className = ((Class<?>) entity.getClass().getDeclaredField("entityClass").get(entity)).getName();
|
||||
}
|
||||
catch (Exception e) {
|
||||
if (e instanceof NoSuchFieldException || e instanceof IllegalArgumentException || e instanceof IllegalAccessException) {
|
||||
className = entity.getClass().getName();
|
||||
}
|
||||
else {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
CustomEntityConfig.getInstance().addEntity(new CustomEntity(1.0D, false, 0, false, null, 0), className, entityName);
|
||||
|
||||
try {
|
||||
entitiesFile.save(entityFile);
|
||||
mcMMO.p.debug(entity.getType().toString() + " was added to the custom entities file!");
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -34,9 +34,7 @@ public final class Motd {
|
||||
* @param version Plugin version
|
||||
*/
|
||||
public static void displayVersion(Player player, String version) {
|
||||
if (Permissions.showversion(player)) {
|
||||
player.sendMessage(LocaleLoader.getString("MOTD.Version", version));
|
||||
}
|
||||
player.sendMessage(LocaleLoader.getString("MOTD.Version", version));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -25,7 +25,6 @@ public final class Permissions {
|
||||
public static boolean mobHealthDisplay(Permissible permissible) { return permissible.hasPermission("mcmmo.mobhealthdisplay"); }
|
||||
public static boolean updateNotifications(Permissible permissible) {return permissible.hasPermission("mcmmo.tools.updatecheck"); }
|
||||
public static boolean chimaeraWing(Permissible permissible) { return permissible.hasPermission("mcmmo.item.chimaerawing"); }
|
||||
public static boolean showversion(Permissible permissible) { return permissible.hasPermission("mcmmo.showversion"); }
|
||||
|
||||
/* BYPASS */
|
||||
public static boolean hardcoreBypass(Permissible permissible) { return permissible.hasPermission("mcmmo.bypass.hardcoremode"); }
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.blockmeta.conversion.BlockStoreConversionZDirectory;
|
||||
|
||||
public class HashChunkManager implements ChunkManager {
|
||||
private static final int FILE_VERSION = 1;
|
||||
private HashMap<UUID, HashMap<Long, McMMOSimpleRegionFile>> regionFiles = new HashMap<UUID, HashMap<Long, McMMOSimpleRegionFile>>();
|
||||
public HashMap<String, ChunkStore> store = new HashMap<String, ChunkStore>();
|
||||
public ArrayList<BlockStoreConversionZDirectory> converters = new ArrayList<BlockStoreConversionZDirectory>();
|
||||
@@ -120,7 +121,21 @@ public class HashChunkManager implements ChunkManager {
|
||||
McMMOSimpleRegionFile regionFile = worldRegions.get(key2);
|
||||
|
||||
if (regionFile == null) {
|
||||
File file = new File(directory, "mcmmo_" + rx + "_" + rz + "_.mcm");
|
||||
// Pre-Versioned files in negative chunks were being saved/tracked with incorrect chunk numbers
|
||||
int xLegacy = (x < -1) ? (x + 1) >> 5 : rx;
|
||||
int zLegacy = (z < -1) ? (z + 1) >> 5 : rz;
|
||||
File legacy = new File(directory, "mcmmo_" + xLegacy + "_" + zLegacy + "_.mcm");
|
||||
File file = new File(directory, "mcmmo_" + rx + "_" + rz + "_.v" + FILE_VERSION + ".mcm");
|
||||
// If the legacy file exists, rename it and the loading will convert it properly
|
||||
if (legacy.isFile()) {
|
||||
// The center 4 chunks are unusable so we don't preserve them
|
||||
if (!((rx == 0 || rx == -1) && (rz == 0 || rz == -1))) {
|
||||
if (!legacy.renameTo(file)) {
|
||||
mcMMO.p.debug(String.format("Lost Legacy ChunkStore for %d %d", rx, rz));
|
||||
}
|
||||
}
|
||||
legacy.delete();
|
||||
}
|
||||
regionFile = new McMMOSimpleRegionFile(file, rx, rz);
|
||||
worldRegions.put(key2, regionFile);
|
||||
}
|
||||
@@ -293,8 +308,8 @@ public class HashChunkManager implements ChunkManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
int cx = x / 16;
|
||||
int cz = z / 16;
|
||||
int cx = (x < 0 ? x - 16 : x) >> 4 << 4;
|
||||
int cz = (z < 0 ? z - 16 : z) >> 4 << 4;
|
||||
String key = world.getName() + "," + cx + "," + cz;
|
||||
|
||||
if (!store.containsKey(key)) {
|
||||
@@ -336,8 +351,8 @@ public class HashChunkManager implements ChunkManager {
|
||||
return;
|
||||
}
|
||||
|
||||
int cx = x / 16;
|
||||
int cz = z / 16;
|
||||
int cx = (x < 0 ? x - 16 : x) >> 4 << 4;
|
||||
int cz = (z < 0 ? z - 16 : z) >> 4 << 4;
|
||||
|
||||
int ix = Math.abs(x) % 16;
|
||||
int iz = Math.abs(z) % 16;
|
||||
@@ -382,8 +397,8 @@ public class HashChunkManager implements ChunkManager {
|
||||
return;
|
||||
}
|
||||
|
||||
int cx = x / 16;
|
||||
int cz = z / 16;
|
||||
int cx = (x < 0 ? x - 16 : x) >> 4 << 4;
|
||||
int cz = (z < 0 ? z - 16 : z) >> 4 << 4;
|
||||
|
||||
int ix = Math.abs(x) % 16;
|
||||
int iz = Math.abs(z) % 16;
|
||||
|
||||
@@ -15,7 +15,7 @@ public class PrimitiveChunkStore implements ChunkStore {
|
||||
transient private boolean dirty = false;
|
||||
/** X, Z, Y */
|
||||
public boolean[][][] store;
|
||||
private static final int CURRENT_VERSION = 7;
|
||||
private static final int CURRENT_VERSION = 8;
|
||||
private static final int MAGIC_NUMBER = 0xEA5EDEBB;
|
||||
private int cx;
|
||||
private int cz;
|
||||
@@ -132,6 +132,16 @@ public class PrimitiveChunkStore implements ChunkStore {
|
||||
fixArray();
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
if (fileVersionNumber == 7 && cx < 0) {
|
||||
cx--;
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
if (fileVersionNumber == 7 && cz < 0) {
|
||||
cz--;
|
||||
dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void fixArray() {
|
||||
|
||||
@@ -191,10 +191,10 @@ public final class CommandUtils {
|
||||
|
||||
public static String displaySkill(PlayerProfile profile, SkillType skill) {
|
||||
if (skill.isChildSkill()) {
|
||||
return LocaleLoader.getString("Skills.ChildStats", LocaleLoader.getString(StringUtils.getCapitalized(skill.toString()) + ".Listener") + " ", profile.getSkillLevel(skill));
|
||||
return LocaleLoader.getString("Skills.ChildStats", LocaleLoader.getString(StringUtils.getCapitalized(skill.toString()) + ".Listener"), " ", profile.getSkillLevel(skill));
|
||||
}
|
||||
|
||||
return LocaleLoader.getString("Skills.Stats", LocaleLoader.getString(StringUtils.getCapitalized(skill.toString()) + ".Listener") + " ", profile.getSkillLevel(skill), profile.getSkillXpLevel(skill), profile.getXpToLevel(skill));
|
||||
return LocaleLoader.getString("Skills.Stats", LocaleLoader.getString(StringUtils.getCapitalized(skill.toString()) + ".Listener"), " ", profile.getSkillLevel(skill), profile.getSkillXpLevel(skill), profile.getXpToLevel(skill));
|
||||
}
|
||||
|
||||
private static void printGroupedSkillData(Player inspect, CommandSender display, String header, List<SkillType> skillGroup) {
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
package com.gmail.nossr50.util.player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
|
||||
public final class UserManager {
|
||||
private final static Map<String, McMMOPlayer> players = new HashMap<String, McMMOPlayer>();
|
||||
|
||||
private UserManager() {}
|
||||
|
||||
@@ -24,8 +23,16 @@ public final class UserManager {
|
||||
* @return the player's {@link McMMOPlayer} object
|
||||
*/
|
||||
public static McMMOPlayer addUser(Player player) {
|
||||
McMMOPlayer mcMMOPlayer = new McMMOPlayer(player);
|
||||
player.setMetadata(mcMMO.playerDataKey, new FixedMetadataValue(mcMMO.p, mcMMOPlayer));
|
||||
String playerName = player.getName();
|
||||
McMMOPlayer mcMMOPlayer = players.get(playerName);
|
||||
|
||||
if (mcMMOPlayer != null) {
|
||||
mcMMOPlayer.setPlayer(player); // The player object is different on each reconnection and must be updated
|
||||
}
|
||||
else {
|
||||
mcMMOPlayer = new McMMOPlayer(player);
|
||||
players.put(playerName, mcMMOPlayer);
|
||||
}
|
||||
|
||||
return mcMMOPlayer;
|
||||
}
|
||||
@@ -33,51 +40,35 @@ public final class UserManager {
|
||||
/**
|
||||
* Remove a user.
|
||||
*
|
||||
* @param player The Player object
|
||||
* @param playerName The name of the player to remove
|
||||
*/
|
||||
public static void remove(Player player) {
|
||||
player.removeMetadata(mcMMO.playerDataKey, mcMMO.p);
|
||||
public static void remove(String playerName) {
|
||||
players.remove(playerName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all users.
|
||||
*/
|
||||
public static void clearAll() {
|
||||
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
||||
remove(player);
|
||||
}
|
||||
players.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Save all users.
|
||||
*/
|
||||
public static void saveAll() {
|
||||
Player[] onlinePlayers = mcMMO.p.getServer().getOnlinePlayers();
|
||||
mcMMO.p.debug("Saving mcMMOPlayers... (" + onlinePlayers.length + ")");
|
||||
|
||||
for (Player player : onlinePlayers) {
|
||||
getPlayer(player).getProfile().save();
|
||||
mcMMO.p.debug("Saving mcMMOPlayers... (" + players.size() + ")");
|
||||
for (McMMOPlayer mcMMOPlayer : players.values()) {
|
||||
mcMMOPlayer.getProfile().save();
|
||||
}
|
||||
}
|
||||
|
||||
public static Set<String> getPlayerNames() {
|
||||
Set<String> playerNames = new HashSet<String>();
|
||||
|
||||
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
||||
playerNames.add(player.getName());
|
||||
}
|
||||
|
||||
return playerNames;
|
||||
return players.keySet();
|
||||
}
|
||||
|
||||
public static Collection<McMMOPlayer> getPlayers() {
|
||||
Collection<McMMOPlayer> playerCollection = new ArrayList<McMMOPlayer>();
|
||||
|
||||
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
||||
playerCollection.add(getPlayer(player));
|
||||
}
|
||||
|
||||
return playerCollection;
|
||||
return players.values();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -97,16 +88,10 @@ public final class UserManager {
|
||||
* @return the player's McMMOPlayer object
|
||||
*/
|
||||
public static McMMOPlayer getPlayer(OfflinePlayer player) {
|
||||
if (player instanceof Player) {
|
||||
return getPlayer((Player) player);
|
||||
}
|
||||
return retrieveMcMMOPlayer(player.getName(), false);
|
||||
}
|
||||
|
||||
public static McMMOPlayer getPlayer(OfflinePlayer player, boolean offlineValid) {
|
||||
if (player instanceof Player) {
|
||||
return getPlayer((Player) player);
|
||||
}
|
||||
return retrieveMcMMOPlayer(player.getName(), offlineValid);
|
||||
}
|
||||
|
||||
@@ -114,29 +99,24 @@ public final class UserManager {
|
||||
return retrieveMcMMOPlayer(playerName, offlineValid);
|
||||
}
|
||||
|
||||
public static McMMOPlayer getPlayer(Player player) {
|
||||
return (McMMOPlayer) player.getMetadata(mcMMO.playerDataKey).get(0).value();
|
||||
}
|
||||
|
||||
private static McMMOPlayer retrieveMcMMOPlayer(String playerName, boolean offlineValid) {
|
||||
Player player = mcMMO.p.getServer().getPlayerExact(playerName);
|
||||
McMMOPlayer mcMMOPlayer = players.get(playerName);
|
||||
|
||||
if (player == null) {
|
||||
if (!offlineValid) {
|
||||
mcMMO.p.getLogger().warning("A valid mcMMOPlayer object could not be found for " + playerName + ".");
|
||||
if (mcMMOPlayer == null) {
|
||||
Player player = mcMMO.p.getServer().getPlayerExact(playerName);
|
||||
|
||||
if (player == null) {
|
||||
if (!offlineValid) {
|
||||
mcMMO.p.getLogger().warning("A valid mcMMOPlayer object could not be found for " + playerName + ".");
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
mcMMOPlayer = new McMMOPlayer(player);
|
||||
players.put(playerName, mcMMOPlayer);
|
||||
}
|
||||
|
||||
return getPlayer(player);
|
||||
}
|
||||
|
||||
public static boolean hasPlayerDataKey(Entity entity) {
|
||||
if (entity == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return entity.hasMetadata(mcMMO.playerDataKey);
|
||||
return mcMMOPlayer;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -224,15 +224,6 @@ public class ScoreboardManager {
|
||||
}
|
||||
}
|
||||
|
||||
// Called by internal TagAPI event listener
|
||||
public static void tagUpdate(Player player) {
|
||||
String playerName = player.getName();
|
||||
|
||||
if (Config.getInstance().getPowerLevelTagsEnabled() && !dirtyPowerLevels.contains(playerName)) {
|
||||
dirtyPowerLevels.add(playerName);
|
||||
}
|
||||
}
|
||||
|
||||
// **** Setup methods **** //
|
||||
|
||||
public static void enablePlayerSkillScoreboard(Player player, SkillType skill) {
|
||||
@@ -351,10 +342,6 @@ public class ScoreboardManager {
|
||||
|
||||
for (ScoreboardWrapper wrapper : PLAYER_SCOREBOARDS.values()) {
|
||||
wrapper.updatePowerLevel(player, power);
|
||||
|
||||
if (mcMMOPlayer.getNameTag() != null) {
|
||||
wrapper.updatePowerLevel(mcMMO.p.getServer().getOfflinePlayer(mcMMOPlayer.getNameTag()), power);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
@@ -559,8 +558,4 @@ public class ScoreboardWrapper {
|
||||
public void updatePowerLevel(Player player, int newPowerLevel) {
|
||||
powerObjective.getScore(player).setScore(newPowerLevel);
|
||||
}
|
||||
|
||||
public void updatePowerLevel(OfflinePlayer offlinePlayer, int newPowerLevel) {
|
||||
powerObjective.getScore(offlinePlayer).setScore(newPowerLevel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ import com.gmail.nossr50.util.EventUtils;
|
||||
import com.gmail.nossr50.util.ItemUtils;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.MobHealthbarUtils;
|
||||
import com.gmail.nossr50.util.ModUtils;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
|
||||
@@ -197,7 +198,7 @@ public final class CombatUtils {
|
||||
if (attacker instanceof Player && entityType == EntityType.PLAYER) {
|
||||
Player player = (Player) attacker;
|
||||
|
||||
if (!UserManager.hasPlayerDataKey(player)) {
|
||||
if (Misc.isNPCEntity(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -420,8 +421,8 @@ public final class CombatUtils {
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (mcMMO.getModManager().isCustomEntity(target)) {
|
||||
baseXP = mcMMO.getModManager().getEntity(target).getXpMultiplier();
|
||||
if (ModUtils.isCustomEntity(target)) {
|
||||
baseXP = ModUtils.getCustomEntity(target).getXpMultiplier();
|
||||
}
|
||||
else if (target instanceof Animals) {
|
||||
baseXP = ExperienceConfig.getInstance().getAnimalsXP();
|
||||
@@ -472,7 +473,7 @@ public final class CombatUtils {
|
||||
|
||||
default:
|
||||
baseXP = 1.0;
|
||||
mcMMO.getModManager().addCustomEntity(target);
|
||||
ModUtils.addCustomEntity(target);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -608,8 +609,8 @@ public final class CombatUtils {
|
||||
else if (ItemUtils.isDiamondTool(inHand)) {
|
||||
tier = 4;
|
||||
}
|
||||
else if (mcMMO.getModManager().isCustomTool(inHand)) {
|
||||
tier = mcMMO.getModManager().getTool(inHand).getTier();
|
||||
else if (ModUtils.isCustomTool(inHand)) {
|
||||
tier = ModUtils.getToolFromItemStack(inHand).getTier();
|
||||
}
|
||||
|
||||
return tier;
|
||||
|
||||
@@ -523,7 +523,7 @@ Commands.Party.Alliance.Invite.0=[[RED]]ALERT: [[GREEN]]You have received a part
|
||||
Commands.Party.Alliance.Invite.1=[[YELLOW]]Type [[GREEN]]/party alliance accept[[YELLOW]] to accept the invite
|
||||
Commands.Party.Alliance.Invite.Accepted=[[GREEN]]Alliance invite Accepted.
|
||||
Commands.Party.Alliance.None=[[RED]]Your does not have an ally.
|
||||
Commands.Party.Alliance.AlreadyAllies=[[RED]]Your party already has an ally. Disband with [[DARK_AQUA]]/party alliance disband
|
||||
Commands.Party.Alliance.AlreadyAllies=[[RED]]Your party already has an ally.
|
||||
Commands.Party.Alliance.Help.0=[[RED]]This party hasn't formed an alliance. Invite a party leader
|
||||
Commands.Party.Alliance.Help.1=[[RED]] to an alliance with [[DARK_AQUA]]/party alliance invite <player>[[RED]].
|
||||
Commands.ptp.Enabled=Party teleporting [[GREEN]]enabled
|
||||
|
||||
@@ -1937,9 +1937,6 @@ permissions:
|
||||
children:
|
||||
mcmmo.ability.woodcutting.all: true
|
||||
mcmmo.commands.woodcutting: true
|
||||
mcmmo.showversion:
|
||||
default: true
|
||||
description: Show mcMMO version number in /mcmmo and motd
|
||||
mcmmo.tools.*:
|
||||
default: false
|
||||
description: Implies all mcmmo.tools permissions.
|
||||
|
||||
@@ -66,7 +66,7 @@ Potions:
|
||||
0: # Water Bottle
|
||||
Children:
|
||||
BLAZE_POWDER: 8192 # Mundane Potion
|
||||
FERMENTED_SPIDER_EYE: 8200 # Potion of Weakness
|
||||
FERMENTED_SPIDER_EYE: 4616 # Potion of Weakness
|
||||
GHAST_TEAR: 8192 # Mundane Potion
|
||||
GLOWSTONE_DUST: 32 # Thick Potion
|
||||
MAGMA_CREAM: 8192 # Mundane Potion
|
||||
@@ -79,70 +79,76 @@ Potions:
|
||||
16: # Awkward Potion
|
||||
Children:
|
||||
APPLE: 5376 # Potion of Health Boost
|
||||
BLAZE_POWDER: 8201 # Potion of Strength
|
||||
BLAZE_POWDER: 1289 # Potion of Strength
|
||||
BROWN_MUSHROOM: 2304 # Potion of Nausea
|
||||
CARROT_ITEM: 768 # Potion of Haste
|
||||
FERMENTED_SPIDER_EYE: 8200 # Potion of Weakness
|
||||
GHAST_TEAR: 8193 # Potion of Regeneration
|
||||
FERMENTED_SPIDER_EYE: 4616 # Potion of Weakness
|
||||
GHAST_TEAR: 2561 # Potion of Regeneration
|
||||
'GOLDEN_APPLE:0': 2816 # Potion of Resistance
|
||||
GOLDEN_CARROT: 8198 # Potion of Night Vision
|
||||
GOLDEN_CARROT: 4102 # Potion of Night Vision
|
||||
'INK_SACK:0': 3840 # Potion of Blindness
|
||||
'LONG_GRASS:2': 5888 # Potion of Saturation
|
||||
MAGMA_CREAM: 8195 # Potion of Fire Resistance
|
||||
MAGMA_CREAM: 3075 # Potion of Fire Resistance
|
||||
POISONOUS_POTATO: 5120 # Potion of Decay
|
||||
QUARTZ: 5632 # Potion of Absorption
|
||||
RED_MUSHROOM: 2048 # Potion of Leaping
|
||||
ROTTEN_FLESH: 4352 # Potion of Hunger
|
||||
SLIME_BALL: 1024 # Potion of Dullness
|
||||
SPECKLED_MELON: 8197 # Potion of Healing
|
||||
SPIDER_EYE: 8196 # Potion of Poison
|
||||
SUGAR: 8194 # Potion of Swiftness
|
||||
WATER_LILY: 8205 # Potion of Water Breathing (Minecraft 1.6)
|
||||
'RAW_FISH:3': 8205 # Potion of Water Breathing (Minecraft 1.7)
|
||||
SPECKLED_MELON: 1541 # Potion of Healing
|
||||
SPIDER_EYE: 4868 # Potion of Poison
|
||||
SUGAR: 258 # Potion of Swiftness
|
||||
WATER_LILY: 3341 # Potion of Water Breathing (Minecraft 1.6)
|
||||
'RAW_FISH:3': 3341 # Potion of Water Breathing (Minecraft 1.7)
|
||||
|
||||
32: # Thick Potion
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8200
|
||||
FERMENTED_SPIDER_EYE: 4616
|
||||
|
||||
64: # Mundane Potion Extended
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8264
|
||||
FERMENTED_SPIDER_EYE: 4680
|
||||
|
||||
8192: # Mundane Potion
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8200
|
||||
FERMENTED_SPIDER_EYE: 4616
|
||||
SULPHUR: 16384
|
||||
|
||||
### DRINKABLE POTIONS ######################################################
|
||||
|
||||
8194: # Potion of Swiftness
|
||||
258: # Potion of Swiftness
|
||||
Effects: ["SPEED 0 3600"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8202
|
||||
GLOWSTONE_DUST: 8226
|
||||
REDSTONE: 8258
|
||||
SULPHUR: 16386
|
||||
8226: # Potion of Swiftness II
|
||||
FERMENTED_SPIDER_EYE: 522
|
||||
GLOWSTONE_DUST: 290
|
||||
REDSTONE: 322
|
||||
SULPHUR: 16642
|
||||
290: # Potion of Swiftness II
|
||||
Effects: ["SPEED 1 1800"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8266
|
||||
REDSTONE: 8258
|
||||
SULPHUR: 16418
|
||||
8258: # Potion of Swiftness Extended
|
||||
FERMENTED_SPIDER_EYE: 586
|
||||
REDSTONE: 322
|
||||
SULPHUR: 16642
|
||||
322: # Potion of Swiftness Extended
|
||||
Effects: ["SPEED 0 9600"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8202
|
||||
GLOWSTONE_DUST: 8226
|
||||
SULPHUR: 16450
|
||||
FERMENTED_SPIDER_EYE: 522
|
||||
GLOWSTONE_DUST: 290
|
||||
SULPHUR: 16706
|
||||
|
||||
8202: # Potion of Slowness
|
||||
522: # Potion of Slowness
|
||||
Effects: ["SLOW 0 1800"]
|
||||
Children:
|
||||
REDSTONE: 8266
|
||||
SULPHUR: 16394
|
||||
8266: # Potion of Slowness Extended
|
||||
REDSTONE: 586
|
||||
SULPHUR: 16906
|
||||
586: # Potion of Slowness Extended
|
||||
Effects: ["SLOW 0 4800"]
|
||||
Children:
|
||||
GLOWSTONE_DUST: 8202
|
||||
SULPHUR: 16458
|
||||
GLOWSTONE_DUST: 522
|
||||
SULPHUR: 16970
|
||||
|
||||
|
||||
768: # Potion of Haste
|
||||
Effects: ["FAST_DIGGING 0 3600"]
|
||||
Effects: ["FAST_DIGGING 0 3600"]
|
||||
Children:
|
||||
GLOWSTONE_DUST: 800
|
||||
REDSTONE: 832
|
||||
@@ -155,7 +161,7 @@ Potions:
|
||||
SULPHUR: 17184
|
||||
|
||||
832: # Potion of Haste Extended
|
||||
Effects: ["FAST_DIGGING 0 9600"]
|
||||
Effects: ["FAST_DIGGING 0 9600"]
|
||||
Children:
|
||||
GLOWSTONE_DUST: 800
|
||||
SULPHUR: 17216
|
||||
@@ -177,42 +183,49 @@ Potions:
|
||||
GLOWSTONE_DUST: 1056
|
||||
SULPHUR: 17472
|
||||
|
||||
8201: # Potion of Strength
|
||||
1289: # Potion of Strength
|
||||
Effects: ["INCREASE_DAMAGE 0 3600"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8200
|
||||
GLOWSTONE_DUST: 8233
|
||||
REDSTONE: 8265
|
||||
SULPHUR: 16393
|
||||
8233: # Potion of Strength II
|
||||
FERMENTED_SPIDER_EYE: 4616
|
||||
GLOWSTONE_DUST: 1321
|
||||
REDSTONE: 1353
|
||||
SULPHUR: 17673
|
||||
1321: # Potion of Strength II
|
||||
Effects: ["INCREASE_DAMAGE 1 1800"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8200
|
||||
REDSTONE: 8265
|
||||
SULPHUR: 16425
|
||||
8265: # Potion of Strength Extended
|
||||
FERMENTED_SPIDER_EYE: 4616
|
||||
REDSTONE: 1353
|
||||
SULPHUR: 17705
|
||||
1353: # Potion of Strength Extended
|
||||
Effects: ["INCREASE_DAMAGE 0 9600"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8264
|
||||
GLOWSTONE_DUST: 8233
|
||||
SULPHUR: 16457
|
||||
FERMENTED_SPIDER_EYE: 4680
|
||||
GLOWSTONE_DUST: 1321
|
||||
SULPHUR: 17737
|
||||
|
||||
8197: # Potion of Healing
|
||||
1541: # Potion of Healing
|
||||
Effects: ["HEAL 0"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8204
|
||||
GLOWSTONE_DUST: 8229
|
||||
SULPHUR: 16389
|
||||
8229: # Potion of Healing II
|
||||
FERMENTED_SPIDER_EYE: 1804
|
||||
GLOWSTONE_DUST: 1573
|
||||
SULPHUR: 17925
|
||||
1573: # Potion of Healing II
|
||||
Effects: ["HEAL 1"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8236
|
||||
REDSTONE: 8197
|
||||
SULPHUR: 16421
|
||||
FERMENTED_SPIDER_EYE: 1836
|
||||
REDSTONE: 1541
|
||||
SULPHUR: 17957
|
||||
|
||||
8204: # Potion of Harming
|
||||
1804: # Potion of Harming
|
||||
Effects: ["HARM 0"]
|
||||
Children:
|
||||
GLOWSTONE_DUST: 8236
|
||||
SULPHUR: 16396
|
||||
8236: # Potion of Harming II
|
||||
GLOWSTONE_DUST: 1836
|
||||
SULPHUR: 18188
|
||||
1836: # Potion of Harming II
|
||||
Effects: ["HARM 1"]
|
||||
Children:
|
||||
REDSTONE: 8204
|
||||
SULPHUR: 16428
|
||||
REDSTONE: 1804
|
||||
SULPHUR: 18220
|
||||
|
||||
2048: # Potion of Leaping
|
||||
Effects: ["JUMP 0 3600"]
|
||||
@@ -242,22 +255,25 @@ Potions:
|
||||
GLOWSTONE_DUST: 2304
|
||||
SULPHUR: 18752
|
||||
|
||||
8193: # Potion of Regeneration
|
||||
2561: # Potion of Regeneration
|
||||
Effects: ["REGENERATION 0 900"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8200
|
||||
GLOWSTONE_DUST: 8225
|
||||
REDSTONE: 8257
|
||||
SULPHUR: 16385
|
||||
8225: # Potion of Regeneration II
|
||||
FERMENTED_SPIDER_EYE: 4616
|
||||
GLOWSTONE_DUST: 2593
|
||||
REDSTONE: 2625
|
||||
SULPHUR: 18945
|
||||
2593: # Potion of Regeneration II
|
||||
Effects: ["REGENERATION 1 450"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8200
|
||||
REDSTONE: 8257
|
||||
SULPHUR: 16417
|
||||
8257: # Potion of Regeneration Extended
|
||||
FERMENTED_SPIDER_EYE: 4616
|
||||
REDSTONE: 2625
|
||||
SULPHUR: 18977
|
||||
2625: # Potion of Regeneration Extended
|
||||
Effects: ["REGENERATION 0 2400"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8264
|
||||
GLOWSTONE_DUST: 8225
|
||||
SULPHUR: 16449
|
||||
FERMENTED_SPIDER_EYE: 4680
|
||||
GLOWSTONE_DUST: 2593
|
||||
SULPHUR: 19009
|
||||
|
||||
2816: # Potion of Resistance
|
||||
Effects: ["DAMAGE_RESISTANCE 0 450"]
|
||||
@@ -276,34 +292,40 @@ Potions:
|
||||
GLOWSTONE_DUST: 2848
|
||||
SULPHUR: 19264
|
||||
|
||||
8195: # Potion of Fire Resistance
|
||||
3075: # Potion of Fire Resistance
|
||||
Effects: ["FIRE_RESISTANCE 0 3600"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8202
|
||||
REDSTONE: 8259
|
||||
SULPHUR: 16387
|
||||
8259: # Potion of Fire Resistance Extended
|
||||
FERMENTED_SPIDER_EYE: 522
|
||||
REDSTONE: 3139
|
||||
SULPHUR: 19459
|
||||
3139: # Potion of Fire Resistance Extended
|
||||
Effects: ["FIRE_RESISTANCE 0 9600"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8266
|
||||
GLOWSTONE_DUST: 8195
|
||||
SULPHUR: 16451
|
||||
FERMENTED_SPIDER_EYE: 586
|
||||
GLOWSTONE_DUST: 3075
|
||||
SULPHUR: 19523
|
||||
|
||||
8205: # Potion of Water Breathing
|
||||
3341: # Potion of Water Breathing
|
||||
Effects: ["WATER_BREATHING 0 3600"]
|
||||
Children:
|
||||
REDSTONE: 8269
|
||||
SULPHUR: 16397
|
||||
8269: # Potion of Water Breathing Extended
|
||||
REDSTONE: 3405
|
||||
SULPHUR: 19725
|
||||
3405: # Potion of Water Breathing Extended
|
||||
Effects: ["WATER_BREATHING 0 9600"]
|
||||
Children:
|
||||
GLOWSTONE_DUST: 8205
|
||||
SULPHUR: 16461
|
||||
GLOWSTONE_DUST: 3341
|
||||
SULPHUR: 19789
|
||||
|
||||
8206: # Potion of Invisibility
|
||||
3598: # Potion of Invisibility
|
||||
Effects: ["INVISIBILITY 0 3600"]
|
||||
Children:
|
||||
REDSTONE: 8270
|
||||
SULPHUR: 16398
|
||||
8270: # Potion of Invisibility Extended
|
||||
REDSTONE: 3662
|
||||
SULPHUR: 19982
|
||||
3662: # Potion of Invisibility Extended
|
||||
Effects: ["INVISIBILITY 0 9600"]
|
||||
Children:
|
||||
GLOWSTONE_DUST: 8206
|
||||
SULPHUR: 16462
|
||||
GLOWSTONE_DUST: 3598
|
||||
SULPHUR: 20046
|
||||
|
||||
3840: # Potion of Blindness
|
||||
Effects: ["BLINDNESS 0 225"]
|
||||
@@ -316,16 +338,18 @@ Potions:
|
||||
GLOWSTONE_DUST: 3840
|
||||
SULPHUR: 20288
|
||||
|
||||
8198: # Potion of Night Vision
|
||||
4102: # Potion of Night Vision
|
||||
Effects: ["NIGHT_VISION 0 3600"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8206
|
||||
REDSTONE: 8262
|
||||
SULPHUR: 16390
|
||||
8262: # Potion of Night Vision Extended
|
||||
FERMENTED_SPIDER_EYE: 3598
|
||||
REDSTONE: 4166
|
||||
SULPHUR: 20486
|
||||
4166: # Potion of Night Vision Extended
|
||||
Effects: ["NIGHT_VISION 0 9600"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8270
|
||||
GLOWSTONE_DUST: 8198
|
||||
SULPHUR: 16454
|
||||
FERMENTED_SPIDER_EYE: 3662
|
||||
GLOWSTONE_DUST: 4102
|
||||
SULPHUR: 20550
|
||||
|
||||
4352: # Potion of Hunger
|
||||
Effects: ["HUNGER 0 900"]
|
||||
@@ -344,31 +368,36 @@ Potions:
|
||||
GLOWSTONE_DUST: 4384
|
||||
SULPHUR: 20800
|
||||
|
||||
8200: # Potion of Weakness
|
||||
4616: # Potion of Weakness
|
||||
Effects: ["WEAKNESS 0 1800"]
|
||||
Children:
|
||||
REDSTONE: 8264
|
||||
SULPHUR: 16392
|
||||
8264: # Potion of Weakness Extended
|
||||
REDSTONE: 4680
|
||||
SULPHUR: 21000
|
||||
4680: # Potion of Weakness Extended
|
||||
Effects: ["WEAKNESS 0 4800"]
|
||||
Children:
|
||||
GLOWSTONE_DUST: 8200
|
||||
SULPHUR: 16456
|
||||
GLOWSTONE_DUST: 4616
|
||||
SULPHUR: 21064
|
||||
|
||||
8196: # Potion of Poison
|
||||
4868: # Potion of Poison
|
||||
Effects: ["POISON 0 900"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8204
|
||||
GLOWSTONE_DUST: 8228
|
||||
REDSTONE: 8260
|
||||
SULPHUR: 16388
|
||||
8228: # Potion of Poison II
|
||||
FERMENTED_SPIDER_EYE: 1804
|
||||
GLOWSTONE_DUST: 4900
|
||||
REDSTONE: 4932
|
||||
SULPHUR: 21252
|
||||
4900: # Potion of Poison II
|
||||
Effects: ["POISON 1 450"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8236
|
||||
REDSTONE: 8260
|
||||
SULPHUR: 16420
|
||||
8260: # Potion of Poison Extended
|
||||
FERMENTED_SPIDER_EYE: 1836
|
||||
REDSTONE: 4932
|
||||
SULPHUR: 21284
|
||||
4932: # Potion of Poison Extended
|
||||
Effects: ["POISON 0 2400"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 8204
|
||||
GLOWSTONE_DUST: 8228
|
||||
SULPHUR: 16452
|
||||
FERMENTED_SPIDER_EYE: 1804
|
||||
GLOWSTONE_DUST: 4900
|
||||
SULPHUR: 21284
|
||||
|
||||
5120: # Potion of Decay
|
||||
Effects: ["WITHER 0 450"]
|
||||
@@ -436,28 +465,33 @@ Potions:
|
||||
|
||||
16384: # Splash Mundane Potion
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16392
|
||||
FERMENTED_SPIDER_EYE: 21000
|
||||
|
||||
16386: # Splash Potion of Swiftness
|
||||
16642: # Splash Potion of Swiftness
|
||||
Effects: ["SPEED 0 2700"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16394
|
||||
GLOWSTONE_DUST: 16418
|
||||
REDSTONE: 16450
|
||||
16418: # Splash Potion of Swiftness II
|
||||
FERMENTED_SPIDER_EYE: 16906
|
||||
GLOWSTONE_DUST: 16674
|
||||
REDSTONE: 16706
|
||||
16674: # Splash Potion of Swiftness II
|
||||
Effects: ["SPEED 1 1350"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16394
|
||||
REDSTONE: 16450
|
||||
16450: # Splash Potion of Swiftness Extended
|
||||
FERMENTED_SPIDER_EYE: 16906
|
||||
REDSTONE: 16706
|
||||
16706: # Splash Potion of Swiftness Extended
|
||||
Effects: ["SPEED 0 7200"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16394
|
||||
GLOWSTONE_DUST: 16418
|
||||
FERMENTED_SPIDER_EYE: 16906
|
||||
GLOWSTONE_DUST: 16674
|
||||
|
||||
16394: # Splash Potion of Slowness
|
||||
16906: # Splash Potion of Slowness
|
||||
Effects: ["SLOW 0 1350"]
|
||||
Children:
|
||||
REDSTONE: 16458
|
||||
16458: # Splash Potion of Slowness Extended
|
||||
REDSTONE: 16970
|
||||
16970: # Splash Potion of Slowness Extended
|
||||
Effects: ["SLOW 0 3600"]
|
||||
Children:
|
||||
GLOWSTONE_DUST: 16394
|
||||
GLOWSTONE_DUST: 16906
|
||||
|
||||
17152: # Splash Potion of Haste
|
||||
Effects: ["FAST_DIGGING 0 2700"]
|
||||
@@ -487,35 +521,42 @@ Potions:
|
||||
Children:
|
||||
GLOWSTONE_DUST: 17440
|
||||
|
||||
16393: # Splash Potion of Strength
|
||||
17673: # Splash Potion of Strength
|
||||
Effects: ["INCREASE_DAMAGE 0 2700"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16392
|
||||
GLOWSTONE_DUST: 16425
|
||||
REDSTONE: 16457
|
||||
16425: # Splash Potion of Strength II
|
||||
FERMENTED_SPIDER_EYE: 21000
|
||||
GLOWSTONE_DUST: 17705
|
||||
REDSTONE: 17737
|
||||
17705: # Splash Potion of Strength II
|
||||
Effects: ["INCREASE_DAMAGE 1 1350"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16392
|
||||
REDSTONE: 16457
|
||||
16457: # Splash Potion of Strength Extended
|
||||
FERMENTED_SPIDER_EYE: 21000
|
||||
REDSTONE: 17737
|
||||
17737: # Splash Potion of Strength Extended
|
||||
Effects: ["INCREASE_DAMAGE 0 7200"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16456
|
||||
GLOWSTONE_DUST: 16425
|
||||
FERMENTED_SPIDER_EYE: 21064
|
||||
GLOWSTONE_DUST: 17705
|
||||
|
||||
16389: # Splash Potion of Healing
|
||||
17925: # Splash Potion of Healing
|
||||
Effects: ["HEAL 0"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16396
|
||||
GLOWSTONE_DUST: 16421
|
||||
16421: # Splash Potion of Healing II
|
||||
FERMENTED_SPIDER_EYE: 18188
|
||||
GLOWSTONE_DUST: 17957
|
||||
17957: # Splash Potion of Healing II
|
||||
Effects: ["HEAL 1"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16428
|
||||
REDSTONE: 16389
|
||||
FERMENTED_SPIDER_EYE: 18220
|
||||
REDSTONE: 17925
|
||||
|
||||
16396: # Splash Potion of Harming
|
||||
18188: # Splash Potion of Harming
|
||||
Effects: ["HARM 0"]
|
||||
Children:
|
||||
GLOWSTONE_DUST: 16428
|
||||
16428: # Splash Potion of Harming II
|
||||
GLOWSTONE_DUST: 18220
|
||||
18220: # Splash Potion of Harming II
|
||||
Effects: ["HARM 1"]
|
||||
Children:
|
||||
REDSTONE: 16396
|
||||
REDSTONE: 18188
|
||||
|
||||
18432: # Splash Potion of Leaping
|
||||
Effects: ["JUMP 0 2700"]
|
||||
@@ -540,19 +581,22 @@ Potions:
|
||||
Children:
|
||||
GLOWSTONE_DUST: 18688
|
||||
|
||||
16385: # Splash Potion of Regeneration
|
||||
18945: # Splash Potion of Regeneration
|
||||
Effects: ["REGENERATION 0 675"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16392
|
||||
GLOWSTONE_DUST: 16417
|
||||
REDSTONE: 16449
|
||||
16417: # Splash Potion of Regeneration II
|
||||
FERMENTED_SPIDER_EYE: 21000
|
||||
GLOWSTONE_DUST: 18977
|
||||
REDSTONE: 19009
|
||||
18977: # Splash Potion of Regeneration II
|
||||
Effects: ["REGENERATION 1 338"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16392
|
||||
REDSTONE: 16449
|
||||
16449: # Splash Potion of Regeneration Extended
|
||||
FERMENTED_SPIDER_EYE: 21000
|
||||
REDSTONE: 19009
|
||||
19009: # Splash Potion of Regeneration Extended
|
||||
Effects: ["REGENERATION 0 1800"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16456
|
||||
GLOWSTONE_DUST: 16417
|
||||
FERMENTED_SPIDER_EYE: 21064
|
||||
GLOWSTONE_DUST: 18977
|
||||
|
||||
19200: # Splash Potion of Resistance
|
||||
Effects: ["DAMAGE_RESISTANCE 0 338"]
|
||||
@@ -568,28 +612,34 @@ Potions:
|
||||
Children:
|
||||
GLOWSTONE_DUST: 19232
|
||||
|
||||
16387: # Splash Potion of Fire Resistance
|
||||
19459: # Splash Potion of Fire Resistance
|
||||
Effects: ["FIRE_RESISTANCE 0 2700"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16394
|
||||
REDSTONE: 16451
|
||||
16451: # Splash Potion of Fire Resistance Extended
|
||||
FERMENTED_SPIDER_EYE: 16906
|
||||
REDSTONE: 19523
|
||||
19523: # Splash Potion of Fire Resistance Extended
|
||||
Effects: ["FIRE_RESISTANCE 0 7200"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16458
|
||||
GLOWSTONE_DUST: 16387
|
||||
FERMENTED_SPIDER_EYE: 16970
|
||||
GLOWSTONE_DUST: 19459
|
||||
|
||||
16397: # Splash Potion of Water Breathing
|
||||
19725: # Splash Potion of Water Breathing
|
||||
Effects: ["WATER_BREATHING 0 2700"]
|
||||
Children:
|
||||
REDSTONE: 16461
|
||||
16461: # Splash Potion of Water Breathing Extended
|
||||
REDSTONE: 19789
|
||||
19789: # Splash Potion of Water Breathing Extended
|
||||
Effects: ["WATER_BREATHING 0 7200"]
|
||||
Children:
|
||||
GLOWSTONE_DUST: 16397
|
||||
GLOWSTONE_DUST: 19725
|
||||
|
||||
16398: # Splash Potion of Invisibility
|
||||
19982: # Splash Potion of Invisibility
|
||||
Effects: ["INVISIBILITY 0 2700"]
|
||||
Children:
|
||||
REDSTONE: 16462
|
||||
16462: # Splash Potion of Invisibility Extended
|
||||
REDSTONE: 20046
|
||||
20046: # Splash Potion of Invisibility Extended
|
||||
Effects: ["INVISIBILITY 0 7200"]
|
||||
Children:
|
||||
GLOWSTONE_DUST: 16398
|
||||
GLOWSTONE_DUST: 19982
|
||||
|
||||
20224: # Splash Potion of Blindness
|
||||
Effects: ["BLINDNESS 0 169"]
|
||||
@@ -600,14 +650,16 @@ Potions:
|
||||
Children:
|
||||
GLOWSTONE_DUST: 20224
|
||||
|
||||
16390: # Splash Potion of Night Vision
|
||||
20486: # Splash Potion of Night Vision
|
||||
Effects: ["NIGHT_VISION 0 2700"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16398
|
||||
REDSTONE: 16454
|
||||
16454: # Splash Potion of Night Vision Extended
|
||||
FERMENTED_SPIDER_EYE: 19982
|
||||
REDSTONE: 20550
|
||||
20550: # Splash Potion of Night Vision Extended
|
||||
Effects: ["NIGHT_VISION 0 7200"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16462
|
||||
GLOWSTONE_DUST: 16390
|
||||
FERMENTED_SPIDER_EYE: 20046
|
||||
GLOWSTONE_DUST: 20486
|
||||
|
||||
20736: # Splash Potion of Hunger
|
||||
Effects: ["HUNGER 0 675"]
|
||||
@@ -623,26 +675,31 @@ Potions:
|
||||
Children:
|
||||
GLOWSTONE_DUST: 20768
|
||||
|
||||
16392: # Splash Potion of Weakness
|
||||
21000: # Splash Potion of Weakness
|
||||
Effects: ["WEAKNESS 0 1350"]
|
||||
Children:
|
||||
REDSTONE: 16456
|
||||
16456: # Splash Potion of Weakness Extended
|
||||
REDSTONE: 21064
|
||||
21064: # Splash Potion of Weakness Extended
|
||||
Effects: ["WEAKNESS 0 3600"]
|
||||
Children:
|
||||
GLOWSTONE_DUST: 16392
|
||||
GLOWSTONE_DUST: 21000
|
||||
|
||||
16388: # Splash Potion of Poison
|
||||
21252: # Splash Potion of Poison
|
||||
Effects: ["POISON 0 675"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16396
|
||||
GLOWSTONE_DUST: 16420
|
||||
REDSTONE: 16452
|
||||
16420: # Splash Potion of Poison II
|
||||
FERMENTED_SPIDER_EYE: 18188
|
||||
GLOWSTONE_DUST: 21284
|
||||
REDSTONE: 21316
|
||||
21284: # Splash Potion of Poison II
|
||||
Effects: ["POISON 1 338"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16428
|
||||
REDSTONE: 16452
|
||||
16452: # Splash Potion of Poison Extended
|
||||
FERMENTED_SPIDER_EYE: 18220
|
||||
REDSTONE: 21316
|
||||
21316: # Splash Potion of Poison Extended
|
||||
Effects: ["POISON 0 1800"]
|
||||
Children:
|
||||
FERMENTED_SPIDER_EYE: 16396
|
||||
GLOWSTONE_DUST: 16420
|
||||
FERMENTED_SPIDER_EYE: 18188
|
||||
GLOWSTONE_DUST: 21284
|
||||
|
||||
21504: # Splash Potion of Decay
|
||||
Effects: ["WITHER 0 338"]
|
||||
|
||||
Reference in New Issue
Block a user