Added 'minemiblock' for MMOItems custom blocks.

Format is the same as 'mineblock', but with MI Custom Block ID instead
Example: 'material=STONE' --> 'id=1'
This commit is contained in:
Aria 2019-12-14 01:29:19 +01:00
parent c18aad448b
commit 1195cd030d
5 changed files with 119 additions and 1 deletions

View File

@ -40,6 +40,7 @@ import net.Indyuce.mmocore.comp.holograms.CMIPlugin;
import net.Indyuce.mmocore.comp.holograms.HologramSupport;
import net.Indyuce.mmocore.comp.holograms.HologramsPlugin;
import net.Indyuce.mmocore.comp.holograms.HolographicDisplaysPlugin;
import net.Indyuce.mmocore.comp.mmoitems.MMOItemsMMOLoader;
import net.Indyuce.mmocore.comp.mythicmobs.MythicMobsDrops;
import net.Indyuce.mmocore.comp.mythicmobs.MythicMobsMMOLoader;
import net.Indyuce.mmocore.comp.placeholder.DefaultParser;
@ -146,6 +147,9 @@ public class MMOCore extends JavaPlugin {
/*
* register extra objective, drop items...
*/
if (Bukkit.getPluginManager().getPlugin("MMOItems") != null)
loadManager.registerLoader(new MMOItemsMMOLoader());
if (Bukkit.getPluginManager().getPlugin("WorldGuard") != null)
loadManager.registerLoader(new WorldGuardMMOLoader());

View File

@ -0,0 +1,66 @@
package net.Indyuce.mmocore.api.experience.source;
import org.bukkit.GameMode;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
import net.Indyuce.mmocore.api.experience.Profession;
import net.Indyuce.mmocore.api.experience.source.type.SpecificExperienceSource;
import net.Indyuce.mmocore.api.load.MMOLineConfig;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.manager.profession.ExperienceManager;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.CustomBlock;
public class MineMIBlockExperienceSource extends SpecificExperienceSource<Integer> {
public final int id;
private final boolean silkTouch;
private final boolean playerPlaced;
public MineMIBlockExperienceSource(Profession profession, MMOLineConfig config) {
super(profession, config);
config.validate("id");
id = config.getInt("id", 1);
silkTouch = config.getBoolean("silk-touch", true);
playerPlaced = config.getBoolean("player-placed", false);
}
@Override
public ExperienceManager<MineMIBlockExperienceSource> newManager() {
return new ExperienceManager<MineMIBlockExperienceSource>() {
@EventHandler(priority = EventPriority.HIGHEST)
public void a(BlockBreakEvent event) {
if (event.isCancelled() || event.getPlayer().getGameMode() != GameMode.SURVIVAL)
return;
PlayerData data = PlayerData.get(event.getPlayer());
for (MineMIBlockExperienceSource source : getSources())
{
if (!MMOItems.plugin.getCustomBlocks().isMushroomBlock(event.getBlock().getType()))
continue;
if (source.silkTouch && hasSilkTouch(event.getPlayer().getInventory().getItemInMainHand()))
continue;
if ((!source.playerPlaced) && event.getBlock().hasMetadata("player_placed"))
continue;
if (source.matches(data, CustomBlock.getFromData(event.getBlock().getBlockData()).getId()))
source.giveExperience(data, event.getBlock().getLocation());
}
}
};
}
private boolean hasSilkTouch(ItemStack item) {
return item != null && item.hasItemMeta() && item.getItemMeta().hasEnchant(Enchantment.SILK_TOUCH);
}
@Override
public boolean matches(PlayerData player, Integer blockId) {
return id == blockId && hasRightClass(player);
}
}

View File

@ -132,7 +132,7 @@ public class DefaultMMOLoader implements MMOLoader {
if (config.getKey().equals("repairitem"))
return new RepairItemExperienceSource(profession, config);
return null;
}
}

View File

@ -64,6 +64,10 @@ public class MMOLineConfig {
return json.get(path).getAsInt();
}
public int getInt(String path, int def) {
return json.has(path) ? getInt(path) : def;
}
public long getLong(String path) {
return json.get(path).getAsLong();
}

View File

@ -0,0 +1,44 @@
package net.Indyuce.mmocore.comp.mmoitems;
import org.bukkit.configuration.ConfigurationSection;
import net.Indyuce.mmocore.api.droptable.condition.Condition;
import net.Indyuce.mmocore.api.droptable.dropitem.DropItem;
import net.Indyuce.mmocore.api.experience.Profession;
import net.Indyuce.mmocore.api.experience.source.MineBlockExperienceSource;
import net.Indyuce.mmocore.api.experience.source.type.ExperienceSource;
import net.Indyuce.mmocore.api.load.MMOLineConfig;
import net.Indyuce.mmocore.api.load.MMOLoader;
import net.Indyuce.mmocore.api.quest.objective.Objective;
import net.Indyuce.mmocore.api.quest.trigger.Trigger;
public class MMOItemsMMOLoader implements MMOLoader {
@Override
public Condition loadCondition(MMOLineConfig config) {
return null;
}
@Override
public Trigger loadTrigger(MMOLineConfig config) {
return null;
}
@Override
public DropItem loadDropItem(MMOLineConfig config) {
return null;
}
@Override
public Objective loadObjective(MMOLineConfig config, ConfigurationSection section) {
return null;
}
@Override
public ExperienceSource<?> loadExperienceSource(MMOLineConfig config, Profession profession) {
if (config.getKey().equals("minemiblock"))
return new MineBlockExperienceSource(profession, config);
return null;
}
}