A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: 4c08d177fee2a413da44ca35b7172839077208df (2979 bytes)[doc][blame][raw]
1
package de.typable.minecrafthub.event;3
import java.util.ArrayList;4
import java.util.List;6
import org.bukkit.Location;7
import org.bukkit.Material;8
import org.bukkit.block.Block;9
import org.bukkit.block.BlockState;10
import org.bukkit.block.data.type.Door;11
import org.bukkit.event.EventHandler;12
import org.bukkit.event.Listener;13
import org.bukkit.event.block.Action;14
import org.bukkit.event.player.PlayerInteractEvent;16
public class DoubleDoorListener implements Listener17
{18
private static final Material[] DOOR_TYPE = new Material[] {19
Material.OAK_DOOR,20
Material.SPRUCE_DOOR,21
Material.BIRCH_DOOR,22
Material.JUNGLE_DOOR,23
Material.ACACIA_DOOR,24
Material.DARK_OAK_DOOR,25
Material.ACACIA_DOOR,26
Material.CRIMSON_DOOR,27
Material.WARPED_DOOR28
};30
@EventHandler31
public void onPlayerInteract(PlayerInteractEvent event)32
{33
if(event.getAction() == Action.RIGHT_CLICK_BLOCK)34
{35
if(event.getClickedBlock() != null)36
{37
Block block = event.getClickedBlock();39
if(isDoor(block.getType()))40
{41
List<Block> blockList = getNearbyDoors(block.getLocation());43
if(blockList.isEmpty())44
{45
return;46
}48
for(Block blockItem : blockList)49
{50
if(block.getType() != blockItem.getType())51
{52
continue;53
}55
BlockState state = block.getState();56
BlockState stateItem = blockItem.getState();58
Door door = (Door) state.getBlockData();59
Door doorItem = (Door) stateItem.getBlockData();61
if(isCompatible(door, doorItem))62
{63
if(door.isOpen() && doorItem.isOpen())64
{65
doorItem.setOpen(false);67
stateItem.setBlockData(doorItem);68
stateItem.update();69
}71
if(!door.isOpen() && !doorItem.isOpen())72
{73
doorItem.setOpen(true);75
stateItem.setBlockData(doorItem);76
stateItem.update();77
}78
}79
}80
}81
}82
}83
}85
private boolean isDoor(Material material)86
{87
for(Material door : DOOR_TYPE)88
{89
if(material == door)90
{91
return true;92
}93
}95
return false;96
}98
private boolean isCompatible(Door door, Door doorItem)99
{100
if(door.getFacing() != doorItem.getFacing())101
{102
return false;103
}105
if(door.getHalf() != doorItem.getHalf())106
{107
return false;108
}110
if(door.getHinge() == doorItem.getHinge())111
{112
return false;113
}115
return true;116
}118
private List<Block> getNearbyDoors(Location location)119
{120
List<Block> blockList = new ArrayList<>();122
int blockX = location.getBlockX();123
int blockY = location.getBlockY();124
int blockZ = location.getBlockZ();126
for(int x = blockX - 1; x <= blockX + 1; x++)127
{128
for(int z = blockZ - 1; z <= blockZ + 1; z++)129
{130
if(blockX != x || blockZ != z)131
{132
Block block = location.getWorld().getBlockAt(x, blockY, z);134
if(block != null && isDoor(block.getType()))135
{136
blockList.add(block);137
}138
}139
}140
}142
return blockList;143
}144
}