Created
August 29, 2013 21:44
-
-
Save aadnk/6383809 to your computer and use it in GitHub Desktop.
Revisions
-
aadnk created this gist
Aug 29, 2013 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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; } }