package com.hbm.interfaces;

import net.minecraft.world.World;

public interface IBomb {
	/////////////people
	
	
	
	//Months later I found this joke again
	//I'm not even sorry
	
	/**
	 * Triggers the bomb and generates a return code. Since most bombs have a serverside inventory, the return code
	 * should only be processed serverside, what's returned on the client should be ignored.
	 * Ofen invoked by onNeighborBlockChanged, so in any case make sure to check for world-remoteness.
	 * @param world
	 * @param x
	 * @param y
	 * @param z
	 * @return
	 */
	public BombReturnCode explode(World world, int x, int y, int z);
	
	public static enum BombReturnCode {
		UNDEFINED(false, ""),										//non-null type for passing to clients that don't process the return code
		DETONATED(true, "bomb.detonated"),							//success for blowing up bombs
		TRIGGERED(true, "bomb.triggered"),							//success for triggering other things
		LAUNCHED(true, "bomb.launched"),							//success for launching missiles
		ERROR_MISSING_COMPONENT(false, "bomb.missingComponent"),	//error for bomb parts missing
		ERROR_INCOMPATIBLE(false, "bomb.incompatible"),				//error for target being incompatible (but still implements IBomb for some reason), like locked blast doors
		ERROR_NO_BOMB(false, "bomb.nobomb");						//not to be used by the bombs themselves, this is the generic error when trying to trigger no-bomb blocks
		
		private String unloc;
		private boolean success;
		
		private BombReturnCode(boolean success, String unloc) {
			this.unloc = unloc;
			this.success = success;
		}
		
		public String getUnlocalizedMessage() {
			return this.unloc;
		}
		
		public boolean wasSuccessful() {
			return this.success;
		}
	}
}
