Created
July 18, 2013 22:21
-
-
Save ucchyocean/6033639 to your computer and use it in GitHub Desktop.
ゲームオーバー画面のスキップ
This file contains 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 characters
/* | |
* @author ucchy | |
* @license LGPLv3 | |
* @copyright Copyright ucchy 2013 | |
*/ | |
package jp.ucchy.rs; | |
import org.bukkit.Location; | |
import org.bukkit.World; | |
import org.bukkit.entity.Player; | |
import org.bukkit.event.EventHandler; | |
import org.bukkit.event.Listener; | |
import org.bukkit.event.entity.PlayerDeathEvent; | |
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; | |
import org.bukkit.plugin.java.JavaPlugin; | |
import org.bukkit.util.Vector; | |
/** | |
* リスポーンスキッパー | |
* @author ucchy | |
*/ | |
public class RespawnSkiper extends JavaPlugin implements Listener { | |
@Override | |
public void onEnable() { | |
getServer().getPluginManager().registerEvents(this, this); | |
} | |
@EventHandler | |
public void onPlayerDeath(PlayerDeathEvent event) { | |
Player player = event.getEntity(); | |
// NOTE: PlayerDeathEvent発生時に体力を回復すると、ゲームオーバー画面が出ない | |
player.setHealth(player.getMaxHealth()); | |
// 正確にリスポーンを再現するには、他にもいろいろ実行する必要がある。 | |
// 空気とスタミナの回復 | |
player.setRemainingAir(player.getMaximumAir()); | |
player.setFoodLevel(20); | |
// リスポーン場所への転送 | |
Location loc = player.getBedSpawnLocation(); | |
if ( loc == null ) { | |
World world = player.getLocation().getWorld(); | |
loc = world.getSpawnLocation(); | |
} | |
if ( loc != null ) { | |
player.teleport(loc, TeleportCause.PLUGIN); // 転送 | |
player.setVelocity(new Vector()); // ノックバックの除去 | |
} | |
} | |
} |
プレイヤーの状況リセット処理は、EntityPlayer#reset が呼び出されているので、その内容が参考になるだろう。
(上の例では、FireTicksやFallDistance、各種ポーションの効果削除などが実装されていないので、リスポーン後に残る。)
https://github.com/Bukkit/CraftBukkit/blob/master/src/main/java/net/minecraft/server/EntityPlayer.java#L910
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
ゲームオーバー画面を経由しないので、PlayerRespawnEvent は発生しない。