forked from Upstream/mmocore
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:
parent
c18aad448b
commit
1195cd030d
@ -40,6 +40,7 @@ import net.Indyuce.mmocore.comp.holograms.CMIPlugin;
|
|||||||
import net.Indyuce.mmocore.comp.holograms.HologramSupport;
|
import net.Indyuce.mmocore.comp.holograms.HologramSupport;
|
||||||
import net.Indyuce.mmocore.comp.holograms.HologramsPlugin;
|
import net.Indyuce.mmocore.comp.holograms.HologramsPlugin;
|
||||||
import net.Indyuce.mmocore.comp.holograms.HolographicDisplaysPlugin;
|
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.MythicMobsDrops;
|
||||||
import net.Indyuce.mmocore.comp.mythicmobs.MythicMobsMMOLoader;
|
import net.Indyuce.mmocore.comp.mythicmobs.MythicMobsMMOLoader;
|
||||||
import net.Indyuce.mmocore.comp.placeholder.DefaultParser;
|
import net.Indyuce.mmocore.comp.placeholder.DefaultParser;
|
||||||
@ -146,6 +147,9 @@ public class MMOCore extends JavaPlugin {
|
|||||||
/*
|
/*
|
||||||
* register extra objective, drop items...
|
* register extra objective, drop items...
|
||||||
*/
|
*/
|
||||||
|
if (Bukkit.getPluginManager().getPlugin("MMOItems") != null)
|
||||||
|
loadManager.registerLoader(new MMOItemsMMOLoader());
|
||||||
|
|
||||||
if (Bukkit.getPluginManager().getPlugin("WorldGuard") != null)
|
if (Bukkit.getPluginManager().getPlugin("WorldGuard") != null)
|
||||||
loadManager.registerLoader(new WorldGuardMMOLoader());
|
loadManager.registerLoader(new WorldGuardMMOLoader());
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -64,6 +64,10 @@ public class MMOLineConfig {
|
|||||||
return json.get(path).getAsInt();
|
return json.get(path).getAsInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getInt(String path, int def) {
|
||||||
|
return json.has(path) ? getInt(path) : def;
|
||||||
|
}
|
||||||
|
|
||||||
public long getLong(String path) {
|
public long getLong(String path) {
|
||||||
return json.get(path).getAsLong();
|
return json.get(path).getAsLong();
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user