TotalFreedomMod/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java
2019-01-27 18:49:07 -07:00

155 lines
5.3 KiB
Java

package me.totalfreedom.totalfreedommod.blocking;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.totalfreedommod.util.Groups;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Dispenser;
import org.bukkit.block.ShulkerBox;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.ItemStack;
public class BlockBlocker extends FreedomService
{
public BlockBlocker(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
{
}
@Override
protected void onStop()
{
}
@EventHandler(priority = EventPriority.HIGH)
public void onBlockPlace(BlockPlaceEvent event)
{
final Player player = event.getPlayer();
switch (event.getBlockPlaced().getType())
{
case LAVA:
{
if (ConfigEntry.ALLOW_LAVA_PLACE.getBoolean())
{
FLog.info(String.format("%s placed lava @ %s", player.getName(), FUtil.formatLocation(event.getBlock().getLocation())));
}
else
{
player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1));
player.sendMessage(ChatColor.GRAY + "Lava placement is currently disabled.");
event.setCancelled(true);
}
break;
}
case WATER:
{
if (ConfigEntry.ALLOW_WATER_PLACE.getBoolean())
{
FLog.info(String.format("%s placed water @ %s", player.getName(), FUtil.formatLocation(event.getBlock().getLocation())));
}
else
{
player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1));
player.sendMessage(ChatColor.GRAY + "Water placement is currently disabled.");
event.setCancelled(true);
}
break;
}
case FIRE:
{
if (ConfigEntry.ALLOW_FIRE_PLACE.getBoolean())
{
FLog.info(String.format("%s placed fire @ %s", player.getName(), FUtil.formatLocation(event.getBlock().getLocation())));
}
else
{
player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1));
player.sendMessage(ChatColor.GRAY + "Fire placement is currently disabled.");
event.setCancelled(true);
}
break;
}
case TNT:
{
if (ConfigEntry.ALLOW_EXPLOSIONS.getBoolean())
{
FLog.info(String.format("%s placed TNT @ %s", player.getName(), FUtil.formatLocation(event.getBlock().getLocation())));
}
break;
}
case STRUCTURE_BLOCK:
{
player.sendMessage(ChatColor.GRAY + "Structure blocks are disabled.");
player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1));
event.setCancelled(true);
break;
}
}
}
@EventHandler(priority = EventPriority.HIGH)
public void onShulkerBoxPlace(BlockPlaceEvent event)
{
Block block = event.getBlock();
if (Groups.SHULKER_BOXES.contains(event.getBlock().getType()))
{
ShulkerBox shulkerBox = (ShulkerBox)block.getState();
boolean empty = true;
for (ItemStack itemStack : shulkerBox.getInventory().getContents())
{
if (itemStack != null)
{
empty = false;
break;
}
}
if (!empty)
{
shulkerBox.getInventory().clear();
event.getPlayer().sendMessage(ChatColor.RED + "For security reasons, your shulker box has been emptied.");
}
}
}
@EventHandler(priority = EventPriority.HIGH)
public void onDispenserPlace(BlockPlaceEvent event)
{
Block block = event.getBlock();
if (block.getType().equals(Material.DISPENSER))
{
Dispenser dispenser = (Dispenser)block.getState();
boolean empty = true;
for (ItemStack itemStack : dispenser.getInventory().getContents())
{
if (itemStack != null)
{
empty = false;
break;
}
}
if (!empty)
{
dispenser.getInventory().clear();
event.getPlayer().sendMessage(ChatColor.RED + "For security reasons, dispenser has been emptied.");
}
}
}
}