Skip to content

Commit

Permalink
Fix a bug, then add force respawn expression
Browse files Browse the repository at this point in the history
  • Loading branch information
bensku committed Nov 1, 2016
1 parent 4197cd4 commit 904efaa
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/main/java/ch/njol/skript/ScriptLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -282,9 +282,9 @@ private final static void enableScript(ParserInstance pi, ScriptInfo i, CommandS
SkriptEventHandler.addSelfRegisteringTrigger(trigger.getValue());
}
for (ParseLogHandler log : pi.errorLogs) {
if (viewer instanceof ConsoleCommandSender)
if (viewer instanceof ConsoleCommandSender) // Console -> normal logging
log.printError();
else
else if (log.hasError()) // Non-console -> ugly hack
viewer.sendMessage(Skript.SKRIPT_PREFIX + Utils.replaceEnglishChatStyles(log.getError().getMessage()));
//log.stop();
}
Expand Down
90 changes: 90 additions & 0 deletions src/main/java/ch/njol/skript/effects/EffRespawn.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/*
* This file is part of Skript.
*
* Skript is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Skript is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Skript. If not, see <http://www.gnu.org/licenses/>.
*
*
* Copyright 2011-2016 Peter Güttinger and contributors
*
*/

package ch.njol.skript.effects;

import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerLoginEvent.Result;
import org.bukkit.scheduler.BukkitRunnable;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.Skript;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.Since;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;

@Name("Force Respawn")
@Description("Forces player(s) to respawn if they are dead. If this is called without delay from death event, one tick is waited before respawn attempt.")
@Examples({"on death of player:",
" force event-player to respawn",})
@Since("2.2-dev21")
public class EffRespawn extends Effect {

static {
Skript.registerEffect(EffRespawn.class, "force %players% to respawn");
}

@SuppressWarnings("null")
private Expression<Player> players;
private boolean hasDelay;

@SuppressWarnings({"unchecked", "null"})
@Override
public boolean init(final Expression<?>[] exprs, final int matchedPattern, final Kleenean isDelayed, final ParseResult parseResult) {
players = (Expression<Player>) exprs[0];
if (pi.isCurrentEvent(PlayerDeathEvent.class) && pi.hasDelayBefore.isTrue()) // Then we will internally force you to wait
hasDelay = true;

return true;
}

@Override
public String toString(final @Nullable Event e, final boolean debug) {
return "respawn " + players.toString(e, debug);
}

@Override
protected void execute(final Event e) {
for (final Player p : players.getArray(e)) {
if (hasDelay) { // Use Bukkit runnable
new BukkitRunnable() {

@Override
public void run() {
p.spigot().respawn();
}

}.runTaskLater(Skript.getInstance(), 1);
} else { // Just respawn
p.spigot().respawn();
}
}
}
}

0 comments on commit 904efaa

Please sign in to comment.