Skip to content

Instantly share code, notes, and snippets.

@aadnk
Created August 29, 2013 21:44
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aadnk/6383809 to your computer and use it in GitHub Desktop.
Save aadnk/6383809 to your computer and use it in GitHub Desktop.
Create a soundless explosion that does no damage.
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;
}
}
@TheLouisHong
Copy link

Well done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment