mirror of
https://gitlab.com/phoenix-dvpmt/mmocore.git
synced 2025-02-22 14:41:51 +01:00
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.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());
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -132,7 +132,7 @@ public class DefaultMMOLoader implements MMOLoader {
|
||||
|
||||
if (config.getKey().equals("repairitem"))
|
||||
return new RepairItemExperienceSource(profession, config);
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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