A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
35
standbyListener = new StandbyListener(this);36
pluginManager.registerEvents(standbyListener, this);38
doubleDoorListener = new DoubleDoorListener();39
pluginManager.registerEvents(doubleDoorListener, this);41
chairListener = new ChairListener();42
pluginManager.registerEvents(chairListener, this);44
eventListener = new EventListener();45
pluginManager.registerEvents(eventListener, this);46
}
57
{58
ItemStack handitem = player.getInventory().getItemInMainHand();59
ItemStack headitem = player.getInventory().getHelmet();61
player.getInventory().setHelmet(handitem);62
player.getInventory().setItemInMainHand((new ItemStack(Material.AIR)));
69
}70
}71
}73
if(label.equals("skull"))74
{75
if(!player.isOp())
77
player.sendMessage(DefaultConstants.Messages.NOT_ENOUGH_PERMISSION);78
return true;79
}81
if(args.length != 1)82
{83
return false;84
}86
ItemStack skull = new ItemStack(Material.PLAYER_HEAD);87
SkullMeta meta = (SkullMeta) skull.getItemMeta();88
meta.setOwner(args[0]);89
skull.setItemMeta(meta);91
player.getInventory().addItem(skull);92
}
114
boolean enabled = argument.equals("true");115
standbyListener.setEnabled(enabled);117
player.sendMessage(ChatColor.GRAY + "Standby mode is now "118
+ (enabled ? "enabled" : "disabled"));117
player.sendMessage(ChatColor.GRAY + "Standby mode is now " + (enabled ? "enabled" : "disabled"));118
}119
}
10
public static final class Messages11
{12
public static final String NOT_ENOUGH_PERMISSION = ChatColor.RED13
+ "You don't have enough Permission to perform this command!";12
public static final String NOT_ENOUGH_PERMISSION = ChatColor.RED + "You don't have enough Permission to perform this command!";13
}14
}
20
public class ChairListener implements Listener21
{22
private static final Material[] CHAIR_TYPE = new Material[] {23
Material.OAK_STAIRS,24
Material.SPRUCE_STAIRS,25
Material.BIRCH_STAIRS,26
Material.JUNGLE_STAIRS,27
Material.ACACIA_STAIRS,28
Material.DARK_OAK_STAIRS,29
Material.ACACIA_STAIRS,30
Material.CRIMSON_STAIRS,31
Material.WARPED_STAIRS32
};22
private static final Material[] CHAIR_TYPE = new Material[] { Material.OAK_STAIRS, Material.SPRUCE_STAIRS, Material.BIRCH_STAIRS, Material.JUNGLE_STAIRS, Material.ACACIA_STAIRS, Material.DARK_OAK_STAIRS, Material.ACACIA_STAIRS, Material.CRIMSON_STAIRS, Material.WARPED_STAIRS };24
@SuppressWarnings("deprecation")25
@EventHandler26
public void onPlayerInteract(PlayerInteractEvent event)
30
if(event.getClickedBlock() != null && !event.getPlayer().isSneaking())31
{32
Block block = event.getClickedBlock();34
if(isChair(block.getType()))35
{36
Block upperBlock = block.getWorld().getBlockAt(block.getLocation().add(0, 1, 0));38
if(upperBlock != null && upperBlock.getType() == Material.AIR)39
{40
Stairs stairs = (Stairs) block.getState().getBlockData();42
if(isCompatible(stairs))43
{44
Location location = block.getLocation().add(0.5, 0, 0.5);55
Arrow arrow = (Arrow) block.getWorld().spawnArrow(location, new Vector(), 0F, 0F);45
Arrow arrow = (Arrow) block.getWorld()46
.spawnArrow(location, new Vector(), 0F, 0F);47
arrow.setGravity(false);48
arrow.setInvulnerable(true);49
arrow.setPickupStatus(PickupStatus.DISALLOWED);50
arrow.setPassenger((Entity) event.getPlayer());52
event.setCancelled(true);53
}54
}
56
}57
}58
}60
@EventHandler61
public void onEntityDismount(EntityDismountEvent event)62
{63
if(event.getEntity() instanceof Player)64
{65
Entity entity = event.getDismounted();67
if(entity != null && entity instanceof Arrow)68
{69
entity.remove();70
}71
}72
}74
private boolean isChair(Material material)75
{76
for(Material chair : CHAIR_TYPE)
80
return true;81
}82
}84
return false;85
}87
private boolean isCompatible(Stairs stairs)88
{89
if(stairs.getHalf() != Half.BOTTOM)90
{91
return false;92
}94
if(stairs.isWaterlogged())95
{96
return false;97
}108
if(stairs.getShape() == Stairs.Shape.INNER_RIGHT || stairs.getShape() == Stairs.Shape.INNER_LEFT)99
if(stairs.getShape() == Stairs.Shape.INNER_RIGHT || stairs100
.getShape() == Stairs.Shape.INNER_LEFT)101
{102
return false;103
}105
return true;106
}107
}
1
package de.typable.minecrafthub.event;3
import java.util.ArrayList;4
import java.util.List;3
import org.bukkit.Location;4
import org.bukkit.Material;5
import org.bukkit.Sound;
11
import org.bukkit.event.Listener;12
import org.bukkit.event.block.Action;13
import org.bukkit.event.player.PlayerInteractEvent;14
import org.bukkit.inventory.ItemStack;17
public class DoubleDoorListener implements Listener18
{20
private static final Material[] DOOR_TYPE = new Material[] {21
Material.OAK_DOOR,22
Material.SPRUCE_DOOR,23
Material.BIRCH_DOOR,24
Material.JUNGLE_DOOR,25
Material.ACACIA_DOOR,26
Material.DARK_OAK_DOOR,27
Material.ACACIA_DOOR,28
Material.CRIMSON_DOOR,29
Material.WARPED_DOOR30
};19
private static final Material[] DOOR_TYPE = new Material[] { Material.OAK_DOOR, Material.SPRUCE_DOOR, Material.BIRCH_DOOR, Material.JUNGLE_DOOR, Material.ACACIA_DOOR, Material.DARK_OAK_DOOR, Material.ACACIA_DOOR, Material.CRIMSON_DOOR, Material.WARPED_DOOR };21
@EventHandler22
public void onPlayerInteract(PlayerInteractEvent event)23
{24
Player player = event.getPlayer();26
if(event.getAction() == Action.RIGHT_CLICK_BLOCK)27
{28
if(event.getClickedBlock() != null)29
{30
Block block = event.getClickedBlock();32
if(isDoor(block.getType()))33
{45
List<Block> blockList = getNearbyDoors(block.getLocation());34
if(player.isSneaking())35
{36
if(isHoldingItem(player.getInventory().getItemInMainHand()))37
{38
return;39
}41
if(isHoldingItem(player.getInventory().getItemInOffHand()))42
{43
return;44
}45
}47
BlockState state = block.getState();48
Door door = (Door) state.getBlockData();50
Location location = getOppositeDoor(door, block.getLocation());52
if(location == null)53
{54
return;55
}52
if(blockList.isEmpty())57
Block opposite = block.getWorld().getBlockAt(location);59
if(block.getType() != opposite.getType())60
{61
return;62
}57
for(Block blockItem : blockList)64
BlockState stateOpposite = opposite.getState();65
Door doorOpposite = (Door) stateOpposite.getBlockData();67
if(isCompatible(door, doorOpposite))68
{59
if(block.getType() != blockItem.getType())69
if(door.isOpen() && doorOpposite.isOpen())70
{61
continue;71
doorOpposite.setOpen(false);73
stateOpposite.setBlockData(doorOpposite);74
stateOpposite.update();76
player.playSound(player.getLocation(), Sound.BLOCK_WOODEN_DOOR_CLOSE, 1F, 1F);77
}64
BlockState state = block.getState();65
BlockState stateItem = blockItem.getState();67
Door door = (Door) state.getBlockData();68
Door doorItem = (Door) stateItem.getBlockData();70
if(isCompatible(door, doorItem))79
if(!door.isOpen() && !doorOpposite.isOpen())80
{72
if(door.isOpen() && doorItem.isOpen())73
{74
doorItem.setOpen(false);76
stateItem.setBlockData(doorItem);77
stateItem.update();79
player.playSound(player.getLocation(), Sound.BLOCK_WOODEN_DOOR_CLOSE, 1F, 1F);80
}82
if(!door.isOpen() && !doorItem.isOpen())83
{84
doorItem.setOpen(true);86
stateItem.setBlockData(doorItem);87
stateItem.update();89
player.playSound(player.getLocation(), Sound.BLOCK_WOODEN_DOOR_OPEN, 1F, 1F);90
}81
doorOpposite.setOpen(true);83
stateOpposite.setBlockData(doorOpposite);84
stateOpposite.update();86
player.playSound(player.getLocation(), Sound.BLOCK_WOODEN_DOOR_OPEN, 1F, 1F);87
}88
}89
}90
}91
}92
}94
private boolean isHoldingItem(ItemStack item)95
{96
if(item == null)97
{98
return false;99
}101
if(item.getType() == Material.AIR)102
{103
return false;104
}106
return true;107
}109
private boolean isDoor(Material material)110
{111
for(Material door : DOOR_TYPE)
115
return true;116
}117
}119
return false;120
}122
private Location getOppositeDoor(Door door, Location location)123
{124
int invert = door.getHinge() == Door.Hinge.LEFT ? 1 : -1;126
switch(door.getFacing())127
{128
case NORTH:129
location.add(1 * invert, 0, 0);130
break;131
case EAST:132
location.add(0, 0, 1 * invert);133
break;134
case SOUTH:135
location.add(-1 * invert, 0, 0);136
break;137
case WEST:138
location.add(0, 0, -1 * invert);139
break;140
default:141
return null;142
}144
return location;145
}147
private boolean isCompatible(Door door, Door doorItem)148
{149
if(door.getFacing() != doorItem.getFacing())150
{151
return false;152
}154
if(door.getHalf() != doorItem.getHalf())155
{156
return false;157
}159
if(door.getHinge() == doorItem.getHinge())160
{161
return false;162
}164
return true;165
}131
private List<Block> getNearbyDoors(Location location)132
{133
List<Block> blockList = new ArrayList<>();135
int blockX = location.getBlockX();136
int blockY = location.getBlockY();137
int blockZ = location.getBlockZ();139
for(int x = blockX - 1; x <= blockX + 1; x++)140
{141
for(int z = blockZ - 1; z <= blockZ + 1; z++)142
{143
if(blockX != x || blockZ != z)144
{145
Block block = location.getWorld().getBlockAt(x, blockY, z);147
if(block != null && isDoor(block.getType()))148
{149
blockList.add(block);150
}151
}152
}153
}155
return blockList;156
}166
}
9
import org.bukkit.event.player.AsyncPlayerChatEvent;10
import org.bukkit.event.player.PlayerInteractEvent;13
public class EventListener implements Listener14
{15
@EventHandler
17
{18
if(event.getAction() == Action.PHYSICAL)19
{19
if(event.getClickedBlock() != null && event.getClickedBlock().getType() == Material.FARMLAND)20
if(event.getClickedBlock() != null && event.getClickedBlock()21
.getType() == Material.FARMLAND)22
{23
event.setCancelled(true);24
}25
}26
}28
@EventHandler29
public void onEntityExplode(EntityExplodeEvent event)30
{31
event.blockList().clear();32
}34
@EventHandler35
public void onChat(AsyncPlayerChatEvent event)36
{35
String format = ChatColor.WHITE + event.getPlayer().getName() + ": " + ChatColor.GRAY + event.getMessage();37
String format = ChatColor.WHITE + event.getPlayer().getName() + ": " + ChatColor.GRAY + event38
.getMessage();39
event.setFormat(format);40
}41
}
17
public class StandbyListener implements Listener, Runnable18
{18
{19
private Plugin plugin;20
private BukkitTask task;21
private boolean enabled;
43
if(enabled)44
{45
Collection<? extends Player> online = Bukkit.getOnlinePlayers();47
if(online.size() == 1 && online.contains(event.getPlayer()))48
{49
task = Bukkit.getScheduler().runTaskLater(plugin, this, delay * DefaultConstants.TICK);