use of org.bukkit.block.Block in project Prism-Bukkit by prism.
the class PrismBlockEvents method onBlockForm.
/**
*
* @param event
*/
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockForm(final BlockFormEvent event) {
if (!Prism.getIgnore().event("block-form", event.getBlock()))
return;
final Block b = event.getBlock();
final BlockState s = event.getNewState();
RecordingQueue.addToQueue(ActionFactory.createBlockChange("block-form", b.getLocation(), b.getTypeId(), b.getData(), s.getTypeId(), s.getRawData(), "Environment"));
}
use of org.bukkit.block.Block in project Prism-Bukkit by prism.
the class PrismBlockEvents method onBlockFromTo.
/**
*
* @param event
*/
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockFromTo(final BlockFromToEvent event) {
// Ignore blocks that aren't liquid. @todo what else triggers this?
if (!event.getBlock().isLiquid())
return;
final BlockState from = event.getBlock().getState();
final BlockState to = event.getToBlock().getState();
// Watch for blocks that the liquid can break
if (me.botsko.elixr.BlockUtils.canFlowBreakMaterial(to.getType())) {
if (from.getType() == Material.STATIONARY_WATER || from.getType() == Material.WATER) {
if (Prism.getIgnore().event("water-break", event.getBlock())) {
RecordingQueue.addToQueue(ActionFactory.createBlock("water-break", event.getToBlock(), "Water"));
}
} else if (from.getType() == Material.STATIONARY_LAVA || from.getType() == Material.LAVA) {
if (Prism.getIgnore().event("lava-break", event.getBlock())) {
RecordingQueue.addToQueue(ActionFactory.createBlock("lava-break", event.getToBlock(), "Lava"));
}
}
}
// Record water flow
if (from.getType() == Material.STATIONARY_WATER || from.getType() == Material.WATER) {
if (Prism.getIgnore().event("water-flow", event.getBlock())) {
RecordingQueue.addToQueue(ActionFactory.createBlock("water-flow", event.getBlock(), "Water"));
}
}
// Record lava flow
if (from.getType() == Material.STATIONARY_LAVA || from.getType() == Material.LAVA) {
if (Prism.getIgnore().event("lava-flow", event.getBlock())) {
RecordingQueue.addToQueue(ActionFactory.createBlock("lava-flow", event.getBlock(), "Lava"));
}
}
/**
* Predict the forming of Stone, Obsidian, Cobblestone because of
* lava/water flowing into each other. Boy, I wish bukkit used
* block_form for this.
*/
if (!Prism.getIgnore().event("block-form", event.getBlock()))
return;
// Lava flows to water. STONE forms
if (from.getType().equals(Material.STATIONARY_LAVA) && to.getType().equals(Material.STATIONARY_WATER)) {
final Block newTo = event.getToBlock();
newTo.setType(Material.STONE);
RecordingQueue.addToQueue(ActionFactory.createBlock("block-form", newTo, "Environment"));
}
// // int id = event.getBlock().getTypeId();
//
// // If moving to air
// Block b = event.getToBlock();
// if(b.getType().equals(Material.AIR)){
//
// // formed sat/lava = cobble
// // formed stationary_water = stone
//
// // Are we moving from a water block
// Material fromM = event.getBlock().getType();
// if(fromM.equals(Material.WATER) ||
// fromM.equals(Material.STATIONARY_WATER)){
// // Check all sides
// for(BlockFace face : BlockFace.values()){
// Block r = b.getRelative(face, 1);
// // If the side is lava, cobble shall form.
// // Note: if stationary_lava, stone will form. Seems to always be
// captured above.
// if(r.getType().equals(Material.LAVA) ||
// r.getType().equals(Material.STATIONARY_LAVA)){
// String coordsKey = r.getX()+":"+r.getY()+":"+r.getZ();
// if(coordsUsed.contains(coordsKey)) continue;
// coordsUsed.add(coordsKey);
// Prism.debug("COBBLE FORMED " + r.getType().name());
// // r.setType(Material.COBBLESTONE);
// plugin.actionsRecorder.addToQueue( new
// BlockAction(ActionType.BLOCK_FORM, r, "Environment") );
// }
// }
// }
// }
//
//
// // Water flowing into lava forms obsidian or cobble
// if ( from.getType().equals(Material.STATIONARY_WATER) &&
// to.getType().equals(Material.STATIONARY_LAVA) ) {
// Prism.debug("FROM WATER to " + to.getType().name());
// BlockState lower =
// event.getToBlock().getRelative(BlockFace.DOWN).getState();
// // Obsidian can form below
// if( lower.getType().equals(Material.OBSIDIAN) ){
// String coordsKey = lower.getX()+":"+lower.getY()+":"+lower.getZ();
// if(coordsUsed.contains(coordsKey)) return;
// // Add coords to list the event has already fired for
// coordsUsed.add(coordsKey);
// Prism.debug("COBBLE/OBY FORMED BELOW " + coordsKey);
// plugin.actionsRecorder.addToQueue( new
// BlockAction(ActionType.BLOCK_FORM, lower.getBlock(), "Environment")
// );
// }
//
// }
}
use of org.bukkit.block.Block in project Prism-Bukkit by prism.
the class PrismBlockEvents method onBlockPlace.
/**
*
* @param event
*/
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockPlace(final BlockPlaceEvent event) {
final Player player = event.getPlayer();
final Block block = event.getBlock();
if (!Prism.getIgnore().event("block-place", player))
return;
if (block.getType().equals(Material.AIR))
return;
final BlockState s = event.getBlockReplacedState();
RecordingQueue.addToQueue(ActionFactory.createBlockChange("block-place", block.getLocation(), s.getTypeId(), s.getRawData(), block.getTypeId(), block.getData(), player.getName()));
// Pass to the placement alerter
if (!player.hasPermission("prism.alerts.use.place.ignore") && !player.hasPermission("prism.alerts.ignore")) {
plugin.useMonitor.alertOnBlockPlacement(player, block);
}
}
use of org.bukkit.block.Block in project HawkEye by oliverwoodings.
the class Undo method run.
/**
* Run the undo.
* Contains appropriate methods of catching errors and notifying the player
*/
public void run() {
//Start rollback process
int i = 0;
while (i < 200 && undoQueue.hasNext()) {
//If undo doesn't exist
DataEntry entry = undoQueue.next();
if (entry.getUndoState() == null)
continue;
//Global undo
if (undoType == RollbackType.GLOBAL) {
entry.getUndoState().update(true);
//Add back into database if delete data is on
if (Config.DeleteDataOnRollback)
DataManager.addEntry(entry);
} else //Player undo
{
Player player = (Player) session.getSender();
Block block = entry.getUndoState().getBlock();
player.sendBlockChange(block.getLocation(), block.getType(), block.getData());
}
counter++;
}
//Check if undo is finished
if (!undoQueue.hasNext()) {
//End timer
Bukkit.getServer().getScheduler().cancelTask(timerID);
session.setDoingRollback(false);
session.setRollbackResults(null);
Util.sendMessage(session.getSender(), "&cUndo complete, &7" + counter + " &cedits performed");
Util.debug("Undo complete, " + counter + " edits performed");
}
}
use of org.bukkit.block.Block in project HawkEye by oliverwoodings.
the class Rebuild method run.
/**
* Run the rollback.
* Contains appropriate methods of catching errors and notifying the player
*/
public void run() {
//Start rollback process
int i = 0;
while (i < 200 && rebuildQueue.hasNext()) {
i++;
DataEntry entry = rebuildQueue.next();
//If the action can't be rolled back, skip this entry
if (entry.getType() == null || !entry.getType().canRollback())
continue;
//If the world doesn't exist, skip this entry
World world = HawkEye.server.getWorld(entry.getWorld());
if (world == null)
continue;
//Get some data from the entry
Location loc = new Location(world, entry.getX(), entry.getY(), entry.getZ());
Block block = world.getBlockAt(loc);
//Rebuild it
entry.rebuild(block);
counter++;
}
//Check if rollback is finished
if (!rebuildQueue.hasNext()) {
//End timer
Bukkit.getServer().getScheduler().cancelTask(timerID);
session.setDoingRollback(false);
session.setRollbackResults(undo);
Util.sendMessage(session.getSender(), "&cRebuild complete, &7" + counter + "&c edits performed");
Util.sendMessage(session.getSender(), "&cUndo this rebuild using &7/hawk undo");
Util.debug("Rebuild complete, " + counter + " edits performed");
}
}
Aggregations