Skip to content

Instantly share code, notes, and snippets.

@mlow
Created May 1, 2012 05:14
Show Gist options
  • Save mlow/2565267 to your computer and use it in GitHub Desktop.
Save mlow/2565267 to your computer and use it in GitHub Desktop.
Ooh, fancy
package net.darqy.TestPlugin;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
import net.minecraft.server.EntityHuman;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.material.Lever;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin implements Listener {
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onSignChange(SignChangeEvent e) {
if (e.getLine(0).equalsIgnoreCase("[init]")) {
if (!e.getPlayer().hasPermission("Some.node")) return;
if (e.getLine(1).equals("") || e.getLine(2).equals("")) return;
for(BlockFace bf : BlockFace.values()) {
Block block = e.getBlock().getRelative(bf);
if (block.getType().equals(Material.LEVER)) {
SwitchTask sTask = new SwitchTask(e.getPlayer(), block, e.getLine(2) + e.getLine(3));
sTask.setId(getServer().getScheduler().scheduleSyncRepeatingTask(this, sTask, 0, Long.parseLong(e.getLine(1))));
}
}
}
}
public static Boolean valueOf(int i) {
if (i == 1) return true;
else if (i == 0) return false;
else return null;
}
}
class SwitchTask implements Runnable {
private EntityHuman eh;
private Block block;
private int id;
private CharacterIterator it;
public SwitchTask(Player p, Block block, String str) {
this.eh = ((CraftPlayer) p).getHandle();
this.block = block;
this.it = new StringCharacterIterator(str);
}
public void setId(int id) {
this.id = id;
}
@Override
public void run() {
char c = it.next();
if (c != CharacterIterator.DONE) {
Lever lever = (Lever) block.getState().getData();
if (lever.isPowered() != Main.valueOf(Integer.parseInt(String.valueOf(c)))) {
net.minecraft.server.Block.byId[block.getTypeId()].interact(((CraftWorld) block.getWorld()).getHandle(), block.getX(), block.getY(), block.getZ(), eh);
}
} else {
Bukkit.getScheduler().cancelTask(id);
System.out.println("I'm done! :)");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment