Skip to content

Instantly share code, notes, and snippets.

@aadnk
Created August 29, 2013 21:44
Show Gist options
  • Select an option

  • Save aadnk/6383809 to your computer and use it in GitHub Desktop.

Select an option

Save aadnk/6383809 to your computer and use it in GitHub Desktop.

Revisions

  1. aadnk created this gist Aug 29, 2013.
    70 changes: 70 additions & 0 deletions SoundlessTeethlessExplosion.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,70 @@
    package com.comphenix.example;

    import org.bukkit.Location;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDamageByBlockEvent;
    import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
    import org.bukkit.plugin.java.JavaPlugin;

    import com.comphenix.protocol.Packets;
    import com.comphenix.protocol.ProtocolLibrary;
    import com.comphenix.protocol.events.ConnectionSide;
    import com.comphenix.protocol.events.PacketAdapter;
    import com.comphenix.protocol.events.PacketEvent;

    public class SoundlessTeethlessExplosion extends JavaPlugin implements Listener {
    private boolean suppressDamage;

    @Override
    public void onEnable() {
    getServer().getPluginManager().registerEvents(this, this);

    ProtocolLibrary.getProtocolManager().addPacketListener(
    new PacketAdapter(this, ConnectionSide.SERVER_SIDE, Packets.Server.NAMED_SOUND_EFFECT) {
    @Override
    public void onPacketSending(PacketEvent event) {
    String soundName = event.getPacket().getStrings().read(0);

    if ("random.explode".equals(soundName) && suppressDamage) {
    event.setCancelled(true);
    }
    }
    });
    }

    @EventHandler
    public void onEntityDamage(EntityDamageByBlockEvent event) {
    if(event.getCause().equals(DamageCause.BLOCK_EXPLOSION)) {
    if (suppressDamage) {
    event.setCancelled(true);
    }
    }
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (sender instanceof Player) {
    Player player = (Player) sender;

    createSoundlessExplosion(player.getLocation());
    }

    return true;
    }

    /**
    * Create a soundless explosion at a given location.
    * <p>
    * Does not do any damage.
    * @param loc - the location.
    */
    private void createSoundlessExplosion(Location loc) {
    suppressDamage = true;
    loc.getWorld().createExplosion(loc, 10);
    suppressDamage = false;
    }
    }