mirror of
https://github.com/PryPurity/WorldBorder.git
synced 2024-09-26 03:42:36 +02:00
Merge pull request #39 from gipsy-king/prevent_block_place
add prevent-block-place option
This commit is contained in:
commit
d2fbd83bd5
31
src/main/java/com/wimbli/WorldBorder/BlockPlaceListener.java
Normal file
31
src/main/java/com/wimbli/WorldBorder/BlockPlaceListener.java
Normal file
@ -0,0 +1,31 @@
|
||||
package com.wimbli.WorldBorder;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
|
||||
public class BlockPlaceListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||
public void onBlockPlace(BlockPlaceEvent event)
|
||||
{
|
||||
Location loc = event.getBlockPlaced().getLocation();
|
||||
if (loc == null) return;
|
||||
|
||||
World world = loc.getWorld();
|
||||
if (world == null) return;
|
||||
BorderData border = Config.Border(world.getName());
|
||||
if (border == null) return;
|
||||
|
||||
if (!border.insideBorder(loc.getX(), loc.getZ(), Config.ShapeRound())) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void unregister() {
|
||||
HandlerList.unregisterAll(this);
|
||||
}
|
||||
}
|
@ -54,6 +54,7 @@ public class Config
|
||||
private static boolean denyEnderpearl = false;
|
||||
private static int fillAutosaveFrequency = 30;
|
||||
private static int fillMemoryTolerance = 500;
|
||||
private static boolean preventBlockPlace = false;
|
||||
|
||||
// for monitoring plugin efficiency
|
||||
// public static long timeUsed = 0;
|
||||
@ -259,6 +260,18 @@ public class Config
|
||||
world.playEffect(loc, Effect.SMOKE, 4);
|
||||
world.playEffect(loc, Effect.GHAST_SHOOT, 0);
|
||||
}
|
||||
|
||||
public static void setPreventBlockPlace(boolean enable)
|
||||
{
|
||||
preventBlockPlace = enable;
|
||||
log("prevent block place " + (enable ? "enabled" : "disabled") + ".");
|
||||
save(true);
|
||||
}
|
||||
|
||||
public static boolean preventBlockPlace()
|
||||
{
|
||||
return preventBlockPlace;
|
||||
}
|
||||
|
||||
public static boolean getIfPlayerKill()
|
||||
{
|
||||
@ -566,6 +579,7 @@ public class Config
|
||||
fillAutosaveFrequency = cfg.getInt("fill-autosave-frequency", 30);
|
||||
importBypassStringList(cfg.getStringList("bypass-list-uuids"));
|
||||
fillMemoryTolerance = cfg.getInt("fill-memory-tolerance", 500);
|
||||
preventBlockPlace = cfg.getBoolean("prevent-block-place");
|
||||
|
||||
StartBorderTimer();
|
||||
|
||||
@ -672,6 +686,7 @@ public class Config
|
||||
cfg.set("fill-autosave-frequency", fillAutosaveFrequency);
|
||||
cfg.set("bypass-list-uuids", exportBypassStringList());
|
||||
cfg.set("fill-memory-tolerance", fillMemoryTolerance);
|
||||
cfg.set("prevent-block-place", preventBlockPlace);
|
||||
|
||||
cfg.set("worlds", null);
|
||||
for(Entry<String, BorderData> stringBorderDataEntry : borders.entrySet())
|
||||
|
@ -42,6 +42,7 @@ public class WBCommand implements CommandExecutor
|
||||
addCmd(new CmdKnockback()); // 1
|
||||
addCmd(new CmdWrap()); // 1
|
||||
addCmd(new CmdWhoosh()); // 1
|
||||
addCmd(new CmdPreventPlace()); // 1
|
||||
addCmd(new CmdGetmsg()); // 1
|
||||
addCmd(new CmdSetmsg()); // 1
|
||||
addCmd(new CmdWshape()); // 3
|
||||
|
@ -8,6 +8,7 @@ public class WorldBorder extends JavaPlugin
|
||||
{
|
||||
public static volatile WorldBorder plugin = null;
|
||||
public static volatile WBCommand wbCommand = null;
|
||||
private BlockPlaceListener blockPlaceListener = null;
|
||||
|
||||
@Override
|
||||
public void onEnable()
|
||||
@ -25,6 +26,10 @@ public class WorldBorder extends JavaPlugin
|
||||
|
||||
// keep an eye on teleports, to redirect them to a spot inside the border if necessary
|
||||
getServer().getPluginManager().registerEvents(new WBListener(), this);
|
||||
|
||||
if (Config.preventBlockPlace()) {
|
||||
enableBlockPlaceListener(true);
|
||||
}
|
||||
|
||||
// integrate with DynMap if it's available
|
||||
DynMapFeatures.setup();
|
||||
@ -57,4 +62,13 @@ public class WorldBorder extends JavaPlugin
|
||||
{
|
||||
return getWorldBorder(worldName);
|
||||
}
|
||||
|
||||
public void enableBlockPlaceListener(boolean enable) {
|
||||
if (enable) {
|
||||
getServer().getPluginManager().registerEvents(this.blockPlaceListener = new BlockPlaceListener(), this);
|
||||
} else {
|
||||
blockPlaceListener.unregister();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,47 @@
|
||||
package com.wimbli.WorldBorder.cmd;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
import com.wimbli.WorldBorder.BlockPlaceListener;
|
||||
import com.wimbli.WorldBorder.Config;
|
||||
import com.wimbli.WorldBorder.WorldBorder;
|
||||
|
||||
public class CmdPreventPlace extends WBCmd {
|
||||
|
||||
public CmdPreventPlace() {
|
||||
name = permission = "preventblockplace";
|
||||
minParams = 0;
|
||||
maxParams = 1;
|
||||
|
||||
addCmdExample(nameEmphasized() + "<on|off> - turn prevent-block-place on or off.");
|
||||
helpText = "Default value: off. This will prevent players from placing blocks outside the world's border.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cmdStatus(CommandSender sender)
|
||||
{
|
||||
sender.sendMessage(C_HEAD + "preventblockplace is " + enabledColored(Config.preventBlockPlace()) + C_HEAD + ".");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, Player player, List<String> params, String worldName)
|
||||
{
|
||||
if (params.size() == 1) {
|
||||
boolean previousSetting = Config.preventBlockPlace();
|
||||
Config.setPreventBlockPlace(strAsBool(params.get(0)));
|
||||
if (previousSetting != Config.preventBlockPlace()) {
|
||||
WorldBorder.plugin.enableBlockPlaceListener(Config.preventBlockPlace());
|
||||
}
|
||||
}
|
||||
|
||||
if (player != null)
|
||||
{
|
||||
Config.log((Config.preventBlockPlace() ? "Enabled" : "Disabled") + " preventblockplace at the command of player \"" + player.getName() + "\".");
|
||||
cmdStatus(sender);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user