Program: 7630
Project: 7630
Buggy source:
public void moveTo(BlockPosition pos,int step){
switch (step) {
case 0:
    typeid=world.getBlockTypeIdAt(block.getLocation());
  material=Material.getMaterial(typeid);
data=block.getData();
if (material.equals(Material.AIR)) {
plugin.log.log(Level.SEVERE,"String_Node_Str");
block=block.getWorld().getBlockAt(block.getLocation());
material=Material.COBBLESTONE;
data=0;
}
if (material.toString().contains("String_Node_Str")) {
Sign s=(Sign)block.getState();
for (int i=0; i < s.getLines().length; i++) {
signText.add(s.getLine(i));
}
}
break;
case 1:
block.setType(Material.AIR);
if (block.getRelative(BlockFace.DOWN).getType().equals(Material.WOOD_PLATE)) {
block.getRelative(BlockFace.DOWN).setData((byte)0);
}
break;
case 2:
block=pos.getWorld().getBlockAt(pos.toLocation());
block.setTypeId(typeid);
block.setData(data);
if (material.toString().contains("String_Node_Str")) {
Sign s=(Sign)block.getState();
int i=0;
for (String line : signText) {
s.setLine(i,line);
i++;
}
signText.clear();
}
break;
}
}

Fixed version (ground truth):
public void moveTo(BlockPosition pos,int step){
  BlockState state;
switch (step) {
case 0:
    typeid=world.getBlockTypeIdAt(block.getLocation());
  material=Material.getMaterial(typeid);
data=block.getData();
state=block.getState();
if (material.equals(Material.AIR)) {
plugin.log.log(Level.SEVERE,"String_Node_Str");
block=block.getWorld().getBlockAt(block.getLocation());
material=Material.COBBLESTONE;
data=0;
}
if (state instanceof Sign) {
Sign s=(Sign)state;
for (int i=0; i < s.getLines().length; i++) {
signText.add(s.getLine(i));
}
}
if (state instanceof Chest) {
Chest chest=(Chest)state;
inventory=InventoryCopy(chest.getInventory().getContents());
chest.getInventory().clear();
}
if (state instanceof Dispenser) {
Dispenser dispenser=(Dispenser)state;
inventory=InventoryCopy(dispenser.getInventory().getContents());
dispenser.getInventory().clear();
}
if (state instanceof Furnace) {
Furnace furnace=(Furnace)state;
burnTime=furnace.getBurnTime();
cookTime=furnace.getCookTime();
inventory=InventoryCopy(furnace.getInventory().getContents());
furnace.getInventory().clear();
furnace.setCookTime((short)0);
furnace.setBurnTime((short)0);
}
if (state instanceof CreatureSpawner) {
CreatureSpawner spawner=(CreatureSpawner)state;
creature=spawner.getCreatureType();
delay=spawner.getDelay();
}
if (state instanceof Jukebox) {
Jukebox jukebox=(Jukebox)state;
record=jukebox.getPlaying();
}
if (state instanceof NoteBlock) {
NoteBlock noteBlock=(NoteBlock)state;
note=noteBlock.getNote();
}
break;
case 1:
block.setType(Material.AIR);
if (block.getRelative(BlockFace.DOWN).getType().equals(Material.WOOD_PLATE)) {
block.getRelative(BlockFace.DOWN).setData((byte)0);
}
break;
case 2:
block=pos.getWorld().getBlockAt(pos.toLocation());
block.setTypeId(typeid);
block.setData(data);
state=block.getState();
if (state instanceof Sign) {
Sign s=(Sign)block.getState();
int i=0;
for (String line : signText) {
s.setLine(i,line);
i++;
}
signText.clear();
}
if (state instanceof Chest) {
Chest chest=(Chest)block.getState();
chest.getInventory().setContents(InventoryCopy(inventory));
}
if (state instanceof Dispenser) {
Dispenser dispenser=(Dispenser)block.getState();
dispenser.getInventory().setContents(InventoryCopy(inventory));
}
if (state instanceof Furnace) {
Furnace furnace=(Furnace)block.getState();
furnace.setBurnTime(burnTime);
furnace.setCookTime(cookTime);
furnace.getInventory().setContents(InventoryCopy(inventory));
}
if (state instanceof CreatureSpawner) {
CreatureSpawner spawner=(CreatureSpawner)state;
spawner.setCreatureType(creature);
spawner.setDelay(delay);
}
if (state instanceof Jukebox) {
Jukebox jukebox=(Jukebox)state;
jukebox.setPlaying(record);
}
if (state instanceof NoteBlock) {
NoteBlock noteBlock=(NoteBlock)state;
noteBlock.setNote(note);
}
break;
}
}