Skip to content

Commit

Permalink
Added a possibility to cancel the drop of a sign.
Browse files Browse the repository at this point in the history
  • Loading branch information
axelpey committed Sep 5, 2012
1 parent 21913bf commit e465ba8
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 1 deletion.
Expand Up @@ -91,6 +91,11 @@ public int getChunkUnloadRange()
return getConfig().getInt("cancelChunkUnloadRange", 4);
}

public boolean getSignDrop()
{
return getConfig().getBoolean("DropSignWhenBroken", true);
}

public boolean getDebugMode()
{
return getConfig().getBoolean("DebugMode", false);
Expand Down
@@ -1,10 +1,13 @@
package net.licks92.WirelessRedstone.Listeners;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
Expand Down Expand Up @@ -283,6 +286,10 @@ public void onBlockBreak(BlockBreakEvent event)
Sign signObject = (Sign) event.getBlock().getState();
if (plugin.WireBox.isReceiver(signObject.getLine(0)))
{
if(!WirelessRedstone.config.getSignDrop())
{
cancelEvent(event);
}
if (plugin.WireBox.hasAccessToChannel(event.getPlayer(),signObject.getLine(1))
&& plugin.permissions.canRemoveReceiver(event.getPlayer()))
{
Expand Down Expand Up @@ -315,6 +322,10 @@ public void onBlockBreak(BlockBreakEvent event)
}
else if (plugin.WireBox.isTransmitter(signObject.getLine(0)))
{
if(!WirelessRedstone.config.getSignDrop())
{
cancelEvent(event);
}
if (plugin.WireBox.hasAccessToChannel(event.getPlayer(),signObject.getLine(1))
&& plugin.permissions.canRemoveTransmitter(event.getPlayer()))
{
Expand Down Expand Up @@ -376,6 +387,10 @@ else if (plugin.WireBox.getChannel(signObject.getLine(1)).getTransmitters().size
}
else if(plugin.WireBox.isScreen(signObject.getLine(0)))
{
if(!WirelessRedstone.config.getSignDrop())
{
cancelEvent(event);
}
if (plugin.WireBox.hasAccessToChannel(event.getPlayer(),signObject.getLine(1))
&& plugin.permissions.canRemoveScreen(event.getPlayer()))
{
Expand Down Expand Up @@ -427,4 +442,45 @@ public void onBlockFromTo(BlockFromToEvent event)
}
}
}

private void cancelEvent(BlockBreakEvent event)
{
/*
* Methods cancelEvent and sendBlockBreakParticles, taken from http://www.bukkit.fr/index.php?threads/enlever-le-drop-dun-block.850/page-2#post-11582
* All credits to richie3366.
*/

event.setCancelled(true);

ItemStack is = event.getPlayer().getItemInHand();

if(is.getType().getMaxDurability() > 0){
is.setDurability((short) (is.getDurability() + 1));

if(is.getDurability() >= is.getType().getMaxDurability()){
event.getPlayer().setItemInHand(null);
}
}

Block b = event.getBlock();

int lastType = b.getTypeId();

b.setType(Material.AIR);

sendBlockBreakParticles(b, lastType, event.getPlayer());
}

private void sendBlockBreakParticles(Block b, int lastType, Player author)
{
int radius = 64;
radius *= radius;

for (Player player : b.getWorld().getPlayers()) {
int distance = (int)player.getLocation().distanceSquared(b.getLocation());
if (distance <= radius && !player.equals(author)){
player.playEffect(b.getLocation(), Effect.STEP_SOUND, lastType);
}
}
}
}
5 changes: 4 additions & 1 deletion src/main/resources/config.yml
Expand Up @@ -13,4 +13,7 @@ cancelChunkUnloadRange: 4
UseVault: true

#Debug Mode, don't activate it if you're not a tester or a developper
DebugMode: false
DebugMode: false

#This value can be set to false, because some people can create signs with a command and destroy them to get free signs.
DropSignWhenBroken: true

0 comments on commit e465ba8

Please sign in to comment.