package com.comphenix.xp.mods;
import org.bukkit.event.inventory.InventoryClickEvent;
import com.comphenix.xp.extra.ServiceProvider;
import com.comphenix.xp.listeners.PlayerInteractionListener;
import com.comphenix.xp.lookup.ItemQuery;
/**
* Represents a registry of custom block providers.
* <p>
* The default service will be the first to process inventory events.
*
* @author Kristian
*/
public class CustomBlockProviders extends ServiceProvider<BlockService> {
private PlayerInteractionListener lastInteraction;
public CustomBlockProviders() {
super(StandardBlockService.NAME);
}
/**
* Processes the given inventory click event with every registered block service,
* starting with the default block service.
* @param event - inventory click event to process.
* @param block - last right-clicked block.
*/
public BlockResponse processInventoryClick(InventoryClickEvent event, ItemQuery block) {
BlockService def = getDefaultService();
BlockResponse response = null;
// Try the default service first
if (isEnabled(def)) {
response = def.processClickEvent(event, block);
}
if (BlockResponse.isSuccessful(response))
return response;
// See if any other service can do it
for (BlockService service : getEnabledServices()) {
if (service != def) {
response = service.processClickEvent(event, block);
// Check for success
if (BlockResponse.isSuccessful(response))
return response;
}
}
// Failure
return new BlockResponse(false);
}
public PlayerInteractionListener getLastInteraction() {
return lastInteraction;
}
public void setLastInteraction(PlayerInteractionListener lastInteraction) {
this.lastInteraction = lastInteraction;
}
/**
* Retrieves the standard block service.
* @return Standard block service.
*/
public StandardBlockService getStandardBlockService() {
return (StandardBlockService) getByName(StandardBlockService.NAME);
}
}