/*
* Minecraft Forge
* Copyright (c) 2016.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation version 2.1
* of the License.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.minecraftforge.server.permission.context;
import com.google.common.base.Preconditions;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import javax.annotation.Nullable;
public class BlockPosContext extends PlayerContext
{
private final BlockPos blockPos;
private IBlockState blockState;
private EnumFacing facing;
public BlockPosContext(EntityPlayer ep, BlockPos pos, @Nullable IBlockState state, @Nullable EnumFacing f)
{
super(ep);
blockPos = Preconditions.checkNotNull(pos, "BlockPos can't be null in BlockPosContext!");
blockState = state;
facing = f;
}
public BlockPosContext(EntityPlayer ep, ChunkPos pos)
{
this(ep, new BlockPos((pos.chunkXPos << 4) + 8, 0, (pos.chunkZPos << 4) + 8), null, null);
}
@Override
@Nullable
public <T> T get(ContextKey<T> key)
{
if(key.equals(ContextKeys.POS))
{
return (T) blockPos;
}
else if(key.equals(ContextKeys.BLOCK_STATE))
{
if(blockState == null)
{
blockState = getWorld().getBlockState(blockPos);
}
return (T) blockState;
}
else if(key.equals(ContextKeys.FACING))
{
return (T) facing;
}
return super.get(key);
}
@Override
protected boolean covers(ContextKey<?> key)
{
return key.equals(ContextKeys.POS) || key.equals(ContextKeys.BLOCK_STATE) || (facing != null && key.equals(ContextKeys.FACING));
}
}