下面列出了net.minecraft.util.math.AxisAlignedBB#intersects ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@SubscribeEvent
public void onRocketLand(RocketLandedEvent event) {
EntityRocketBase rocket = (EntityRocketBase)event.getEntity();
AxisAlignedBB bbCache = new AxisAlignedBB(this.getPos().add(-1,0,-1), this.getPos().add(1,2,1));
if(bbCache.intersects(rocket.getEntityBoundingBox())) {
if(!world.isRemote)
for(IInfrastructure infrastructure : getConnectedInfrastructure()) {
rocket.linkInfrastructure(infrastructure);
}
ItemStack stack = getStackInSlot(0);
if(stack.getItem() == LibVulpesItems.itemLinker && ItemLinker.getDimId(stack) != -1 &&
event.getEntity() instanceof EntityRocket) {
((EntityRocket)rocket).setOverriddenCoords(ItemLinker.getDimId(stack),
ItemLinker.getMasterX(stack) + 0.5f, Configuration.orbit, ItemLinker.getMasterZ(stack) + 0.5f);
}
}
}
@SubscribeEvent
public void onRocketLaunch(RocketPreLaunchEvent event) {
ItemStack stack = getStackInSlot(0);
if(stack.getItem() == LibVulpesItems.itemLinker && ItemLinker.getDimId(stack) != -1) {
EntityRocketBase rocket = (EntityRocketBase)event.getEntity();
AxisAlignedBB bbCache = new AxisAlignedBB(this.getPos().add(-1,0,-1), this.getPos().add(1,2,1));
if(bbCache.intersects(rocket.getEntityBoundingBox())) {
if(event.getEntity() instanceof EntityRocket) {
((EntityRocket)rocket).setOverriddenCoords(ItemLinker.getDimId(stack),
ItemLinker.getMasterX(stack) + 0.5f, Configuration.orbit, ItemLinker.getMasterZ(stack) + 0.5f);
}
}
}
}
@SubscribeEvent
public void onRocketDismantle(RocketDismantleEvent event) {
if(!world.isRemote && world.provider.getDimension() == Configuration.spaceDimId) {
EntityRocketBase rocket = (EntityRocketBase)event.getEntity();
AxisAlignedBB bbCache = new AxisAlignedBB(this.getPos().add(-1,0,-1), this.getPos().add(1,2,1));
if(bbCache.intersects(rocket.getEntityBoundingBox())) {
ISpaceObject spaceObj = SpaceObjectManager.getSpaceManager().getSpaceStationFromBlockCoords(pos);
if(spaceObj instanceof SpaceObject) {
((SpaceObject)spaceObj).setPadStatus(pos, false);
}
}
}
}
@Override
public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entityIn, boolean isActualState) {
for (Cuboid6 axisAlignedBB : getCollisionBox(worldIn, pos)) {
AxisAlignedBB offsetBox = axisAlignedBB.aabb().offset(pos);
if (offsetBox.intersects(entityBox)) collidingBoxes.add(offsetBox);
}
}
@Override
public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entityIn, boolean isActualState) {
for (Cuboid6 axisAlignedBB : getCollisionBox(worldIn, pos)) {
AxisAlignedBB offsetBox = axisAlignedBB.aabb().offset(pos);
if (offsetBox.intersects(entityBox)) collidingBoxes.add(offsetBox);
}
}
public static void run(World world, BlockPos pos, Block block, Entity entity, Predicate<Entity> test, Consumer<Entity> process) {
if (!(block instanceof IFluidBlock)) return;
float height;
IBlockState up = world.getBlockState(pos.up());
if (up.getMaterial().isLiquid() || up.getBlock() instanceof IFluidBlock)
height = 1f;
else
height = ((IFluidBlock) block).getFilledPercentage(world, pos) * 0.875f;
AxisAlignedBB bb = new AxisAlignedBB(pos).contract(0, 1 - height, 0);
AxisAlignedBB entityBox = entity.getCollisionBoundingBox();
if ((entityBox == null || entityBox.intersects(bb))
&& test.test(entity)) process.accept(entity);
}
public static void run(World world, BlockPos pos, Block block, Entity entity, Predicate<Entity> test, Consumer<Entity> process) {
if (!(block instanceof IFluidBlock)) return;
float height;
IBlockState up = world.getBlockState(pos.up());
if (up.getMaterial().isLiquid() || up.getBlock() instanceof IFluidBlock)
height = 1f;
else
height = ((IFluidBlock) block).getFilledPercentage(world, pos) * 0.875f;
AxisAlignedBB bb = new AxisAlignedBB(pos).contract(0, 1 - height, 0);
AxisAlignedBB entityBox = entity.getCollisionBoundingBox();
if ((entityBox == null || entityBox.intersects(bb))
&& test.test(entity)) process.accept(entity);
}
@Override
public boolean intersects(AxisAlignedBB aabb) {
//if(chunk == null || true)
// return super.intersectsWith(aabb);
boolean collides = false;
double diffX = 0;//((this.maxX - this.minX) - chunk.sizeX)/2f;
double diffZ = 0;//((this.maxX - this.minX) - chunk.sizeX)/2f;
out:
for(int x = 0; x < chunk.blocks.length; x++) {
for(int y = 0; y < chunk.blocks[0].length; y++) {
for(int z = 0; z < chunk.blocks[0][0].length; z++) {
Block block = chunk.blocks[x][y][z];
if(!block.getDefaultState().getMaterial().isSolid())
continue;
AxisAlignedBB bb = block.getDefaultState().getCollisionBoundingBox(chunk.world, new BlockPos(x,y,z));
if(bb == null)
continue;
bb = bb.offset(this.minX + x + diffX, this.minY + y, this.minZ + z + diffZ);
if(bb.intersects(aabb)) {
collides = true;
break out;
}
}
}
}
return collides;
}