forked from Upstream/mmocore
Update 1.4.6
- Custom Mining Regions are no longer protected by default, however you can enable it in config.yml (Regenerating Blocks will still be protected) - Block Regens can also be chained together now without causing weird behavior. - Fixed a bug that caused - ActionBar refactor. Reloading now reloads the actionbar config! - MineBlock Quest Objective no longer counts player placed blocks (can be changed in the line config)
This commit is contained in:
parent
fc5eea28e0
commit
c724b8ecf4
2
pom.xml
2
pom.xml
@ -4,7 +4,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>net.Indyuce</groupId>
|
<groupId>net.Indyuce</groupId>
|
||||||
<artifactId>MMOCore</artifactId>
|
<artifactId>MMOCore</artifactId>
|
||||||
<version>1.4.5</version>
|
<version>1.4.6</version>
|
||||||
<name>MMOCore</name>
|
<name>MMOCore</name>
|
||||||
<description>Offer your players a brand new RPG experience.</description>
|
<description>Offer your players a brand new RPG experience.</description>
|
||||||
|
|
||||||
|
@ -107,11 +107,11 @@ public class MMOCore extends JavaPlugin {
|
|||||||
public VaultEconomy economy;
|
public VaultEconomy economy;
|
||||||
public HologramSupport hologramSupport;
|
public HologramSupport hologramSupport;
|
||||||
public InventoryManager inventoryManager;
|
public InventoryManager inventoryManager;
|
||||||
public PlayerActionBar actionBarManager;
|
|
||||||
public RegionHandler regionHandler = new DefaultRegionHandler();
|
public RegionHandler regionHandler = new DefaultRegionHandler();
|
||||||
public FlagPlugin flagPlugin = new DefaultFlags();
|
public FlagPlugin flagPlugin = new DefaultFlags();
|
||||||
public PlaceholderParser placeholderParser = new DefaultParser();
|
public PlaceholderParser placeholderParser = new DefaultParser();
|
||||||
public DataProvider dataProvider = new YAMLDataProvider();
|
public DataProvider dataProvider = new YAMLDataProvider();
|
||||||
|
public final PlayerActionBar actionBarManager = new PlayerActionBar();
|
||||||
public final SkillManager skillManager = new SkillManager();
|
public final SkillManager skillManager = new SkillManager();
|
||||||
public final ClassManager classManager = new ClassManager();
|
public final ClassManager classManager = new ClassManager();
|
||||||
public final DropTableManager dropTableManager = new DropTableManager();
|
public final DropTableManager dropTableManager = new DropTableManager();
|
||||||
@ -250,12 +250,6 @@ public class MMOCore extends JavaPlugin {
|
|||||||
saveDefaultConfig();
|
saveDefaultConfig();
|
||||||
reloadPlugin();
|
reloadPlugin();
|
||||||
|
|
||||||
/*
|
|
||||||
* default action bar. only ran if the action bar is enabled
|
|
||||||
*/
|
|
||||||
if (getConfig().getBoolean("action-bar.enabled"))
|
|
||||||
new PlayerActionBar(getConfig().getConfigurationSection("action-bar"));
|
|
||||||
|
|
||||||
if (getConfig().getBoolean("vanilla-exp-redirection.enabled"))
|
if (getConfig().getBoolean("vanilla-exp-redirection.enabled"))
|
||||||
Bukkit.getPluginManager().registerEvents(new RedirectVanillaExp(getConfig().getDouble("vanilla-exp-redirection.ratio")), this);
|
Bukkit.getPluginManager().registerEvents(new RedirectVanillaExp(getConfig().getDouble("vanilla-exp-redirection.ratio")), this);
|
||||||
|
|
||||||
@ -374,12 +368,14 @@ public class MMOCore extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void reloadPlugin() {
|
public void reloadPlugin() {
|
||||||
|
reloadConfig();
|
||||||
|
|
||||||
configManager = new ConfigManager();
|
configManager = new ConfigManager();
|
||||||
|
|
||||||
skillManager.reload();
|
skillManager.reload();
|
||||||
|
|
||||||
mineManager.clear();
|
mineManager.clear();
|
||||||
mineManager.reload();
|
mineManager.reload(getConfig().getBoolean("protect-custom-mine"));
|
||||||
|
|
||||||
fishingManager.clear();
|
fishingManager.clear();
|
||||||
alchemyManager.clear();
|
alchemyManager.clear();
|
||||||
@ -416,6 +412,9 @@ public class MMOCore extends JavaPlugin {
|
|||||||
requestManager = new RequestManager();
|
requestManager = new RequestManager();
|
||||||
configItems = new ConfigItemManager(new ConfigFile("items").getConfig());
|
configItems = new ConfigItemManager(new ConfigFile("items").getConfig());
|
||||||
|
|
||||||
|
if(getConfig().isConfigurationSection("action-bar"))
|
||||||
|
actionBarManager.reload(getConfig().getConfigurationSection("action-bar"));
|
||||||
|
|
||||||
StatType.load();
|
StatType.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,16 +14,23 @@ import net.md_5.bungee.api.chat.TextComponent;
|
|||||||
import net.mmogroup.mmolib.MMOLib;
|
import net.mmogroup.mmolib.MMOLib;
|
||||||
|
|
||||||
public class PlayerActionBar extends BukkitRunnable {
|
public class PlayerActionBar extends BukkitRunnable {
|
||||||
private final int ticks;
|
boolean initialized = false;
|
||||||
private final DecimalFormat digit;
|
|
||||||
private final String format;
|
|
||||||
|
|
||||||
public PlayerActionBar(ConfigurationSection config) {
|
private ActionBarConfig config;
|
||||||
digit = new DecimalFormat(config.getString("decimal"), MMOCore.plugin.configManager.formatSymbols);
|
private DecimalFormat digit;
|
||||||
ticks = config.getInt("ticks-to-update");
|
|
||||||
format = config.getString("format");
|
public void reload(ConfigurationSection cfg) {
|
||||||
|
config = new ActionBarConfig(cfg);
|
||||||
runTaskTimer(MMOCore.plugin, 0, ticks);
|
digit = new DecimalFormat(config.digit, MMOCore.plugin.configManager.formatSymbols);
|
||||||
|
|
||||||
|
if(!initialized && config.enabled) {
|
||||||
|
runTaskTimer(MMOCore.plugin, 0, config.ticks);
|
||||||
|
initialized = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTimeOut() {
|
||||||
|
return config.timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -31,7 +38,7 @@ public class PlayerActionBar extends BukkitRunnable {
|
|||||||
for (PlayerData data : PlayerData.getAll())
|
for (PlayerData data : PlayerData.getAll())
|
||||||
if (data.isOnline() && !data.getPlayer().isDead() && !data.isCasting() && data.canSeeActionBar()) {
|
if (data.isOnline() && !data.getPlayer().isDead() && !data.isCasting() && data.canSeeActionBar()) {
|
||||||
data.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(MMOCore.plugin.placeholderParser.parse(data.getPlayer(),
|
data.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(MMOCore.plugin.placeholderParser.parse(data.getPlayer(),
|
||||||
MMOLib.plugin.parseColors(new String(data.getProfess().hasActionBar() ? data.getProfess().getActionBar() : format)
|
MMOLib.plugin.parseColors(new String(data.getProfess().hasActionBar() ? data.getProfess().getActionBar() : config.format)
|
||||||
.replace("{health}", digit.format(data.getPlayer().getHealth()))
|
.replace("{health}", digit.format(data.getPlayer().getHealth()))
|
||||||
.replace("{max_health}", "" + StatType.MAX_HEALTH.format(data.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()))
|
.replace("{max_health}", "" + StatType.MAX_HEALTH.format(data.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()))
|
||||||
.replace("{mana_icon}", data.getProfess().getManaDisplay().getIcon())
|
.replace("{mana_icon}", data.getProfess().getManaDisplay().getIcon())
|
||||||
@ -48,4 +55,18 @@ public class PlayerActionBar extends BukkitRunnable {
|
|||||||
.replace("{name}", data.getPlayer().getDisplayName())))));
|
.replace("{name}", data.getPlayer().getDisplayName())))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class ActionBarConfig {
|
||||||
|
private final boolean enabled;
|
||||||
|
private final int ticks, timeout;
|
||||||
|
private final String digit, format;
|
||||||
|
|
||||||
|
private ActionBarConfig(ConfigurationSection config) {
|
||||||
|
enabled = config.getBoolean("enabled", false);
|
||||||
|
timeout = config.getInt("", 60);
|
||||||
|
digit = config.getString("decimal", "0.#");
|
||||||
|
ticks = config.getInt("ticks-to-update", 5);
|
||||||
|
format = config.getString("format", "please format me :c");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,6 @@ public class WorldCondition extends Condition {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isMet(ConditionInstance entity) {
|
public boolean isMet(ConditionInstance entity) {
|
||||||
return names.contains(entity.getEntity().getWorld().getName());
|
return names.contains(entity.getEntity().getWorld().getName()) || names.contains("__global__");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -577,7 +577,7 @@ public class PlayerData extends OfflinePlayerData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void displayActionBar(String message) {
|
public void displayActionBar(String message) {
|
||||||
setActionBarTimeOut(60);
|
setActionBarTimeOut(MMOCore.plugin.actionBarManager.getTimeOut());
|
||||||
getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message));
|
getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ import net.mmogroup.mmolib.api.MMOLineConfig;
|
|||||||
public class MineBlockObjective extends Objective {
|
public class MineBlockObjective extends Objective {
|
||||||
private final Material block;
|
private final Material block;
|
||||||
private final int required;
|
private final int required;
|
||||||
|
private final boolean playerPlaced;
|
||||||
|
|
||||||
public MineBlockObjective(ConfigurationSection section, MMOLineConfig config) {
|
public MineBlockObjective(ConfigurationSection section, MMOLineConfig config) {
|
||||||
super(section);
|
super(section);
|
||||||
@ -23,6 +24,7 @@ public class MineBlockObjective extends Objective {
|
|||||||
|
|
||||||
block = Material.valueOf(config.getString("type").replace("-", "_").toUpperCase());
|
block = Material.valueOf(config.getString("type").replace("-", "_").toUpperCase());
|
||||||
required = config.getInt("amount");
|
required = config.getInt("amount");
|
||||||
|
playerPlaced = config.getBoolean("player-placed", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -39,6 +41,8 @@ public class MineBlockObjective extends Objective {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
public void a(BlockBreakEvent event) {
|
public void a(BlockBreakEvent event) {
|
||||||
|
if ((!playerPlaced) && event.getBlock().hasMetadata("player_placed"))
|
||||||
|
return;
|
||||||
if (event.getPlayer().equals(getQuestProgress().getPlayer().getPlayer()) && event.getBlock().getType() == block) {
|
if (event.getPlayer().equals(getQuestProgress().getPlayer().getPlayer()) && event.getBlock().getType() == block) {
|
||||||
count++;
|
count++;
|
||||||
getQuestProgress().getPlayer().getQuestData().updateBossBar();
|
getQuestProgress().getPlayer().getQuestData().updateBossBar();
|
||||||
|
@ -36,19 +36,31 @@ public class BlockListener implements Listener {
|
|||||||
String savedData = event.getBlock().getBlockData().getAsString();
|
String savedData = event.getBlock().getBlockData().getAsString();
|
||||||
Block block = event.getBlock();
|
Block block = event.getBlock();
|
||||||
|
|
||||||
|
final boolean regen = MMOCore.plugin.mineManager.isRegenerating(block);
|
||||||
|
if(regen && !MMOCore.plugin.mineManager.isBlockRegistered(block)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if custom mining enabled, check for item breaking restrictions
|
* if custom mining enabled, check for item breaking restrictions
|
||||||
*/
|
*/
|
||||||
boolean customMine = MMOCore.plugin.mineManager.isEnabled(player, block.getLocation());
|
boolean customMine = MMOCore.plugin.mineManager.isEnabled(player, block.getLocation());
|
||||||
if (!customMine)
|
if (!customMine)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
BlockInfo info = MMOCore.plugin.mineManager.getInfo(block);
|
BlockInfo info = MMOCore.plugin.mineManager.getInfo(block);
|
||||||
if (info == null || !info.getBlock().breakRestrictions(block)) {
|
if (info == null) {
|
||||||
|
if(MMOCore.plugin.mineManager.shouldProtect())
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!info.getBlock().breakRestrictions(block)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* calls the event and listen for cancel & for drops changes... also
|
* calls the event and listen for cancel & for drops changes... also
|
||||||
* allows to apply tool durability & enchants to drops, etc.
|
* allows to apply tool durability & enchants to drops, etc.
|
||||||
@ -109,7 +121,7 @@ public class BlockListener implements Listener {
|
|||||||
* enable block regen.
|
* enable block regen.
|
||||||
*/
|
*/
|
||||||
if (info.hasRegen())
|
if (info.hasRegen())
|
||||||
MMOCore.plugin.mineManager.initialize(info.startRegeneration(Bukkit.createBlockData(savedData), block.getLocation()));
|
MMOCore.plugin.mineManager.initialize(info.startRegeneration(Bukkit.createBlockData(savedData), block.getLocation()), !regen);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
|
@ -49,6 +49,8 @@ public class CustomBlockManager extends MMOManager {
|
|||||||
*/
|
*/
|
||||||
private final List<Function<Block, Optional<BlockType>>> blockTypes = new ArrayList<>();
|
private final List<Function<Block, Optional<BlockType>>> blockTypes = new ArrayList<>();
|
||||||
|
|
||||||
|
private boolean protect;
|
||||||
|
|
||||||
public CustomBlockManager() {
|
public CustomBlockManager() {
|
||||||
registerBlockType(block -> MMOCoreUtils.isPlayerHead(block.getType()) ? Optional.of(new SkullBlockType(block)) : Optional.empty());
|
registerBlockType(block -> MMOCoreUtils.isPlayerHead(block.getType()) ? Optional.of(new SkullBlockType(block)) : Optional.empty());
|
||||||
}
|
}
|
||||||
@ -61,6 +63,10 @@ public class CustomBlockManager extends MMOManager {
|
|||||||
map.put(regen.getBlock().generateKey(), regen);
|
map.put(regen.getBlock().generateKey(), regen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isBlockRegistered(Block block) {
|
||||||
|
return map.containsKey(findBlockType(block).generateKey());
|
||||||
|
}
|
||||||
|
|
||||||
public BlockInfo getInfo(Block block) {
|
public BlockInfo getInfo(Block block) {
|
||||||
return map.getOrDefault(findBlockType(block).generateKey(), null);
|
return map.getOrDefault(findBlockType(block).generateKey(), null);
|
||||||
}
|
}
|
||||||
@ -75,17 +81,19 @@ public class CustomBlockManager extends MMOManager {
|
|||||||
return new VanillaBlockType(block);
|
return new VanillaBlockType(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initialize(RegeneratingBlock info) {
|
public void initialize(RegeneratingBlock info, boolean schedule) {
|
||||||
active.add(info);
|
if(schedule) {
|
||||||
|
active.add(info);
|
||||||
|
Bukkit.getScheduler().runTaskLater(MMOCore.plugin, () -> regen(info, false), info.getRegeneratingBlock().getRegenerationInfo().getTime());
|
||||||
|
}
|
||||||
if (info.getRegeneratingBlock().getRegenerationInfo().hasTemporaryBlock())
|
if (info.getRegeneratingBlock().getRegenerationInfo().hasTemporaryBlock())
|
||||||
info.getRegeneratingBlock().getRegenerationInfo().getTemporaryBlock().place(info.getLocation(), info);
|
info.getRegeneratingBlock().getRegenerationInfo().getTemporaryBlock().place(info.getLocation(), info);
|
||||||
Bukkit.getScheduler().runTaskLater(MMOCore.plugin, () -> regen(info), info.getRegeneratingBlock().getRegenerationInfo().getTime());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void regen(RegeneratingBlock info) {
|
private void regen(RegeneratingBlock info, boolean shutdown) {
|
||||||
info.getRegeneratingBlock().getBlock().place(info.getLocation(), info);
|
info.getRegeneratingBlock().getBlock().place(info.getLocation(), info);
|
||||||
active.remove(info);
|
|
||||||
info.getLocation().getBlock().getState().update();
|
info.getLocation().getBlock().getState().update();
|
||||||
|
if(!shutdown) active.remove(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -93,7 +101,18 @@ public class CustomBlockManager extends MMOManager {
|
|||||||
* are reset and put back in place.
|
* are reset and put back in place.
|
||||||
*/
|
*/
|
||||||
public void resetRemainingBlocks() {
|
public void resetRemainingBlocks() {
|
||||||
active.forEach(info -> regen(info));
|
active.forEach(info -> regen(info, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRegenerating(Block block) {
|
||||||
|
Location loc = block.getLocation();
|
||||||
|
for(RegeneratingBlock info : active)
|
||||||
|
if(info.getLocation().getBlockX() == loc.getBlockX()
|
||||||
|
&& info.getLocation().getBlockY() == loc.getBlockY()
|
||||||
|
&& info.getLocation().getBlockZ() == loc.getBlockZ())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEnabled(Entity entity) {
|
public boolean isEnabled(Entity entity) {
|
||||||
@ -101,6 +120,8 @@ public class CustomBlockManager extends MMOManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEnabled(Entity entity, Location loc) {
|
public boolean isEnabled(Entity entity, Location loc) {
|
||||||
|
if(customMineConditions.isEmpty()) return false;
|
||||||
|
|
||||||
ConditionInstance conditionEntity = new ConditionInstance(entity, loc);
|
ConditionInstance conditionEntity = new ConditionInstance(entity, loc);
|
||||||
for (Condition condition : customMineConditions)
|
for (Condition condition : customMineConditions)
|
||||||
if (!condition.isMet(conditionEntity))
|
if (!condition.isMet(conditionEntity))
|
||||||
@ -117,7 +138,16 @@ public class CustomBlockManager extends MMOManager {
|
|||||||
MMOCore.log(Level.WARNING, "Could not load custom block '" + key + "': " + exception.getMessage());
|
MMOCore.log(Level.WARNING, "Could not load custom block '" + key + "': " + exception.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean shouldProtect() {
|
||||||
|
return protect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reload(boolean protect) {
|
||||||
|
this.protect = protect;
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reload() {
|
public void reload() {
|
||||||
customMineConditions.clear();
|
customMineConditions.clear();
|
||||||
|
@ -16,11 +16,20 @@ mysql:
|
|||||||
flags: '?allowReconnect=true&useSSL=false'
|
flags: '?allowReconnect=true&useSSL=false'
|
||||||
|
|
||||||
# The list of all conditions which must be met for the
|
# The list of all conditions which must be met for the
|
||||||
# BLOCK REGEN and BLOCK RESTRICTIONS to apply.
|
# BLOCK REGEN and BLOCK RESTRICTIONS to apply. Set to
|
||||||
# Set to 'custom-mine-conditions: []' for no condition.
|
# 'custom-mine-conditions: []' to disable custom mining entirely.
|
||||||
custom-mine-conditions:
|
custom-mine-conditions:
|
||||||
- 'world{name="world1,world2,world_nether,world_the_end"}'
|
- 'world{name="world,world_nether,world_the_end"}'
|
||||||
- 'region{name="region1,region2,__global__"}'
|
- 'region{name="example_region,example_region2,__global__"}'
|
||||||
|
#
|
||||||
|
# custom-mine-conditions:
|
||||||
|
# - 'world{name="__global__"}'
|
||||||
|
#
|
||||||
|
# ^ will enable custom mining server wide
|
||||||
|
|
||||||
|
# Set to true to prevent vanilla blocks from being
|
||||||
|
# broken when custom mining conditions are met
|
||||||
|
protect-custom-mine: false
|
||||||
|
|
||||||
# Offset is the distance traveled on X and Y coordinates
|
# Offset is the distance traveled on X and Y coordinates
|
||||||
# Height is the Y velocity coordinate. Lootsplosions
|
# Height is the Y velocity coordinate. Lootsplosions
|
||||||
@ -52,6 +61,10 @@ action-bar:
|
|||||||
# The decimal format for stats (not including stat formats in stats.yml)
|
# The decimal format for stats (not including stat formats in stats.yml)
|
||||||
decimal: "0.#"
|
decimal: "0.#"
|
||||||
|
|
||||||
|
# The amount of miliseconds the bar will be faded
|
||||||
|
#out when displaying other action bars.
|
||||||
|
time-out: 60
|
||||||
|
|
||||||
# The amount of ticks before updating the info
|
# The amount of ticks before updating the info
|
||||||
ticks-to-update: 5
|
ticks-to-update: 5
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user