mirror of
https://github.com/BentoBoxWorld/Limits.git
synced 2024-09-27 14:12:57 +02:00
add new placeholders and BlockGrowEvent
This commit is contained in:
parent
cf5be3ef30
commit
f726492eae
@ -7,6 +7,7 @@ import java.util.stream.Collectors;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
import org.eclipse.jdt.annotation.Nullable;
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
import world.bentobox.bentobox.api.addons.Addon;
|
import world.bentobox.bentobox.api.addons.Addon;
|
||||||
import world.bentobox.bentobox.api.addons.GameModeAddon;
|
import world.bentobox.bentobox.api.addons.GameModeAddon;
|
||||||
@ -138,6 +139,9 @@ public class Limits extends Addon {
|
|||||||
Arrays.stream(Material.values())
|
Arrays.stream(Material.values())
|
||||||
.filter(Material::isBlock)
|
.filter(Material::isBlock)
|
||||||
.forEach(m -> registerCountAndLimitPlaceholders(m, gm));
|
.forEach(m -> registerCountAndLimitPlaceholders(m, gm));
|
||||||
|
|
||||||
|
Arrays.stream(EntityType.values())
|
||||||
|
.forEach(e -> registerCountAndLimitPlaceholders(e, gm));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -149,6 +153,8 @@ public class Limits extends Addon {
|
|||||||
* Placeholders:
|
* Placeholders:
|
||||||
* "Limits_bskyblock_island_hopper_count"
|
* "Limits_bskyblock_island_hopper_count"
|
||||||
* "Limits_bskyblock_island_hopper_limit"
|
* "Limits_bskyblock_island_hopper_limit"
|
||||||
|
* "Limits_bskyblock_island_hopper_base_limit"
|
||||||
|
* "Limits_bskyblock_island_zombie_limit"
|
||||||
*
|
*
|
||||||
* @param m material
|
* @param m material
|
||||||
* @param gm game mode
|
* @param gm game mode
|
||||||
@ -160,6 +166,18 @@ public class Limits extends Addon {
|
|||||||
getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
||||||
gm.getDescription().getName().toLowerCase() + "_island_" + m.toString().toLowerCase() + "_limit",
|
gm.getDescription().getName().toLowerCase() + "_island_" + m.toString().toLowerCase() + "_limit",
|
||||||
user -> getLimit(user, m, gm));
|
user -> getLimit(user, m, gm));
|
||||||
|
getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
||||||
|
gm.getDescription().getName().toLowerCase() + "_island_" + m.toString().toLowerCase() + "_base_limit",
|
||||||
|
user -> getBaseLimit(user, m, gm));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerCountAndLimitPlaceholders(EntityType e, GameModeAddon gm) {
|
||||||
|
getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
||||||
|
gm.getDescription().getName().toLowerCase() + "_island_" + e.toString().toLowerCase() + "_limit",
|
||||||
|
user -> getLimit(user, e, gm));
|
||||||
|
getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
||||||
|
gm.getDescription().getName().toLowerCase() + "_island_" + e.toString().toLowerCase() + "_base_limit",
|
||||||
|
user -> getBaseLimit(user, e, gm));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -199,4 +217,46 @@ public class Limits extends Addon {
|
|||||||
return limit == -1 ? LIMIT_NOT_SET : String.valueOf(limit);
|
return limit == -1 ? LIMIT_NOT_SET : String.valueOf(limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getBaseLimit(@Nullable User user, Material m, GameModeAddon gm) {
|
||||||
|
Island is = gm.getIslands().getIsland(gm.getOverWorld(), user);
|
||||||
|
if (is == null) {
|
||||||
|
return LIMIT_NOT_SET;
|
||||||
|
}
|
||||||
|
|
||||||
|
int limit = this.getBlockLimitListener().
|
||||||
|
getMaterialLimits(is.getWorld(), is.getUniqueId()).
|
||||||
|
getOrDefault(m, -1);
|
||||||
|
|
||||||
|
if (limit > 0) {
|
||||||
|
limit -= this.getBlockLimitListener().getIsland(is).getBlockLimitOffset(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
return limit == -1 ? LIMIT_NOT_SET : String.valueOf(limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getLimit(@Nullable User user, EntityType e, GameModeAddon gm) {
|
||||||
|
Island is = gm.getIslands().getIsland(gm.getOverWorld(), user);
|
||||||
|
if (is == null) {
|
||||||
|
return LIMIT_NOT_SET;
|
||||||
|
}
|
||||||
|
|
||||||
|
int limit = this.getBlockLimitListener().getIsland(is).getEntityLimit(e);
|
||||||
|
if (limit < 0 && this.getSettings().getLimits().containsKey(e)) {
|
||||||
|
limit = this.getSettings().getLimits().get(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return limit == -1 ? LIMIT_NOT_SET : String.valueOf(limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getBaseLimit(@Nullable User user, EntityType e, GameModeAddon gm) {
|
||||||
|
Island is = gm.getIslands().getIsland(gm.getOverWorld(), user);
|
||||||
|
if (is == null || !this.getSettings().getLimits().containsKey(e)) {
|
||||||
|
return LIMIT_NOT_SET;
|
||||||
|
}
|
||||||
|
|
||||||
|
int limit = this.getSettings().getLimits().get(e);
|
||||||
|
|
||||||
|
return limit == -1 ? LIMIT_NOT_SET : String.valueOf(limit);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,6 @@
|
|||||||
package world.bentobox.limits.listeners;
|
package world.bentobox.limits.listeners;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.EnumMap;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -23,18 +15,7 @@ import org.bukkit.event.Event;
|
|||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.*;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
|
||||||
import org.bukkit.event.block.BlockBurnEvent;
|
|
||||||
import org.bukkit.event.block.BlockExplodeEvent;
|
|
||||||
import org.bukkit.event.block.BlockFadeEvent;
|
|
||||||
import org.bukkit.event.block.BlockFormEvent;
|
|
||||||
import org.bukkit.event.block.BlockFromToEvent;
|
|
||||||
import org.bukkit.event.block.BlockMultiPlaceEvent;
|
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
|
||||||
import org.bukkit.event.block.BlockSpreadEvent;
|
|
||||||
import org.bukkit.event.block.EntityBlockFormEvent;
|
|
||||||
import org.bukkit.event.block.LeavesDecayEvent;
|
|
||||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
@ -256,6 +237,16 @@ public class BlockLimitsListener implements Listener {
|
|||||||
process(e.getBlock(), true);
|
process(e.getBlock(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
|
public void onBlock(BlockGrowEvent e) {
|
||||||
|
if (process(e.getNewState().getBlock(), true) > -1) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
e.getBlock().getWorld().getBlockAt(e.getBlock().getLocation()).setBlockData(e.getBlock().getBlockData());
|
||||||
|
} else {
|
||||||
|
process(e.getBlock(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
public void onBlock(LeavesDecayEvent e) {
|
public void onBlock(LeavesDecayEvent e) {
|
||||||
process(e.getBlock(), false);
|
process(e.getBlock(), false);
|
||||||
|
Loading…
Reference in New Issue
Block a user