package mods.eln.item.electricalitem;
import mods.eln.Eln;
import mods.eln.generic.GenericItemUsingDamageDescriptor;
import mods.eln.sixnode.lampsocket.LightBlockEntity;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public abstract class LampItem extends GenericItemUsingDamageDescriptor {
abstract int getLightState(ItemStack stack);
abstract int getRange(ItemStack stack);
abstract int getLight(ItemStack stack);
public LampItem(String name) {
super(name);
}
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) {
if (world.isRemote) return;
if (getLightState(stack) == 0) return;
int light = getLight(stack);
if (light == 0) return;
for (int yOffset = 0; yOffset < 2; yOffset++) {
double x = entity.posX, y = entity.posY + 1.62 - yOffset, z = entity.posZ;
Vec3 v = entity.getLookVec();
v.xCoord *= 0.25;
v.yCoord *= 0.25;
v.zCoord *= 0.25;
int range = getRange(stack) + 1;
int rCount = 0;
for (int idx = 0; idx < range; idx++) {
x += v.xCoord;
y += v.yCoord;
z += v.zCoord;
Block block = world.getBlock(MathHelper.floor_double(x), MathHelper.floor_double(y), MathHelper.floor_double(z));
if (block != Blocks.air && block != Eln.instance.lightBlock /*&& Block.blocksList[blockId].isOpaqueCube() == false*/) {
x -= v.xCoord;
y -= v.yCoord;
z -= v.zCoord;
break;
}
rCount++;
}
while (rCount > 0) {
Block block = world.getBlock(MathHelper.floor_double(x), MathHelper.floor_double(y), MathHelper.floor_double(z));
if (block == Blocks.air || block == Eln.instance.lightBlock) {
//break;
LightBlockEntity.addLight(world, MathHelper.floor_double(x), MathHelper.floor_double(y), MathHelper.floor_double(z), light, 10);
return;/*
x -= v.xCoord * 4;
y -= v.yCoord * 4;
z -= v.zCoord * 4;
rCount -= 4;*/
}
x -= v.xCoord;
y -= v.yCoord;
z -= v.zCoord;
rCount--;
}
}
}
}