/*
* Copyright (C) 2013-2016 Gonçalo Baltazar <me@goncalomb.com>
*
* This file is part of NBTEditor.
*
* NBTEditor 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.
*
* NBTEditor 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 NBTEditor. If not, see <http://www.gnu.org/licenses/>.
*/
package com.goncalomb.bukkit.nbteditor.bos;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockDispenseEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import com.goncalomb.bukkit.customitems.api.CustomItem;
import com.goncalomb.bukkit.customitems.api.DispenserDetails;
import com.goncalomb.bukkit.customitems.api.PlayerDetails;
import com.goncalomb.bukkit.mylib.utils.UtilsMc;
import com.goncalomb.bukkit.nbteditor.nbt.FallingBlockNBT;
import com.goncalomb.bukkit.nbteditor.nbt.MinecartSpawnerNBT;
final class BookOfSoulsCI extends CustomItem {
public BookOfSoulsCI() {
super("bos", ChatColor.AQUA + "Book of Souls", Material.WRITTEN_BOOK);
}
@Override
public void onLeftClick(PlayerInteractEvent event, PlayerDetails details) {
Player player = event.getPlayer();
BookOfSouls bos = BookOfSouls.getFromBook(event.getItem());
if (bos == null) {
player.sendMessage("§cThat Book of Souls is corrupted!");
return;
}
Location location = null;
if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
Block block = event.getClickedBlock();
if (bos.getEntityNBT() instanceof MinecartSpawnerNBT && block.getType() == Material.MOB_SPAWNER) {
if (event.getPlayer().isSneaking()) {
((MinecartSpawnerNBT) bos.getEntityNBT()).copyToSpawner(block);
player.sendMessage("§aVariables and entities copied to the spawner.");
} else {
((MinecartSpawnerNBT) bos.getEntityNBT()).copyFromSpawner(block);
bos.saveBook();
player.sendMessage("§aVariables and entities copied from the spawner.");
}
event.setCancelled(true);
return;
} else if (event.getPlayer().isSneaking() && bos.getEntityNBT() instanceof FallingBlockNBT) {
((FallingBlockNBT) bos.getEntityNBT()).copyFromTileEntity(block);
bos.saveBook();
player.sendMessage("§aBlock copied.");
event.setCancelled(true);
return;
}
location = event.getClickedBlock().getLocation().add(UtilsMc.faceToDelta(event.getBlockFace(), 0.5d));
} else {
Block block = UtilsMc.getTargetBlock(player);
if (block.getType() != Material.AIR) {
location = UtilsMc.airLocation(block.getLocation()).add(0.0d, 0.3d, 0.0d);
}
}
if (location != null) {
bos.getEntityNBT().spawn(location);
event.setCancelled(true);
} else {
player.sendMessage("§cNo block in sight!");
}
return;
};
@Override
public void onDispense(BlockDispenseEvent event, DispenserDetails details) {
BookOfSouls bos = BookOfSouls.getFromBook(event.getItem());
if (bos != null) {
bos.getEntityNBT().spawn(details.getLocation());
}
event.setCancelled(true);
}
@Override
public ItemStack getItem() {
return null;
}
}