下面列出了org.bukkit.block.Skull#setRotation ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@SuppressWarnings("deprecation")
public boolean set(Block block) {
Skull skull = (Skull) block.getState();
if(skullOwnerName != null){
skull.setOwner(skullOwnerName);
}
skull.setSkullType(skullType);
skull.setRotation(skullRotation);
skull.setRawData((byte) skullStanding);
// Texture update
if(skullTextureValue != null){
setSkullWithNonPlayerProfile(skullTextureValue, skullTextureSignature, skullOwnerUUID, skullOwnerName, skull);
}
skull.update(true, false);
return true;
}
public void setBlockAsHead(String name, Block headBlock, BlockFaceXZ direction) {
// set the type to skull
headBlock.setType(Material.SKULL);
headBlock.setData((byte) 1);
final Skull state = (Skull) headBlock.getState();
state.setSkullType(SkullType.PLAYER);
state.setOwner(name);
state.setRotation(direction.getBlockFace());
state.update();
}
public void killOfflineUhcPlayer(UhcPlayer uhcPlayer, @Nullable Location location, Set<ItemStack> playerDrops, @Nullable Player killer){
GameManager gm = GameManager.getGameManager();
PlayersManager pm = gm.getPlayersManager();
MainConfiguration cfg = gm.getConfiguration();
if (uhcPlayer.getState() != PlayerState.PLAYING){
Bukkit.getLogger().warning("[UhcCore] " + uhcPlayer.getName() + " died while already in 'DEAD' mode!");
return;
}
// kill event
if(killer != null){
UhcPlayer uhcKiller = pm.getUhcPlayer(killer);
uhcKiller.kills++;
// Call Bukkit event
UhcPlayerKillEvent killEvent = new UhcPlayerKillEvent(uhcKiller, uhcPlayer);
Bukkit.getServer().getPluginManager().callEvent(killEvent);
if(cfg.getEnableKillEvent()){
double reward = cfg.getRewardKillEvent();
List<String> killCommands = cfg.getKillCommands();
if (reward > 0) {
VaultManager.addMoney(killer, reward);
if (!Lang.EVENT_KILL_REWARD.isEmpty()) {
killer.sendMessage(Lang.EVENT_KILL_REWARD.replace("%money%", "" + reward));
}
}
killCommands.forEach(cmd -> {
try {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd.replace("%name%", killer.getName()));
} catch (CommandException exception) {
Bukkit.getLogger().warning("[UhcCore] Failed to execute kill reward command: " + cmd);
exception.printStackTrace();
}
});
}
}
// Store drops in case player gets re-spawned.
uhcPlayer.getStoredItems().clear();
uhcPlayer.getStoredItems().addAll(playerDrops);
// eliminations
ScenarioManager sm = gm.getScenarioManager();
if (!sm.isActivated(Scenario.SILENTNIGHT) || !((SilentNightListener) sm.getScenarioListener(Scenario.SILENTNIGHT)).isNightMode()) {
gm.broadcastInfoMessage(Lang.PLAYERS_ELIMINATED.replace("%player%", uhcPlayer.getName()));
}
if(cfg.getRegenHeadDropOnPlayerDeath()){
playerDrops.add(UhcItems.createRegenHead(uhcPlayer));
}
if(location != null && cfg.getEnableGoldenHeads()){
if (cfg.getPlaceHeadOnFence() && !gm.getScenarioManager().isActivated(Scenario.TIMEBOMB)){
// place head on fence
Location loc = location.clone().add(1,0,0);
loc.getBlock().setType(UniversalMaterial.OAK_FENCE.getType());
loc.add(0, 1, 0);
loc.getBlock().setType(UniversalMaterial.PLAYER_HEAD_BLOCK.getType());
Skull skull = (Skull) loc.getBlock().getState();
VersionUtils.getVersionUtils().setSkullOwner(skull, uhcPlayer);
skull.setRotation(BlockFace.NORTH);
skull.update();
}else{
playerDrops.add(UhcItems.createGoldenHeadPlayerSkull(uhcPlayer.getName(), uhcPlayer.getUuid()));
}
}
if(location != null && cfg.getEnableExpDropOnDeath()){
UhcItems.spawnExtraXp(location, cfg.getExpDropOnDeath());
}
if (location != null){
playerDrops.forEach(item -> location.getWorld().dropItem(location, item));
}
uhcPlayer.setState(PlayerState.DEAD);
pm.strikeLightning(uhcPlayer);
pm.playSoundPlayerDeath();
pm.checkIfRemainingPlayers();
}
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerDeath(PlayerDeathEvent event){
Player player = event.getEntity();
GameManager gm = GameManager.getGameManager();
PlayersManager pm = gm.getPlayersManager();
MainConfiguration cfg = gm.getConfiguration();
UhcPlayer uhcPlayer = pm.getUhcPlayer(player);
if (uhcPlayer.getState() != PlayerState.PLAYING){
Bukkit.getLogger().warning("[UhcCore] " + player.getName() + " died while already in 'DEAD' mode!");
player.kickPlayer("Don't cheat!");
return;
}
pm.setLastDeathTime();
// kill event
Player killer = player.getKiller();
if(killer != null){
UhcPlayer uhcKiller = pm.getUhcPlayer(killer);
uhcKiller.kills++;
// Call Bukkit event
UhcPlayerKillEvent killEvent = new UhcPlayerKillEvent(uhcPlayer, uhcKiller);
Bukkit.getServer().getPluginManager().callEvent(killEvent);
if(cfg.getEnableKillEvent()){
double reward = cfg.getRewardKillEvent();
List<String> killCommands = cfg.getKillCommands();
if (reward > 0) {
VaultManager.addMoney(killer, reward);
if (!Lang.EVENT_KILL_REWARD.isEmpty()) {
killer.sendMessage(Lang.EVENT_KILL_REWARD.replace("%money%", "" + reward));
}
}
// If the list is empty, this will never execute
killCommands.forEach(cmd -> {
try {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd.replace("%name%", uhcKiller.getRealName()));
} catch (CommandException exception){
Bukkit.getLogger().warning("[UhcCore] Failed to execute kill reward command: " + cmd);
exception.printStackTrace();
}
});
}
}
// Store drops in case player gets re-spawned.
uhcPlayer.getStoredItems().clear();
uhcPlayer.getStoredItems().addAll(event.getDrops());
// eliminations
ScenarioManager sm = gm.getScenarioManager();
if (!sm.isActivated(Scenario.SILENTNIGHT) || !((SilentNightListener) sm.getScenarioListener(Scenario.SILENTNIGHT)).isNightMode()) {
gm.broadcastInfoMessage(Lang.PLAYERS_ELIMINATED.replace("%player%", player.getName()));
}
if(cfg.getRegenHeadDropOnPlayerDeath()){
event.getDrops().add(UhcItems.createRegenHead(uhcPlayer));
}
if(cfg.getEnableGoldenHeads()){
if (cfg.getPlaceHeadOnFence() && !gm.getScenarioManager().isActivated(Scenario.TIMEBOMB)){
// place head on fence
Location loc = player.getLocation().clone().add(1,0,0);
loc.getBlock().setType(UniversalMaterial.OAK_FENCE.getType());
loc.add(0, 1, 0);
loc.getBlock().setType(UniversalMaterial.PLAYER_HEAD_BLOCK.getType());
Skull skull = (Skull) loc.getBlock().getState();
VersionUtils.getVersionUtils().setSkullOwner(skull, uhcPlayer);
skull.setRotation(BlockFace.NORTH);
skull.update();
}else{
event.getDrops().add(UhcItems.createGoldenHeadPlayerSkull(player.getName(), player.getUniqueId()));
}
}
if(cfg.getEnableExpDropOnDeath()){
UhcItems.spawnExtraXp(player.getLocation(), cfg.getExpDropOnDeath());
}
uhcPlayer.setState(PlayerState.DEAD);
pm.strikeLightning(uhcPlayer);
pm.playSoundPlayerDeath();
// handle player leaving the server
boolean canContinueToSpectate = player.hasPermission("uhc-core.spectate.override")
|| cfg.getCanSpectateAfterDeath();
if (!canContinueToSpectate) {
if (cfg.getEnableBungeeSupport()) {
Bukkit.getScheduler().runTaskAsynchronously(UhcCore.getPlugin(), new TimeBeforeSendBungeeThread(uhcPlayer, cfg.getTimeBeforeSendBungeeAfterDeath()));
} else {
player.kickPlayer(Lang.DISPLAY_MESSAGE_PREFIX + " " + Lang.KICK_DEAD);
}
}
pm.checkIfRemainingPlayers();
}
@SuppressWarnings("deprecation")
public void update(Map<String, Statistic> statistics, boolean forceBlocks, boolean delete) {
BlockFace2D rightDir = direction.right();
BlockFace2D leftDir = direction.left();
BlockFace rightFace = rightDir.getBlockFace3D();
BlockFace leftFace = leftDir.getBlockFace3D();
Block baseBlock = baseLocation.getBlock();
if (delete) {
baseBlock.setType(Material.AIR);
}
SignLayout layout = layoutConfig.getLayout();
Iterator<Entry<String, Statistic>> iterator = statistics != null ? statistics.entrySet().iterator() : null;
for (int i = 0; i < size.getStatisticAmount(); i++) {
Entry<String, Statistic> entry = iterator != null && iterator.hasNext() ? iterator.next() : null;
Block position = null;
Material type = null;
switch (i) {
case 0:
//Top
position = baseBlock.getRelative(BlockFace.UP);
type = Material.DIAMOND_BLOCK;
break;
case 1:
//First left
position = baseBlock.getRelative(leftFace);
type = Material.GOLD_BLOCK;
break;
case 2:
//First right
position = baseBlock.getRelative(rightFace);
type = Material.IRON_BLOCK;
break;
case 3:
//Second left
position = baseBlock.getRelative(leftFace, 2);
type = Material.DOUBLE_STEP;
break;
case 4:
//Second right
position = baseBlock.getRelative(rightFace, 2);
type = Material.DOUBLE_STEP;
break;
}
if (position == null) {
continue;
}
Block signBlock = position.getRelative(direction.getBlockFace3D());
Block skullBlock = position.getRelative(BlockFace.UP);
if (delete) {
signBlock.setType(Material.AIR);
skullBlock.setType(Material.AIR);
position.setType(Material.AIR);
continue;
}
if (baseBlock.getType() == Material.AIR || forceBlocks) {
baseBlock.setType(Material.DOUBLE_STEP);
}
if (position.getType() == Material.AIR || forceBlocks) {
position.setType(type);
}
if (entry == null) {
continue;
}
/* For legacy reasons and compatibility */
signBlock.setTypeId(Material.WALL_SIGN.getId(), false);
skullBlock.setTypeId(Material.SKULL.getId(), false);
Skull skull = (Skull) skullBlock.getState();
skull.setRotation(direction.getBlockFace3D());
skull.setSkullType(SkullType.PLAYER);
skull.setOwner(entry.getKey());
skull.setRawData(SKULL_ON_FLOOR);
skull.update(true, false);
Sign sign = (Sign) signBlock.getState();
Set<Variable> variables = Sets.newHashSet();
entry.getValue().supply(variables, null);
variables.add(new Variable("player", entry.getKey()));
variables.add(new Variable("rank", i + 1));
layout.inflate(sign, variables);
org.bukkit.material.Sign data = new org.bukkit.material.Sign(Material.WALL_SIGN);
data.setFacingDirection(direction.getBlockFace3D());
sign.setData(data);
sign.update();
}
}