A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: 223fcf9c47828e8d3295f4eefd797527ea7f2419 (5691 bytes)[doc][blame][raw]
1
package poppy.modules;3
import java.util.Set;5
import org.bukkit.ChatColor;6
import org.bukkit.Material;7
import org.bukkit.Tag;8
import org.bukkit.block.Block;9
import org.bukkit.block.BlockFace;10
import org.bukkit.block.data.Ageable;11
import org.bukkit.block.data.BlockData;12
import org.bukkit.block.data.Directional;13
import org.bukkit.entity.ArmorStand;14
import org.bukkit.entity.EntityType;15
import org.bukkit.entity.Player;16
import org.bukkit.entity.Snowball;17
import org.bukkit.event.EventHandler;18
import org.bukkit.event.Listener;19
import org.bukkit.event.block.Action;20
import org.bukkit.event.entity.EntityChangeBlockEvent;21
import org.bukkit.event.entity.EntityDamageByEntityEvent;22
import org.bukkit.event.entity.EntityDeathEvent;23
import org.bukkit.event.entity.EntityExplodeEvent;24
import org.bukkit.event.player.AsyncPlayerChatEvent;25
import org.bukkit.event.player.PlayerInteractAtEntityEvent;26
import org.bukkit.event.player.PlayerInteractEvent;27
import org.bukkit.inventory.EquipmentSlot;28
import org.bukkit.inventory.ItemStack;29
import org.bukkit.potion.PotionEffect;30
import org.bukkit.potion.PotionEffectType;32
import poppy.Utils;35
public class CommonModule implements Listener36
{37
@EventHandler38
public void onPlayerInteract(PlayerInteractEvent event)39
{40
final Player player = event.getPlayer();42
if(event.getAction() == Action.PHYSICAL)43
{44
if(event.getClickedBlock() != null)45
{46
if(event.getClickedBlock().getType() == Material.FARMLAND)47
{48
event.setCancelled(true);49
}50
}51
}53
if(event.getAction() == Action.RIGHT_CLICK_BLOCK)54
{55
final EquipmentSlot equip = event.getHand();57
if(equip.equals(EquipmentSlot.HAND))58
{59
final Block block = event.getClickedBlock();61
if(block == null)62
{63
return;64
}66
final Material material = block.getType();67
final Set<Material> signs = Tag.ALL_SIGNS.getValues();68
final String playerMainItemTypeString = player.getInventory().getItemInMainHand().getType().toString();70
for(Material sign : signs)71
{72
if(material == sign && !player.isSneaking())73
{74
if(!playerMainItemTypeString.endsWith("DYE") && !playerMainItemTypeString.endsWith("SAC"))75
{76
event.setCancelled(true);77
}78
}79
}81
// Location blockpos = block.getLocation().clone();83
// double radius = 2;85
// for (int i = 0; i < 20; i++) {87
// double posX = (radius * Math.sin(i));88
// double posZ = (radius * Math.cos(i));90
// player.spawnParticle(Particle.FIREWORKS_SPARK, blockpos.getX() + posX + 0.5, blockpos.getY() + 2, blockpos.getZ() + posZ + 0.5 ,2, 0, 0, 0, 0);92
// }94
//player.spawnParticle(Particle.FIREWORKS_SPARK, blockpos.getX() + 0.5 , blockpos.getY() + 2, blockpos.getZ() + 0.5 ,2, 0, 0, 0, 0);96
if(player.isSneaking())97
{98
return;99
}101
final BlockData blockdata = block.getBlockData();103
if(blockdata instanceof Ageable)104
{105
final Ageable ageable = (Ageable) blockdata;107
if(Utils.isFarmable(material) && ageable.getAge() == ageable.getMaximumAge())108
{110
event.setCancelled(true);112
if(blockdata instanceof Directional)113
{114
Directional directional = (Directional) blockdata;115
final BlockFace blockface = directional.getFacing();117
block.breakNaturally(player.getItemInUse());118
block.setType(material);119
directional = (Directional) blockdata;120
ageable.setAge(0);121
directional.setFacing(blockface);122
block.setBlockData(blockdata);123
}124
else125
{126
block.breakNaturally(player.getItemInUse());127
block.setType(material);128
}129
}130
}132
if(material == Material.MELON && Utils.hasStem(block) || material == Material.PUMPKIN && Utils.hasStem(block))133
{134
block.breakNaturally(player.getInventory().getItemInMainHand());135
}136
}137
}138
}140
@EventHandler141
public void onEntityExplode(EntityExplodeEvent event)142
{143
if(event.getEntityType() == EntityType.CREEPER)144
{145
event.blockList().clear();146
}147
}149
@EventHandler150
public void onEntityChangeBlock(EntityChangeBlockEvent event)151
{152
if(event.getEntityType() == EntityType.ENDERMAN)153
{154
event.setCancelled(true);155
}156
}158
@EventHandler159
public void onChat(AsyncPlayerChatEvent event)160
{161
String message = ChatColor.GRAY + event.getMessage().replace("%", "%%");162
String format = ChatColor.WHITE + event.getPlayer().getName() + ": " + message;163
event.setFormat(format);164
}166
@EventHandler167
public void onEntityHit(EntityDamageByEntityEvent event)168
{169
if(event.getDamager() instanceof Snowball)170
{171
final Snowball snowball = (Snowball) event.getDamager();173
if(snowball.getShooter() instanceof Player)174
{175
final Player player = (Player) event.getEntity();177
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 20 * 2, 1));178
event.setDamage(1);179
}180
}181
}183
@EventHandler184
public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event)185
{186
final Player player = event.getPlayer();188
if(event.getRightClicked().getType().equals(EntityType.ARMOR_STAND))189
{190
final ItemStack item = player.getInventory().getItemInMainHand();192
if(item.getType() == Material.STICK && item.getAmount() > 1 && player.isSneaking())193
{194
final ArmorStand armorstand = (ArmorStand) event.getRightClicked();196
armorstand.setArms(true);197
item.setAmount(item.getAmount() - 2);199
event.setCancelled(true);200
}201
}202
}204
@EventHandler205
public void onArmorStandDestroy(EntityDeathEvent event)206
{207
if(event.getEntity() instanceof ArmorStand)208
{209
final ArmorStand armorstand = (ArmorStand) event.getEntity();211
if(armorstand.hasArms())212
{213
event.getDrops().add(new ItemStack(Material.STICK, 2));214
}215
}216
}